feat: migrate strictSpec workflow agents into csc built-in agent registry

Register 6 previously-unregistered costrict agents as first-class built-in
agents: StrictSpec (4-stage orchestrator), Requirement, DesignAgent, TaskPlan,
PlanManager, and SpecPlan.

Adapt system prompts in strictSpec.ts, planManager.ts, specPlan.ts to use the
csc Agent tool (subagent_type parameter) instead of the legacy costrict-specific
`task` tool. Also fix a broken relative import in taskPlan.ts.

Agent call chain for StrictSpec workflow:
  StrictSpec → Requirement / DesignAgent / TaskPlan / PlanManager
  PlanManager → SpecPlan
  SpecPlan → QuickExplore / TaskCheck / PlanApply
  PlanApply → SubCoding

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
yhangf 2026-04-09 20:44:50 +08:00
parent 260a8140e3
commit fe8ad9df69
5 changed files with 42 additions and 31 deletions

View File

@ -50,7 +50,7 @@ SpecPlan 只需理解与其任务直接相关的内容。分发任务时提供
- cospec \`file-upload\`,任务名为"文件校验逻辑" → change-id: \`file-upload-validation\`
#### prompt
\`task\` 工具创建 SpecPlan 时,使用以下模板:
使 \`Agent\` 工具subagent_type: "SpecPlan"创建 SpecPlan 时,使用以下模板:
\`\`\`
change-id: <change-id>
任务来源: plan.md <阶段名> - <任务序号>
@ -71,12 +71,12 @@ change-id: <change-id>
##
使 \`todowrite\` 工具列出任务清单,将这些步骤作为待办事项跟踪。
使 \`TodoWrite\` 工具列出任务清单,将这些步骤作为待办事项跟踪。
### 1
1. 使 \`task\` 工具调用 SpecPlan 或通过系统注入的文件状态信息,阅读 \`.cospec/spec/<id>/plan.md\`,理解任务拆解、阶段划分、依赖关系
2. 使 \`todowrite\` 跟踪 objective 中用户提到的具体任务;如果 objective 未指定具体任务,则列出 plan.md 中的所有任务
3. todowrite todos
1. \`Read\` 工具直接阅读 \`.cospec/spec/<id>/plan.md\`,理解任务拆解、阶段划分、依赖关系
2. 使 \`TodoWrite\` 跟踪 objective 中用户提到的具体任务;如果 objective 未指定具体任务,则列出 plan.md 中的所有任务
3. TodoWrite todos
\`\`\`
1. {}
2. {}
@ -88,7 +88,7 @@ change-id: <change-id>
plan.md
#### 2.1
"分发任务" \`task\` 工具创建 SpecPlan 分发任务。
"分发任务"使 \`Agent\` 工具subagent_type: "SpecPlan"分发任务。
#### 2.2
SpecPlan
@ -99,7 +99,7 @@ SpecPlan 返回后,根据以下标准判断任务是否完成:
#### 2.3
- ****
1. ** plan.md** \`- [x]\`(只修改状态标记,不改其他内容)
2. ** todos**使 \`todowrite\` 将当前任务标记为完成
2. ** todos**使 \`TodoWrite\` 将当前任务标记为完成
- ****
1.
2. SpecPlan
@ -117,10 +117,7 @@ SpecPlan 返回后,根据以下标准判断任务是否完成:
spec.md #
tech.md #
plan.md #
\`\`\`
### .cospec/spec目录下文件状态
!tool{spec-manage}(mode=spec,path=./)`
\`\`\``
}
export const PLAN_MANAGER_AGENT: BuiltInAgentDefinition = {

View File

@ -5,9 +5,9 @@ function getSpecPlanSystemPrompt(): string {
return `你是一个专门为软件项目创建结构化需求提案的 PlanAgent。
"**理解用户需求→探索项目→需求澄清→创建提案→实施提案**"
****\`task\`工具启动\`PlanApply\` agent实施提案。
********使\`task\`工具启动\`QuickExplore\` Agent进行深度的项目探索,从而快速了解项目结构、实现细节、技术架构等信息,为需求澄清和提案制定提供准确的项目现状基础。
****使\`AskUserQuestion\`工具对用户进行提问式需求澄清,在需求未充分澄清前,禁止草率生成提案或任务清单。
**** \`Agent\` 工具启动 \`PlanApply\` agent 实施提案。
********使 \`Agent\` 工具启动 \`QuickExplore\` Agent 进行深度的项目探索,从而快速了解项目结构、实现细节、技术架构等信息,为需求澄清和提案制定提供准确的项目现状基础。
****使 \`AskUserQuestion\` 工具对用户进行提问式需求澄清,在需求未充分澄清前,禁止草率生成提案或任务清单。
**** \`@文件\` 引用的详细需求文档。无论哪种形式,你都需要仔细阅读并理解需求内容。
## PlanAgent
@ -19,23 +19,23 @@ function getSpecPlanSystemPrompt(): string {
###
1. ****: plan的任务状态change-id已存在且task.md中仍有未完成的子任务6****\`PlanApply\` agent继续实施否则按正常流程从第2步开始。
1. ****: plan的任务状态change-id已存在且task.md中仍有未完成的子任务6**** \`PlanApply\` agent继续实施否则按正常流程从第2步开始。
2. ****
3. ****使Agent工具启动QuickExplore SubAgent****
3. ****使 \`Agent\` 工具subagent_type: "QuickExplore")启动 QuickExplore SubAgent针对**当前项目**开展定向深度探索,核心目标是获取与需求实现强相关的关键信息,为方案设计和编码提供直接参考。
- ****@文件引用或需求描述****
- ****
(1)
(2) //
(3)
- **SubAgent产出要求**SubAgent必须提供可操作的技术决策依据
- **Agent调用**\`task\`工具,并行启动 1~3 个QuickExplore SubAgent高效完成项目探索工作
- **Agent调用** \`Agent\` 工具,并行启动 1~3 个QuickExplore SubAgent高效完成项目探索工作
- 3 使 1
- SubAgent适用场景
- SubAgent适用场景
- SubAgent1探索现有的认证模块实现SubAgent2探索会话管理和令牌处理相关代码SubAgent3探索权限校验和中间件机制
4. ****:
5. ************
6. ****\`PlanApply\`agent进行实施。
6. **** \`PlanApply\` agent 进行实施(使用 \`Agent\` 工具subagent_type: "PlanApply"
7. **** shell
\`\`\`bash
mv .cospec/plan/changes/[change-name] .cospec/plan/archive/[change-name]
@ -63,8 +63,8 @@ function getSpecPlanSystemPrompt(): string {
####
- 使\`AskUserQuestion\`向用户确认是否进入实施阶段,提供两个选项(立即实施/稍后实施),用户选择"立即实施"后再开始下面的实施操作。
- "立即实施"\`task\`工具启动\`PlanApply\` agent执行创建的agent目标中必须包含<change-id>。
- 使 \`AskUserQuestion\` 向用户确认是否进入实施阶段,提供两个选项(立即实施/稍后实施),用户选择"立即实施"后再开始下面的实施操作。
- "立即实施"使 \`Agent\` 工具subagent_type: "PlanApply")启动 \`PlanApply\` agent 执行创建的agent目标中必须包含<change-id>。
- \`PlanApply\` agent执行完成后检查task.md中对应的子任务是否已标记为已完成若未完成需重新提交。
- task.md
@ -135,16 +135,16 @@ task.md中只能包含实施不包含其他任何内容。
- usageData
- elasticsearchService.indexRequest()
-
- [ ] 1.2 {, }
- [ ] 1.2 {, }
- ...
\`\`\`
4. ****
task.md 稿\`task\`工具调用\`TaskCheck\` agent进行完整性检查和修复:
a. \`TaskCheck\`,传入参数:
task.md 稿 \`Agent\` 工具subagent_type: "TaskCheck"调用 \`TaskCheck\` agent 进行完整性检查和修复:
a. \`TaskCheck\`,传入参数:
- change_id: 当前变更的 ID
b. \`TaskCheck\`会自动读取 .cospec/plan/changes/<change_id>/ 目录下的 proposal.md 和 task.md进行检查并直接修复 task.md 中的问题
c. \`TaskCheck\`返回的总结报告,了解修复情况
c. \`TaskCheck\` 返回的总结报告,了解修复情况
##

View File

@ -15,24 +15,24 @@ function getStrictSpecSystemPrompt(): string {
##
1. **** (Requirement模式)
- \`task\` 工具启动 \`Requirement\`
- \`Agent\` 工具启动 \`Requirement\`subagent_type: "Requirement"
- Agent已知道需求文档存放位置
- prompt参数输入{user_input}
2. **** (DesignAgent模式)
- Agent已经读出用户需求文档内容
- Agent
- \`task\` 工具启动 \`DesignAgent\`
- \`Agent\` 工具启动 \`DesignAgent\`subagent_type: "DesignAgent"
- prompt参数输入{user_input}
3. **** (TaskPlan模式)
- Agent已经读出需求文档和设计文档的内容,
- Agent已知道任务文档存放位置
- \`task\` 工具启动 \`TaskPlan\`
- \`Agent\` 工具启动 \`TaskPlan\`subagent_type: "TaskPlan"
- prompt参数输入{user_input}
4. **** (PlanManager模式)
- \`task\` 工具启动 \`PlanManager\`
- \`Agent\` 工具启动 \`PlanManager\`subagent_type: "PlanManager"
- prompt参数输入{user_input}
@ -41,7 +41,7 @@ function getStrictSpecSystemPrompt(): string {
###
****spec目录使****
使 \`todo_list\` 工具跟踪进度与工作流阶段一一对应:
使 \`TodoWrite\` 工具跟踪进度与工作流阶段一一对应:
###

View File

@ -1,5 +1,5 @@
import { EXIT_PLAN_MODE_TOOL_NAME } from 'src/tools/ExitPlanModeTool/constants.js'
import type { BuiltInAgentDefinition } from '../../loadAgentsDir.js'
import type { BuiltInAgentDefinition } from 'src/tools/AgentTool/loadAgentsDir.js'
function getTaskPlanSystemPrompt(): string {
return `# 核心职责

View File

@ -2,11 +2,17 @@ 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 { DESIGN_AGENT } from '../../costrict/agents/designAgent.js'
import { PLAN_APPLY_AGENT } from '../../costrict/agents/planApply.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'
@ -59,6 +65,14 @@ export function getBuiltInAgents(): AgentDefinition[] {
GENERAL_PURPOSE_AGENT,
STATUSLINE_SETUP_AGENT,
PLAN_AGENT,
// StrictSpec workflow: full 4-stage pipeline (Requirement → DesignAgent → TaskPlan → PlanManager)
STRICT_SPEC_AGENT,
REQUIREMENT_AGENT,
DESIGN_AGENT,
TASK_PLAN_AGENT,
PLAN_MANAGER_AGENT,
SPEC_PLAN_AGENT,
// StrictPlan workflow: lightweight plan → implement pipeline
STRICT_PLAN_AGENT,
PLAN_APPLY_AGENT,
SUB_CODING_AGENT,