add-coder 0.3.27 → 0.3.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.
Files changed (262) hide show
  1. package/README.md +252 -150
  2. package/package.json +2 -1
  3. package/templates/.add-coder-src-hash.json +126 -148
  4. package/templates/adapters/claude/hooks/doc-format-guard.ts +32 -0
  5. package/templates/adapters/claude/hooks/lib/claude-env.ts +7 -0
  6. package/templates/adapters/claude/hooks/notification.ts +24 -0
  7. package/templates/adapters/claude/hooks/permission-denied.ts +33 -0
  8. package/templates/adapters/claude/hooks/permission-gate.ts +12 -0
  9. package/templates/adapters/claude/hooks/post-tool-failure.ts +4 -0
  10. package/templates/adapters/claude/hooks/post-tool-use.ts +17 -0
  11. package/templates/adapters/claude/hooks/pre-compact.ts +10 -0
  12. package/templates/adapters/claude/hooks/pre-tool-use.ts +81 -0
  13. package/templates/adapters/claude/hooks/prompt-submit.ts +82 -0
  14. package/templates/adapters/claude/hooks/review-checklist.ts +4 -0
  15. package/templates/adapters/claude/hooks/session-end.ts +10 -0
  16. package/templates/adapters/claude/hooks/session-start.ts +24 -0
  17. package/templates/adapters/claude/hooks/stop-check.ts +15 -0
  18. package/templates/adapters/claude/hooks/stop-failure.ts +34 -0
  19. package/templates/adapters/claude/hooks/subagent-guard.ts +25 -0
  20. package/templates/adapters/claude/hooks/subagent-stop.ts +12 -0
  21. package/templates/adapters/claude/settings.json +13 -13
  22. package/templates/adapters/codex/hooks/doc-format-guard.ts +30 -0
  23. package/templates/adapters/codex/hooks/notification.ts +26 -0
  24. package/templates/adapters/codex/hooks/permission-gate.ts +15 -0
  25. package/templates/adapters/codex/hooks/post-tool-failure.ts +14 -0
  26. package/templates/adapters/codex/hooks/post-tool-use.ts +85 -0
  27. package/templates/adapters/codex/hooks/pre-compact.ts +20 -0
  28. package/templates/adapters/codex/hooks/pre-tool-use.ts +141 -0
  29. package/templates/adapters/codex/hooks/prompt-submit.ts +38 -0
  30. package/templates/adapters/codex/hooks/review-checklist.ts +5 -0
  31. package/templates/adapters/codex/hooks/session-end.ts +19 -0
  32. package/templates/adapters/codex/hooks/session-start.ts +45 -0
  33. package/templates/adapters/codex/hooks/stop-check.ts +59 -0
  34. package/templates/adapters/codex/hooks/subagent-guard.ts +22 -0
  35. package/templates/adapters/codex/hooks/subagent-stop.ts +20 -0
  36. package/templates/adapters/codex/hooks.json +5 -5
  37. package/templates/adapters/qoder/hooks/doc-format-guard.ts +34 -0
  38. package/templates/adapters/qoder/hooks/lib/context-inject.ts +61 -0
  39. package/templates/adapters/qoder/hooks/lib/qoder-env.ts +23 -0
  40. package/templates/adapters/qoder/hooks/lib/review-checklist.ts +5 -0
  41. package/templates/adapters/qoder/hooks/notification.ts +34 -0
  42. package/templates/adapters/qoder/hooks/permission-gate.ts +26 -0
  43. package/templates/adapters/qoder/hooks/post-tool-failure.ts +30 -0
  44. package/templates/adapters/qoder/hooks/post-tool-use.ts +32 -0
  45. package/templates/adapters/qoder/hooks/pre-compact.ts +16 -0
  46. package/templates/adapters/qoder/hooks/pre-tool-use.ts +112 -0
  47. package/templates/adapters/qoder/hooks/prompt-submit.ts +66 -0
  48. package/templates/adapters/qoder/hooks/review-checklist.ts +24 -0
  49. package/templates/adapters/qoder/hooks/session-end.ts +27 -0
  50. package/templates/adapters/qoder/hooks/session-start.ts +83 -0
  51. package/templates/adapters/qoder/hooks/stop-check.ts +69 -0
  52. package/templates/adapters/qoder/hooks/subagent-guard.ts +16 -0
  53. package/templates/adapters/qoder/hooks/subagent-stop.ts +33 -0
  54. package/templates/adapters/qoder/settings.json +13 -13
  55. package/templates/adapters/trae/hooks/doc-format-guard.ts +30 -0
  56. package/templates/adapters/trae/hooks/notification.ts +22 -0
  57. package/templates/adapters/trae/hooks/permission-gate.ts +15 -0
  58. package/templates/adapters/trae/hooks/post-tool-failure.ts +14 -0
  59. package/templates/adapters/trae/hooks/post-tool-use.ts +24 -0
  60. package/templates/adapters/trae/hooks/pre-compact.ts +15 -0
  61. package/templates/adapters/trae/hooks/pre-tool-use.ts +40 -0
  62. package/templates/adapters/trae/hooks/prompt-submit.ts +29 -0
  63. package/templates/adapters/trae/hooks/review-checklist.ts +5 -0
  64. package/templates/adapters/trae/hooks/session-end.ts +16 -0
  65. package/templates/adapters/trae/hooks/session-start.ts +15 -0
  66. package/templates/adapters/trae/hooks/stop-check.ts +20 -0
  67. package/templates/adapters/trae/hooks/subagent-guard.ts +22 -0
  68. package/templates/adapters/trae/hooks/subagent-stop.ts +15 -0
  69. package/templates/adapters/trae/hooks.json +1 -1
  70. package/templates/adapters/vscode/hooks/doc-format-guard.ts +27 -0
  71. package/templates/adapters/vscode/hooks/notification.ts +22 -0
  72. package/templates/adapters/vscode/hooks/permission-gate.ts +15 -0
  73. package/templates/adapters/vscode/hooks/post-tool-failure.ts +32 -0
  74. package/templates/adapters/vscode/hooks/post-tool-use.ts +25 -0
  75. package/templates/adapters/vscode/hooks/pre-compact.ts +15 -0
  76. package/templates/adapters/vscode/hooks/pre-tool-use.ts +78 -0
  77. package/templates/adapters/vscode/hooks/prompt-submit.ts +74 -0
  78. package/templates/adapters/vscode/hooks/review-checklist.ts +5 -0
  79. package/templates/adapters/vscode/hooks/session-end.ts +16 -0
  80. package/templates/adapters/vscode/hooks/session-start.ts +24 -0
  81. package/templates/adapters/vscode/hooks/stop-check.ts +21 -0
  82. package/templates/adapters/vscode/hooks/subagent-guard.ts +21 -0
  83. package/templates/adapters/vscode/hooks/subagent-stop.ts +15 -0
  84. package/templates/core/docs/ADD-governance-claude-code.md +3 -3
  85. package/templates/core/docs/ADD-governance-codex.md +5 -5
  86. package/templates/core/docs/ADD-governance-qoder-cn.md +4 -4
  87. package/templates/core/docs/ADD-governance-trae.md +2 -2
  88. package/templates/core/docs/ADD-governance-vscode-copilot.md +21 -22
  89. package/templates/core/governance/audit-bridge.ts +47 -0
  90. package/templates/core/governance/common.ts +299 -0
  91. package/templates/core/governance/context-inject.ts +53 -0
  92. package/templates/core/governance/doc-format-guard.ts +440 -0
  93. package/templates/core/governance/notification-router.ts +62 -0
  94. package/templates/core/governance/notify.ts +66 -0
  95. package/templates/core/governance/permission-gate-router.ts +42 -0
  96. package/templates/core/governance/post-tool-failure-router.ts +56 -0
  97. package/templates/core/governance/post-tool-router.ts +212 -0
  98. package/templates/core/governance/pre-compact-guard.ts +41 -0
  99. package/templates/core/governance/pre-tool-guard.ts +309 -0
  100. package/templates/core/governance/preload-templates.ts +241 -0
  101. package/templates/core/governance/prompt-router.ts +222 -0
  102. package/templates/core/governance/review-checklist-guard.ts +186 -0
  103. package/templates/core/governance/rules.ts +720 -0
  104. package/templates/core/governance/session-end.ts +88 -0
  105. package/templates/core/governance/session-start-guard.ts +99 -0
  106. package/templates/core/governance/state-detect.ts +6 -0
  107. package/templates/core/governance/stop-router.ts +140 -0
  108. package/templates/core/governance/subagent-guard-router.ts +35 -0
  109. package/templates/core/governance/subagent-stop-router.ts +93 -0
  110. package/templates/core/governance/subagent-stop.ts +75 -0
  111. package/templates/core/governance/vocabulary.ts +109 -0
  112. package/templates/core/hooks/doc-format-guard.ts +21 -0
  113. package/templates/core/hooks/notification.ts +11 -0
  114. package/templates/core/hooks/permission-gate.ts +7 -0
  115. package/templates/core/hooks/post-tool-failure.ts +7 -0
  116. package/templates/core/hooks/post-tool-use.ts +23 -0
  117. package/templates/core/hooks/pre-compact.ts +9 -0
  118. package/templates/core/hooks/pre-tool-use.ts +30 -0
  119. package/templates/core/hooks/prompt-submit.ts +11 -0
  120. package/templates/core/hooks/review-checklist.ts +4 -0
  121. package/templates/core/hooks/session-end.ts +10 -0
  122. package/templates/core/hooks/session-start.ts +9 -0
  123. package/templates/core/hooks/stop-check.ts +14 -0
  124. package/templates/core/hooks/subagent-guard.ts +8 -0
  125. package/templates/core/hooks/subagent-stop.ts +9 -0
  126. package/templates/core/scripts/mcp-server/tools/gateway/check_rahs.ts +12 -1
  127. package/templates/core/scripts/mcp-server/tools/plan.ts +12 -2
  128. package/templates/adapters/claude/hooks/doc-format-guard.sh +0 -283
  129. package/templates/adapters/claude/hooks/lib/common.sh +0 -220
  130. package/templates/adapters/claude/hooks/lib/context-inject.sh +0 -96
  131. package/templates/adapters/claude/hooks/lib/notify.sh +0 -36
  132. package/templates/adapters/claude/hooks/lib/preload-templates.sh +0 -212
  133. package/templates/adapters/claude/hooks/lib/session-end.sh +0 -76
  134. package/templates/adapters/claude/hooks/lib/state-detect.sh +0 -13
  135. package/templates/adapters/claude/hooks/lib/subagent-stop.sh +0 -90
  136. package/templates/adapters/claude/hooks/lib/vocabulary.sh +0 -62
  137. package/templates/adapters/claude/hooks/notification.sh +0 -45
  138. package/templates/adapters/claude/hooks/permission-denied.sh +0 -42
  139. package/templates/adapters/claude/hooks/permission-gate.sh +0 -18
  140. package/templates/adapters/claude/hooks/post-tool-failure.sh +0 -10
  141. package/templates/adapters/claude/hooks/post-tool-use.sh +0 -35
  142. package/templates/adapters/claude/hooks/pre-compact.sh +0 -37
  143. package/templates/adapters/claude/hooks/pre-tool-use.sh +0 -153
  144. package/templates/adapters/claude/hooks/prompt-submit.sh +0 -99
  145. package/templates/adapters/claude/hooks/review-checklist.sh +0 -10
  146. package/templates/adapters/claude/hooks/session-end.sh +0 -21
  147. package/templates/adapters/claude/hooks/session-start.sh +0 -36
  148. package/templates/adapters/claude/hooks/stop-check.sh +0 -54
  149. package/templates/adapters/claude/hooks/stop-failure.sh +0 -44
  150. package/templates/adapters/claude/hooks/subagent-guard.sh +0 -36
  151. package/templates/adapters/claude/hooks/subagent-stop.sh +0 -20
  152. package/templates/adapters/codex/hooks/doc-format-guard.sh +0 -343
  153. package/templates/adapters/codex/hooks/lib/common.sh +0 -209
  154. package/templates/adapters/codex/hooks/lib/context-inject.sh +0 -96
  155. package/templates/adapters/codex/hooks/lib/notify.sh +0 -36
  156. package/templates/adapters/codex/hooks/lib/preload-templates.sh +0 -208
  157. package/templates/adapters/codex/hooks/lib/session-end.sh +0 -76
  158. package/templates/adapters/codex/hooks/lib/state-detect.sh +0 -8
  159. package/templates/adapters/codex/hooks/lib/subagent-stop.sh +0 -90
  160. package/templates/adapters/codex/hooks/lib/vocabulary.sh +0 -51
  161. package/templates/adapters/codex/hooks/notification.sh +0 -30
  162. package/templates/adapters/codex/hooks/permission-gate.sh +0 -18
  163. package/templates/adapters/codex/hooks/post-tool-failure.sh +0 -10
  164. package/templates/adapters/codex/hooks/post-tool-use.sh +0 -43
  165. package/templates/adapters/codex/hooks/pre-compact.sh +0 -37
  166. package/templates/adapters/codex/hooks/pre-tool-use.sh +0 -130
  167. package/templates/adapters/codex/hooks/prompt-submit.sh +0 -92
  168. package/templates/adapters/codex/hooks/review-checklist.sh +0 -10
  169. package/templates/adapters/codex/hooks/session-end.sh +0 -38
  170. package/templates/adapters/codex/hooks/session-start.sh +0 -63
  171. package/templates/adapters/codex/hooks/stop-check.sh +0 -71
  172. package/templates/adapters/codex/hooks/subagent-guard.sh +0 -15
  173. package/templates/adapters/codex/hooks/subagent-stop.sh +0 -47
  174. package/templates/adapters/qoder/hooks/doc-format-guard.sh +0 -341
  175. package/templates/adapters/qoder/hooks/lib/common.sh +0 -223
  176. package/templates/adapters/qoder/hooks/lib/context-inject.sh +0 -96
  177. package/templates/adapters/qoder/hooks/lib/notify.sh +0 -36
  178. package/templates/adapters/qoder/hooks/lib/preload-templates.sh +0 -212
  179. package/templates/adapters/qoder/hooks/lib/session-end.sh +0 -76
  180. package/templates/adapters/qoder/hooks/lib/state-detect.sh +0 -13
  181. package/templates/adapters/qoder/hooks/lib/subagent-stop.sh +0 -90
  182. package/templates/adapters/qoder/hooks/lib/vocabulary.sh +0 -62
  183. package/templates/adapters/qoder/hooks/notification.sh +0 -25
  184. package/templates/adapters/qoder/hooks/permission-gate.sh +0 -8
  185. package/templates/adapters/qoder/hooks/post-tool-failure.sh +0 -8
  186. package/templates/adapters/qoder/hooks/post-tool-use.sh +0 -121
  187. package/templates/adapters/qoder/hooks/pre-compact.sh +0 -37
  188. package/templates/adapters/qoder/hooks/pre-tool-use.sh +0 -154
  189. package/templates/adapters/qoder/hooks/prompt-submit.sh +0 -96
  190. package/templates/adapters/qoder/hooks/review-checklist.sh +0 -157
  191. package/templates/adapters/qoder/hooks/session-end.sh +0 -24
  192. package/templates/adapters/qoder/hooks/session-start.sh +0 -45
  193. package/templates/adapters/qoder/hooks/stop-check.sh +0 -59
  194. package/templates/adapters/qoder/hooks/subagent-guard.sh +0 -27
  195. package/templates/adapters/qoder/hooks/subagent-stop.sh +0 -26
  196. package/templates/adapters/trae/hooks/doc-format-guard.sh +0 -343
  197. package/templates/adapters/trae/hooks/lib/common.sh +0 -220
  198. package/templates/adapters/trae/hooks/lib/context-inject.sh +0 -96
  199. package/templates/adapters/trae/hooks/lib/notify.sh +0 -36
  200. package/templates/adapters/trae/hooks/lib/preload-templates.sh +0 -212
  201. package/templates/adapters/trae/hooks/lib/session-end.sh +0 -76
  202. package/templates/adapters/trae/hooks/lib/state-detect.sh +0 -10
  203. package/templates/adapters/trae/hooks/lib/subagent-stop.sh +0 -90
  204. package/templates/adapters/trae/hooks/lib/vocabulary.sh +0 -62
  205. package/templates/adapters/trae/hooks/notification.sh +0 -45
  206. package/templates/adapters/trae/hooks/permission-gate.sh +0 -18
  207. package/templates/adapters/trae/hooks/post-tool-failure.sh +0 -10
  208. package/templates/adapters/trae/hooks/post-tool-use.sh +0 -138
  209. package/templates/adapters/trae/hooks/pre-compact.sh +0 -37
  210. package/templates/adapters/trae/hooks/pre-tool-use.sh +0 -223
  211. package/templates/adapters/trae/hooks/prompt-submit.sh +0 -87
  212. package/templates/adapters/trae/hooks/review-checklist.sh +0 -10
  213. package/templates/adapters/trae/hooks/session-end.sh +0 -38
  214. package/templates/adapters/trae/hooks/session-start.sh +0 -53
  215. package/templates/adapters/trae/hooks/stop-check.sh +0 -54
  216. package/templates/adapters/trae/hooks/subagent-guard.sh +0 -15
  217. package/templates/adapters/trae/hooks/subagent-stop.sh +0 -47
  218. package/templates/adapters/vscode/hooks/doc-format-guard.sh +0 -282
  219. package/templates/adapters/vscode/hooks/lib/common.sh +0 -220
  220. package/templates/adapters/vscode/hooks/lib/context-inject.sh +0 -96
  221. package/templates/adapters/vscode/hooks/lib/notify.sh +0 -36
  222. package/templates/adapters/vscode/hooks/lib/preload-templates.sh +0 -212
  223. package/templates/adapters/vscode/hooks/lib/session-end.sh +0 -76
  224. package/templates/adapters/vscode/hooks/lib/state-detect.sh +0 -13
  225. package/templates/adapters/vscode/hooks/lib/subagent-stop.sh +0 -90
  226. package/templates/adapters/vscode/hooks/lib/vocabulary.sh +0 -62
  227. package/templates/adapters/vscode/hooks/notification.sh +0 -43
  228. package/templates/adapters/vscode/hooks/permission-gate.sh +0 -18
  229. package/templates/adapters/vscode/hooks/post-tool-failure.sh +0 -28
  230. package/templates/adapters/vscode/hooks/post-tool-use.sh +0 -35
  231. package/templates/adapters/vscode/hooks/pre-compact.sh +0 -37
  232. package/templates/adapters/vscode/hooks/pre-tool-use.sh +0 -153
  233. package/templates/adapters/vscode/hooks/prompt-submit.sh +0 -99
  234. package/templates/adapters/vscode/hooks/review-checklist.sh +0 -10
  235. package/templates/adapters/vscode/hooks/session-end.sh +0 -13
  236. package/templates/adapters/vscode/hooks/session-start.sh +0 -35
  237. package/templates/adapters/vscode/hooks/stop-check.sh +0 -62
  238. package/templates/adapters/vscode/hooks/subagent-guard.sh +0 -37
  239. package/templates/adapters/vscode/hooks/subagent-stop.sh +0 -12
  240. package/templates/core/hooks/doc-format-guard.sh +0 -343
  241. package/templates/core/hooks/lib/common.sh +0 -220
  242. package/templates/core/hooks/lib/context-inject.sh +0 -96
  243. package/templates/core/hooks/lib/notify.sh +0 -36
  244. package/templates/core/hooks/lib/preload-templates.sh +0 -212
  245. package/templates/core/hooks/lib/session-end.sh +0 -76
  246. package/templates/core/hooks/lib/state-detect.sh +0 -10
  247. package/templates/core/hooks/lib/subagent-stop.sh +0 -90
  248. package/templates/core/hooks/lib/vocabulary.sh +0 -62
  249. package/templates/core/hooks/notification.sh +0 -45
  250. package/templates/core/hooks/permission-gate.sh +0 -18
  251. package/templates/core/hooks/post-tool-failure.sh +0 -10
  252. package/templates/core/hooks/post-tool-use.sh +0 -138
  253. package/templates/core/hooks/pre-compact.sh +0 -37
  254. package/templates/core/hooks/pre-tool-use.sh +0 -223
  255. package/templates/core/hooks/prompt-submit.sh +0 -87
  256. package/templates/core/hooks/review-checklist.sh +0 -10
  257. package/templates/core/hooks/session-end.sh +0 -38
  258. package/templates/core/hooks/session-start.sh +0 -53
  259. package/templates/core/hooks/stop-check.sh +0 -54
  260. package/templates/core/hooks/subagent-guard.sh +0 -15
  261. package/templates/core/hooks/subagent-stop.sh +0 -47
  262. package/templates/shared/hooks-lib/common.sh +0 -22
