@zhushanwen/pi-cw-tool 0.4.3 → 0.5.0
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 +10 -36
- package/package.json +5 -9
- package/skills/pi-cw/SKILL.md +33 -71
- package/src/__tests__/cw-tool.test.ts +239 -639
- package/src/cw-runner.ts +79 -292
- package/src/cw-spawn.ts +3 -3
- package/src/index.ts +56 -147
- package/agents/dev-agent.md +0 -92
- package/agents/merge-agent.md +0 -55
- package/agents/planning-agent.md +0 -133
- package/agents/review-agent.md +0 -95
- package/agents/wave-agent.md +0 -115
- package/skills/pi-cw/design-v4.md +0 -226
- package/src/__tests__/detect-repo-workspace.test.ts +0 -163
- package/src/__tests__/workspace-gate.test.ts +0 -261
package/README.md
CHANGED
|
@@ -1,47 +1,21 @@
|
|
|
1
1
|
# @zhushanwen/pi-cw-tool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
cw 2.0 的 pi extension 薄封装(Phase 2-B 适配,见 xyz-agent 仓 `docs/todo/pi-cw-cw2-adaptation.md`):
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- **cw_query 工具**:只读查询透传(`status` / `frontier` / `tree` / `report`,参数面 `--unit` / `--root` / `--json` 按 cw 2.0 修正)。写命令(create / evidence submit / review submit / verify / run)不在工具面——经 bash 调 `cw`,用法以 cw-cli skill 为 SSOT。
|
|
6
|
+
- **pi-cw skill**:runner 实操指南(多 unit 任务 `cw run --spawn pi` 的后台运行、监控、escalation 处置、收尾回流)。
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
1.x 形态(cw_planning / cw_wave / cw_dev / cw_review 四个角色受限工具 + planning/wave/dev/review/merge 五个编排 agent + 四层递归编排 skill)已随 cw 1.x 命令面退役:cw 2.0 把编排智能收进引擎(runner + 账本 gate),「层主不能自审」由账本层硬保证,不再需要工具白名单承载。
|
|
8
9
|
|
|
9
|
-
##
|
|
10
|
+
## 环境要求
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|---|---|---|
|
|
13
|
-
| `cw_planning` | epic/feature/slice 层主 | design, execute, replan, retrospect, closeout + 只读(status, handoff, list, tree, frontier) |
|
|
14
|
-
| `cw_wave` | wave 层主 | design, replan, retrospect, closeout + 只读(**无 execute/test/design-review/exec-review**) |
|
|
15
|
-
| `cw_dev` | wave 内 dev | execute, test + 只读(status, handoff) |
|
|
16
|
-
| `cw_review` | 审 design/exec | design-review, exec-review + 只读(status) |
|
|
17
|
-
|
|
18
|
-
层主的 cw-tool 不含审查命令 → 物理上调不了审查 → 必须派独立 review-agent。
|
|
19
|
-
|
|
20
|
-
## 参数
|
|
21
|
-
|
|
22
|
-
所有工具共享参数 schema:
|
|
23
|
-
|
|
24
|
-
- `action`(枚举,受限于此工具白名单)—— 第一道约束(LLM 输入)
|
|
25
|
-
- `unitId`(必传)—— `cw --unitId`
|
|
26
|
-
- `input?`(JSON 内容字符串)—— 经 stdin 传给 cw(`--input -`)
|
|
27
|
-
- `inputFile?`(文件路径)—— `--input <path>`(与 input 互斥)
|
|
28
|
-
- `commitHash?`(execute 关联 commit)—— `--commitHash`
|
|
29
|
-
|
|
30
|
-
## 返回
|
|
31
|
-
|
|
32
|
-
返回 `details.ok` 区分成功/失败(不抛异常):
|
|
33
|
-
|
|
34
|
-
- 成功:`{ ok:true, action, unitId, stdout, parsed, data? }`,`content.text` 为 cw 原始 stdout
|
|
35
|
-
- 失败(白名单拒绝 / 非零退出 / stderr 非空 / spawn 异常):`{ ok:false, action, unitId, error }`
|
|
36
|
-
|
|
37
|
-
## cw 路径解析
|
|
38
|
-
|
|
39
|
-
通过 `process.env.PATH` 解析(spawn 裸命令名 `cw`),不硬编码绝对路径。
|
|
12
|
+
全局安装 `@zhushanwen/coding-workflow@2.x`(PATH 上有 `cw`)。账本按 cwd 定位(`~/.cw/<encoded-cwd>/`),工具在哪个目录调用就查哪个项目的状态。
|
|
40
13
|
|
|
41
14
|
## 开发
|
|
42
15
|
|
|
43
16
|
```bash
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
npx vitest run # 测试(mock spawn,不真调 cw)
|
|
17
|
+
pnpm typecheck # tsc --noEmit(含 test 配置)
|
|
18
|
+
pnpm test # vitest run
|
|
47
19
|
```
|
|
20
|
+
|
|
21
|
+
变更经 xyz-agent 仓的 extensions 流程校验(`pnpm extensions:typecheck && pnpm extensions:lint && pnpm extensions:test`)。
|
package/package.json
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhushanwen/pi-cw-tool",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Pi extension
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Pi extension for cw 2.0: a read-only cw_query tool (status / frontier / tree / report passthrough) + the pi-cw skill (runner practical guide for multi-unit tasks: background run, monitoring, escalation, merge back).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
7
7
|
"pi": {
|
|
8
8
|
"extensions": [
|
|
9
9
|
"./index.ts"
|
|
10
10
|
],
|
|
11
|
-
"agents": [
|
|
12
|
-
"./agents"
|
|
13
|
-
],
|
|
14
11
|
"skills": [
|
|
15
12
|
"./skills"
|
|
16
13
|
]
|
|
@@ -19,15 +16,13 @@
|
|
|
19
16
|
"pi-package",
|
|
20
17
|
"cw",
|
|
21
18
|
"coding-workflow",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"role-restriction"
|
|
19
|
+
"runner",
|
|
20
|
+
"readonly-query"
|
|
25
21
|
],
|
|
26
22
|
"license": "MIT",
|
|
27
23
|
"files": [
|
|
28
24
|
"index.ts",
|
|
29
25
|
"src/",
|
|
30
|
-
"agents/",
|
|
31
26
|
"skills/"
|
|
32
27
|
],
|
|
33
28
|
"peerDependencies": {
|
|
@@ -44,6 +39,7 @@
|
|
|
44
39
|
}
|
|
45
40
|
},
|
|
46
41
|
"devDependencies": {
|
|
42
|
+
"@vitest/coverage-v8": "^4.1.9",
|
|
47
43
|
"vitest": "^4.1.8"
|
|
48
44
|
},
|
|
49
45
|
"scripts": {
|
package/skills/pi-cw/SKILL.md
CHANGED
|
@@ -1,106 +1,68 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pi-cw
|
|
3
|
-
description: "cw
|
|
3
|
+
description: "cw 2.0 runner 的 pi 环境实操指南:大型多 agent 并行编码任务用 cw run --spawn pi 全自动调度(designer/developer/独立 reviewer + 机器验证),本 skill 教后台运行、监控、escalation 处置与收尾回流。触发词:递归编排、多 agent 并行开发、大任务拆解、大树拆分。配套 @zhushanwen/pi-cw-tool(cw_query 只读查询工具)。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# pi-cw
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
cw 2.0 runner 的 pi 环境实操指南(薄封装)。多 agent 并行开发不再需要主 agent 手动编排——`cw run --spawn pi` 一条命令调度到根 unit closed:runner 按 frontier 并行 spawn 无头 pi 进程(designer 写 spec / developer 实现 / 独立 reviewer 审查),每 unit 独立 worktree,机器验证裁决完成。
|
|
9
9
|
|
|
10
|
-
>
|
|
10
|
+
> **cw 2.0 适配说明**:本 skill 的 1.x 形态(epic→feature→slice→wave 四层递归树 + planning/wave/dev/review/merge 5 个编排 agent + 4 个角色受限 cw_* 工具)已退役——cw 2.0 把编排智能收进引擎,「层主不能自审」由账本层硬保证(review submit 必须 `--role reviewer`)。适配设计见 xyz-agent 仓 `docs/todo/pi-cw-cw2-adaptation.md`。
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
核心判据:**任务需要多 subagent 并行推进 + 上下文隔离**(不是树深——一棵 epic 树也能单 agent 线性走,见 cw-cli)。满足以下场景之一才用 pi-cw:
|
|
15
|
-
- 多个 wave 要 worktree 隔离并行开发
|
|
16
|
-
- 多个 slice/feature 子树要并行展开
|
|
17
|
-
- 单 agent 线性走完整棵树会撑爆上下文(设计 + 实现 + 审查 + 合并全栈),需按层隔离上下文
|
|
18
|
-
|
|
19
|
-
> 单 agent 模式或小任务(改 typo / 单文件 / 明确小 bug)走 `cw-cli` skill,不必建树。
|
|
20
|
-
|
|
21
|
-
## 何时不该用
|
|
22
|
-
|
|
23
|
-
- 单文件小改、明确的小 bug:直接 edit,或派单个 worker subagent;或走 `cw-cli` skill 单 agent 模式
|
|
24
|
-
- 线性任务、无需多 agent 并行:走 cw 单层 wave 即可,不必建树
|
|
25
|
-
- 能单 agent 线性走完的任务(哪怕要建 epic 树):走 `cw-cli` skill 单 agent 模式,不必上递归编排
|
|
26
|
-
- 纯分析 / 调研 / 设计文档:不写代码不该进 cw 编排
|
|
12
|
+
**分工边界**:cw 命令面(create / evidence / review / verify 的参数与 gate 规则)、模式分流表、手动流程、spec 格式——以 **cw-cli skill 为唯一权威源**(SSOT),本 skill 不重复,只教 pi 环境的 runner 实操差异。
|
|
27
13
|
|
|
28
|
-
##
|
|
29
|
-
|
|
30
|
-
本 skill 与 5 个编排 agent(planning / wave / dev / review / merge)打包在 `@zhushanwen/pi-cw-tool` 内。cw-tool 同时提供 cw_* 工具(cw_planning / cw_wave / cw_dev / cw_review)。安装确认分两层,不能互相反推:
|
|
31
|
-
|
|
32
|
-
- **skill + 工具层**:能读到本 skill 且 cw_* 工具可用,说明 cw-tool 的 skill + 工具已加载。
|
|
33
|
-
- **agent 层**:5 个编排 agent 走独立发现通路(resource-discovery),**不能由「skill 可读」反推 agent 已发现**。编排 agent 必须通过 npm 把 cw-tool 安装到扫描目录(`<agentDir>/npm/` 或 `<agentDir>/extensions/`)才被发现。
|
|
34
|
-
|
|
35
|
-
⚠️ **dev-link 限制**:dev-link(`XYZ_EXTENSION_PATHS`)只发现 skill + 工具,**不发现 agent**。用 dev-link live-edit 测 cw-tool 时,skill 可读、cw_* 工具可用,但 step 2 `subagent agent="planning-agent"` 会因 agent 不可发现而失败——需把 cw-tool npm 安装到扫描目录(或把 agent 软链进 `<agentDir>/extensions/`)才可编排。
|
|
14
|
+
## 何时用
|
|
36
15
|
|
|
37
|
-
|
|
16
|
+
- 多 unit 编码任务(≥2 unit 或需并行推进)→ 本 skill,走 runner
|
|
17
|
+
- 单 unit 任务 / 调试验收命令 / 学习流程 → cw-cli skill 的手动路径
|
|
18
|
+
- 纯分析、调研、设计文档(无代码产出)→ 不进 cw
|
|
38
19
|
|
|
39
20
|
## 流程
|
|
40
21
|
|
|
41
|
-
### 1.
|
|
22
|
+
### 1. 建 root unit + 任务书
|
|
42
23
|
|
|
43
24
|
```bash
|
|
44
|
-
cw create
|
|
25
|
+
cw create --id <slug> --brief brief.md
|
|
45
26
|
```
|
|
46
27
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
拿到根 unit 的 unitId(下文记作 `<根Id>`)。
|
|
28
|
+
任务书(brief)内容原样传给 designer。写拆分建议(哪些子 unit、各自验收方向)能显著减少 spec 返工;cw 2.0 树深度上限 2 层(根 + 叶),需要更深的先人工降层。
|
|
50
29
|
|
|
51
|
-
### 2.
|
|
30
|
+
### 2. 后台跑 runner
|
|
52
31
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
subagent(action="start", agent="planning-agent", slug="<根-slug>-planning", fork=false,
|
|
57
|
-
task="<背景>这是 cw <根层> <根Id> 的层主 agent,目标:<原 objective>。这是递归编排,你会自递归派下层 planning-agent(<根层> 是 epic 派 feature,是 feature 派 slice,是 slice 派 wave)。<目标>先调 cw handoff --unitId <根Id> 拿上下文与 guidance,按 guidance 的派发指导自递归展开并合并子树。<验收>cw status --unitId <根Id> 显示该 <根层> 子树全部 closed。")
|
|
58
|
-
# 不传 model 参数——默认继承主 agent 模型,递归传给所有下层(见「模型派发」)。
|
|
59
|
-
# 用户特别指定时才传 model="provider/modelId",单个 subagent 生效或作为全树根模型。
|
|
32
|
+
```bash
|
|
33
|
+
cw run --root <slug> --spawn pi
|
|
60
34
|
```
|
|
61
35
|
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
- **验收**:`cw status --unitId <根Id>` 子树全 `closed`(可查的检查点,禁止"完成""实现该功能"这类不可证伪描述)
|
|
66
|
-
|
|
67
|
-
派发后主 agent 结束当前 turn,进空闲态(session 保活)。
|
|
68
|
-
|
|
69
|
-
### 3. 等 steer 唤醒
|
|
36
|
+
- `cw run` 前台阻塞直至收束,多 unit 任务常以小时计——**用 bash-async 的 background 模式跑**,不要同步等待
|
|
37
|
+
- 并行上限 `--max-concurrency`(默认 3);reviewer 模型 `--reviewer-model <m>` 或环境变量 `CW_REVIEWER_MODEL`
|
|
38
|
+
- developer/designer 模型走环境变量 `CW_AGENT_MODEL`(缺省 `xiaomi-token-plan-cn/mimo-v2.5-pro`)——**不继承当前主 agent 的模型**,与 pi subagent 的模型继承机制无关
|
|
70
39
|
|
|
71
|
-
|
|
40
|
+
### 3. 监控
|
|
72
41
|
|
|
73
|
-
|
|
42
|
+
期间定期用 `cw_query` 工具(本包提供)或 bash 调 `cw` 观察:
|
|
74
43
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
44
|
+
- `cw_query action="status"`:各 unit 状态概览;`json=true` 拿结构化投影
|
|
45
|
+
- `cw_query action="frontier"`:就绪集合与各维度阻塞情况
|
|
46
|
+
- `cw_query action="tree"`:分解树形态;`action="report" rootId=<slug>`:证据链汇总
|
|
47
|
+
- escalation 走 stderr——后台形态把 stderr 落盘并定期检查
|
|
79
48
|
|
|
80
|
-
|
|
81
|
-
- 有 `active` / `blocked` -> planning-agent 还在跑,继续等下一次 steer 唤醒
|
|
82
|
-
- 长时间无唤醒(疑似 session 失活) -> 查 `cw status`,若 frontier 有未完成 unit 但无 active agent,按 unitId 重派对应层 planning-agent 续跑(cw 状态持久,不丢)
|
|
49
|
+
### 4. escalation 处置
|
|
83
50
|
|
|
84
|
-
|
|
51
|
+
死锁形态 runner 不自动重试,exit 1 收束并在 stderr/转人工清单给出处置指引(阈值与处置表见 cw-cli skill「转人工出口」)。人工处置完成后**重跑 `cw run --root <slug> --spawn pi` 从投影续接**,已完成进展不丢失;Ctrl-C 中断后重跑同理。
|
|
85
52
|
|
|
86
|
-
|
|
53
|
+
### 5. 收尾
|
|
87
54
|
|
|
88
|
-
|
|
55
|
+
根 unit closed 后 runner 输出 worktree 回收清单与 merge 回流指引——按清单把各 unit worktree 的分支回流到 root 分支并清理 worktree。汇报用户以 `cw status` / `cw report` 为准,不信 agent 自报。
|
|
89
56
|
|
|
90
|
-
|
|
91
|
-
- **靠 cw 查进度,不信自报**:agent 汇报"我做完了"不等于 cw 状态 closed。以 `cw status` / `cw frontier` 为唯一真相。
|
|
92
|
-
- **worktree 隔离**:wave 层用 `worktree: true` 派出(各 wave 独立工作目录,并行不冲突;worktree 与 fork 正交,fork 默认 false);主 agent 派的根层 planning-agent 不需 worktree(它只编排不写码)。worktree 的合并与清理由 slice 层 planning-agent 派 chain workflow(merge-agent)处理,细节见 planning-agent 模板。
|
|
93
|
-
- **失败恢复靠 L0-L3**:cw gate fail / 审查 must-fix / 方案缺陷 / 父层拆错,各有恢复路径(L0 就地改重审 / L1 cw replan / L2 父 replan 级联 / L3 上报人),定义在 planning-agent 模板与 cw guidance,本 skill 不重复。
|
|
57
|
+
## cw_query 工具(本包提供)
|
|
94
58
|
|
|
95
|
-
|
|
59
|
+
只读查询的结构化入口(参数面见工具 description;写命令经 bash 调 `cw`)。适合监控轮询与结果核对;一次性探索用 bash 直接调 cw 亦可。
|
|
96
60
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- **全树同模型**:用户在主 agent 切换模型,或根派发(第一个 planning-agent)时显式传一次 `model="provider/modelId"`,下层全部自动继承。模型在每次派发瞬间固化,中途切换只影响后续派发。
|
|
100
|
-
- **单点覆盖**:用户特别指定某 subagent 用特定模型时,只在该次派发传 `model` 参数。指定但模型不存在 / 鉴权未配置会**抛错不静默降级**(错误信息列出可用模型),不会出现「以为用了 X 实际用 Y」。
|
|
101
|
-
- **cw.config.json 不配置 model**:cw 引擎只读 `testRunner`,不读 model 字段;`perLayer.model` 放进去是无人消费的死字段。
|
|
61
|
+
## 关键约束
|
|
102
62
|
|
|
103
|
-
|
|
63
|
+
- **不手动编排替代 runner** [MANDATORY]:多 unit 任务禁止主 agent 手动逐 unit 派 subagent——角色分工、worktree 隔离、集成 merge、死锁转人工全是 runner 内建机制,手动编排等于全部放弃。
|
|
64
|
+
- **账本是唯一真相**:unit 状态以 `cw status` / `cw report` 为准。
|
|
65
|
+
- **manual 型验收在 runner 下免机器验证**(自动并入覆盖,无强制人工点)——需要强制人工验收(如 GUI 检查)时,声明 e2e 级 + command 用「检查人工勾选文件」的 gate 脚本,把人工动作变成机器可判的验收前置。
|
|
104
66
|
|
|
105
67
|
## 标记说明
|
|
106
68
|
|