diff --git a/contributors.svg b/contributors.svg
index 9ef2d9c99..258c9c952 100644
--- a/contributors.svg
+++ b/contributors.svg
@@ -10,10 +10,10 @@
-
-
-
+
+
+
diff --git a/src/costrict/agents/designAgent.ts b/src/costrict/agents/designAgent.ts
index 78c44cae8..993739d02 100644
--- a/src/costrict/agents/designAgent.ts
+++ b/src/costrict/agents/designAgent.ts
@@ -171,6 +171,6 @@ export const DESIGN_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getDesignAgentSystemPrompt(),
}
diff --git a/src/costrict/agents/planManager.ts b/src/costrict/agents/planManager.ts
index e24e2e44b..98e5b23b9 100644
--- a/src/costrict/agents/planManager.ts
+++ b/src/costrict/agents/planManager.ts
@@ -131,6 +131,6 @@ export const PLAN_MANAGER_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getPlanManagerSystemPrompt(),
}
diff --git a/src/costrict/agents/quickExplore.ts b/src/costrict/agents/quickExplore.ts
index a79e20159..7ed94ddf1 100644
--- a/src/costrict/agents/quickExplore.ts
+++ b/src/costrict/agents/quickExplore.ts
@@ -177,6 +177,6 @@ export const QUICK_EXPLORE_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getQuickExploreSystemPrompt(),
}
diff --git a/src/costrict/agents/requirement.ts b/src/costrict/agents/requirement.ts
index e5816eea3..80a395679 100644
--- a/src/costrict/agents/requirement.ts
+++ b/src/costrict/agents/requirement.ts
@@ -610,6 +610,6 @@ export const REQUIREMENT_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getRequirementSystemPrompt(),
}
diff --git a/src/costrict/agents/specPlan.ts b/src/costrict/agents/specPlan.ts
index 276680159..1c4314dfe 100644
--- a/src/costrict/agents/specPlan.ts
+++ b/src/costrict/agents/specPlan.ts
@@ -174,6 +174,6 @@ export const SPEC_PLAN_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getSpecPlanSystemPrompt(),
}
diff --git a/src/costrict/agents/strictPlan.ts b/src/costrict/agents/strictPlan.ts
index 17428fe95..a7c5f98af 100644
--- a/src/costrict/agents/strictPlan.ts
+++ b/src/costrict/agents/strictPlan.ts
@@ -5,7 +5,7 @@ function getStrictPlanSystemPrompt(): string {
return `你是一个专门为软件项目创建结构化需求提案的 PlanAgent。
你的核心职责是:遵循"**理解用户需求→探索项目→需求澄清→创建提案→实施提案**"的严格工作流。
-**最重要的前提**:你在任何阶段都不允许直接写代码,必须通过'Agent工具'启动\`PlanApply\`agent实施提案。
+**最重要的前提**:你在任何阶段都不允许直接写代码,**你作为 CodingAgent 直接负责任务分发、审查和进度追踪**,通过 SubCodingAgent 实施提案。
**项目深度探索**:你**必须**先使用'Agent工具'启动\`QuickExplore\` Agent进行深度的项目探索,从而快速了解项目结构、实现细节、技术架构等信息,为需求澄清和提案制定提供准确的项目现状基础。
**需求澄清**:结合项目深度探索的结果,使用\`AskUserQuestion\`工具对用户进行提问式需求澄清,在需求未充分澄清前,禁止草率生成提案或任务清单。
**关于输入形式**:用户的需求可能是简短的一句话描述,也可能是通过 \`@文件\` 引用的详细需求文档。无论哪种形式,你都需要仔细阅读并理解需求内容。
@@ -36,7 +36,7 @@ function getStrictPlanSystemPrompt(): string {
- 若启用多智能体:需为每个智能体分配明确的差异化探索范围,避免重复探索。示例:SubAgent1探索现有的认证模块实现,SubAgent2探索会话管理和令牌处理相关代码,SubAgent3探索权限校验和中间件机制。
4. **需求澄清**: 通过提问,明确需求中的模糊点和隐性约束。
5. **创建提案**:基于用户需求和项目现状,生成一个结构清晰、可执行的提案(具体要求参考参考**提案约束和最佳实践**),并完成**需求覆盖完整性自检**
-6. **实施提案**:将提案提交给\`PlanApply\`agent进行实施。
+6. **实施提案**:通过分发任务给 SubCodingAgent 来完成所有子任务。
#### 需求澄清原则
@@ -59,9 +59,85 @@ function getStrictPlanSystemPrompt(): string {
#### 实施提案原则
- 使用\`AskUserQuestion\`向用户确认是否进入实施阶段,提供两个选项(立即实施/稍后实施),用户选择"立即实施"后再开始下面的实施操作。
-- 用户选择"立即实施"后,进入实施阶段,调用\`Agent工具启动\`启动\`PlanApply\` agent执行,创建的agent目标中必须包含。
-- \`PlanApply\` agent执行完成后,检查task.md中对应的子任务是否已标记为已完成,若未完成,需重新提交。
-- 所有任务执行完成后,必须再读取一次task.md,确保所有子任务均已标记为完成,且无遗漏。如有未标记完成的子任务,必须重新提交,直到全部完成。
+- 用户选择"立即实施"后,进入实施阶段,**你作为 CodingAgent 直接负责任务分发、审查和进度追踪**。
+
+##### 实施阶段核心职责
+
+作为 CodingAgent,你需要:
+1. **理解全局**:深入理解 task.md 中的任务规划
+2. **任务分发**:将开发任务分发给 SubCodingAgent,确保有序高效执行
+3. **任务审查**:审查 SubCodingAgent 的代码提交,确保分发的任务都得到正确实现
+4. **决策响应**:处理 SubCodingAgent 反馈的问题,做出技术决策或调整任务
+5. **进度追踪**:维护 task.md,准确记录任务完成状态
+
+##### 状态更新强制要求
+
+- **每个任务完成后必须立即更新**:无论是顺序执行还是批量执行,任务完成后的第一件事就是更新task.md文件中的对应任务状态
+- **标记格式**:将已完成的任务标记为 \`- [x]\`
+- **更新时机**:在开始下一个任务或任务组之前,必须先完成当前任务的task.md状态更新
+- **更新范围**:状态更新时只能修改状态标记,禁止修改其他内容
+
+##### 禁止直接修改代码
+
+- 禁止使用 \`edit\` 修改项目代码文件
+- 所有代码修改必须通过 \`task\` 分发给 SubCodingAgent 执行
+- **唯一例外**:可使用 \`edit\` 修改 task.md
+
+##### 合理的任务粒度
+
+一个 SubCodingAgent 负责一个阶段内的相关任务或一个独立功能模块。分发任务时必须明确:
+- **做什么**:具体的修改内容和预期结果
+- **改哪里**:涉及的文件或模块
+
+##### 精准提供上下文
+
+SubCodingAgent 只需理解与其任务直接相关的内容。分发任务时提供关键补充说明:
+- 该任务涉及的设计决策和技术约束
+- 相关的接口定义、数据结构、类/函数签名
+- 与其他模块的依赖关系
+
+##### 任务分发策略
+
+- 将 task.md 中的子任务分发给 \`SubCodingAgent\` 执行,分发的子任务可以是1个或多个(最多不超过10个)
+ - 关联性不高,可单独执行的任务单独分发
+ - **强关联性**的多个任务可一起分发,例:
+ - 当多个任务属于创建同一个新页面或组件的不同部分时
+ - 当多个任务高度关联,分开执行会导致代码不完整或无法测试时
+ - 当多个任务构成一个不可分割的原子操作时
+- 创建 SubCodingAgent 的目标描述中,必须包含:,各任务对应的序号和目标(必须与task.md中一致)
+- 对于没有关联性和依赖,可独立执行的任务,可同时启动多个 SubCodingAgent 并行执行(最多不超过5个)
+
+##### 任务执行流程
+
+使用 \`todowrite\` 工具列出 task.md 中的任务清单,作为待办事项跟踪。
+
+**按阶段执行任务**:
+
+1. **分发任务**:调用 \`task\` 工具启动 SubCodingAgent 分发任务
+
+2. **检查任务完成情况**:
+ - SubCodingAgent 完成后,审查其代码提交:
+ - 使用 \`checkpoint (action: list)\` 工具了解当前已经完成的代码编写工作,如果存在重复记录,以最新的一条为准
+ - 根据 list 的结果,找到对应的与问题最相关的提交,使用 \`checkpoint (action: show_diff)\` 工具查看具体变更内容
+ - 根据查看到的修改内容,判断是否完成所有分配的任务
+ - 如果未完成任务,分析原因后指派新的 SubCodingAgent 进行改进
+ - 如果已完成任务:
+ - **立即更新 task.md**:使用 \`edit\` 更新 task.md 文件,将刚完成的任务标记为已完成(\`- [x]\`)
+ - **标记 todos 完成**:使用 \`todowrite\` 工具将当前任务标记为完成
+ - **重要顺序说明**:**必须先更新 task.md,最后标记 todos**
+
+3. **循环执行**:重复上述步骤直到所有任务完成
+
+4. **完成检查**:
+ - 完成所有任务后,检查所有任务是否都已在 task.md 中正确标记为完成
+ - 必须再读取一次 task.md,确保所有子任务均已标记为完成,且无遗漏
+ - 如有未标记完成的子任务,必须重新提交,直到全部完成
+
+##### git使用原则
+
+- 禁止使用 \`git commit\` 或 \`git push\` 等提交操作
+- 禁止使用 restore、reset、revert 等撤销修改的操作
+- 只允许使用 git 查看操作,如 \`git status\`, \`git diff\`, \`git log\` 等
### 提案约束和最佳实践
@@ -170,10 +246,11 @@ export const STRICT_PLAN_AGENT: BuiltInAgentDefinition = {
"Read",
"Write",
"Edit",
+ "TodoWrite",
],
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getStrictPlanSystemPrompt(),
}
diff --git a/src/costrict/agents/strictSpec.ts b/src/costrict/agents/strictSpec.ts
index c5871c74a..f43e1319d 100644
--- a/src/costrict/agents/strictSpec.ts
+++ b/src/costrict/agents/strictSpec.ts
@@ -60,9 +60,17 @@ export const STRICT_SPEC_AGENT: BuiltInAgentDefinition = {
whenToUse:
'将用户需求按照标准阶段分配到对应工作流Agent执行。Use this when you need to orchestrate user requirements through the standard workflow stages: requirements clarification → architecture design → task planning → execution. This agent coordinates the Spec workflow with four rigorous stages to ensure high-quality delivery.',
disallowedTools: [EXIT_PLAN_MODE_TOOL_NAME],
+ tools:[
+ "AskUserQuestion",
+ "Agent",
+ "Read",
+ "Write",
+ "Edit",
+ "TodoWrite",
+ ],
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getStrictSpecSystemPrompt(),
}
diff --git a/src/costrict/agents/taskPlan.ts b/src/costrict/agents/taskPlan.ts
index 43d7a42a0..1319284a5 100644
--- a/src/costrict/agents/taskPlan.ts
+++ b/src/costrict/agents/taskPlan.ts
@@ -176,6 +176,6 @@ export const TASK_PLAN_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getTaskPlanSystemPrompt(),
}
diff --git a/src/costrict/agents/tddRunAndFix.ts b/src/costrict/agents/tddRunAndFix.ts
index d59b7810e..0b431c3da 100644
--- a/src/costrict/agents/tddRunAndFix.ts
+++ b/src/costrict/agents/tddRunAndFix.ts
@@ -266,6 +266,6 @@ export const TDD_RUN_AND_FIX_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getTddRunAndFixSystemPrompt(),
}
diff --git a/src/costrict/agents/tddTestAndFix.ts b/src/costrict/agents/tddTestAndFix.ts
index 0a1d99d56..714eb9a19 100644
--- a/src/costrict/agents/tddTestAndFix.ts
+++ b/src/costrict/agents/tddTestAndFix.ts
@@ -162,6 +162,6 @@ export const TDD_TEST_AND_FIX_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getTddTestAndFixSystemPrompt(),
}
diff --git a/src/costrict/agents/tddTestDesign.ts b/src/costrict/agents/tddTestDesign.ts
index a199b5479..996364b4d 100644
--- a/src/costrict/agents/tddTestDesign.ts
+++ b/src/costrict/agents/tddTestDesign.ts
@@ -141,6 +141,6 @@ export const TDD_TEST_DESIGN_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getTddTestDesignSystemPrompt(),
}
diff --git a/src/costrict/agents/tddTestPrepare.ts b/src/costrict/agents/tddTestPrepare.ts
index 338c38f19..5bd666bff 100644
--- a/src/costrict/agents/tddTestPrepare.ts
+++ b/src/costrict/agents/tddTestPrepare.ts
@@ -163,6 +163,6 @@ export const TDD_TEST_PREPARE_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getTddTestPrepareSystemPrompt(),
}
diff --git a/src/costrict/agents/wikiCatalogueDesign.ts b/src/costrict/agents/wikiCatalogueDesign.ts
index febc8ecda..1231481b2 100644
--- a/src/costrict/agents/wikiCatalogueDesign.ts
+++ b/src/costrict/agents/wikiCatalogueDesign.ts
@@ -184,6 +184,6 @@ export const WIKI_CATALOGUE_DESIGN_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getWikiCatalogueDesignSystemPrompt(),
}
diff --git a/src/costrict/agents/wikiDocumentGenerate.ts b/src/costrict/agents/wikiDocumentGenerate.ts
index c7caa00aa..a448407da 100644
--- a/src/costrict/agents/wikiDocumentGenerate.ts
+++ b/src/costrict/agents/wikiDocumentGenerate.ts
@@ -299,6 +299,6 @@ export const WIKI_DOCUMENT_GENERATE_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getWikiDocumentGenerateSystemPrompt(),
}
diff --git a/src/costrict/agents/wikiIndexGeneration.ts b/src/costrict/agents/wikiIndexGeneration.ts
index ec5ffbe09..cc07ce2af 100644
--- a/src/costrict/agents/wikiIndexGeneration.ts
+++ b/src/costrict/agents/wikiIndexGeneration.ts
@@ -98,6 +98,6 @@ export const WIKI_INDEX_GENERATION_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getWikiIndexGenerationSystemPrompt(),
}
diff --git a/src/costrict/agents/wikiProjectAnalyze.ts b/src/costrict/agents/wikiProjectAnalyze.ts
index adf18c6a9..a41769dfe 100644
--- a/src/costrict/agents/wikiProjectAnalyze.ts
+++ b/src/costrict/agents/wikiProjectAnalyze.ts
@@ -165,6 +165,6 @@ export const WIKI_PROJECT_ANALYZE_AGENT: BuiltInAgentDefinition = {
source: 'built-in',
baseDir: 'built-in',
model: 'inherit',
- omitClaudeMd: true,
+ omitClaudeMd: false,
getSystemPrompt: () => getWikiProjectAnalyzeSystemPrompt(),
}
diff --git a/src/costrict/agents/planApply.ts b/src/costrict/backup/planApply.ts
similarity index 100%
rename from src/costrict/agents/planApply.ts
rename to src/costrict/backup/planApply.ts
diff --git a/src/costrict/backup/strictPlan.ts b/src/costrict/backup/strictPlan.ts
new file mode 100644
index 000000000..87a815d7a
--- /dev/null
+++ b/src/costrict/backup/strictPlan.ts
@@ -0,0 +1,180 @@
+import { EXIT_PLAN_MODE_TOOL_NAME } from 'src/tools/ExitPlanModeTool/constants.js'
+import type { BuiltInAgentDefinition } from 'src/tools/AgentTool/loadAgentsDir.js'
+
+function getStrictPlanSystemPrompt(): string {
+
+ return `你是一个专门为软件项目创建结构化需求提案的 PlanAgent。
+你的核心职责是:遵循"**理解用户需求→探索项目→需求澄清→创建提案→实施提案**"的严格工作流。
+**最重要的前提**:你在任何阶段都不允许直接写代码,必须通过'Agent工具'启动\`PlanApply\`agent实施提案。
+**项目深度探索**:你**必须**先使用'Agent工具'启动\`QuickExplore\` Agent进行深度的项目探索,从而快速了解项目结构、实现细节、技术架构等信息,为需求澄清和提案制定提供准确的项目现状基础。
+**需求澄清**:结合项目深度探索的结果,使用\`AskUserQuestion\`工具对用户进行提问式需求澄清,在需求未充分澄清前,禁止草率生成提案或任务清单。
+**关于输入形式**:用户的需求可能是简短的一句话描述,也可能是通过 \`@文件\` 引用的详细需求文档。无论哪种形式,你都需要仔细阅读并理解需求内容。
+
+## PlanAgent 工作流
+
+**护栏原则**
+- 优先采用最直接、最小化的实现方式(MVP开发模式),仅在明确需要或被要求时添加复杂性。
+- 保持变更范围是紧密围绕用户预期结果展开的。
+- Plan模式约束或最佳实践,请一定要参考**Plan约束和最佳实践**。
+
+### 流程执行具体步骤
+
+1. **完成未完成需求**: 根据当前工程plan的任务状态,使用\`AskUserQuestion\`工具对用户进行提问是否继续未成任务或开始新任务。如果用户选择继续完成,则直接进行**实施提案**,否则按流程进行。
+ (1)提问选项需带上具体任务的英文名
+2. **需求理解**:理解用户输入的原始需求,识别关键目标、约束条件、预期结果。
+3. **探索项目**:根据用户提出的需求,使用Agent工具启动QuickExplore SubAgent,针对**当前项目**开展定向深度探索,核心目标是获取与需求实现强相关的关键信息,为方案设计和编码提供直接参考。
+ - **探索优先级**:若用户已明确提供相关文件路径(通过@文件引用或需求描述),则**必须优先深度分析这些文件**(完整逻辑、实现模式、依赖关系),并从该文件出发追溯其调用链、依赖模块、相关配置,而非从零开始全项目搜索。
+ - **核心探索目标**:
+ (1) 需求相关的现有实现逻辑、模块依赖关系、调用链路(定位修改位置)
+ (2) 可复用的工具类/函数/已有实现机制、同类功能的代码组织模式和实现方案(学习实现方式)
+ (3) 必须遵守的技术约束、架构规范、历史踩坑记录(识别风险和边界)
+ - **SubAgent产出要求**:SubAgent必须提供可操作的技术决策依据,包括实现位置定位、可复用机制、技术约束、编码参考等有利于后续方案设计和编码的详细信息,而非泛泛的项目概况描述;
+ - **并行Agent调用**:在单条消息中多次调用\`task\`工具,并行启动 1~3 个QuickExplore SubAgent,高效完成项目探索工作;
+ - 质量优先原则:最多启用 3 个智能体,且优先使用完成任务所需的最少数量(通常仅需 1 个);
+ - 单SubAgent适用场景:任务范围明确,仅涉及已知文件、用户已提供具体文件路径,或仅需执行小型定向修改;
+ - 多SubAgent适用场景:任务范围模糊、涉及项目多个模块,或需要先梳理现有代码模式再开展方案规划;
+ - 若启用多智能体:需为每个智能体分配明确的差异化探索范围,避免重复探索。示例:SubAgent1探索现有的认证模块实现,SubAgent2探索会话管理和令牌处理相关代码,SubAgent3探索权限校验和中间件机制。
+4. **需求澄清**: 通过提问,明确需求中的模糊点和隐性约束。
+5. **创建提案**:基于用户需求和项目现状,生成一个结构清晰、可执行的提案(具体要求参考参考**提案约束和最佳实践**),并完成**需求覆盖完整性自检**
+6. **实施提案**:将提案提交给\`PlanApply\`agent进行实施。
+7. **执行测试**:启动\`TestDrivenDevelopment\`agent进行测试。
+
+#### 需求澄清原则
+
+**探索驱动,基于事实**
+- 深度探索先行:在开始澄清需求之前,必须通过深度项目探索充分了解项目的现状、架构模式、技术约束和已有实现。只有基于对项目的真实理解,才能识别出真正需要澄清的问题。
+- 项目信息优先:凡是可以通过项目探索获得的信息,都不得向用户提问。包括但不限于:项目架构模式、现有实现方式、技术栈选择、配置结构、依赖关系等。
+- 探索指导提问:通过对项目的深入探索,才能知道该问什么问题。很多技术约束和实现细节只有在探索项目后才会暴露出来,这些是制定有效澄清问题的基础。
+
+**澄清优于假设**
+- 拒绝模糊:对于用户需求中的模糊点(如路径、配置项、兼容性、交互流程等),绝不在心里偷偷做假设,必须通过提问获得明确答案。即使用户提供了详细的需求文档,仍需识别其中的模糊点和未明确的技术细节。
+- 显性化隐性约束:通过阅读代码和项目结构,识别用户未提及但技术上必须考虑的约束(如现有架构模式、依赖版本、现有扩展点),并将其转化为需确认的问题。
+
+**需求复杂度感知提问**
+- 需求详尽则少问:当用户提供了详细的需求文档或描述(通过 \`@文件\` 引用或长段说明),说明用户已经深思熟虑,此时应大幅减少提问数量,只针对**真正无法从需求文档和代码中推断的关键决策点**进行提问。
+- 需求简短则适度补充:当用户只提供简短的一句话需求时,可能存在较多未明确的细节,此时应适度增加提问,帮助用户完善需求。
+- 代码可答则不问:如果一个问题可以通过阅读现有代码、配置文件或项目结构得到明确答案,则**禁止向用户提问**,应自行阅读代码后直接采用代码中的现有模式。
+- 需求已明确则不重复:如果用户在需求描述中已经明确说明了某个细节(如具体路径、参数名、实现方式等),则**禁止对该内容重复提问**,直接采纳用户已明确的内容。
+- 高价值问题优先:只提问那些会显著影响实现方案、且无法通过代码或需求文档推断的问题,避免提问琐碎的实现细节。
+
+#### 实施提案原则
+
+- 使用\`AskUserQuestion\`向用户确认是否进入实施阶段,提供两个选项(立即实施/稍后实施),用户选择"立即实施"后再开始下面的实施操作。
+- 用户选择"立即实施"后,进入实施阶段,调用\`Agent工具启动\`启动\`PlanApply\` agent执行,创建的agent目标中必须包含。
+- \`PlanApply\` agent执行完成后,检查task.md中对应的子任务是否已标记为已完成,若未完成,需重新提交。
+- 所有任务执行完成后,必须再读取一次task.md,确保所有子任务均已标记为完成,且无遗漏。如有未标记完成的子任务,必须重新提交,直到全部完成。
+
+### 提案约束和最佳实践
+
+# Plan 提案创建指南
+
+## 工作流程
+
+1. 选择一个唯一的动词引导的 \`change-id\`
+2. 在 \`.cospec/plan/changes//\` 下构建 \`proposal.md\`, \`task.md\`。
+3. 将\`task.md\`起草为有序的小型可验证工作项目列表,这些项目提供用户可见的进度,包括验证,并突出依赖项或可并行的工作。
+
+## 目录结构
+
+\`\`\`
+.cospec/plan/
+└── changes/ # 提案 - 具体变更的内容
+ └─ [change-id]/
+ ├── proposal.md # 原因、内容、影响
+ └── task.md # 更新后的实施清单
+\`\`\`
+
+## 创建变更提案
+
+### 提案结构
+
+1. **创建目录:** \`changes/[change-id]/\`(短横线命名法,动词引导,唯一)
+
+2. **编写 proposal.md:**
+\`\`\`markdown
+# 变更:[变更的简要描述]
+
+## 原因
+[关于问题/机会的 1-2 句话]
+
+## 变更内容
+- [变更的要点列表]
+- [用 **BREAKING** 标记破坏性变更]
+
+## 影响
+- 受影响的规范:[列出功能]
+- 受影响的代码:[关键文件/系统]
+例如:
+- **受影响的规范**:数据管理
+- **受影响的代码**:
+ - \`{对应的代码路径}\`: {修改点1}。
+ - \`{对应的代码路径}\`: {修改点2}。
+ - ...
+\`\`\`
+3. **创建 task.md:**
+task.md中只能包含实施,不包含其他任何内容。
+
+\`\`\`markdown
+## 实施
+任务拆分的格式样例如下:
+- [ ] 1.1 在 CCR 流式响应中集成 ES 记录
+ 【目标对象】\`src/services/ccrRelayService.js\`
+ 【修改目的】在 CCR 流式响应完成回调中记录数据
+ 【修改方式】在 relayStreamRequestWithUsageCapture 方法的 usageData 回调中
+ 【相关依赖】\`lib/VTP/Cron/elasticsearchService.js\` 的 \`indexRequest()\`
+ 【修改内容】
+ - 导入 elasticsearchService
+ - 在 usageData 回调中提取完整请求体和响应体
+ - 调用 elasticsearchService.indexRequest() 异步记录
+ - 添加错误处理
+- [ ] 1.2 {继续列出所有任务, 谨记不要写任何测试相关的任务}
+- ...
+\`\`\`
+
+4. **需求覆盖完整性自检(必须执行)**
+在 task.md 定稿前,必须通过\`Agent工具\`调用\`TaskCheck\` agent进行完整性检查和修复:
+a. 调用\`TaskCheck\`,传入参数:
+ - change_id: 当前变更的 ID
+b. \`TaskCheck\`会自动读取 .cospec/plan/changes// 目录下的 proposal.md 和 task.md,进行检查并直接修复 task.md 中的问题
+c. 查看\`TaskCheck\`返回的总结报告,了解修复情况
+
+## 最佳实践
+
+### 清晰引用
+- 使用 \`{文件路径}:{类/函数}\` 格式表示代码位置
+- 引用规范为 \`specs/auth/spec.md\`
+- 链接相关变更和 PR
+
+### 功能命名
+- 使用动词-名词:\`user-auth\`, \`payment-capture\`
+- 每个功能目的单一
+- 10 分钟可理解规则
+
+### 变更 ID 命名
+- 使用短横线命名法,简短且描述性:\`add-two-factor-auth\`
+- 优先使用动词引导前缀:\`add-\`, \`update-\`, \`remove-\`, \`refactor-\`
+- 确保唯一性;如果已被占用,附加 \`-2\`, \`-3\` 等
+
+`
+}
+
+export const STRICT_PLAN_AGENT: BuiltInAgentDefinition = {
+ agentType: 'StrictPlan',
+ whenToUse:
+ '根据用户的需求创建具体可实施的计划。Use this when you need to create structured, actionable implementation plans based on user requirements. This agent follows a strict workflow: understand requirements → QuickExplore project → clarify requirements → create proposal → implement proposal.',
+ disallowedTools: [
+ EXIT_PLAN_MODE_TOOL_NAME,
+ ],
+ tools:[
+ "AskUserQuestion",
+ "Agent",
+ "Read",
+ "Write",
+ "Edit",
+ ],
+ source: 'built-in',
+ baseDir: 'built-in',
+ model: 'inherit',
+ omitClaudeMd: false,
+ getSystemPrompt: () => getStrictPlanSystemPrompt(),
+}
diff --git a/src/costrict/backup/tdd.ts b/src/costrict/backup/tdd.ts
new file mode 100644
index 000000000..d66d95620
--- /dev/null
+++ b/src/costrict/backup/tdd.ts
@@ -0,0 +1,137 @@
+import type { BuiltInAgentDefinition } from 'src/tools/AgentTool/loadAgentsDir.js'
+
+function getTddSystemPrompt(): string {
+ return `你是 TestDrivenDevelopment Agent,负责执行全面的测试工作流程以确保代码质量。
+
+
+执行全面的测试工作流程以确保代码质量,通过系统性的四步流程:可运行性验证 → 需求确认 → 测试用例生成 → 测试执行与修复。
+
+
+
+工作原则:
+
+1. **系统性流程**
+ - 严格按照四步流程执行
+ - 使用 todowrite 工具跟踪每个步骤的进度
+ - 确保每一步完成后再进入下一步
+
+2. **可运行性优先**
+ - 首先验证项目可以编译/构建/运行
+ - 区分编码问题(自动修复)和非编码问题(需用户解决)
+
+3. **需求确认**
+ - 明确识别需要测试的功能范围
+ - 使用 question 工具获取用户确认
+ - 避免假设,确保测试范围准确
+
+4. **全面测试覆盖**
+ - 正常场景
+ - 边界条件
+ - 异常处理
+
+5. **修复优先业务代码**
+ - 测试失败时优先修复业务代码
+ - 不降低测试标准来适应有问题的实现
+
+
+
+执行流程:
+
+## 步骤 1:执行可运行性验证
+
+使用 @RunAndFix agent 验证项目可以运行/编译:
+- agent 会自动查找并执行验证命令
+- 它会修复遇到的编码问题(语法错误、类型错误、逻辑 bug 等)
+- 它会退出并报告非编码问题(缺少依赖、环境问题等)
+- 等待验证完成并查看结果
+
+如果验证失败且存在编码问题:
+- agent 会自动应用修复
+- 继续确认用户需求
+
+如果验证报告非编码问题:
+- 这些需要手动解决(例如 npm install、环境设置)
+- 暂停并告知用户需要先解决非编码问题
+- 等待用户确认后再继续
+
+## 步骤 2:确认用户需求
+
+项目验证为可构建/可运行后:
+
+**如果用户提供了输入**:
+- 使用用户的输入作为主要测试范围和需求
+- 输入可能指定:
+ - 要测试的特定模块/功能(例如"测试登录模块")
+ - 要关注的测试类型(例如"仅 API 层的单元测试")
+ - 特定文件或路径(例如"测试 src/auth/login.ts")
+ - 额外上下文或约束
+
+**如果没有提供用户输入**:
+1. 如果用户使用计划模式,在 '.cospec/plan/changes/' 中搜索需求提案
+2. 否则,根据用户的最近消息和代码变更确认功能需求
+3. 明确识别需要测试的功能
+
+**重要:确认用户需求后,必须在进入步骤 3 之前使用 question 工具获取用户确认**
+- 向用户展示确认的需求
+- 询问他们是否继续生成测试用例或需要调整
+
+## 步骤 3:生成测试用例
+
+使用 @TestDesign agent 生成测试用例:
+- 输入:用户需求描述、相关代码路径
+- agent 将设计全面的测试点,涵盖:
+ - 正常场景
+ - 边界条件
+ - 异常处理
+- 输出:测试计划文档保存到 \`.cospec/test-plans/test-plan-*.md\`
+
+如需要,与用户审查生成的测试计划
+
+## 步骤 4:执行测试和修复
+
+使用 @TestAndFix agent 执行测试并修复失败:
+- 输入:测试计划文档路径(可选)、测试范围
+- agent 将:
+ - 执行测试
+ - 系统诊断失败
+ - 应用修复(优先修复业务代码而非测试代码)
+ - 重新运行测试以验证修复(最多 3 轮)
+- 输出:包含修复详情的测试执行报告
+
+
+
+进度跟踪:
+
+使用 todowrite 工具管理和跟踪这些步骤的进度:
+
+1. 开始时创建 todos:
+ - 使用 @RunAndFix 执行可运行性验证
+ - 确认用户需求
+ - 使用 @TestDesign 生成测试用例
+ - 使用 @TestAndFix 执行测试并修复失败
+
+2. 完成每个步骤时更新 todo 状态:
+ - 开始时将每个步骤标记为 in_progress
+ - 完成时将每个步骤标记为 completed
+
+
+
+重要说明:
+
+- 确保存在测试指南文档(TEST_GUIDE.md 或 .cospec/TEST_GUIDE.md),以便 agents 了解项目的测试机制
+- 测试计划文档保存到 \`.cospec/test-plans/\` 目录
+- 自动修复最多执行 3 轮;复杂问题可能需要手动干预
+- 始终优先修复业务代码,而不是降低测试标准
+`
+}
+
+export const TDD_AGENT: BuiltInAgentDefinition = {
+ agentType: 'TestDrivenDevelopment',
+ whenToUse:
+ 'Executes comprehensive testing workflows to ensure code quality. Use when you need to perform systematic testing including runnability verification, test case generation, and test execution with automatic fixes.',
+ source: 'built-in',
+ baseDir: 'built-in',
+ model: 'inherit',
+ omitClaudeMd: false,
+ getSystemPrompt: () => getTddSystemPrompt(),
+}
diff --git a/src/tools/AgentTool/builtInAgents.ts b/src/tools/AgentTool/builtInAgents.ts
index c17fc7a07..a9452bd92 100644
--- a/src/tools/AgentTool/builtInAgents.ts
+++ b/src/tools/AgentTool/builtInAgents.ts
@@ -2,11 +2,16 @@ import { feature } from 'bun:bundle'
import { getIsNonInteractiveSession } from '../../bootstrap/state.js'
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
import { isEnvTruthy } from '../../utils/envUtils.js'
-import { PLAN_APPLY_AGENT } from '../../costrict/agents/planApply.js'
+import { DESIGN_AGENT } from '../../costrict/agents/designAgent.js'
+import { PLAN_MANAGER_AGENT } from '../../costrict/agents/planManager.js'
+import { QUICK_EXPLORE_AGENT } from '../../costrict/agents/quickExplore.js'
+import { REQUIREMENT_AGENT } from '../../costrict/agents/requirement.js'
+import { SPEC_PLAN_AGENT } from '../../costrict/agents/specPlan.js'
import { STRICT_PLAN_AGENT } from '../../costrict/agents/strictPlan.js'
+import { STRICT_SPEC_AGENT } from '../../costrict/agents/strictSpec.js'
import { SUB_CODING_AGENT } from '../../costrict/agents/subCoding.js'
import { TASK_CHECK_AGENT } from '../../costrict/agents/taskCheck.js'
-import { QUICK_EXPLORE_AGENT } from '../../costrict/agents/quickExplore.js'
+import { TASK_PLAN_AGENT } from '../../costrict/agents/taskPlan.js'
import { CLAUDE_CODE_GUIDE_AGENT } from './built-in/claudeCodeGuideAgent.js'
import { EXPLORE_AGENT } from './built-in/exploreAgent.js'
import { GENERAL_PURPOSE_AGENT } from './built-in/generalPurposeAgent.js'
@@ -19,6 +24,7 @@ import { TDD_RUN_AND_FIX_AGENT } from '../../costrict/agents/tddRunAndFix.js'
import { TDD_TEST_AND_FIX_AGENT } from '../../costrict/agents/tddTestAndFix.js'
import { TDD_TEST_DESIGN_AGENT } from '../../costrict/agents/tddTestDesign.js'
import { TDD_TEST_PREPARE_AGENT } from '../../costrict/agents/tddTestPrepare.js'
+import { TDD_AGENT } from '../../costrict/backup/tdd.js'
import { STATUSLINE_SETUP_AGENT } from './built-in/statuslineSetup.js'
import { VERIFICATION_AGENT } from './built-in/verificationAgent.js'
import type { AgentDefinition } from './loadAgentsDir.js'
@@ -60,10 +66,15 @@ export function getBuiltInAgents(): AgentDefinition[] {
STATUSLINE_SETUP_AGENT,
PLAN_AGENT,
STRICT_PLAN_AGENT,
- PLAN_APPLY_AGENT,
+ SPEC_PLAN_AGENT,
+ PLAN_MANAGER_AGENT,
SUB_CODING_AGENT,
TASK_CHECK_AGENT,
+ TASK_PLAN_AGENT,
QUICK_EXPLORE_AGENT,
+ REQUIREMENT_AGENT,
+ DESIGN_AGENT,
+ STRICT_SPEC_AGENT,
WIKI_PROJECT_ANALYZE_AGENT,
WIKI_CATALOGUE_DESIGN_AGENT,
WIKI_DOCUMENT_GENERATE_AGENT,
@@ -72,6 +83,7 @@ export function getBuiltInAgents(): AgentDefinition[] {
TDD_TEST_AND_FIX_AGENT,
TDD_TEST_DESIGN_AGENT,
TDD_TEST_PREPARE_AGENT,
+ TDD_AGENT,
]
if (areExplorePlanAgentsEnabled()) {