@intutic/sync-daemon 1.10.0 → 1.10.1
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 +2 -2
- package/dist/agentReporter.d.ts +205 -0
- package/dist/agentReporter.d.ts.map +1 -0
- package/dist/agentReporter.js +394 -0
- package/dist/agentReporter.js.map +1 -0
- package/dist/configReader.d.ts +39 -2
- package/dist/configReader.d.ts.map +1 -1
- package/dist/configReader.js +56 -2
- package/dist/configReader.js.map +1 -1
- package/dist/configWriter.d.ts +51 -1
- package/dist/configWriter.d.ts.map +1 -1
- package/dist/configWriter.js +490 -63
- package/dist/configWriter.js.map +1 -1
- package/dist/harness/antigravityHooks.d.ts.map +1 -1
- package/dist/harness/antigravityHooks.js +33 -55
- package/dist/harness/antigravityHooks.js.map +1 -1
- package/dist/harness/claudeCodeHooks.d.ts +47 -13
- package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
- package/dist/harness/claudeCodeHooks.js +316 -54
- package/dist/harness/claudeCodeHooks.js.map +1 -1
- package/dist/harness/claudeDesktopHooks.d.ts.map +1 -1
- package/dist/harness/claudeDesktopHooks.js +35 -48
- package/dist/harness/claudeDesktopHooks.js.map +1 -1
- package/dist/harness/clineHooks.d.ts.map +1 -1
- package/dist/harness/clineHooks.js +42 -34
- package/dist/harness/clineHooks.js.map +1 -1
- package/dist/harness/codexHooks.d.ts +36 -0
- package/dist/harness/codexHooks.d.ts.map +1 -0
- package/dist/harness/codexHooks.js +227 -0
- package/dist/harness/codexHooks.js.map +1 -0
- package/dist/harness/continueHooks.d.ts +45 -5
- package/dist/harness/continueHooks.d.ts.map +1 -1
- package/dist/harness/continueHooks.js +225 -5
- package/dist/harness/continueHooks.js.map +1 -1
- package/dist/harness/cursorHooks.d.ts +31 -0
- package/dist/harness/cursorHooks.d.ts.map +1 -1
- package/dist/harness/cursorHooks.js +78 -49
- package/dist/harness/cursorHooks.js.map +1 -1
- package/dist/harness/dshHooks.d.ts +198 -0
- package/dist/harness/dshHooks.d.ts.map +1 -0
- package/dist/harness/dshHooks.js +569 -0
- package/dist/harness/dshHooks.js.map +1 -0
- package/dist/harness/gateBody.d.ts +422 -0
- package/dist/harness/gateBody.d.ts.map +1 -0
- package/dist/harness/gateBody.js +1816 -0
- package/dist/harness/gateBody.js.map +1 -0
- package/dist/harness/gateKind.d.ts +164 -0
- package/dist/harness/gateKind.d.ts.map +1 -0
- package/dist/harness/gateKind.js +143 -0
- package/dist/harness/gateKind.js.map +1 -0
- package/dist/harness/githubCopilotHooks.d.ts +54 -0
- package/dist/harness/githubCopilotHooks.d.ts.map +1 -0
- package/dist/harness/githubCopilotHooks.js +218 -0
- package/dist/harness/githubCopilotHooks.js.map +1 -0
- package/dist/harness/gooseHooks.d.ts.map +1 -1
- package/dist/harness/gooseHooks.js +67 -37
- package/dist/harness/gooseHooks.js.map +1 -1
- package/dist/harness/grokHooks.d.ts +77 -0
- package/dist/harness/grokHooks.d.ts.map +1 -0
- package/dist/harness/grokHooks.js +350 -0
- package/dist/harness/grokHooks.js.map +1 -0
- package/dist/harness/hermesHooks.d.ts.map +1 -1
- package/dist/harness/hermesHooks.js +26 -55
- package/dist/harness/hermesHooks.js.map +1 -1
- package/dist/harness/holdRedaction.d.ts +69 -0
- package/dist/harness/holdRedaction.d.ts.map +1 -0
- package/dist/harness/holdRedaction.js +211 -0
- package/dist/harness/holdRedaction.js.map +1 -0
- package/dist/harness/jetbrainsXmlConfig.d.ts +51 -0
- package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -0
- package/dist/harness/jetbrainsXmlConfig.js +151 -0
- package/dist/harness/jetbrainsXmlConfig.js.map +1 -0
- package/dist/harness/mcpAutoWrite.d.ts +100 -3
- package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
- package/dist/harness/mcpAutoWrite.js +712 -90
- package/dist/harness/mcpAutoWrite.js.map +1 -1
- package/dist/harness/museHooks.d.ts +53 -0
- package/dist/harness/museHooks.d.ts.map +1 -0
- package/dist/harness/museHooks.js +273 -0
- package/dist/harness/museHooks.js.map +1 -0
- package/dist/harness/n8nHooks.d.ts +25 -9
- package/dist/harness/n8nHooks.d.ts.map +1 -1
- package/dist/harness/n8nHooks.js +174 -9
- package/dist/harness/n8nHooks.js.map +1 -1
- package/dist/harness/openCodeHooks.d.ts +93 -0
- package/dist/harness/openCodeHooks.d.ts.map +1 -0
- package/dist/harness/openCodeHooks.js +248 -0
- package/dist/harness/openCodeHooks.js.map +1 -0
- package/dist/harness/openWebuiHooks.d.ts.map +1 -1
- package/dist/harness/openWebuiHooks.js +56 -11
- package/dist/harness/openWebuiHooks.js.map +1 -1
- package/dist/harness/openclawHooks.d.ts.map +1 -1
- package/dist/harness/openclawHooks.js +30 -54
- package/dist/harness/openclawHooks.js.map +1 -1
- package/dist/harness/openhandsHooks.d.ts.map +1 -1
- package/dist/harness/openhandsHooks.js +35 -41
- package/dist/harness/openhandsHooks.js.map +1 -1
- package/dist/harness/piHooks.d.ts.map +1 -1
- package/dist/harness/piHooks.js +31 -58
- package/dist/harness/piHooks.js.map +1 -1
- package/dist/harness/protectedPaths.d.ts +353 -0
- package/dist/harness/protectedPaths.d.ts.map +1 -0
- package/dist/harness/protectedPaths.js +805 -0
- package/dist/harness/protectedPaths.js.map +1 -0
- package/dist/harness/rooCodeHooks.d.ts.map +1 -1
- package/dist/harness/rooCodeHooks.js +34 -48
- package/dist/harness/rooCodeHooks.js.map +1 -1
- package/dist/harness/windsurfHooks.d.ts +72 -0
- package/dist/harness/windsurfHooks.d.ts.map +1 -1
- package/dist/harness/windsurfHooks.js +172 -58
- package/dist/harness/windsurfHooks.js.map +1 -1
- package/dist/harness/windsurfJetBrainsProxy.d.ts +78 -0
- package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -0
- package/dist/harness/windsurfJetBrainsProxy.js +159 -0
- package/dist/harness/windsurfJetBrainsProxy.js.map +1 -0
- package/dist/hashReporter.js +1 -1
- package/dist/hashReporter.js.map +1 -1
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/integrityStore.d.ts +0 -8
- package/dist/integrityStore.d.ts.map +1 -1
- package/dist/integrityStore.js +6 -29
- package/dist/integrityStore.js.map +1 -1
- package/dist/lib/approvedBypasses.d.ts +76 -0
- package/dist/lib/approvedBypasses.d.ts.map +1 -0
- package/dist/lib/approvedBypasses.js +140 -0
- package/dist/lib/approvedBypasses.js.map +1 -0
- package/dist/lib/complianceProbes.d.ts.map +1 -1
- package/dist/lib/complianceProbes.js +5 -0
- package/dist/lib/complianceProbes.js.map +1 -1
- package/dist/lib/decisionsDigest.d.ts +99 -0
- package/dist/lib/decisionsDigest.d.ts.map +1 -0
- package/dist/lib/decisionsDigest.js +199 -0
- package/dist/lib/decisionsDigest.js.map +1 -0
- package/dist/lib/egressPolicy.d.ts +69 -0
- package/dist/lib/egressPolicy.d.ts.map +1 -0
- package/dist/lib/egressPolicy.js +126 -0
- package/dist/lib/egressPolicy.js.map +1 -0
- package/dist/lib/gitWorktrees.d.ts +140 -0
- package/dist/lib/gitWorktrees.d.ts.map +1 -0
- package/dist/lib/gitWorktrees.js +191 -0
- package/dist/lib/gitWorktrees.js.map +1 -0
- package/dist/lib/policySnapshot.d.ts +224 -0
- package/dist/lib/policySnapshot.d.ts.map +1 -0
- package/dist/lib/policySnapshot.js +637 -0
- package/dist/lib/policySnapshot.js.map +1 -0
- package/dist/lib/processPoller.d.ts +44 -0
- package/dist/lib/processPoller.d.ts.map +1 -1
- package/dist/lib/processPoller.js +176 -1
- package/dist/lib/processPoller.js.map +1 -1
- package/dist/lib/runtimeEnv.d.ts +8 -0
- package/dist/lib/runtimeEnv.d.ts.map +1 -1
- package/dist/lib/runtimeEnv.js +3 -0
- package/dist/lib/runtimeEnv.js.map +1 -1
- package/dist/localTrajectoryHeuristics.d.ts +51 -0
- package/dist/localTrajectoryHeuristics.d.ts.map +1 -0
- package/dist/localTrajectoryHeuristics.js +90 -0
- package/dist/localTrajectoryHeuristics.js.map +1 -0
- package/dist/sessionReporter.d.ts +70 -0
- package/dist/sessionReporter.d.ts.map +1 -0
- package/dist/sessionReporter.js +140 -0
- package/dist/sessionReporter.js.map +1 -0
- package/dist/skillWriter.d.ts +1 -1
- package/dist/skillWriter.d.ts.map +1 -1
- package/dist/skillWriter.js +5 -2
- package/dist/skillWriter.js.map +1 -1
- package/dist/syncLoop.d.ts +105 -3
- package/dist/syncLoop.d.ts.map +1 -1
- package/dist/syncLoop.js +397 -65
- package/dist/syncLoop.js.map +1 -1
- package/dist/trajectoryMonitor.d.ts +2 -0
- package/dist/trajectoryMonitor.d.ts.map +1 -1
- package/dist/trajectoryMonitor.js +57 -0
- package/dist/trajectoryMonitor.js.map +1 -1
- package/dist/watcher/driftWatcher.d.ts.map +1 -1
- package/dist/watcher/driftWatcher.js +12 -3
- package/dist/watcher/driftWatcher.js.map +1 -1
- package/dist/watcher/settingsGuard.d.ts +23 -0
- package/dist/watcher/settingsGuard.d.ts.map +1 -1
- package/dist/watcher/settingsGuard.js +202 -17
- package/dist/watcher/settingsGuard.js.map +1 -1
- package/package.json +37 -6
- package/dist/brainIndexer.d.ts +0 -51
- package/dist/brainIndexer.d.ts.map +0 -1
- package/dist/brainIndexer.js +0 -148
- package/dist/brainIndexer.js.map +0 -1
- package/dist/harness/cursorHooksJson.d.ts +0 -29
- package/dist/harness/cursorHooksJson.d.ts.map +0 -1
- package/dist/harness/cursorHooksJson.js +0 -130
- package/dist/harness/cursorHooksJson.js.map +0 -1
- package/dist/harness/gooseHooksWriter.d.ts +0 -27
- package/dist/harness/gooseHooksWriter.d.ts.map +0 -1
- package/dist/harness/gooseHooksWriter.js +0 -147
- package/dist/harness/gooseHooksWriter.js.map +0 -1
- package/dist/harness/openhandsHooksWriter.d.ts +0 -23
- package/dist/harness/openhandsHooksWriter.d.ts.map +0 -1
- package/dist/harness/openhandsHooksWriter.js +0 -146
- package/dist/harness/openhandsHooksWriter.js.map +0 -1
|
@@ -15,21 +15,97 @@ import * as node_path from 'node:path';
|
|
|
15
15
|
import * as node_os from 'node:os';
|
|
16
16
|
import { z } from 'zod';
|
|
17
17
|
import { createLogger } from '@intutic/logger';
|
|
18
|
+
import { emitJsGate, emitJsFailClosedPrelude, emitPreImageCapture, REVIEW_REQUESTS_BASENAME as GATE_REVIEW_REQUESTS_BASENAME, REVIEW_REQUESTS_LOG as GATE_REVIEW_REQUESTS_LOG, REVIEW_REQUEST_VERSION as GATE_REVIEW_REQUEST_VERSION, } from './gateBody.js';
|
|
19
|
+
import { emitRedactor } from './holdRedaction.js';
|
|
18
20
|
const log = createLogger('sync-claude-hooks');
|
|
21
|
+
/**
|
|
22
|
+
* Coerces an unvalidated settings value to a string array, dropping anything else.
|
|
23
|
+
*
|
|
24
|
+
* `settings.json` is a file the user edits by hand, so `permissions.deny` being
|
|
25
|
+
* an array of strings is a convention, not a guarantee. Spreading a bare string
|
|
26
|
+
* would splice it into the deny list one character at a time.
|
|
27
|
+
*/
|
|
28
|
+
function toStringArray(value) {
|
|
29
|
+
return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
|
|
30
|
+
}
|
|
19
31
|
/** Path to the local hook event log file appended by generated hook scripts. */
|
|
20
32
|
export const HOOK_EVENTS_LOG = '.intutic/events/hook-events.jsonl';
|
|
33
|
+
/**
|
|
34
|
+
* The hold record's file and version live in gateBody.ts since v8, beside the
|
|
35
|
+
* one hold branch every gate shares; re-exported here because the drain and
|
|
36
|
+
* its callers import them from this module.
|
|
37
|
+
*/
|
|
38
|
+
export const REVIEW_REQUESTS_BASENAME = GATE_REVIEW_REQUESTS_BASENAME;
|
|
39
|
+
export const REVIEW_REQUESTS_LOG = GATE_REVIEW_REQUESTS_LOG;
|
|
40
|
+
export const REVIEW_REQUEST_VERSION = GATE_REVIEW_REQUEST_VERSION;
|
|
21
41
|
// Zod schema to parse SOP evaluation criteria and tool restrictions
|
|
42
|
+
/**
|
|
43
|
+
* Keeps the strings and drops everything else, instead of rejecting the array.
|
|
44
|
+
*
|
|
45
|
+
* `z.array(z.string())` fails the WHOLE object on one bad element, and
|
|
46
|
+
* `safeParse` failing here discards the entire block — every valid pattern and
|
|
47
|
+
* every valid hold along with the one bad entry. That is TD-310's shape one
|
|
48
|
+
* layer down: a batch rejected as a unit because of a single member, with the
|
|
49
|
+
* loss silent.
|
|
50
|
+
*
|
|
51
|
+
* A malformed entry is dropped and the rest of the policy still compiles.
|
|
52
|
+
*/
|
|
53
|
+
const stringList = z.preprocess((v) => (Array.isArray(v) ? v.filter((x) => typeof x === 'string') : v), z.array(z.string()).default([]));
|
|
22
54
|
export const SopHookConstraintsSchema = z.object({
|
|
23
|
-
highRiskTools:
|
|
24
|
-
patterns:
|
|
55
|
+
highRiskTools: stringList,
|
|
56
|
+
patterns: stringList,
|
|
57
|
+
/**
|
|
58
|
+
* Actions that must not run until a human has approved the run.
|
|
59
|
+
*
|
|
60
|
+
* Distinct from `patterns`, which is a permanent denial. This is a *hold*: the
|
|
61
|
+
* action is legitimate, and someone wants to see it before it happens.
|
|
62
|
+
*
|
|
63
|
+
* This is the half of the review gate that is genuinely pre-execution. The
|
|
64
|
+
* proxy can only refuse the request *after* a harness has already run the tool
|
|
65
|
+
* — it sees the call in the next message. The hook runs before, so declaring
|
|
66
|
+
* `action:deploy` here stops the push itself, not merely everything after it.
|
|
67
|
+
*/
|
|
68
|
+
reviewBefore: stringList,
|
|
25
69
|
});
|
|
26
70
|
/**
|
|
27
71
|
* Extracts constraints from SOP registry entries.
|
|
28
72
|
* Looks inside SOP markdown content for structured JSON/YAML blocks or parses settings.
|
|
29
73
|
*/
|
|
74
|
+
/**
|
|
75
|
+
* The front-matter key this harness re-parses, lowercased once.
|
|
76
|
+
*
|
|
77
|
+
* The Rust side owns this directive; the TS side reads it a second time because
|
|
78
|
+
* the two gates run in different runtimes with no shared parser, and a fixture
|
|
79
|
+
* test pins them together.
|
|
80
|
+
*/
|
|
81
|
+
const REVIEW_BEFORE_KEY = 'review_before:';
|
|
82
|
+
/**
|
|
83
|
+
* Strip surrounding quotes and brackets in one linear pass.
|
|
84
|
+
*
|
|
85
|
+
* Replaces `/^["'[]+|["'\]]+$/g`, which CodeQL flagged as polynomial: the
|
|
86
|
+
* trailing alternative is `+` anchored to end-of-string, so a token that is a
|
|
87
|
+
* long run of quote characters and never reaches the end makes the engine
|
|
88
|
+
* retry from every position. `content` is SOP text, and an agent that can write
|
|
89
|
+
* a SOP file chooses it — so that was a denial of service against the daemon
|
|
90
|
+
* doing the governing.
|
|
91
|
+
*
|
|
92
|
+
* Mirrors Rust's `trim_matches(['"', '\'', '[', ']'])` in `sops.rs`, which is
|
|
93
|
+
* what this parser is pinned against, and which was never a regex.
|
|
94
|
+
*/
|
|
95
|
+
function trimQuotesAndBrackets(value) {
|
|
96
|
+
const isTrimmable = (c) => c === '"' || c === "'" || c === '[' || c === ']';
|
|
97
|
+
let start = 0;
|
|
98
|
+
let end = value.length;
|
|
99
|
+
while (start < end && isTrimmable(value[start]))
|
|
100
|
+
start++;
|
|
101
|
+
while (end > start && isTrimmable(value[end - 1]))
|
|
102
|
+
end--;
|
|
103
|
+
return value.slice(start, end);
|
|
104
|
+
}
|
|
30
105
|
export function parseSopConstraints(sops, settings) {
|
|
31
106
|
const highRiskToolsSet = new Set();
|
|
32
107
|
const patternsSet = new Set();
|
|
108
|
+
const reviewBeforeSet = new Set();
|
|
33
109
|
// 1. Parse from workspace settings if present
|
|
34
110
|
// Treat settings as Record<string, unknown> for legacy field access (highRiskTools, patterns)
|
|
35
111
|
if (settings) {
|
|
@@ -40,6 +116,12 @@ export function parseSopConstraints(sops, settings) {
|
|
|
40
116
|
if (Array.isArray(s['patterns'])) {
|
|
41
117
|
s['patterns'].forEach((p) => typeof p === 'string' && patternsSet.add(p));
|
|
42
118
|
}
|
|
119
|
+
// Same omission, second delivery path. Settings and the SOP block are both
|
|
120
|
+
// ways the control plane hands down a constraint; dropping it in one of them
|
|
121
|
+
// makes the behaviour depend on which route happened to carry it.
|
|
122
|
+
if (Array.isArray(s['reviewBefore'])) {
|
|
123
|
+
s['reviewBefore'].forEach((r) => typeof r === 'string' && reviewBeforeSet.add(r));
|
|
124
|
+
}
|
|
43
125
|
}
|
|
44
126
|
// 2. Parse from SOP content
|
|
45
127
|
for (const sop of sops) {
|
|
@@ -56,6 +138,15 @@ export function parseSopConstraints(sops, settings) {
|
|
|
56
138
|
if (validated.success) {
|
|
57
139
|
validated.data.highRiskTools.forEach((t) => highRiskToolsSet.add(t));
|
|
58
140
|
validated.data.patterns.forEach((p) => patternsSet.add(p));
|
|
141
|
+
// `reviewBefore` was declared on the schema, validated here, and
|
|
142
|
+
// then not copied — so a hold delivered through this block parsed
|
|
143
|
+
// clean and reached nothing. Only the front-matter `review_before:`
|
|
144
|
+
// line ever populated the set.
|
|
145
|
+
//
|
|
146
|
+
// This block is the seam the learning loop writes through, so the
|
|
147
|
+
// omission was the difference between a learned rule enforcing and
|
|
148
|
+
// a learned rule being reported as installed while doing nothing.
|
|
149
|
+
validated.data.reviewBefore.forEach((r) => reviewBeforeSet.add(r));
|
|
59
150
|
}
|
|
60
151
|
}
|
|
61
152
|
catch {
|
|
@@ -82,10 +173,42 @@ export function parseSopConstraints(sops, settings) {
|
|
|
82
173
|
highRiskToolsSet.add(toolMatch[1].trim());
|
|
83
174
|
}
|
|
84
175
|
}
|
|
176
|
+
// `review_before:` front matter.
|
|
177
|
+
//
|
|
178
|
+
// The same directive the proxy reads from `.intutic/sops/*.md`, parsed a
|
|
179
|
+
// second time here because the two gates live in different runtimes and
|
|
180
|
+
// there is no shared parser. Kept deliberately simple — one comma-separated
|
|
181
|
+
// line — and pinned against the Rust side by a fixture test, because two
|
|
182
|
+
// parsers for one directive is exactly how a rule ends up enforced at one
|
|
183
|
+
// gate and silently ignored at the other.
|
|
184
|
+
//
|
|
185
|
+
// Scanned line by line rather than with `/^\s*review_before:\s*(.+)$/gim`,
|
|
186
|
+
// and trimmed with a linear pass rather than `/^["'[]+|["'\]]+$/g`. Both
|
|
187
|
+
// regexes were polynomial on input this function does not control: `content`
|
|
188
|
+
// is SOP file text, and an agent that can write a SOP file chooses it. A run
|
|
189
|
+
// of whitespace that never reaches `review_before:` makes the first
|
|
190
|
+
// backtrack from every start position, and a run of quotes that never
|
|
191
|
+
// reaches end-of-string does the same to the second — so a crafted SOP could
|
|
192
|
+
// hang the sync daemon, which is the process enforcing governance.
|
|
193
|
+
//
|
|
194
|
+
// The replacement is also closer to the Rust side it is pinned against:
|
|
195
|
+
// `sops.rs` uses `trim()` and `trim_matches(['"', '\'', '[', ']'])`, neither
|
|
196
|
+
// of which is a regex.
|
|
197
|
+
for (const rawLine of content.split('\n')) {
|
|
198
|
+
const line = rawLine.trimStart();
|
|
199
|
+
if (!line.toLowerCase().startsWith(REVIEW_BEFORE_KEY))
|
|
200
|
+
continue;
|
|
201
|
+
for (const token of line.slice(REVIEW_BEFORE_KEY.length).split(',')) {
|
|
202
|
+
const cleaned = trimQuotesAndBrackets(token.trim());
|
|
203
|
+
if (cleaned)
|
|
204
|
+
reviewBeforeSet.add(cleaned);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
85
207
|
}
|
|
86
208
|
return {
|
|
87
209
|
highRiskTools: Array.from(highRiskToolsSet),
|
|
88
210
|
patterns: Array.from(patternsSet),
|
|
211
|
+
reviewBefore: Array.from(reviewBeforeSet),
|
|
89
212
|
};
|
|
90
213
|
}
|
|
91
214
|
/**
|
|
@@ -119,7 +242,7 @@ export async function updatePreToolUseHooks(workspaceRoot, sops, settings, contr
|
|
|
119
242
|
hooks: [
|
|
120
243
|
{
|
|
121
244
|
type: 'command',
|
|
122
|
-
command: `node ${node_path.join(workspaceRoot, '.intutic', 'hooks', '
|
|
245
|
+
command: `node ${node_path.join(workspaceRoot, '.intutic', 'hooks', 'claude-code-check.js')}`,
|
|
123
246
|
timeout: 10,
|
|
124
247
|
statusMessage: 'Verifying tool execution against Intutic SOP policy...',
|
|
125
248
|
},
|
|
@@ -135,6 +258,13 @@ export async function updatePreToolUseHooks(workspaceRoot, sops, settings, contr
|
|
|
135
258
|
hookEntry('Edit'),
|
|
136
259
|
hookEntry('Write'),
|
|
137
260
|
hookEntry('MultiEdit'),
|
|
261
|
+
// M3: Claude Code names an MCP tool call `mcp__<server>__<tool>` —
|
|
262
|
+
// this matcher is what routes those calls into the same gate script
|
|
263
|
+
// at all. The gate body itself (gateBody.ts, v6) is what actually
|
|
264
|
+
// understands the shape once it arrives — the `#mcpservers`
|
|
265
|
+
// allowlist check and any `mcp__github__.*`-shaped SOP rule both need
|
|
266
|
+
// this matcher present to ever see the call.
|
|
267
|
+
hookEntry('mcp__.*'),
|
|
138
268
|
],
|
|
139
269
|
},
|
|
140
270
|
};
|
|
@@ -145,6 +275,14 @@ export async function updatePreToolUseHooks(workspaceRoot, sops, settings, contr
|
|
|
145
275
|
const hookEventsDir = node_path.join(workspaceRoot, '.intutic', 'events');
|
|
146
276
|
await node_fs.mkdir(hookEventsDir, { recursive: true });
|
|
147
277
|
const hookEventsLog = node_path.join(hookEventsDir, 'hook-events.jsonl');
|
|
278
|
+
// Where the hook records a review hold. The daemon watches this directory
|
|
279
|
+
// already, so no new watcher is needed to notice one.
|
|
280
|
+
//
|
|
281
|
+
// Append-only JSONL, not a single `.json`. It was one file written with
|
|
282
|
+
// `writeFileSync`, so a second hold in the same drain window silently
|
|
283
|
+
// destroyed the first — and holds cluster, because an agent that trips one
|
|
284
|
+
// review rule usually trips it again on the next step.
|
|
285
|
+
const reviewRequestFile = node_path.join(hookEventsDir, REVIEW_REQUESTS_BASENAME);
|
|
148
286
|
const hookScriptContent = `
|
|
149
287
|
/**
|
|
150
288
|
* Intutic PreToolUse execution gate.
|
|
@@ -154,6 +292,7 @@ export async function updatePreToolUseHooks(workspaceRoot, sops, settings, contr
|
|
|
154
292
|
* and drained to the control plane by the sync-daemon on each cycle.
|
|
155
293
|
* Control plane: ${controlPlaneUrl ?? 'https://api.intutic.ai'}
|
|
156
294
|
*/
|
|
295
|
+
${emitJsFailClosedPrelude({ harness: 'claude-code', contract: 'exit2' })}
|
|
157
296
|
const path = require('path');
|
|
158
297
|
const os = require('os');
|
|
159
298
|
const fs = require('fs');
|
|
@@ -173,17 +312,21 @@ try {
|
|
|
173
312
|
});
|
|
174
313
|
} catch { /* runtime.env not yet written — use defaults */ }
|
|
175
314
|
|
|
176
|
-
// Governance-sensitive paths that no agent may
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
315
|
+
// Governance-sensitive paths and command shapes that no agent may reach.
|
|
316
|
+
//
|
|
317
|
+
// This block used to be hand-built here, and it read \`...UNIVERSAL_PROTECTED_PATHS,\`
|
|
318
|
+
// with no \${} — so the identifier was emitted as literal source text into a
|
|
319
|
+
// script that never imports it. Node threw ReferenceError on line 30 of the
|
|
320
|
+
// generated file, before the gate did anything: the protected-path check, the
|
|
321
|
+
// shell-bypass check and the review_before hold were all dead for Claude Code,
|
|
322
|
+
// the harness most people run. A PreToolUse hook exiting 1 is a hook error, not
|
|
323
|
+
// a block, so tool calls proceeded ungoverned and nothing said so.
|
|
324
|
+
//
|
|
325
|
+
// It is emitted from harness/gateBody.ts now. That does not make the escaping
|
|
326
|
+
// easier; it makes there be one of it, with one set of tests.
|
|
327
|
+
${emitPreImageCapture()}
|
|
328
|
+
${emitJsGate({ harness: 'claude-code', contract: 'exit2', reviewRequestFile })}
|
|
329
|
+
${emitRedactor()}
|
|
187
330
|
|
|
188
331
|
/**
|
|
189
332
|
* Appends a governance event to the local hook-events log.
|
|
@@ -195,7 +338,9 @@ function logEvent(verdict, toolName, reason, sessionId) {
|
|
|
195
338
|
const ts = new Date().toISOString();
|
|
196
339
|
const incidentId = crypto.createHash('sha1').update(ts + toolName + _intuticWsId).digest('hex').slice(0, 16);
|
|
197
340
|
const entry = JSON.stringify({
|
|
198
|
-
|
|
341
|
+
// Passed through, not collapsed to two values: the advisory tier emits
|
|
342
|
+
// 'tool_flagged', and a ternary here silently recorded it as an allow.
|
|
343
|
+
event: verdict,
|
|
199
344
|
toolName,
|
|
200
345
|
reason: reason || '',
|
|
201
346
|
workspaceId: _intuticWsId,
|
|
@@ -236,56 +381,75 @@ function logEvent(verdict, toolName, reason, sessionId) {
|
|
|
236
381
|
} catch { /* never crash the hook */ }
|
|
237
382
|
}
|
|
238
383
|
|
|
384
|
+
// Review holds (\`review_before:\` / \`REQUIRE_APPROVAL:\`) are evaluated by the
|
|
385
|
+
// shared gate above since gate body v8: a \`hold\` rule in the policy snapshot
|
|
386
|
+
// refuses the call, records it to .intutic/events/review-requests.jsonl for
|
|
387
|
+
// the daemon to drain, and honours an exact, unexpired approved bypass from
|
|
388
|
+
// ~/.intutic/hooks/approved-bypasses.jsonl. The bespoke copy of that logic
|
|
389
|
+
// this file used to carry — the one no other harness had — is gone.
|
|
390
|
+
|
|
239
391
|
// Read stdin containing Claude's tool context
|
|
240
392
|
let inputData = '';
|
|
241
393
|
process.stdin.on('data', (chunk) => { inputData += chunk; });
|
|
242
394
|
process.stdin.on('end', () => {
|
|
243
395
|
try {
|
|
244
396
|
const ctx = JSON.parse(inputData);
|
|
397
|
+
// An envelope carrying none of the tool fields extracts to empty strings,
|
|
398
|
+
// which match no rule — an allow. Refused instead; see the guard itself.
|
|
399
|
+
intuticGuardEnvelope(ctx, ['tool_name', 'toolName', 'tool_input', 'toolInput'],
|
|
400
|
+
(v, t, r) => logEvent(v, t, r, String(ctx.session_id || ctx.sessionId || '')));
|
|
245
401
|
const toolName = (ctx.tool_name || ctx.toolName || '').toLowerCase();
|
|
402
|
+
// Case preserved for review matching: an operator writes \`review_before: Write\`,
|
|
403
|
+
// and the harness calls the tool \`Write\`.
|
|
404
|
+
const rawToolName = ctx.tool_name || ctx.toolName || '';
|
|
246
405
|
const sessionId = ctx.session_id || ctx.sessionId || '';
|
|
247
406
|
const toolInput = ctx.tool_input || ctx.toolInput || {};
|
|
248
407
|
const toolInputStr = JSON.stringify(toolInput);
|
|
249
408
|
|
|
250
|
-
//
|
|
251
|
-
//
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
409
|
+
// Protected paths and shell-bypass patterns, from the shared gate.
|
|
410
|
+
//
|
|
411
|
+
// Both checks used to be gated on the tool name: paths only for
|
|
412
|
+
// edit/write/multiedit, commands only for a fixed list of five shell tool
|
|
413
|
+
// names. Any tool outside those lists walked past both. The shared gate keys
|
|
414
|
+
// on the *arguments* instead, so a tool name nobody anticipated is no longer
|
|
415
|
+
// a way through.
|
|
416
|
+
const targetPath = toolInput.path || toolInput.file_path || toolInput.filePath ||
|
|
417
|
+
toolInput.new_path || toolInput.target || toolInput.notebook_path || '';
|
|
418
|
+
const shellCmd = String(toolInput.command || toolInput.cmd || toolInput.script || '');
|
|
419
|
+
intuticGate(rawToolName, targetPath, shellCmd,
|
|
420
|
+
(v, t, r) => logEvent(v, t, r, sessionId), _intuticWsId, toolInput, sessionId);
|
|
421
|
+
|
|
422
|
+
// 2. Review holds: handled inside intuticGate (gate body v8) — see the
|
|
423
|
+
// note above the stdin handler.
|
|
265
424
|
|
|
266
|
-
//
|
|
425
|
+
// 3. SOP-compiled pattern blacklist
|
|
267
426
|
const patterns = ${JSON.stringify(constraints.patterns)};
|
|
268
427
|
for (const pattern of patterns) {
|
|
269
428
|
if (toolInputStr.includes(pattern)) {
|
|
270
429
|
const reason = \`Policy violation matching pattern: "\${pattern}"\`;
|
|
271
430
|
console.error(\`[Intutic Guardrail] Blocked execution of tool "\${toolName}" due to \${reason}\`);
|
|
272
|
-
logEvent('
|
|
431
|
+
logEvent('tool_blocked', toolName, reason, sessionId);
|
|
273
432
|
process.exit(2);
|
|
274
433
|
}
|
|
275
434
|
}
|
|
276
435
|
|
|
277
|
-
logEvent('
|
|
436
|
+
logEvent('tool_allowed', toolName, '', sessionId);
|
|
278
437
|
process.exit(0);
|
|
279
438
|
} catch (err) {
|
|
280
439
|
// Fail CLOSED — any hook execution error blocks the tool call.
|
|
281
440
|
// The sync daemon will rewrite this hook on the next sync cycle.
|
|
282
441
|
console.error('[Intutic Guardrail] Hook error (blocking for safety):', err);
|
|
283
|
-
logEvent('
|
|
442
|
+
logEvent('tool_blocked', 'unknown', String(err), '');
|
|
284
443
|
process.exit(2);
|
|
285
444
|
}
|
|
286
445
|
});
|
|
287
446
|
`.trim();
|
|
288
|
-
|
|
447
|
+
// Named after its writer. This and cursorHooks both emitted
|
|
448
|
+
// `pre-tool-check.js` into `<root>/.intutic/hooks/`, so on any machine running
|
|
449
|
+
// both harnesses the second writer silently overwrote the first and one
|
|
450
|
+
// harness ran the other's gate. `generatedGateBehaviour.test.ts` asserts the
|
|
451
|
+
// artifact set is a partition, so the collision cannot come back unnoticed.
|
|
452
|
+
await node_fs.writeFile(node_path.join(hookScriptDir, 'claude-code-check.js'), hookScriptContent, 'utf-8');
|
|
289
453
|
// Write local settings config
|
|
290
454
|
const localClaudeDir = node_path.join(workspaceRoot, '.claude');
|
|
291
455
|
await node_fs.mkdir(localClaudeDir, { recursive: true });
|
|
@@ -339,7 +503,11 @@ process.stdin.on('end', () => {
|
|
|
339
503
|
...existingGlobal,
|
|
340
504
|
permissions: {
|
|
341
505
|
...existingGlobal.permissions,
|
|
342
|
-
|
|
506
|
+
// `permissions` comes from the user's settings.json, so its shape is a
|
|
507
|
+
// claim rather than a guarantee — narrow instead of asserting. A `deny`
|
|
508
|
+
// that is not an array (someone hand-edited it to a string) would
|
|
509
|
+
// otherwise spread character by character into the deny list.
|
|
510
|
+
deny: Array.from(new Set([...toStringArray(existingGlobal.permissions?.['deny']), ...denyRules])),
|
|
343
511
|
},
|
|
344
512
|
hooks: {
|
|
345
513
|
...existingGlobal.hooks,
|
|
@@ -364,11 +532,22 @@ process.stdin.on('end', () => {
|
|
|
364
532
|
* @param apiKey - Workspace API key (Bearer token)
|
|
365
533
|
* @returns number of events drained (0 if log was empty or network failed)
|
|
366
534
|
*/
|
|
367
|
-
|
|
368
|
-
|
|
535
|
+
/**
|
|
536
|
+
* Drains one append-only JSONL log to a control-plane endpoint.
|
|
537
|
+
*
|
|
538
|
+
* Extracted because there are two of these now — hook events and review holds —
|
|
539
|
+
* and the delivery semantics below are the part that must not diverge. TD-310
|
|
540
|
+
* was exactly that: a batch the control plane could never accept was retained
|
|
541
|
+
* and re-sent every cycle, so the log never drained again and every later event
|
|
542
|
+
* behind it was lost, silently. A second hand-written copy of this logic is a
|
|
543
|
+
* second chance to get that wrong.
|
|
544
|
+
*
|
|
545
|
+
* @returns the number of records delivered; 0 on any failure.
|
|
546
|
+
*/
|
|
547
|
+
async function drainJsonlLog(opts) {
|
|
369
548
|
let raw;
|
|
370
549
|
try {
|
|
371
|
-
raw = await node_fs.readFile(logPath, 'utf-8');
|
|
550
|
+
raw = await node_fs.readFile(opts.logPath, 'utf-8');
|
|
372
551
|
}
|
|
373
552
|
catch {
|
|
374
553
|
return 0; // File doesn't exist yet — nothing to drain
|
|
@@ -376,45 +555,128 @@ export async function drainHookEvents(workspaceRoot, controlPlaneUrl, apiKey) {
|
|
|
376
555
|
const lines = raw.trim().split('\n').filter(Boolean);
|
|
377
556
|
if (lines.length === 0)
|
|
378
557
|
return 0;
|
|
379
|
-
const
|
|
558
|
+
const records = [];
|
|
380
559
|
for (const line of lines) {
|
|
381
560
|
try {
|
|
382
|
-
|
|
561
|
+
records.push(JSON.parse(line));
|
|
383
562
|
}
|
|
384
563
|
catch {
|
|
385
|
-
log.warn({ line }, 'Skipping malformed
|
|
564
|
+
log.warn({ line, label: opts.label }, 'Skipping malformed log line');
|
|
386
565
|
}
|
|
387
566
|
}
|
|
388
|
-
if (
|
|
389
|
-
await node_fs.writeFile(logPath, '', 'utf-8');
|
|
567
|
+
if (records.length === 0) {
|
|
568
|
+
await node_fs.writeFile(opts.logPath, '', 'utf-8');
|
|
390
569
|
return 0;
|
|
391
570
|
}
|
|
392
571
|
try {
|
|
393
572
|
// Use native fetch (Node 18+ — required minimum for this monorepo)
|
|
394
|
-
const response = await fetch(
|
|
573
|
+
const response = await fetch(opts.endpoint, {
|
|
395
574
|
method: 'POST',
|
|
396
575
|
headers: {
|
|
397
576
|
'Content-Type': 'application/json',
|
|
398
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
577
|
+
'Authorization': `Bearer ${opts.apiKey}`,
|
|
399
578
|
},
|
|
400
|
-
body: JSON.stringify(
|
|
579
|
+
body: JSON.stringify(opts.bodyFor(records)),
|
|
401
580
|
signal: AbortSignal.timeout(10_000),
|
|
402
581
|
});
|
|
403
582
|
if (response.ok) {
|
|
404
|
-
// Truncate the log —
|
|
405
|
-
await node_fs.writeFile(logPath, '', 'utf-8');
|
|
406
|
-
log.info({ count:
|
|
407
|
-
return
|
|
583
|
+
// Truncate the log — records successfully delivered
|
|
584
|
+
await node_fs.writeFile(opts.logPath, '', 'utf-8');
|
|
585
|
+
log.info({ count: records.length, label: opts.label }, 'Drained to control plane');
|
|
586
|
+
return records.length;
|
|
408
587
|
}
|
|
409
|
-
|
|
410
|
-
|
|
588
|
+
// A 4xx will never succeed on retry, and retaining the log means re-sending
|
|
589
|
+
// the identical rejected batch on every cycle from now on. That does not
|
|
590
|
+
// delay delivery of these records — it stops delivery of *all* later ones,
|
|
591
|
+
// silently, because the log never drains again.
|
|
592
|
+
//
|
|
593
|
+
// This was live: adding an event type to the gates without adding it to the
|
|
594
|
+
// control plane's enum made one ordinary advisory event poison every batch
|
|
595
|
+
// behind it. The control plane now drops unknown events instead of
|
|
596
|
+
// rejecting the batch, so this path should be unreachable for that cause —
|
|
597
|
+
// but "should be unreachable" is exactly what was believed before, and the
|
|
598
|
+
// cost of being wrong is the whole pipeline.
|
|
599
|
+
//
|
|
600
|
+
// So: move the batch aside rather than dropping or retrying it. Nothing is
|
|
601
|
+
// lost, a human can inspect it, and the live log drains.
|
|
602
|
+
if (response.status >= 400 && response.status < 500) {
|
|
603
|
+
const rejectedPath = opts.logPath.replace(/\.jsonl$/, '.rejected.jsonl');
|
|
604
|
+
let body = '';
|
|
605
|
+
try {
|
|
606
|
+
body = (await response.text()).slice(0, 500);
|
|
607
|
+
}
|
|
608
|
+
catch {
|
|
609
|
+
// The status is the part that matters; a missing body must not throw here.
|
|
610
|
+
}
|
|
611
|
+
try {
|
|
612
|
+
await node_fs.appendFile(rejectedPath, lines.join('\n') + '\n', 'utf-8');
|
|
613
|
+
await node_fs.writeFile(opts.logPath, '', 'utf-8');
|
|
614
|
+
}
|
|
615
|
+
catch (err) {
|
|
616
|
+
// If we cannot set it aside, retaining is better than losing it.
|
|
617
|
+
log.error({ err, status: response.status, label: opts.label }, 'Could not quarantine rejected batch — retaining log');
|
|
618
|
+
return 0;
|
|
619
|
+
}
|
|
620
|
+
log.error({ status: response.status, count: records.length, rejectedPath, body, label: opts.label }, 'Control plane rejected the batch with a client error — quarantined so the log can ' +
|
|
621
|
+
'keep draining. These records were NOT delivered.');
|
|
411
622
|
return 0;
|
|
412
623
|
}
|
|
624
|
+
// 5xx or anything else: transient. Retain and retry, which is what the
|
|
625
|
+
// retention behaviour was actually designed for.
|
|
626
|
+
log.warn({ status: response.status, count: records.length, label: opts.label }, 'Control plane rejected the batch — retaining log for next cycle');
|
|
627
|
+
return 0;
|
|
413
628
|
}
|
|
414
629
|
catch (err) {
|
|
415
630
|
// Network failure — retain log for retry on next cycle
|
|
416
|
-
log.warn({ err, count:
|
|
631
|
+
log.warn({ err, count: records.length, label: opts.label }, 'Failed to drain — will retry on next sync cycle');
|
|
417
632
|
return 0;
|
|
418
633
|
}
|
|
419
634
|
}
|
|
635
|
+
/**
|
|
636
|
+
* Drains the local hook-events log file and POSTs all accumulated governance
|
|
637
|
+
* events to the control plane in a single batch request.
|
|
638
|
+
*
|
|
639
|
+
* Called by the sync-daemon's main loop (syncLoop.ts) on every cycle, after
|
|
640
|
+
* the main sync operations. On success, the log file is truncated to prevent
|
|
641
|
+
* unbounded growth. On network failure, events remain in the log and will be
|
|
642
|
+
* retried on the next cycle.
|
|
643
|
+
*/
|
|
644
|
+
export async function drainHookEvents(workspaceRoot, controlPlaneUrl, apiKey) {
|
|
645
|
+
return drainJsonlLog({
|
|
646
|
+
logPath: node_path.join(workspaceRoot, '.intutic', 'events', 'hook-events.jsonl'),
|
|
647
|
+
endpoint: `${controlPlaneUrl}/api/v1/hook-events`,
|
|
648
|
+
apiKey,
|
|
649
|
+
bodyFor: (events) => ({ events }),
|
|
650
|
+
label: 'hook events',
|
|
651
|
+
});
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Drains review holds — the pre-execution half of `review_before:`.
|
|
655
|
+
*
|
|
656
|
+
* The hook writes a hold and exits 2, which stops the tool before it runs. That
|
|
657
|
+
* file had no reader: the comment beside the write claimed "the daemon picks the
|
|
658
|
+
* request up and tells the control plane", and no daemon code opened it. So the
|
|
659
|
+
* hold blocked the action and the decision behind it went nowhere — which is
|
|
660
|
+
* also why the decision-mining queue had four route readers and no writer.
|
|
661
|
+
*
|
|
662
|
+
* This is the writer. Delivering a hold always becomes a row and a review card;
|
|
663
|
+
* whether resolving it can also let the retried call through is conditional,
|
|
664
|
+
* not automatic. Approving through `POST /api/v1/decisions/:id/review` (or the
|
|
665
|
+
* Slack button) writes a short-lived, exact-match bypass ONLY when the
|
|
666
|
+
* workspace has opted in with `reviewHoldBypassEnabled`, and even then it
|
|
667
|
+
* covers only the identical call, for at most `reviewHoldBypassTtlMinutes`.
|
|
668
|
+
* A workspace that never sets that flag gets the original, unconditional
|
|
669
|
+
* observe-only behaviour. See `gateBody.ts`'s `intuticApprovedBypass` (every gate, since v8)
|
|
670
|
+
* and `decisionMiningService.ts`'s `maybeWriteReviewHoldBypass` for the
|
|
671
|
+
* mechanism.
|
|
672
|
+
*/
|
|
673
|
+
export async function drainReviewRequests(workspaceRoot, controlPlaneUrl, apiKey) {
|
|
674
|
+
return drainJsonlLog({
|
|
675
|
+
logPath: node_path.join(workspaceRoot, '.intutic', 'events', REVIEW_REQUESTS_BASENAME),
|
|
676
|
+
endpoint: `${controlPlaneUrl}/api/v1/decisions`,
|
|
677
|
+
apiKey,
|
|
678
|
+
bodyFor: (holds) => ({ holds }),
|
|
679
|
+
label: 'review holds',
|
|
680
|
+
});
|
|
681
|
+
}
|
|
420
682
|
//# sourceMappingURL=claudeCodeHooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCodeHooks.js","sourceRoot":"","sources":["../../src/harness/claudeCodeHooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claudeCodeHooks.js","sourceRoot":"","sources":["../../src/harness/claudeCodeHooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeDesktopHooks.d.ts","sourceRoot":"","sources":["../../src/harness/claudeDesktopHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"claudeDesktopHooks.d.ts","sourceRoot":"","sources":["../../src/harness/claudeDesktopHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqLH;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,IAAI,CAAC,CAyEf"}
|