@andyqiu/codeforge 0.3.5 → 0.3.8

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.
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: 查询当前 inflight 子任务(subagent)的运行状态
3
+ subtask: false
4
+ adr: 0054
5
+ ---
6
+
7
+ <!--
8
+ codeforge 元数据(opencode 不读,由 plugins / workflow-engine 解析):
9
+ name: parallel-status
10
+ version: 1.0.0
11
+ allowed_tools: (无 — 纯查询)
12
+ 说明:subtask: false 让命令在主 session 执行(拿 parent context),
13
+ plugins/parallel-status.ts 在 command.execute.before 拦截并回写 markdown。
14
+ -->
15
+
16
+ # /parallel-status — 查询子任务进度
17
+
18
+ 随时查询当前正在跑的 `/parallel` 子任务(subagent)状态,复用 subtask-heartbeat 内存 inflight Map。
19
+
20
+ ## 用法
21
+
22
+ ```
23
+ /parallel-status
24
+ ```
25
+
26
+ ## 输出示例
27
+
28
+ 如果有 inflight:
29
+
30
+ ```
31
+ 📊 当前 3 个 subagent 在跑:
32
+
33
+ | # | child id | parent id | agent | 已跑 | 最近工具 |
34
+ |---|----------|-----------|-------|------|----------|
35
+ | 1 | `ses_xxx1` | `ses_p` | coder | 1m20s | edit |
36
+ | 2 | `ses_xxx2` | `ses_p` | coder | 45s | bash |
37
+ | 3 | `ses_xxx3` | `ses_p` | reviewer | 30s | grep |
38
+ ```
39
+
40
+ 如果无:
41
+
42
+ ```
43
+ ✅ 当前无 inflight subagent
44
+ ```
45
+
46
+ ## 行为
47
+
48
+ 1. `plugins/parallel-status.ts` 注册 `command.execute.before` hook
49
+ 2. 拦截 `command === "parallel-status"`,调 `getInflightSnapshot()` 拿快照
50
+ 3. 调纯函数 `formatInflightMarkdown(snapshot)` 生成 markdown
51
+ 4. 回写到 `output.parts`,覆盖 .md template 默认内容
52
+
53
+ ## 元数据
54
+
55
+ - `subtask`: `false` —— 强制走主 session,避免被 opencode 当 subagent 派发
56
+ - `allowed_tools`: 无(plugin hook 直接接管输出)
@@ -10,7 +10,7 @@ codeforge 元数据(opencode 不读,由 plugins / workflow-engine 解析)
10
10
  trigger_workflow: parallel-explore
11
11
  allowed_tools: smart_search, repo-map
12
12
  说明:subtask: true 强制走 opencode 子代理通道,不污染主上下文;agent 由 workflow 控制
