add-coder 0.3.6-feature-hitl-enhance-v1.2 → 0.3.6

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.
Files changed (41) hide show
  1. package/README.md +34 -0
  2. package/package.json +10 -3
  3. package/templates/.add-coder-src-hash.json +37 -31
  4. package/templates/adapters/claude/hooks/pre-tool-use.sh +19 -0
  5. package/templates/adapters/codex/hooks/post-tool-use.sh +103 -0
  6. package/templates/adapters/codex/hooks/pre-tool-use.sh +19 -0
  7. package/templates/adapters/qoder/hooks/post-tool-use.sh +91 -0
  8. package/templates/adapters/qoder/hooks/pre-tool-use.sh +19 -0
  9. package/templates/adapters/trae/hooks/post-tool-use.sh +103 -0
  10. package/templates/adapters/trae/hooks/pre-tool-use.sh +19 -0
  11. package/templates/adapters/vscode/hooks/pre-tool-use.sh +19 -0
  12. package/templates/core/agents/add-flow-guardian.md +27 -25
  13. package/templates/core/hooks/post-tool-use.sh +103 -0
  14. package/templates/core/hooks/pre-tool-use.sh +19 -0
  15. package/templates/core/prisma/add.prisma +1 -0
  16. package/templates/core/rules/project_rules.md +3 -1
  17. package/templates/core/scripts/mcp-server/shared/dps-scoring.strategy.ts +3 -2
  18. package/templates/core/scripts/mcp-server/tools/audit.ts +2 -2
  19. package/templates/core/scripts/mcp-server/tools/gateway/check_add_route_completeness.ts +93 -0
  20. package/templates/core/scripts/mcp-server/tools/gateway/check_add_route_status.ts +235 -0
  21. package/templates/core/scripts/mcp-server/tools/gateway/check_dps.ts +555 -0
  22. package/templates/core/scripts/mcp-server/tools/gateway/check_rahs.ts +111 -0
  23. package/templates/core/scripts/mcp-server/tools/gateway/check_spec_sync.ts +114 -0
  24. package/templates/core/scripts/mcp-server/tools/gateway/helpers.ts +121 -0
  25. package/templates/core/scripts/mcp-server/tools/gateway/index.ts +16 -0
  26. package/templates/core/scripts/mcp-server/tools/gateway.backup +1143 -0
  27. package/templates/core/scripts/mcp-server/tools/index.ts +1 -1
  28. package/templates/core/scripts/mcp-server/tools/plan.ts +11 -3
  29. package/templates/core/skills/session-init/SKILL.md +21 -0
  30. package/templates/core/templates/add-route-template-heavyweight.md +7 -5
  31. package/templates/core/templates/add-route-template.md +3 -1
  32. package/templates/core/templates/add-route-template.schema.json +73 -0
  33. package/templates/core/templates/checklist-template.md +1 -0
  34. package/templates/core/templates/simple-plan-template.md +24 -0
  35. package/templates/core/templates/spec-template.md +54 -11
  36. package/templates/core/templates/spec-template.schema.json +31 -0
  37. package/templates/core/templates/standard-plan-template.md +16 -24
  38. package/templates/core/templates/tasks-template.md +35 -33
  39. package/templates/core/templates/tasks-template.schema.json +44 -0
  40. package/templates/core/agents/add-orchestrator.md +0 -217
  41. package/templates/core/scripts/mcp-server/tools/gateway.ts +0 -389
package/README.md CHANGED
@@ -8,6 +8,28 @@ Make 0.75 into one.
8
8
  <a href="https://www.npmcharts.com/compare/add-coder?interval=30" style="color:#c41a16;font-weight:700">📈 趋势</a>
9
9
  </p>
10
10
 
