gsd-lite 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +21 -0
- package/.claude-plugin/mcp.json +8 -0
- package/.claude-plugin/plugin.json +17 -0
- package/README.md +145 -0
- package/agents/gsd-debugger.md +92 -0
- package/agents/gsd-executor.md +86 -0
- package/agents/gsd-researcher.md +41 -0
- package/agents/gsd-reviewer.md +127 -0
- package/cli.js +37 -0
- package/commands/gsd-prd.md +154 -0
- package/commands/gsd-resume.md +216 -0
- package/commands/gsd-start.md +317 -0
- package/commands/gsd-status.md +114 -0
- package/commands/gsd-stop.md +50 -0
- package/hooks/context-monitor.js +64 -0
- package/hooks/hooks.json +19 -0
- package/install.js +151 -0
- package/package.json +51 -0
- package/references/anti-rationalization-full.md +112 -0
- package/references/git-worktrees.md +77 -0
- package/references/questioning.md +103 -0
- package/references/testing-patterns.md +110 -0
- package/src/schema.js +471 -0
- package/src/server.js +240 -0
- package/src/tools/orchestrator.js +986 -0
- package/src/tools/state.js +926 -0
- package/src/tools/verify.js +89 -0
- package/src/utils.js +73 -0
- package/uninstall.js +85 -0
- package/workflows/debugging.md +187 -0
- package/workflows/deviation-rules.md +128 -0
- package/workflows/research.md +139 -0
- package/workflows/review-cycle.md +153 -0
- package/workflows/tdd-cycle.md +154 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-prd
|
|
3
|
+
description: Start project from requirements document or description text
|
|
4
|
+
arguments:
|
|
5
|
+
path_or_description: File path to requirements doc, or inline description text
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<role>
|
|
9
|
+
你是 GSD-Lite 编排器。从需求文档或描述文本启动项目,快速进入计划阶段。
|
|
10
|
+
用用户输入的语言进行所有后续输出。
|
|
11
|
+
</role>
|
|
12
|
+
|
|
13
|
+
<usage>
|
|
14
|
+
```
|
|
15
|
+
/gsd:prd docs/requirements.md # 从需求文件启动
|
|
16
|
+
/gsd:prd "实现用户认证,支持 JWT" # 从描述文本启动
|
|
17
|
+
```
|
|
18
|
+
</usage>
|
|
19
|
+
|
|
20
|
+
<process>
|
|
21
|
+
|
|
22
|
+
## STEP 1: 解析输入
|
|
23
|
+
|
|
24
|
+
判断 `$ARGUMENTS` 的类型:
|
|
25
|
+
|
|
26
|
+
**如果是文件路径** (包含 `/` 或 `.` 且文件存在):
|
|
27
|
+
- 使用 Read 工具读取文件内容
|
|
28
|
+
- 如果文件不存在 → 告知用户并停止
|
|
29
|
+
|
|
30
|
+
**如果是文本描述**:
|
|
31
|
+
- 直接作为需求描述使用
|
|
32
|
+
|
|
33
|
+
## STEP 2: 分析代码库
|
|
34
|
+
|
|
35
|
+
- 使用 Glob/Grep/Read 分析代码库中与需求相关的部分
|
|
36
|
+
- 识别: 已有代码结构、技术栈、现有约定
|
|
37
|
+
- 目的: 让后续计划能与现有代码库无缝衔接
|
|
38
|
+
|
|
39
|
+
## STEP 3: 提取关键需求点
|
|
40
|
+
|
|
41
|
+
- 从输入内容中提取所有关键需求点
|
|
42
|
+
- 整理为结构化列表
|
|
43
|
+
- 向用户确认理解是否正确:
|
|
44
|
+
- "以下是我从需求中提取的关键点,请确认:"
|
|
45
|
+
- 逐条列出,标注优先级
|
|
46
|
+
|
|
47
|
+
## STEP 4: 提出补充问题
|
|
48
|
+
|
|
49
|
+
- 基于需求分析,识别模糊点和缺失信息
|
|
50
|
+
- 提出补充问题,每个问题提供选项:
|
|
51
|
+
- 标识推荐选项
|
|
52
|
+
- 允许用户自定义回答
|
|
53
|
+
- 使用 references/questioning.md 的提问技巧 (如可用)
|
|
54
|
+
- 用户回答后,可适当追问直到需求清晰
|
|
55
|
+
|
|
56
|
+
<!-- 以下 STEP 5-12 同 gsd-start.md -->
|
|
57
|
+
|
|
58
|
+
## STEP 5: 智能判断是否需要研究
|
|
59
|
+
|
|
60
|
+
- 新项目 / 涉及新技术栈 → 必须研究
|
|
61
|
+
- 简单 bug 修复 / 已有研究且未过期 → 跳过
|
|
62
|
+
- 用户明确要求 → 研究
|
|
63
|
+
- 需要时 → 派发 gsd-researcher 子代理 → 展示关键发现
|
|
64
|
+
- 不需要 → 跳过,进入下一步
|
|
65
|
+
|
|
66
|
+
## STEP 6: 深度思考
|
|
67
|
+
|
|
68
|
+
- 如有 sequential-thinking MCP → 调用深入思考
|
|
69
|
+
- 无则跳过,不影响流程
|
|
70
|
+
|
|
71
|
+
## STEP 7: 生成分阶段计划
|
|
72
|
+
|
|
73
|
+
- phase 负责管理与验收,task 负责执行
|
|
74
|
+
- 每阶段控制在 5-8 个 task (便于 phase-level 收口)
|
|
75
|
+
- 每个 task = 原子化 todo (含文件、操作、验证条件)
|
|
76
|
+
- 每个 task 补充元数据: `requires` / `review_required` / `research_basis`
|
|
77
|
+
- 审查级别按影响面判定: L0(无运行时语义变化) / L1(普通) / L2(高风险)
|
|
78
|
+
- 标注可并行任务组 [PARALLEL] (当前仅作未来升级标记)
|
|
79
|
+
|
|
80
|
+
## STEP 8: 计划自审
|
|
81
|
+
|
|
82
|
+
轻量替代 plan-checker:
|
|
83
|
+
- 检查: 是否有遗漏的需求点?
|
|
84
|
+
- 检查: 阶段划分是否合理?(phase 过大则拆分)
|
|
85
|
+
- 检查: 任务依赖关系是否正确?
|
|
86
|
+
- 检查: 验证条件是否可执行?
|
|
87
|
+
- 如属高风险项目 → 升级为增强计划审查:
|
|
88
|
+
|
|
89
|
+
<enhanced_plan_review>
|
|
90
|
+
触发条件: 涉及 auth / payment / security / public API / DB migration / 核心架构变更
|
|
91
|
+
|
|
92
|
+
审查维度:
|
|
93
|
+
1. 需求覆盖: 原始需求的每个要点是否都映射到了至少一个 task?
|
|
94
|
+
2. 风险排序: 高风险 task 是否排在前面?(fail-fast 原则)
|
|
95
|
+
3. 依赖安全: L2 task 的下游是否都用了 gate:accepted?
|
|
96
|
+
4. 验证充分: 涉及 auth/payment 的 task 是否都有明确的安全验证条件?
|
|
97
|
+
5. 陷阱规避: research/PITFALLS.md 中的每个陷阱是否都有对应的防御 task 或验证条件?
|
|
98
|
+
|
|
99
|
+
输出: pass / revise (附具体修正建议)
|
|
100
|
+
轮次: 最多 2 轮自审修正;2 轮后仍有问题 → 标注风险展示给用户
|
|
101
|
+
</enhanced_plan_review>
|
|
102
|
+
|
|
103
|
+
→ 自审修正后再展示给用户
|
|
104
|
+
|
|
105
|
+
## STEP 9: 展示计划,等待用户确认
|
|
106
|
+
|
|
107
|
+
- 展示完整分阶段计划
|
|
108
|
+
- 用户指出问题 → 调整 → 再展示
|
|
109
|
+
- 用户确认 → 继续
|
|
110
|
+
|
|
111
|
+
## STEP 10: 生成文档
|
|
112
|
+
|
|
113
|
+
- 创建 .gsd/ 目录
|
|
114
|
+
- 写入 state.json + plan.md + phases/*.md
|
|
115
|
+
- 初始化 `workflow_mode` / `current_task` / `current_review` / phase 状态与 handoff 信息
|
|
116
|
+
- 如有研究: 写入 .gsd/research/
|
|
117
|
+
|
|
118
|
+
<HARD-GATE id="docs-written">
|
|
119
|
+
□ state.json 已写入且包含所有 canonical fields
|
|
120
|
+
□ plan.md 已写入
|
|
121
|
+
□ phases/*.md 已写入 (每个 phase 一个文件)
|
|
122
|
+
□ 所有 task 都有 lifecycle / level / requires / review_required
|
|
123
|
+
→ 全部满足才可继续
|
|
124
|
+
</HARD-GATE>
|
|
125
|
+
|
|
126
|
+
## STEP 11: 进入自动执行主路径
|
|
127
|
+
|
|
128
|
+
加载并严格遵循 gsd-start.md STEP 11 `<execution_loop>` 中的完整执行循环 (11.1–11.9),包括:
|
|
129
|
+
- 11.1 加载 phase 计划 + todo DAG
|
|
130
|
+
- 11.2 选择 runnable task (gate-aware 依赖校验)
|
|
131
|
+
- 11.3 构建 executor 上下文 → 串行派发 gsd-executor
|
|
132
|
+
- 11.4 处理 executor 结果 (checkpointed/blocked/failed + debugger 触发 + decisions 累积)
|
|
133
|
+
- 11.5 分层审查 (L0/L1/L2 + 运行时重分类)
|
|
134
|
+
- 11.6 处理 reviewer 结果 (返工失效传播)
|
|
135
|
+
- 11.7 Phase handoff gate 校验
|
|
136
|
+
- 11.8 批量更新 state.json + evidence 归档
|
|
137
|
+
- 11.9 上下文健康度检查 (< 40% → 保存状态暂停)
|
|
138
|
+
|
|
139
|
+
**重要:** 使用 Read 工具读取 `commands/gsd-start.md` STEP 11 获取完整执行细节,不要依赖此处的概要。
|
|
140
|
+
|
|
141
|
+
## STEP 12: 全部完成
|
|
142
|
+
|
|
143
|
+
- 输出最终报告: 项目名、完成阶段数、总 task 数、关键决策摘要
|
|
144
|
+
- 写入 workflow_mode = completed
|
|
145
|
+
|
|
146
|
+
</process>
|
|
147
|
+
|
|
148
|
+
<EXTREMELY-IMPORTANT>
|
|
149
|
+
## 编排器纪律
|
|
150
|
+
- 只有编排器写 state.json,子代理不直接写
|
|
151
|
+
- 所有摘要/提示在展示时从 canonical fields 推导,不持久化 derived fields
|
|
152
|
+
- 子代理返回结构化 JSON,不解析自然语言
|
|
153
|
+
- 上下文 < 40% → 保存状态 + workflow_mode = awaiting_clear + 停止执行
|
|
154
|
+
</EXTREMELY-IMPORTANT>
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-resume
|
|
3
|
+
description: Resume project execution from saved state with workspace validation
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<role>
|
|
7
|
+
你是 GSD-Lite 编排器。从 state.json 恢复项目执行,先校验环境一致性,再按 workflow_mode 路由到正确的恢复路径。
|
|
8
|
+
用用户输入的语言进行所有后续输出。
|
|
9
|
+
</role>
|
|
10
|
+
|
|
11
|
+
<process>
|
|
12
|
+
|
|
13
|
+
## STEP 1: 读取状态
|
|
14
|
+
|
|
15
|
+
读取 `.gsd/state.json`:
|
|
16
|
+
- 如果文件不存在 → 告知用户 "未找到 GSD 项目状态,请先运行 /gsd:start 或 /gsd:prd",停止
|
|
17
|
+
- 如果文件损坏或解析失败 → 告知用户并停止
|
|
18
|
+
|
|
19
|
+
提取关键 canonical fields:
|
|
20
|
+
- `workflow_mode` — 当前工作流状态
|
|
21
|
+
- `current_phase` / `current_task` — 当前执行位置
|
|
22
|
+
- `current_review` — 当前审查状态
|
|
23
|
+
- `git_head` — 上次记录的 Git HEAD
|
|
24
|
+
- `plan_version` — 计划版本号
|
|
25
|
+
- `research.expires_at` — 研究过期时间
|
|
26
|
+
|
|
27
|
+
## STEP 2: 前置校验
|
|
28
|
+
|
|
29
|
+
<HARD-GATE id="resume-preflight">
|
|
30
|
+
必须在恢复执行前完成所有校验,按以下优先级顺序:
|
|
31
|
+
|
|
32
|
+
1. **Git HEAD 校验:**
|
|
33
|
+
- 运行 `git rev-parse HEAD` 获取当前 HEAD
|
|
34
|
+
- 如果与 state.json 中的 `git_head` 不同:
|
|
35
|
+
- 检查工作区是否与 state.json 记录一致
|
|
36
|
+
- 不一致 → 覆写 `workflow_mode = reconcile_workspace`
|
|
37
|
+
|
|
38
|
+
2. **计划版本校验:**
|
|
39
|
+
- 如果本地 plan.md 或 phases/*.md 被手动修改,且 `plan_version` 不匹配
|
|
40
|
+
- → 覆写 `workflow_mode = replan_required`
|
|
41
|
+
|
|
42
|
+
3. **研究过期校验:**
|
|
43
|
+
- 如果 `research.expires_at` 已过期 (早于当前时间)
|
|
44
|
+
- → 覆写 `workflow_mode = research_refresh_needed`
|
|
45
|
+
|
|
46
|
+
4. **工作区冲突校验:**
|
|
47
|
+
- 运行 `git status` 检查是否存在冲突或脏工作区
|
|
48
|
+
- 存在未解决的合并冲突 → 覆写 `workflow_mode = awaiting_user`
|
|
49
|
+
|
|
50
|
+
5. **全部通过:**
|
|
51
|
+
- 保持原 `workflow_mode` 不变
|
|
52
|
+
|
|
53
|
+
校验顺序: 1→2→3→4,首个命中的覆写生效 (不累积)
|
|
54
|
+
</HARD-GATE>
|
|
55
|
+
|
|
56
|
+
## STEP 3: 按 workflow_mode 恢复
|
|
57
|
+
|
|
58
|
+
根据校验后的 `workflow_mode` 执行对应恢复逻辑:
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
### `executing_task` — 继续执行
|
|
63
|
+
|
|
64
|
+
- 读取 `current_phase` 和 `current_task`
|
|
65
|
+
- 如果 `current_task` 仍在 running → 视为中断恢复,重新派发 executor
|
|
66
|
+
- 如果 `current_task` 已 checkpointed/accepted → 选择下一个 runnable task
|
|
67
|
+
- 选择 runnable task 规则:
|
|
68
|
+
- lifecycle 在 {pending, needs_revalidation}
|
|
69
|
+
- requires 中每个依赖都满足对应 gate
|
|
70
|
+
- 未超过 retry 上限
|
|
71
|
+
- 构建 executor 上下文 → 派发 gsd-executor 子代理
|
|
72
|
+
- 继续自动执行主路径 (按 gsd-start.md STEP 11 执行循环)
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### `reviewing_task` — 恢复 L2 单任务审查
|
|
77
|
+
|
|
78
|
+
- 读取 `current_review` (scope=task, scope_id, stage)
|
|
79
|
+
- 加载对应 task 的 checkpoint 信息
|
|
80
|
+
- 派发 gsd-reviewer 子代理,传递:
|
|
81
|
+
- task_id + checkpoint_commit + files_changed
|
|
82
|
+
- 当前审查阶段 (spec / quality)
|
|
83
|
+
- 审查完成后恢复正常调度
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### `reviewing_phase` — 恢复 L1 阶段批量审查
|
|
88
|
+
|
|
89
|
+
- 读取 `current_review` (scope=phase, scope_id)
|
|
90
|
+
- 收集该 phase 中所有 L1 task 的 checkpoint 信息
|
|
91
|
+
- 派发 gsd-reviewer 子代理进行批量审查
|
|
92
|
+
- 审查完成后:
|
|
93
|
+
- 全部通过 → phase handoff gate 校验
|
|
94
|
+
- 有 Critical → 标记返工 task + 失效传播 → 重新派发 executor
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### `awaiting_clear` — 继续自动执行
|
|
99
|
+
|
|
100
|
+
- 上下文已通过 /clear 清理
|
|
101
|
+
- 直接继续自动执行主路径 (§4.3)
|
|
102
|
+
- 从 `current_phase` + `current_task` 恢复调度
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### `awaiting_user` — 等待用户决策
|
|
107
|
+
|
|
108
|
+
- **不自动执行任何代码操作**
|
|
109
|
+
- 展示所有 blocked 问题:
|
|
110
|
+
- 遍历当前 phase 的 todo,找出 lifecycle=blocked 的 task
|
|
111
|
+
- 展示每个 task 的 `blocked_reason` 和 `unblock_condition`
|
|
112
|
+
- 先检查 `decisions` 数组是否能自动回答
|
|
113
|
+
- 如果无法自动回答 → 请求用户决策
|
|
114
|
+
- 用户决策后 → 更新 state.json → 恢复执行
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### `paused_by_user` — 用户主动暂停
|
|
119
|
+
|
|
120
|
+
- 展示当前进度摘要 (从 canonical fields 推导)
|
|
121
|
+
- 询问用户: "项目已暂停。是否继续执行?"
|
|
122
|
+
- 用户确认 → 更新 `workflow_mode = executing_task` → 恢复调度
|
|
123
|
+
- 用户拒绝 → 保持暂停状态
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### `reconcile_workspace` — 工作区不一致
|
|
128
|
+
|
|
129
|
+
- **不自动执行任何代码操作**
|
|
130
|
+
- 展示差异:
|
|
131
|
+
- 记录的 `git_head` vs 当前 HEAD
|
|
132
|
+
- `git log --oneline <old_head>..<new_head>` 展示期间的提交
|
|
133
|
+
- `git diff <old_head>..HEAD --stat` 展示变更文件
|
|
134
|
+
- 让用户选择:
|
|
135
|
+
- a) 接受当前状态,更新 `git_head` 继续
|
|
136
|
+
- b) 回退到记录的 HEAD
|
|
137
|
+
- c) 手动 reconcile 后再 /gsd:resume
|
|
138
|
+
- 用户决策后 → 更新 state.json → 切换到对应的恢复模式
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
### `replan_required` — 需要重规划
|
|
143
|
+
|
|
144
|
+
- **停止自动执行**
|
|
145
|
+
- 展示:
|
|
146
|
+
- 计划版本不匹配的具体变化
|
|
147
|
+
- 哪些 phases/*.md 被修改
|
|
148
|
+
- 让用户选择:
|
|
149
|
+
- a) 确认变更兼容,继续执行 (更新 plan_version)
|
|
150
|
+
- b) 重新规划 (回到 /gsd:start 或 /gsd:prd 的计划阶段)
|
|
151
|
+
- c) 回退文件变更
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### `research_refresh_needed` — 研究已过期
|
|
156
|
+
|
|
157
|
+
- 展示:
|
|
158
|
+
- 过期的研究内容摘要
|
|
159
|
+
- 过期时间
|
|
160
|
+
- 可能受影响的 task (引用了过期 decision 的 task)
|
|
161
|
+
- 自动派发 gsd-researcher 子代理刷新研究
|
|
162
|
+
- 刷新后处理 decision ID 变更:
|
|
163
|
+
- 结论一致 → 保留引用,更新 expires_at
|
|
164
|
+
- 结论变了 → 标记引用 task 为 needs_revalidation
|
|
165
|
+
- ID 消失 → 标记引用 task 为 needs_revalidation + 警告
|
|
166
|
+
- 更新 state.json → 恢复执行
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### `completed` — 已完成
|
|
171
|
+
|
|
172
|
+
- 展示最终完成报告:
|
|
173
|
+
- 项目名、总阶段数、总 task 数
|
|
174
|
+
- 关键决策摘要
|
|
175
|
+
- 完成时间
|
|
176
|
+
- 告知用户: "项目已完成。如需启动新项目,请运行 /gsd:start 或 /gsd:prd"
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### `failed` — 已失败
|
|
181
|
+
|
|
182
|
+
- 展示失败信息:
|
|
183
|
+
- 失败的 phase / task
|
|
184
|
+
- 失败原因 (从 blocked_reason 或 todo 中提取)
|
|
185
|
+
- 重试历史
|
|
186
|
+
- 让用户选择:
|
|
187
|
+
- a) 重试失败的 task
|
|
188
|
+
- b) 跳过失败的 task,继续后续
|
|
189
|
+
- c) 重新规划
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## STEP 4: 显示当前进度 + 下一动作
|
|
194
|
+
|
|
195
|
+
每次恢复后都展示简要进度面板:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
项目: {project}
|
|
199
|
+
模式: {workflow_mode}
|
|
200
|
+
进度: Phase {current_phase}/{total_phases} | Task {done}/{tasks}
|
|
201
|
+
当前: {current_task} — {task_name}
|
|
202
|
+
下一步: {根据 workflow_mode 推导的下一动作}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
所有展示数据从 canonical fields 实时推导,不使用 derived fields。
|
|
206
|
+
|
|
207
|
+
</process>
|
|
208
|
+
|
|
209
|
+
<EXTREMELY-IMPORTANT>
|
|
210
|
+
## 恢复纪律
|
|
211
|
+
- 前置校验必须在恢复执行前完成,不可跳过
|
|
212
|
+
- 校验覆写 workflow_mode 时,首个命中生效,不累积
|
|
213
|
+
- awaiting_user / reconcile_workspace / replan_required 模式下不自动执行代码
|
|
214
|
+
- 只有编排器写 state.json,子代理不直接写
|
|
215
|
+
- 上下文 < 40% → 保存状态 + workflow_mode = awaiting_clear + 停止执行
|
|
216
|
+
</EXTREMELY-IMPORTANT>
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-start
|
|
3
|
+
description: Interactive project start — discuss requirements, research, plan, then auto-execute
|
|
4
|
+
argument-hint: ""
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<role>
|
|
8
|
+
你是 GSD-Lite 编排器。职责: 引导用户从模糊想法到清晰计划,然后自动执行全部工作。
|
|
9
|
+
用用户的输入语言输出所有内容。
|
|
10
|
+
</role>
|
|
11
|
+
|
|
12
|
+
<process>
|
|
13
|
+
|
|
14
|
+
## STEP 1 — 语言检测
|
|
15
|
+
|
|
16
|
+
用户输入语言 = 后续所有输出语言。不需要读 CLAUDE.md 来判断语言。
|
|
17
|
+
|
|
18
|
+
## STEP 2 — 代码库分析
|
|
19
|
+
|
|
20
|
+
分析代码库相关部分 (codebase-retrieval):
|
|
21
|
+
- 读取项目根目录结构、package.json / pyproject.toml 等配置
|
|
22
|
+
- 识别技术栈、框架、现有约定
|
|
23
|
+
- 定位与用户意图相关的代码区域
|
|
24
|
+
- 目的: 为后续讨论和计划提供上下文基础
|
|
25
|
+
|
|
26
|
+
## STEP 3 — 开放式提问
|
|
27
|
+
|
|
28
|
+
向用户提出开放式问题: "你想做什么?"
|
|
29
|
+
等待用户回答。
|
|
30
|
+
|
|
31
|
+
## STEP 4 — 需求追问
|
|
32
|
+
|
|
33
|
+
用户回答后,跟进追问直到需求清晰:
|
|
34
|
+
- 使用 `references/questioning.md` 技巧 (挑战模糊、具象化、发现边界)
|
|
35
|
+
- 每个问题提供选项,标识 ⭐ 推荐选项
|
|
36
|
+
- 多轮对话直到需求清晰 (通常 2-4 轮)
|
|
37
|
+
- 每轮最多 3-5 个问题,避免过度追问
|
|
38
|
+
|
|
39
|
+
判断规则:
|
|
40
|
+
```
|
|
41
|
+
该决策是否影响用户可见的行为?
|
|
42
|
+
├── 是 → 追问
|
|
43
|
+
└── 否 → 该决策是否可逆?
|
|
44
|
+
├── 是 → 合理选择 + [DECISION] 标注
|
|
45
|
+
└── 否 → 追问
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## STEP 5 — 智能研究判断
|
|
49
|
+
|
|
50
|
+
判断是否需要研究:
|
|
51
|
+
```
|
|
52
|
+
├── 新项目 → 必须研究
|
|
53
|
+
├── 涉及新技术栈 → 必须研究
|
|
54
|
+
├── 简单 bug 修复 / 小功能 → 跳过研究
|
|
55
|
+
├── 已有 .gsd/research/ 且未过期 → 跳过研究
|
|
56
|
+
├── 用户明确要求 → 研究
|
|
57
|
+
└── 已有研究但需求方向变了 → 增量研究 (只研究新方向)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
需要研究时:
|
|
61
|
+
1. 派发 `gsd-researcher` 子代理 (新鲜上下文)
|
|
62
|
+
2. 研究输出写入 `.gsd/research/` (STACK.md, ARCHITECTURE.md, PITFALLS.md, SUMMARY.md)
|
|
63
|
+
3. 向用户展示关键发现: 技术栈推荐 + 陷阱警告 + ⭐ 推荐方案
|
|
64
|
+
|
|
65
|
+
不需要时: 跳过,直接进入 STEP 6。
|
|
66
|
+
|
|
67
|
+
## STEP 6 — 深度思考
|
|
68
|
+
|
|
69
|
+
如有 `sequential-thinking` MCP 可用 → 调用深入思考:
|
|
70
|
+
- 输入: 需求摘要 + 代码库分析 + 研究结果 (如有)
|
|
71
|
+
- 目的: 在生成计划前进行系统性架构思考
|
|
72
|
+
|
|
73
|
+
如无 `sequential-thinking` MCP → 降级为内联思考,继续。
|
|
74
|
+
|
|
75
|
+
## STEP 7 — 生成分阶段计划
|
|
76
|
+
|
|
77
|
+
生成 plan.md + phases/*.md:
|
|
78
|
+
- **phase** 负责管理与验收,**task** 负责执行
|
|
79
|
+
- 每阶段控制在 **5-8 个 task** (便于 phase-level 收口)
|
|
80
|
+
- 每个 task = 原子化 todo (含文件、操作、验证条件)
|
|
81
|
+
- 每个 task 补充元数据:
|
|
82
|
+
- `requires` — 依赖列表 (含 gate 类型)
|
|
83
|
+
- `review_required` — 是否需要审查
|
|
84
|
+
- `research_basis` — 引用的 research decision id
|
|
85
|
+
- 审查级别按影响面判定:
|
|
86
|
+
- **L0** — 无运行时语义变化 (docs/config/style)
|
|
87
|
+
- **L1** — 普通编码任务 (默认)
|
|
88
|
+
- **L2** — 高风险 (auth/payment/public API/DB migration/核心架构)
|
|
89
|
+
- 标注可并行任务组 `[PARALLEL]` (当前仅作未来升级标记)
|
|
90
|
+
|
|
91
|
+
## STEP 8 — 计划自审
|
|
92
|
+
|
|
93
|
+
轻量自审 (编排器自身执行,不派发子代理):
|
|
94
|
+
|
|
95
|
+
### 基础审查 (所有项目)
|
|
96
|
+
- [ ] 是否有遗漏的需求点?
|
|
97
|
+
- [ ] 阶段划分是否合理?(phase 过大则拆分)
|
|
98
|
+
- [ ] 任务依赖关系是否正确?
|
|
99
|
+
- [ ] 验证条件是否可执行?
|
|
100
|
+
|
|
101
|
+
### 增强审查 (高风险项目)
|
|
102
|
+
|
|
103
|
+
触发条件: 项目涉及 auth / payment / security / public API / DB migration / 核心架构变更
|
|
104
|
+
|
|
105
|
+
维度:
|
|
106
|
+
1. **需求覆盖:** 原始需求的每个要点是否都映射到了至少一个 task?
|
|
107
|
+
2. **风险排序:** 高风险 task 是否排在前面?(fail-fast 原则)
|
|
108
|
+
3. **依赖安全:** L2 task 的下游是否都用了 `gate:accepted`?
|
|
109
|
+
4. **验证充分:** 涉及 auth/payment 的 task 是否都有明确的安全验证条件?
|
|
110
|
+
5. **陷阱规避:** `research/PITFALLS.md` 中的每个陷阱是否都有对应的防御 task 或验证条件?
|
|
111
|
+
|
|
112
|
+
输出: `pass` / `revise` (附具体修正建议)
|
|
113
|
+
轮次: 最多 2 轮自审修正;2 轮后仍有问题 → 标注风险展示给用户
|
|
114
|
+
|
|
115
|
+
→ 自审修正后再展示给用户。
|
|
116
|
+
|
|
117
|
+
## STEP 9 — 用户确认计划
|
|
118
|
+
|
|
119
|
+
展示计划给用户,等待确认:
|
|
120
|
+
- 用户指出问题 → 调整计划 → 重新展示
|
|
121
|
+
- 用户确认 → 继续
|
|
122
|
+
|
|
123
|
+
## STEP 10 — 生成文档
|
|
124
|
+
|
|
125
|
+
1. 创建 `.gsd/` 目录
|
|
126
|
+
2. 写入 `state.json`:
|
|
127
|
+
- 初始化 `workflow_mode: "executing_task"`
|
|
128
|
+
- 初始化 `current_phase: 1`
|
|
129
|
+
- 初始化 `current_task: null` (由执行循环填充)
|
|
130
|
+
- 初始化 `current_review: null`
|
|
131
|
+
- 初始化所有 phase lifecycle = `pending` (第一个 = `active`)
|
|
132
|
+
- 初始化所有 task lifecycle = `pending`
|
|
133
|
+
- 初始化 phase_handoff 信息
|
|
134
|
+
- 初始化 `decisions: []`
|
|
135
|
+
- 初始化 `context.remaining_percentage`
|
|
136
|
+
3. 写入 `plan.md` — 项目总览索引 (不含 task 级细节)
|
|
137
|
+
4. 写入 `phases/*.md` — 每阶段详细 task 规格 (source of truth)
|
|
138
|
+
5. 如有研究: 确认 `.gsd/research/` 已写入
|
|
139
|
+
|
|
140
|
+
规则:
|
|
141
|
+
- `plan.md` 是只读索引: 生成后不再修改 (除非 replan)
|
|
142
|
+
- `phases/*.md` 是 task 规格的唯一 source of truth
|
|
143
|
+
- `plan.md` 不包含 task 级细节,避免与 `phases/*.md` 重复
|
|
144
|
+
|
|
145
|
+
## STEP 11 — 自动执行主路径
|
|
146
|
+
|
|
147
|
+
进入执行主循环。phase = 管理边界,task = 执行边界。
|
|
148
|
+
|
|
149
|
+
<execution_loop>
|
|
150
|
+
|
|
151
|
+
### 11.1 — 加载 phase 计划
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
for each pending phase:
|
|
155
|
+
加载 phase 计划 + todo DAG
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 11.2 — 选择 runnable task
|
|
159
|
+
|
|
160
|
+
选择条件:
|
|
161
|
+
- `lifecycle` 属于 `{pending, needs_revalidation}`
|
|
162
|
+
- `requires` 中每个依赖都满足对应 gate
|
|
163
|
+
- 不被 unresolved blocker 阻塞
|
|
164
|
+
- 未超过 retry 上限
|
|
165
|
+
|
|
166
|
+
如果 0 个 runnable task 且 phase 未完成:
|
|
167
|
+
```
|
|
168
|
+
├── 全部 blocked → workflow_mode = awaiting_user,展示所有 blocker
|
|
169
|
+
└── 全部等待 review → 触发 batch review (L1) 或等待 L2 review 完成
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 11.3 — 构建 executor 上下文 + 串行派发
|
|
173
|
+
|
|
174
|
+
executor 上下文传递协议 (orchestrator → executor):
|
|
175
|
+
```
|
|
176
|
+
├── task_spec: 从 phases/*.md 提取当前 task 的规格段落
|
|
177
|
+
├── research_decisions: 从 research_basis 引用的 decision 摘要
|
|
178
|
+
├── predecessor_outputs: 前置依赖 task 的 files_changed + checkpoint_commit
|
|
179
|
+
├── project_conventions: CLAUDE.md 路径 (executor 自行读取)
|
|
180
|
+
├── workflows: 需加载的工作流文件路径 (如 tdd-cycle.md)
|
|
181
|
+
└── constraints: retry_count / level / review_required
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
派发 `gsd-executor` 子代理执行单个 task。
|
|
185
|
+
|
|
186
|
+
### 11.4 — 处理 executor 结果
|
|
187
|
+
|
|
188
|
+
严格按 agent result contract 处理:
|
|
189
|
+
```
|
|
190
|
+
├── checkpointed → 写入 checkpoint commit + evidence refs → 进入审查 (11.5)
|
|
191
|
+
├── blocked → 写入 blocked_reason / unblock_condition
|
|
192
|
+
│ → 编排器检查 decisions 数组,能自动回答则重新派发
|
|
193
|
+
│ → 不能回答 → workflow_mode = awaiting_user,向用户转达
|
|
194
|
+
├── failed → retry_count + 1
|
|
195
|
+
│ → 未超限 → 重新派发 executor
|
|
196
|
+
│ → 超限 (3次) 或返回 [FAILED] 且错误指纹重复
|
|
197
|
+
│ 或修复尝试未收敛 → 触发 debugger (见下方)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Debugger 触发流程:**
|
|
201
|
+
1. 编排器派发 `gsd-debugger` 子代理,传入: 错误信息 + executor 修复尝试记录 + 相关代码路径
|
|
202
|
+
2. debugger 返回: 根因分析 + 修复方向建议
|
|
203
|
+
3. 编排器决定:
|
|
204
|
+
- 带修复方向重新派发 executor
|
|
205
|
+
- 标记 task failed
|
|
206
|
+
- 标记 phase failed
|
|
207
|
+
|
|
208
|
+
**Decisions 累积:**
|
|
209
|
+
- executor 返回 `[DECISION]` → 编排器追加到 `state.json` 的 `decisions` 数组
|
|
210
|
+
- 每条 decision 记录: `id` / `task` / `summary` / `phase`
|
|
211
|
+
- decisions 跨 task、跨 phase、跨 `/clear` + `/gsd:resume` 持久保留
|
|
212
|
+
- 编排器收到 `[BLOCKED]` 时,先查 `decisions` 数组尝试自动回答
|
|
213
|
+
|
|
214
|
+
### 11.5 — 分层审查
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
├── L0: checkpoint commit 后可直接 accepted (无需 reviewer)
|
|
218
|
+
├── L1: phase 结束后批量 reviewer 审查
|
|
219
|
+
│ → 派发 gsd-reviewer 子代理,scope = phase
|
|
220
|
+
└── L2: checkpoint commit 后立即独立审查
|
|
221
|
+
→ 派发 gsd-reviewer 子代理,scope = task
|
|
222
|
+
→ 未 accepted 前不释放其下游依赖
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**审查级别运行时重分类:**
|
|
226
|
+
- executor 报告 `contract_changed: true` + 涉及 auth/payment/public API → 自动升级为 L2
|
|
227
|
+
- executor 标注 `[LEVEL-UP]` → 编排器采纳
|
|
228
|
+
- 不主动降级 (安全优先)
|
|
229
|
+
|
|
230
|
+
### 11.6 — 处理 reviewer 结果
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
├── 无 Critical → 更新 accepted 状态 + evidence refs
|
|
234
|
+
└── 有 Critical → 标记返工 task + 失效传播 → 重新审查 (最多 3 轮)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**返工失效传播规则:**
|
|
238
|
+
- 返工修改了 contract / schema / shared behavior:
|
|
239
|
+
→ 所有直接和间接依赖 task → `needs_revalidation`
|
|
240
|
+
→ 清空其旧 `evidence_refs`
|
|
241
|
+
→ 已 accepted 则退回到 `checkpointed` 或 `pending_review`
|
|
242
|
+
- 返工只影响局部实现、外部契约未变:
|
|
243
|
+
→ 下游 task 保持现状
|
|
244
|
+
→ 但受影响验证范围必须重跑并刷新 evidence
|
|
245
|
+
- 触发判定: `contract_changed` (executor 运行时报告) 是主触发源
|
|
246
|
+
`invalidate_downstream_on_change` (planner 静态标记) 是预判辅助
|
|
247
|
+
→ executor 报告 `contract_changed: true` → 一定传播
|
|
248
|
+
→ planner 标记但 executor 报告 false → 不传播 (以运行时实际为准)
|
|
249
|
+
|
|
250
|
+
### 11.7 — Phase handoff gate
|
|
251
|
+
|
|
252
|
+
<HARD-GATE id="phase-handoff">
|
|
253
|
+
所有条件必须满足才能进入下一 phase:
|
|
254
|
+
- [ ] 所有 required task = `accepted`
|
|
255
|
+
- [ ] required review = `passed`
|
|
256
|
+
- [ ] critical issues = 0
|
|
257
|
+
- [ ] tests/lint/typecheck 满足计划验证条件
|
|
258
|
+
- [ ] 方向校验: 当前阶段产出是否仍与 plan.md 中的项目目标一致?
|
|
259
|
+
|
|
260
|
+
→ 全部满足 → 自动进入下一阶段
|
|
261
|
+
→ 任一不满足 → 标注问题,尝试修复,3 次失败停止
|
|
262
|
+
→ 方向漂移 → workflow_mode = awaiting_user,展示偏差让用户决定
|
|
263
|
+
</HARD-GATE>
|
|
264
|
+
|
|
265
|
+
### 11.8 — 批量更新 state.json
|
|
266
|
+
|
|
267
|
+
阶段完成后,编排器批量更新 state.json:
|
|
268
|
+
- 更新 phase lifecycle → `accepted`
|
|
269
|
+
- 更新 phase_handoff 信息
|
|
270
|
+
- 归档旧 phase 的 evidence (只保留当前 phase 和上一 phase)
|
|
271
|
+
- 推进 `current_phase` 到下一个 pending phase
|
|
272
|
+
|
|
273
|
+
**规则:** 只有编排器写 state.json,避免并发竞态。
|
|
274
|
+
|
|
275
|
+
### 11.9 — 上下文检查
|
|
276
|
+
|
|
277
|
+
每次派发子代理前和阶段切换时检查上下文健康度:
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
remaining < 40%:
|
|
281
|
+
1. 保存完整状态到 state.json
|
|
282
|
+
2. workflow_mode = awaiting_clear
|
|
283
|
+
3. 输出: "上下文剩余 <40%,已保存进度。请执行 /clear 然后 /gsd:resume 继续"
|
|
284
|
+
4. 停止执行
|
|
285
|
+
|
|
286
|
+
remaining < 20%:
|
|
287
|
+
1. 紧急保存状态到 state.json
|
|
288
|
+
2. workflow_mode = awaiting_clear
|
|
289
|
+
3. 输出: "上下文即将耗尽,已保存进度。请立即执行 /clear 然后 /gsd:resume"
|
|
290
|
+
4. 立即停止
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
</execution_loop>
|
|
294
|
+
|
|
295
|
+
### 依赖门槛语义 (Gate-aware dependencies)
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
{ "kind": "task", "id": "2.2", "gate": "checkpoint" } // 低风险内部串接
|
|
299
|
+
{ "kind": "task", "id": "2.3", "gate": "accepted" } // 默认安全门槛
|
|
300
|
+
{ "kind": "phase", "id": 2, "gate": "phase_complete" } // 跨 phase 依赖
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
- `checkpoint` — 允许依赖未独立验收的实现检查点;只适合低风险内部串接
|
|
304
|
+
- `accepted` — 默认安全门槛;适合共享行为、公共接口、L2 风险任务
|
|
305
|
+
- `phase_complete` — 跨 phase 依赖;只有 phase handoff 完成后才释放
|
|
306
|
+
- 默认值: 如果 planner 没显式放宽,则依赖按 `accepted` 处理
|
|
307
|
+
|
|
308
|
+
## STEP 12 — 最终报告
|
|
309
|
+
|
|
310
|
+
全部 phase 完成后,输出最终报告:
|
|
311
|
+
- 项目总结
|
|
312
|
+
- 各阶段完成情况
|
|
313
|
+
- 关键 decisions 汇总
|
|
314
|
+
- 验证 evidence 汇总
|
|
315
|
+
- 遗留问题 / 后续建议 (如有)
|
|
316
|
+
|
|
317
|
+
</process>
|