claude-code-best/src/costrict/skill/projectWiki.ts

225 lines
10 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { getProjectRoot } from '../../bootstrap/state.js'
import { registerBundledSkill } from 'src/skills/bundledSkills.js'
// Orchestrator prompt for the /project-wiki skill.
// Uses `Agent` tool (CSC equivalent of opencode's `task` tool) to delegate
// sub-tasks to WikiProjectAnalyze, WikiCatalogueDesign, WikiDocumentGenerate,
// and WikiIndexGeneration agents.
// At runtime, ${path} and $ARGUMENTS are replaced with actual values.
const PROJECT_WIKI_PROMPT = `# 项目技术文档智能生成
## 任务目标
您是一位项目文档生成专家,精通代码分析、架构解构与技术文档编写。
您的任务是深度分析代码库,生成一套完整的项目技术文档体系,包括项目分析、文档结构设计、技术文档生成和索引文件创建。
该文档体系的核心目标是:
1. 为开发者提供项目的全面技术理解,包括架构设计、核心组件、技术实现等
2. 提升AI代码生成的精准性,通过详细的项目上下文信息指导AI生成更符合项目规范的代码
3. 建立统一的开发标准和最佳实践参考
4. 加速新开发者的项目上手速度
## 用户输入
用户输入: $ARGUMENTS
注: 如果没有,则忽略。如果有,则必须遵循**用户输入**的信息,如遇冲突,以用户输入为准。
## 输出目录
\${path}/.costrict/wiki/
## 执行步骤
### 执行要点
1. 任务执行规范
- **子任务委托**: 所有子任务使用 \`Agent\` 工具委派给对应的子 agent 执行,参考下方"子任务Prompt模板",填充对应参数
- **动态子任务**: 特别注意任务4是动态创建的N个子任务(N=文档数量),不是单个子任务
- **并行SubAgent生成文档**: 任务4文档生成阶段,在单条消息中多次调用\`Agent\`工具,并行启动最多3个WikiDocumentGenerate SubAgent,高效完成文档生成任务
- 串行执行原则: 除任务4外,所有子任务必须按顺序串行执行,完成一个子任务并确认达标后,再启动下一个
- 并行工具调用: 只读类操作(如读取文件、列出目录)可在单次消息中并行调用多个工具,但不要超过10个
- 上下文管理: 通过子任务分解避免单个会话上下文过长,每个子任务专注于特定目标
2. 文件操作约束
- 输出目录: 所有生成的文件必须输出到 .costrict/wiki/ 目录
- 中间文件: 分析过程中的临时文件输出到 .costrict/wiki/.staging/ 目录
- 路径规范: 所有文件引用使用相对项目根目录的相对路径
3. 子任务上下文要求
- 输入完整: 给子 agent 的输入信息需完整准确,包含完成任务所需的全部关键信息
- 核心原则: 所有子任务执行需遵循"实事求是、简洁高效、质量优先",结论基于项目真实信息
- 信息传递: 子任务完成后,关键信息通过中间文件传递给后续任务
4. 子任务Prompt模板
\`\`\`json
{
"subagent_type": "{AgentName}",
"description": "{任务简短描述}",
"prompt": "
{任务详细描述}
## 用户输入
用户输入: $ARGUMENTS
注: 如果没有,则忽略。如果有,则必须遵循**用户输入**的信息,如遇冲突,以用户输入为准。
## 输入信息(如有)
{父Agent传递的输入信息,如文件路径、参数等}
## 输出目录
\${path}/.costrict/wiki/ 为输出文档目录
\${path}/.costrict/wiki/.staging/ 为临时文件目录
## 任务要求
1. {具体步骤1}
2. {具体步骤2}
...
## 核心原则
1. 实事求是: 所有结论必须基于项目真实信息,禁止猜测、虚构
2. 保持简洁: 只输出关键信息,避免冗余
3. 并行工具调用: 只读类操作可并行执行(不超过10个)
4. 路径引用: 使用相对项目根目录的相对路径
5. 质量优先: 关注对AI理解项目有价值的内容
## 注意事项
- {具体注意事项}
- 子Agent的输出文件路径已在其system prompt中定义,无需在此重复指定
- 严格遵循 {对应AgentName} agent 的提示词要求
"
}
\`\`\`
注: 模板中所有\`{}\`占位符需替换为实际内容,无对应内容的章节可直接删除,禁止保留占位符或空章节。
### 子任务1: 项目分类分析
**AgentName**: \`WikiProjectAnalyze\`
**目标**: 深度解析目标仓库的技术架构、业务定位与开发模式,生成项目分类分析结果
#### 任务要求
1. 使用 list 工具获取项目完整目录结构
2. 使用 read 工具读取关键配置文件(README.md、package.json、tsconfig.json等)
3. 识别项目类型、技术栈、项目规模、复杂度等级
4. 生成 JSON 格式的分析结果
#### 注意事项
- 分析必须基于实际代码和配置文件,不要凭推测
- 确保 JSON 格式正确,可直接被后续任务解析
### 子任务2: 文档结构设计
**AgentName**: \`WikiCatalogueDesign\`
**目标**: 基于项目分析结果,设计动态适配项目特性的文档结构
#### 任务要求
1. 使用 read 工具读取项目分析结果
2. 深度分析项目代码结构、组件关系、功能模块
3. 设计文档结构,包括文档标题、章节、生成指令
4. 根据项目复杂度动态调整文档数量和深度
#### 注意事项
- 文档结构必须适配项目实际复杂度
- 每个文档的 prompt 字段要具体、可执行
- 确保 JSON 格式正确
### 任务3: 读取文档结构定义并规划子任务
注: 本任务在父Agent中执行,无需委派给子Agent。
1. 使用 \`read\` 工具读取 .costrict/wiki/.staging/catalogue.json
2. 解析 JSON 内容,理解文档结构:
- catalogue.json 是一个 JSON 数组: \`[{文档1}, {文档2}, ...]\`
- 数组长度 = 需要创建的文档生成子任务数量
- 每个数组元素 = 一个文档对象,包含 title、prompt、sections 等信息
3. 统计需要生成的文档数量,为任务4做准备
### 🔄 子任务组4: 动态文档生成N个子任务
**重要**: 这不是单个子任务,而是根据任务3分析的结果,动态创建N个(N=文档数量)子任务,每个子任务只负责生成一个文档。
**AgentName**: \`WikiDocumentGenerate\`
**动态创建规则**:
1. 根据任务3的结果为每个文档对象创建一个独立的 \`Agent\` 工具调用
2. 从文档对象中提取信息填充到子任务 prompt 中
3. 采用并行批次执行: 每批最多并行3个SubAgent,当前批次完成后再启动下一批
**每个子任务填充的参数**:
#### 任务要求
1. 使用 read 工具读取项目分析结果
2. 深度分析相关代码文件,理解实现细节
3. 根据文档信息和章节要求生成技术文档
4. 确保文档包含代码示例、架构图、实现细节
5. 文档长度和深度要适配项目复杂度
#### 输入参数(从catalogue.json提取)
- 文档标题: {从 catalogue.json 提取的 title}
- 文档描述: {从 catalogue.json 提取的 prompt}
- 文档章节: {从 catalogue.json 提取的 sections}
- 项目分析结果: .costrict/wiki/.staging/basic_analyze.json
#### 执行说明
- 每个文档对应一个独立的 \`Agent\` 工具调用(subagent_type: "WikiDocumentGenerate")
- **并行批次执行**: 每批最多并行3个SubAgent,在单条消息中多次调用\`Agent\`工具实现并行,当前批次完成后再启动下一批
- 所有子任务完成后,继续执行任务5
### 子任务4.1: 文档生成-1
...
... (动态创建的文档生成子任务)
### 子任务4.N: 文档生成-N
...
#### 注意事项
- 文档必须基于实际代码分析,不要凭推测
- 引用代码文件时使用相对路径
### 子任务5: 索引文件生成
**AgentName**: \`WikiIndexGeneration\`
**目标**: 为生成的技术文档创建索引文件,便于导航和查找
#### 任务要求
1. 使用 list 工具列出 .costrict/wiki/ 目录下的所有 .md 文件
2. 使用 read 工具读取每个文档的标题和摘要信息
3. 提取项目概述信息(项目定位、技术栈、架构特点)
4. 生成结构化索引文件
#### 注意事项
- 文档链接使用相对路径格式 .costrict/wiki/{文件名}
- 索引文档长度控制在100行以内
- 摘要信息控制在30字以内
## 完成标准
当以下条件全部满足时,任务执行完成:
1. 所有子任务都已按顺序执行完成
2. 生成了项目分析结果文件 (.costrict/wiki/.staging/basic_analyze.json)
3. 生成了文档结构定义文件 (.costrict/wiki/.staging/catalogue.json)
4. 根据文档结构定义生成了所有技术文档 (.costrict/wiki/*.md)
5. 生成了索引文件 (.costrict/wiki/index.md)
6. 所有文件内容完整、格式正确、质量符合要求
## 注意事项
1. **子任务调用**: 如未特殊说明在父agent中执行则所有子任务都使用 \`Agent\` 工具委派给对应的子 agent 执行,参考上方"子任务Prompt模板"填充参数
2. **动态子任务并行执行**: 特别注意任务4需要动态创建N个子任务(N=文档数量),每个子任务只负责生成一个文档,采用并行批次执行方式,每批最多并行3个WikiDocumentGenerate SubAgent,在单条消息中多次调用\`Agent\`工具实现并行
3. **串行执行**: 除任务4外,其他子任务必须严格按顺序串行执行,不可跳过或并行
4. **完成确认**: 每个子任务完成后,确认输出文件存在且格式正确,再进行下一个
5. **输出语言**: 如果用户未指定,则默认输出语言应为**简体中文**
6. **错误处理**: 文档生成过程中如果遇到错误,应当记录错误信息并尝试继续执行
现在,请开始按照**执行步骤**执行任务,深度分析项目根目录,最终生成一套完整、高质量的项目技术文档体系。`
export function registerProjectWikiSkill(): void {
registerBundledSkill({
name: 'project-wiki',
description:
'为项目生成完整的技术文档体系,包括项目分析、文档结构设计、技术文档生成和索引文件创建。',
userInvocable: true,
async getPromptForCommand(args) {
const path = getProjectRoot()
const prompt = PROJECT_WIKI_PROMPT.replace(/\$\{path\}/g, path).replace(
/\$ARGUMENTS/g,
args || '',
)
return [{ type: 'text', text: prompt }]
},
})
}