@wwkit/harness 1.0.17 → 1.0.18
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/agents/todo.md +119 -0
- package/agents/work-explore.md +50 -0
- package/agents/work-general.md +44 -0
- package/agents/work.md +55 -34
- package/package.json +1 -1
- package/skills/todo-dispatch/SKILL.md +211 -0
- package/skills/todo-finalize/SKILL.md +238 -0
- package/skills/todo-plan/SKILL.md +174 -0
- package/skills/todo-recovery/SKILL.md +179 -0
- package/skills/todo-review/SKILL.md +259 -0
- package/skills/work-dispatch/SKILL.md +15 -2
- package/skills/work-dispatch/references/dispatch-prompt.md +10 -1
- package/skills/work-dispatch/references/explore-prompt.md +74 -0
- package/skills/work-dispatch/references/report-handling.md +31 -4
- package/skills/work-finalize/SKILL.md +2 -2
- package/skills/work-finalize/references/final-review.md +5 -3
- package/skills/work-finalize/references/handover.md +8 -0
- package/skills/work-ledger/SKILL.md +1 -1
- package/skills/work-ledger/references/bootstrap.md +12 -4
- package/skills/work-plan/SKILL.md +2 -2
- package/skills/work-plan/references/self-review.md +1 -1
- package/skills/work-plan/references/split-rules.md +1 -1
- package/skills/work-plan/references/task-fields.md +10 -10
- package/skills/work-recovery/SKILL.md +8 -8
- package/skills/work-recovery/references/budget.md +10 -11
- package/skills/work-recovery/references/rollback.md +4 -4
- package/skills/work-review/SKILL.md +2 -2
- package/skills/work-review/references/fix-loop.md +14 -9
- package/skills/work-review/references/reviewer-prompt.md +1 -1
- package/skills/work-review/references/verdict-handling.md +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: work-recovery
|
|
3
3
|
description: |
|
|
4
4
|
[work 专属 runbook] 仅供 work agent 通过 skill 工具显式调用(name=work-recovery),其他 agent / 普通对话禁止触发
|
|
5
|
-
恢复与护栏技能:覆盖重规划(触发条件 3 种、规则=复用 session_id/增量调整/不重做已完成、上限 3 轮超限升级用户)+ 退出条件(target 验收/重规划≤3/阻塞/预算超限/ESCALATE)+
|
|
5
|
+
恢复与护栏技能:覆盖重规划(触发条件 3 种、规则=复用 session_id/增量调整/不重做已完成、上限 3 轮超限升级用户)+ 退出条件(target 验收/重规划≤3/阻塞/预算超限/ESCALATE)+ 预算与超时(单任务超时=prompt 软上限硬兜底、等待纪律有界等待不静默阻塞、总预算护栏 3 项≤20 任务/≤30 分钟/并行≤5)+ 中断与回滚(用户中断保留现场、回滚限本任务 BASE..HEAD/工作树脏禁--hard/forbidden 文件强制 checkout/绝不 reset 早于 initial_base)+ 防失控护栏 5 条。
|
|
6
6
|
适用:work agent 运行期遇到计划级失败 / 超时 / 中断 / 需回滚 / 防失控检查时加载。
|
|
7
7
|
不适用:单任务 review fix(用 work-review);最终交付(用 work-finalize);非 work 流程的普通恢复。
|
|
8
8
|
license: MIT
|
|
@@ -42,14 +42,14 @@ work agent 运行期遇到以下任一情况时加载本技能对应阶段:
|
|
|
42
42
|
用 `read` 工具按触发原因加载本技能 `references/` 下对应文件(相对路径基于本 skill 目录):
|
|
43
43
|
|
|
44
44
|
- `references/replan.md` → 重规划(触发条件 3 种、规则=复用 session_id/增量调整/不重做已完成、上限 3 轮超限升级用户)
|
|
45
|
-
- `references/budget.md` → 退出条件(5 种)+ 预算与超时(单任务超时 / 等待纪律 / 总预算护栏
|
|
45
|
+
- `references/budget.md` → 退出条件(5 种)+ 预算与超时(单任务超时 / 等待纪律 / 总预算护栏 3 项)
|
|
46
46
|
- `references/rollback.md` → 中断与回滚(用户中断 / 回滚规则 / forbidden 强制 checkout)+ 防失控护栏 5 条
|
|
47
47
|
|
|
48
48
|
### 阶段 2:按触发分支执行
|
|
49
49
|
|
|
50
50
|
- **重规划**:按 `references/replan.md` 复用同一 `session_id`/`doc_dir`/Ledger,只重走第二步对未完成目标重新拆分并更新 `plan.md`,已完成任务保留标记 done 不重派发;Ledger 记 `replan round <R>/3`;最多 3 轮,超限升级用户。
|
|
51
51
|
- **退出判定**:按 `references/budget.md` 退出条件 5 种逐项检查,命中即停止派发并如实报告。
|
|
52
|
-
- **预算与超时**:派发 subagent
|
|
52
|
+
- **预算与超时**:派发 subagent 时用 prompt 软上限(implementer ≤50 / fix ≤20 / reviewer ≤15)硬兜底;等待期有界等待不静默阻塞;总预算护栏 3 项超限即停派发记 Ledger 报告用户。
|
|
53
53
|
- **中断与回滚**:用户中断立即停派发 + cancel 在途 + 记 Ledger + 保留现场;回滚限本任务 `BASE..HEAD`(BASE 从 Ledger `T<N>: base=` 读取),工作树脏禁 `--hard` 改用 `git revert` 或 `git reset --soft` + 手动 checkout,forbidden 文件强制 `git checkout -- <file>`,绝不 reset 早于 `initial_base`。
|
|
54
54
|
- **防失控自检**:按 `references/rollback.md` 护栏 5 条周期自检(并发分型 / task 预算 / scoped re-review / Round 5 后裁决 / 外部信息用 general+webfetch)。
|
|
55
55
|
|
|
@@ -63,18 +63,18 @@ work agent 运行期遇到以下任一情况时加载本技能对应阶段:
|
|
|
63
63
|
|
|
64
64
|
- 重规划复用同一 `session_id`/`doc_dir`/Ledger,是针对失败与未完成部分的增量调整,不重做已完成任务;最多 3 轮,超限升级用户不再自动继续。
|
|
65
65
|
- 退出条件 5 种:target 验收通过 / 重规划 ≤3 轮 / 阻塞无法解除(含与 `constraints` 不可调和)/ 总预算超限 / subagent ESCALATE 且无法通过拆分任务/换模型解决。
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
- 总预算护栏
|
|
66
|
+
- 单任务超时:prompt 软上限(implementer ≤50 / fix ≤20 / reviewer ≤15)硬兜底;超时立即记 Ledger `T<N>: timeout` 标 BLOCKED/ESCALATE,不无限同步等待。
|
|
67
|
+
- 等待纪律:background 模式下主 agent 不阻塞,无需轮询;派发后继续做本地工作(写 Ledger、准备下一个 review package、读已返回的报告),收到 subagent 完成通知后处理返回。如果 subagent 异常长时间未返回(超过预算时间的 2 倍),记 Ledger `T<N>: timeout` 并标 BLOCKED/ESCALATE。
|
|
68
|
+
- 总预算护栏 3 项:总任务数 ≤20 / 总运行时长 ≤30 分钟 / 最大并行 work-explore ≤5;每项超限如实写进 Ledger 并报告,不静默续跑。
|
|
69
69
|
- 用户中断保留现场,不删除产物目录。
|
|
70
70
|
- 回滚仅限本任务 `BASE..HEAD`;工作树脏禁 `--hard`;forbidden 文件强制 `git checkout -- <file>` 恢复;**绝不 `reset` 到早于 `initial_base`**。
|
|
71
|
-
- 防失控护栏 5 条:只读 explore 可并行 ≤5 / 可写 general 必须串行;每个 task ≤10 分钟,失败先换模型/拆任务再重规划;每轮 fix 后必须 scoped re-review;Round 5 后才裁决,每条裁决都是 Ledger 条目禁止静默丢弃;需要外部信息用 `general` + `webfetch` 调研不嵌套再派发。
|
|
71
|
+
- 防失控护栏 5 条:只读 work-explore 可并行 ≤5 / 可写 work-general 必须串行;每个 task ≤10 分钟,失败先换模型/拆任务再重规划;每轮 fix 后必须 scoped re-review;Round 5 后才裁决,每条裁决都是 Ledger 条目禁止静默丢弃;需要外部信息用 `work-general` + `webfetch` 调研不嵌套再派发。
|
|
72
72
|
|
|
73
73
|
## 资源目录
|
|
74
74
|
|
|
75
75
|
```
|
|
76
76
|
references/
|
|
77
77
|
├── replan.md # 重规划(触发 3 种/规则/上限 3 轮)
|
|
78
|
-
├── budget.md # 退出条件 5 种 + 预算与超时(单任务超时/等待纪律/总预算护栏
|
|
78
|
+
├── budget.md # 退出条件 5 种 + 预算与超时(单任务超时/等待纪律/总预算护栏 3 项)
|
|
79
79
|
└── rollback.md # 中断与回滚(用户中断/回滚规则/forbidden 强制 checkout)+ 防失控护栏 5 条
|
|
80
80
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 退出条件
|
|
2
2
|
|
|
3
3
|
- 对照 `target` 验收标准,所有任务 `done`、review 通过 **且整体验收通过**
|
|
4
|
-
- 重规划 ≤3
|
|
4
|
+
- 重规划 ≤3 轮
|
|
5
5
|
- 阻塞无法解除(含与 `constraints` 不可调和)
|
|
6
6
|
- 总预算超限(见「预算与超时」)
|
|
7
7
|
- subagent 返回 ESCALATE 且无法通过拆分任务/换模型解决 → 如实向用户报告
|
|
@@ -10,21 +10,21 @@
|
|
|
10
10
|
|
|
11
11
|
## 单任务超时(技术强制优先)
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
13
|
+
- 所有 `task` 派发**必须**在 `task` 调用中显式传 `background=true` 参数——这是 agent 行为约束。环境变量 `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true` 由 opm harness 自动注入,使 `background=true` 参数生效。agent 只需在 task 调用中传 `background=true`,环境变量由 opm harness 自动注入。
|
|
14
|
+
- background 模式下主 agent 不阻塞,subagent 异步运行,完成时自动通知注入结果。
|
|
15
|
+
- prompt 中的工具调用上限(implementer ≤50 / work-explore ≤30 / fix ≤20 / reviewer ≤15 / re-reviewer ≤10 / final reviewer ≤30)是**软约束**,是唯一的行为限制——没有平台级硬超时兜底。
|
|
16
|
+
- 如果 subagent 长时间未返回(超过预期时间),主 agent 可继续做本地工作,不阻塞。
|
|
16
17
|
|
|
17
18
|
## subagent 强制退出配置(实施细节)
|
|
18
19
|
|
|
19
|
-
1.
|
|
20
|
-
2. **
|
|
21
|
-
3. **
|
|
20
|
+
1. **background 模式启用**:`OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true` 已由 opm harness 默认注入,task 工具的 `background=true` 参数直接生效——subagent 异步运行,主 agent 不 block,完成时自动通知注入结果。环境变量由 opm harness 自动注入,agent 只需在 task 调用中传 `background=true`。
|
|
21
|
+
2. **escape 中断语义**:TUI `session_interrupt`(escape)中断的是**整个 session**(含所有子 session),不是只中断子 session。中断后可通过 `git log` + Ledger 恢复续跑。
|
|
22
|
+
3. **subagent_depth**:限制嵌套深度(默认 1),防止 subagent 无限递归派发——限制的是嵌套层级,不是工具调用次数。
|
|
22
23
|
|
|
23
24
|
## 等待纪律(不静默阻塞)
|
|
24
25
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- 发现 child 卡死/丢失:按单任务超时处理,记 Ledger `T<N>: timeout` 并标 BLOCKED/ESCALATE。
|
|
26
|
+
- background 模式下主 agent 不阻塞,无需轮询。派发后继续做本地工作(写 Ledger、准备下一个 review package、读已返回的报告),收到 subagent 完成通知后处理返回。
|
|
27
|
+
- 如果 subagent 异常长时间未返回(超过预算时间的 2 倍),记 Ledger `T<N>: timeout` 并标 BLOCKED/ESCALATE。
|
|
28
28
|
|
|
29
29
|
## 总预算护栏(防失控)
|
|
30
30
|
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
|--------|--------|---------|
|
|
35
35
|
| 总任务数 | ≤ 20 | 规划期由 2.3 范围闸门拦截;运行时超限停止拆分,评估重规划或升级用户 |
|
|
36
36
|
| 总运行时长 | ≤ 30 分钟 | 停止派发,记 Ledger,报告用户 |
|
|
37
|
-
| 总工具调用 / token | 平台可观测时设上限 | 同上 |
|
|
38
37
|
| 最大并行 explore | ≤ 5(见 2.4) | 等待,不超额派发 |
|
|
39
38
|
|
|
40
39
|
每项超限都**如实写进 Ledger** 并报告,不静默续跑。
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## 用户中断
|
|
4
4
|
|
|
5
|
-
- 收到用户中断后:立即停止派发新 subagent;对在途 subagent 发送 cancel
|
|
5
|
+
- 收到用户中断后:立即停止派发新 subagent;对在途 subagent 发送 cancel;记 Ledger `T<N>: interrupted by user (commits <base7>..<head7>, uncommitted: <files>)`。
|
|
6
6
|
- **保留现场**:不删除产物目录,便于续跑或复盘。
|
|
7
7
|
|
|
8
8
|
## 回滚
|
|
9
9
|
|
|
10
|
-
- implementer 提交有误:回滚限定在本任务 `BASE..HEAD`(BASE 从 Ledger `T<N>: base=`
|
|
10
|
+
- implementer 提交有误:回滚限定在本任务 `BASE..HEAD`(BASE 从 Ledger `T<N>: base=` 读取)。起始检查已保证工作树干净(用户已 commit/stash),不存在起始脏文件。**若工作树干净**可用 `git reset --hard <BASE>`;**若工作树脏**(任务执行期间产生),禁止 `--hard`(会连同脏文件一起丢弃),改用 `git revert <task commits>` 或 `git reset --soft <BASE>` + 手动 checkout 目标文件。回滚后在 Ledger 记 `T<N>: reverted to <sha>`。
|
|
11
11
|
- **forbidden 文件被改**:reviewer 检测到 `writable` 白名单外的变更(含 `constraints` 禁改文件)→ 记 Critical finding,强制 `git checkout -- <file>` 恢复,并在 Ledger 记 `T<N>: reverted forbidden <file>`。
|
|
12
12
|
- 回滚仅限本运行产生的提交,**绝不 `reset` 到早于 `initial_base`**。
|
|
13
13
|
|
|
14
14
|
# 防失控护栏
|
|
15
15
|
|
|
16
|
-
1. 并发分型:只读 `explore` 可并行 ≤5;可写 `general` 必须串行(同一轮最多 1 个),杜绝并发写冲突与 review diff 污染。
|
|
16
|
+
1. 并发分型:只读 `work-explore` 可并行 ≤5;可写 `work-general` 必须串行(同一轮最多 1 个),杜绝并发写冲突与 review diff 污染。
|
|
17
17
|
2. 每个 task 预算 ≤10 分钟;worker 失败先换模型/拆任务重试,仍失败则重规划失败部分(见「重规划」)。
|
|
18
18
|
3. 每轮 fix 后必须 scoped re-review,未审查的 fix 是回归的来源。
|
|
19
19
|
4. Round 5 后才裁决,每条裁决都是 Ledger 条目,禁止静默丢弃。
|
|
20
|
-
5. 需要外部信息时用 `general` + `webfetch` 调研,不在子代理里嵌套再派发。
|
|
20
|
+
5. 需要外部信息时用 `work-general` + `webfetch` 调研,不在子代理里嵌套再派发。
|
|
@@ -52,7 +52,7 @@ work agent 完成第四步派发、implementer 返回 `DONE` 或 `DONE_WITH_CONC
|
|
|
52
52
|
|
|
53
53
|
### 阶段 3:派发 reviewer
|
|
54
54
|
|
|
55
|
-
按 `references/reviewer-prompt.md` 渲染两阶段审查 prompt(Spec Compliance + Code Quality),用 `task` 工具派发,`subagent_type` 取 `general`(需写入 REVIEW_FILE)。reviewer 写入 `<doc_dir>/task-<N>-review.md`。
|
|
55
|
+
按 `references/reviewer-prompt.md` 渲染两阶段审查 prompt(Spec Compliance + Code Quality),用 `task` 工具派发,`subagent_type` 取 `work-general`(需写入 REVIEW_FILE)。reviewer 写入 `<doc_dir>/task-<N>-review.md`。
|
|
56
56
|
|
|
57
57
|
### 阶段 4:处理结论
|
|
58
58
|
|
|
@@ -80,7 +80,7 @@ work agent 完成第四步派发、implementer 返回 `DONE` 或 `DONE_WITH_CONC
|
|
|
80
80
|
- reviewer 不重跑测试:信任 Ledger 记录的测试结果。
|
|
81
81
|
- fix prompt 引用 review 文件路径,不内联 findings——compaction 后 findings 可能丢失,文件不会。
|
|
82
82
|
- fix 轮次硬上限 5 轮;Breaker 绝不在 Round 5 前提前裁决(6.5 即时 ESCALATE/BLOCKED 是技术与边界问题,不属「提前裁决 finding 正确性」)。
|
|
83
|
-
-
|
|
83
|
+
- 能力假设退化:每轮新 implementer;不假定模型可切换,退化为「新 implementer + 更详细 brief」,不许静默失效。
|
|
84
84
|
- 本技能只审查与 fix,不规划、不派发初次 implementer、不改源码。
|
|
85
85
|
|
|
86
86
|
## 资源目录
|
|
@@ -6,14 +6,20 @@ Review 报告 Spec ❌、任何 Critical/Important finding、或你确认的 ⚠
|
|
|
6
6
|
|
|
7
7
|
## 6.2 Fix 轮次策略
|
|
8
8
|
|
|
9
|
-
| 轮次 |
|
|
10
|
-
|
|
11
|
-
| Round 1-3 |
|
|
12
|
-
| Round 4-5 | 新 implementer +
|
|
9
|
+
| 轮次 | 正常策略 | 理由 |
|
|
10
|
+
|------|----------|------|
|
|
11
|
+
| Round 1-3 | 复用原 implementer session(传 `task_id` 续接) | context 完整,知道自己的代码和选择 |
|
|
12
|
+
| Round 4-5 | 新 implementer + 更强模型(若平台支持模型切换) | fresh eyes + capability bump |
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
**平台能力分支**(正常策略依赖平台能力;若缺失则退化,不许静默失效):
|
|
15
|
+
|
|
16
|
+
**正常策略**(平台能力完整时):
|
|
17
|
+
- Round 1-3:复用原 implementer session,传 `task_id` 续接(同一 session 内 context 完整)。
|
|
18
|
+
- Round 4-5:新 implementer + 更强模型(若平台支持模型切换)。
|
|
19
|
+
|
|
20
|
+
**退化策略**(平台能力不完整时,按缺失项退化):
|
|
21
|
+
- 若不支持 session 续接(`task_id` 不生效):每轮新 implementer,附完整 brief + report + review 文件路径,prompt 自包含。
|
|
22
|
+
- 若不支持模型切换:退化为「新 implementer + 更详细 brief」,Round 4-5 仍用新 implementer 但不切换模型。
|
|
17
23
|
|
|
18
24
|
### 每轮 fix 的 prompt
|
|
19
25
|
|
|
@@ -49,7 +55,7 @@ Review 报告 Spec ❌、任何 Critical/Important finding、或你确认的 ⚠
|
|
|
49
55
|
|
|
50
56
|
每轮 fix 后,取 Ledger 中该任务**最后一条** `reviewed_head=` 的值作为 `FIX_BASE`,`HEAD` = 当前 HEAD,生成 scoped review package 到 `<doc_dir>/task-<N>-review-<fix_base7>..<head7>.diff`(结构同 5.1)。
|
|
51
57
|
|
|
52
|
-
派发 re-reviewer(`subagent_type` 取 `general`;唯一写操作是 `<REREVIEW_FILE>`,不得改源码/add/commit):
|
|
58
|
+
派发 re-reviewer(`subagent_type` 取 `work-general`;唯一写操作是 `<REREVIEW_FILE>`,不得改源码/add/commit):
|
|
53
59
|
|
|
54
60
|
```
|
|
55
61
|
你是一个 scoped re-reviewer。验证上一轮 review 的 findings 是否被解决,检查 fix diff 是否引入新问题。
|
|
@@ -115,4 +121,3 @@ fix 过程中出现的非正常返回按以下状态表处理(不分轮次,
|
|
|
115
121
|
- `FIX_BASE` 语义:取 Ledger 中该任务**最后一条** `reviewed_head=` 的值(不是初始 `base=`),保证 scoped re-review 只看 fix diff。
|
|
116
122
|
- re-reviewer 工具调用上限 10 次;写白名单仅 `<REREVIEW_FILE>`。
|
|
117
123
|
- fix prompt 引用 review 文件路径,不内联 findings。
|
|
118
|
-
- 能力假设退化不许静默失效:不支持 session 续接 → 每轮新 implementer;不支持模型切换 → 退化「新 implementer + 更详细 brief」。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 5.2 派发 task reviewer
|
|
2
2
|
|
|
3
|
-
使用 `task` 工具,`subagent_type` 取 `general`(reviewer 需写入 REVIEW_FILE,explore 无写工具)。**只读约束写在 prompt 里,不体现在工具权限**:唯一允许的写操作是写入 `<REVIEW_FILE>`,不得改源码、不得 add/commit。
|
|
3
|
+
使用 `task` 工具,`subagent_type` 取 `work-general`(reviewer 需写入 REVIEW_FILE,explore 无写工具)。**只读约束写在 prompt 里,不体现在工具权限**:唯一允许的写操作是写入 `<REVIEW_FILE>`,不得改源码、不得 add/commit。
|
|
4
4
|
|
|
5
5
|
## prompt 结构
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|------|------|
|
|
9
9
|
| **Spec ✅ + Approved** | 写 Ledger `T<N>: reviewed_head=<head7>`、`T<N>: complete (commits <base7>..<head7>, review clean)`,勾单,下一任务 |
|
|
10
10
|
| **Spec ❌ 或有 Critical/Important** | 先写 Ledger `T<N>: reviewed_head=<head7>`,再进入 fix loop(第六步) |
|
|
11
|
-
| **⚠️ Cannot verify from diff** | 你自己核查(你持有计划和跨任务上下文);若核查需读文件超过 3 次,改为派 `explore` 子任务核查,避免污染 context |
|
|
11
|
+
| **⚠️ Cannot verify from diff** | 你自己核查(你持有计划和跨任务上下文);若核查需读文件超过 3 次,改为派 `work-explore` 子任务核查,避免污染 context |
|
|
12
12
|
|
|
13
13
|
## Minor findings
|
|
14
14
|
|