gsd-lite 0.3.2 → 0.3.5
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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/commands/prd.md +3 -142
- package/commands/resume.md +1 -1
- package/commands/start.md +3 -155
- package/hooks/gsd-context-monitor.cjs +23 -17
- package/hooks/gsd-session-init.cjs +1 -1
- package/hooks/gsd-statusline.cjs +17 -15
- package/package.json +1 -1
- package/references/evidence-spec.md +167 -0
- package/references/execution-loop.md +162 -0
- package/references/review-classification.md +84 -0
- package/references/state-diagram.md +218 -0
- package/src/schema.js +128 -26
- package/src/server.js +7 -0
- package/src/tools/orchestrator.js +11 -3
- package/src/tools/state.js +86 -50
- package/src/tools/verify.js +1 -1
- package/src/utils.js +21 -4
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Execution Loop -- Canonical Specification
|
|
2
|
+
|
|
3
|
+
本文件是执行循环的唯一 source of truth。所有 command 文件 (start.md, prd.md, resume.md) 引用此文件。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### 11.1 — 加载 phase 计划
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
for each pending phase:
|
|
11
|
+
加载 phase 计划 + todo DAG
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### 11.2 — 选择 runnable task
|
|
15
|
+
|
|
16
|
+
选择条件:
|
|
17
|
+
- `lifecycle` 属于 `{pending, needs_revalidation}`
|
|
18
|
+
- `requires` 中每个依赖都满足对应 gate
|
|
19
|
+
- 不被 unresolved blocker 阻塞
|
|
20
|
+
- 未超过 retry 上限
|
|
21
|
+
|
|
22
|
+
如果 0 个 runnable task 且 phase 未完成:
|
|
23
|
+
```
|
|
24
|
+
├── 全部 blocked → workflow_mode = awaiting_user,展示所有 blocker
|
|
25
|
+
└── 全部等待 review → 触发 batch review (L1) 或等待 L2 review 完成
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 11.3 — 构建 executor 上下文 + 串行派发
|
|
29
|
+
|
|
30
|
+
executor 上下文传递协议 (orchestrator → executor):
|
|
31
|
+
```
|
|
32
|
+
├── task_spec: 从 phases/*.md 提取当前 task 的规格段落
|
|
33
|
+
├── research_decisions: 从 research_basis 引用的 decision 摘要
|
|
34
|
+
├── predecessor_outputs: 前置依赖 task 的 files_changed + checkpoint_commit
|
|
35
|
+
├── project_conventions: CLAUDE.md 路径 (executor 自行读取)
|
|
36
|
+
├── workflows: 需加载的工作流文件路径 (如 tdd-cycle.md)
|
|
37
|
+
└── constraints: retry_count / level / review_required
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
派发 `executor` 子代理执行单个 task。
|
|
41
|
+
|
|
42
|
+
### 11.4 — 处理 executor 结果
|
|
43
|
+
|
|
44
|
+
严格按 agent result contract 处理:
|
|
45
|
+
```
|
|
46
|
+
├── checkpointed → 写入 checkpoint commit + evidence refs → 进入审查 (11.5)
|
|
47
|
+
├── blocked → 写入 blocked_reason / unblock_condition
|
|
48
|
+
│ → 编排器检查 decisions 数组,能自动回答则重新派发
|
|
49
|
+
│ → 不能回答 → workflow_mode = awaiting_user,向用户转达
|
|
50
|
+
├── failed → retry_count + 1
|
|
51
|
+
│ → 未超限 → 重新派发 executor
|
|
52
|
+
│ → 超限 (3次) 或返回 [FAILED] 且错误指纹重复
|
|
53
|
+
│ 或修复尝试未收敛 → 触发 debugger (见下方)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Debugger 触发流程:**
|
|
57
|
+
1. 编排器派发 `debugger` 子代理,传入: 错误信息 + executor 修复尝试记录 + 相关代码路径
|
|
58
|
+
2. debugger 返回: 根因分析 + 修复方向建议
|
|
59
|
+
3. 编排器决定:
|
|
60
|
+
- 带修复方向重新派发 executor
|
|
61
|
+
- 标记 task failed
|
|
62
|
+
- 标记 phase failed
|
|
63
|
+
|
|
64
|
+
**Decisions 累积:**
|
|
65
|
+
- executor 返回 `[DECISION]` → 编排器追加到 `state.json` 的 `decisions` 数组
|
|
66
|
+
- 每条 decision 记录: `id` / `task` / `summary` / `phase`
|
|
67
|
+
- decisions 跨 task、跨 phase、跨 `/clear` + `/gsd:resume` 持久保留
|
|
68
|
+
- 编排器收到 `[BLOCKED]` 时,先查 `decisions` 数组尝试自动回答
|
|
69
|
+
|
|
70
|
+
### 11.5 — 分层审查
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
├── L0: checkpoint commit 后可直接 accepted (无需 reviewer)
|
|
74
|
+
├── L1: phase 结束后批量 reviewer 审查
|
|
75
|
+
│ → 派发 reviewer 子代理,scope = phase
|
|
76
|
+
└── L2: checkpoint commit 后立即独立审查
|
|
77
|
+
→ 派发 reviewer 子代理,scope = task
|
|
78
|
+
→ 未 accepted 前不释放其下游依赖
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**审查级别运行时重分类:**
|
|
82
|
+
- executor 报告 `contract_changed: true` + 涉及 auth/payment/public API → 自动升级为 L2
|
|
83
|
+
- executor 标注 `[LEVEL-UP]` → 编排器采纳
|
|
84
|
+
- 不主动降级 (安全优先)
|
|
85
|
+
|
|
86
|
+
### 11.6 — 处理 reviewer 结果
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
├── 无 Critical → 更新 accepted 状态 + evidence refs
|
|
90
|
+
└── 有 Critical → 标记返工 task + 失效传播 → 重新审查 (最多 3 轮)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**返工失效传播规则:**
|
|
94
|
+
- 返工修改了 contract / schema / shared behavior:
|
|
95
|
+
→ 所有直接和间接依赖 task → `needs_revalidation`
|
|
96
|
+
→ 清空其旧 `evidence_refs`
|
|
97
|
+
→ 已 accepted 则退回到 `checkpointed` 或 `pending_review`
|
|
98
|
+
- 返工只影响局部实现、外部契约未变:
|
|
99
|
+
→ 下游 task 保持现状
|
|
100
|
+
→ 但受影响验证范围必须重跑并刷新 evidence
|
|
101
|
+
- 触发判定: `contract_changed` (executor 运行时报告) 是主触发源
|
|
102
|
+
`invalidate_downstream_on_change` (planner 静态标记) 是预判辅助
|
|
103
|
+
→ executor 报告 `contract_changed: true` → 一定传播
|
|
104
|
+
→ planner 标记但 executor 报告 false → 不传播 (以运行时实际为准)
|
|
105
|
+
|
|
106
|
+
### 11.7 — Phase handoff gate
|
|
107
|
+
|
|
108
|
+
<HARD-GATE id="phase-handoff">
|
|
109
|
+
所有条件必须满足才能进入下一 phase:
|
|
110
|
+
- [ ] 所有 required task = `accepted`
|
|
111
|
+
- [ ] required review = `passed`
|
|
112
|
+
- [ ] critical issues = 0
|
|
113
|
+
- [ ] tests/lint/typecheck 满足计划验证条件
|
|
114
|
+
- [ ] 方向校验: 当前阶段产出是否仍与 plan.md 中的项目目标一致?
|
|
115
|
+
|
|
116
|
+
→ 全部满足 → 自动进入下一阶段
|
|
117
|
+
→ 任一不满足 → 标注问题,尝试修复,3 次失败停止
|
|
118
|
+
→ 方向漂移 → workflow_mode = awaiting_user,展示偏差让用户决定
|
|
119
|
+
</HARD-GATE>
|
|
120
|
+
|
|
121
|
+
### 11.8 — 批量更新 state.json
|
|
122
|
+
|
|
123
|
+
阶段完成后,编排器批量更新 state.json:
|
|
124
|
+
- 更新 phase lifecycle → `accepted`
|
|
125
|
+
- 更新 phase_handoff 信息
|
|
126
|
+
- 归档旧 phase 的 evidence (只保留当前 phase 和上一 phase)
|
|
127
|
+
- 推进 `current_phase` 到下一个 pending phase
|
|
128
|
+
|
|
129
|
+
**规则:** 只有编排器写 state.json,避免并发竞态。
|
|
130
|
+
|
|
131
|
+
### 11.9 — 上下文检查
|
|
132
|
+
|
|
133
|
+
每次派发子代理前和阶段切换时检查上下文健康度:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
remaining < 35%:
|
|
137
|
+
1. 保存完整状态到 state.json
|
|
138
|
+
2. workflow_mode = awaiting_clear
|
|
139
|
+
3. 输出: "上下文剩余 <35%,已保存进度。请执行 /clear 然后 /gsd:resume 继续"
|
|
140
|
+
4. 停止执行
|
|
141
|
+
|
|
142
|
+
remaining < 25%:
|
|
143
|
+
1. 紧急保存状态到 state.json
|
|
144
|
+
2. workflow_mode = awaiting_clear
|
|
145
|
+
3. 输出: "上下文即将耗尽,已保存进度。请立即执行 /clear 然后 /gsd:resume"
|
|
146
|
+
4. 立即停止
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 依赖门槛语义 (Gate-aware dependencies)
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{ "kind": "task", "id": "2.2", "gate": "checkpoint" } // 低风险内部串接
|
|
155
|
+
{ "kind": "task", "id": "2.3", "gate": "accepted" } // 默认安全门槛
|
|
156
|
+
{ "kind": "phase", "id": 2, "gate": "phase_complete" } // 跨 phase 依赖
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
- `checkpoint` — 允许依赖未独立验收的实现检查点;只适合低风险内部串接
|
|
160
|
+
- `accepted` — 默认安全门槛;适合共享行为、公共接口、L2 风险任务
|
|
161
|
+
- `phase_complete` — 跨 phase 依赖;只有 phase handoff 完成后才释放
|
|
162
|
+
- 默认值: 如果 planner 没显式放宽,则依赖按 `accepted` 处理
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 审查级别分类参考
|
|
2
|
+
|
|
3
|
+
## 静态分类 (计划时)
|
|
4
|
+
|
|
5
|
+
| 级别 | 适用场景 | 审查方式 |
|
|
6
|
+
|------|---------|---------|
|
|
7
|
+
| L0 | 无运行时语义变化 (docs/config/style) | checkpoint 后直接 accepted |
|
|
8
|
+
| L1 | 普通编码任务 (默认) | phase 结束后批量审查 |
|
|
9
|
+
| L2 | 高风险 (auth/payment/public API/DB migration) | checkpoint 后立即独立审查 |
|
|
10
|
+
|
|
11
|
+
## 运行时重分类
|
|
12
|
+
|
|
13
|
+
触发条件 (L1 -> L2 升级):
|
|
14
|
+
1. executor 报告 `contract_changed: true` 且 task name 匹配敏感关键词
|
|
15
|
+
2. executor decisions 中包含 `[LEVEL-UP]` 标注 (字符串或 `decision.summary` 中包含)
|
|
16
|
+
|
|
17
|
+
敏感关键词正则 (`SENSITIVE_KEYWORDS`):
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
/\b(auth|payment|security|public.?api|login|token|credential|session|oauth)\b/i
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
规则: 只升不降 (安全优先)。当前级别为 L2 或 L3 时直接保持不变。
|
|
24
|
+
|
|
25
|
+
## 决策树
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
task.level 当前值?
|
|
29
|
+
├── L2 或 L3 -> 保持不变 (不降级)
|
|
30
|
+
└── L0 或 L1
|
|
31
|
+
├── executor decisions 含 [LEVEL-UP]? -> 升级为 L2
|
|
32
|
+
├── contract_changed: true + task.name 匹配敏感关键词? -> 升级为 L2
|
|
33
|
+
└── 否 -> 保持当前级别
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
来源: `reclassifyReviewLevel()` in `src/tools/state.js`
|
|
37
|
+
|
|
38
|
+
## 审查流程
|
|
39
|
+
|
|
40
|
+
### L0 流程
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
executor checkpointed
|
|
44
|
+
-> handleExecutorResult 检测 reviewLevel === 'L0'
|
|
45
|
+
-> auto_accepted = true
|
|
46
|
+
-> 编排器直接 accepted (persist lifecycle: 'accepted', done +1)
|
|
47
|
+
-> 释放下游依赖
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
不派发 reviewer。`review_required: false` 的 task 同样走此路径。
|
|
51
|
+
|
|
52
|
+
### L1 流程
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
executor checkpointed
|
|
56
|
+
-> workflow_mode 保持 'executing_task'
|
|
57
|
+
-> 继续执行其他 task
|
|
58
|
+
-> phase 内所有 runnable task 完成后
|
|
59
|
+
-> selectRunnableTask 返回 { mode: 'trigger_review' }
|
|
60
|
+
-> 编排器设置 workflow_mode = 'reviewing_phase'
|
|
61
|
+
-> 派发 reviewer (scope='phase', review_level='L1-batch')
|
|
62
|
+
-> 批量审查所有 checkpointed task (排除 L0)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### L2 流程
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
executor checkpointed
|
|
69
|
+
-> handleExecutorResult 检测 reviewLevel === 'L2' && review_required !== false
|
|
70
|
+
-> 设置 current_review = { scope: 'task', scope_id: task.id, stage: 'spec' }
|
|
71
|
+
-> workflow_mode = 'reviewing_task'
|
|
72
|
+
-> 派发 reviewer (scope='task', review_level='L2')
|
|
73
|
+
-> 审查通过后才释放下游依赖
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Reviewer 结果处理
|
|
77
|
+
|
|
78
|
+
| 审查结果 | 编排器行为 |
|
|
79
|
+
|----------|-----------|
|
|
80
|
+
| 无 critical issues | accepted_tasks 标记为 `accepted`; phase_review.status = `accepted` |
|
|
81
|
+
| 有 critical issues | rework_tasks 标记为 `needs_revalidation`; phase_review.status = `rework_required` |
|
|
82
|
+
| critical + `invalidates_downstream` | 触发 `propagateInvalidation`: 所有下游依赖 task -> `needs_revalidation` + 清空 evidence_refs |
|
|
83
|
+
|
|
84
|
+
来源: `handleReviewerResult()` in `src/tools/orchestrator.js`, `reviewer.md` in `agents/`
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# 状态机图参考
|
|
2
|
+
|
|
3
|
+
## 1. Task 生命周期
|
|
4
|
+
|
|
5
|
+
### 状态转换表
|
|
6
|
+
|
|
7
|
+
| 当前状态 | 允许的目标状态 |
|
|
8
|
+
|----------|---------------|
|
|
9
|
+
| `pending` | `running`, `blocked` |
|
|
10
|
+
| `running` | `checkpointed`, `blocked`, `failed` |
|
|
11
|
+
| `checkpointed` | `accepted`, `needs_revalidation` |
|
|
12
|
+
| `accepted` | `needs_revalidation` |
|
|
13
|
+
| `blocked` | `pending` |
|
|
14
|
+
| `failed` | `pending` |
|
|
15
|
+
| `needs_revalidation` | `pending` |
|
|
16
|
+
|
|
17
|
+
### Mermaid 图
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
stateDiagram-v2
|
|
21
|
+
[*] --> pending
|
|
22
|
+
|
|
23
|
+
pending --> running : 编排器选中执行
|
|
24
|
+
pending --> blocked : executor 报告阻塞
|
|
25
|
+
|
|
26
|
+
running --> checkpointed : executor 完成 checkpoint
|
|
27
|
+
running --> blocked : executor 运行时阻塞
|
|
28
|
+
running --> failed : executor 执行失败
|
|
29
|
+
|
|
30
|
+
checkpointed --> accepted : reviewer 审查通过 / L0 自动接受
|
|
31
|
+
checkpointed --> needs_revalidation : 上游返工触发失效传播
|
|
32
|
+
|
|
33
|
+
accepted --> needs_revalidation : 上游 contract 变更触发失效传播
|
|
34
|
+
|
|
35
|
+
blocked --> pending : 阻塞解除 (用户干预/自动匹配 decision)
|
|
36
|
+
|
|
37
|
+
failed --> pending : 重置后重试 (debugger 建议/用户干预)
|
|
38
|
+
|
|
39
|
+
needs_revalidation --> pending : 重新排入执行队列
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 关键路径说明
|
|
43
|
+
|
|
44
|
+
- **正常路径**: `pending -> running -> checkpointed -> accepted`
|
|
45
|
+
- **阻塞路径**: `pending -> blocked -> pending -> running` (解除阻塞后重入)
|
|
46
|
+
- **失败-重试路径**: `running -> failed -> pending -> running` (retry_count 递增)
|
|
47
|
+
- **返工路径**: `accepted -> needs_revalidation -> pending -> running` (contract 变更触发)
|
|
48
|
+
- **审查返工**: `checkpointed -> needs_revalidation -> pending -> running` (reviewer 要求返工)
|
|
49
|
+
|
|
50
|
+
来源: `TASK_LIFECYCLE` in `src/schema.js`
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 2. Phase 生命周期
|
|
55
|
+
|
|
56
|
+
### 状态转换表
|
|
57
|
+
|
|
58
|
+
| 当前状态 | 允许的目标状态 |
|
|
59
|
+
|----------|---------------|
|
|
60
|
+
| `pending` | `active` |
|
|
61
|
+
| `active` | `reviewing`, `blocked`, `failed` |
|
|
62
|
+
| `reviewing` | `accepted`, `active` |
|
|
63
|
+
| `accepted` | *(终态,无后续转换)* |
|
|
64
|
+
| `blocked` | `active` |
|
|
65
|
+
| `failed` | *(终态,无后续转换)* |
|
|
66
|
+
|
|
67
|
+
### Mermaid 图
|
|
68
|
+
|
|
69
|
+
```mermaid
|
|
70
|
+
stateDiagram-v2
|
|
71
|
+
[*] --> pending
|
|
72
|
+
|
|
73
|
+
pending --> active : 前置 phase 完成 / 首个 phase 自动激活
|
|
74
|
+
|
|
75
|
+
active --> reviewing : 所有 task 完成,触发 phase review
|
|
76
|
+
active --> blocked : 外部依赖阻塞
|
|
77
|
+
active --> failed : 不可恢复失败 (debugger 报告架构问题)
|
|
78
|
+
|
|
79
|
+
reviewing --> accepted : reviewer 审查通过 + handoff gate 满足
|
|
80
|
+
reviewing --> active : reviewer 发现 critical issues,需要返工
|
|
81
|
+
|
|
82
|
+
blocked --> active : 阻塞解除
|
|
83
|
+
|
|
84
|
+
accepted --> [*]
|
|
85
|
+
failed --> [*]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 关键路径说明
|
|
89
|
+
|
|
90
|
+
- **正常路径**: `pending -> active -> reviewing -> accepted`
|
|
91
|
+
- **返工路径**: `active -> reviewing -> active -> reviewing -> accepted` (最多循环)
|
|
92
|
+
- **失败路径**: `active -> failed` (终态,不可恢复)
|
|
93
|
+
- **Phase 推进**: 当前 phase `accepted` 后,下一个 `pending` phase 自动转为 `active`
|
|
94
|
+
|
|
95
|
+
来源: `PHASE_LIFECYCLE` in `src/schema.js`
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 3. Phase 审查状态
|
|
100
|
+
|
|
101
|
+
### 允许的状态值
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
pending -> reviewing -> accepted
|
|
105
|
+
\-> rework_required
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
| 状态 | 含义 |
|
|
109
|
+
|------|------|
|
|
110
|
+
| `pending` | 初始状态,尚未开始审查 |
|
|
111
|
+
| `reviewing` | 审查进行中 |
|
|
112
|
+
| `accepted` | 审查通过 |
|
|
113
|
+
| `rework_required` | 审查发现 critical issues,需要返工 |
|
|
114
|
+
|
|
115
|
+
### Mermaid 图
|
|
116
|
+
|
|
117
|
+
```mermaid
|
|
118
|
+
stateDiagram-v2
|
|
119
|
+
[*] --> pending
|
|
120
|
+
|
|
121
|
+
pending --> reviewing : 触发 phase review
|
|
122
|
+
|
|
123
|
+
reviewing --> accepted : 无 critical issues
|
|
124
|
+
reviewing --> rework_required : 有 critical issues
|
|
125
|
+
|
|
126
|
+
rework_required --> reviewing : 返工完成后重新审查
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 与 Phase Lifecycle 的关系
|
|
130
|
+
|
|
131
|
+
- `phase_review.status` 是 phase 对象内的子状态
|
|
132
|
+
- `phase_review.retry_count` 记录审查返工次数: 无 critical 时重置为 0,有 critical 时递增
|
|
133
|
+
- `handleReviewerResult` 中: 有 critical -> `rework_required`; 无 critical -> `accepted`
|
|
134
|
+
- 审查 accepted 且 scope 为 phase 时,同时设置 `phase_handoff.required_reviews_passed = true`
|
|
135
|
+
|
|
136
|
+
来源: `PHASE_REVIEW_STATUS` in `src/schema.js`, `handleReviewerResult()` in `src/tools/orchestrator.js`
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 4. Workflow Mode 状态机
|
|
141
|
+
|
|
142
|
+
### 所有模式
|
|
143
|
+
|
|
144
|
+
| 模式 | 含义 |
|
|
145
|
+
|------|------|
|
|
146
|
+
| `planning` | 计划阶段 |
|
|
147
|
+
| `executing_task` | 正在执行 task |
|
|
148
|
+
| `reviewing_task` | L2 task 即时审查中 |
|
|
149
|
+
| `reviewing_phase` | L1 phase 批量审查中 |
|
|
150
|
+
| `awaiting_clear` | 上下文不足,等待 /clear |
|
|
151
|
+
| `awaiting_user` | 等待用户干预 (阻塞/方向漂移) |
|
|
152
|
+
| `paused_by_user` | 用户主动暂停 |
|
|
153
|
+
| `reconcile_workspace` | git HEAD 不匹配,需要工作区协调 |
|
|
154
|
+
| `replan_required` | 计划文件被外部修改,需要重新规划 |
|
|
155
|
+
| `research_refresh_needed` | 研究缓存过期,需刷新 |
|
|
156
|
+
| `completed` | 所有 phase 完成 (终态) |
|
|
157
|
+
| `failed` | 工作流失败 (终态) |
|
|
158
|
+
|
|
159
|
+
### Mermaid 图 (主要转换)
|
|
160
|
+
|
|
161
|
+
```mermaid
|
|
162
|
+
stateDiagram-v2
|
|
163
|
+
[*] --> planning
|
|
164
|
+
|
|
165
|
+
planning --> executing_task : init 完成
|
|
166
|
+
|
|
167
|
+
executing_task --> reviewing_task : L2 task checkpointed
|
|
168
|
+
executing_task --> reviewing_phase : phase 内所有 task 完成
|
|
169
|
+
executing_task --> awaiting_user : task blocked / 方向漂移
|
|
170
|
+
executing_task --> awaiting_clear : 上下文 < 35%
|
|
171
|
+
executing_task --> failed : debugger 报告架构问题
|
|
172
|
+
|
|
173
|
+
reviewing_task --> executing_task : 审查完成 (通过或返工)
|
|
174
|
+
reviewing_phase --> executing_task : 审查返工 (有 critical)
|
|
175
|
+
reviewing_phase --> completed : 最终 phase 审查通过
|
|
176
|
+
|
|
177
|
+
awaiting_clear --> executing_task : /clear + /resume 后恢复
|
|
178
|
+
awaiting_user --> executing_task : 用户解除阻塞 / 自动匹配 decision
|
|
179
|
+
|
|
180
|
+
state preflight_overrides <<choice>>
|
|
181
|
+
executing_task --> preflight_overrides : resume 时 preflight 检测
|
|
182
|
+
preflight_overrides --> reconcile_workspace : git HEAD 不匹配
|
|
183
|
+
preflight_overrides --> replan_required : 计划文件被修改
|
|
184
|
+
preflight_overrides --> research_refresh_needed : 研究缓存过期
|
|
185
|
+
preflight_overrides --> awaiting_user : 方向漂移检测
|
|
186
|
+
|
|
187
|
+
research_refresh_needed --> executing_task : 研究刷新完成
|
|
188
|
+
research_refresh_needed --> reviewing_task : 刷新后恢复审查状态
|
|
189
|
+
research_refresh_needed --> reviewing_phase : 刷新后恢复审查状态
|
|
190
|
+
|
|
191
|
+
paused_by_user --> executing_task : 用户恢复
|
|
192
|
+
|
|
193
|
+
completed --> [*]
|
|
194
|
+
failed --> [*]
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 关键转换说明
|
|
198
|
+
|
|
199
|
+
**执行主路径**:
|
|
200
|
+
`planning -> executing_task -> reviewing_phase -> executing_task (next phase) -> ... -> completed`
|
|
201
|
+
|
|
202
|
+
**L2 审查分支**:
|
|
203
|
+
`executing_task -> reviewing_task -> executing_task`
|
|
204
|
+
|
|
205
|
+
**上下文耗尽路径**:
|
|
206
|
+
`executing_task -> awaiting_clear -> executing_task` (需要 /clear + /resume)
|
|
207
|
+
|
|
208
|
+
**Preflight 覆盖 (resume 时检测)**:
|
|
209
|
+
`resumeWorkflow()` 执行 `evaluatePreflight()` 检测以下条件 (按优先级):
|
|
210
|
+
1. git HEAD 不匹配 -> `reconcile_workspace`
|
|
211
|
+
2. 计划文件被外部修改 -> `replan_required`
|
|
212
|
+
3. 方向漂移 -> `awaiting_user`
|
|
213
|
+
4. 研究缓存过期 -> `research_refresh_needed`
|
|
214
|
+
|
|
215
|
+
**Research 刷新后恢复**:
|
|
216
|
+
`storeResearch()` 中: 如果 `workflow_mode === 'research_refresh_needed'`,调用 `inferWorkflowModeAfterResearch()` 根据 `current_review` 状态推断恢复到 `reviewing_phase` / `reviewing_task` / `executing_task`。
|
|
217
|
+
|
|
218
|
+
来源: `WORKFLOW_MODES` in `src/schema.js`, `resumeWorkflow()`, `evaluatePreflight()` in `src/tools/orchestrator.js`, `storeResearch()` in `src/tools/state.js`
|