@@ -1,104 +1,76 @@
1
1
  {
2
- "_version": "0.3.27",
3
- "adapters/claude/hooks/doc-format-guard.sh": "cde3e3cf",
4
- "adapters/claude/hooks/lib/common.sh": "6b6e875f",
5
- "adapters/claude/hooks/lib/context-inject.sh": "177d3651",
6
- "adapters/claude/hooks/lib/notify.sh": "914739e3",
7
- "adapters/claude/hooks/lib/preload-templates.sh": "d6f5a818",
8
- "adapters/claude/hooks/lib/session-end.sh": "29813cbc",
9
- "adapters/claude/hooks/lib/state-detect.sh": "4ccd5304",
10
- "adapters/claude/hooks/lib/subagent-stop.sh": "4cc1d446",
11
- "adapters/claude/hooks/lib/vocabulary.sh": "3fa4f4a7",
12
- "adapters/claude/hooks/notification.sh": "60bf9b01",
13
- "adapters/claude/hooks/permission-denied.sh": "0a0605df",
14
- "adapters/claude/hooks/permission-gate.sh": "bcca7732",
15
- "adapters/claude/hooks/post-tool-failure.sh": "669b1b65",
16
- "adapters/claude/hooks/post-tool-use.sh": "f54dd009",
17
- "adapters/claude/hooks/pre-compact.sh": "4248f84f",
18
- "adapters/claude/hooks/pre-tool-use.sh": "080f8979",
19
- "adapters/claude/hooks/prompt-submit.sh": "7b9d52a7",
20
- "adapters/claude/hooks/review-checklist.sh": "b383a983",
21
- "adapters/claude/hooks/session-end.sh": "777ae808",
22
- "adapters/claude/hooks/session-start.sh": "fd1d5e4f",
23
- "adapters/claude/hooks/stop-check.sh": "2733e4f6",
24
- "adapters/claude/hooks/stop-failure.sh": "e3d6c335",
25
- "adapters/claude/hooks/subagent-guard.sh": "5922efba",
26
- "adapters/claude/hooks/subagent-stop.sh": "0f89e28c",
2
+ "_version": "0.3.29",
3
+ "adapters/claude/hooks/doc-format-guard.ts": "2abf8013",
4
+ "adapters/claude/hooks/lib/claude-env.ts": "170b40ca",
5
+ "adapters/claude/hooks/notification.ts": "f14ca7b6",
6
+ "adapters/claude/hooks/permission-denied.ts": "8d773db9",
7
+ "adapters/claude/hooks/permission-gate.ts": "858f2dc6",
8
+ "adapters/claude/hooks/post-tool-failure.ts": "8c53fdd4",
9
+ "adapters/claude/hooks/post-tool-use.ts": "54c1840a",
10
+ "adapters/claude/hooks/pre-compact.ts": "fdb49e54",
11
+ "adapters/claude/hooks/pre-tool-use.ts": "c47cc5d5",
12
+ "adapters/claude/hooks/prompt-submit.ts": "c3847e2a",
13
+ "adapters/claude/hooks/review-checklist.ts": "94695330",
14
+ "adapters/claude/hooks/session-end.ts": "3c963eae",
15
+ "adapters/claude/hooks/session-start.ts": "3f762d49",
16
+ "adapters/claude/hooks/stop-check.ts": "967fd318",
17
+ "adapters/claude/hooks/stop-failure.ts": "b132759b",
18
+ "adapters/claude/hooks/subagent-guard.ts": "f33fc276",
19
+ "adapters/claude/hooks/subagent-stop.ts": "b016ebdf",
27
20
  "adapters/claude/mcp.json": "4ddc5120",
28
- "adapters/claude/settings.json": "067ccc45",
21
+ "adapters/claude/settings.json": "9cf9603a",
29
22
  "adapters/codex/config.toml.example": "62c03d71",
30
- "adapters/codex/hooks/doc-format-guard.sh": "b4bfdc53",
31
- "adapters/codex/hooks/lib/common.sh": "1452227a",
32
- "adapters/codex/hooks/lib/context-inject.sh": "c650d3ad",
33
- "adapters/codex/hooks/lib/notify.sh": "6138e686",
34
- "adapters/codex/hooks/lib/preload-templates.sh": "921448e8",
35
- "adapters/codex/hooks/lib/session-end.sh": "29813cbc",
36
- "adapters/codex/hooks/lib/state-detect.sh": "9e33aa27",
37
- "adapters/codex/hooks/lib/subagent-stop.sh": "4cc1d446",
38
- "adapters/codex/hooks/lib/vocabulary.sh": "16b6bf8b",
39
- "adapters/codex/hooks/notification.sh": "ab9c9d99",
40
- "adapters/codex/hooks/permission-gate.sh": "bcca7732",
41
- "adapters/codex/hooks/post-tool-failure.sh": "669b1b65",
42
- "adapters/codex/hooks/post-tool-use.sh": "d2d5824d",
43
- "adapters/codex/hooks/pre-compact.sh": "6164c007",
44
- "adapters/codex/hooks/pre-tool-use.sh": "14384656",
45
- "adapters/codex/hooks/prompt-submit.sh": "bc6616c0",
46
- "adapters/codex/hooks/review-checklist.sh": "b383a983",
47
- "adapters/codex/hooks/session-end.sh": "3cc8c346",
48
- "adapters/codex/hooks/session-start.sh": "caf87b67",
49
- "adapters/codex/hooks/stop-check.sh": "b00352dd",
50
- "adapters/codex/hooks/subagent-guard.sh": "47d04662",
51
- "adapters/codex/hooks/subagent-stop.sh": "0a34648b",
52
- "adapters/codex/hooks.json": "dcfa21dc",
23
+ "adapters/codex/hooks/doc-format-guard.ts": "566b835f",
24
+ "adapters/codex/hooks/notification.ts": "a4fd2749",
25
+ "adapters/codex/hooks/permission-gate.ts": "15af671c",
26
+ "adapters/codex/hooks/post-tool-failure.ts": "bddd1f4e",
27
+ "adapters/codex/hooks/post-tool-use.ts": "a7a2fc6c",
28
+ "adapters/codex/hooks/pre-compact.ts": "c0671f9b",
29
+ "adapters/codex/hooks/pre-tool-use.ts": "3750e60b",
30
+ "adapters/codex/hooks/prompt-submit.ts": "625cdc5e",
31
+ "adapters/codex/hooks/review-checklist.ts": "9a664173",
32
+ "adapters/codex/hooks/session-end.ts": "7fcb6f86",
33
+ "adapters/codex/hooks/session-start.ts": "4eacd44f",
34
+ "adapters/codex/hooks/stop-check.ts": "ee1801dd",
35
+ "adapters/codex/hooks/subagent-guard.ts": "e5ccf88b",
36
+ "adapters/codex/hooks/subagent-stop.ts": "a27e6a9e",
37
+ "adapters/codex/hooks.json": "3c78fb72",
53
38
  "adapters/codex/settings.json": "44136fa3",
54
- "adapters/qoder/hooks/doc-format-guard.sh": "64ce5ba8",
55
- "adapters/qoder/hooks/lib/common.sh": "afbc44c8",
56
- "adapters/qoder/hooks/lib/context-inject.sh": "177d3651",
57
- "adapters/qoder/hooks/lib/notify.sh": "914739e3",
58
- "adapters/qoder/hooks/lib/preload-templates.sh": "d6f5a818",
59
- "adapters/qoder/hooks/lib/session-end.sh": "29813cbc",
60
- "adapters/qoder/hooks/lib/state-detect.sh": "4ccd5304",
61
- "adapters/qoder/hooks/lib/subagent-stop.sh": "4cc1d446",
62
- "adapters/qoder/hooks/lib/vocabulary.sh": "3fa4f4a7",
63
- "adapters/qoder/hooks/notification.sh": "7d4efea6",
64
- "adapters/qoder/hooks/permission-gate.sh": "3bf27b1a",
65
- "adapters/qoder/hooks/post-tool-failure.sh": "8bc7a0e4",
66
- "adapters/qoder/hooks/post-tool-use.sh": "051cb6ed",
67
- "adapters/qoder/hooks/pre-compact.sh": "092fa6cf",
68
- "adapters/qoder/hooks/pre-tool-use.sh": "565cff92",
69
- "adapters/qoder/hooks/prompt-submit.sh": "c96d0823",
70
- "adapters/qoder/hooks/review-checklist.sh": "666831c8",
71
- "adapters/qoder/hooks/session-end.sh": "c50339df",
72
- "adapters/qoder/hooks/session-start.sh": "29a3e29a",
73
- "adapters/qoder/hooks/stop-check.sh": "69fa9e50",
74
- "adapters/qoder/hooks/subagent-guard.sh": "ce60eaac",
75
- "adapters/qoder/hooks/subagent-stop.sh": "5a2c78c6",
39
+ "adapters/qoder/hooks/doc-format-guard.ts": "12e360db",
40
+ "adapters/qoder/hooks/lib/context-inject.ts": "aaee941a",
41
+ "adapters/qoder/hooks/lib/qoder-env.ts": "ec8c3243",
42
+ "adapters/qoder/hooks/lib/review-checklist.ts": "23a06b37",
43
+ "adapters/qoder/hooks/notification.ts": "01a25a5b",
44
+ "adapters/qoder/hooks/permission-gate.ts": "8478e48e",
45
+ "adapters/qoder/hooks/post-tool-failure.ts": "b9439d5c",
46
+ "adapters/qoder/hooks/post-tool-use.ts": "c7e9ce26",
47
+ "adapters/qoder/hooks/pre-compact.ts": "70a8e8f8",
48
+ "adapters/qoder/hooks/pre-tool-use.ts": "2f0cab18",
49
+ "adapters/qoder/hooks/prompt-submit.ts": "9050e0cb",
50
+ "adapters/qoder/hooks/review-checklist.ts": "cf4ac191",
51
+ "adapters/qoder/hooks/session-end.ts": "e9bf7cd4",
52
+ "adapters/qoder/hooks/session-start.ts": "eeb089e0",
53
+ "adapters/qoder/hooks/stop-check.ts": "53447287",
54
+ "adapters/qoder/hooks/subagent-guard.ts": "0c10171b",
55
+ "adapters/qoder/hooks/subagent-stop.ts": "b41e08af",
76
56
  "adapters/qoder/mcp.json": "b2075957",
77
- "adapters/qoder/settings.json": "4bae3c9a",
57
+ "adapters/qoder/settings.json": "31799ee7",
78
58
  "adapters/qoder/sync-policy.json": "9cb6ff90",
79
- "adapters/trae/hooks/doc-format-guard.sh": "81f2adc9",
80
- "adapters/trae/hooks/lib/common.sh": "6b6e875f",
81
- "adapters/trae/hooks/lib/context-inject.sh": "177d3651",
82
- "adapters/trae/hooks/lib/notify.sh": "45811b53",
83
- "adapters/trae/hooks/lib/preload-templates.sh": "d6f5a818",
84
- "adapters/trae/hooks/lib/session-end.sh": "29813cbc",
85
- "adapters/trae/hooks/lib/state-detect.sh": "172b332c",
86
- "adapters/trae/hooks/lib/subagent-stop.sh": "4cc1d446",
87
- "adapters/trae/hooks/lib/vocabulary.sh": "3fa4f4a7",
88
- "adapters/trae/hooks/notification.sh": "f7aed25d",
89
- "adapters/trae/hooks/permission-gate.sh": "bcca7732",
90
- "adapters/trae/hooks/post-tool-failure.sh": "669b1b65",
91
- "adapters/trae/hooks/post-tool-use.sh": "27123aee",
92
- "adapters/trae/hooks/pre-compact.sh": "6164c007",
93
- "adapters/trae/hooks/pre-tool-use.sh": "9265b8ac",
94
- "adapters/trae/hooks/prompt-submit.sh": "a41371ea",
95
- "adapters/trae/hooks/review-checklist.sh": "b383a983",
96
- "adapters/trae/hooks/session-end.sh": "3cc8c346",
97
- "adapters/trae/hooks/session-start.sh": "aa8faa0f",
98
- "adapters/trae/hooks/stop-check.sh": "6190438c",
99
- "adapters/trae/hooks/subagent-guard.sh": "47d04662",
100
- "adapters/trae/hooks/subagent-stop.sh": "0a34648b",
101
- "adapters/trae/hooks.json": "e5045c2c",
59
+ "adapters/trae/hooks/doc-format-guard.ts": "14968f12",
60
+ "adapters/trae/hooks/notification.ts": "f0b4b606",
61
+ "adapters/trae/hooks/permission-gate.ts": "c53aedc7",
62
+ "adapters/trae/hooks/post-tool-failure.ts": "4cd97dac",
63
+ "adapters/trae/hooks/post-tool-use.ts": "7b1e2f4f",
64
+ "adapters/trae/hooks/pre-compact.ts": "5de3b0fe",
65
+ "adapters/trae/hooks/pre-tool-use.ts": "a7486c97",
66
+ "adapters/trae/hooks/prompt-submit.ts": "95ebd771",
67
+ "adapters/trae/hooks/review-checklist.ts": "343bd699",
68
+ "adapters/trae/hooks/session-end.ts": "64ce383f",
69
+ "adapters/trae/hooks/session-start.ts": "d6b4fdc7",
70
+ "adapters/trae/hooks/stop-check.ts": "b33ad5e4",
71
+ "adapters/trae/hooks/subagent-guard.ts": "eab8cbd9",
72
+ "adapters/trae/hooks/subagent-stop.ts": "5a9d53bb",
73
+ "adapters/trae/hooks.json": "e9d9eae7",
102
74
  "adapters/trae/settings.json": "ca3d163b",
103
75
  "adapters/vscode/.github/hooks/error-occurred.json": "9caa13dc",
104
76
  "adapters/vscode/.github/hooks/post-tool-use.json": "bff9d4d8",
@@ -111,59 +83,66 @@
111
83
  "adapters/vscode/.github/hooks/subagent-stop.json": "47dbdd8d",
112
84
  "adapters/vscode/.github/hooks/user-prompt-submit.json": "3a608d62",
113
85
  "adapters/vscode/extensions.json": "0f4024c1",
114
- "adapters/vscode/hooks/doc-format-guard.sh": "80d26470",
115
- "adapters/vscode/hooks/lib/common.sh": "6b6e875f",
116
- "adapters/vscode/hooks/lib/context-inject.sh": "177d3651",
117
- "adapters/vscode/hooks/lib/notify.sh": "914739e3",
118
- "adapters/vscode/hooks/lib/preload-templates.sh": "d6f5a818",
119
- "adapters/vscode/hooks/lib/session-end.sh": "29813cbc",
120
- "adapters/vscode/hooks/lib/state-detect.sh": "10b7e404",
121
- "adapters/vscode/hooks/lib/subagent-stop.sh": "4cc1d446",
122
- "adapters/vscode/hooks/lib/vocabulary.sh": "3fa4f4a7",
123
- "adapters/vscode/hooks/notification.sh": "f90b62b5",
124
- "adapters/vscode/hooks/permission-gate.sh": "bcca7732",
125
- "adapters/vscode/hooks/post-tool-failure.sh": "355cfab1",
126
- "adapters/vscode/hooks/post-tool-use.sh": "5f188718",
127
- "adapters/vscode/hooks/pre-compact.sh": "a0908f0e",
128
- "adapters/vscode/hooks/pre-tool-use.sh": "4bf878e7",
129
- "adapters/vscode/hooks/prompt-submit.sh": "38d19373",
130
- "adapters/vscode/hooks/review-checklist.sh": "b383a983",
131
- "adapters/vscode/hooks/session-end.sh": "7b407b9f",
132
- "adapters/vscode/hooks/session-start.sh": "ad724a3e",
133
- "adapters/vscode/hooks/stop-check.sh": "382328b6",
134
- "adapters/vscode/hooks/subagent-guard.sh": "5d0ea685",
135
- "adapters/vscode/hooks/subagent-stop.sh": "dd19f712",
86
+ "adapters/vscode/hooks/doc-format-guard.ts": "38e71c50",
87
+ "adapters/vscode/hooks/notification.ts": "5eed547d",
88
+ "adapters/vscode/hooks/permission-gate.ts": "ad096bc1",
89
+ "adapters/vscode/hooks/post-tool-failure.ts": "f7bc81b3",
90
+ "adapters/vscode/hooks/post-tool-use.ts": "42146851",
91
+ "adapters/vscode/hooks/pre-compact.ts": "15e4a043",
92
+ "adapters/vscode/hooks/pre-tool-use.ts": "8e8e588d",
93
+ "adapters/vscode/hooks/prompt-submit.ts": "767b13d2",
94
+ "adapters/vscode/hooks/review-checklist.ts": "f5fb4557",
95
+ "adapters/vscode/hooks/session-end.ts": "acdd9f42",
96
+ "adapters/vscode/hooks/session-start.ts": "54b262b0",
97
+ "adapters/vscode/hooks/stop-check.ts": "7a69b075",
98
+ "adapters/vscode/hooks/subagent-guard.ts": "773dc2c8",
99
+ "adapters/vscode/hooks/subagent-stop.ts": "a614b97d",
136
100
  "adapters/vscode/launch.json": "f2b79855",
137
101
  "adapters/vscode/settings.json": "7cabd00e",
138
102
  "adapters/vscode/tasks.json": "654d7fbd",
139
103
  "core/agents/add-flow-guardian.md": "c3e650d2",
140
- "core/docs/ADD-governance-claude-code.md": "56c9a3de",
141
- "core/docs/ADD-governance-codex.md": "3ac11e63",
142
- "core/docs/ADD-governance-qoder-cn.md": "1624a93a",
143
- "core/docs/ADD-governance-trae.md": "cbad6b2d",
144
- "core/docs/ADD-governance-vscode-copilot.md": "2c26c14c",
145
- "core/hooks/doc-format-guard.sh": "922732c0",
146
- "core/hooks/lib/common.sh": "6b6e875f",
147
- "core/hooks/lib/context-inject.sh": "177d3651",
148
- "core/hooks/lib/notify.sh": "45811b53",
149
- "core/hooks/lib/preload-templates.sh": "d6f5a818",
150
- "core/hooks/lib/session-end.sh": "29813cbc",
151
- "core/hooks/lib/state-detect.sh": "172b332c",
152
- "core/hooks/lib/subagent-stop.sh": "4cc1d446",
153
- "core/hooks/lib/vocabulary.sh": "3fa4f4a7",
154
- "core/hooks/notification.sh": "f7aed25d",
155
- "core/hooks/permission-gate.sh": "bcca7732",
156
- "core/hooks/post-tool-failure.sh": "669b1b65",
157
- "core/hooks/post-tool-use.sh": "27123aee",
158
- "core/hooks/pre-compact.sh": "6164c007",
159
- "core/hooks/pre-tool-use.sh": "e0c5376a",
160
- "core/hooks/prompt-submit.sh": "a41371ea",
161
- "core/hooks/review-checklist.sh": "b383a983",
162
- "core/hooks/session-end.sh": "3cc8c346",
163
- "core/hooks/session-start.sh": "aa8faa0f",
164
- "core/hooks/stop-check.sh": "6190438c",
165
- "core/hooks/subagent-guard.sh": "47d04662",
166
- "core/hooks/subagent-stop.sh": "0a34648b",
104
+ "core/docs/ADD-governance-claude-code.md": "b11fabb9",
105
+ "core/docs/ADD-governance-codex.md": "7ce9443d",
106
+ "core/docs/ADD-governance-qoder-cn.md": "54d79441",
107
+ "core/docs/ADD-governance-trae.md": "ec2976ae",
108
+ "core/docs/ADD-governance-vscode-copilot.md": "ab7885a4",
109
+ "core/governance/audit-bridge.ts": "1a0d5ccd",
110
+ "core/governance/common.ts": "37570397",
111
+ "core/governance/context-inject.ts": "8ded8188",
112
+ "core/governance/doc-format-guard.ts": "70978fc9",
113
+ "core/governance/notification-router.ts": "526ee71c",
114
+ "core/governance/notify.ts": "b7e8543f",
115
+ "core/governance/permission-gate-router.ts": "e4fa8376",
116
+ "core/governance/post-tool-failure-router.ts": "7542b2a0",
117
+ "core/governance/post-tool-router.ts": "556f9200",
118
+ "core/governance/pre-compact-guard.ts": "e1c2b2e7",
119
+ "core/governance/pre-tool-guard.ts": "c64b7382",
120
+ "core/governance/preload-templates.ts": "cfd6d3ca",
121
+ "core/governance/prompt-router.ts": "15ca2987",
122
+ "core/governance/review-checklist-guard.ts": "b24568b1",
123
+ "core/governance/rules.ts": "ffd7b843",
124
+ "core/governance/session-end.ts": "108fc3f6",
125
+ "core/governance/session-start-guard.ts": "96666e11",
126
+ "core/governance/state-detect.ts": "55afc935",
127
+ "core/governance/stop-router.ts": "b59fb651",
128
+ "core/governance/subagent-guard-router.ts": "398fb80e",
129
+ "core/governance/subagent-stop-router.ts": "f331f59f",
130
+ "core/governance/subagent-stop.ts": "56101604",
131
+ "core/governance/vocabulary.ts": "477d762b",
132
+ "core/hooks/doc-format-guard.ts": "8d9b16a9",
133
+ "core/hooks/notification.ts": "00732f1c",
134
+ "core/hooks/permission-gate.ts": "32400e27",
135
+ "core/hooks/post-tool-failure.ts": "23c76f04",
136
+ "core/hooks/post-tool-use.ts": "9f3abfa1",
137
+ "core/hooks/pre-compact.ts": "ec87ebf1",
138
+ "core/hooks/pre-tool-use.ts": "8e1ee6ea",
139
+ "core/hooks/prompt-submit.ts": "eb0aabdd",
140
+ "core/hooks/review-checklist.ts": "c7b3bb50",
141
+ "core/hooks/session-end.ts": "b390ddb0",
142
+ "core/hooks/session-start.ts": "2a3f796c",
143
+ "core/hooks/stop-check.ts": "0c3fc40a",
144
+ "core/hooks/subagent-guard.ts": "37019300",
145
+ "core/hooks/subagent-stop.ts": "9eebd61f",
167
146
  "core/prisma/add.prisma": "a543cd84",
168
147
  "core/reports/REPORT-WORKFLOW.md": "03d39b21",
169
148
  "core/reports/boundary-runtime-report.md": "6fd8053f",
@@ -232,7 +211,7 @@
232
211
  "core/scripts/mcp-server/tools/gateway/check_add_route_status.ts": "4caf552c",
233
212
  "core/scripts/mcp-server/tools/gateway/check_doc_similarity.ts": "2cba51c5",
234
213
  "core/scripts/mcp-server/tools/gateway/check_dps.ts": "92020f8e",
235
- "core/scripts/mcp-server/tools/gateway/check_rahs.ts": "71f74ba6",
214
+ "core/scripts/mcp-server/tools/gateway/check_rahs.ts": "7091a262",
236
215
  "core/scripts/mcp-server/tools/gateway/check_spec_sync.ts": "560a88ad",
237
216
  "core/scripts/mcp-server/tools/gateway/helpers.ts": "f8794a92",
238
217
  "core/scripts/mcp-server/tools/gateway/index.ts": "cffe9783",
@@ -240,7 +219,7 @@
240
219
  "core/scripts/mcp-server/tools/hitl.ts": "04b6b807",
241
220
  "core/scripts/mcp-server/tools/hook-event-report.ts": "1d825b3f",
242
221
  "core/scripts/mcp-server/tools/index.ts": "443128c8",
243
- "core/scripts/mcp-server/tools/plan.ts": "b38bbccc",
222
+ "core/scripts/mcp-server/tools/plan.ts": "d20b300c",
244
223
  "core/scripts/mcp-server/tools/quality.ts": "c4634453",
245
224
  "core/scripts/mcp-server/tools/registrar.ts": "efd81b3a",
246
225
  "core/scripts/mcp-server/tools/review.ts": "65c35e31",
@@ -297,6 +276,5 @@
297
276
  "core/templates/tasks-template.md": "2b9d0d52",
298
277
  "core/templates/tasks-template.schema.json": "2e691c8a",
299
278
  "core/tools/README.md": "26a63460",
300
- "core/vocabulary/add-governance-vocabulary.md": "ee9e2bd2",
301
- "shared/hooks-lib/common.sh": "441eee52"
279
+ "core/vocabulary/add-governance-vocabulary.md": "ee9e2bd2"
302
280
  }
