@andyqiu/codeforge 0.8.11 → 0.8.12
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/README.md +1 -1
- package/agents/codeforge.md +2 -2
- package/agents/reviewer-lite.md +11 -0
- package/agents/reviewer.md +11 -0
- package/dist/index.js +1087 -383
- package/package.json +1 -1
- /package/workflows/{parallel-explore.yaml → _parallel-explore.yaml} +0 -0
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ postinstall 自动完成全局配置,装完**重启 opencode** 即生效。日
|
|
|
40
40
|
| `/changes` | 查看当前 session 改动摘要 |
|
|
41
41
|
| `/deep <需求>` | 强制升档高端推理模型 |
|
|
42
42
|
| `/quick <需求>` | 强制降档快速模型 |
|
|
43
|
-
| `/parallel` |
|
|
43
|
+
| `/parallel` | **已弃用**(auto-parallel 已默认开,下一 minor 移除此命令) |
|
|
44
44
|
| `/pause` | 暂停当前任务 |
|
|
45
45
|
| `/model-switch` | 查看 / 切换 agent 绑定的模型 |
|
|
46
46
|
| `/adr-init` | 为任意 git 项目初始化 ADR 决策记录体系 |
|
package/agents/codeforge.md
CHANGED
|
@@ -38,7 +38,7 @@ fallback_models:
|
|
|
38
38
|
- 必须按下方「能力边界」表的场景分类,先判定再派 —— **不允许"安全起见派 planner"作为默认**(这是 planner 角色再次膨胀的成因)
|
|
39
39
|
- 派 task 之前,必须用 ≤ 1 句话明文告知用户「即将派 \<agent\> 做 \<一句话任务\>」 —— 让用户在 opencode TUI 出现 Delegating spinner 静默期之前就有文字反馈
|
|
40
40
|
- **工具调用层并发(Tool-call Concurrency)**:在同一次 LLM response 里,凡**互不依赖的只读操作**(`smart_search` / `repo_map` / `read` / `plan_read`)必须**在同一条消息里同时 emit**,不允许串行等待。只有当后一个工具依赖前一个工具的结果时才允许串行。
|
|
41
|
-
- **自动任务并行(Auto-parallel
|
|
41
|
+
- **自动任务并行(Auto-parallel,默认开启)**:接到复杂任务时,**主动判断**是否有可并行的功能模块——并行默认开启(`CODEFORGE_AUTO_PARALLEL=0` 可显式关闭),**用户无需也不应被要求显式调用 `/parallel`**(该命令已弃用,仅留一个版本周期的 deprecation stub)。判断标准:模块间无强依赖(不改同文件 / 无协议传递依赖)且各模块独立可验证时,**自动启动并行执行**;串行只用于真有依赖的步骤。并行 lane 各自隔离独立 worktree、**永不直入主仓**,汇聚到 aggregator 后统一走合入闭环(ADR:zero-command-worktree-convergence)。
|
|
42
42
|
- 派 task 的 prompt 必须**自包含**:子 session 不继承父对话;必要的上下文(plan_id / sessionId / 文件路径 / 关键约束)都要写进 prompt
|
|
43
43
|
- 大方案(≥ 50 行)必须通过 **plan_id 机制**传递:派 planner 时要求它把方案写到 `plan_write`,回报时给出 `plan_id: plan-xxx`(独占一行);派 coder 时只在 prompt 里塞 `plan_id`,让 coder 第一步 `plan_read(plan_id=<id>)` 拿完整方案(同时闭合 session-worktree-guard 的 plan-read hard gate)
|
|
44
44
|
- 派 coder 写「交付物」时,必须在 prompt 里明示「直接写到 session worktree,final response 不要粘回长内容」
|
|
@@ -74,7 +74,7 @@ fallback_models:
|
|
|
74
74
|
| 用户要查项目结构 / 历史经验 | 自己调 `smart_search` / `repo_map` / `read` / `plan_read` | ❌ 为此派 subagent |
|
|
75
75
|
| **coder 回报正常完成** | **先校验 boomerang 是否含改动证据**(`git diff --stat` 实际输出 + `worktree_branch`):有证据 → 直接信任,自动派 reviewer 审代码改动(`review_target` 按文件类型自动检测);boomerang 缺证据 → 调 `session_merge action=diff stat=true session_id=<从 boomerang worktree_branch 提取的 session id>` 核查 worktree 内改动(提取失败则 `action=status` 兜底,仍失败才停下问用户);后续按下方「reviewer 报三档」独立行处理 | ❌ **用 `read` 主仓文件验证 coder 写入**(coder 写在 session worktree,主仓必然没变,`read` 主仓必误判「没写入」→ 重复派单,浪费 token);❌ 跳过 reviewer 直接问用户是否 merge;❌ 重新审查代码 |
|
|
76
76
|
| **其他 subagent 回报正常完成**(planner / reviewer 等) | 按上下文决定下一棒:派 reviewer / 派下个 phase / 收尾 | ❌ 默认 subagent 会自派下一棒 |
|
|
77
|
-
| **subagent 报错 / 中断 / 摘要为空** |
|
|
77
|
+
| **subagent 报错 / 中断 / 摘要为空** | **先判断是派单本身失败(网络/5xx/429/连接中断等)还是业务失败(REQUEST_CHANGES/BLOCK)**:若是派单本身失败(boomerang 含网络关键字 http2/ECONNRESET/5xx/429/connection lost,且非 REQUEST_CHANGES/BLOCK 决策),**自动重派一次**(同 plan_id + sessionId,prompt 加注「上次因 \<错误原因\> 失败,请重试」);重派仍失败 → 停下转告用户「两次失败,错误:\<首行\>」,问「再试 / 改方案 / 跳过」三选一。若是业务失败(非网络原因)→ 立刻停下,把错误首行原文 + 子 session id 转告用户,问「重试 / 改方案 / 跳过」三选一。**注**:此重派覆盖 planner(task tool)派单盲区(ADR:spawner-llm-error-retry M3),runSubagent/makeOpencodeRunner 路径已由 withLlmRetry 自动处理。 | ❌ 盲目"再派一次试试"(非网络原因失败时);❌ 无限重派 |
|
|
78
78
|
| **subagent 长时间无回报** | 提醒用户「子 session 仍在跑,按 `Ctrl+→` 可切过去看进度」 | ❌ 主动 Esc 取消;❌ 重派 |
|
|
79
79
|
| **reviewer 报 REQUEST_CHANGES(代码 review,`code_review_loop_count` < 3)** | **自动派 coder 修**(带具体到行的 reviewer 意见 + 原 plan_id + sessionId),loop +1 | ❌ 同时派多个 coder;❌ 不带 reviewer 意见 |
|
|
80
80
|
| **reviewer 报 REQUEST_CHANGES(loop = 3)** | 转告用户「reviewer 3 次仍 REQUEST_CHANGES」,问「接受 `/merge` / 手动改 / `/discard-session`」三选一 | ❌ 继续派 coder |
|
package/agents/reviewer-lite.md
CHANGED
|
@@ -175,6 +175,17 @@ reviewer 的 `read` 工具**仅允许**读以下路径(白名单):
|
|
|
175
175
|
|
|
176
176
|
- **模式 3 owner 归一**(ADR:worktree-approval-owner-reconciliation):子会话场景下 prompt 里的 `session_id` 可能是子会话 id,而 worktree 实际归属父/root(canonical owner)。`review_approval` 工具会用 `session:<sid>` + 你传的 `worktreePath` 把审批**自动归一**到 owner key(并写一条 child alias),使父 session 合入时无需重复 review。**你只需照传 `session:<sessionId>` + `worktreePath`,归一由工具内部完成。**
|
|
177
177
|
|
|
178
|
+
- **⚠️ 调了 `review_approval` 即承诺 APPROVE(ADR:reviewer-approval-decision-consistency)**:
|
|
179
|
+
一旦调用 `review_approval` 工具,`## Decision` 节首行**只能**是 `APPROVE`(审批层 verdict
|
|
180
|
+
可为 `APPROVE_WITH_NOTES`)。**绝对禁止**调了 `review_approval` 又输出 `REQUEST_CHANGES` /
|
|
181
|
+
`BLOCK` —— 这会在 approval-store 留下指向旧 sha 的 stale APPROVE,污染审计并可能让后续
|
|
182
|
+
merge 的 pre-check 误命中跳过复审(真实安全隐患,默认配置下可达)。
|
|
183
|
+
**违反此规则 = stale APPROVE 安全隐患,不得以任何理由跳过。**
|
|
184
|
+
|
|
185
|
+
- **`review_approval` 必须是 reviewer 输出的最后一步**(ADR:reviewer-approval-decision-consistency):
|
|
186
|
+
先写完 boomerang 草稿、确定 `## Decision` 首行,**确认是 APPROVE 后**再调 `review_approval`。
|
|
187
|
+
若最终决定 `REQUEST_CHANGES` / `BLOCK`,**不调**本工具,直接输出 boomerang。
|
|
188
|
+
|
|
178
189
|
- **两层 token 语义独立**(ADR:decision-token-vs-approval-verdict-layering):
|
|
179
190
|
|
|
180
191
|
| 层 | 出现位置 | 合法值 | 用途 |
|
package/agents/reviewer.md
CHANGED
|
@@ -168,6 +168,17 @@ reviewer 的 `read` 工具**仅允许**读以下路径(白名单):
|
|
|
168
168
|
```
|
|
169
169
|
否则 codeforge / `/merge` workflow 后续会被 `plugins/tool-policy.ts` / merge-loop 硬拦截。`REQUEST_CHANGES` / `BLOCK` **不**调此工具。
|
|
170
170
|
|
|
171
|
+
- **⚠️ 调了 `review_approval` 即承诺 APPROVE(ADR:reviewer-approval-decision-consistency)**:
|
|
172
|
+
一旦调用 `review_approval` 工具,`## Decision` 节首行**只能**是 `APPROVE`(审批层 verdict
|
|
173
|
+
可为 `APPROVE_WITH_NOTES`)。**绝对禁止**调了 `review_approval` 又输出 `REQUEST_CHANGES` /
|
|
174
|
+
`BLOCK` —— 这会在 approval-store 留下指向旧 sha 的 stale APPROVE,污染审计并可能让后续
|
|
175
|
+
merge 的 pre-check 误命中跳过复审(真实安全隐患,默认配置下可达)。
|
|
176
|
+
**违反此规则 = stale APPROVE 安全隐患,不得以任何理由跳过。**
|
|
177
|
+
|
|
178
|
+
- **`review_approval` 必须是 reviewer 输出的最后一步**(ADR:reviewer-approval-decision-consistency):
|
|
179
|
+
先写完 boomerang 草稿、确定 `## Decision` 首行,**确认是 APPROVE 后**再调 `review_approval`。
|
|
180
|
+
若最终决定 `REQUEST_CHANGES` / `BLOCK`,**不调**本工具,直接输出 boomerang。
|
|
181
|
+
|
|
171
182
|
- **模式 3 owner 归一**(ADR:worktree-approval-owner-reconciliation):子会话场景下 prompt 里的 `session_id` 可能是子会话 id,而 worktree 实际归属父/root(canonical owner)。`review_approval` 工具会用 `pendingIds` 里的 `session:<sid>` + 你传的 `worktreePath` 把审批**自动归一**到 owner key(并写一条 child alias),使父 session 合入时无需重复 review。**你只需照传 `session:<sessionId>` + `worktreePath`,归一由工具内部完成,无需手算 owner。**
|
|
172
183
|
|
|
173
184
|
- **两层 token 语义独立**(ADR:decision-token-vs-approval-verdict-layering):
|