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.
- package/README.md +252 -150
- package/package.json +2 -1
- package/templates/.add-coder-src-hash.json +126 -148
- package/templates/adapters/claude/hooks/doc-format-guard.ts +32 -0
- package/templates/adapters/claude/hooks/lib/claude-env.ts +7 -0
- package/templates/adapters/claude/hooks/notification.ts +24 -0
- package/templates/adapters/claude/hooks/permission-denied.ts +33 -0
- package/templates/adapters/claude/hooks/permission-gate.ts +12 -0
- package/templates/adapters/claude/hooks/post-tool-failure.ts +4 -0
- package/templates/adapters/claude/hooks/post-tool-use.ts +17 -0
- package/templates/adapters/claude/hooks/pre-compact.ts +10 -0
- package/templates/adapters/claude/hooks/pre-tool-use.ts +81 -0
- package/templates/adapters/claude/hooks/prompt-submit.ts +82 -0
- package/templates/adapters/claude/hooks/review-checklist.ts +4 -0
- package/templates/adapters/claude/hooks/session-end.ts +10 -0
- package/templates/adapters/claude/hooks/session-start.ts +24 -0
- package/templates/adapters/claude/hooks/stop-check.ts +15 -0
- package/templates/adapters/claude/hooks/stop-failure.ts +34 -0
- package/templates/adapters/claude/hooks/subagent-guard.ts +25 -0
- package/templates/adapters/claude/hooks/subagent-stop.ts +12 -0
- package/templates/adapters/claude/settings.json +13 -13
- package/templates/adapters/codex/hooks/doc-format-guard.ts +30 -0
- package/templates/adapters/codex/hooks/notification.ts +26 -0
- package/templates/adapters/codex/hooks/permission-gate.ts +15 -0
- package/templates/adapters/codex/hooks/post-tool-failure.ts +14 -0
- package/templates/adapters/codex/hooks/post-tool-use.ts +85 -0
- package/templates/adapters/codex/hooks/pre-compact.ts +20 -0
- package/templates/adapters/codex/hooks/pre-tool-use.ts +141 -0
- package/templates/adapters/codex/hooks/prompt-submit.ts +38 -0
- package/templates/adapters/codex/hooks/review-checklist.ts +5 -0
- package/templates/adapters/codex/hooks/session-end.ts +19 -0
- package/templates/adapters/codex/hooks/session-start.ts +45 -0
- package/templates/adapters/codex/hooks/stop-check.ts +59 -0
- package/templates/adapters/codex/hooks/subagent-guard.ts +22 -0
- package/templates/adapters/codex/hooks/subagent-stop.ts +20 -0
- package/templates/adapters/codex/hooks.json +5 -5
- package/templates/adapters/qoder/hooks/doc-format-guard.ts +34 -0
- package/templates/adapters/qoder/hooks/lib/context-inject.ts +61 -0
- package/templates/adapters/qoder/hooks/lib/qoder-env.ts +23 -0
- package/templates/adapters/qoder/hooks/lib/review-checklist.ts +5 -0
- package/templates/adapters/qoder/hooks/notification.ts +34 -0
- package/templates/adapters/qoder/hooks/permission-gate.ts +26 -0
- package/templates/adapters/qoder/hooks/post-tool-failure.ts +30 -0
- package/templates/adapters/qoder/hooks/post-tool-use.ts +32 -0
- package/templates/adapters/qoder/hooks/pre-compact.ts +16 -0
- package/templates/adapters/qoder/hooks/pre-tool-use.ts +112 -0
- package/templates/adapters/qoder/hooks/prompt-submit.ts +66 -0
- package/templates/adapters/qoder/hooks/review-checklist.ts +24 -0
- package/templates/adapters/qoder/hooks/session-end.ts +27 -0
- package/templates/adapters/qoder/hooks/session-start.ts +83 -0
- package/templates/adapters/qoder/hooks/stop-check.ts +69 -0
- package/templates/adapters/qoder/hooks/subagent-guard.ts +16 -0
- package/templates/adapters/qoder/hooks/subagent-stop.ts +33 -0
- package/templates/adapters/qoder/settings.json +13 -13
- package/templates/adapters/trae/hooks/doc-format-guard.ts +30 -0
- package/templates/adapters/trae/hooks/notification.ts +22 -0
- package/templates/adapters/trae/hooks/permission-gate.ts +15 -0
- package/templates/adapters/trae/hooks/post-tool-failure.ts +14 -0
- package/templates/adapters/trae/hooks/post-tool-use.ts +24 -0
- package/templates/adapters/trae/hooks/pre-compact.ts +15 -0
- package/templates/adapters/trae/hooks/pre-tool-use.ts +40 -0
- package/templates/adapters/trae/hooks/prompt-submit.ts +29 -0
- package/templates/adapters/trae/hooks/review-checklist.ts +5 -0
- package/templates/adapters/trae/hooks/session-end.ts +16 -0
- package/templates/adapters/trae/hooks/session-start.ts +15 -0
- package/templates/adapters/trae/hooks/stop-check.ts +20 -0
- package/templates/adapters/trae/hooks/subagent-guard.ts +22 -0
- package/templates/adapters/trae/hooks/subagent-stop.ts +15 -0
- package/templates/adapters/trae/hooks.json +1 -1
- package/templates/adapters/vscode/hooks/doc-format-guard.ts +27 -0
- package/templates/adapters/vscode/hooks/notification.ts +22 -0
- package/templates/adapters/vscode/hooks/permission-gate.ts +15 -0
- package/templates/adapters/vscode/hooks/post-tool-failure.ts +32 -0
- package/templates/adapters/vscode/hooks/post-tool-use.ts +25 -0
- package/templates/adapters/vscode/hooks/pre-compact.ts +15 -0
- package/templates/adapters/vscode/hooks/pre-tool-use.ts +78 -0
- package/templates/adapters/vscode/hooks/prompt-submit.ts +74 -0
- package/templates/adapters/vscode/hooks/review-checklist.ts +5 -0
- package/templates/adapters/vscode/hooks/session-end.ts +16 -0
- package/templates/adapters/vscode/hooks/session-start.ts +24 -0
- package/templates/adapters/vscode/hooks/stop-check.ts +21 -0
- package/templates/adapters/vscode/hooks/subagent-guard.ts +21 -0
- package/templates/adapters/vscode/hooks/subagent-stop.ts +15 -0
- package/templates/core/docs/ADD-governance-claude-code.md +3 -3
- package/templates/core/docs/ADD-governance-codex.md +5 -5
- package/templates/core/docs/ADD-governance-qoder-cn.md +4 -4
- package/templates/core/docs/ADD-governance-trae.md +2 -2
- package/templates/core/docs/ADD-governance-vscode-copilot.md +21 -22
- package/templates/core/governance/audit-bridge.ts +47 -0
- package/templates/core/governance/common.ts +299 -0
- package/templates/core/governance/context-inject.ts +53 -0
- package/templates/core/governance/doc-format-guard.ts +440 -0
- package/templates/core/governance/notification-router.ts +62 -0
- package/templates/core/governance/notify.ts +66 -0
- package/templates/core/governance/permission-gate-router.ts +42 -0
- package/templates/core/governance/post-tool-failure-router.ts +56 -0
- package/templates/core/governance/post-tool-router.ts +212 -0
- package/templates/core/governance/pre-compact-guard.ts +41 -0
- package/templates/core/governance/pre-tool-guard.ts +309 -0
- package/templates/core/governance/preload-templates.ts +241 -0
- package/templates/core/governance/prompt-router.ts +222 -0
- package/templates/core/governance/review-checklist-guard.ts +186 -0
- package/templates/core/governance/rules.ts +720 -0
- package/templates/core/governance/session-end.ts +88 -0
- package/templates/core/governance/session-start-guard.ts +99 -0
- package/templates/core/governance/state-detect.ts +6 -0
- package/templates/core/governance/stop-router.ts +140 -0
- package/templates/core/governance/subagent-guard-router.ts +35 -0
- package/templates/core/governance/subagent-stop-router.ts +93 -0
- package/templates/core/governance/subagent-stop.ts +75 -0
- package/templates/core/governance/vocabulary.ts +109 -0
- package/templates/core/hooks/doc-format-guard.ts +21 -0
- package/templates/core/hooks/notification.ts +11 -0
- package/templates/core/hooks/permission-gate.ts +7 -0
- package/templates/core/hooks/post-tool-failure.ts +7 -0
- package/templates/core/hooks/post-tool-use.ts +23 -0
- package/templates/core/hooks/pre-compact.ts +9 -0
- package/templates/core/hooks/pre-tool-use.ts +30 -0
- package/templates/core/hooks/prompt-submit.ts +11 -0
- package/templates/core/hooks/review-checklist.ts +4 -0
- package/templates/core/hooks/session-end.ts +10 -0
- package/templates/core/hooks/session-start.ts +9 -0
- package/templates/core/hooks/stop-check.ts +14 -0
- package/templates/core/hooks/subagent-guard.ts +8 -0
- package/templates/core/hooks/subagent-stop.ts +9 -0
- package/templates/core/scripts/mcp-server/tools/gateway/check_rahs.ts +12 -1
- package/templates/core/scripts/mcp-server/tools/plan.ts +12 -2
- package/templates/adapters/claude/hooks/doc-format-guard.sh +0 -283
- package/templates/adapters/claude/hooks/lib/common.sh +0 -220
- package/templates/adapters/claude/hooks/lib/context-inject.sh +0 -96
- package/templates/adapters/claude/hooks/lib/notify.sh +0 -36
- package/templates/adapters/claude/hooks/lib/preload-templates.sh +0 -212
- package/templates/adapters/claude/hooks/lib/session-end.sh +0 -76
- package/templates/adapters/claude/hooks/lib/state-detect.sh +0 -13
- package/templates/adapters/claude/hooks/lib/subagent-stop.sh +0 -90
- package/templates/adapters/claude/hooks/lib/vocabulary.sh +0 -62
- package/templates/adapters/claude/hooks/notification.sh +0 -45
- package/templates/adapters/claude/hooks/permission-denied.sh +0 -42
- package/templates/adapters/claude/hooks/permission-gate.sh +0 -18
- package/templates/adapters/claude/hooks/post-tool-failure.sh +0 -10
- package/templates/adapters/claude/hooks/post-tool-use.sh +0 -35
- package/templates/adapters/claude/hooks/pre-compact.sh +0 -37
- package/templates/adapters/claude/hooks/pre-tool-use.sh +0 -153
- package/templates/adapters/claude/hooks/prompt-submit.sh +0 -99
- package/templates/adapters/claude/hooks/review-checklist.sh +0 -10
- package/templates/adapters/claude/hooks/session-end.sh +0 -21
- package/templates/adapters/claude/hooks/session-start.sh +0 -36
- package/templates/adapters/claude/hooks/stop-check.sh +0 -54
- package/templates/adapters/claude/hooks/stop-failure.sh +0 -44
- package/templates/adapters/claude/hooks/subagent-guard.sh +0 -36
- package/templates/adapters/claude/hooks/subagent-stop.sh +0 -20
- package/templates/adapters/codex/hooks/doc-format-guard.sh +0 -343
- package/templates/adapters/codex/hooks/lib/common.sh +0 -209
- package/templates/adapters/codex/hooks/lib/context-inject.sh +0 -96
- package/templates/adapters/codex/hooks/lib/notify.sh +0 -36
- package/templates/adapters/codex/hooks/lib/preload-templates.sh +0 -208
- package/templates/adapters/codex/hooks/lib/session-end.sh +0 -76
- package/templates/adapters/codex/hooks/lib/state-detect.sh +0 -8
- package/templates/adapters/codex/hooks/lib/subagent-stop.sh +0 -90
- package/templates/adapters/codex/hooks/lib/vocabulary.sh +0 -51
- package/templates/adapters/codex/hooks/notification.sh +0 -30
- package/templates/adapters/codex/hooks/permission-gate.sh +0 -18
- package/templates/adapters/codex/hooks/post-tool-failure.sh +0 -10
- package/templates/adapters/codex/hooks/post-tool-use.sh +0 -43
- package/templates/adapters/codex/hooks/pre-compact.sh +0 -37
- package/templates/adapters/codex/hooks/pre-tool-use.sh +0 -130
- package/templates/adapters/codex/hooks/prompt-submit.sh +0 -92
- package/templates/adapters/codex/hooks/review-checklist.sh +0 -10
- package/templates/adapters/codex/hooks/session-end.sh +0 -38
- package/templates/adapters/codex/hooks/session-start.sh +0 -63
- package/templates/adapters/codex/hooks/stop-check.sh +0 -71
- package/templates/adapters/codex/hooks/subagent-guard.sh +0 -15
- package/templates/adapters/codex/hooks/subagent-stop.sh +0 -47
- package/templates/adapters/qoder/hooks/doc-format-guard.sh +0 -341
- package/templates/adapters/qoder/hooks/lib/common.sh +0 -223
- package/templates/adapters/qoder/hooks/lib/context-inject.sh +0 -96
- package/templates/adapters/qoder/hooks/lib/notify.sh +0 -36
- package/templates/adapters/qoder/hooks/lib/preload-templates.sh +0 -212
- package/templates/adapters/qoder/hooks/lib/session-end.sh +0 -76
- package/templates/adapters/qoder/hooks/lib/state-detect.sh +0 -13
- package/templates/adapters/qoder/hooks/lib/subagent-stop.sh +0 -90
- package/templates/adapters/qoder/hooks/lib/vocabulary.sh +0 -62
- package/templates/adapters/qoder/hooks/notification.sh +0 -25
- package/templates/adapters/qoder/hooks/permission-gate.sh +0 -8
- package/templates/adapters/qoder/hooks/post-tool-failure.sh +0 -8
- package/templates/adapters/qoder/hooks/post-tool-use.sh +0 -121
- package/templates/adapters/qoder/hooks/pre-compact.sh +0 -37
- package/templates/adapters/qoder/hooks/pre-tool-use.sh +0 -154
- package/templates/adapters/qoder/hooks/prompt-submit.sh +0 -96
- package/templates/adapters/qoder/hooks/review-checklist.sh +0 -157
- package/templates/adapters/qoder/hooks/session-end.sh +0 -24
- package/templates/adapters/qoder/hooks/session-start.sh +0 -45
- package/templates/adapters/qoder/hooks/stop-check.sh +0 -59
- package/templates/adapters/qoder/hooks/subagent-guard.sh +0 -27
- package/templates/adapters/qoder/hooks/subagent-stop.sh +0 -26
- package/templates/adapters/trae/hooks/doc-format-guard.sh +0 -343
- package/templates/adapters/trae/hooks/lib/common.sh +0 -220
- package/templates/adapters/trae/hooks/lib/context-inject.sh +0 -96
- package/templates/adapters/trae/hooks/lib/notify.sh +0 -36
- package/templates/adapters/trae/hooks/lib/preload-templates.sh +0 -212
- package/templates/adapters/trae/hooks/lib/session-end.sh +0 -76
- package/templates/adapters/trae/hooks/lib/state-detect.sh +0 -10
- package/templates/adapters/trae/hooks/lib/subagent-stop.sh +0 -90
- package/templates/adapters/trae/hooks/lib/vocabulary.sh +0 -62
- package/templates/adapters/trae/hooks/notification.sh +0 -45
- package/templates/adapters/trae/hooks/permission-gate.sh +0 -18
- package/templates/adapters/trae/hooks/post-tool-failure.sh +0 -10
- package/templates/adapters/trae/hooks/post-tool-use.sh +0 -138
- package/templates/adapters/trae/hooks/pre-compact.sh +0 -37
- package/templates/adapters/trae/hooks/pre-tool-use.sh +0 -223
- package/templates/adapters/trae/hooks/prompt-submit.sh +0 -87
- package/templates/adapters/trae/hooks/review-checklist.sh +0 -10
- package/templates/adapters/trae/hooks/session-end.sh +0 -38
- package/templates/adapters/trae/hooks/session-start.sh +0 -53
- package/templates/adapters/trae/hooks/stop-check.sh +0 -54
- package/templates/adapters/trae/hooks/subagent-guard.sh +0 -15
- package/templates/adapters/trae/hooks/subagent-stop.sh +0 -47
- package/templates/adapters/vscode/hooks/doc-format-guard.sh +0 -282
- package/templates/adapters/vscode/hooks/lib/common.sh +0 -220
- package/templates/adapters/vscode/hooks/lib/context-inject.sh +0 -96
- package/templates/adapters/vscode/hooks/lib/notify.sh +0 -36
- package/templates/adapters/vscode/hooks/lib/preload-templates.sh +0 -212
- package/templates/adapters/vscode/hooks/lib/session-end.sh +0 -76
- package/templates/adapters/vscode/hooks/lib/state-detect.sh +0 -13
- package/templates/adapters/vscode/hooks/lib/subagent-stop.sh +0 -90
- package/templates/adapters/vscode/hooks/lib/vocabulary.sh +0 -62
- package/templates/adapters/vscode/hooks/notification.sh +0 -43
- package/templates/adapters/vscode/hooks/permission-gate.sh +0 -18
- package/templates/adapters/vscode/hooks/post-tool-failure.sh +0 -28
- package/templates/adapters/vscode/hooks/post-tool-use.sh +0 -35
- package/templates/adapters/vscode/hooks/pre-compact.sh +0 -37
- package/templates/adapters/vscode/hooks/pre-tool-use.sh +0 -153
- package/templates/adapters/vscode/hooks/prompt-submit.sh +0 -99
- package/templates/adapters/vscode/hooks/review-checklist.sh +0 -10
- package/templates/adapters/vscode/hooks/session-end.sh +0 -13
- package/templates/adapters/vscode/hooks/session-start.sh +0 -35
- package/templates/adapters/vscode/hooks/stop-check.sh +0 -62
- package/templates/adapters/vscode/hooks/subagent-guard.sh +0 -37
- package/templates/adapters/vscode/hooks/subagent-stop.sh +0 -12
- package/templates/core/hooks/doc-format-guard.sh +0 -343
- package/templates/core/hooks/lib/common.sh +0 -220
- package/templates/core/hooks/lib/context-inject.sh +0 -96
- package/templates/core/hooks/lib/notify.sh +0 -36
- package/templates/core/hooks/lib/preload-templates.sh +0 -212
- package/templates/core/hooks/lib/session-end.sh +0 -76
- package/templates/core/hooks/lib/state-detect.sh +0 -10
- package/templates/core/hooks/lib/subagent-stop.sh +0 -90
- package/templates/core/hooks/lib/vocabulary.sh +0 -62
- package/templates/core/hooks/notification.sh +0 -45
- package/templates/core/hooks/permission-gate.sh +0 -18
- package/templates/core/hooks/post-tool-failure.sh +0 -10
- package/templates/core/hooks/post-tool-use.sh +0 -138
- package/templates/core/hooks/pre-compact.sh +0 -37
- package/templates/core/hooks/pre-tool-use.sh +0 -223
- package/templates/core/hooks/prompt-submit.sh +0 -87
- package/templates/core/hooks/review-checklist.sh +0 -10
- package/templates/core/hooks/session-end.sh +0 -38
- package/templates/core/hooks/session-start.sh +0 -53
- package/templates/core/hooks/stop-check.sh +0 -54
- package/templates/core/hooks/subagent-guard.sh +0 -15
- package/templates/core/hooks/subagent-stop.sh +0 -47
- package/templates/shared/hooks-lib/common.sh +0 -22
|
@@ -1,104 +1,76 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_version": "0.3.
|
|
3
|
-
"adapters/claude/hooks/doc-format-guard.
|
|
4
|
-
"adapters/claude/hooks/lib/
|
|
5
|
-
"adapters/claude/hooks/
|
|
6
|
-
"adapters/claude/hooks/
|
|
7
|
-
"adapters/claude/hooks/
|
|
8
|
-
"adapters/claude/hooks/
|
|
9
|
-
"adapters/claude/hooks/
|
|
10
|
-
"adapters/claude/hooks/
|
|
11
|
-
"adapters/claude/hooks/
|
|
12
|
-
"adapters/claude/hooks/
|
|
13
|
-
"adapters/claude/hooks/
|
|
14
|
-
"adapters/claude/hooks/
|
|
15
|
-
"adapters/claude/hooks/
|
|
16
|
-
"adapters/claude/hooks/
|
|
17
|
-
"adapters/claude/hooks/
|
|
18
|
-
"adapters/claude/hooks/
|
|
19
|
-
"adapters/claude/hooks/
|
|
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": "
|
|
21
|
+
"adapters/claude/settings.json": "9cf9603a",
|
|
29
22
|
"adapters/codex/config.toml.example": "62c03d71",
|
|
30
|
-
"adapters/codex/hooks/doc-format-guard.
|
|
31
|
-
"adapters/codex/hooks/
|
|
32
|
-
"adapters/codex/hooks/
|
|
33
|
-
"adapters/codex/hooks/
|
|
34
|
-
"adapters/codex/hooks/
|
|
35
|
-
"adapters/codex/hooks/
|
|
36
|
-
"adapters/codex/hooks/
|
|
37
|
-
"adapters/codex/hooks/
|
|
38
|
-
"adapters/codex/hooks/
|
|
39
|
-
"adapters/codex/hooks/
|
|
40
|
-
"adapters/codex/hooks/
|
|
41
|
-
"adapters/codex/hooks/
|
|
42
|
-
"adapters/codex/hooks/
|
|
43
|
-
"adapters/codex/hooks/
|
|
44
|
-
"adapters/codex/hooks
|
|
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.
|
|
55
|
-
"adapters/qoder/hooks/lib/
|
|
56
|
-
"adapters/qoder/hooks/lib/
|
|
57
|
-
"adapters/qoder/hooks/lib/
|
|
58
|
-
"adapters/qoder/hooks/
|
|
59
|
-
"adapters/qoder/hooks/
|
|
60
|
-
"adapters/qoder/hooks/
|
|
61
|
-
"adapters/qoder/hooks/
|
|
62
|
-
"adapters/qoder/hooks/
|
|
63
|
-
"adapters/qoder/hooks/
|
|
64
|
-
"adapters/qoder/hooks/
|
|
65
|
-
"adapters/qoder/hooks/
|
|
66
|
-
"adapters/qoder/hooks/
|
|
67
|
-
"adapters/qoder/hooks/
|
|
68
|
-
"adapters/qoder/hooks/
|
|
69
|
-
"adapters/qoder/hooks/
|
|
70
|
-
"adapters/qoder/hooks/
|
|
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": "
|
|
57
|
+
"adapters/qoder/settings.json": "31799ee7",
|
|
78
58
|
"adapters/qoder/sync-policy.json": "9cb6ff90",
|
|
79
|
-
"adapters/trae/hooks/doc-format-guard.
|
|
80
|
-
"adapters/trae/hooks/
|
|
81
|
-
"adapters/trae/hooks/
|
|
82
|
-
"adapters/trae/hooks/
|
|
83
|
-
"adapters/trae/hooks/
|
|
84
|
-
"adapters/trae/hooks/
|
|
85
|
-
"adapters/trae/hooks/
|
|
86
|
-
"adapters/trae/hooks/
|
|
87
|
-
"adapters/trae/hooks/
|
|
88
|
-
"adapters/trae/hooks/
|
|
89
|
-
"adapters/trae/hooks/
|
|
90
|
-
"adapters/trae/hooks/
|
|
91
|
-
"adapters/trae/hooks/
|
|
92
|
-
"adapters/trae/hooks/
|
|
93
|
-
"adapters/trae/hooks
|
|
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.
|
|
115
|
-
"adapters/vscode/hooks/
|
|
116
|
-
"adapters/vscode/hooks/
|
|
117
|
-
"adapters/vscode/hooks/
|
|
118
|
-
"adapters/vscode/hooks/
|
|
119
|
-
"adapters/vscode/hooks/
|
|
120
|
-
"adapters/vscode/hooks/
|
|
121
|
-
"adapters/vscode/hooks/
|
|
122
|
-
"adapters/vscode/hooks/
|
|
123
|
-
"adapters/vscode/hooks/
|
|
124
|
-
"adapters/vscode/hooks/
|
|
125
|
-
"adapters/vscode/hooks/
|
|
126
|
-
"adapters/vscode/hooks/
|
|
127
|
-
"adapters/vscode/hooks/
|
|
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": "
|
|
141
|
-
"core/docs/ADD-governance-codex.md": "
|
|
142
|
-
"core/docs/ADD-governance-qoder-cn.md": "
|
|
143
|
-
"core/docs/ADD-governance-trae.md": "
|
|
144
|
-
"core/docs/ADD-governance-vscode-copilot.md": "
|
|
145
|
-
"core/
|
|
146
|
-
"core/
|
|
147
|
-
"core/
|
|
148
|
-
"core/
|
|
149
|
-
"core/
|
|
150
|
-
"core/
|
|
151
|
-
"core/
|
|
152
|
-
"core/
|
|
153
|
-
"core/
|
|
154
|
-
"core/
|
|
155
|
-
"core/
|
|
156
|
-
"core/
|
|
157
|
-
"core/
|
|
158
|
-
"core/
|
|
159
|
-
"core/
|
|
160
|
-
"core/
|
|
161
|
-
"core/
|
|
162
|
-
"core/
|
|
163
|
-
"core/
|
|
164
|
-
"core/
|
|
165
|
-
"core/
|
|
166
|
-
"core/
|
|
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": "
|
|
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": "
|
|
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,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
|
+
}
|