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 }] }, }) }