add-coder 0.3.33 → 0.3.34
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/package.json +1 -1
- package/templates/.add-coder-src-hash.json +70 -70
- package/templates/adapters/claude/hooks/doc-format-guard.mjs +4 -0
- package/templates/adapters/claude/hooks/notification.mjs +4 -0
- package/templates/adapters/claude/hooks/permission-denied.mjs +4 -0
- package/templates/adapters/claude/hooks/permission-gate.mjs +4 -0
- package/templates/adapters/claude/hooks/post-tool-use.mjs +4 -0
- package/templates/adapters/claude/hooks/pre-compact.mjs +4 -0
- package/templates/adapters/claude/hooks/pre-tool-use.mjs +4 -0
- package/templates/adapters/claude/hooks/prompt-submit.mjs +4 -0
- package/templates/adapters/claude/hooks/session-end.mjs +4 -0
- package/templates/adapters/claude/hooks/session-start.mjs +4 -0
- package/templates/adapters/claude/hooks/stop-check.mjs +87 -6
- package/templates/adapters/claude/hooks/stop-failure.mjs +4 -0
- package/templates/adapters/claude/hooks/subagent-guard.mjs +4 -0
- package/templates/adapters/claude/hooks/subagent-stop.mjs +4 -0
- package/templates/adapters/codex/hooks/doc-format-guard.mjs +4 -0
- package/templates/adapters/codex/hooks/notification.mjs +4 -0
- package/templates/adapters/codex/hooks/permission-gate.mjs +4 -0
- package/templates/adapters/codex/hooks/post-tool-failure.mjs +4 -0
- package/templates/adapters/codex/hooks/post-tool-use.mjs +4 -0
- package/templates/adapters/codex/hooks/pre-compact.mjs +4 -0
- package/templates/adapters/codex/hooks/pre-tool-use.mjs +4 -0
- package/templates/adapters/codex/hooks/prompt-submit.mjs +4 -0
- package/templates/adapters/codex/hooks/session-end.mjs +4 -0
- package/templates/adapters/codex/hooks/session-start.mjs +4 -0
- package/templates/adapters/codex/hooks/stop-check.mjs +87 -6
- package/templates/adapters/codex/hooks/subagent-guard.mjs +4 -0
- package/templates/adapters/codex/hooks/subagent-stop.mjs +4 -0
- package/templates/adapters/qoder/hooks/doc-format-guard.mjs +4 -0
- package/templates/adapters/qoder/hooks/notification.mjs +4 -0
- package/templates/adapters/qoder/hooks/permission-gate.mjs +4 -0
- package/templates/adapters/qoder/hooks/post-tool-failure.mjs +4 -0
- package/templates/adapters/qoder/hooks/post-tool-use.mjs +4 -0
- package/templates/adapters/qoder/hooks/pre-compact.mjs +4 -0
- package/templates/adapters/qoder/hooks/pre-tool-use.mjs +4 -0
- package/templates/adapters/qoder/hooks/prompt-submit.mjs +4 -0
- package/templates/adapters/qoder/hooks/review-checklist.mjs +4 -0
- package/templates/adapters/qoder/hooks/session-end.mjs +4 -0
- package/templates/adapters/qoder/hooks/session-start.mjs +4 -0
- package/templates/adapters/qoder/hooks/stop-check.mjs +87 -6
- package/templates/adapters/qoder/hooks/subagent-guard.mjs +4 -0
- package/templates/adapters/qoder/hooks/subagent-stop.mjs +4 -0
- package/templates/adapters/trae/hooks/doc-format-guard.mjs +4 -0
- package/templates/adapters/trae/hooks/notification.mjs +4 -0
- package/templates/adapters/trae/hooks/permission-gate.mjs +4 -0
- package/templates/adapters/trae/hooks/post-tool-failure.mjs +4 -0
- package/templates/adapters/trae/hooks/post-tool-use.mjs +4 -0
- package/templates/adapters/trae/hooks/pre-compact.mjs +4 -0
- package/templates/adapters/trae/hooks/pre-tool-use.mjs +4 -0
- package/templates/adapters/trae/hooks/prompt-submit.mjs +4 -0
- package/templates/adapters/trae/hooks/session-end.mjs +4 -0
- package/templates/adapters/trae/hooks/session-start.mjs +4 -0
- package/templates/adapters/trae/hooks/stop-check.mjs +87 -6
- package/templates/adapters/trae/hooks/subagent-guard.mjs +4 -0
- package/templates/adapters/trae/hooks/subagent-stop.mjs +4 -0
- package/templates/adapters/vscode/hooks/doc-format-guard.mjs +4 -0
- package/templates/adapters/vscode/hooks/notification.mjs +4 -0
- package/templates/adapters/vscode/hooks/permission-gate.mjs +4 -0
- package/templates/adapters/vscode/hooks/post-tool-failure.mjs +4 -0
- package/templates/adapters/vscode/hooks/post-tool-use.mjs +4 -0
- package/templates/adapters/vscode/hooks/pre-compact.mjs +4 -0
- package/templates/adapters/vscode/hooks/pre-tool-use.mjs +4 -0
- package/templates/adapters/vscode/hooks/prompt-submit.mjs +4 -0
- package/templates/adapters/vscode/hooks/session-end.mjs +4 -0
- package/templates/adapters/vscode/hooks/session-start.mjs +4 -0
- package/templates/adapters/vscode/hooks/stop-check.mjs +87 -6
- package/templates/adapters/vscode/hooks/subagent-guard.mjs +4 -0
- package/templates/adapters/vscode/hooks/subagent-stop.mjs +4 -0
- package/templates/core/governance/rules.ts +4 -0
- package/templates/core/governance/stop-router.ts +101 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "add-coder",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.34",
|
|
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": {
|
|
@@ -1,132 +1,132 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_version": "0.3.
|
|
3
|
-
"adapters/claude/hooks/doc-format-guard.mjs": "
|
|
2
|
+
"_version": "0.3.34",
|
|
3
|
+
"adapters/claude/hooks/doc-format-guard.mjs": "eff9d727",
|
|
4
4
|
"adapters/claude/hooks/doc-format-guard.ts": "2abf8013",
|
|
5
5
|
"adapters/claude/hooks/lib/claude-env.ts": "170b40ca",
|
|
6
|
-
"adapters/claude/hooks/notification.mjs": "
|
|
6
|
+
"adapters/claude/hooks/notification.mjs": "7c532eef",
|
|
7
7
|
"adapters/claude/hooks/notification.ts": "f14ca7b6",
|
|
8
|
-
"adapters/claude/hooks/permission-denied.mjs": "
|
|
8
|
+
"adapters/claude/hooks/permission-denied.mjs": "045481ba",
|
|
9
9
|
"adapters/claude/hooks/permission-denied.ts": "8d773db9",
|
|
10
|
-
"adapters/claude/hooks/permission-gate.mjs": "
|
|
10
|
+
"adapters/claude/hooks/permission-gate.mjs": "896f4246",
|
|
11
11
|
"adapters/claude/hooks/permission-gate.ts": "858f2dc6",
|
|
12
12
|
"adapters/claude/hooks/post-tool-failure.mjs": "c1490184",
|
|
13
13
|
"adapters/claude/hooks/post-tool-failure.ts": "8c53fdd4",
|
|
14
|
-
"adapters/claude/hooks/post-tool-use.mjs": "
|
|
14
|
+
"adapters/claude/hooks/post-tool-use.mjs": "83d05985",
|
|
15
15
|
"adapters/claude/hooks/post-tool-use.ts": "54c1840a",
|
|
16
|
-
"adapters/claude/hooks/pre-compact.mjs": "
|
|
16
|
+
"adapters/claude/hooks/pre-compact.mjs": "3eb17466",
|
|
17
17
|
"adapters/claude/hooks/pre-compact.ts": "fdb49e54",
|
|
18
|
-
"adapters/claude/hooks/pre-tool-use.mjs": "
|
|
18
|
+
"adapters/claude/hooks/pre-tool-use.mjs": "9301fbd9",
|
|
19
19
|
"adapters/claude/hooks/pre-tool-use.ts": "c47cc5d5",
|
|
20
|
-
"adapters/claude/hooks/prompt-submit.mjs": "
|
|
20
|
+
"adapters/claude/hooks/prompt-submit.mjs": "89895adb",
|
|
21
21
|
"adapters/claude/hooks/prompt-submit.ts": "c3847e2a",
|
|
22
22
|
"adapters/claude/hooks/review-checklist.mjs": "421384d5",
|
|
23
23
|
"adapters/claude/hooks/review-checklist.ts": "94695330",
|
|
24
|
-
"adapters/claude/hooks/session-end.mjs": "
|
|
24
|
+
"adapters/claude/hooks/session-end.mjs": "1cf8ea80",
|
|
25
25
|
"adapters/claude/hooks/session-end.ts": "3c963eae",
|
|
26
|
-
"adapters/claude/hooks/session-start.mjs": "
|
|
26
|
+
"adapters/claude/hooks/session-start.mjs": "9a526492",
|
|
27
27
|
"adapters/claude/hooks/session-start.ts": "3f762d49",
|
|
28
|
-
"adapters/claude/hooks/stop-check.mjs": "
|
|
28
|
+
"adapters/claude/hooks/stop-check.mjs": "ad933373",
|
|
29
29
|
"adapters/claude/hooks/stop-check.ts": "967fd318",
|
|
30
|
-
"adapters/claude/hooks/stop-failure.mjs": "
|
|
30
|
+
"adapters/claude/hooks/stop-failure.mjs": "57490bd2",
|
|
31
31
|
"adapters/claude/hooks/stop-failure.ts": "b132759b",
|
|
32
|
-
"adapters/claude/hooks/subagent-guard.mjs": "
|
|
32
|
+
"adapters/claude/hooks/subagent-guard.mjs": "c7cd145e",
|
|
33
33
|
"adapters/claude/hooks/subagent-guard.ts": "f33fc276",
|
|
34
|
-
"adapters/claude/hooks/subagent-stop.mjs": "
|
|
34
|
+
"adapters/claude/hooks/subagent-stop.mjs": "3b05ecc7",
|
|
35
35
|
"adapters/claude/hooks/subagent-stop.ts": "b016ebdf",
|
|
36
36
|
"adapters/claude/mcp.json": "4ddc5120",
|
|
37
37
|
"adapters/claude/settings.json": "9cf9603a",
|
|
38
38
|
"adapters/codex/config.toml.example": "62c03d71",
|
|
39
|
-
"adapters/codex/hooks/doc-format-guard.mjs": "
|
|
39
|
+
"adapters/codex/hooks/doc-format-guard.mjs": "d68873ab",
|
|
40
40
|
"adapters/codex/hooks/doc-format-guard.ts": "566b835f",
|
|
41
|
-
"adapters/codex/hooks/notification.mjs": "
|
|
41
|
+
"adapters/codex/hooks/notification.mjs": "bf95cd4c",
|
|
42
42
|
"adapters/codex/hooks/notification.ts": "a4fd2749",
|
|
43
|
-
"adapters/codex/hooks/permission-gate.mjs": "
|
|
43
|
+
"adapters/codex/hooks/permission-gate.mjs": "963774f7",
|
|
44
44
|
"adapters/codex/hooks/permission-gate.ts": "15af671c",
|
|
45
|
-
"adapters/codex/hooks/post-tool-failure.mjs": "
|
|
45
|
+
"adapters/codex/hooks/post-tool-failure.mjs": "a8e100b4",
|
|
46
46
|
"adapters/codex/hooks/post-tool-failure.ts": "bddd1f4e",
|
|
47
|
-
"adapters/codex/hooks/post-tool-use.mjs": "
|
|
47
|
+
"adapters/codex/hooks/post-tool-use.mjs": "b73c1201",
|
|
48
48
|
"adapters/codex/hooks/post-tool-use.ts": "a7a2fc6c",
|
|
49
|
-
"adapters/codex/hooks/pre-compact.mjs": "
|
|
49
|
+
"adapters/codex/hooks/pre-compact.mjs": "2c16761f",
|
|
50
50
|
"adapters/codex/hooks/pre-compact.ts": "c0671f9b",
|
|
51
|
-
"adapters/codex/hooks/pre-tool-use.mjs": "
|
|
51
|
+
"adapters/codex/hooks/pre-tool-use.mjs": "d7499d78",
|
|
52
52
|
"adapters/codex/hooks/pre-tool-use.ts": "3750e60b",
|
|
53
|
-
"adapters/codex/hooks/prompt-submit.mjs": "
|
|
53
|
+
"adapters/codex/hooks/prompt-submit.mjs": "e2df7fbc",
|
|
54
54
|
"adapters/codex/hooks/prompt-submit.ts": "625cdc5e",
|
|
55
55
|
"adapters/codex/hooks/review-checklist.mjs": "f20c9bd7",
|
|
56
56
|
"adapters/codex/hooks/review-checklist.ts": "9a664173",
|
|
57
|
-
"adapters/codex/hooks/session-end.mjs": "
|
|
57
|
+
"adapters/codex/hooks/session-end.mjs": "e876065c",
|
|
58
58
|
"adapters/codex/hooks/session-end.ts": "7fcb6f86",
|
|
59
|
-
"adapters/codex/hooks/session-start.mjs": "
|
|
59
|
+
"adapters/codex/hooks/session-start.mjs": "e528f769",
|
|
60
60
|
"adapters/codex/hooks/session-start.ts": "4eacd44f",
|
|
61
|
-
"adapters/codex/hooks/stop-check.mjs": "
|
|
61
|
+
"adapters/codex/hooks/stop-check.mjs": "c8866935",
|
|
62
62
|
"adapters/codex/hooks/stop-check.ts": "ee1801dd",
|
|
63
|
-
"adapters/codex/hooks/subagent-guard.mjs": "
|
|
63
|
+
"adapters/codex/hooks/subagent-guard.mjs": "187a94f7",
|
|
64
64
|
"adapters/codex/hooks/subagent-guard.ts": "e5ccf88b",
|
|
65
|
-
"adapters/codex/hooks/subagent-stop.mjs": "
|
|
65
|
+
"adapters/codex/hooks/subagent-stop.mjs": "5fdffadf",
|
|
66
66
|
"adapters/codex/hooks/subagent-stop.ts": "a27e6a9e",
|
|
67
67
|
"adapters/codex/hooks.json": "3c78fb72",
|
|
68
68
|
"adapters/codex/settings.json": "44136fa3",
|
|
69
|
-
"adapters/qoder/hooks/doc-format-guard.mjs": "
|
|
69
|
+
"adapters/qoder/hooks/doc-format-guard.mjs": "aface90b",
|
|
70
70
|
"adapters/qoder/hooks/doc-format-guard.ts": "12e360db",
|
|
71
71
|
"adapters/qoder/hooks/lib/context-inject.ts": "aaee941a",
|
|
72
72
|
"adapters/qoder/hooks/lib/qoder-env.ts": "ec8c3243",
|
|
73
73
|
"adapters/qoder/hooks/lib/review-checklist.ts": "23a06b37",
|
|
74
|
-
"adapters/qoder/hooks/notification.mjs": "
|
|
74
|
+
"adapters/qoder/hooks/notification.mjs": "422ada5f",
|
|
75
75
|
"adapters/qoder/hooks/notification.ts": "01a25a5b",
|
|
76
|
-
"adapters/qoder/hooks/permission-gate.mjs": "
|
|
76
|
+
"adapters/qoder/hooks/permission-gate.mjs": "e407b3d9",
|
|
77
77
|
"adapters/qoder/hooks/permission-gate.ts": "8478e48e",
|
|
78
|
-
"adapters/qoder/hooks/post-tool-failure.mjs": "
|
|
78
|
+
"adapters/qoder/hooks/post-tool-failure.mjs": "e8b486b6",
|
|
79
79
|
"adapters/qoder/hooks/post-tool-failure.ts": "b9439d5c",
|
|
80
|
-
"adapters/qoder/hooks/post-tool-use.mjs": "
|
|
80
|
+
"adapters/qoder/hooks/post-tool-use.mjs": "2af854fd",
|
|
81
81
|
"adapters/qoder/hooks/post-tool-use.ts": "c7e9ce26",
|
|
82
|
-
"adapters/qoder/hooks/pre-compact.mjs": "
|
|
82
|
+
"adapters/qoder/hooks/pre-compact.mjs": "3f8a1fa7",
|
|
83
83
|
"adapters/qoder/hooks/pre-compact.ts": "70a8e8f8",
|
|
84
|
-
"adapters/qoder/hooks/pre-tool-use.mjs": "
|
|
84
|
+
"adapters/qoder/hooks/pre-tool-use.mjs": "ab662bcf",
|
|
85
85
|
"adapters/qoder/hooks/pre-tool-use.ts": "2f0cab18",
|
|
86
|
-
"adapters/qoder/hooks/prompt-submit.mjs": "
|
|
86
|
+
"adapters/qoder/hooks/prompt-submit.mjs": "c9eee559",
|
|
87
87
|
"adapters/qoder/hooks/prompt-submit.ts": "9050e0cb",
|
|
88
|
-
"adapters/qoder/hooks/review-checklist.mjs": "
|
|
88
|
+
"adapters/qoder/hooks/review-checklist.mjs": "04b300e4",
|
|
89
89
|
"adapters/qoder/hooks/review-checklist.ts": "cf4ac191",
|
|
90
|
-
"adapters/qoder/hooks/session-end.mjs": "
|
|
90
|
+
"adapters/qoder/hooks/session-end.mjs": "eee2e434",
|
|
91
91
|
"adapters/qoder/hooks/session-end.ts": "e9bf7cd4",
|
|
92
|
-
"adapters/qoder/hooks/session-start.mjs": "
|
|
92
|
+
"adapters/qoder/hooks/session-start.mjs": "21b88d24",
|
|
93
93
|
"adapters/qoder/hooks/session-start.ts": "eeb089e0",
|
|
94
|
-
"adapters/qoder/hooks/stop-check.mjs": "
|
|
94
|
+
"adapters/qoder/hooks/stop-check.mjs": "b010c028",
|
|
95
95
|
"adapters/qoder/hooks/stop-check.ts": "53447287",
|
|
96
|
-
"adapters/qoder/hooks/subagent-guard.mjs": "
|
|
96
|
+
"adapters/qoder/hooks/subagent-guard.mjs": "ee1a1732",
|
|
97
97
|
"adapters/qoder/hooks/subagent-guard.ts": "0c10171b",
|
|
98
|
-
"adapters/qoder/hooks/subagent-stop.mjs": "
|
|
98
|
+
"adapters/qoder/hooks/subagent-stop.mjs": "8fe4dbd0",
|
|
99
99
|
"adapters/qoder/hooks/subagent-stop.ts": "b41e08af",
|
|
100
100
|
"adapters/qoder/mcp.json": "b2075957",
|
|
101
101
|
"adapters/qoder/settings.json": "31799ee7",
|
|
102
102
|
"adapters/qoder/sync-policy.json": "9cb6ff90",
|
|
103
|
-
"adapters/trae/hooks/doc-format-guard.mjs": "
|
|
103
|
+
"adapters/trae/hooks/doc-format-guard.mjs": "f1cb0b3b",
|
|
104
104
|
"adapters/trae/hooks/doc-format-guard.ts": "14968f12",
|
|
105
|
-
"adapters/trae/hooks/notification.mjs": "
|
|
105
|
+
"adapters/trae/hooks/notification.mjs": "495c8c2d",
|
|
106
106
|
"adapters/trae/hooks/notification.ts": "f0b4b606",
|
|
107
|
-
"adapters/trae/hooks/permission-gate.mjs": "
|
|
107
|
+
"adapters/trae/hooks/permission-gate.mjs": "fd7e284b",
|
|
108
108
|
"adapters/trae/hooks/permission-gate.ts": "c53aedc7",
|
|
109
|
-
"adapters/trae/hooks/post-tool-failure.mjs": "
|
|
109
|
+
"adapters/trae/hooks/post-tool-failure.mjs": "834b0545",
|
|
110
110
|
"adapters/trae/hooks/post-tool-failure.ts": "4cd97dac",
|
|
111
|
-
"adapters/trae/hooks/post-tool-use.mjs": "
|
|
111
|
+
"adapters/trae/hooks/post-tool-use.mjs": "631d84c8",
|
|
112
112
|
"adapters/trae/hooks/post-tool-use.ts": "7b1e2f4f",
|
|
113
|
-
"adapters/trae/hooks/pre-compact.mjs": "
|
|
113
|
+
"adapters/trae/hooks/pre-compact.mjs": "6c0c3e68",
|
|
114
114
|
"adapters/trae/hooks/pre-compact.ts": "5de3b0fe",
|
|
115
|
-
"adapters/trae/hooks/pre-tool-use.mjs": "
|
|
115
|
+
"adapters/trae/hooks/pre-tool-use.mjs": "8075f74e",
|
|
116
116
|
"adapters/trae/hooks/pre-tool-use.ts": "a7486c97",
|
|
117
|
-
"adapters/trae/hooks/prompt-submit.mjs": "
|
|
117
|
+
"adapters/trae/hooks/prompt-submit.mjs": "9e47de7e",
|
|
118
118
|
"adapters/trae/hooks/prompt-submit.ts": "95ebd771",
|
|
119
119
|
"adapters/trae/hooks/review-checklist.mjs": "491dd85e",
|
|
120
120
|
"adapters/trae/hooks/review-checklist.ts": "343bd699",
|
|
121
|
-
"adapters/trae/hooks/session-end.mjs": "
|
|
121
|
+
"adapters/trae/hooks/session-end.mjs": "5d68ad3f",
|
|
122
122
|
"adapters/trae/hooks/session-end.ts": "64ce383f",
|
|
123
|
-
"adapters/trae/hooks/session-start.mjs": "
|
|
123
|
+
"adapters/trae/hooks/session-start.mjs": "d582fe06",
|
|
124
124
|
"adapters/trae/hooks/session-start.ts": "d6b4fdc7",
|
|
125
|
-
"adapters/trae/hooks/stop-check.mjs": "
|
|
125
|
+
"adapters/trae/hooks/stop-check.mjs": "a4335a46",
|
|
126
126
|
"adapters/trae/hooks/stop-check.ts": "b33ad5e4",
|
|
127
|
-
"adapters/trae/hooks/subagent-guard.mjs": "
|
|
127
|
+
"adapters/trae/hooks/subagent-guard.mjs": "20f1d490",
|
|
128
128
|
"adapters/trae/hooks/subagent-guard.ts": "eab8cbd9",
|
|
129
|
-
"adapters/trae/hooks/subagent-stop.mjs": "
|
|
129
|
+
"adapters/trae/hooks/subagent-stop.mjs": "5db57f6e",
|
|
130
130
|
"adapters/trae/hooks/subagent-stop.ts": "5a9d53bb",
|
|
131
131
|
"adapters/trae/hooks.json": "e9d9eae7",
|
|
132
132
|
"adapters/trae/settings.json": "ca3d163b",
|
|
@@ -141,33 +141,33 @@
|
|
|
141
141
|
"adapters/vscode/.github/hooks/subagent-stop.json": "47dbdd8d",
|
|
142
142
|
"adapters/vscode/.github/hooks/user-prompt-submit.json": "3a608d62",
|
|
143
143
|
"adapters/vscode/extensions.json": "0f4024c1",
|
|
144
|
-
"adapters/vscode/hooks/doc-format-guard.mjs": "
|
|
144
|
+
"adapters/vscode/hooks/doc-format-guard.mjs": "f8882228",
|
|
145
145
|
"adapters/vscode/hooks/doc-format-guard.ts": "38e71c50",
|
|
146
|
-
"adapters/vscode/hooks/notification.mjs": "
|
|
146
|
+
"adapters/vscode/hooks/notification.mjs": "96883766",
|
|
147
147
|
"adapters/vscode/hooks/notification.ts": "5eed547d",
|
|
148
|
-
"adapters/vscode/hooks/permission-gate.mjs": "
|
|
148
|
+
"adapters/vscode/hooks/permission-gate.mjs": "2b839bef",
|
|
149
149
|
"adapters/vscode/hooks/permission-gate.ts": "ad096bc1",
|
|
150
|
-
"adapters/vscode/hooks/post-tool-failure.mjs": "
|
|
150
|
+
"adapters/vscode/hooks/post-tool-failure.mjs": "14faa5a1",
|
|
151
151
|
"adapters/vscode/hooks/post-tool-failure.ts": "f7bc81b3",
|
|
152
|
-
"adapters/vscode/hooks/post-tool-use.mjs": "
|
|
152
|
+
"adapters/vscode/hooks/post-tool-use.mjs": "03cfdbee",
|
|
153
153
|
"adapters/vscode/hooks/post-tool-use.ts": "42146851",
|
|
154
|
-
"adapters/vscode/hooks/pre-compact.mjs": "
|
|
154
|
+
"adapters/vscode/hooks/pre-compact.mjs": "494dfd18",
|
|
155
155
|
"adapters/vscode/hooks/pre-compact.ts": "15e4a043",
|
|
156
|
-
"adapters/vscode/hooks/pre-tool-use.mjs": "
|
|
156
|
+
"adapters/vscode/hooks/pre-tool-use.mjs": "4887a38f",
|
|
157
157
|
"adapters/vscode/hooks/pre-tool-use.ts": "8e8e588d",
|
|
158
|
-
"adapters/vscode/hooks/prompt-submit.mjs": "
|
|
158
|
+
"adapters/vscode/hooks/prompt-submit.mjs": "4cbc9d27",
|
|
159
159
|
"adapters/vscode/hooks/prompt-submit.ts": "767b13d2",
|
|
160
160
|
"adapters/vscode/hooks/review-checklist.mjs": "6061e7fb",
|
|
161
161
|
"adapters/vscode/hooks/review-checklist.ts": "f5fb4557",
|
|
162
|
-
"adapters/vscode/hooks/session-end.mjs": "
|
|
162
|
+
"adapters/vscode/hooks/session-end.mjs": "dc805cd7",
|
|
163
163
|
"adapters/vscode/hooks/session-end.ts": "acdd9f42",
|
|
164
|
-
"adapters/vscode/hooks/session-start.mjs": "
|
|
164
|
+
"adapters/vscode/hooks/session-start.mjs": "a803d6e5",
|
|
165
165
|
"adapters/vscode/hooks/session-start.ts": "54b262b0",
|
|
166
|
-
"adapters/vscode/hooks/stop-check.mjs": "
|
|
166
|
+
"adapters/vscode/hooks/stop-check.mjs": "b7d81215",
|
|
167
167
|
"adapters/vscode/hooks/stop-check.ts": "7a69b075",
|
|
168
|
-
"adapters/vscode/hooks/subagent-guard.mjs": "
|
|
168
|
+
"adapters/vscode/hooks/subagent-guard.mjs": "3b6b6905",
|
|
169
169
|
"adapters/vscode/hooks/subagent-guard.ts": "773dc2c8",
|
|
170
|
-
"adapters/vscode/hooks/subagent-stop.mjs": "
|
|
170
|
+
"adapters/vscode/hooks/subagent-stop.mjs": "126adc68",
|
|
171
171
|
"adapters/vscode/hooks/subagent-stop.ts": "a614b97d",
|
|
172
172
|
"adapters/vscode/launch.json": "f2b79855",
|
|
173
173
|
"adapters/vscode/settings.json": "7cabd00e",
|
|
@@ -192,11 +192,11 @@
|
|
|
192
192
|
"core/governance/preload-templates.ts": "cfd6d3ca",
|
|
193
193
|
"core/governance/prompt-router.ts": "15ca2987",
|
|
194
194
|
"core/governance/review-checklist-guard.ts": "b24568b1",
|
|
195
|
-
"core/governance/rules.ts": "
|
|
195
|
+
"core/governance/rules.ts": "e6b261b7",
|
|
196
196
|
"core/governance/session-end.ts": "108fc3f6",
|
|
197
197
|
"core/governance/session-start-guard.ts": "96666e11",
|
|
198
198
|
"core/governance/state-detect.ts": "55afc935",
|
|
199
|
-
"core/governance/stop-router.ts": "
|
|
199
|
+
"core/governance/stop-router.ts": "af93ae1c",
|
|
200
200
|
"core/governance/subagent-guard-router.ts": "398fb80e",
|
|
201
201
|
"core/governance/subagent-stop-router.ts": "f331f59f",
|
|
202
202
|
"core/governance/subagent-stop.ts": "56101604",
|
|
@@ -192,6 +192,10 @@ var protocol = {
|
|
|
192
192
|
".trae",
|
|
193
193
|
".codex"
|
|
194
194
|
]
|
|
195
|
+
},
|
|
196
|
+
"stop": {
|
|
197
|
+
"max_prompt_per_context": 3,
|
|
198
|
+
"window_minutes": 30
|
|
195
199
|
}
|
|
196
200
|
};
|
|
197
201
|
|
|
@@ -402,6 +406,10 @@ function buildStopContext(quadrant, info) {
|
|
|
402
406
|
}
|
|
403
407
|
|
|
404
408
|
// templates/core/governance/stop-router.ts
|
|
409
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
410
|
+
import { existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
411
|
+
import { tmpdir } from "node:os";
|
|
412
|
+
import { join as join2 } from "node:path";
|
|
405
413
|
var StopRouter = class {
|
|
406
414
|
/** 主路由:返回 exit code(0 放行 / 2 阻断) */
|
|
407
415
|
run() {
|
|
@@ -430,14 +438,20 @@ var StopRouter = class {
|
|
|
430
438
|
}
|
|
431
439
|
// ─────────────────────────── 扩展点 ───────────────────────────
|
|
432
440
|
/**
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
441
|
+
* Q4 验收决策(双维度组合——2026-08-14 Task 9.4.4④ 上提,回流: I2):
|
|
442
|
+
* 维度 0(新增,临时方案): 弹框频控——同项目同 Plan 窗口内达上限 → 降级放行
|
|
443
|
+
* 维度 1(前置): DB 任务进度(step = done/total,数值且 done<total → 未完成阻断提示)
|
|
444
|
+
* 维度 2: checklist 质量(checkAddCompleteness 未闭环 → 阻断)
|
|
445
|
+
* 互补非替代——codex 原 DB 进度分流语义上提 core,core checklist 质量语义保留。
|
|
446
|
+
*/
|
|
438
447
|
q4Check(plan, rounds, step, handoff, addRoute) {
|
|
439
|
-
void plan;
|
|
440
448
|
void rounds;
|
|
449
|
+
const limited = this.stopPromptLimited(plan);
|
|
450
|
+
if (limited) {
|
|
451
|
+
process.stderr.write(`[ADD Stop] \u5DF2\u8FBE\u672C Plan \u5F39\u6846\u4E0A\u9650(${this.stopPromptMax()})\uFF0C\u672C\u6B21\u653E\u884C\u3002\u8BF7\u5728\u540E\u7EED\u5B9E\u65BD\u4E2D\u5B8C\u6210\u9A8C\u6536\u95ED\u73AF\uFF08devlog + handoff\uFF09\u540E\u505C\u6B62\u3002
|
|
452
|
+
`);
|
|
453
|
+
return 0;
|
|
454
|
+
}
|
|
441
455
|
const [donePart, totalPart] = step.split("/");
|
|
442
456
|
if (/^\d+$/.test(donePart) && /^\d+$/.test(totalPart) && Number(donePart) < Number(totalPart)) {
|
|
443
457
|
return this.emitQ4Unclosed(
|
|
@@ -454,6 +468,73 @@ var StopRouter = class {
|
|
|
454
468
|
clearDevAction();
|
|
455
469
|
return this.emitQ4Pass();
|
|
456
470
|
}
|
|
471
|
+
// ── 弹框频控(临时方案,规则真源: hook-protocol-rules.toml [protocol.stop])──
|
|
472
|
+
// 计数隔离: 文件级 = PROJECT_DIR md5(跨项目不互扰);key 级 = planName(同项目跨 Plan 不互扰)
|
|
473
|
+
// 故障降级: 哨兵读/写异常 → fail-open 放行(不阻塞主流程)
|
|
474
|
+
/** 哨兵记录:同一项目同一 Plan 的弹框计数 */
|
|
475
|
+
stopPromptMax() {
|
|
476
|
+
const cfg = protocol.stop;
|
|
477
|
+
return cfg?.max_prompt_per_context ?? 3;
|
|
478
|
+
}
|
|
479
|
+
/** 哨兵窗口(毫秒) */
|
|
480
|
+
stopPromptWindowMs() {
|
|
481
|
+
const cfg = protocol.stop;
|
|
482
|
+
return (cfg?.window_minutes ?? 30) * 6e4;
|
|
483
|
+
}
|
|
484
|
+
/** 哨兵文件路径(项目隔离:PROJECT_DIR md5) */
|
|
485
|
+
stopSentinelPath() {
|
|
486
|
+
const projectDir = process.env.PROJECT_DIR || process.env.QODER_PROJECT_DIR || process.env.QODERCN_PROJECT_DIR || process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
487
|
+
const md5 = createHash2("md5").update(projectDir).digest("hex").slice(0, 8);
|
|
488
|
+
return join2(tmpdir(), `add_stop_${md5}.json`);
|
|
489
|
+
}
|
|
490
|
+
/** 写哨兵(失败静默,fail-open) */
|
|
491
|
+
writeStopPromptSentinel(data) {
|
|
492
|
+
try {
|
|
493
|
+
writeFileSync2(this.stopSentinelPath(), JSON.stringify(data), "utf-8");
|
|
494
|
+
} catch {
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* 频控判定:返回 true = 已达上限应放行(不弹框)
|
|
499
|
+
* 生成态缺失 protocol.stop(TOML 未同步)→ 跳过频控保持既有行为(生成链幂等校验兜底)
|
|
500
|
+
*/
|
|
501
|
+
stopPromptLimited(plan) {
|
|
502
|
+
try {
|
|
503
|
+
const stopCfg = protocol.stop;
|
|
504
|
+
if (!stopCfg) return false;
|
|
505
|
+
const max = this.stopPromptMax();
|
|
506
|
+
const windowMs = this.stopPromptWindowMs();
|
|
507
|
+
const path3 = this.stopSentinelPath();
|
|
508
|
+
let data = {};
|
|
509
|
+
if (existsSync2(path3)) {
|
|
510
|
+
try {
|
|
511
|
+
data = JSON.parse(readFileSync2(path3, "utf-8")) ?? {};
|
|
512
|
+
} catch {
|
|
513
|
+
return true;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
const now = Date.now();
|
|
517
|
+
const entry = data[plan];
|
|
518
|
+
if (!entry) {
|
|
519
|
+
data[plan] = { count: 1, lastPromptAt: now };
|
|
520
|
+
this.writeStopPromptSentinel(data);
|
|
521
|
+
return false;
|
|
522
|
+
}
|
|
523
|
+
if (now - entry.lastPromptAt > windowMs) {
|
|
524
|
+
data[plan] = { count: 1, lastPromptAt: now };
|
|
525
|
+
this.writeStopPromptSentinel(data);
|
|
526
|
+
return false;
|
|
527
|
+
}
|
|
528
|
+
if (entry.count >= max) {
|
|
529
|
+
return true;
|
|
530
|
+
}
|
|
531
|
+
data[plan] = { count: entry.count + 1, lastPromptAt: now };
|
|
532
|
+
this.writeStopPromptSentinel(data);
|
|
533
|
+
return false;
|
|
534
|
+
} catch {
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
457
538
|
/** Q0: DB 不可用(core: stderr + 2) */
|
|
458
539
|
emitQ0(reason) {
|
|
459
540
|
process.stderr.write(
|