@@ -0,0 +1,32 @@
1
+ // doc-format-guard.ts — schema.json 驱动的 ADD 文档格式守卫(Claude 版,Task 3.1 子类最小化)
2
+ // 继承 core DocFormatGuard;差异点仅两个(bash 原文 L87-104 逐字对照):
3
+ // ① 内容探测链: 加载 [doc.adapter_content_rules] claude 独立链(构造参数 adapterName)
4
+ // ——「## 四、Handoff」分支前置 + simple-standard-plan-template.md 映射
5
+ // ② 无算法规则段(反作弊/HITL 表/handoff 冲突不校验)——override runAlgoChecks
6
+
7
+ import { readFileSync } from "node:fs"
8
+ import { DocFormatGuard } from "../../../core/governance/doc-format-guard.js"
9
+
10
+ class ClaudeDocFormatGuard extends DocFormatGuard {
11
+ constructor(projectDir: string, magicDir: string) {
12
+ super(projectDir, magicDir, "claude")
13
+ }
14
+
15
+ /** 差异点 ②: claude 版无算法规则段 */
16
+ protected override runAlgoChecks(_templateName: string, _filePath: string, _content: string): void {
17
+ // claude 版不执行算法化规则校验(bash 原文无此段)
18
+ }
19
+ }
20
+
21
+ // ── 主入口 ──
22
+ const PROJECT_DIR = process.env.PROJECT_DIR || process.cwd()
23
+ const MAGIC_DIR = process.env.MAGIC_DIR || ".qoder"
24
+
25
+ const guard = new ClaudeDocFormatGuard(PROJECT_DIR, MAGIC_DIR)
26
+ let raw = ""
27
+ try {
28
+ raw = readFileSync(0, "utf-8")
29
+ } catch {
30
+ raw = ""
31
+ }
32
+ process.exitCode = guard.run(raw)
@@ -0,0 +1,7 @@
1
+ // lib/claude-env.ts — Claude 私有环境解析(CLAUDE_PROJECT_DIR 优先)
2
+ // 契约: claude 端所有 hook 的 PROJECT_DIR 来源 = ${CLAUDE_PROJECT_DIR:-$PWD}
3
+
4
+ /** Claude 项目目录解析(对齐 bash ${CLAUDE_PROJECT_DIR:-$PWD}) */
5
+ export function resolveClaudeProjectDir(): string {
6
+ return process.env.CLAUDE_PROJECT_DIR || process.cwd()
7
+ }
@@ -0,0 +1,24 @@
1
+ // notification.ts — Notification 入口(Claude 版,Task 3.1 继承体系)
2
+ // 继承 core NotificationRouter,命名子类 ClaudeNotificationRouter:
3
+ // ① 探测循环(.claude/.qoder/.vscode/.add)与 reviews 提醒 = 基类(bash 原文逐字对齐)
4
+ // ② 兜底 magicDir = ".claude"(构造参数注入,claude 协议差异)
5
+ // ③ 提醒文本 = 基类默认(含 Plan 前缀,与 claude bash 原文一致)
6
+ // 协议差异仅剩: PROJECT_DIR 来源 CLAUDE_PROJECT_DIR(claude-env 注入链)
7
+
8
+ import { readHookInput } from "../../../core/governance/common.js"
9
+ import { NotificationRouter } from "../../../core/governance/notification-router.js"
10
+ import { resolveClaudeProjectDir } from "./lib/claude-env.js"
11
+
12
+ class ClaudeNotificationRouter extends NotificationRouter {
13
+ /** 协议差异封装: fallbackMagicDir = ".claude"(claude 端兜底,bash 原文逐字) */
14
+ constructor(projectDir: string) {
15
+ super(projectDir, ".claude")
16
+ }
17
+
18
+ // 当前无 override(提醒文本与 core 基线一致);命名子类承载端身份 + 未来演进位
19
+ }
20
+
21
+ process.env.PROJECT_DIR = resolveClaudeProjectDir()
22
+
23
+ const input = readHookInput()
24
+ process.exit(new ClaudeNotificationRouter(process.env.PROJECT_DIR).run(input))
@@ -0,0 +1,33 @@
1
+ // permission-denied.ts — Claude Code PermissionDenied 拒绝记录 + 替代方案(Claude 独有事件)
2
+ // 治理卡位 #14: 拒绝原因记录 + 替代方案注入
3
+
4
+ import { jsonGet, readHookInput } from "../../../core/governance/common.js"
5
+
6
+ const input = readHookInput()
7
+ let toolName = jsonGet(input, "tool_name")
8
+ if (toolName === "") {
9
+ toolName = input.match(/"tool_name"\s*:\s*"([^"]*)"/)?.[1] ?? "unknown"
10
+ }
11
+ let reason = jsonGet(input, "reason")
12
+ if (reason === "") {
13
+ reason = input.match(/"reason"\s*:\s*"([^"]*)"/)?.[1] ?? "权限被拒绝"
14
+ }
15
+
16
+ // 记录拒绝
17
+ process.stderr.write(`[ADD PermissionDenied] ${toolName} 被拒绝: ${reason}\n`)
18
+
19
+ // 按工具类型提供替代建议
20
+ switch (toolName) {
21
+ case "Bash":
22
+ process.stderr.write("[ADD PermissionDenied] 建议: 使用安全的等价命令,或通过 permission-gate.sh 白名单放行\n")
23
+ break
24
+ case "Write":
25
+ case "Edit":
26
+ process.stderr.write("[ADD PermissionDenied] 建议: 检查目标路径是否在项目范围内,敏感文件(.env等)不可写入\n")
27
+ break
28
+ case "Read":
29
+ process.stderr.write("[ADD PermissionDenied] 建议: 该文件可能受读保护,尝试读取项目公有文件替代\n")
30
+ break
31
+ }
32
+
33
+ process.exit(0)
@@ -0,0 +1,12 @@
1
+ // permission-gate.ts — PermissionRequest 权限请求门禁(Claude 版,与 core 同构)
2
+
3
+ import { jsonGet, readHookInput } from "../../../core/governance/common.js"
4
+
5
+ const input = readHookInput()
6
+ const toolName = jsonGet(input, "tool_name")
7
+
8
+ // 高风险工具需要二次确认
9
+ if (toolName === "Bash" || toolName === "Write" || toolName === "Edit") {
10
+ process.stdout.write(`[ADD PermissionGate] 高风险工具: ${toolName},请确认操作。\n`)
11
+ }
12
+ process.exit(0)
@@ -0,0 +1,4 @@
1
+ // post-tool-failure.ts — PostToolUseFailure 工具失败后处理(Claude 版,与 core 同构)
2
+
3
+ process.stdout.write("[ADD PostToolFailure] 工具调用失败,请检查错误信息并修复。\n")
4
+ process.exit(0)
@@ -0,0 +1,17 @@
1
+ // post-tool-use.ts — PostToolUse 入口薄壳(Claude 版,Task 4.1 能力对齐)
2
+ // 继承 core PostToolRouter 无 override——六端实态核验(2026-08-14):
3
+ // post-tool-use 六端均为纯文本 stderr(无协议形态差异),此前 claude 的
4
+ // 「无 §1 DPS / 无 §2b-d / 增量修订文本」为 bash 时代能力漂移——统一收敛 core 全段。
5
+ // 协议差异仅剩: PROJECT_DIR 来源 CLAUDE_PROJECT_DIR(claude-env 注入链)
6
+
7
+ import { jsonGet, readHookInput } from "../../../core/governance/common.js"
8
+ import { PostToolRouter } from "../../../core/governance/post-tool-router.js"
9
+ import { resolveClaudeProjectDir } from "./lib/claude-env.js"
10
+
11
+ process.env.PROJECT_DIR = resolveClaudeProjectDir()
12
+
13
+ const input = readHookInput()
14
+ const toolName = jsonGet(input, "tool_name")
15
+ if (toolName === "") process.exit(0)
16
+
17
+ process.exit(new PostToolRouter(process.env.PROJECT_DIR, process.env.MAGIC_DIR || ".claude").run(input, toolName))
@@ -0,0 +1,10 @@
1
+ // pre-compact.ts — 上下文压缩前 ADD 状态保存(Claude 版,Task 3.1 继承体系)
2
+ // 治理逻辑: core PreCompactGuard(状态保存 + tpl 标记清理,与 core 同构)
3
+ // 协议差异: PROJECT_DIR 来源 CLAUDE_PROJECT_DIR(依赖注入)
4
+
5
+ import { PreCompactGuard } from "../../../core/governance/pre-compact-guard.js"
6
+ import { resolveClaudeProjectDir } from "./lib/claude-env.js"
7
+
8
+ process.env.PROJECT_DIR = resolveClaudeProjectDir()
9
+
10
+ process.exit(new PreCompactGuard().run())
@@ -0,0 +1,81 @@
1
+ // pre-tool-use.ts — PreToolUse 入口(Claude 版,Task 3.1 继承体系)
2
+ // 继承 core PreToolUseGuard(模板方法固化治理流程);仅 override 协议差异:
3
+ // ① 检测链: 构造传 adapterName="claude" → 加载 [guard.adapter_detectors] 独立链
4
+ // ② onBlock: 纯 stderr(无 askJson / 无 logBlock)+ exit 2
5
+ // ③ onNoPlanAllow: 输出同 core 但 exit 2(bash 原文 L73 exit $EXIT_BLOCK)→ Task 9.4.2 修复对齐 exit 0
6
+ // ④ onSensitiveDeny: 纯 stderr(无 denyJson)+ 事件 + exit 2
7
+ // ⑤ onOtherTool: ③ Read matcher 模板提示(claude 特有)
8
+
9
+ import { detectActiveAdd, jsonGet, markDevAction, readHookInput, tryResolveMagicDir } from "../../../core/governance/common.js"
10
+ import { writeHookEvent } from "../../../core/governance/notify.js"
11
+ import { PreToolUseGuard } from "../../../core/governance/pre-tool-guard.js"
12
+ import { resolveClaudeProjectDir } from "./lib/claude-env.js"
13
+
14
+ process.env.PROJECT_DIR = resolveClaudeProjectDir()
15
+ const PROJECT_DIR = process.env.PROJECT_DIR
16
+
17
+ const magicDir = tryResolveMagicDir()
18
+ if (magicDir && !process.env.MAGIC_DIR) {
19
+ process.env.MAGIC_DIR = magicDir
20
+ }
21
+ const MAGIC_DIR = process.env.MAGIC_DIR || ""
22
+
23
+ class ClaudePreToolUseGuard extends PreToolUseGuard {
24
+ constructor(projectDir: string, magicDir: string) {
25
+ super(projectDir, magicDir, "claude")
26
+ }
27
+
28
+ /** ② §A 阻断: 纯 stderr({{cmd}} 模板替换)+ 事件 + exit 2(无 askJson / logBlock) */
29
+ protected override onBlock(blocked: { reason: string; stderr: string }, command: string): number {
30
+ process.stderr.write(blocked.stderr.replaceAll("{{cmd}}", command))
31
+ writeHookEvent("pre-tool-use", "deny", command, blocked.reason, this.planKeyword, this.planStatus)
32
+ return 2
33
+ }
34
+
35
+ /** §A 放行后处理: bash 原文 L56 mark_dev_action(core 无此行为) */
36
+ protected override onSectionAPass(_command: string): void {
37
+ markDevAction()
38
+ }
39
+
40
+ /** ③ §B 无 Plan 放行: 输出同 core(提示 + allowJson + 事件)+ exit 0(Task 9.4.2 修复: bash 原文 exit 2 缺陷对齐 core) */
41
+ protected override onNoPlanAllow(toolName: string, filePath: string): number {
42
+ process.stderr.write("[ADD 提示] 正在写入 Plan/Spec/Review 文档但无活跃 ADD Plan——首次创建场景放行,建议先执行 add-paradigm 生成 Plan+add-route\n")
43
+ process.stdout.write('{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow","permissionDecisionReason":"无活跃 ADD Plan 但为 Plan/Spec/Review 写入(首次创建场景),提示而非拦截"}}\n')
44
+ writeHookEvent("pre-tool-use", "info", filePath, "无活跃 ADD Plan 下写入 Plan/Spec/Review(首次创建放行)", this.planKeyword, this.planStatus)
45
+ return 0
46
+ }
47
+
48
+ /** ④ §B 敏感文件: 纯 stderr(无 denyJson)+ 事件 + exit 2 */
49
+ protected override onSensitiveDeny(filePath: string): number {
50
+ process.stderr.write(`⛔ 敏感文件受保护,禁止写入: ${filePath}\n`)
51
+ writeHookEvent("pre-tool-use", "deny", filePath, "敏感文件受保护", this.planKeyword, this.planStatus)
52
+ return 2
53
+ }
54
+
55
+ /** ⑤ ③ Read matcher: 模板路径兜底提示(claude 特有) */
56
+ protected override onOtherTool(input: string, toolName: string): number {
57
+ if (toolName === "Read") {
58
+ const filePath = jsonGet(input, "file_path")
59
+ if (filePath.includes("templates/")) {
60
+ process.stderr.write("[ADD PreToolUse] 提示: 模板文件已通过 hook 预读到上下文,可跳过重复读取\n")
61
+ }
62
+ }
63
+ return 0
64
+ }
65
+ }
66
+
67
+ const input = readHookInput()
68
+ let toolName = jsonGet(input, "tool_name")
69
+ if (toolName === "") {
70
+ toolName = input.match(/"tool_name"\s*:\s*"([^"]*)"/)?.[1] ?? ""
71
+ }
72
+
73
+ const guard = new ClaudePreToolUseGuard(PROJECT_DIR, MAGIC_DIR)
74
+
75
+ if (toolName === "Bash") {
76
+ process.exit(guard.runSectionA(input))
77
+ } else if (toolName === "Write" || toolName === "Edit" || toolName === "SearchReplace") {
78
+ process.exit(guard.runSectionB(input, toolName))
79
+ } else {
80
+ process.exit(guard.runSectionC(input, toolName))
81
+ }