13
- ADR-0008(gstack 单 markdown skill)/ ADR-0011(Roo Boomerang Tasks
13
+ ADR-0008(gstack 单 markdown skill)/ ADR-0011(Roo Boomerang Tasks)/ ADR-0054(父 session 反馈通道)
14
14
  -->
15
15
 
16
16
 
@@ -85,3 +85,40 @@ planner 会先出 3 路子任务方案,subtasks 并发执行,reviewer 汇总
85
85
  - `agent`: 不指定 —— 由 parallel-explore.yaml 控制 agent 切换
86
86
  - `subtask`: `true` —— opencode 原生字段,强制走子代理通道
87
87
  - `trigger_workflow`: `parallel-explore`
88
+
89
+ ## 反馈通道(ADR-0054)
90
+
91
+ `/parallel` 执行期间,父 session 会看到 4 类结构化文字反馈:
92
+
93
+ 1. **派出**:`🚀 /parallel 已派出 N 个子任务(并发=K)...` + 子任务清单
94
+ 2. **启动**:每个子任务跑起来时 `▶ 子任务 i/N 启动: <id> — <description>`
95
+ 3. **完成**:每个子任务结束时 `<emoji> 子任务 i/N 完成 [status] <id> (Xms, files=Y)`
96
+ - ✅ success / ⚠ need_review / ⏱ timeout / 🗑 cancelled / ❌ failed
97
+ 4. **总结**:所有子任务完成后吐既有的 digest(成功/失败/冲突)
98
+
99
+ 这些文字用 `synthetic+ignored+noReply` 三件套追加到 `session.messages`,
100
+ **用户可见但 LLM 不读**(不污染父 session 上下文)。
101
+
102
+ ### 随时查进度
103
+
104
+ 跑 `/parallel-status` 立刻看当前 inflight subagent:
105
+
106
+ ```
107
+ /parallel-status
108
+
109
+ 📊 当前 2 个 subagent 在跑:
110
+ | # | child id | parent id | agent | 已跑 | 最近工具 |
111
+ |---|----------|-----------|-------|------|----------|
112
+ | 1 | `ses_xxx1...` | `ses_yyy...` | coder | 1m20s | edit |
113
+ ```
114
+
115
+ 或没有时:
116
+
117
+ ```
118
+ ✅ 当前无 inflight subagent
119
+ ```
120
+
121
+ ### 失败降级
122
+
123
+ 如果 opencode SDK 太老(< v1.15)或 `promptAsync` 不可用,notice 会静默 noop(log warn)——
124
+ 此时退化到原有行为(只有最终 digest)。`/parallel-status` 不受影响(纯内存查询)。
@@ -0,0 +1,79 @@
1
+ ---
2
+ description: 安全重构工作流,先补特征测试再重构,保证行为不变
3
+ agent: planner
4
+ ---
5
+
6
+ <!--
7
+ codeforge 元数据(opencode 不读,由 plugins / workflow-engine 解析):
8
+ name: refactor
9
+ version: 1.0.0
10
+ trigger_workflow: refactor
11
+ requires_human_approval: true
12
+ allowed_tools: smart_search, save_chat_insight, pending-changes, repo-map, nav-find, nav-goto, bash
13
+ 说明:workflow-engine 看到 trigger_workflow=refactor 拦截 /refactor 触发对应 YAML
14
+ -->
15
+
16
+
17
+ # /refactor — 安全重构工作流
18
+
19
+ 触发 `workflows/refactor.yaml`。核心原则:**先补 characterization test 锁定现状行为,再重构**(参考 Working Effectively with Legacy Code)。
20
+
21
+ ## 输入
22
+
23
+ 用户需求:$ARGUMENTS
24
+
25
+ ## 当前仓库改动概览(自动注入)
26
+
27
+ ```
28
+ !`git diff --stat`
29
+ ```
30
+
31
+ ## 用法
32
+
33
+ ```
34
+ /refactor lib/foo.ts 里的 doBar 函数
35
+ /refactor 把 user-service 缓存层抽出来
36
+ /refactor #234 提到的 N+1 query
37
+ ```
38
+
39
+ ## 流程(7 步,由 refactor.yaml 编排)
40
+
41
+ | 步骤 | Agent | 动作 | 是否需审批 |
42
+ |------|------|------|-----------|
43
+ | 1. 规划 | planner | 出重构方案 + smart_search 历史经验 | 否 |
44
+ | 2. 补特征测试 | coder | 先写 characterization tests(锁定现状) | 否,auto_feedback 自纠 |
45
+ | 3. 确认覆盖 | reviewer | 确认测试覆盖待重构代码路径 | 否 |
46
+ | 4. 重构 | coder | 实施重构,每步保证测试仍绿 | 否,auto_feedback 自纠 |
47
+ | 5. 审阅 | reviewer | 确认行为不变 + 代码更清晰 | 否 |
48
+ | 6. 落地 | coder | `pending-changes apply_all` | **必审批**(YAML 写死) |
49
+ | 7. 沉淀 | reviewer | `save_chat_insight` 把经验回写 KH | 否(写失败 skip) |
50
+
51
+ ## 与 /tdd 的区别
52
+
53
+ | 维度 | /refactor | /tdd |
54
+ |---|---|---|
55
+ | 起点 | 已有可工作代码(可能很烂) | 新功能从零开始 |
56
+ | 测试角色 | 锁定现状(characterization test) | 驱动设计(先红再绿) |
57
+ | 终极目标 | 行为不变 + 代码更清晰 | 实现新功能 + 测试覆盖 |
58
+
59
+ ## 自主度(AGENTS.md C18)
60
+
61
+ `/refactor` 默认 `semi`:风险动作(apply / bash)弹审批,但 `auto_feedback` 在测试反复失败时**自动 escalate 给 reviewer**(避免 coder 死循环)。
62
+
63
+ ## 失败处理
64
+
65
+ | 失败位置 | 行为 |
66
+ |---------|------|
67
+ | step 1 (规划) | abort |
68
+ | step 2 (补测试) | auto_feedback 3 轮重试,仍败 escalate reviewer |
69
+ | step 3 (覆盖不足) | REQUEST_CHANGES → 回 step 2 重补,max_loops=3 兜底 |
70
+ | step 4 (重构) | auto_feedback 5 轮重试,仍败 escalate reviewer |
71
+ | step 5 (审阅 REQUEST_CHANGES) | 回 step 4 重做 |
72
+ | step 6 (apply) | hash 漂移则拒(防脏覆盖) |
73
+ | step 7 (沉淀) | skip |
74
+
75
+ ## 元数据
76
+
77
+ - `agent`: `planner` —— 起手让 planner 出方案
78
+ - `trigger_workflow`: `refactor`
79
+ - `requires_human_approval`: `true` —— 高影响命令,CLI/UI 额外确认
@@ -0,0 +1,66 @@
1
+ ---
2
+ description: 审阅 PR / diff / 本地未提交改动,输出 APPROVE/REQUEST_CHANGES/BLOCK
3
+ agent: reviewer
4
+ ---
5
+
6
+ <!--
7
+ codeforge 元数据(opencode 不读,由 plugins / workflow-engine 解析):
8
+ name: review
9
+ version: 1.0.0
10
+ trigger_workflow: code-review
11
+ allowed_tools: smart_search, save_chat_insight, pending-changes, bash, repo-map, nav-find
12
+ 说明:workflow-engine 看到 trigger_workflow=code-review 拦截 /review 触发对应 YAML
13
+ -->
14
+
15
+
16
+ # /review — 代码审阅工作流
17
+
18
+ 触发 `workflows/code-review.yaml`。**只读流程**:不 stage 任何改动,不 apply 任何 pending。
19
+
20
+ ## 输入
21
+
22
+ 用户需求:$ARGUMENTS
23
+
24
+ ## 当前仓库改动概览(自动注入)
25
+
26
+ ```
27
+ !`git diff --stat`
28
+ ```
29
+
30
+ ## 用法
31
+
32
+ ```
33
+ /review # 审本地未提交改动(默认)
34
+ /review <PR URL> # 审指定 PR
35
+ /review --base main # 审当前分支与 main 的 diff
36
+ ```
37
+
38
+ ## 流程(4 步,由 code-review.yaml 编排)
39
+
40
+ | 步骤 | Agent | 动作 | 是否需审批 |
41
+ |------|------|------|-----------|
42
+ | 1. 准备 diff | reviewer | 取 diff 上下文 + smart_search 历史经验 | 否 |
43
+ | 2. 出审阅维度 | planner | 列出本次必查维度(安全/性能/可维护性/测试/风格) | 否 |
44
+ | 3. 审阅 | reviewer | 按维度逐项审 + 跑测试 + 给 APPROVE/REQUEST_CHANGES/BLOCK | 否 |
45
+ | 4. 沉淀 | reviewer | 把发现的 gotcha 沉淀回 KH | 否(写失败 skip) |
46
+
47
+ ## 与 /plan / /ship 的关系
48
+
49
+ - `/plan` = 规划(不写代码)
50
+ - `/ship` = 全套(规划 → coder → review → apply → 沉淀)
51
+ - `/review` = **只审,不动手**:用于 PR review、code review 例会、入职新人代码巡检
52
+
53
+ ## 失败处理
54
+
55
+ | 失败位置 | 行为 |
56
+ |---------|------|
57
+ | step 1 (准备 diff) | abort:取不到 diff 后续无意义 |
58
+ | step 2 (出维度) | abort:planner 出不来维度则无可执行清单 |
59
+ | step 3 (审阅 BLOCK) | abort:严重问题,用户决定是否继续 |
60
+ | step 4 (沉淀) | skip:KH 写失败不能让审阅结果"看起来失败" |
61
+
62
+ ## 元数据
63
+
64
+ - `agent`: `reviewer` —— 起手就切到 reviewer
65
+ - `trigger_workflow`: `code-review`
66
+ - 不像 `/ship`,本命令**不需要 human_approval**(因为只读,无副作用)
@@ -0,0 +1,91 @@
1
+ ---
2
+ description: TDD 严格流程 RED → GREEN → REFACTOR,测试驱动新功能
3
+ agent: planner
4
+ ---
5
+
6
+ <!--
7
+ codeforge 元数据(opencode 不读,由 plugins / workflow-engine 解析):
8
+ name: tdd
9
+ version: 1.0.0
10
+ trigger_workflow: tdd
11
+ requires_human_approval: true
12
+ allowed_tools: smart_search, save_chat_insight, pending-changes, repo-map, nav-find, nav-goto, bash
13
+ 说明:workflow-engine 看到 trigger_workflow=tdd 拦截 /tdd 触发对应 YAML
14
+ -->
15
+
16
+
17
+ # /tdd — Test-Driven Development 工作流
18
+
19
+ 触发 `workflows/tdd.yaml`。严格 **RED → GREEN → REFACTOR** 三步循环,避免"先写实现再补测试"反 TDD。
20
+
21
+ ## 输入
22
+
23
+ 用户需求:$ARGUMENTS
24
+
25
+ ## 当前仓库改动概览(自动注入)
26
+
27
+ ```
28
+ !`git diff --stat`
29
+ ```
30
+
31
+ ## 用法
32
+
33
+ ```
34
+ /tdd 给 lib/utils 加一个 deepMerge 函数
35
+ /tdd 实现 #345:用户登录 24h 内失败 5 次自动锁定
36
+ /tdd 给 Channel 加 LarkChannel 子类型
37
+ ```
38
+
39
+ ## 流程(7 步,由 tdd.yaml 编排,max_loops=5)
40
+
41
+ | 步骤 | Agent | 动作 | 是否需审批 |
42
+ |------|------|------|-----------|
43
+ | 1. 拆需求 | planner | 把需求拆成可测的小步骤清单 | 否 |
44
+ | 2. 写测试-RED | coder | 先写测试(不写实现) | 否 |
45
+ | 3. 验证 RED | reviewer | 跑 npm test 确认测试**确实红了**(绿则 BLOCK) | 否 |
46
+ | 4. 最小实现-GREEN | coder | 写最小实现让测试变绿(不超出需要) | 否,auto_feedback 自纠 |
47
+ | 5. 重构-REFACTOR | coder | 可选 refactor,测试必须仍绿 | 否,可 skip |
48
+ | 6. 审阅 | reviewer | 确认三步全做 + 测试覆盖核心 | 否 |
49
+ | 7. 落地 | coder | `pending-changes apply_all` | **必审批**(YAML 写死) |
50
+
51
+ ## TDD 三色循环
52
+
53
+ ```
54
+ ┌─────────────────────────────────────────────────────┐
55
+ │ RED → 写一个失败的测试(描述期望行为) │
56
+ │ GREEN → 写最简实现让测试通过(不超出测试需要) │
57
+ │ REFACT → 在测试保护下重构(可选;测试仍绿才能进下一轮) │
58
+ └─────────────────────────────────────────────────────┘
59
+ ```
60
+
61
+ `max_loops=5` 表示 reviewer REQUEST_CHANGES 时最多回到 step 2 重做 5 轮,防止死循环。
62
+
63
+ ## 与 /ship / /refactor 的区别
64
+
65
+ | 维度 | /ship | /refactor | /tdd |
66
+ |---|---|---|---|
67
+ | 起点 | 任何需求 | 已有代码(改善结构) | 新功能(从零) |
68
+ | 测试态度 | 写完后测 | 改前先锁定 | **先红再绿** |
69
+ | 适用 | 大部分日常 | 技术债清理 | 新功能 + 高质量要求 |
70
+
71
+ ## 自主度
72
+
73
+ `/tdd` 默认 `semi`:apply 必审批;其余步骤 auto_feedback 自纠。
74
+
75
+ ## 失败处理
76
+
77
+ | 失败位置 | 行为 |
78
+ |---------|------|
79
+ | step 1 (拆需求) | abort |
80
+ | step 2 (写测试) | retry 1 次 |
81
+ | step 3 (验证 RED 失败,测试是绿的) | BLOCK:测试无效,必须重写 |
82
+ | step 4 (最小实现) | auto_feedback 5 轮 |
83
+ | step 5 (REFACTOR 失败) | skip:refactor 是可选 |
84
+ | step 6 (审阅 REQUEST_CHANGES) | 回 step 2,max_loops=5 |
85
+ | step 7 (apply) | hash 漂移则拒 |
86
+
87
+ ## 元数据
88
+
89
+ - `agent`: `planner` —— 起手让 planner 拆需求
90
+ - `trigger_workflow`: `tdd`
91
+ - `requires_human_approval`: `true`