@house365/comate 0.10.2 → 1.0.2-next.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/LICENSE +21 -21
- package/README.md +104 -64
- package/bin/cli.mjs +197 -190
- package/bin/doctor.mjs +29 -41
- package/bin/init-run.mjs +310 -368
- package/bin/init.mjs +53 -71
- package/bin/postinstall.mjs +56 -56
- package/docs/CHANGELOG-fix-simplification.md +145 -0
- package/docs/COMATE_BETA.md +90 -0
- package/docs/COMATE_MANUAL.md +239 -665
- package/docs/superpowers/plans/2026-10-14-review-fixes.md +48 -0
- package/docs/superpowers/plans/2026-10-14-workflow-quality.md +48 -0
- package/package.json +54 -55
- package/skills/comate/SKILL.md +42 -325
- package/skills/comate/reference/archive.md +50 -0
- package/skills/comate/reference/build.md +67 -0
- package/skills/comate/reference/fix.md +150 -0
- package/skills/comate/reference/open.md +162 -0
- package/skills/comate/reference/verify.md +123 -0
- package/skills/comate/scaffold/comate/README.md +18 -0
- package/skills/{comate-gate/scaffold/docs → comate/scaffold/comate}/architecture/README.md +5 -6
- package/skills/comate/scaffold/comate/comate/config.json +10 -0
- package/skills/comate/scaffold/comate/knowledge-base/README.md +42 -0
- package/skills/{comate-gate/scaffold/docs → comate/scaffold/comate}/knowledge-base/integrations/_TEMPLATE/README.md +2 -2
- package/skills/{comate-gate/scaffold/docs → comate/scaffold/comate}/knowledge-base/integrations/_TEMPLATE/api-snapshot.md +47 -47
- package/skills/{comate-gate/scaffold/docs → comate/scaffold/comate}/knowledge-base/requirements/_templates/PRD.md +4 -4
- package/skills/comate/scripts/comate.mjs +147 -0
- package/skills/comate/scripts/lib/acceptance.mjs +112 -0
- package/skills/comate/scripts/lib/brief.mjs +50 -0
- package/skills/comate/scripts/lib/checks.mjs +178 -0
- package/skills/comate/scripts/lib/cmd-archive.mjs +152 -0
- package/skills/comate/scripts/lib/cmd-decide.mjs +116 -0
- package/skills/comate/scripts/lib/cmd-init.mjs +75 -0
- package/skills/comate/scripts/lib/cmd-loop.mjs +273 -0
- package/skills/comate/scripts/lib/cmd-open.mjs +161 -0
- package/skills/comate/scripts/lib/cmd-status.mjs +121 -0
- package/skills/comate/scripts/lib/common.mjs +85 -0
- package/skills/comate/scripts/lib/docs.mjs +45 -0
- package/skills/comate/scripts/lib/finish.mjs +108 -0
- package/skills/comate/scripts/lib/git.mjs +112 -0
- package/skills/comate/scripts/lib/md.mjs +85 -0
- package/skills/comate/scripts/lib/next.mjs +217 -0
- package/skills/comate/scripts/lib/paths.mjs +96 -0
- package/skills/comate/scripts/lib/render.mjs +46 -0
- package/skills/comate/scripts/lib/spec.mjs +106 -0
- package/skills/comate/scripts/lib/state.mjs +128 -0
- package/skills/comate/scripts/lib/tasks.mjs +53 -0
- package/skills/comate/scripts/lib/templates.mjs +58 -0
- package/skills/comate/scripts/lib/util.mjs +108 -0
- package/skills/comate-kb-integration/SKILL.md +128 -128
- package/skills/comate-kb-integration/scripts/fetch_rendered_doc.py +84 -84
- package/bin/cleanup-duplicate-superpowers.mjs +0 -119
- package/docs/CLEANUP_SUPERPOWERS.md +0 -128
- package/docs/COMATE_BEGINNER_GUIDE.md +0 -188
- package/docs/COMATE_INIT_DIRECTORY_GUIDE.md +0 -201
- package/docs/SUPERPOWERS_FIX_SUMMARY.md +0 -114
- package/skills/comate/reference/decision-points.md +0 -103
- package/skills/comate/reference/dirty-worktree.md +0 -58
- package/skills/comate/reference/prerequisites.md +0 -89
- package/skills/comate/scripts/comate-lib.sh +0 -559
- package/skills/comate/scripts/comate.sh +0 -2147
- package/skills/comate/tests/comate.bats +0 -1019
- package/skills/comate/tests/run.sh +0 -101
- package/skills/comate-archive/SKILL.md +0 -63
- package/skills/comate-build/SKILL.md +0 -278
- package/skills/comate-design/SKILL.md +0 -178
- package/skills/comate-fix/SKILL.md +0 -195
- package/skills/comate-gate/SKILL.md +0 -316
- package/skills/comate-gate/scaffold/docs/README.md +0 -36
- package/skills/comate-gate/scaffold/docs/knowledge-base/README.md +0 -47
- package/skills/comate-grill/SKILL.md +0 -185
- package/skills/comate-open/SKILL.md +0 -230
- package/skills/comate-verify/SKILL.md +0 -212
- /package/skills/{comate-gate/scaffold/docs → comate/scaffold/comate}/knowledge-base/integrations/README.md +0 -0
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Jian Liang
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jian Liang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -4,53 +4,72 @@
|
|
|
4
4
|
|
|
5
5
|
# comate
|
|
6
6
|
|
|
7
|
-
**SDD
|
|
7
|
+
**SDD(规约驱动开发)** 的 AI 开发编排器:每个变更先写规约、确认后再实现,实现由独立 verifier 逐项验收,通过后归档进主规格。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
1.0 只有一个 `/comate` skill 和一个零依赖的 Node 状态机,流程由脚本输出的 next(下一步指令)驱动。
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 流程
|
|
12
12
|
|
|
13
13
|
```
|
|
14
|
-
[
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
/comate ── status ──┬─ 无 change ── new <name> [--mode full|fix] [--source <PRD>]
|
|
15
|
+
└─ 有 change ── 按 next 继续
|
|
16
|
+
|
|
17
|
+
open 澄清需求 → brief.md + specs/<能力>/spec.md → 脚本抽取验收项 A1…An → 【停①】用户确认
|
|
18
|
+
build 按 brief/spec 实现并提交 → handoff(冻结候选 commit,脚本跑检查命令)
|
|
19
|
+
verify 独立只读 verifier 逐项判定 passed / failed / blocked;失败自动回 build 修复
|
|
20
|
+
全部通过 →【停②】一次问完「接受结果 + 收尾方式」
|
|
21
|
+
archive 完整目标 spec 写入主规格 → change 移入 archive/ → 提交 → keep / merge / push / pr
|
|
17
22
|
```
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
工具 skill:
|
|
31
|
-
- `/comate-grill`(决策点穷追式澄清)——对计划/设计/PRD 的模糊点逐个深挖,每问附推荐答案、一次一问,直到歧义清零。comate-gate 在阻断问题多、有依赖链时会自动提供「深度澄清」选项调用它;也可单独 `/comate-grill <话题>` 挑战自己的计划草稿。
|
|
32
|
-
- `/comate-kb-integration`(第三方对接档案生成)——从官方文档 URL 抓取并按 `docs/knowledge-base/integrations/_TEMPLATE/` 规范产出对接档案(`<service-id>/README.md` + `api-snapshot.md`),自动追加根索引一行。是知识库 integrations scaffold 的配套建档工具;遇 JS 动态渲染文档站自动降级 Playwright 无头抓取。
|
|
33
|
-
|
|
34
|
-
**阶段 0(PRD 门禁与拆分)**:需求若来自一份**原始 PRD**,先过 `/comate-gate`——它审阅 PRD 质量、百分制评分、建阻断台账,门禁通过前禁止建任何 change;通过后按依赖/独立性判定把 PRD 拆成 1 或 N 个 change(粒度由用户定),逐个交给 `/comate-open`。门禁状态钉在 PRD 同级 `<PRD>.gate.yaml`,PRD 通过后被改会自动失效需重跑。需求来自对话时无需此阶段,直接从 open 起步。
|
|
24
|
+
**核心机制**
|
|
25
|
+
- **脚本持有状态机**:每条命令返回 next(下一步做什么、执行哪条命令),agent 照做,不自己判断阶段;上下文压缩或新会话后跑 `status` 即可恢复
|
|
26
|
+
- **原则驱动澄清**(本分支优化重点):代码是唯一真相,文档服务于代码;不走机械清单,按实际需求深挖风险视角;full 模式三分类(仓库事实/产品决策/实现选择),fix 模式三个核心问题
|
|
27
|
+
- **两套文档变一套**:需求只有 `brief.md`(为什么、做什么、关键决定、验收示例)和完整目标 `spec.md`;build 通过 handoff 的 `addressed` 交接实现进度
|
|
28
|
+
- **验收是结构化数据**:验收项存在 `state.json`(ID 格式 A1、A2…),verifier 结果必须带回 token、覆盖全部 ID、每项恰好一次;过期结果、漏报、HEAD 变化都会被拒
|
|
29
|
+
- **build ⇄ verify 是循环**:脚本记轮次、失败次数和无进展次数,到上限(最多 10 轮迭代,或连续 3 次失败且零进展)才停下问你
|
|
30
|
+
- **只有两次固定停顿**:① open 确认(目标、范围、非目标、关键决定、全部验收项、change 名称);② 验收全部通过后一次问完「接受结果 + 收尾方式」。merge / push / PR 只在你选择时执行
|
|
31
|
+
- **fix 模式**:`new <name> --mode fix`,边界清楚的小修(bug 修复、小调整),走原则驱动三问(是什么、为什么、怎么验收),免确认直接进 build;边界不清时默认用 full
|
|
32
|
+
- **需求来自 PRD**:`new <name> --source <PRD>` 钉住文件哈希,brief 的「来源覆盖」表逐段登记;PRD 之后被改,后续阶段都会拦截
|
|
33
|
+
- **独立验收**:verifier 是未参与 build 的只读子 agent,可选用 `probe`(临时 worktree 反向验证:故意改错,看测试会不会失败)
|
|
35
34
|
|
|
36
35
|
## 安装
|
|
37
36
|
|
|
38
37
|
```bash
|
|
39
38
|
npm install -g @house365/comate
|
|
39
|
+
cd your-project
|
|
40
|
+
comate init
|
|
40
41
|
```
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
`init` 检查 git,把 comate skill 装到用户级(`~/.agents/skills`,所有项目共用),并在项目根铺出 `comate/`:
|
|
43
44
|
|
|
44
|
-
```bash
|
|
45
|
-
cd your-project
|
|
46
|
-
comate init
|
|
47
45
|
```
|
|
46
|
+
comate/
|
|
47
|
+
├─ comate/
|
|
48
|
+
│ ├─ config.json 检查命令、失败上限、收尾方式、受保护分支
|
|
49
|
+
│ ├─ specs/ 主规格:已归档能力的完整行为
|
|
50
|
+
│ ├─ changes/<name>/ 进行中的变更(state.json、brief.md、specs/、verification.md)
|
|
51
|
+
│ └─ archive/ 已归档的变更
|
|
52
|
+
├─ knowledge-base/ PRD(requirements/)与第三方对接档案(integrations/)
|
|
53
|
+
└─ architecture/ 架构约定
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
可重复执行,已有文件不覆盖。在 `comate/comate/config.json` 配置 `build_command` / `verify_command`;不配置时自动探测 npm / Maven / Cargo / Go,确实没有测试写 `"none"`。
|
|
48
57
|
|
|
49
|
-
|
|
58
|
+
装完在 agent 中输入 `/comate` 开始,`comate doctor` 自检,`comate status` 查看当前项目的 change。
|
|
50
59
|
|
|
51
|
-
|
|
60
|
+
**退出码**:
|
|
61
|
+
- `0` 成功
|
|
62
|
+
- `1` BLOCK(守卫拒绝,但仍输出 `next` 告知如何修复)
|
|
63
|
+
- `2` USAGE(用法错误)
|
|
64
|
+
- `3` ENV(环境缺失)
|
|
65
|
+
- `4` CORRUPT(状态损坏,运行 `doctor`)
|
|
52
66
|
|
|
53
|
-
|
|
67
|
+
## 从 0.x 升级
|
|
68
|
+
|
|
69
|
+
- **进行中的旧 change**:1.0 不自动转换。先用 0.10.x 把手上的 change 做完,再升级。
|
|
70
|
+
- **目录**:`comate init --migrate --dry-run` 列出 `docs/knowledge-base`、`docs/architecture` → `comate/` 的迁移(`git mv` 保留历史),确认后去掉 `--dry-run` 执行。`docs/` 其他内容不动。
|
|
71
|
+
- **主规格**:`comate import-specs --dry-run` 列出 `openspec/specs/<能力>/spec.md` → `comate/comate/specs/` 的复制清单,确认后去掉 `--dry-run` 执行。`openspec/changes/archive/` 历史原样保留、只读。
|
|
72
|
+
- `init` 会清理旧版 skill 目录(comate-gate / spec / build / verify / fix 等,只删 comate 自己的历史名单)。
|
|
54
73
|
|
|
55
74
|
## 更新
|
|
56
75
|
|
|
@@ -59,52 +78,73 @@ npm install -g @house365/comate@latest
|
|
|
59
78
|
cd your-project && comate init
|
|
60
79
|
```
|
|
61
80
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
##
|
|
81
|
+
两步都要跑:npm 只换 CLI,skills 由 `comate init` 铺到 `~/.agents/skills`。
|
|
82
|
+
|
|
83
|
+
## 命令速查
|
|
84
|
+
|
|
85
|
+
所有命令加 `--json` 输出机器可读结果。
|
|
86
|
+
|
|
87
|
+
| 命令 | 说明 | 常用选项 |
|
|
88
|
+
|------|------|----------|
|
|
89
|
+
| `status [<name>]` | 当前位置 + 下一步(只读) | `--json` |
|
|
90
|
+
| `new <name>` | 创建新 change | `--mode full\|fix` `--source <file>` `--base <branch>` |
|
|
91
|
+
| `open <name>` | 校验 brief/spec 并抽取验收项 | `--prepare` `--confirm --expect <v>:<step>` |
|
|
92
|
+
| `rename <old> <new>` | 重命名(仅 open 阶段) | - |
|
|
93
|
+
| `spec <remove\|restore> <name> <capability>` | 登记/取消删除一个主能力 | - |
|
|
94
|
+
| `handoff <name>` | 提交候选实现并跑检查 | `--input <handoff.json> --expect <v>:<step>` `--recheck` |
|
|
95
|
+
| `verify <name>` | 提交验收结果 | `--result <json>` `--error "<原因>"` `--unavailable` |
|
|
96
|
+
| `probe <name>` | 反向验证临时 worktree(改错看测试失败) | `--remove <dir>` |
|
|
97
|
+
| `decide <name>` | 用户决策 | `--accept --finish keep\|merge\|pr\|push` `--revise-implementation` `--revise-requirements` `--resolve` `--upgrade` |
|
|
98
|
+
| `archive <name>` | 归档并执行收尾 | `--dry-run` |
|
|
99
|
+
| `doctor` | 诊断 + 修复状态 | `--repair` |
|
|
100
|
+
| `import-specs` | 从 openspec/specs 导入 | `--dry-run` |
|
|
101
|
+
|
|
102
|
+
**handoff.json 结构**:
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"summary": "本轮改了什么",
|
|
106
|
+
"addressed": ["A1", "A2"], // 已实现的验收项 ID(必须精确匹配 state.json)
|
|
107
|
+
"manual_checks": [], // 无法自动化的验收步骤
|
|
108
|
+
"known_limits": [] // 已知局限
|
|
109
|
+
}
|
|
110
|
+
```
|
|
65
111
|
|
|
66
|
-
|
|
112
|
+
**verify-result.json 结构**:
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"token": "<verifier.token>",
|
|
116
|
+
"candidate": "<commit-sha>",
|
|
117
|
+
"acceptance": [
|
|
118
|
+
{"id": "A1", "result": "passed|failed|blocked", "reason": "证据:实现位置/测试名/手工步骤"}
|
|
119
|
+
],
|
|
120
|
+
"reverse_checks": [], // 反向验证结果(可选)
|
|
121
|
+
"risks": [],
|
|
122
|
+
"summary": ""
|
|
123
|
+
}
|
|
124
|
+
```
|
|
67
125
|
|
|
68
|
-
## Token
|
|
126
|
+
## Token 用量:`comate usage`
|
|
69
127
|
|
|
70
|
-
|
|
128
|
+
查看当前项目的 token 消耗与估算成本(封装 [ccusage](https://github.com/ryoppippi/ccusage)):
|
|
71
129
|
|
|
72
130
|
```bash
|
|
73
|
-
comate usage #
|
|
131
|
+
comate usage # 本项目按会话统计
|
|
74
132
|
comate usage daily # 本项目按天
|
|
75
|
-
comate usage --global # 全部项目
|
|
76
|
-
comate usage --json -s 2026-08-01 # 其余参数原样透传给 ccusage
|
|
133
|
+
comate usage --global # 全部项目
|
|
77
134
|
```
|
|
78
135
|
|
|
79
|
-
默认只统计当前工作目录这一个项目:Claude Code 数据按 `~/.claude/projects/<项目>/` 隔离,Codex 数据按会话记录里的 `cwd` 过滤,两者都不会混入其它项目的用量。加 `--global` 看全量,或用 `comate usage codex ...` 单看某个 agent。
|
|
80
|
-
|
|
81
|
-
> 粒度到项目/会话级;不做 open/design/build 阶段级归因(那需要在状态机打时间戳,属后续增强)。
|
|
82
|
-
|
|
83
136
|
## 目录结构
|
|
84
137
|
|
|
85
138
|
```
|
|
86
139
|
skills/
|
|
87
|
-
comate/
|
|
88
|
-
|
|
89
|
-
reference/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
comate-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
comate-kb-integration/ 第三方对接档案生成工具(知识库配套)
|
|
96
|
-
docs/
|
|
97
|
-
COMATE_BEGINNER_GUIDE.md 面向新手的安装与使用手册
|
|
98
|
-
COMATE_MANUAL.md 完整操作手册
|
|
140
|
+
comate/
|
|
141
|
+
SKILL.md 规则 + next 处理 + 按阶段读取索引
|
|
142
|
+
reference/ open / build / verify / archive / fix
|
|
143
|
+
scripts/comate.mjs 状态机入口(lib/ 下按职责拆分,零依赖)
|
|
144
|
+
scaffold/comate/ comate init 铺到项目的 comate/ 骨架
|
|
145
|
+
comate-kb-integration/ 第三方对接档案生成工具
|
|
146
|
+
bin/ CLI:init / doctor / status / import-specs / update / usage
|
|
147
|
+
test/ node:test 端到端用例
|
|
99
148
|
```
|
|
100
149
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
文档:
|
|
104
|
-
|
|
105
|
-
- [入门操作手册](docs/COMATE_BEGINNER_GUIDE.md):面向第一次使用 comate 的同学,覆盖安装、`init`、目录、PRD、Skill 流程和常见问题。
|
|
106
|
-
- [完整技术手册](docs/COMATE_MANUAL.md):安装前置、命令参考、阶段详解、状态文件字段、决策阻塞点、故障排除。
|
|
107
|
-
|
|
108
|
-
## License
|
|
109
|
-
|
|
110
|
-
[MIT](LICENSE)
|
|
150
|
+
完整说明见 [docs/COMATE_MANUAL.md](docs/COMATE_MANUAL.md)。
|