@aipper/aiws-spec 0.0.27 → 0.0.29
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/docs/cli-interface.md +10 -12
- package/docs/opencode-autonomous-swarm.md +178 -0
- package/docs/opencode-omo-adapter.md +123 -4
- package/docs/opencode-omo-validation-checklist.md +47 -0
- package/docs/opencode-subagent-first.md +187 -0
- package/docs/workflow-delegation-context-injection.md +217 -0
- package/docs/workflow-delegation-contracts.json +68 -1
- package/docs/workflow-delegation-contracts.md +3 -0
- package/docs/workflow-delegation-contracts.schema.json +95 -0
- package/docs/workflow-governance-rules.json +47 -6
- package/docs/workflow-governance-rules.md +7 -6
- package/docs/workflow-governance-rules.schema.json +39 -1
- package/docs/workflow-router-rules.json +63 -8
- package/docs/workflow-router-rules.md +15 -6
- package/docs/workflow-stage-contracts.json +16 -8
- package/docs/workflow-stage-contracts.md +7 -7
- package/package.json +1 -1
- package/templates/workspace/.agents/skills/using-aiws/SKILL.md +22 -8
- package/templates/workspace/.agents/skills/ws-commit/SKILL.md +6 -118
- package/templates/workspace/.agents/skills/ws-deliver/SKILL.md +6 -218
- package/templates/workspace/.agents/skills/ws-dev/SKILL.md +52 -141
- package/templates/workspace/.agents/skills/ws-finish/SKILL.md +6 -205
- package/templates/workspace/.agents/skills/ws-handoff/SKILL.md +10 -44
- package/templates/workspace/.agents/skills/ws-intake/SKILL.md +87 -0
- package/templates/workspace/.agents/skills/ws-plan/SKILL.md +15 -9
- package/templates/workspace/.agents/skills/ws-plan-verify/SKILL.md +6 -49
- package/templates/workspace/.agents/skills/ws-review/SKILL.md +6 -1
- package/templates/workspace/.agents/skills/ws-verify-before-complete/SKILL.md +12 -53
- package/templates/workspace/.claude/commands/ws-intake.md +19 -0
- package/templates/workspace/.claude/commands/ws-review.md +5 -1
- package/templates/workspace/.claude/settings.json.example +26 -0
- package/templates/workspace/.claude/skills/ws-commit/SKILL.md +6 -118
- package/templates/workspace/.claude/skills/ws-deliver/SKILL.md +6 -218
- package/templates/workspace/.claude/skills/ws-dev/SKILL.md +52 -141
- package/templates/workspace/.claude/skills/ws-finish/SKILL.md +6 -205
- package/templates/workspace/.claude/skills/ws-handoff/SKILL.md +10 -44
- package/templates/workspace/.claude/skills/ws-intake/SKILL.md +31 -0
- package/templates/workspace/.claude/skills/ws-plan-verify/SKILL.md +6 -49
- package/templates/workspace/.claude/skills/ws-review/SKILL.md +6 -1
- package/templates/workspace/.claude/skills/ws-verify-before-complete/SKILL.md +12 -53
- package/templates/workspace/.opencode/command/ws-auto.md +33 -0
- package/templates/workspace/.opencode/command/ws-autonomy.md +25 -0
- package/templates/workspace/.opencode/command/ws-intake.md +22 -0
- package/templates/workspace/.opencode/command/ws-review.md +5 -1
- package/templates/workspace/.opencode/commands/ws-auto.md +33 -0
- package/templates/workspace/.opencode/commands/ws-autonomy.md +25 -0
- package/templates/workspace/.opencode/commands/ws-commit.md +4 -56
- package/templates/workspace/.opencode/commands/ws-deliver.md +10 -50
- package/templates/workspace/.opencode/commands/ws-finish.md +8 -65
- package/templates/workspace/.opencode/commands/ws-handoff.md +9 -17
- package/templates/workspace/.opencode/commands/ws-intake.md +22 -0
- package/templates/workspace/.opencode/commands/ws-migrate.md +10 -17
- package/templates/workspace/.opencode/commands/ws-plan-verify.md +5 -15
- package/templates/workspace/.opencode/commands/ws-pull.md +6 -75
- package/templates/workspace/.opencode/commands/ws-push.md +7 -82
- package/templates/workspace/.opencode/commands/ws-review.md +5 -1
- package/templates/workspace/.opencode/commands/ws-submodule-setup.md +8 -47
- package/templates/workspace/.opencode/commands/ws-verify-before-complete.md +10 -19
- package/templates/workspace/.opencode/helpers/approval-whitelist-check.sh +148 -0
- package/templates/workspace/.opencode/helpers/approval-whitelist-run.sh +82 -0
- package/templates/workspace/.opencode/helpers/approval-whitelist-watchdog.sh +144 -0
- package/templates/workspace/.opencode/helpers/tmux-swarm-rescue.sh +56 -0
- package/templates/workspace/.opencode/helpers/tmux-swarm-scan.sh +46 -0
- package/templates/workspace/.opencode/oh-my-opencode.json.example +64 -4
- package/templates/workspace/.opencode/skills/using-aiws/SKILL.md +93 -77
- package/templates/workspace/.opencode/skills/ws-analyze/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-auto/SKILL.md +46 -0
- package/templates/workspace/.opencode/skills/ws-autonomy/SKILL.md +62 -0
- package/templates/workspace/.opencode/skills/ws-bugfix/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-commit/SKILL.md +6 -118
- package/templates/workspace/.opencode/skills/ws-delegate/SKILL.md +93 -40
- package/templates/workspace/.opencode/skills/ws-deliver/SKILL.md +6 -218
- package/templates/workspace/.opencode/skills/ws-dev/SKILL.md +53 -142
- package/templates/workspace/.opencode/skills/ws-dev-lite/SKILL.md +19 -6
- package/templates/workspace/.opencode/skills/ws-finish/SKILL.md +6 -205
- package/templates/workspace/.opencode/skills/ws-frontend-design/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-handoff/SKILL.md +10 -44
- package/templates/workspace/.opencode/skills/ws-intake/SKILL.md +40 -0
- package/templates/workspace/.opencode/skills/ws-migrate/SKILL.md +6 -42
- package/templates/workspace/.opencode/skills/ws-plan/SKILL.md +4 -2
- package/templates/workspace/.opencode/skills/ws-plan-verify/SKILL.md +6 -49
- package/templates/workspace/.opencode/skills/ws-preflight/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-pull/SKILL.md +8 -109
- package/templates/workspace/.opencode/skills/ws-push/SKILL.md +8 -100
- package/templates/workspace/.opencode/skills/ws-quality-review/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-req-change/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-req-contract-sync/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-req-contract-validate/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-req-flow-sync/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-req-review/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-review/SKILL.md +14 -3
- package/templates/workspace/.opencode/skills/ws-rule/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-spec-review/SKILL.md +1 -1
- package/templates/workspace/.opencode/skills/ws-submodule-setup/SKILL.md +10 -57
- package/templates/workspace/.opencode/skills/ws-verify-before-complete/SKILL.md +12 -53
- package/templates/workspace/AGENTS.md +12 -5
- package/templates/workspace/AI_PROJECT.md +1 -1
- package/templates/workspace/changes/README.md +9 -12
- package/templates/workspace/manifest.json +277 -203
- package/templates/workspace/.agents/skills/ws-migrate/SKILL.md +0 -54
- package/templates/workspace/.agents/skills/ws-pull/SKILL.md +0 -119
- package/templates/workspace/.agents/skills/ws-push/SKILL.md +0 -110
- package/templates/workspace/.agents/skills/ws-submodule-setup/SKILL.md +0 -65
- package/templates/workspace/.claude/skills/ws-migrate/SKILL.md +0 -54
- package/templates/workspace/.claude/skills/ws-pull/SKILL.md +0 -119
- package/templates/workspace/.claude/skills/ws-push/SKILL.md +0 -110
- package/templates/workspace/.claude/skills/ws-submodule-setup/SKILL.md +0 -65
package/docs/cli-interface.md
CHANGED
|
@@ -67,6 +67,9 @@
|
|
|
67
67
|
接口(仅定义):
|
|
68
68
|
- `aiws update [path]`
|
|
69
69
|
|
|
70
|
+
兼容升级:
|
|
71
|
+
- 若工作区缺失 `.aiws/manifest.json`,但已具备旧版 AIWS workspace 真值文件(例如 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md` 与 gate 脚本),`aiws update` 应视为“旧版升级”,允许补写 manifest 并刷新模板,而不是一律要求重新 `init`。
|
|
72
|
+
|
|
70
73
|
## `aiws rollback`
|
|
71
74
|
|
|
72
75
|
语义:
|
|
@@ -80,6 +83,7 @@
|
|
|
80
83
|
语义(强门禁):
|
|
81
84
|
- 缺 `python3` 或缺 required 脚本直接失败(退出码非 0)。
|
|
82
85
|
- `.aiws/manifest.json` 若仍为占位(含 `<sha256>` / epoch 时间戳等)必须失败(退出码 `2`),提示先运行 `aiws init`。
|
|
86
|
+
- 若缺失 `.aiws/manifest.json`,且可识别为旧版 AIWS workspace,应失败并明确提示先运行一次 `aiws update .` 完成升级,再重新 `validate`;不要把这种场景误报成“从未 init”。
|
|
83
87
|
- 可选:开启 stamping(证据落盘):
|
|
84
88
|
- 方式 A:`aiws validate [path] --stamp`
|
|
85
89
|
- 方式 B:设置环境变量 `AIWS_VALIDATE_STAMP=1` 后执行 `aiws validate [path]`
|
|
@@ -215,8 +219,8 @@
|
|
|
215
219
|
- `@aipper/aiws-spec/docs/workflow-review-gates.json`(dual review / finish gate 真值)
|
|
216
220
|
- 阶段推断约束:
|
|
217
221
|
- `currentStage/recommendedStage` 必须来自共享 change 状态,而不是 dashboard 单独猜测
|
|
218
|
-
-
|
|
219
|
-
-
|
|
222
|
+
- `git status` 优先读取 change 分支所在工作目录
|
|
223
|
+
- 若分支元数据已 stale,不应导致 API/UI 失败;应返回 warning 并回退到当前工作目录
|
|
220
224
|
- 至少区分 `ws-review` / `ws-commit` / `ws-deliver` / `ws-finish` / `ws-handoff`
|
|
221
225
|
- 页面应至少展示:
|
|
222
226
|
- change 列表、tasks 进度、truth drift、strict blockers
|
|
@@ -238,7 +242,7 @@ Dashboard API(本地只读):
|
|
|
238
242
|
- `rationale`
|
|
239
243
|
- `ruleId`
|
|
240
244
|
- `source`
|
|
241
|
-
- `warning`(可选;例如 stale
|
|
245
|
+
- `warning`(可选;例如 stale 分支元数据)
|
|
242
246
|
- `GET /api/workflow-stages`
|
|
243
247
|
- 返回从 spec 真值读取的 workflow stage contracts
|
|
244
248
|
- `GET /api/change/<id>/validate?strict=1`
|
|
@@ -275,21 +279,16 @@ Dashboard API(本地只读):
|
|
|
275
279
|
|
|
276
280
|
语义:
|
|
277
281
|
- 默认行为:切分支到 `change/<change-id>`(存在则切换;不存在则创建);若仓库存在 `.gitmodules`,只切 superproject,本次不会递归切换 submodules。
|
|
278
|
-
- 若检测到 `.gitmodules`(git submodules
|
|
282
|
+
- 若检测到 `.gitmodules`(git submodules):默认采用 `--switch`(仅切 superproject 分支,不递归切换 submodule)。
|
|
279
283
|
- 若 `changes/<change-id>/` 不存在:等价执行 `aiws change new ...`。
|
|
280
284
|
- 可选:`--hooks` 等价于 `aiws hooks install .`。
|
|
281
285
|
- 可选:`--switch` 显式允许切换 superproject 分支(仅在存在 `.gitmodules` 时有意义;否则等价于默认行为)。
|
|
282
286
|
- 实现细节:当存在 `.gitmodules` 且使用 `--switch` 时,CLI 只切 superproject 分支;submodules 保持当前状态,由 `ws-pull` / `ws-finish` 再统一挂回 `aiws/pin/<target-branch>`。
|
|
283
287
|
- 可选:`--no-switch` 不切换当前分支(仅确保目标分支存在,并初始化变更工件);适用于 superproject + submodule 场景,避免意外切换 A 目录分支导致 submodule 状态混乱。
|
|
284
|
-
- 可选:`--worktree` 使用 `git worktree` 创建一个独立工作区并在其中 checkout `change/<change-id>`,当前目录分支保持不变(推荐用于 superproject + submodule)。
|
|
285
288
|
- 当 `.gitmodules` 存在时,submodule 的 detached HEAD 恢复应统一使用 `aiws/pin/<target-branch>`;不要把 submodule 切到 `change/<change-id>`。
|
|
286
|
-
- 默认 worktree 目录:`../<repo-name>-<change-id>`(相对于 git root)
|
|
287
|
-
- 可选:`--worktree-dir <path>` 覆盖 worktree 目录(推荐放在仓库外;相对路径按 `../` 作为基准理解)
|
|
288
|
-
- 可选:`--submodules` 在 worktree 内执行 `git submodule update --init --recursive`(避免新 worktree 下 submodule 目录为空)
|
|
289
|
-
- 约束:`--worktree` 与 `--no-switch` 互斥。
|
|
290
289
|
|
|
291
290
|
接口(仅定义):
|
|
292
|
-
- `aiws change start <change-id> [--title <title>] [--no-design] [--hooks] [--no-switch] [--switch]
|
|
291
|
+
- `aiws change start <change-id> [--title <title>] [--no-design] [--hooks] [--no-switch] [--switch]`
|
|
293
292
|
|
|
294
293
|
### `aiws change finish`
|
|
295
294
|
|
|
@@ -304,7 +303,6 @@ Dashboard API(本地只读):
|
|
|
304
303
|
- `changes/<id>/review/quality-review.md`
|
|
305
304
|
- `.agentdocs/tmp/aiws-validate/*.json`
|
|
306
305
|
- `changes/<id>/evidence/verify-before-complete.md`
|
|
307
|
-
- worktree 场景:若目标分支正在其它 worktree 被 checkout,会提示到对应 worktree 执行。
|
|
308
306
|
- 生命周期语义:
|
|
309
307
|
- 本地 merge 成功但 push / cleanup 未完成时,只记为“finish 已开始”,治理阶段仍停留在 `ws-finish`
|
|
310
308
|
- 若 `--push` 后只完成了 push、但 cleanup 仍未完成,命令应返回非 0,并记录 `finish_cleanup_pending` 以提示修复后重跑
|
|
@@ -396,7 +394,7 @@ Dashboard API(本地只读):
|
|
|
396
394
|
- collaboration 统计至少包含 `analysis` / `patches` / `review` / `evidence_dir`。
|
|
397
395
|
- 若 review 仅来自 tmp fallback,应额外输出有效 review signal(如 `review_signal: effective=1 source=tmp_fallback`)。
|
|
398
396
|
- 应显式输出 review gate 状态,至少覆盖:`spec_review` / `quality_review` / `validate_stamp` / `verify_before_complete`。
|
|
399
|
-
- 若 change
|
|
397
|
+
- 若 change 分支元数据已 stale,应输出 warning。
|
|
400
398
|
- `next`:
|
|
401
399
|
- 基于 blockers / 未完成任务 / collaboration 工件给出下一步建议。
|
|
402
400
|
- 若存在委托 patch 草案,应提示“先人工审查,不要视为已自动应用”。
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# OpenCode/oMo Autonomous Swarm
|
|
2
|
+
|
|
3
|
+
目标:为 OpenCode + `oh-my-opencode` 提供一层**实验性**自主协作适配,让“尽量无人值守直到任务完成”有可审计的合同、示例配置与安全边界。
|
|
4
|
+
|
|
5
|
+
## 定位
|
|
6
|
+
|
|
7
|
+
- `aiws`:继续负责 workflow contract、artifact convention、review gate、completion contract。
|
|
8
|
+
- oMo:继续负责 agent harness、background tasks、session continuity、hooks 与 runtime orchestration。
|
|
9
|
+
- tmux helper:作为**可选**外部协助层,提供巡检与安全救援;不升格为 AIWS 核心 runtime。
|
|
10
|
+
- approval whitelist policy:作为**项目级策略声明**,定义“哪些操作可被外部 helper 自动放行”,但不直接接管宿主权限弹窗。
|
|
11
|
+
|
|
12
|
+
## Execution Mode
|
|
13
|
+
|
|
14
|
+
允许的执行模式:
|
|
15
|
+
|
|
16
|
+
- `single-agent`
|
|
17
|
+
- 未启用 oMo,或明确选择不用 autonomous 辅助。
|
|
18
|
+
- `omo-native`
|
|
19
|
+
- 已启用 oMo;使用 `prompt_append`、`backgroundTasks`、`experimental.auto_resume` 与 hooks 兼容层推进任务。
|
|
20
|
+
- `omo-native + tmux-swarm`
|
|
21
|
+
- 在 `omo-native` 基础上,额外启用 `.opencode/helpers/tmux-swarm-*.sh` 做外部巡检/救援。
|
|
22
|
+
|
|
23
|
+
## Completion Contract
|
|
24
|
+
|
|
25
|
+
“完成”至少同时满足:
|
|
26
|
+
|
|
27
|
+
- 已读取 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`
|
|
28
|
+
- 已绑定 `Req_ID` / `Problem_ID` / `change`
|
|
29
|
+
- 已产出当前阶段要求的工件
|
|
30
|
+
- 已执行最小验证,且结果被写入 evidence
|
|
31
|
+
- 若适用:`aiws validate .` 或 `aiws change validate --strict` 已通过
|
|
32
|
+
- review / evidence 已落盘到 `changes/<id>/...` 或 `.agentdocs/tmp/...`
|
|
33
|
+
|
|
34
|
+
若不满足上述条件,不应宣称“已完成”并停止。
|
|
35
|
+
|
|
36
|
+
## Retry Contract
|
|
37
|
+
|
|
38
|
+
自动回跳只允许在既有 AIWS 阶段语义内进行:
|
|
39
|
+
|
|
40
|
+
- `ws-plan-verify` 失败 -> 回到 `ws-plan`
|
|
41
|
+
- `ws-review` 发现 blocker -> 回到 `ws-dev`
|
|
42
|
+
- `validate` 失败且可修复 -> 回到 `ws-dev`
|
|
43
|
+
|
|
44
|
+
约束:
|
|
45
|
+
|
|
46
|
+
- 必须保留 `retry_count`
|
|
47
|
+
- 达到熔断阈值后停止自动重试
|
|
48
|
+
- 最后一次失败摘要必须写入 evidence
|
|
49
|
+
|
|
50
|
+
## Approval Whitelist Policy
|
|
51
|
+
|
|
52
|
+
当你希望把“读文件 / 写 evidence”这类低风险动作尽量自动放行时,建议在项目级 oMo 配置中显式声明一份 approval whitelist policy。
|
|
53
|
+
|
|
54
|
+
建议最小范围:
|
|
55
|
+
|
|
56
|
+
- `read_only_commands`
|
|
57
|
+
- 只允许仓库内只读命令,例如 `rg`、`cat`、`sed`、`ls`、`find`、`git status`、`git diff`
|
|
58
|
+
- `write_allow_paths`
|
|
59
|
+
- 只允许写入 AIWS 约定的证据路径:
|
|
60
|
+
- `.agentdocs/tmp/`
|
|
61
|
+
- `changes/*/analysis/`
|
|
62
|
+
- `changes/*/review/`
|
|
63
|
+
- `changes/*/evidence/`
|
|
64
|
+
- `deny_paths`
|
|
65
|
+
- 显式拒绝敏感路径,例如 `secrets/`、`.env*`
|
|
66
|
+
- `deny_commands`
|
|
67
|
+
- 显式拒绝高风险命令,例如 `rm`、`mv`、`git commit`、`git push`、`npm publish`
|
|
68
|
+
- `host_permission_mode`
|
|
69
|
+
- 固定为 `manual-only`
|
|
70
|
+
- 表示宿主工具的真实提权 / sandbox / 系统级权限申请仍需人工确认
|
|
71
|
+
|
|
72
|
+
注意:
|
|
73
|
+
|
|
74
|
+
- 这份 policy 是给外部 helper / hook / 审计流程消费的声明,不代表 AIWS 本身已经拥有“自动批准宿主权限”的能力。
|
|
75
|
+
- 若命中 `deny_paths` / `deny_commands`,或需要宿主提权,必须停止自动流程并交还人工确认。
|
|
76
|
+
|
|
77
|
+
## Rescue Contract
|
|
78
|
+
|
|
79
|
+
tmux swarm 只允许做**安全白名单**救援:
|
|
80
|
+
|
|
81
|
+
- 发现 `(y/n)` 提示时发送 `y` + `Enter`
|
|
82
|
+
- 发现 `Press Enter to continue` 时发送 `Enter`
|
|
83
|
+
- 发现 pane 处于 copy-mode 时执行 `send-keys -X cancel`
|
|
84
|
+
- 先 `capture-pane` 审核,再允许发送按键
|
|
85
|
+
- 所有动作必须写入审计日志
|
|
86
|
+
|
|
87
|
+
禁止:
|
|
88
|
+
|
|
89
|
+
- blind `Ctrl+C`
|
|
90
|
+
- blind 广播 shell 命令
|
|
91
|
+
- 自动 `git commit` / `git push`
|
|
92
|
+
- 删除文件或执行破坏性命令
|
|
93
|
+
|
|
94
|
+
## 推荐配置
|
|
95
|
+
|
|
96
|
+
模板提供以下文件:
|
|
97
|
+
|
|
98
|
+
- `.opencode/oh-my-opencode.json.example`
|
|
99
|
+
- `.claude/settings.json.example`
|
|
100
|
+
- `.opencode/skills/ws-auto/SKILL.md`
|
|
101
|
+
- `.opencode/helpers/tmux-swarm-scan.sh`
|
|
102
|
+
- `.opencode/helpers/tmux-swarm-rescue.sh`
|
|
103
|
+
- `.opencode/helpers/approval-whitelist-check.sh`
|
|
104
|
+
- `.opencode/helpers/approval-whitelist-run.sh`
|
|
105
|
+
- `.opencode/helpers/approval-whitelist-watchdog.sh`
|
|
106
|
+
|
|
107
|
+
说明:
|
|
108
|
+
|
|
109
|
+
- `.opencode/oh-my-opencode.json.example` 负责声明 agent、`prompt_append`、`backgroundTasks`、`experimental.auto_resume`
|
|
110
|
+
- `.opencode/oh-my-opencode.json.example` 也可声明 `aiws.autonomy.approval_whitelist`
|
|
111
|
+
- `/ws-auto` 与 `aiws opencode auto .` 负责把“需要 update 吗 / watchdog 能否启动”这类 bootstrap 检查前置掉
|
|
112
|
+
- `.claude/settings.json.example` 只作为 hook 兼容层示例,不充当 controller
|
|
113
|
+
- `approval-whitelist-check.sh` 负责把项目级 whitelist policy 转成 `allow` / `deny` / `manual` 判定,并写审计日志
|
|
114
|
+
- `approval-whitelist-run.sh` 负责在 `allow` 场景下执行简单命令,并写执行摘要
|
|
115
|
+
- `approval-whitelist-watchdog.sh` 负责轮询 JSONL 队列,串行调用 runner,并写 watchdog 状态/结果
|
|
116
|
+
- `aiws opencode supervise .` 是显式启动入口:若当前已在 tmux session 内,就补一个 watchdog window;否则为当前工作区起一个 detached tmux session
|
|
117
|
+
- tmux helper 是可选层,仅在用户明确接受 `tmux` 依赖时启用
|
|
118
|
+
|
|
119
|
+
## `ws-autonomy`
|
|
120
|
+
|
|
121
|
+
OpenCode 实验入口:`/ws-autonomy`
|
|
122
|
+
|
|
123
|
+
职责:
|
|
124
|
+
|
|
125
|
+
- 声明 `Execution Mode`
|
|
126
|
+
- 声明 `Completion Contract`
|
|
127
|
+
- 声明 `Retry Contract`
|
|
128
|
+
- 声明 `Rescue Policy`
|
|
129
|
+
- 指向 evidence 路径
|
|
130
|
+
|
|
131
|
+
不负责:
|
|
132
|
+
|
|
133
|
+
- 直接接管 oMo runtime
|
|
134
|
+
- 直接替代 `ws-plan` / `ws-dev` / `ws-review`
|
|
135
|
+
- 越权写盘
|
|
136
|
+
- 自动批准宿主工具的真实权限弹窗
|
|
137
|
+
|
|
138
|
+
## `ws-auto`
|
|
139
|
+
|
|
140
|
+
OpenCode bootstrap 入口:`/ws-auto`
|
|
141
|
+
|
|
142
|
+
职责:
|
|
143
|
+
|
|
144
|
+
- 先跑 preflight
|
|
145
|
+
- 触发 `aiws opencode auto .`
|
|
146
|
+
- 必要时先刷新 AIWS 托管内容
|
|
147
|
+
- 在条件满足时显式确保 watchdog 已运行
|
|
148
|
+
- 给出下一步 route
|
|
149
|
+
|
|
150
|
+
不负责:
|
|
151
|
+
|
|
152
|
+
- 自动启用 `.opencode/oh-my-opencode.json`
|
|
153
|
+
- 自动批准宿主工具的真实权限弹窗
|
|
154
|
+
- 自动执行 tmux rescue
|
|
155
|
+
|
|
156
|
+
## Evidence
|
|
157
|
+
|
|
158
|
+
建议使用:
|
|
159
|
+
|
|
160
|
+
- 临时状态:`.agentdocs/tmp/opencode-autonomy/current-run.json`
|
|
161
|
+
- whitelist 判定:`.agentdocs/tmp/opencode-autonomy/approval-whitelist-last.json`
|
|
162
|
+
- whitelist 审计日志:`.agentdocs/tmp/opencode-autonomy/approval-whitelist.log`
|
|
163
|
+
- whitelist 执行摘要:`.agentdocs/tmp/opencode-autonomy/approval-whitelist-exec-last.json`
|
|
164
|
+
- whitelist 执行日志:`.agentdocs/tmp/opencode-autonomy/approval-whitelist-exec.log`
|
|
165
|
+
- watchdog 队列:`.agentdocs/tmp/opencode-autonomy/approval-watchdog-queue.jsonl`
|
|
166
|
+
- watchdog 状态:`.agentdocs/tmp/opencode-autonomy/approval-watchdog-state.json`
|
|
167
|
+
- watchdog 结果:`.agentdocs/tmp/opencode-autonomy/approval-watchdog-results.jsonl`
|
|
168
|
+
- watchdog 日志:`.agentdocs/tmp/opencode-autonomy/approval-watchdog.log`
|
|
169
|
+
- tmux 巡检:`.agentdocs/tmp/opencode-autonomy/tmux-scan.json`
|
|
170
|
+
- tmux 救援日志:`.agentdocs/tmp/opencode-autonomy/tmux-rescue.log`
|
|
171
|
+
- 持久 evidence:`changes/<id>/evidence/`
|
|
172
|
+
|
|
173
|
+
## 边界提醒
|
|
174
|
+
|
|
175
|
+
- 本能力是 OpenCode/oMo 优先的实验层,不代表 AIWS 已经转向“pane / session orchestration 产品”。
|
|
176
|
+
- approval whitelist 只声明项目边界,不等于宿主权限自动批准器。
|
|
177
|
+
- `aiws opencode supervise .` 只是显式 ensure watchdog 的启动器,不会自动批准 host permission,也不会自动执行 tmux rescue。
|
|
178
|
+
- 若未来工具原生能力变化,优先更新 example config、status readiness 与 helper,而不是把 runtime 逻辑硬编码进核心 workflow 真值。
|
|
@@ -21,11 +21,13 @@
|
|
|
21
21
|
|
|
22
22
|
CLI 辅助探测:
|
|
23
23
|
- 可在项目根运行 `aiws opencode status .`
|
|
24
|
-
-
|
|
24
|
+
- 若你想一条命令做 bootstrap + update 检查 + watchdog ensure:`aiws opencode auto .`
|
|
25
|
+
- 如需由 `aiws` 显式确保 watchdog 已在 tmux 中运行:`aiws opencode supervise .`
|
|
26
|
+
- `aiws opencode status .` 只做探测与提示,不接管 OpenCode / oMo 的运行时编排
|
|
25
27
|
|
|
26
28
|
## 推荐项目级配置
|
|
27
29
|
|
|
28
|
-
若你希望按项目把 oMo agent 集合与 AIWS workflow
|
|
30
|
+
若你希望按项目把 oMo agent 集合与 AIWS workflow 对齐,建议保持最小配置面:agent + autonomy 必要字段,不接管 hooks / MCP / LSP。
|
|
29
31
|
|
|
30
32
|
模板建议文件:
|
|
31
33
|
- `packages/spec/templates/workspace/.opencode/oh-my-opencode.json.example`
|
|
@@ -37,7 +39,8 @@ CLI 辅助探测:
|
|
|
37
39
|
"agents": {
|
|
38
40
|
"planner-sisyphus": {
|
|
39
41
|
"enabled": true,
|
|
40
|
-
"replace_plan": false
|
|
42
|
+
"replace_plan": false,
|
|
43
|
+
"prompt_append": "<AIWS completion contract>"
|
|
41
44
|
},
|
|
42
45
|
"librarian": {
|
|
43
46
|
"enabled": true
|
|
@@ -48,15 +51,127 @@ CLI 辅助探测:
|
|
|
48
51
|
"oracle": {
|
|
49
52
|
"enabled": true
|
|
50
53
|
}
|
|
54
|
+
},
|
|
55
|
+
"backgroundTasks": {
|
|
56
|
+
"enabled": true,
|
|
57
|
+
"maxJobs": 3,
|
|
58
|
+
"defaultTimeoutMs": 1200000
|
|
59
|
+
},
|
|
60
|
+
"experimental": {
|
|
61
|
+
"auto_resume": true
|
|
62
|
+
},
|
|
63
|
+
"aiws": {
|
|
64
|
+
"autonomy": {
|
|
65
|
+
"approval_whitelist": {
|
|
66
|
+
"enabled": true,
|
|
67
|
+
"mode": "assist-only",
|
|
68
|
+
"host_permission_mode": "manual-only",
|
|
69
|
+
"read_only_commands": [
|
|
70
|
+
"rg",
|
|
71
|
+
"cat",
|
|
72
|
+
"sed",
|
|
73
|
+
"ls",
|
|
74
|
+
"find",
|
|
75
|
+
"git status",
|
|
76
|
+
"git diff"
|
|
77
|
+
],
|
|
78
|
+
"write_allow_paths": [
|
|
79
|
+
".agentdocs/tmp/",
|
|
80
|
+
"changes/*/analysis/",
|
|
81
|
+
"changes/*/review/",
|
|
82
|
+
"changes/*/evidence/"
|
|
83
|
+
],
|
|
84
|
+
"deny_paths": [
|
|
85
|
+
"secrets/",
|
|
86
|
+
".env*"
|
|
87
|
+
],
|
|
88
|
+
"deny_commands": [
|
|
89
|
+
"rm",
|
|
90
|
+
"mv",
|
|
91
|
+
"git commit",
|
|
92
|
+
"git push",
|
|
93
|
+
"npm publish"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
51
97
|
}
|
|
52
98
|
}
|
|
53
99
|
```
|
|
54
100
|
|
|
55
101
|
说明:
|
|
56
102
|
- `replace_plan=false` 是保守默认,避免项目级配置直接替换掉 OpenCode 默认 `plan` 行为。
|
|
57
|
-
-
|
|
103
|
+
- 这份示例的目的不仅是提供稳定 agent,也为 `ws-autonomy` 准备 `prompt_append` / `backgroundTasks` / `auto_resume`。
|
|
104
|
+
- `aiws.autonomy.approval_whitelist` 是项目级策略声明,只定义可自动放行的低风险操作范围,不自动批准宿主提权。
|
|
58
105
|
- 若你已经在用户级配置里启用了这些 agent,项目级配置可以不写。
|
|
59
106
|
|
|
107
|
+
## 自主协作实验层(Autonomous Swarm)
|
|
108
|
+
|
|
109
|
+
当你希望 OpenCode 尽量无人值守地持续推进任务时,建议把 AIWS 的要求前移到 oMo 配置与 hook 兼容层,而不是让 `aiws` 自己变成 runtime orchestrator。
|
|
110
|
+
|
|
111
|
+
推荐最小组合:
|
|
112
|
+
|
|
113
|
+
- `.opencode/oh-my-opencode.json`
|
|
114
|
+
- `planner-sisyphus.prompt_append`:写入 AIWS completion contract
|
|
115
|
+
- `backgroundTasks`:只用于 analysis / review / doc-search 型并行任务
|
|
116
|
+
- `experimental.auto_resume=true`
|
|
117
|
+
- `aiws.autonomy.approval_whitelist`:只声明只读命令与 evidence 写路径白名单;宿主权限仍是 `manual-only`
|
|
118
|
+
- `.claude/settings.json.example`
|
|
119
|
+
- 作为 oMo 可读取的 hook 兼容层示例
|
|
120
|
+
- `.opencode/helpers/tmux-swarm-scan.sh`
|
|
121
|
+
- 巡检当前 tmux panes,输出状态摘要
|
|
122
|
+
- `.opencode/helpers/tmux-swarm-rescue.sh`
|
|
123
|
+
- 只执行安全白名单救援
|
|
124
|
+
- `.opencode/helpers/approval-whitelist-check.sh`
|
|
125
|
+
- 把 `approval_whitelist` 策略转成命令级 `allow` / `deny` / `manual` 判定
|
|
126
|
+
- `.opencode/helpers/approval-whitelist-run.sh`
|
|
127
|
+
- 先调用 checker;只有 `allow` 才以非 shell 模式执行简单命令,并写执行摘要
|
|
128
|
+
- `.opencode/helpers/approval-whitelist-watchdog.sh`
|
|
129
|
+
- 轮询 `approval-watchdog-queue.jsonl`,把外部蜂群写入的待执行项交给 runner
|
|
130
|
+
- `/ws-auto`
|
|
131
|
+
- OpenCode 侧的 bootstrap skill;会优先触发 `aiws opencode auto .`
|
|
132
|
+
- `aiws opencode auto .`
|
|
133
|
+
- 显式检查是否需要 `aiws update .`,并在条件满足时继续 ensure watchdog
|
|
134
|
+
- `aiws opencode supervise .`
|
|
135
|
+
- 显式确保 watchdog 已在 tmux 中运行;若当前不在 tmux,则为工作区创建一个 detached session
|
|
136
|
+
|
|
137
|
+
边界:
|
|
138
|
+
|
|
139
|
+
- `ws-autonomy` 只声明合同与路径,不替代 `ws-plan` / `ws-dev` / `ws-review`
|
|
140
|
+
- tmux helper 只是可选外部辅助层,不升格为 AIWS 核心 runtime
|
|
141
|
+
- blind pane control、自动 commit/push、未知命令广播都不属于该实验层
|
|
142
|
+
- 宿主工具的真实权限申请不属于自动批准范围
|
|
143
|
+
|
|
144
|
+
示例:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
bash .opencode/helpers/approval-whitelist-check.sh . \
|
|
148
|
+
--kind read \
|
|
149
|
+
--command "cat .opencode/oh-my-opencode.json"
|
|
150
|
+
|
|
151
|
+
bash .opencode/helpers/approval-whitelist-check.sh . \
|
|
152
|
+
--kind write \
|
|
153
|
+
--command "node scripts/collect-evidence.mjs" \
|
|
154
|
+
--path "changes/demo/evidence/run.json"
|
|
155
|
+
|
|
156
|
+
bash .opencode/helpers/approval-whitelist-check.sh . \
|
|
157
|
+
--kind host-permission \
|
|
158
|
+
--command "sudo npm install"
|
|
159
|
+
|
|
160
|
+
bash .opencode/helpers/approval-whitelist-run.sh . \
|
|
161
|
+
--kind read \
|
|
162
|
+
--command "cat .opencode/oh-my-opencode.json"
|
|
163
|
+
|
|
164
|
+
printf '%s\n' \
|
|
165
|
+
'{"id":"read-config","kind":"read","command":"cat .opencode/oh-my-opencode.json"}' \
|
|
166
|
+
>> .agentdocs/tmp/opencode-autonomy/approval-watchdog-queue.jsonl
|
|
167
|
+
|
|
168
|
+
bash .opencode/helpers/approval-whitelist-watchdog.sh . --once
|
|
169
|
+
|
|
170
|
+
aiws opencode auto .
|
|
171
|
+
|
|
172
|
+
aiws opencode supervise .
|
|
173
|
+
```
|
|
174
|
+
|
|
60
175
|
## 角色映射
|
|
61
176
|
|
|
62
177
|
`aiws` 的治理角色与 oMo agent 的推荐映射如下:
|
|
@@ -127,9 +242,13 @@ CLI 辅助探测:
|
|
|
127
242
|
- `changes/<id>/patches/`
|
|
128
243
|
- `changes/<id>/review/`
|
|
129
244
|
- `changes/<id>/evidence/`
|
|
245
|
+
- 若启用了 autonomy helper:
|
|
246
|
+
- 临时状态允许写入 `.agentdocs/tmp/opencode-autonomy/`
|
|
247
|
+
- 最终结论仍必须收敛到 `changes/<id>/...` 或 `.agentdocs/tmp/review/...`
|
|
130
248
|
|
|
131
249
|
## 非目标
|
|
132
250
|
|
|
133
251
|
- 不由 `aiws` 接管 `.opencode/oh-my-opencode.json` 的完整配置。
|
|
134
252
|
- 不由 `aiws` 覆盖 oMo 的 hooks、session recovery、compaction 或 agent harness。
|
|
135
253
|
- 不要求 skill 一定“自动调起” oMo 的全部 agent;只要求写清优先顺序与回退策略。
|
|
254
|
+
- 不把 tmux pane/session orchestration 升格为跨工具核心真值。
|
|
@@ -82,6 +82,53 @@ aiws opencode status .
|
|
|
82
82
|
- skill 文案明确进入 fallback,而不是宣称 `aiws` 自己接管调度
|
|
83
83
|
- 产物仍统一落盘到 `changes/<id>/analysis/`、`patches/`、`review/`、`evidence/`
|
|
84
84
|
|
|
85
|
+
## 场景 E:自主协作实验层
|
|
86
|
+
|
|
87
|
+
1. 在项目内启用:
|
|
88
|
+
```bash
|
|
89
|
+
cp .opencode/oh-my-opencode.json.example .opencode/oh-my-opencode.json
|
|
90
|
+
test -f .claude/settings.json.example
|
|
91
|
+
test -f .opencode/helpers/approval-whitelist-check.sh
|
|
92
|
+
test -f .opencode/helpers/approval-whitelist-run.sh
|
|
93
|
+
test -f .opencode/helpers/approval-whitelist-watchdog.sh
|
|
94
|
+
test -f .opencode/helpers/tmux-swarm-scan.sh
|
|
95
|
+
test -f .opencode/helpers/tmux-swarm-rescue.sh
|
|
96
|
+
```
|
|
97
|
+
2. 运行:
|
|
98
|
+
```bash
|
|
99
|
+
aiws opencode status .
|
|
100
|
+
aiws opencode auto . --once
|
|
101
|
+
aiws opencode supervise . --once
|
|
102
|
+
```
|
|
103
|
+
3. 预期:
|
|
104
|
+
- 输出 `background_tasks:`、`auto_resume:`、`claude_hooks_example:`、`tmux_helpers:`
|
|
105
|
+
- 若示例配置完整:输出 `planner-sisyphus.prompt_append: configured`
|
|
106
|
+
- 输出 `approval_whitelist:` 与 `host_permission_mode: manual-only`
|
|
107
|
+
- `aiws opencode auto . --once` 会先检查是否需要 `aiws update .`,再在条件满足时输出 watchdog bootstrap 结果
|
|
108
|
+
- `aiws opencode supervise . --once` 会输出 tmux session / watchdog window 信息,且不会宣称自动批准 host permission
|
|
109
|
+
4. helper 验证:
|
|
110
|
+
```bash
|
|
111
|
+
bash .opencode/helpers/approval-whitelist-check.sh . --kind read --command "rg approval_whitelist packages/spec"
|
|
112
|
+
bash .opencode/helpers/approval-whitelist-run.sh . --kind read --command "cat .opencode/oh-my-opencode.json"
|
|
113
|
+
printf '%s\n' '{"id":"read-config","kind":"read","command":"cat .opencode/oh-my-opencode.json"}' >> .agentdocs/tmp/opencode-autonomy/approval-watchdog-queue.jsonl
|
|
114
|
+
bash .opencode/helpers/approval-whitelist-watchdog.sh . --once
|
|
115
|
+
```
|
|
116
|
+
5. 预期:
|
|
117
|
+
- 两次都输出 JSON,包含 `decision=allow` 或等价字段
|
|
118
|
+
- `approval-whitelist-run.sh` 额外包含 `executed=true`
|
|
119
|
+
- watchdog 会更新 `approval-watchdog-state.json` 与 `approval-watchdog-results.jsonl`
|
|
120
|
+
- `.agentdocs/tmp/opencode-autonomy/approval-whitelist-last.json`、`approval-whitelist.log`、`approval-whitelist-exec-last.json` 与 `approval-whitelist-exec.log` 被更新
|
|
121
|
+
6. 在 OpenCode 中执行:
|
|
122
|
+
- `/ws-auto`
|
|
123
|
+
- `/ws-autonomy`
|
|
124
|
+
7. 预期:
|
|
125
|
+
- `/ws-auto` 会先做 bootstrap,并把 update/watchdog 结果收敛成 `Auto Bootstrap:` / `Watchdog:`
|
|
126
|
+
- 输出 `Execution Mode:`
|
|
127
|
+
- 输出 `Completion Contract:`
|
|
128
|
+
- 输出 `Retry Contract:` / `Rescue Policy:`
|
|
129
|
+
- 不宣称能自动批准宿主 sandbox / 提权弹窗
|
|
130
|
+
- 明确这是实验层,不接管 runtime controller
|
|
131
|
+
|
|
85
132
|
## 记录建议
|
|
86
133
|
|
|
87
134
|
- 将本次人工验收结论落盘到:
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# OpenCode Subagent-First Execution
|
|
2
|
+
|
|
3
|
+
<!-- Managed by aiws. Do not hand edit. -->
|
|
4
|
+
|
|
5
|
+
**规范 ID**: `opencode-subagent-first`
|
|
6
|
+
**版本**: 1
|
|
7
|
+
|
|
8
|
+
## 目的
|
|
9
|
+
|
|
10
|
+
定义 OpenCode 环境中 subagent-first 的默认执行纪律,将主 session 的角色从"实现者"转变为"协调者/集成者",实现更接近 Trellis/Superpowers 执行纪律的轻量级持续循环。
|
|
11
|
+
|
|
12
|
+
## 核心原则
|
|
13
|
+
|
|
14
|
+
1. **Subagent-first**: 实现工作默认由 `aiws-worker` subagent 完成,主 session 负责 context curation、dispatch、review convergence 与 escape hatch 记录。
|
|
15
|
+
2. **Review loop**: 每个 worker dispatch 后至少经过一次审查(`aiws-reviewer` 或 `ws-quality-review`),审查未通过则修复后再审查。
|
|
16
|
+
3. **Continuous**: 主 session 不主动中断工作流去问"下一步做什么"——除非遇到 BLOCKED/NEEDS_CONTEXT 或所有任务完成。
|
|
17
|
+
4. **Explicit override**: 允许用户显式声明 inline 模式,但必须记录理由。
|
|
18
|
+
|
|
19
|
+
## 执行循环(Continuous Loop)
|
|
20
|
+
|
|
21
|
+
### 标准循环
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
主 session 策划上下文(JSONL curation)
|
|
25
|
+
→ dispatch aiws-worker(带 curated context)
|
|
26
|
+
→ worker 返回 DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED
|
|
27
|
+
→ 若 DONE → dispatch aiws-reviewer(审查实现)
|
|
28
|
+
→ 若 reviewer pass → 收敛 evidence,准备 ws-finish
|
|
29
|
+
→ 若 reviewer fail → 返回 worker 修复(最多 3 次循环)
|
|
30
|
+
→ 若 DONE_WITH_CONCERNS → 先 ws-quality-review 评估残余风险
|
|
31
|
+
→ 若 NEEDS_CONTEXT → 补充上下文重试(最多 2 次)
|
|
32
|
+
→ 若 BLOCKED → 停止,输出 blocker 详情
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Worker dispatch
|
|
36
|
+
|
|
37
|
+
Worker dispatch 必须包含:
|
|
38
|
+
- curated JSONL context file (`changes/<id>/analysis/worker-context.jsonl`)
|
|
39
|
+
- 明确的任务描述与 scope 边界
|
|
40
|
+
- 期望的报告格式(四状态 + 文件清单 + 验证命令)
|
|
41
|
+
|
|
42
|
+
Worker 报告格式:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
**Status:** DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
46
|
+
**Completed:** 实现内容摘要
|
|
47
|
+
**Files Changed:** 文件清单
|
|
48
|
+
**Verification:** 运行的命令 + 结果
|
|
49
|
+
**Artifacts:** changes/<id>/analysis|patches|evidence 下的路径
|
|
50
|
+
**Concerns:** 疑虑、未完成项(若有)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Reviewer dispatch
|
|
54
|
+
|
|
55
|
+
Reviewer dispatch 必须包含:
|
|
56
|
+
- worker 产出的 patches/evidence 路径
|
|
57
|
+
- 审查范围(spec review、quality review 或两者)
|
|
58
|
+
- 期望的报告格式
|
|
59
|
+
|
|
60
|
+
Reviewer 接收的是**工作产物**(patch、evidence、analysis),不是主 session 的会话历史。
|
|
61
|
+
|
|
62
|
+
### 停止条件
|
|
63
|
+
|
|
64
|
+
连续执行在以下条件停止:
|
|
65
|
+
- **BLOCKED**: 治理规则阻断(缺工件、dirty 工作区、validate 失败等)
|
|
66
|
+
- **NEEDS_CONTEXT** 超过 2 次重试上限
|
|
67
|
+
- 验证命令缺失或失败
|
|
68
|
+
- 需要 host permission / manual approval
|
|
69
|
+
- 用户明确要求改变 scope
|
|
70
|
+
- 所有任务完成,evidence 已收敛
|
|
71
|
+
|
|
72
|
+
### Inline Escape Hatch
|
|
73
|
+
|
|
74
|
+
当用户**在当前消息中**显式包含以下短语之一时,主 session 可直接写实现代码:
|
|
75
|
+
- "直接改" / "do it inline" / "你直接改"
|
|
76
|
+
- "别派 sub-agent" / "main session 写就行"
|
|
77
|
+
- "不用 sub-agent" / "no sub-agent"
|
|
78
|
+
|
|
79
|
+
**规则**:
|
|
80
|
+
- 必须由用户**当前**消息触发,不能是"上一条说过"或"上轮说过"
|
|
81
|
+
- 主 session 不得自行推断 inline 模式
|
|
82
|
+
- 使用 inline 后必须落盘 evidence 记录理由
|
|
83
|
+
- 记录到 `changes/<id>/evidence/inline-escape-hatch.md`
|
|
84
|
+
|
|
85
|
+
### 与 Trellis/Superpowers 对比
|
|
86
|
+
|
|
87
|
+
| 特性 | Trellis | Superpowers | aiws (Subagent-First) |
|
|
88
|
+
|------|---------|-------------|----------------------|
|
|
89
|
+
| 默认实现者 | sub-agent (`trellis-implement`) | sub-agent (implementer) | sub-agent (`aiws-worker`) |
|
|
90
|
+
| 默认审查者 | sub-agent (`trellis-check`) | spec-reviewer + quality-reviewer | `aiws-reviewer` |
|
|
91
|
+
| 主 session 角色 | coordinator + commit | coordinator + dispatch | coordinator + convergence |
|
|
92
|
+
| Inline override | 显式短语 | 显式短语 | 显式短语 |
|
|
93
|
+
| 连续执行 | 是(不主动停顿) | 是(不主动停顿) | 是(不主动停顿) |
|
|
94
|
+
| 停止条件 | blocked / NEEDS_CONTEXT / done | blocked / NEEDS_CONTEXT / done | blocked / NEEDS_CONTEXT / done / missing verify |
|
|
95
|
+
|
|
96
|
+
## Context 纪律
|
|
97
|
+
|
|
98
|
+
### JSONL Curated Context
|
|
99
|
+
|
|
100
|
+
每个 worker dispatch 前,主 session 必须为其策划上下文 JSONL 文件:
|
|
101
|
+
|
|
102
|
+
1. **读取合同基线**: 从 `workflow-delegation-contracts.json` 中对应角色的 `contextFiles` 条目
|
|
103
|
+
2. **展开并填充**: 将 `<id>` 替换为实际 change-id,将 glob 模式展开为具体路径
|
|
104
|
+
3. **委托者调整**: 添加任务特定文件,删除不相关条目,调整 priority/sections
|
|
105
|
+
4. **预算检查**: 确保 high+medium ≤ 5 文件,总行数 ≤ 4000
|
|
106
|
+
5. **写入 JSONL**: 写入 `changes/<id>/analysis/<role>-context.jsonl`
|
|
107
|
+
|
|
108
|
+
详见 `workflow-delegation-context-injection.md`。
|
|
109
|
+
|
|
110
|
+
### Reviewer 上下文
|
|
111
|
+
|
|
112
|
+
Reviewer 接收的上下文应该是**工作产物**,不是主 session 的完整历史:
|
|
113
|
+
- worker 产出的 patches
|
|
114
|
+
- 相关 evidence
|
|
115
|
+
- 对应的分析文件
|
|
116
|
+
- 委托合同与 scope 边界
|
|
117
|
+
|
|
118
|
+
### 主 session 不需要的上下文
|
|
119
|
+
|
|
120
|
+
主 session 不应在 dispatch 时携带的:
|
|
121
|
+
- 子 agent 的工作细节(这是子 agent 自己的事)
|
|
122
|
+
- 完整的会话历史
|
|
123
|
+
- 不相关的 analysis/evidence 文件
|
|
124
|
+
|
|
125
|
+
## 子 agent 四状态协议
|
|
126
|
+
|
|
127
|
+
| 状态 | 含义 | 后续动作 |
|
|
128
|
+
|------|------|----------|
|
|
129
|
+
| `DONE` | 任务完成 + 验证通过 + 证据路径有效 | 进入 review;若已过 review 则准备 ws-finish |
|
|
130
|
+
| `DONE_WITH_CONCERNS` | 实现完成但质量有残余风险 | 先 ws-quality-review,根据结果决定是否阻断 |
|
|
131
|
+
| `NEEDS_CONTEXT` | 缺关键上下文 | 主 agent 补充后重试(最多 2 次);仍失败则回退单 agent |
|
|
132
|
+
| `BLOCKED` | 治理规则阻断 | 停止委托流程;主 agent 解 blocker 后重试 |
|
|
133
|
+
|
|
134
|
+
## Worker → Reviewer → Fix 循环
|
|
135
|
+
|
|
136
|
+
```text
|
|
137
|
+
[dispatch aiws-worker]
|
|
138
|
+
↓
|
|
139
|
+
worker 返回 DONE ──────────────────→ [dispatch aiws-reviewer]
|
|
140
|
+
worker 返回 DONE_WITH_CONCERNS ────→ [ws-quality-review] ─→ pass? → [dispatch aiws-reviewer]
|
|
141
|
+
fail? → [dispatch aiws-worker 修复]
|
|
142
|
+
worker 返回 NEEDS_CONTEXT ────────→ 补 context → [dispatch aiws-worker](最多 2 次)
|
|
143
|
+
worker 返回 BLOCKED ──────────────→ [stop: 输出 blocker]
|
|
144
|
+
↓
|
|
145
|
+
[aiws-reviewer returns]
|
|
146
|
+
├─ pass → [主 session 收敛 evidence → ws-finish]
|
|
147
|
+
├─ fail with findings → [aiws-worker 修复](最多 3 次循环)
|
|
148
|
+
└─ BLOCKED/NEEDS_CONTEXT → [stop: 输出详情]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Review 未通过的修复
|
|
152
|
+
|
|
153
|
+
当 reviewer 返回 fail 时,返回 worker 修复:
|
|
154
|
+
- 将 reviewer findings 作为 worker 的额外上下文
|
|
155
|
+
- worker 修复后,再次 dispatch reviewer
|
|
156
|
+
- 最多 3 次循环;超过后升级给用户决策
|
|
157
|
+
|
|
158
|
+
## 主 Session 职责清单
|
|
159
|
+
|
|
160
|
+
### Dispatch 前
|
|
161
|
+
- [ ] 已创建/确认 `changes/<id>/analysis/worker-context.jsonl`
|
|
162
|
+
- [ ] Worker 的 readScope / writeScope / artifactTargets 已声明
|
|
163
|
+
- [ ] 上下文预算检查通过
|
|
164
|
+
- [ ] Worker prompt 包含期望的报告格式
|
|
165
|
+
|
|
166
|
+
### Dispatch 后
|
|
167
|
+
- [ ] 解析 worker 返回的 Status 行
|
|
168
|
+
- [ ] 非 DONE → 按四状态协议处理
|
|
169
|
+
- [ ] DONE → dispatch reviewer
|
|
170
|
+
|
|
171
|
+
### Review 后
|
|
172
|
+
- [ ] 收敛 reviewer findings 到 `changes/<id>/review/`
|
|
173
|
+
- [ ] 决定是否接受、返回修复或升级
|
|
174
|
+
- [ ] 最终收敛 evidence 到 `changes/<id>/evidence/`
|
|
175
|
+
|
|
176
|
+
## 引用关系
|
|
177
|
+
|
|
178
|
+
本规范被以下文件引用(通过文件名或规范 ID):
|
|
179
|
+
- `ws-dev/SKILL.md` — 默认执行策略
|
|
180
|
+
- `ws-delegate/SKILL.md` — 委托循环参考
|
|
181
|
+
- `using-aiws/SKILL.md` — 路由决策参考
|
|
182
|
+
- `workflow-delegation-contracts.md` — 角色/scope/artifact 契约
|
|
183
|
+
- `workflow-delegation-context-injection.md` — JSONL curation 规范
|
|
184
|
+
|
|
185
|
+
## 更新历史
|
|
186
|
+
|
|
187
|
+
- v1 (2026-05-16): 初版。基于 trellis workflow-state 纪律 + superpowers subagent-driven-development 模式。
|