11
+ ```bash
12
+ # 第一次过死亡谷耗时 19天
13
+ ~ $ curl -s https://api.npmjs.org/downloads/point/last-month/add-coder {"downloads":5161,"start":"2026-06-29","end":"2026-07-28","package":"add-coder"}~ $ ~ $ npm info add-coder@0.1.0 add-coder@0.1.0 | MIT | deps: 3 | versions: 35 Initialize ADD paradigm workflow templates for Claude Code, Qoder, and VS Code. keywords: add, add-paradigm, claude, qoder, vscode, mcp, workflow, codein2027, 集中裁决层, caijuehub
14
+ bin: add-coder
15
+ dist
16
+ .tarball: https://registry.npmjs.org/add-coder/-/add-coder-0.1.0.tgz
17
+ .shasum: 3266ddb5304d303705694edec7c2f41efc24881d .integrity: sha512-MxFICLEoAgTVxnHaiIOli5eVyCXvB+xnSzpfmu0mrigEeM9NxzBOm2Auzjn1GKUTXSWelT0FecwwlYmsCf+TWQ==
18
+ .unpackedSize: 704.9 kB
19
+
20
+ dependencies:
21
+ zod: ^3.24.0, commander: ^13.1.0, smol-toml: ^1.7.0
22
+
23
+ maintainers:
24
+ - wujixmm <wujixmm@gmail.com>
25
+
26
+ dist-tags:
27
+ latest: 0.3.5
28
+ preview: 0.3.6-feature-hitl-enhance-v1.2
29
+
30
+ published 2 weeks ago by wujixmm <wujixmm@gmail.com>
31
+
32
+ ```
11
33
  > 🀄中文 | 🔤[English](#-english-readme)
12
34
 
13
35
  **AI 代码治理的落地方案** — [codein2027](https://github.com/xiaomingming92/codein2027) 快速构建 ADD 编程范式的完整脚手架。以「审计即基础设施」为核心,彻底打破编程过程黑盒与跨轮失忆,让编程范式进化为可审计、可追溯、可收敛的新时代。 [NPM](https://www.npmjs.com/package/add-coder) · [GitHub](https://github.com/xiaomingming92/add-coder)
@@ -49,6 +71,10 @@ Caijuehub 是 add-coder 历史上第一个实现 **TOML 规则声明 → 自动
49
71
  | HITL 审批 | `hitl-interaction-rules.toml` | `hitl.ts` | 每 IDE 独立声明交互模式 |
50
72
  | DPS 评分 | `dps-scoring-rules.toml` | `gateway.ts` | 文档质量闸门:语义/熵/CPM/结构 四维权重+阈值,AI 调参不碰代码 |
51
73
 
74
+ > 📊 [sync-magic benchmark](./docs/sync-magic-benchmark-report.md):caijuehub 改造实测——4 组对比,TS vs bash,熵值 vs 速度的场景价值分析。
75
+ >
76
+ > 🧠 [什么是酷的软件](./docs/what-makes-software-cool.md):从 benchmark 出发抽象工程美学框架——标准符合度 × 熵值 × runtime 容忍区间。含 IT 运营 vs 个人认知双视角分析、达索案例。
77
+
52
78
  **改规则不改代码**——产品经理读 TOML 即可理解软件行为,市场人员改 TOML 即可调整策略参数。AI Agent 大规模索引、检索、修改规则时,操作的是同一张决策表。认知负担从 O(N×M) 降为 O(1)。
53
79
 
54
80
  ### ③ Prompt Cache 原生友好 — 月费 ¥218,节省 98%
@@ -365,6 +391,10 @@ Caijuehub is add-coder's first implementation of **TOML declaration → auto-gen
365
391
  | HITL Approval | `hitl-interaction-rules.toml` | `hitl.ts` | Per-IDE interaction mode declaration |
366
392
  | DPS Scoring | `dps-scoring-rules.toml` | `gateway.ts` | Doc quality gateway: semantic/entropy/CPM/structure 4D weights+thresholds, AI self-tuning without touching code |
367
393
 
394
+ > 📊 [sync-magic benchmark](./docs/sync-magic-benchmark-report.md): Caijuehub refactoring measured — 4-group comparison, TS vs bash, scenario-value analysis of entropy vs speed.
395
+ >
396
+ > 🧠 [What Makes Software Cool](./docs/what-makes-software-cool.md): An engineering aesthetics framework derived from the benchmark — standards compliance × entropy × runtime tolerance. IT ops vs personal cognition perspectives, Dassault case study.
397
+
368
398
  **Edit rules, not code** — product managers read TOML to understand software behavior, marketers modify TOML to adjust strategy parameters. When AI agents index, search, and modify rules at scale, they operate on the same decision table. Cognitive load drops from O(N×M) to O(1).
369
399
 
370
400
  ### ③ Prompt Cache Native — ¥218/mo, 98% Savings
@@ -625,3 +655,7 @@ npx add-coder init
625
655
  | Memory Enhancement | Long-term project knowledge memory and plan-level sparse memory | 📋 |
626
656
 
627
657
  ---
658
+
659
+ My hometown
660
+
661
+ <img width="720" alt="hometown outside" src="https://github.com/user-attachments/assets/7aad93de-9cea-4194-b09d-cbd892d61cc2" />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "add-coder",
3
- "version": "0.3.6-feature-hitl-enhance-v1.2",
3
+ "version": "0.3.6",
4
4
  "private": false,
5
5
  "description": "[codein2027](https://github.com/xiaomingming92/codein2027) - A complete scaffolding for building the ADD programming paradigm, the implementation layer for AI code governance. Core principle: Audit as Infrastructure. Breaks the black-box programming process and cross-session amnesia, evolving programming paradigms into an auditable, traceable, and convergent new era. npx-ready.\n\n[codein2027](https://github.com/xiaomingming92/codein2027) 快速构建 ADD 编程范式的完整脚手架——AI 代码治理的落地方案。以「审计即基础设施」为核心,彻底打破编程过程黑盒与跨轮失忆,让编程范式进化为可审计、可追溯、可收敛的新时代。npx 即用,人人可体验。",
6
6
  "repository": {
@@ -41,6 +41,7 @@
41
41
  "license": "AGPL-3.0-only",
42
42
  "dependencies": {
43
43
  "@modelcontextprotocol/server": "2.0.0",
44
+ "@xenova/transformers": "^2.17.2",
44
45
  "commander": "^13.1.0",
45
46
  "smol-toml": "^1.7.0",
46
47
  "vector-cosine-similarity": "^1.8.0",
@@ -53,7 +54,8 @@
53
54
  "dotenv": "*",
54
55
  "prisma": "^7.0.0",
55
56
  "tsx": ">=4",
56
- "vector-cosine-similarity": "^1.8.0"
57
+ "vector-cosine-similarity": "^1.8.0",
58
+ "@xenova/transformers": "^2.17.2"
57
59
  },
58
60
  "peerDependenciesMeta": {
59
61
  "@prisma/client": {
@@ -73,6 +75,9 @@
73
75
  },
74
76
  "@prisma/adapter-libsql": {
75
77
  "optional": true
78
+ },
79
+ "@xenova/transformers": {
80
+ "optional": true
76
81
  }
77
82
  },
78
83
  "devDependencies": {
@@ -89,7 +94,9 @@
89
94
  "predev": "npm run db:ensure",
90
95
  "dev": "tsup --watch",
91
96
  "db:ensure": "bash scripts/db-ensure.sh",
92
- "sync": "bash scripts/sync-magic-dirs.sh",
97
+ "sync": "tsx scripts/sync-magic.ts",
98
+ "sync:bash": "bash scripts/benchmark/sync-magic.sh",
99
+ "benchmark": "tsx scripts/benchmark/benchmark-sync.ts",
93
100
  "lint": "eslint src/",
94
101
  "lint:fix": "eslint src/ --fix",
95
102
  "generate": "tsx src/caijuehub/transcribe.ts",
@@ -1,5 +1,5 @@
1
1
  {
2
- "_version": "0.3.6-feature-hitl-enhance-v1.2",
2
+ "_version": "0.3.6",
3
3
  "adapters/claude/hooks/doc-format-guard.sh": "ec59ad3f",
4
4
  "adapters/claude/hooks/lib/common.sh": "db321ef6",
5
5
  "adapters/claude/hooks/lib/context-inject.sh": "4132f203",
@@ -15,7 +15,7 @@
15
15
  "adapters/claude/hooks/post-tool-failure.sh": "669b1b65",
16
16
  "adapters/claude/hooks/post-tool-use.sh": "f54dd009",
17
17
  "adapters/claude/hooks/pre-compact.sh": "4248f84f",
18
- "adapters/claude/hooks/pre-tool-use.sh": "8f151533",
18
+ "adapters/claude/hooks/pre-tool-use.sh": "ecbdc628",
19
19
  "adapters/claude/hooks/prompt-submit.sh": "680b41f4",
20
20
  "adapters/claude/hooks/review-checklist.sh": "b383a983",
21
21
  "adapters/claude/hooks/session-end.sh": "777ae808",
@@ -38,9 +38,9 @@
38
38
  "adapters/codex/hooks/notification.sh": "f7aed25d",
39
39
  "adapters/codex/hooks/permission-gate.sh": "bcca7732",
40
40
  "adapters/codex/hooks/post-tool-failure.sh": "669b1b65",
41
- "adapters/codex/hooks/post-tool-use.sh": "f54dd009",
41
+ "adapters/codex/hooks/post-tool-use.sh": "27123aee",
42
42
  "adapters/codex/hooks/pre-compact.sh": "6164c007",
43
- "adapters/codex/hooks/pre-tool-use.sh": "e3bf721d",
43
+ "adapters/codex/hooks/pre-tool-use.sh": "ffa7936b",
44
44
  "adapters/codex/hooks/prompt-submit.sh": "bea6f381",
45
45
  "adapters/codex/hooks/review-checklist.sh": "b383a983",
46
46
  "adapters/codex/hooks/session-end.sh": "3cc8c346",
@@ -62,9 +62,9 @@
62
62
  "adapters/qoder/hooks/notification.sh": "7d4efea6",
63
63
  "adapters/qoder/hooks/permission-gate.sh": "3bf27b1a",
64
64
  "adapters/qoder/hooks/post-tool-failure.sh": "8bc7a0e4",
65
- "adapters/qoder/hooks/post-tool-use.sh": "47dd691c",
65
+ "adapters/qoder/hooks/post-tool-use.sh": "051cb6ed",
66
66
  "adapters/qoder/hooks/pre-compact.sh": "092fa6cf",
67
- "adapters/qoder/hooks/pre-tool-use.sh": "32eaa754",
67
+ "adapters/qoder/hooks/pre-tool-use.sh": "5ba6d9ae",
68
68
  "adapters/qoder/hooks/prompt-submit.sh": "f36e6ae8",
69
69
  "adapters/qoder/hooks/review-checklist.sh": "666831c8",
70
70
  "adapters/qoder/hooks/session-end.sh": "c50339df",
@@ -87,9 +87,9 @@
87
87
  "adapters/trae/hooks/notification.sh": "f7aed25d",
88
88
  "adapters/trae/hooks/permission-gate.sh": "bcca7732",
89
89
  "adapters/trae/hooks/post-tool-failure.sh": "669b1b65",
90
- "adapters/trae/hooks/post-tool-use.sh": "f54dd009",
90
+ "adapters/trae/hooks/post-tool-use.sh": "27123aee",
91
91
  "adapters/trae/hooks/pre-compact.sh": "6164c007",
92
- "adapters/trae/hooks/pre-tool-use.sh": "190ce5cc",
92
+ "adapters/trae/hooks/pre-tool-use.sh": "8e57d1fa",
93
93
  "adapters/trae/hooks/prompt-submit.sh": "bea6f381",
94
94
  "adapters/trae/hooks/review-checklist.sh": "b383a983",
95
95
  "adapters/trae/hooks/session-end.sh": "3cc8c346",
@@ -124,7 +124,7 @@
124
124
  "adapters/vscode/hooks/post-tool-failure.sh": "355cfab1",
125
125
  "adapters/vscode/hooks/post-tool-use.sh": "5f188718",
126
126
  "adapters/vscode/hooks/pre-compact.sh": "a0908f0e",
127
- "adapters/vscode/hooks/pre-tool-use.sh": "dbb5f75a",
127
+ "adapters/vscode/hooks/pre-tool-use.sh": "6232624b",
128
128
  "adapters/vscode/hooks/prompt-submit.sh": "4529a394",
129
129
  "adapters/vscode/hooks/review-checklist.sh": "b383a983",
130
130
  "adapters/vscode/hooks/session-end.sh": "7b407b9f",
@@ -135,8 +135,7 @@
135
135
  "adapters/vscode/launch.json": "f2b79855",
136
136
  "adapters/vscode/settings.json": "7cabd00e",
137
137
  "adapters/vscode/tasks.json": "654d7fbd",
138
- "core/agents/add-flow-guardian.md": "697d422f",
139
- "core/agents/add-orchestrator.md": "0d555e99",
138
+ "core/agents/add-flow-guardian.md": "a23f50cf",
140
139
  "core/docs/ADD-governance-claude-code.md": "0f582a7e",
141
140
  "core/docs/ADD-governance-codex.md": "289e8b71",
142
141
  "core/docs/ADD-governance-qoder-cn.md": "332a7253",
@@ -154,9 +153,9 @@
154
153
  "core/hooks/notification.sh": "f7aed25d",
155
154
  "core/hooks/permission-gate.sh": "bcca7732",
156
155
  "core/hooks/post-tool-failure.sh": "669b1b65",
157
- "core/hooks/post-tool-use.sh": "f54dd009",
156
+ "core/hooks/post-tool-use.sh": "27123aee",
158
157
  "core/hooks/pre-compact.sh": "6164c007",
159
- "core/hooks/pre-tool-use.sh": "8642d052",
158
+ "core/hooks/pre-tool-use.sh": "fa73df98",
160
159
  "core/hooks/prompt-submit.sh": "bea6f381",
161
160
  "core/hooks/review-checklist.sh": "b383a983",
162
161
  "core/hooks/session-end.sh": "3cc8c346",
@@ -167,7 +166,7 @@
167
166
  "core/plans/2026-07/08/add-coder-npm-package-add-route-v1.md": "b05fce99",
168
167
  "core/plans/2026-07/08/add-coder-npm-package-handoff-v1.md": "1bd40a4a",
169
168
  "core/plans/2026-07/08/add-coder-npm-package-plan-v1.md": "a678d98e",
170
- "core/prisma/add.prisma": "eb397d48",
169
+ "core/prisma/add.prisma": "3733af9f",
171
170
  "core/reports/REPORT-WORKFLOW.md": "03d39b21",
172
171
  "core/reports/boundary-runtime-report.md": "6fd8053f",
173
172
  "core/reports/code-review-combined-report.md": "195d52aa",
@@ -176,7 +175,7 @@
176
175
  "core/reports/index.md": "6348c374",
177
176
  "core/reports/runtime-report/gateway.md": "a5751665",
178
177
  "core/reviews/.gitkeep": "e3b0c442",
179
- "core/rules/project_rules.md": "76272603",
178
+ "core/rules/project_rules.md": "b2680762",
180
179
  "core/rules/theory-practice-map.toml": "b1db99fd",
181
180
  "core/scripts/db-ensure.sh": "faeb6b92",
182
181
  "core/scripts/gen-plan-index.sh": "bfc6ad3e",
@@ -193,7 +192,7 @@
193
192
  "core/scripts/mcp-server/resources/round-task.ts": "104a0d74",
194
193
  "core/scripts/mcp-server/sampling/index.ts": "7ee26d92",
195
194
  "core/scripts/mcp-server/sampling/review.ts": "5db7a8df",
196
- "core/scripts/mcp-server/shared/dps-scoring.strategy.ts": "ed889421",
195
+ "core/scripts/mcp-server/shared/dps-scoring.strategy.ts": "f1c901dc",
197
196
  "core/scripts/mcp-server/shared/env.ts": "57f4c2f2",
198
197
  "core/scripts/mcp-server/shared/fs.ts": "97257db9",
199
198
  "core/scripts/mcp-server/shared/hitl-interaction.strategy.ts": "7c5c26f5",
@@ -204,29 +203,36 @@
204
203
  "core/scripts/mcp-server/tasks/index.ts": "c040eb75",
205
204
  "core/scripts/mcp-server/tasks/runner.ts": "d84bd35d",
206
205
  "core/scripts/mcp-server/tasks/store.ts": "2fce1a92",
207
- "core/scripts/mcp-server/tools/audit.ts": "47ea912f",
206
+ "core/scripts/mcp-server/tools/audit.ts": "3c23458b",
208
207
  "core/scripts/mcp-server/tools/context.ts": "463df4f4",
209
208
  "core/scripts/mcp-server/tools/docs.ts": "a3937aec",
210
- "core/scripts/mcp-server/tools/gateway.ts": "5d178f61",
209
+ "core/scripts/mcp-server/tools/gateway/check_add_route_completeness.ts": "c205989d",
210
+ "core/scripts/mcp-server/tools/gateway/check_add_route_status.ts": "3662b6dc",
211
+ "core/scripts/mcp-server/tools/gateway/check_dps.ts": "12f3b375",
212
+ "core/scripts/mcp-server/tools/gateway/check_rahs.ts": "dc7e2a20",
213
+ "core/scripts/mcp-server/tools/gateway/check_spec_sync.ts": "a683697f",
214
+ "core/scripts/mcp-server/tools/gateway/helpers.ts": "5ed11a3b",
215
+ "core/scripts/mcp-server/tools/gateway/index.ts": "5a9fd5ed",
216
+ "core/scripts/mcp-server/tools/gateway.backup": "65eae393",
211
217
  "core/scripts/mcp-server/tools/hitl.ts": "80093743",
212
218
  "core/scripts/mcp-server/tools/hook-event-report.ts": "3926005b",
213
- "core/scripts/mcp-server/tools/index.ts": "4735daf0",
214
- "core/scripts/mcp-server/tools/plan.ts": "bf146dca",
219
+ "core/scripts/mcp-server/tools/index.ts": "b15c6753",
220
+ "core/scripts/mcp-server/tools/plan.ts": "9ef4da1e",
215
221
  "core/scripts/mcp-server/tools/quality.ts": "26ddf75d",
216
222
  "core/scripts/mcp-server/tools/review.ts": "c2d464ed",
217
223
  "core/scripts/mcp-server/types.ts": "6c5e60bc",
218
224
  "core/scripts/mcp-server.ts": "99cc6833",
219
225
  "core/skills/add-paradigm/SKILL.md": "b74ef053",
220
- "core/skills/session-init/SKILL.md": "0fbdc5cd",
226
+ "core/skills/session-init/SKILL.md": "bb1205b0",
221
227
  "core/specs/add-coder-npm-package/checklist.md": "ed92032c",
222
228
  "core/specs/add-coder-npm-package/spec.md": "c7d0f235",
223
229
  "core/specs/add-coder-npm-package/tasks.md": "c34301e5",
224
230
  "core/templates/01-架构/《ADD开发工作路径与文档协同规范》.md": "4a566775",
225
231
  "core/templates/TERMINOLOGY.md": "e9f4f781",
226
- "core/templates/add-route-template-heavyweight.md": "8b1eb7c2",
227
- "core/templates/add-route-template.md": "670f9ebe",
228
- "core/templates/add-route-template.schema.json": "c29a8f65",
229
- "core/templates/checklist-template.md": "f904e049",
232
+ "core/templates/add-route-template-heavyweight.md": "0e107ac0",
233
+ "core/templates/add-route-template.md": "da7022df",
234
+ "core/templates/add-route-template.schema.json": "867a45c1",
235
+ "core/templates/checklist-template.md": "d6b73a5c",
230
236
  "core/templates/checklist-template.schema.json": "fb3a73e8",
231
237
  "core/templates/fix-verification-template.md": "9c9ed175",
232
238
  "core/templates/fix-verification-template.schema.json": "a18bc6a5",
@@ -252,14 +258,14 @@
252
258
  "core/templates/review-template.schema.json": "abc2ece6",
253
259
  "core/templates/runtime-report-template.md": "7b35208a",
254
260
  "core/templates/runtime-report-template.schema.json": "6c1143e6",
255
- "core/templates/simple-plan-template.md": "0bb1ebbe",
261
+ "core/templates/simple-plan-template.md": "db5c247f",
256
262
  "core/templates/simple-plan-template.schema.json": "99d53cc1",
257
- "core/templates/spec-template.md": "3fe8f818",
258
- "core/templates/spec-template.schema.json": "b13b3de8",
259
- "core/templates/standard-plan-template.md": "44d30a4e",
263
+ "core/templates/spec-template.md": "619b01cc",
264
+ "core/templates/spec-template.schema.json": "051b6e5d",
265
+ "core/templates/standard-plan-template.md": "2129931c",
260
266
  "core/templates/standard-plan-template.schema.json": "2b767928",
261
- "core/templates/tasks-template.md": "3a0f318d",
262
- "core/templates/tasks-template.schema.json": "c046de41",
267
+ "core/templates/tasks-template.md": "2b9d0d52",
268
+ "core/templates/tasks-template.schema.json": "fff6eb47",
263
269
  "core/tools/README.md": "26a63460",
264
270
  "core/vocabulary/add-governance-vocabulary.md": "0bd9f725",
265
271
  "shared/hooks-lib/common.sh": "441eee52"
@@ -82,6 +82,25 @@ if [ "$tool_name" = "Write" ] || [ "$tool_name" = "Edit" ] || [ "$tool_name" = "
82
82
  exit $EXIT_BLOCK
83
83
  fi
84
84
 
85
+ # 模板类型前置注入 — plans/ 写入前提示应选模板
86
+ if echo "$file_path" | grep -qE '\.(qoder|claude|add|vscode|trae)/(plans)/'; then
87
+ fname=$(basename "$file_path")
88
+ if echo "$fname" | grep -qE 'plan-v[0-9]'; then
89
+ echo "💡 [ADD PreToolUse] 写入 Plan → 模板: standard-plan-template.md(标准)或 simple-plan-template.md(≤3文件)" >&2
90
+ elif echo "$fname" | grep -qE 'add-route'; then
91
+ echo "💡 [ADD PreToolUse] 写入 ADD Route → 模板: add-route-template.md" >&2
92
+ elif echo "$fname" | grep -qE 'handoff'; then
93
+ echo "💡 [ADD PreToolUse] 写入 Handoff → 模板: handoff-single-round-template.md(单轮)或 handoff-multi-round-template.md(多轮)" >&2
94
+ fi
95
+ # Write 大文件适配 — 已存在大文件建议用 SearchReplace 分块
96
+ if echo "$tool_name" | grep -qE 'Write' && [ -f "$file_path" ]; then
97
+ fsize=$(wc -c < "$file_path" 2>/dev/null || echo "0")
98
+ if [ "$fsize" -gt 2000 ] 2>/dev/null; then
99
+ echo "⚠️ [ADD PreToolUse] 文件已有 ${fsize} 字节,Write 全量覆盖可能触发工具 payload 限制。建议用 SearchReplace 分块追加。" >&2
100
+ fi
101
+ fi
102
+ fi
103
+
85
104
  # §C: HITL tongyi 检查 — plans/ + PLAN_REVIEW reviews/ 写入前必须有 .hitl-tongyi-{planName} 哨兵
86
105
  # implementation/runtime review 不需要 HITL,走 §B 活跃 Plan 检查
87
106
  if echo "$file_path" | grep -qE '\.(qoder|claude|add|vscode|trae)/(plans)/'; then
@@ -1,4 +1,107 @@
1
1
  #!/bin/bash
2
+ # post-tool-use.sh — PostToolUse:格式化 + 文档守卫 + 审计提醒 + DPS 自动化
3
+ # 治理卡位 #5: 格式化 + ADD文档守卫 + 审计落库 + 结果增强 + 哨兵自动化
4
+ set -euo pipefail
5
+
6
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
7
+ COMMON_LIB="$HOOK_DIR/lib/common.sh"
8
+ [ -f "$COMMON_LIB" ] && source "$COMMON_LIB"
9
+
10
+ input=$(parse_input)
11
+ tool_name=$(json_get "$input" "tool_name")
12
+ [ -z "$tool_name" ] && tool_name=$(echo "$input" | grep -o '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null | sed 's/.*: *"\([^"]*\)".*/\1/' || echo "")
13
+
14
+ # ═══════════════ §1: HITL DPS 自动化 — check_dps ≥ 80 → 自动建哨兵 ═══════════════
15
+ # 检测 MCP check_dps 调用结果,DPS ≥ 80 自动 touch .tongyi-{plan} 哨兵
16
+ if echo "$input" | grep -q '"check_dps"'; then
17
+ tool_output=$(echo "$input" | grep -o '"output"[[:space:]]*:[[:space:]]*"[^"]*"\|"content"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null || echo "")
18
+ dps_score=$(echo "$tool_output" | grep -oP 'DPS\s*=\s*\K\d+' 2>/dev/null || echo "")
19
+ plan_keyword=$(echo "$input" | grep -oP '"planKeyword"\s*:\s*"\K[^"]+' 2>/dev/null || echo "")
20
+
21
+ if [ -n "$dps_score" ] && [ -n "$plan_keyword" ]; then
22
+ if [ "$dps_score" -ge 80 ] 2>/dev/null; then
23
+ sentinel="${PROJECT_DIR:-$PWD}/${MAGIC_DIR:-.qoder}/hitl/.tongyi-${plan_keyword}"
24
+ if [ ! -f "$sentinel" ]; then
25
+ touch "$sentinel" 2>/dev/null && echo "[ADD PostToolUse] ✅ DPS=${dps_score} ≥80, HITL 自动通过 → ${sentinel}" >&2 || true
26
+ echo "[ADD PostToolUse] DPS=${dps_score} ≥80, 已自动建哨兵 ${sentinel}" >&2
27
+ else
28
+ echo "[ADD PostToolUse] DPS=${dps_score} ≥80, 哨兵已存在 → ${sentinel}" >&2
29
+ fi
30
+ else
31
+ echo "[ADD PostToolUse] ⚠️ DPS=${dps_score} <80, 需 Review 后手动建哨兵 .tongyi-${plan_keyword}" >&2
32
+ echo "[ADD PostToolUse] 修复文档后重新 check_dps,通过即自动放行。" >&2
33
+ fi
34
+ fi
35
+ fi
36
+
37
+ # ═══════════════ §2: Edit/Write matcher: 格式化 + 文档守卫 + 自动 plan_track ═══════════════
38
+ if [ "$tool_name" = "Edit" ] || [ "$tool_name" = "Write" ]; then
39
+ file_path=$(echo "$input" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null | sed 's/.*: *"\([^"]*\)".*/\1/' || echo "")
40
+ [ -z "$file_path" ] && exit 0
41
+
42
+ # §2a: ADD 文档结构守卫
43
+ if echo "$file_path" | grep -qE '\.(qoder|claude|add)/(plans|specs|reviews)/'; then
44
+ echo "[ADD PostToolUse] ADD 文档已写入: ${file_path}。请确保章节完整、双向链接齐全。" >&2
45
+ fi
46
+
47
+ # §2b: plan_track 自动触发 — specs/ 或 add-route 写入后自动落库
48
+ if echo "$file_path" | grep -qE '/(specs|plans)/.*add-route'; then
49
+ plan_name=$(basename "$file_path" | sed 's/-add-route.*//' | sed 's/-plan-v[0-9]*$//')
50
+ # 从路径提取完整 planName(含 -plan-vN 后缀)
51
+ if echo "$file_path" | grep -qE 'add-route'; then
52
+ # add-route 写入:从文件名反推 planName
53
+ plan_prefix=$(basename "$file_path" | sed 's/-add-route-v[0-9]*\.md$//')
54
+ plan_dir=$(dirname "$file_path")
55
+ if [ -d "$plan_dir" ]; then
56
+ plan_file=$(ls "$plan_dir"/*-plan-v*.md 2>/dev/null | head -1 || echo "")
57
+ if [ -n "$plan_file" ]; then
58
+ plan_name=$(basename "$plan_file" .md)
59
+ fi
60
+ fi
61
+ fi
62
+ if [ -n "$plan_name" ]; then
63
+ echo "[ADD PostToolUse] 📊 自动同步 PlanRecord: plan_track({ planName: \"${plan_name}\" }) — 请执行" >&2
64
+ fi
65
+ fi
66
+
67
+ # §2c: devlog 自动提醒 — add-route Step 8 全 [x] 时提醒
68
+ if echo "$file_path" | grep -qE 'add-route.*\.md$'; then
69
+ if [ -f "$file_path" ]; then
70
+ step8_content=$(sed -n '/## Step 8/,/^## /p' "$file_path" 2>/dev/null || echo "")
71
+ unchecked=$(echo "$step8_content" | grep -c '^\- \[ \]' 2>/dev/null || echo "0")
72
+ checked=$(echo "$step8_content" | grep -c '^\- \[x\]' 2>/dev/null || echo "0")
73
+ if [ "$unchecked" = "0" ] && [ "$checked" -gt 0 ]; then
74
+ echo "[ADD PostToolUse] ⚠️ Step 8 全部收敛完成!请写 devlog日志(走mcp) → 更新 handoff" >&2
75
+ fi
76
+ fi
77
+ fi
78
+
79
+ # §2d: schema.json 自动 regen — 模板 .md 修改后更新对应 schema
80
+ if echo "$file_path" | grep -qE 'templates/.*\.md$'; then
81
+ schema_file="${file_path%.md}.schema.json"
82
+ if [ -f "$schema_file" ]; then
83
+ # 扫描模板实际 ## 标题,更新 schema sections
84
+ headings=$(grep -oP '^## \K.+' "$file_path" 2>/dev/null | head -20 || echo "")
85
+ if [ -n "$headings" ]; then
86
+ echo "[ADD PostToolUse] 🔄 模板已修改,请检查 ${schema_file} 是否需更新(§ sections)" >&2
87
+ echo "[ADD PostToolUse] 模板标题: $(echo "$headings" | tr '\n' ' ')" >&2
88
+ fi
89
+ fi
90
+ fi
91
+
92
+ # §2e: 审计提醒
93
+ echo "[ADD PostToolUse] 文件已写入: ${file_path}。请执行 record_dev_operation 落库审计(ADD-7)。" >&2
94
+ exit 0
95
+ fi
96
+
97
+ # ═══════════════ §3: Bash matcher: 结果增强 ═══════════════
98
+ if [ "$tool_name" = "Bash" ]; then
99
+ echo "[ADD PostToolUse] 命令执行完成。如有 lint/tsc 错误请修复。" >&2
100
+ exit 0
101
+ fi
102
+
103
+ exit 0
104
+ #!/bin/bash
2
105
  # post-tool-use.sh — Claude Code PostToolUse:格式化 + 文档守卫 + 审计提醒
3
106
  # 治理卡位 #5: 格式化 + ADD文档守卫 + 审计落库 + 结果增强
4
107
  set -euo pipefail
@@ -154,6 +154,25 @@ if [ "$tool_name" = "Write" ] || [ "$tool_name" = "Edit" ] || [ "$tool_name" = "
154
154
  exit 2
155
155
  fi
156
156
 
157
+ # §C: 模板类型前置注入 — plans/ 写入前提示应选模板
158
+ if echo "$file_path" | grep -qE '\.(qoder|claude|add|vscode|trae)/(plans)/'; then
159
+ fname=$(basename "$file_path")
160
+ if echo "$fname" | grep -qE 'plan-v[0-9]'; then
161
+ echo "💡 [ADD PreToolUse] 写入 Plan → 模板: standard-plan-template.md(标准)或 simple-plan-template.md(≤3文件)" >&2
162
+ elif echo "$fname" | grep -qE 'add-route'; then
163
+ echo "💡 [ADD PreToolUse] 写入 ADD Route → 模板: add-route-template.md" >&2
164
+ elif echo "$fname" | grep -qE 'handoff'; then
165
+ echo "💡 [ADD PreToolUse] 写入 Handoff → 模板: handoff-single-round-template.md(单轮)或 handoff-multi-round-template.md(多轮)" >&2
166
+ fi
167
+ # Write 大文件适配 — 已存在大文件建议用 SearchReplace 分块
168
+ if echo "$tool_name" | grep -qE 'Write' && [ -f "$file_path" ]; then
169
+ fsize=$(wc -c < "$file_path" 2>/dev/null || echo "0")
170
+ if [ "$fsize" -gt 2000 ] 2>/dev/null; then
171
+ echo "⚠️ [ADD PreToolUse] 文件已有 ${fsize} 字节,Write 全量覆盖可能触发工具 payload 限制。建议用 SearchReplace 分块追加。" >&2
172
+ fi
173
+ fi
174
+ fi
175
+
157
176
  # §C: HITL tongyi 检查 — plans/ + PLAN_REVIEW reviews/ 写入前必须有 .hitl-tongyi-{planName} 哨兵
158
177
  # implementation/runtime review 不需要 HITL,走 §B 活跃 Plan 检查
159
178
  if echo "$file_path" | grep -qE '\.(qoder|claude|add|vscode|trae)/(plans)/'; then
@@ -1,4 +1,95 @@
1
1
  #!/bin/bash
2
+ # post-tool-use.sh — Qoder CN PostToolUse:格式化 + 文档守卫 + 审计提醒 + DPS 自动化
3
+ # 治理卡位 #5: 格式化 + ADD文档守卫 + 审计落库 + 结果增强 + 哨兵自动化
4
+ set -euo pipefail
5
+
6
+ input=$(cat)
7
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
8
+ export CURRENT_MAGIC=$(basename "$(dirname "$HOOK_DIR")")
9
+ export PROJECT_DIR="${QODER_PROJECT_DIR:-${QODERCN_PROJECT_DIR:-$PWD}}"
10
+ source "$HOOK_DIR/lib/common.sh" 2>/dev/null || true
11
+ MAGIC_DIR="$CURRENT_MAGIC"
12
+
13
+ tool_name=$(json_get "$input" "tool_name")
14
+ [ -z "$tool_name" ] && tool_name=$(echo "$input" | grep -o '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null | sed 's/.*: *"\([^"]*\)".*/\1/' || echo "")
15
+
16
+ # ═══════════════ §1: HITL DPS 自动化 — check_dps ≥ 80 → 自动建哨兵 ═══════════════
17
+ if echo "$input" | grep -q '"check_dps"'; then
18
+ dps_score=$(echo "$input" | grep -oP 'DPS\s*=\s*\K\d+' 2>/dev/null || echo "")
19
+ plan_keyword=$(echo "$input" | grep -oP '"planKeyword"\s*:\s*"\K[^"]+' 2>/dev/null || echo "")
20
+
21
+ if [ -n "$dps_score" ] && [ -n "$plan_keyword" ]; then
22
+ if [ "$dps_score" -ge 80 ] 2>/dev/null; then
23
+ sentinel="${PROJECT_DIR}/${MAGIC_DIR}/hitl/.tongyi-${plan_keyword}"
24
+ if [ ! -f "$sentinel" ]; then
25
+ touch "$sentinel" 2>/dev/null || true
26
+ echo "[ADD PostToolUse] ✅ DPS=${dps_score} ≥80, HITL 自动通过 → ${sentinel}" >&2
27
+ fi
28
+ else
29
+ echo "[ADD PostToolUse] ⚠️ DPS=${dps_score} <80, 需 Review 后手动建哨兵 .tongyi-${plan_keyword}" >&2
30
+ fi
31
+ fi
32
+ fi
33
+
34
+ # ═══════════════ §2: Edit/Write matcher ═══════════════
35
+ if [ "$tool_name" = "Edit" ] || [ "$tool_name" = "Write" ]; then
36
+ file_path=$(echo "$input" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null | sed 's/.*: *"\([^"]*\)".*/\1/' || echo "")
37
+ [ -z "$file_path" ] && exit 0
38
+
39
+ # §2a: ADD 文档结构守卫
40
+ if echo "$file_path" | grep -qE '\.(qoder|claude|add)/(plans|specs|reviews)/'; then
41
+ echo "[ADD PostToolUse] ADD 文档已写入: ${file_path}。请确保章节完整、双向链接齐全。" >&2
42
+ fi
43
+
44
+ # §2b: plan_track 自动触发 — specs/ 或 add-route 写入后提醒
45
+ if echo "$file_path" | grep -qE '/(specs|plans)/.*add-route'; then
46
+ plan_name=""
47
+ if echo "$file_path" | grep -qE 'add-route'; then
48
+ plan_prefix=$(basename "$file_path" | sed 's/-add-route-v[0-9]*\.md$//')
49
+ plan_dir=$(dirname "$file_path")
50
+ if [ -d "$plan_dir" ]; then
51
+ plan_file=$(ls "$plan_dir"/*-plan-v*.md 2>/dev/null | head -1 || echo "")
52
+ if [ -n "$plan_file" ]; then
53
+ plan_name=$(basename "$plan_file" .md)
54
+ fi
55
+ fi
56
+ fi
57
+ if [ -n "$plan_name" ]; then
58
+ echo "[ADD PostToolUse] 📊 请执行 plan_track({ planName: \"${plan_name}\" }) 落库同步" >&2
59
+ fi
60
+ fi
61
+
62
+ # §2c: devlog 自动提醒 — add-route Step 8 全 [x] 时提醒
63
+ if echo "$file_path" | grep -qE 'add-route.*\.md$'; then
64
+ if [ -f "$file_path" ]; then
65
+ step8_unchecked=$(sed -n '/## Step 8/,/^## /p' "$file_path" 2>/dev/null | grep -c '^\- \[ \]' 2>/dev/null || echo "0")
66
+ step8_checked=$(sed -n '/## Step 8/,/^## /p' "$file_path" 2>/dev/null | grep -c '^\- \[x\]' 2>/dev/null || echo "0")
67
+ if [ "$step8_unchecked" = "0" ] && [ "$step8_checked" -gt 0 ]; then
68
+ echo "[ADD PostToolUse] ⚠️ Step 8 全部收敛完成!请写 devlog日志(走mcp) → 更新 handoff" >&2
69
+ fi
70
+ fi
71
+ fi
72
+
73
+ # §2d: schema.json 自动 regen 提醒
74
+ if echo "$file_path" | grep -qE 'templates/.*\.md$'; then
75
+ schema_file="${file_path%.md}.schema.json"
76
+ if [ -f "$schema_file" ]; then
77
+ echo "[ADD PostToolUse] 🔄 模板已修改,请检查 ${schema_file} 是否需更新" >&2
78
+ fi
79
+ fi
80
+
81
+ echo "[ADD PostToolUse] 文件已写入: ${file_path}。请执行 record_dev_operation 落库审计(ADD-7)。" >&2
82
+ exit 0
83
+ fi
84
+
85
+ # ═══════════════ §3: Bash matcher ═══════════════
86
+ if [ "$tool_name" = "Bash" ]; then
87
+ echo "[ADD PostToolUse] 命令执行完成。如有 lint/tsc 错误请修复。" >&2
88
+ exit 0
89
+ fi
90
+
91
+ exit 0
92
+ #!/bin/bash
2
93
  # post-tool-use.sh — Qoder CN PostToolUse:格式化 + 文档守卫 + 审计提醒
3
94
  # 治理卡位 #5: 格式化 + ADD文档守卫 + 审计落库 + 结果增强
4
95
  set -euo pipefail
@@ -83,6 +83,25 @@ if [ "$tool_name" = "Write" ] || [ "$tool_name" = "Edit" ] || [ "$tool_name" = "
83
83
  exit 2
84
84
  fi
85
85
 
86
+ # §B: 模板类型前置注入 — plans/ 写入前提示应选模板
87
+ if echo "$file_path" | grep -qE '\.(qoder|claude|add|vscode|trae)/(plans)/'; then
88
+ fname=$(basename "$file_path")
89
+ if echo "$fname" | grep -qE 'plan-v[0-9]'; then
90
+ echo "💡 [ADD PreToolUse] 写入 Plan → 模板: standard-plan-template.md(标准)或 simple-plan-template.md(≤3文件)" >&2
91
+ elif echo "$fname" | grep -qE 'add-route'; then
92
+ echo "💡 [ADD PreToolUse] 写入 ADD Route → 模板: add-route-template.md" >&2
93
+ elif echo "$fname" | grep -qE 'handoff'; then
94
+ echo "💡 [ADD PreToolUse] 写入 Handoff → 模板: handoff-single-round-template.md(单轮)或 handoff-multi-round-template.md(多轮)" >&2
95
+ fi
96
+ # Qoder Write 大文件适配 — 已存在大文件建议用 SearchReplace 分块
97
+ if echo "$tool_name" | grep -qE 'Write' && [ -f "$file_path" ]; then
98
+ fsize=$(wc -c < "$file_path" 2>/dev/null || echo "0")
99
+ if [ "$fsize" -gt 2000 ] 2>/dev/null; then
100
+ echo "⚠️ [ADD PreToolUse] 文件已有 ${fsize} 字节,Write 全量覆盖可能触发 Qoder 40500。建议用 SearchReplace 分块追加。" >&2
101
+ fi
102
+ fi
103
+ fi
104
+
86
105
  # §C: HITL tongyi 检查 — plans/ + PLAN_REVIEW reviews/ 写入前必须有 .hitl-tongyi-{planName} 哨兵
87
106
  # implementation/runtime review 不需要 HITL,走 §B 活跃 Plan 检查
88
107
  if echo "$file_path" | grep -qE '\.(qoder|claude|add|vscode|trae)/(plans)/'; then