@mnemonik/claude-code-hooks 0.4.0 → 0.5.0
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/dist/hook.js +61 -95
- package/dist/hook.js.map +1 -1
- package/dist/install.js +13 -4
- package/dist/install.js.map +1 -1
- package/dist/lib/behavior.d.ts +16 -21
- package/dist/lib/behavior.js +16 -21
- package/dist/lib/behavior.js.map +1 -1
- package/dist/lib/http.d.ts +18 -1
- package/dist/lib/http.js +32 -0
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/shellTokens.d.ts +29 -67
- package/dist/lib/shellTokens.js +53 -324
- package/dist/lib/shellTokens.js.map +1 -1
- package/dist/lib/types.d.ts +32 -2
- package/dist/lib/types.js.map +1 -1
- package/package.json +1 -1
package/dist/hook.js
CHANGED
|
@@ -13,9 +13,9 @@ import { existsSync } from 'node:fs';
|
|
|
13
13
|
import { isAbsolute, resolve } from 'node:path';
|
|
14
14
|
import { stdin, stdout, stderr, exit } from 'node:process';
|
|
15
15
|
import { isNonInteractive, parseBypass, resolveConfig } from './lib/env.js';
|
|
16
|
-
import { PRE_EDIT_GATE, PRE_EDIT_ADVISORY_AUTO_FETCH,
|
|
17
|
-
import { createPreCompactSnapshot, fetchBootstrap, fetchFileContext, fetchPromptContext, fetchSnapshot, markSessionStart, markStopBlocked, postSessionEnd, reportBypass, reportGateFired, } from './lib/http.js';
|
|
18
|
-
import {
|
|
16
|
+
import { PRE_EDIT_GATE, PRE_EDIT_ADVISORY_AUTO_FETCH, STOP_CHECKPOINT_GATE, SESSION_START_BOOTSTRAP, PRE_COMPACT_SNAPSHOT, SESSION_END_SAVE, USER_PROMPT_CONTEXT, } from './lib/behavior.js';
|
|
17
|
+
import { createPreCompactSnapshot, fetchBootstrap, fetchFileContext, fetchPolicyReminder, fetchPromptContext, fetchSnapshot, markSessionStart, markStopBlocked, postSessionEnd, reportBypass, reportGateFired, } from './lib/http.js';
|
|
18
|
+
import { matchIrreducibleDeny } from './lib/shellTokens.js';
|
|
19
19
|
// ─── Decision writers ──────────────────────────────────────────────────────
|
|
20
20
|
function writeDecision(decision) {
|
|
21
21
|
if (decision !== null) {
|
|
@@ -241,116 +241,82 @@ async function handlePreEdit(input, config) {
|
|
|
241
241
|
writeDecision(decision);
|
|
242
242
|
}
|
|
243
243
|
// ─── Bash gate ─────────────────────────────────────────────────────────────
|
|
244
|
+
/**
|
|
245
|
+
* PreToolUse Bash gate (phase 3 simplification).
|
|
246
|
+
*
|
|
247
|
+
* Three layers, in order:
|
|
248
|
+
*
|
|
249
|
+
* 1. IRREDUCIBLE DENY — local pattern check for catastrophic, irreversible
|
|
250
|
+
* commands (`rm -rf /`, `dd of=/dev/sda`, `mkfs /dev/sda`, etc).
|
|
251
|
+
* Local-only because we cannot trust the server to be reachable for
|
|
252
|
+
* machine-bricking decisions. Bypass envelope still works.
|
|
253
|
+
*
|
|
254
|
+
* 2. SERVER POLICY REMINDER — POST tool args to /api/v1/hooks/policy-reminder.
|
|
255
|
+
* Server tokenizes, intersects with the project's trigger_keywords index,
|
|
256
|
+
* returns matched context-triggered policies. The dispatcher emits them
|
|
257
|
+
* as additionalContext (advisory: agent sees them, command allowed).
|
|
258
|
+
* No local pattern matching, no per-kind gate logic — that's all on
|
|
259
|
+
* the server now and applies to every host that calls this endpoint.
|
|
260
|
+
*
|
|
261
|
+
* 3. ALLOW — no irreducible match, server returned no policies (or was
|
|
262
|
+
* unreachable). Pass through silently.
|
|
263
|
+
*/
|
|
244
264
|
async function handlePreBash(input, config) {
|
|
245
|
-
// Both kinds off → bash gate is fully disabled. We still emit one
|
|
246
|
-
// gate_fired so telemetry can see the disabled state.
|
|
247
|
-
if (FORBIDDEN_GATE === 'off' && MUST_CONFIRM_GATE === 'off') {
|
|
248
|
-
await emitGateFired(input, config, 'Bash', 'off', 'off');
|
|
249
|
-
writeAllow();
|
|
250
|
-
}
|
|
251
265
|
const command = typeof input.tool_input?.command === 'string' ? input.tool_input.command : '';
|
|
252
266
|
if (!command.trim())
|
|
253
267
|
writeAllow();
|
|
268
|
+
// Layer 1: irreducible deny-floor. Local, server-independent.
|
|
269
|
+
const denyName = matchIrreducibleDeny(command);
|
|
270
|
+
if (denyName) {
|
|
271
|
+
await emitGateFired(input, config, 'Bash', 'enforce', `irreducible_deny_${denyName}`);
|
|
272
|
+
const denyReason = [
|
|
273
|
+
'MNEMONIK_IRREDUCIBLE_DENY',
|
|
274
|
+
`Bash blocked: command matches the catastrophic-action floor (${denyName}).`,
|
|
275
|
+
'These four patterns (rm -rf / | ~ | $HOME, dd of=<whole-disk>, mkfs <whole-disk>) are blocked unconditionally because the cost of a false negative is "your machine."',
|
|
276
|
+
"Bypass for legitimate one-off use (formatting a USB stick, writing an ISO): MNEMONIK_BYPASS_HOOKS=1 + MNEMONIK_BYPASS_TYPE=other + MNEMONIK_BYPASS_DETAIL 50-200 chars.",
|
|
277
|
+
].join('\n');
|
|
278
|
+
const decision = {
|
|
279
|
+
hookSpecificOutput: {
|
|
280
|
+
hookEventName: 'PreToolUse',
|
|
281
|
+
permissionDecision: 'deny',
|
|
282
|
+
permissionDecisionReason: denyReason,
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
writeDecision(decision);
|
|
286
|
+
}
|
|
287
|
+
// Layer 2: server-side policy reminder. Soft-fail on missing key /
|
|
288
|
+
// unreachable server — we already cleared the deny-floor, so allowing
|
|
289
|
+
// through with no reminder is the correct fallback.
|
|
254
290
|
if (!config.apiKey) {
|
|
291
|
+
await emitGateFired(input, config, 'Bash', 'advisory', 'no_api_key');
|
|
255
292
|
writeAdvisoryNote('MNEMONIK_API_KEY missing — fail-open. Run mnemonik-claude-code-hooks install.');
|
|
256
293
|
}
|
|
257
|
-
const
|
|
294
|
+
const reminder = await fetchPolicyReminder({
|
|
258
295
|
server: config.server,
|
|
259
296
|
apiKey: config.apiKey,
|
|
260
297
|
cwd: input.cwd,
|
|
261
298
|
claudeSessionId: input.session_id,
|
|
299
|
+
tool: 'Bash',
|
|
300
|
+
context: command,
|
|
262
301
|
});
|
|
263
|
-
if (!
|
|
264
|
-
await emitGateFired(input, config, 'Bash',
|
|
265
|
-
writeAdvisoryNote('mnemonik server unreachable — fail-open.');
|
|
266
|
-
}
|
|
267
|
-
// Per-kind pattern sets. Built-ins extend project policies; nothing shrinks
|
|
268
|
-
// either set. A kind whose gate is `off` contributes no patterns at all —
|
|
269
|
-
// there is no scenario where matching but doing nothing is meaningful.
|
|
270
|
-
const forbiddenPatterns = FORBIDDEN_GATE === 'off'
|
|
271
|
-
? []
|
|
272
|
-
: [...BUILT_IN_FORBIDDEN, ...snapshot.policies.forbiddenCommand.map((p) => p.pattern)];
|
|
273
|
-
const mustConfirmPatterns = MUST_CONFIRM_GATE === 'off'
|
|
274
|
-
? []
|
|
275
|
-
: [...BUILT_IN_MUST_CONFIRM, ...snapshot.policies.mustConfirm.map((p) => p.pattern)];
|
|
276
|
-
const { commands, wasQuoted } = tokenize(command);
|
|
277
|
-
let forbiddenHit = null;
|
|
278
|
-
let mustConfirmHit = null;
|
|
279
|
-
for (let cmdIdx = 0; cmdIdx < commands.length; cmdIdx++) {
|
|
280
|
-
const tokens = commands[cmdIdx];
|
|
281
|
-
const quotedFlags = wasQuoted[cmdIdx];
|
|
282
|
-
forbiddenHit = forbiddenHit ?? matchCommand(tokens, forbiddenPatterns, quotedFlags);
|
|
283
|
-
mustConfirmHit = mustConfirmHit ?? matchCommand(tokens, mustConfirmPatterns, quotedFlags);
|
|
284
|
-
if (forbiddenHit && mustConfirmHit)
|
|
285
|
-
break;
|
|
286
|
-
}
|
|
287
|
-
// Forbidden takes precedence. Either kind matched → run that gate at its
|
|
288
|
-
// configured mode. No match → allow.
|
|
289
|
-
if (forbiddenHit) {
|
|
290
|
-
await runPolicyGate(input, config, 'forbiddenCommand', forbiddenHit, FORBIDDEN_GATE);
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
if (mustConfirmHit) {
|
|
294
|
-
await runPolicyGate(input, config, 'mustConfirm', mustConfirmHit, MUST_CONFIRM_GATE);
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
await emitGateFired(input, config, 'Bash', MUST_CONFIRM_GATE, 'no_match');
|
|
298
|
-
writeAllow();
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Run one gate at its configured mode for a matched policy pattern.
|
|
302
|
-
*
|
|
303
|
-
* - `off`: allow. Reachable only when the kind's gate is off but a
|
|
304
|
-
* pattern from the OTHER kind matched and bubbled up — keep the path
|
|
305
|
-
* defensive.
|
|
306
|
-
* - `advisory`: emit policy text as additionalContext + allow. The
|
|
307
|
-
* agent sees what the policy says; the user enforces the pause.
|
|
308
|
-
* - `enforce`: deny with a kind-specific reason. The bypass envelope
|
|
309
|
-
* (MNEMONIK_BYPASS_HOOKS=1 + type + detail) is the documented way
|
|
310
|
-
* through.
|
|
311
|
-
*/
|
|
312
|
-
async function runPolicyGate(input, config, kind, pattern, mode) {
|
|
313
|
-
if (mode === 'off') {
|
|
314
|
-
await emitGateFired(input, config, 'Bash', mode, `policy_${kind}_off`);
|
|
302
|
+
if (!reminder?.ok || reminder.policies.length === 0) {
|
|
303
|
+
await emitGateFired(input, config, 'Bash', 'advisory', reminder ? 'no_match' : 'unreachable');
|
|
315
304
|
writeAllow();
|
|
316
305
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
].join(' ')
|
|
325
|
-
: [
|
|
326
|
-
`Mnemonik: a mustConfirm policy matched the command — pattern "${pattern}".`,
|
|
327
|
-
'Recommended: present a clear summary of what you are about to do and why, then wait for the user to respond before running it.',
|
|
328
|
-
'This advisory will become a hard block when MUST_CONFIRM_GATE flips to "enforce".',
|
|
329
|
-
].join(' ');
|
|
330
|
-
const decision = {
|
|
331
|
-
hookSpecificOutput: {
|
|
332
|
-
hookEventName: 'PreToolUse',
|
|
333
|
-
permissionDecision: 'allow',
|
|
334
|
-
additionalContext,
|
|
335
|
-
},
|
|
336
|
-
};
|
|
337
|
-
writeDecision(decision);
|
|
306
|
+
// Format matched policies as additionalContext. Group by kind for
|
|
307
|
+
// readability; each rule prints its description (and replacement if set).
|
|
308
|
+
const lines = ['Mnemonik: project policies matched this command. Read each rule and act accordingly.'];
|
|
309
|
+
for (const p of reminder.policies) {
|
|
310
|
+
const desc = p.description ?? p.pattern;
|
|
311
|
+
const repl = p.replacement ? ` Replacement: ${p.replacement}.` : '';
|
|
312
|
+
lines.push(`- [${p.kind}] ${desc}${repl}`);
|
|
338
313
|
}
|
|
339
|
-
|
|
340
|
-
await emitGateFired(input, config, 'Bash', mode, `policy_${kind}_deny`);
|
|
341
|
-
const denyReason = [
|
|
342
|
-
'MNEMONIK_POLICY_GATE',
|
|
343
|
-
`Bash blocked by ${kind} policy: pattern "${pattern}" matched the command.`,
|
|
344
|
-
kind === 'forbiddenCommand'
|
|
345
|
-
? 'Forbidden commands cannot be run via the agent. If this is intentional, the user must run it directly OR remove the policy.'
|
|
346
|
-
: 'Fix: present a summary of what this command does and why, get explicit user confirmation, then proceed.',
|
|
347
|
-
"Bypass: MNEMONIK_BYPASS_HOOKS=1 + MNEMONIK_BYPASS_TYPE=<typo|formatting|regenerated|already_grounded|other>; 'other' additionally requires MNEMONIK_BYPASS_DETAIL 50-200 chars.",
|
|
348
|
-
].join('\n');
|
|
314
|
+
await emitGateFired(input, config, 'Bash', 'advisory', `policy_match_${reminder.policies.length}`);
|
|
349
315
|
const decision = {
|
|
350
316
|
hookSpecificOutput: {
|
|
351
317
|
hookEventName: 'PreToolUse',
|
|
352
|
-
permissionDecision: '
|
|
353
|
-
|
|
318
|
+
permissionDecision: 'allow',
|
|
319
|
+
additionalContext: lines.join('\n'),
|
|
354
320
|
},
|
|
355
321
|
};
|
|
356
322
|
writeDecision(decision);
|
package/dist/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAEL,aAAa,EACb,4BAA4B,EAC5B,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAW9B,8EAA8E;AAE9E,SAAS,aAAa,CACpB,QAKQ;IAER,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,aAAa,CAC1B,KAAgB,EAChB,MAAkB,EAClB,IAAY,EACZ,IAAoC,EACpC,OAAe;IAEf,MAAM,eAAe,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;QACjC,IAAI;QACJ,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,SAAS;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACjC,GAAG,IAAI,KAAK,CAAC;YACb,yEAAyE;YACzE,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC;gBACH,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH,SAAS,aAAa,CAAC,QAAgB,EAAE,SAA8C;IACrF,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,MAAM,MAAM,GAAG,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,OAAO,GAAG,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAgB,EAChB,SAA8C,EAC9C,GAAW;IAEX,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,GAAG,GACP,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ;QACrC,CAAC,CAAC,SAAS,CAAC,SAAS;QACrB,CAAC,CAAC,OAAO,SAAS,CAAC,aAAa,KAAK,QAAQ;YAC3C,CAAC,CAAC,SAAS,CAAC,aAAa;YACzB,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAgB,EAAE,MAAkB;IAC/D,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC;IACvC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACvD,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAErF,2EAA2E;IAC3E,qCAAqC;IACrC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3D,UAAU,EAAE,CAAC;IACf,CAAC;IAED,0EAA0E;IAC1E,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,aAAa,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1D,UAAU,EAAE,CAAC;IACf,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,iBAAiB,CACf,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9D,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,cAAc;IACd,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACpE,UAAU,EAAE,CAAC;IACf,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,qBAAqB;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5F,MAAM,OAAO,GACX,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1D,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,mEAAmE;QACnE,0EAA0E;QAC1E,0EAA0E;QAC1E,mEAAmE;QACnE,IAAI,MAAM,IAAI,4BAA4B,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAO;gBACtB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,eAAe,EAAE,KAAK,CAAC,UAAU;gBACjC,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YACH,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC/B,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAuB;oBACnC,kBAAkB,EAAE;wBAClB,aAAa,EAAE,YAAY;wBAC3B,kBAAkB,EAAE,OAAO;wBAC3B,iBAAiB,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO;qBAC3C;iBACF,CAAC;gBACF,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,gCAAgC;QAChC,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,iBAAiB,GAAG,MAAM;YAC9B,CAAC,CAAC;gBACE,mDAAmD,MAAM,oBAAoB;gBAC7E,yDAAyD;oBACvD,MAAM;oBACN,oFAAoF;gBACtF,oGAAoG;aACrG,CAAC,IAAI,CAAC,GAAG,CAAC;YACb,CAAC,CAAC,6EAA6E,CAAC;QAClF,MAAM,QAAQ,GAAuB;YACnC,kBAAkB,EAAE;gBAClB,aAAa,EAAE,YAAY;gBAC3B,kBAAkB,EAAE,OAAO;gBAC3B,iBAAiB;aAClB;SACF,CAAC;QACF,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,qBAAqB;IACrB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM;QACvB,CAAC,CAAC;YACE,gCAAgC;YAChC,sDAAsD,MAAM,mBAAmB;YAC/E,kDAAkD,MAAM,cAAc;YACtE,iMAAiM;SAClM,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,CAAC,CAAC,6EAA6E,CAAC;IAClF,MAAM,QAAQ,GAAuB;QACnC,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,MAAM;YAC1B,wBAAwB,EAAE,UAAU;SACrC;KACF,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,aAAa,CAAC,KAAgB,EAAE,MAAkB;IAC/D,kEAAkE;IAClE,sDAAsD;IACtD,IAAI,cAAc,KAAK,KAAK,IAAI,iBAAiB,KAAK,KAAK,EAAE,CAAC;QAC5D,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,UAAU,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,iBAAiB,CACf,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAC7E,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;IAED,4EAA4E;IAC5E,0EAA0E;IAC1E,uEAAuE;IACvE,MAAM,iBAAiB,GACrB,cAAc,KAAK,KAAK;QACtB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3F,MAAM,mBAAmB,GACvB,iBAAiB,KAAK,KAAK;QACzB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,GAAG,qBAAqB,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC;QACjC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,YAAY,GAAG,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACpF,cAAc,GAAG,cAAc,IAAI,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;QAC1F,IAAI,YAAY,IAAI,cAAc;YAAE,MAAM;IAC5C,CAAC;IAED,yEAAyE;IACzE,qCAAqC;IACrC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IACD,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAC1E,UAAU,EAAE,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,aAAa,CAC1B,KAAgB,EAChB,MAAkB,EAClB,IAAwC,EACxC,OAAe,EACf,IAAc;IAEd,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,CAAC;QACvE,UAAU,EAAE,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,IAAI,WAAW,CAAC,CAAC;QAC5E,MAAM,iBAAiB,GACrB,IAAI,KAAK,kBAAkB;YACzB,CAAC,CAAC;gBACE,sEAAsE,OAAO,IAAI;gBACjF,4HAA4H;gBAC5H,gFAAgF;aACjF,CAAC,IAAI,CAAC,GAAG,CAAC;YACb,CAAC,CAAC;gBACE,iEAAiE,OAAO,IAAI;gBAC5E,gIAAgI;gBAChI,mFAAmF;aACpF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,QAAQ,GAAuB;YACnC,kBAAkB,EAAE;gBAClB,aAAa,EAAE,YAAY;gBAC3B,kBAAkB,EAAE,OAAO;gBAC3B,iBAAiB;aAClB;SACF,CAAC;QACF,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,qBAAqB;IACrB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,IAAI,OAAO,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG;QACjB,sBAAsB;QACtB,mBAAmB,IAAI,qBAAqB,OAAO,wBAAwB;QAC3E,IAAI,KAAK,kBAAkB;YACzB,CAAC,CAAC,6HAA6H;YAC/H,CAAC,CAAC,yGAAyG;QAC7G,iLAAiL;KAClL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,QAAQ,GAAuB;QACnC,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,MAAM;YAC1B,wBAAwB,EAAE,UAAU;SACrC;KACF,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,KAAK,UAAU,kBAAkB,CAAC,KAAgB,EAAE,MAAkB;IACpE,IAAI,uBAAuB,KAAK,KAAK;QAAE,UAAU,EAAE,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,UAAU,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,CAAC;IAExC,gFAAgF;IAChF,MAAM,gBAAgB,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,iBAAiB;QAAE,UAAU,EAAE,CAAC;IAErC,MAAM,QAAQ,GAA8B;QAC1C,kBAAkB,EAAE;YAClB,aAAa,EAAE,cAAc;YAC7B,iBAAiB;SAClB;KACF,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAgB;IACnD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,CAAC,GAAG,OAAkC,CAAC;IAC7C,MAAM,KAAK,GAAa,CAAC,yDAAyD,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,IAAI,SAAS,EAAE,CAAC;QACd,0EAA0E;QAC1E,+BAA+B;QAC/B,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,KAAK;aACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrF,OAAQ,CAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC,QAAQ;QACZ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5B,CAAC,CAAC,CAAC,CAAC,WAAW;YACf,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CACR,oBAAoB,QAAQ,CAAC,MAAM,wDAAwD,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,6JAA6J,CAC9J,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,KAAK,UAAU,UAAU,CAAC,KAAgB,EAAE,MAAkB;IAC5D,MAAM,IAAI,GAAG,oBAAoB,CAAC;IAClC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,UAAU,EAAE,CAAC;IACf,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,UAAU,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9D,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;IAChD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAC3D,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,kDAAkD;IAClD,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,kBAAkB,GACtB,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;IAEvF,IAAI,WAAW,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9D,UAAU,EAAE,CAAC;IACf,CAAC;IAED,8EAA8E;IAC9E,MAAM,eAAe,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACnE,MAAM,iBAAiB,GAAG;YACxB,iCAAiC,WAAW,uDAAuD,YAAY,GAAG,QAAQ,GAAG;YAC7H,qKAAqK;YACrK,wGAAwG;SACzG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,MAAM,QAAQ,GAAiB;YAC7B,kBAAkB,EAAE;gBAClB,aAAa,EAAE,MAAM;gBACrB,iBAAiB;aAClB;SACF,CAAC;QACF,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,qBAAqB;IACrB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG;QACb,8BAA8B;QAC9B,iBAAiB,WAAW,iEAAiE;QAC7F,WAAW,YAAY,GAAG,QAAQ,GAAG;QACrC,yFAAyF;QACzF,iLAAiL;KAClL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,QAAQ,GAAiB;QAC7B,QAAQ,EAAE,OAAO;QACjB,MAAM;QACN,kBAAkB,EAAE;YAClB,aAAa,EAAE,MAAM;YACrB,iBAAiB,EAAE,MAAM;SAC1B;KACF,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAE/E;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAAC,KAAgB,EAAE,MAAkB;IAClE,IAAI,oBAAoB,KAAK,KAAK;QAAE,UAAU,EAAE,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,UAAU,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC;QAC5C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;QAAE,UAAU,EAAE,CAAC;IAEpE,MAAM,IAAI,GAAG,MAAM,CAAC,mBAAmB;QACrC,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,yBAAyB,CAAC;IAC9B,MAAM,iBAAiB,GAAG;QACxB,oFAAoF,MAAM,CAAC,gBAAgB,IAAI,IAAI,GAAG;QACtH,2EAA2E,MAAM,CAAC,gBAAgB,QAAQ;QAC1G,qLAAqL;KACtL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAA8B;QAC1C,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,iBAAiB;SAClB;KACF,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,gBAAgB,CAAC,KAAgB,EAAE,MAAkB;IAClE,IAAI,gBAAgB,KAAK,KAAK;QAAE,UAAU,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,UAAU,EAAE,CAAC;IAEjC,2EAA2E;IAC3E,4CAA4C;IAC5C,MAAM,cAAc,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,UAAU,EAAE,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,sBAAsB,CAAC,KAAgB,EAAE,MAAkB;IACxE,IAAI,mBAAmB,KAAK,KAAK;QAAE,UAAU,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,UAAU,EAAE,CAAC;IAEjC,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,aAAa,GAAG,KAA2C,CAAC;IAClE,MAAM,MAAM,GACV,OAAO,KAAK,CAAC,UAAU,EAAE,MAAM,KAAK,QAAQ;QAC1C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM;QACzB,CAAC,CAAC,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ;YACxC,CAAC,CAAE,aAAa,CAAC,MAAiB;YAClC,CAAC,CAAC,EAAE,CAAC;IACX,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,eAAe,EAAE,KAAK,CAAC,UAAU;QACjC,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;QAAE,UAAU,EAAE,CAAC;IAErE,MAAM,QAAQ,GAA8B;QAC1C,kBAAkB,EAAE;YAClB,aAAa,EAAE,kBAAkB;YACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAkB;SAC7C;KACF,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,MAAkB;IAChE,8DAA8D;IAC9D,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,UAAU,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACvF,IAAI,CAAC,QAAQ;YAAE,UAAU,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,gCAAgC,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAO,EAAE,EAAE;YAC1F,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC/D,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,UAAU,EAAE,CAAC;AACf,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,QAAQ,CAAC,KAAgB;IACtC,oDAAoD;IACpD,IAAI,gBAAgB,EAAE;QAAE,UAAU,EAAE,CAAC;IAErC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,CAAC,KAAK,CAAC,4CAA4C,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,0EAA0E;QAC1E,oEAAoE;QACpE,oEAAoE;QACpE,8CAA8C;QAC9C,MAAM,YAAY,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,eAAe,EAAE,KAAK,CAAC,UAAU;YACjC,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;YAClC,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;YACpC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,UAAU,EAAE,CAAC;IACf,CAAC;IAED,QAAQ,KAAK,CAAC,eAAe,EAAE,CAAC;QAC9B,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;YACnC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnE,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrC,CAAC;YACD,UAAU,EAAE,CAAC;YACb,MAAM;QACR,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;YACnC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnE,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,UAAU,EAAE,CAAC;YACb,MAAM;QACR,CAAC;QACD,KAAK,cAAc;YACjB,MAAM,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACxC,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChC,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,YAAY;YACf,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACtC,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,YAAY;YACf,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACtC,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,kBAAkB;YACrB,MAAM,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5C,UAAU,EAAE,CAAC;YACb,MAAM;QACR;YACE,yDAAyD;YACzD,UAAU,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,UAAU,EAAE,CAAC;QACzB,MAAM,QAAQ,CAAC,KAAM,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,iDAAiD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CACtG,CAAC;QACF,UAAU,EAAE,CAAC;IACf,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
|
package/dist/install.js
CHANGED
|
@@ -105,14 +105,23 @@ async function main() {
|
|
|
105
105
|
` dispatcher → ${dispatcher}`,
|
|
106
106
|
``,
|
|
107
107
|
`Behavior is package-level, not per-project config:`,
|
|
108
|
-
` Bash policy
|
|
109
|
-
`
|
|
110
|
-
`
|
|
108
|
+
` Bash policy reminders are server-driven. The dispatcher posts the`,
|
|
109
|
+
` command to /api/v1/hooks/policy-reminder; the server tokenizes,`,
|
|
110
|
+
` intersects with the project's policy index, and returns matched`,
|
|
111
|
+
` policies. The dispatcher emits them as additionalContext so the`,
|
|
112
|
+
` agent reads them at the moment of action. There is no per-kind`,
|
|
113
|
+
` "advisory vs enforce" knob in the dispatcher anymore — that's`,
|
|
114
|
+
` decided server-side per policy.`,
|
|
115
|
+
` Local irreducible deny-floor (in lib/shellTokens.ts) blocks three`,
|
|
116
|
+
` catastrophic patterns unconditionally: rm -rf / | ~ | $HOME,`,
|
|
117
|
+
` dd of=<whole-disk>, mkfs <whole-disk>. These exist because we`,
|
|
118
|
+
` cannot trust the server to be reachable for "your machine is`,
|
|
119
|
+
` bricked" decisions. Bypass envelope still works.`,
|
|
111
120
|
` Other gate modes (preEdit, Stop checkpoint, lifecycle handlers)`,
|
|
112
121
|
` are package constants — they ship with sensible defaults that`,
|
|
113
122
|
` mature across versions. There are no JSON settings to flip.`,
|
|
114
123
|
``,
|
|
115
|
-
`Bypass for trivial edits / stops:`,
|
|
124
|
+
`Bypass for trivial edits / stops / one-off catastrophic runs:`,
|
|
116
125
|
` MNEMONIK_BYPASS_HOOKS=1 MNEMONIK_BYPASS_TYPE=typo claude ...`,
|
|
117
126
|
].join('\n'));
|
|
118
127
|
return 0;
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/behavior.d.ts
CHANGED
|
@@ -41,31 +41,26 @@ export declare const PRE_EDIT_GATE: GateMode;
|
|
|
41
41
|
*/
|
|
42
42
|
export declare const PRE_EDIT_ADVISORY_AUTO_FETCH = true;
|
|
43
43
|
/**
|
|
44
|
-
* PreToolUse Bash gate
|
|
44
|
+
* PreToolUse Bash gate (phase 3 simplification, 0.5.x line).
|
|
45
45
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*/
|
|
52
|
-
export declare const FORBIDDEN_GATE: GateMode;
|
|
53
|
-
/**
|
|
54
|
-
* PreToolUse Bash gate — `mustConfirm` policy kind.
|
|
46
|
+
* The dispatcher no longer does its own per-kind policy enforcement.
|
|
47
|
+
* Server-side /api/v1/hooks/policy-reminder is the single source of
|
|
48
|
+
* truth for "which policies apply to this action" — the dispatcher
|
|
49
|
+
* posts the bash command, gets back matched context-triggered policies,
|
|
50
|
+
* and emits them as additionalContext.
|
|
55
51
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
52
|
+
* The only LOCAL gate is the irreducible deny-floor in lib/shellTokens.ts
|
|
53
|
+
* — three regex patterns for catastrophic commands (rm -rf root/home,
|
|
54
|
+
* dd to a whole disk, mkfs of a whole disk). That floor exists because
|
|
55
|
+
* we cannot trust the server to be reachable for machine-bricking
|
|
56
|
+
* decisions. Everything else (project policies, forbiddenCommand,
|
|
57
|
+
* mustConfirm, defaultMode) is server-evaluated.
|
|
61
58
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* this constant to `enforce`; if they want it gone, they set it to `off`.
|
|
59
|
+
* No FORBIDDEN_GATE / MUST_CONFIRM_GATE knobs anymore: the SERVER
|
|
60
|
+
* decides whether to advise or deny based on policy.kind. If you need
|
|
61
|
+
* to flip a kind from advise-style to deny-style, that's a server-side
|
|
62
|
+
* change, not a client one.
|
|
67
63
|
*/
|
|
68
|
-
export declare const MUST_CONFIRM_GATE: GateMode;
|
|
69
64
|
/**
|
|
70
65
|
* Stop checkpoint gate (P5).
|
|
71
66
|
*
|
package/dist/lib/behavior.js
CHANGED
|
@@ -37,31 +37,26 @@ export const PRE_EDIT_GATE = 'advisory';
|
|
|
37
37
|
*/
|
|
38
38
|
export const PRE_EDIT_ADVISORY_AUTO_FETCH = true;
|
|
39
39
|
/**
|
|
40
|
-
* PreToolUse Bash gate
|
|
40
|
+
* PreToolUse Bash gate (phase 3 simplification, 0.5.x line).
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*/
|
|
48
|
-
export const FORBIDDEN_GATE = 'enforce';
|
|
49
|
-
/**
|
|
50
|
-
* PreToolUse Bash gate — `mustConfirm` policy kind.
|
|
42
|
+
* The dispatcher no longer does its own per-kind policy enforcement.
|
|
43
|
+
* Server-side /api/v1/hooks/policy-reminder is the single source of
|
|
44
|
+
* truth for "which policies apply to this action" — the dispatcher
|
|
45
|
+
* posts the bash command, gets back matched context-triggered policies,
|
|
46
|
+
* and emits them as additionalContext.
|
|
51
47
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
48
|
+
* The only LOCAL gate is the irreducible deny-floor in lib/shellTokens.ts
|
|
49
|
+
* — three regex patterns for catastrophic commands (rm -rf root/home,
|
|
50
|
+
* dd to a whole disk, mkfs of a whole disk). That floor exists because
|
|
51
|
+
* we cannot trust the server to be reachable for machine-bricking
|
|
52
|
+
* decisions. Everything else (project policies, forbiddenCommand,
|
|
53
|
+
* mustConfirm, defaultMode) is server-evaluated.
|
|
57
54
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* this constant to `enforce`; if they want it gone, they set it to `off`.
|
|
55
|
+
* No FORBIDDEN_GATE / MUST_CONFIRM_GATE knobs anymore: the SERVER
|
|
56
|
+
* decides whether to advise or deny based on policy.kind. If you need
|
|
57
|
+
* to flip a kind from advise-style to deny-style, that's a server-side
|
|
58
|
+
* change, not a client one.
|
|
63
59
|
*/
|
|
64
|
-
export const MUST_CONFIRM_GATE = 'advisory';
|
|
65
60
|
/**
|
|
66
61
|
* Stop checkpoint gate (P5).
|
|
67
62
|
*
|
package/dist/lib/behavior.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/lib/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAa,UAAU,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/lib/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAa,UAAU,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAa,UAAU,CAAC;AAEzD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAmB,IAAI,CAAC;AAE5D,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAmB,IAAI,CAAC;AAEzD,uCAAuC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAmB,IAAI,CAAC;AAErD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAmB,IAAI,CAAC"}
|
package/dist/lib/http.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Uses Node 20's global `fetch` — zero npm dependencies on the runtime side.
|
|
6
6
|
*/
|
|
7
|
-
import type { FileContextResponse, PreCompactResponse, PromptContextResponse, SnapshotResponse } from './types.js';
|
|
7
|
+
import type { FileContextResponse, PolicyReminderResponse, PreCompactResponse, PromptContextResponse, SnapshotResponse } from './types.js';
|
|
8
8
|
export interface FetchSnapshotInput {
|
|
9
9
|
server: string;
|
|
10
10
|
apiKey: string;
|
|
@@ -26,6 +26,23 @@ export interface FetchFileContextInput {
|
|
|
26
26
|
filePath: string;
|
|
27
27
|
}
|
|
28
28
|
export declare function fetchFileContext(input: FetchFileContextInput): Promise<FileContextResponse | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Fetch context-triggered policies that apply to the action the
|
|
31
|
+
* dispatcher is about to gate. Server tokenizes the supplied `context`
|
|
32
|
+
* string, intersects against the project's trigger_keywords index, and
|
|
33
|
+
* returns matched policies. The dispatcher then emits them as
|
|
34
|
+
* additionalContext for the agent. Soft-fails (returns null) on auth /
|
|
35
|
+
* lookup / timeout — dispatcher fails open in that case.
|
|
36
|
+
*/
|
|
37
|
+
export interface FetchPolicyReminderInput {
|
|
38
|
+
server: string;
|
|
39
|
+
apiKey: string;
|
|
40
|
+
cwd: string;
|
|
41
|
+
claudeSessionId: string;
|
|
42
|
+
tool: string;
|
|
43
|
+
context: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function fetchPolicyReminder(input: FetchPolicyReminderInput): Promise<PolicyReminderResponse | null>;
|
|
29
46
|
/**
|
|
30
47
|
* Fire-and-forget gate-firing telemetry. Every PreToolUse decision (allow,
|
|
31
48
|
* deny, advisory nudge, dedup, soft-pass, bypass, etc.) emits one of these
|
package/dist/lib/http.js
CHANGED
|
@@ -64,6 +64,38 @@ export async function fetchFileContext(input) {
|
|
|
64
64
|
clearTimeout(timer);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
+
export async function fetchPolicyReminder(input) {
|
|
68
|
+
if (!input.context.trim())
|
|
69
|
+
return null;
|
|
70
|
+
const url = `${input.server.replace(/\/$/, '')}/api/v1/hooks/policy-reminder`;
|
|
71
|
+
const ac = new AbortController();
|
|
72
|
+
const timer = setTimeout(() => ac.abort(), FETCH_TIMEOUT_MS);
|
|
73
|
+
try {
|
|
74
|
+
const res = await fetch(url, {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: {
|
|
77
|
+
'content-type': 'application/json',
|
|
78
|
+
authorization: `Bearer ${input.apiKey}`,
|
|
79
|
+
},
|
|
80
|
+
body: JSON.stringify({
|
|
81
|
+
cwd: input.cwd,
|
|
82
|
+
claudeSessionId: input.claudeSessionId,
|
|
83
|
+
tool: input.tool,
|
|
84
|
+
context: input.context,
|
|
85
|
+
}),
|
|
86
|
+
signal: ac.signal,
|
|
87
|
+
});
|
|
88
|
+
if (!res.ok)
|
|
89
|
+
return null;
|
|
90
|
+
return (await res.json());
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
67
99
|
export async function reportGateFired(input) {
|
|
68
100
|
if (!input.apiKey)
|
|
69
101
|
return;
|
package/dist/lib/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,2EAA2E;AAC3E,wEAAwE;AACxE,2EAA2E;AAC3E,aAAa;AACb,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AASjC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC;IACvE,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;YAChF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAA4B;IAE5B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,4BAA4B,CAAC;IAC3E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAmBD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAA+B;IAE/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,+BAA+B,CAAC;IAC9E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAmBD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAA2B;IAC/D,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO;IAC1B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC;IACzE,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAiBD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAwB;IACzD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO;IAC1B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC;IACrE,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAWD;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAoB;IAEpB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;YAChF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAoB;IACzD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,6BAA6B,CAAC;IAC5E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;YAChF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAoB;IACxD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,4BAA4B,CAAC;IAC3E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;YAChF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAQD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAoC;IAEpC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;aACvC,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAMD,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,gCAAgC,CAAC;IAC/E,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,4EAA4E;QAC5E,kEAAkE;QAClE,qDAAqD;QACrD,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,KAAK,CAAC,eAAe;gBAChC,QAAQ,EAAE,mBAAmB;gBAC7B,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAMD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA8B;IAE9B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC;IACtE,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,SAAS,EAAE,KAAK,CAAC,eAAe;gBAChC,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -1,76 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Irreducible deny-floor for catastrophic, irreversible commands.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* shell builtins.
|
|
8
|
-
* - A full parser introduces a runtime dep — the dispatcher is meant to
|
|
9
|
-
* be a single self-contained file with zero npm dependencies.
|
|
10
|
-
* - The regex-only approach is the false-positive trap the plan explicitly
|
|
11
|
-
* calls out (e.g. matching `rm -rf` inside a string literal). We avoid
|
|
12
|
-
* that by tokenising first and only matching tokens, never substrings.
|
|
4
|
+
* Phase 3 simplification (claude-code-hooks 0.5.0): all other policy
|
|
5
|
+
* matching moved server-side. The dispatcher posts a context blob to
|
|
6
|
+
* /api/v1/hooks/policy-reminder and emits whatever reminders come back.
|
|
13
7
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* - Backticks / $(...) are tokenised as raw text, not recursed into.
|
|
18
|
-
* - Pipes / redirects / && / || split commands so each side can be matched
|
|
19
|
-
* independently — the result is a list of token arrays, one per command.
|
|
20
|
-
*/
|
|
21
|
-
export interface TokenizeResult {
|
|
22
|
-
/** Each entry is one command in a pipeline / sequence. */
|
|
23
|
-
commands: string[][];
|
|
24
|
-
/**
|
|
25
|
-
* Parallel to `commands`: per-token boolean — true iff the token came from
|
|
26
|
-
* (or partially included) a quoted region (single OR double quotes). The
|
|
27
|
-
* regex match path uses this to exclude quoted argument bodies from
|
|
28
|
-
* pattern matching, so a project policy regex like `\b(api|db|...):` can't
|
|
29
|
-
* spuriously match because "api" appears inside `gh api 'jq-query-text'`.
|
|
30
|
-
* The plain-phrase / token-subsequence path doesn't need this since it
|
|
31
|
-
* already operates on whole tokens — quoted strings stay as one token
|
|
32
|
-
* and are compared verbatim.
|
|
33
|
-
*/
|
|
34
|
-
wasQuoted: boolean[][];
|
|
35
|
-
}
|
|
36
|
-
export declare function tokenize(input: string): TokenizeResult;
|
|
37
|
-
/**
|
|
38
|
-
* Match a token sequence against a project policy pattern.
|
|
8
|
+
* This file is the ONE place the dispatcher still does local pattern
|
|
9
|
+
* matching. The patterns here cover four categories of "your machine is
|
|
10
|
+
* bricked, no recovery without reinstall" commands:
|
|
39
11
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* equals the pattern tokens. Critically, this does NOT substring-match
|
|
44
|
-
* against `tokens.join(' ')` — that would defeat the tokenizer (e.g.
|
|
45
|
-
* `echo '{"x":"git push origin main"}'` would falsely match because the
|
|
46
|
-
* literal phrase appears inside a single-quoted JSON token).
|
|
47
|
-
* - Glob like "git push *" or "delete-*" — pattern tokens with "*" matching
|
|
48
|
-
* any single command token (one-for-one). "*" within a token (e.g.
|
|
49
|
-
* "delete-*") is anchored to one whole command token.
|
|
50
|
-
* - Regex — anything that looks like a regex (contains "|", "\\", "^", "$",
|
|
51
|
-
* "(", ")", ".", "+", "?", "{", "}", "[", "]") OR is wrapped in /…/ or
|
|
52
|
-
* /…/i. Compiled and tested against `tokens.join(' ')`. The auto-detect
|
|
53
|
-
* covers the realistic case where a project's mustConfirm pattern is
|
|
54
|
-
* pipe-alternation (e.g. "make staging|make prod|git push|git commit")
|
|
55
|
-
* without explicit /…/ wrapping.
|
|
12
|
+
* 1. rm -rf / | ~ | $HOME — wipe root or home directory
|
|
13
|
+
* 2. dd of=/dev/<whole-disk> — direct overwrite of a system disk
|
|
14
|
+
* 3. mkfs <whole-disk> — format a system disk
|
|
56
15
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
*
|
|
63
|
-
* regardless of project-level policy. Catastrophic, host-rooted commands
|
|
64
|
-
* with no legitimate agent-driven use case.
|
|
16
|
+
* The first three rules collapse into three regex entries. Each is
|
|
17
|
+
* deliberately tight: `dd` against a partition (`/dev/sda1`) or a regular
|
|
18
|
+
* file passes; only whole-disk targets (`/dev/sda`, `/dev/nvme0n1`)
|
|
19
|
+
* trigger the deny. Same for `mkfs`. False-positive cost: the user uses
|
|
20
|
+
* the bypass envelope (`MNEMONIK_BYPASS_HOOKS=1` + type + detail) once.
|
|
21
|
+
* False-negative cost: the user's machine.
|
|
65
22
|
*
|
|
66
|
-
* Project
|
|
23
|
+
* Project-policy denies (forbiddenCommand) are NOT in this list. Those
|
|
24
|
+
* are evaluated server-side and surface as advisory reminders by default,
|
|
25
|
+
* configurable to enforce in lib/behavior.ts FORBIDDEN_GATE — but that
|
|
26
|
+
* mode is honored by the SERVER's reminder builder, not here. The local
|
|
27
|
+
* floor is project-independent.
|
|
67
28
|
*/
|
|
68
|
-
export declare const
|
|
29
|
+
export declare const IRREDUCIBLE_DENY: ReadonlyArray<{
|
|
30
|
+
name: string;
|
|
31
|
+
pattern: RegExp;
|
|
32
|
+
}>;
|
|
69
33
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* Project `mustConfirm` policies extend this set; nothing shrinks it.
|
|
34
|
+
* Returns the irreducible-deny pattern name when `command` matches one of
|
|
35
|
+
* the catastrophic patterns, or null when it doesn't. Run on the raw
|
|
36
|
+
* command string (not tokens) so dd-of= and mkfs flags survive.
|
|
75
37
|
*/
|
|
76
|
-
export declare
|
|
38
|
+
export declare function matchIrreducibleDeny(command: string): string | null;
|
package/dist/lib/shellTokens.js
CHANGED
|
@@ -1,334 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Irreducible deny-floor for catastrophic, irreversible commands.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* shell builtins.
|
|
8
|
-
* - A full parser introduces a runtime dep — the dispatcher is meant to
|
|
9
|
-
* be a single self-contained file with zero npm dependencies.
|
|
10
|
-
* - The regex-only approach is the false-positive trap the plan explicitly
|
|
11
|
-
* calls out (e.g. matching `rm -rf` inside a string literal). We avoid
|
|
12
|
-
* that by tokenising first and only matching tokens, never substrings.
|
|
4
|
+
* Phase 3 simplification (claude-code-hooks 0.5.0): all other policy
|
|
5
|
+
* matching moved server-side. The dispatcher posts a context blob to
|
|
6
|
+
* /api/v1/hooks/policy-reminder and emits whatever reminders come back.
|
|
13
7
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* - Backticks / $(...) are tokenised as raw text, not recursed into.
|
|
18
|
-
* - Pipes / redirects / && / || split commands so each side can be matched
|
|
19
|
-
* independently — the result is a list of token arrays, one per command.
|
|
20
|
-
*/
|
|
21
|
-
const META_TOKENS = new Set(['|', '||', '&&', ';', '&', '>', '>>', '<', '<<']);
|
|
22
|
-
export function tokenize(input) {
|
|
23
|
-
const commands = [];
|
|
24
|
-
const wasQuotedAll = [];
|
|
25
|
-
let current = [];
|
|
26
|
-
let currentQuoted = [];
|
|
27
|
-
let buf = '';
|
|
28
|
-
let bufQuoted = false;
|
|
29
|
-
let mode = 'normal';
|
|
30
|
-
const flushToken = () => {
|
|
31
|
-
if (buf.length > 0) {
|
|
32
|
-
current.push(buf);
|
|
33
|
-
currentQuoted.push(bufQuoted);
|
|
34
|
-
buf = '';
|
|
35
|
-
bufQuoted = false;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const flushCommand = () => {
|
|
39
|
-
flushToken();
|
|
40
|
-
if (current.length > 0) {
|
|
41
|
-
commands.push(current);
|
|
42
|
-
wasQuotedAll.push(currentQuoted);
|
|
43
|
-
}
|
|
44
|
-
current = [];
|
|
45
|
-
currentQuoted = [];
|
|
46
|
-
};
|
|
47
|
-
for (let i = 0; i < input.length; i++) {
|
|
48
|
-
const c = input[i];
|
|
49
|
-
if (mode === 'single') {
|
|
50
|
-
if (c === "'") {
|
|
51
|
-
mode = 'normal';
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
buf += c;
|
|
55
|
-
bufQuoted = true;
|
|
56
|
-
}
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (mode === 'double') {
|
|
60
|
-
if (c === '"') {
|
|
61
|
-
mode = 'normal';
|
|
62
|
-
}
|
|
63
|
-
else if (c === '\\' && i + 1 < input.length) {
|
|
64
|
-
// Handle escaped quotes inside double-quoted strings.
|
|
65
|
-
buf += input[++i];
|
|
66
|
-
bufQuoted = true;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
buf += c;
|
|
70
|
-
bufQuoted = true;
|
|
71
|
-
}
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
// mode === 'normal'
|
|
75
|
-
if (c === "'") {
|
|
76
|
-
mode = 'single';
|
|
77
|
-
bufQuoted = true; // entering quoted region — even if empty, mark token
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
if (c === '"') {
|
|
81
|
-
mode = 'double';
|
|
82
|
-
bufQuoted = true;
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (c === '\\' && i + 1 < input.length) {
|
|
86
|
-
buf += input[++i];
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
if (c === ' ' || c === '\t' || c === '\n') {
|
|
90
|
-
flushToken();
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
// Two-char meta tokens we recognise.
|
|
94
|
-
if ((c === '|' && input[i + 1] === '|') ||
|
|
95
|
-
(c === '&' && input[i + 1] === '&') ||
|
|
96
|
-
(c === '>' && input[i + 1] === '>') ||
|
|
97
|
-
(c === '<' && input[i + 1] === '<')) {
|
|
98
|
-
flushCommand();
|
|
99
|
-
i++;
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
if (c === '|' || c === ';' || c === '&') {
|
|
103
|
-
flushCommand();
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
if (c === '>' || c === '<') {
|
|
107
|
-
flushCommand();
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
buf += c;
|
|
111
|
-
}
|
|
112
|
-
flushCommand();
|
|
113
|
-
return { commands, wasQuoted: wasQuotedAll };
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Match a token sequence against a project policy pattern.
|
|
8
|
+
* This file is the ONE place the dispatcher still does local pattern
|
|
9
|
+
* matching. The patterns here cover four categories of "your machine is
|
|
10
|
+
* bricked, no recovery without reinstall" commands:
|
|
117
11
|
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* equals the pattern tokens. Critically, this does NOT substring-match
|
|
122
|
-
* against `tokens.join(' ')` — that would defeat the tokenizer (e.g.
|
|
123
|
-
* `echo '{"x":"git push origin main"}'` would falsely match because the
|
|
124
|
-
* literal phrase appears inside a single-quoted JSON token).
|
|
125
|
-
* - Glob like "git push *" or "delete-*" — pattern tokens with "*" matching
|
|
126
|
-
* any single command token (one-for-one). "*" within a token (e.g.
|
|
127
|
-
* "delete-*") is anchored to one whole command token.
|
|
128
|
-
* - Regex — anything that looks like a regex (contains "|", "\\", "^", "$",
|
|
129
|
-
* "(", ")", ".", "+", "?", "{", "}", "[", "]") OR is wrapped in /…/ or
|
|
130
|
-
* /…/i. Compiled and tested against `tokens.join(' ')`. The auto-detect
|
|
131
|
-
* covers the realistic case where a project's mustConfirm pattern is
|
|
132
|
-
* pipe-alternation (e.g. "make staging|make prod|git push|git commit")
|
|
133
|
-
* without explicit /…/ wrapping.
|
|
134
|
-
*
|
|
135
|
-
* Returning the matched pattern (verbatim) lets the dispatcher emit it
|
|
136
|
-
* verbatim in telemetry and deny-reason text.
|
|
137
|
-
*/
|
|
138
|
-
export function matchCommand(commandTokens, patterns, wasQuoted) {
|
|
139
|
-
if (commandTokens.length === 0 || patterns.length === 0)
|
|
140
|
-
return null;
|
|
141
|
-
const joined = commandTokens.join(' ').trim();
|
|
142
|
-
// Regex-safe joined excludes content of quoted tokens — see TokenizeResult
|
|
143
|
-
// doc comment. Each quoted token becomes a single-character placeholder so
|
|
144
|
-
// patterns can't bridge across them either. When wasQuoted is not provided
|
|
145
|
-
// (test fixtures, legacy callers), fall back to the old behavior.
|
|
146
|
-
const joinedForRegex = wasQuoted
|
|
147
|
-
? commandTokens
|
|
148
|
-
.map((t, i) => (wasQuoted[i] ? '' : t))
|
|
149
|
-
.join(' ')
|
|
150
|
-
.trim()
|
|
151
|
-
: joined;
|
|
152
|
-
for (const raw of patterns) {
|
|
153
|
-
const pattern = raw.trim();
|
|
154
|
-
if (!pattern)
|
|
155
|
-
continue;
|
|
156
|
-
const explicitRegex = parseExplicitRegex(pattern);
|
|
157
|
-
if (explicitRegex !== null) {
|
|
158
|
-
try {
|
|
159
|
-
if (new RegExp(explicitRegex.body, explicitRegex.flags).test(joinedForRegex)) {
|
|
160
|
-
return pattern;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
/* invalid regex — skip */
|
|
165
|
-
}
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
// Pipe alternation: split into segments and decide phrase-vs-regex
|
|
169
|
-
// PER SEGMENT — but ONLY at the top level of the pattern. Pipes inside
|
|
170
|
-
// `(...)` or `[...]` groups are regex syntax (alternation inside a
|
|
171
|
-
// capture group, character class), not policy alternatives. Splitting
|
|
172
|
-
// them produced the v0.2.0 false positive: a YAML-targeted regex like
|
|
173
|
-
// `\b(app|db|...|api|...):` was split into a phrase segment "api" that
|
|
174
|
-
// matched any command containing `api` as a token (e.g. `gh api ...`).
|
|
175
|
-
const segments = splitTopLevelPipes(pattern);
|
|
176
|
-
for (const segment of segments) {
|
|
177
|
-
if (matchOneSegment(segment, commandTokens, joinedForRegex))
|
|
178
|
-
return pattern;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
function matchOneSegment(segment, commandTokens, joined) {
|
|
184
|
-
if (looksLikeRegex(segment)) {
|
|
185
|
-
try {
|
|
186
|
-
return new RegExp(segment).test(joined);
|
|
187
|
-
}
|
|
188
|
-
catch {
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
const tokens = segment.split(/\s+/).filter(Boolean);
|
|
193
|
-
if (tokens.length === 0)
|
|
194
|
-
return false;
|
|
195
|
-
return matchTokenSubsequence(commandTokens, tokens);
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Split `pattern` on `|` only when the pipe is at the top level (not nested
|
|
199
|
-
* inside `(...)` or `[...]`). Backslash-escapes the next character. Used by
|
|
200
|
-
* matchCommand to handle policy patterns like `make staging|make prod` while
|
|
201
|
-
* leaving regex group alternations like `(app|db|...)` intact.
|
|
202
|
-
*/
|
|
203
|
-
function splitTopLevelPipes(pattern) {
|
|
204
|
-
const segments = [];
|
|
205
|
-
let buf = '';
|
|
206
|
-
let depthParen = 0;
|
|
207
|
-
let depthBracket = 0;
|
|
208
|
-
for (let i = 0; i < pattern.length; i++) {
|
|
209
|
-
const c = pattern[i];
|
|
210
|
-
if (c === '\\' && i + 1 < pattern.length) {
|
|
211
|
-
buf += c + pattern[i + 1];
|
|
212
|
-
i++;
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
if (c === '(')
|
|
216
|
-
depthParen++;
|
|
217
|
-
else if (c === ')')
|
|
218
|
-
depthParen = Math.max(0, depthParen - 1);
|
|
219
|
-
else if (c === '[')
|
|
220
|
-
depthBracket++;
|
|
221
|
-
else if (c === ']')
|
|
222
|
-
depthBracket = Math.max(0, depthBracket - 1);
|
|
223
|
-
if (c === '|' && depthParen === 0 && depthBracket === 0) {
|
|
224
|
-
const trimmed = buf.trim();
|
|
225
|
-
if (trimmed)
|
|
226
|
-
segments.push(trimmed);
|
|
227
|
-
buf = '';
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
buf += c;
|
|
231
|
-
}
|
|
232
|
-
const tail = buf.trim();
|
|
233
|
-
if (tail)
|
|
234
|
-
segments.push(tail);
|
|
235
|
-
return segments.length > 0 ? segments : [pattern];
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* /regex/ or /regex/i — explicit opt-in to joined-form regex matching.
|
|
239
|
-
* Returns null when the pattern isn't wrapped this way.
|
|
240
|
-
*/
|
|
241
|
-
function parseExplicitRegex(pattern) {
|
|
242
|
-
if (!pattern.startsWith('/'))
|
|
243
|
-
return null;
|
|
244
|
-
const tail = pattern.endsWith('/i') ? '/i' : pattern.endsWith('/') ? '/' : null;
|
|
245
|
-
if (!tail)
|
|
246
|
-
return null;
|
|
247
|
-
return { body: pattern.slice(1, pattern.length - tail.length), flags: tail === '/i' ? 'i' : '' };
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Heuristic: does `pattern` contain regex metacharacters that aren't part of
|
|
251
|
-
* the plain-phrase / glob vocabulary? `*` alone is glob, not regex. The pipe
|
|
252
|
-
* is the most common case in real-world policies.
|
|
253
|
-
*/
|
|
254
|
-
function looksLikeRegex(pattern) {
|
|
255
|
-
return /[|\\.^$()+?{}[\]]/.test(pattern);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* True iff `patternTokens` appears as a contiguous sub-sequence of
|
|
259
|
-
* `commandTokens`. A "*" pattern token matches any single command token.
|
|
12
|
+
* 1. rm -rf / | ~ | $HOME — wipe root or home directory
|
|
13
|
+
* 2. dd of=/dev/<whole-disk> — direct overwrite of a system disk
|
|
14
|
+
* 3. mkfs <whole-disk> — format a system disk
|
|
260
15
|
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
|
|
267
|
-
function matchTokenSubsequence(commandTokens, patternTokens) {
|
|
268
|
-
const need = patternTokens.length;
|
|
269
|
-
if (need === 0)
|
|
270
|
-
return true;
|
|
271
|
-
for (let start = 0; start <= commandTokens.length - need; start++) {
|
|
272
|
-
let ok = true;
|
|
273
|
-
for (let i = 0; i < need; i++) {
|
|
274
|
-
const cmd = commandTokens[start + i] ?? '';
|
|
275
|
-
const pat = patternTokens[i] ?? '';
|
|
276
|
-
if (pat === '*')
|
|
277
|
-
continue;
|
|
278
|
-
if (pat.includes('*')) {
|
|
279
|
-
// Within-token glob, e.g. "delete-*" — anchored to the whole token.
|
|
280
|
-
const escaped = pat
|
|
281
|
-
.split('*')
|
|
282
|
-
.map((seg) => seg.replace(/[.+?^${}()|[\]\\]/g, '\\$&'))
|
|
283
|
-
.join('.*');
|
|
284
|
-
if (!new RegExp(`^${escaped}$`).test(cmd)) {
|
|
285
|
-
ok = false;
|
|
286
|
-
break;
|
|
287
|
-
}
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
if (cmd !== pat) {
|
|
291
|
-
ok = false;
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
if (ok)
|
|
296
|
-
return true;
|
|
297
|
-
}
|
|
298
|
-
return false;
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Built-in `forbiddenCommand` patterns. The agent should NEVER run these,
|
|
302
|
-
* regardless of project-level policy. Catastrophic, host-rooted commands
|
|
303
|
-
* with no legitimate agent-driven use case.
|
|
16
|
+
* The first three rules collapse into three regex entries. Each is
|
|
17
|
+
* deliberately tight: `dd` against a partition (`/dev/sda1`) or a regular
|
|
18
|
+
* file passes; only whole-disk targets (`/dev/sda`, `/dev/nvme0n1`)
|
|
19
|
+
* trigger the deny. Same for `mkfs`. False-positive cost: the user uses
|
|
20
|
+
* the bypass envelope (`MNEMONIK_BYPASS_HOOKS=1` + type + detail) once.
|
|
21
|
+
* False-negative cost: the user's machine.
|
|
304
22
|
*
|
|
305
|
-
* Project
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
23
|
+
* Project-policy denies (forbiddenCommand) are NOT in this list. Those
|
|
24
|
+
* are evaluated server-side and surface as advisory reminders by default,
|
|
25
|
+
* configurable to enforce in lib/behavior.ts FORBIDDEN_GATE — but that
|
|
26
|
+
* mode is honored by the SERVER's reminder builder, not here. The local
|
|
27
|
+
* floor is project-independent.
|
|
28
|
+
*/
|
|
29
|
+
export const IRREDUCIBLE_DENY = [
|
|
30
|
+
// rm with -rf (any flag-letter order: -rf, -fr, -Rrf) targeting / or ~ or
|
|
31
|
+
// $HOME. The trailing negative lookahead ensures the path doesn't continue
|
|
32
|
+
// into a subpath: `rm -rf /tmp/foo` and `rm -rf ~/scratch` pass through.
|
|
33
|
+
// Only the root, the home tilde, and the literal $HOME variable trigger.
|
|
34
|
+
{
|
|
35
|
+
name: 'rm-rf-root-or-home',
|
|
36
|
+
pattern: /\brm\s+-[a-zA-Z]*r[a-zA-Z]*f?[a-zA-Z]*\s+(?:\/|~|\$HOME)(?![A-Za-z0-9/_-])/,
|
|
37
|
+
},
|
|
38
|
+
// dd ... of=/dev/<whole-disk>. Whole-disk = sd[a-z], nvme<N>n<N>, hd[a-z],
|
|
39
|
+
// vd[a-z]. Partitions like /dev/sda1 deliberately do NOT match (the
|
|
40
|
+
// negative lookahead rejects a trailing digit).
|
|
41
|
+
{
|
|
42
|
+
name: 'dd-of-whole-disk',
|
|
43
|
+
pattern: /\bdd\b[^|;&]*\bof=\/dev\/(?:sd[a-z]|nvme\d+n\d+|hd[a-z]|vd[a-z])(?![A-Za-z0-9])/,
|
|
44
|
+
},
|
|
45
|
+
// mkfs.* /dev/<whole-disk>. Same whole-disk shape.
|
|
46
|
+
{
|
|
47
|
+
name: 'mkfs-whole-disk',
|
|
48
|
+
pattern: /\bmkfs(?:\.[a-z0-9]+)?\b[^|;&]*?\s\/dev\/(?:sd[a-z]|nvme\d+n\d+|hd[a-z]|vd[a-z])(?![A-Za-z0-9])/,
|
|
49
|
+
},
|
|
311
50
|
];
|
|
312
51
|
/**
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
* Project `mustConfirm` policies extend this set; nothing shrinks it.
|
|
52
|
+
* Returns the irreducible-deny pattern name when `command` matches one of
|
|
53
|
+
* the catastrophic patterns, or null when it doesn't. Run on the raw
|
|
54
|
+
* command string (not tokens) so dd-of= and mkfs flags survive.
|
|
318
55
|
*/
|
|
319
|
-
export
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
'git branch -D',
|
|
327
|
-
'npm publish',
|
|
328
|
-
'pnpm publish',
|
|
329
|
-
'yarn publish',
|
|
330
|
-
'docker rm',
|
|
331
|
-
'docker rmi',
|
|
332
|
-
'kubectl delete',
|
|
333
|
-
];
|
|
56
|
+
export function matchIrreducibleDeny(command) {
|
|
57
|
+
for (const { name, pattern } of IRREDUCIBLE_DENY) {
|
|
58
|
+
if (pattern.test(command))
|
|
59
|
+
return name;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
334
63
|
//# sourceMappingURL=shellTokens.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellTokens.js","sourceRoot":"","sources":["../../src/lib/shellTokens.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shellTokens.js","sourceRoot":"","sources":["../../src/lib/shellTokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAqD;IAChF,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,yEAAyE;IACzE;QACE,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,4EAA4E;KACtF;IACD,2EAA2E;IAC3E,oEAAoE;IACpE,gDAAgD;IAChD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,iFAAiF;KAC3F;IACD,mDAAmD;IACnD;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iGAAiG;KAC3G;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -61,6 +61,27 @@ export interface BypassEnvelope {
|
|
|
61
61
|
* in MNEMONIK_BYPASS_TYPE turn into a permanent escape hatch. */
|
|
62
62
|
invalidReason: string | null;
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Server response from /api/v1/hooks/policy-reminder.
|
|
66
|
+
*
|
|
67
|
+
* Each entry is a context-triggered policy whose trigger_keywords overlap
|
|
68
|
+
* the action context the dispatcher posted. The dispatcher emits these as
|
|
69
|
+
* additionalContext (Claude Code) / systemMessage (Codex). The `kind`
|
|
70
|
+
* tells the agent whether the policy is forbidden / mustConfirm / etc.,
|
|
71
|
+
* the `description` is the human-readable rule text, and `replacement`
|
|
72
|
+
* (when set) is suggested alternative phrasing.
|
|
73
|
+
*/
|
|
74
|
+
export interface PolicyReminderResponse {
|
|
75
|
+
ok: boolean;
|
|
76
|
+
reason?: 'unauthorized' | 'no_project' | 'no_context' | 'lookup_failed';
|
|
77
|
+
policies: Array<{
|
|
78
|
+
id: string;
|
|
79
|
+
kind: string;
|
|
80
|
+
pattern: string;
|
|
81
|
+
description: string | null;
|
|
82
|
+
replacement: string | null;
|
|
83
|
+
}>;
|
|
84
|
+
}
|
|
64
85
|
/** Server response from /api/v1/hooks/file-context (auto-fetch path). */
|
|
65
86
|
export interface FileContextResponse {
|
|
66
87
|
ok: boolean;
|
|
@@ -72,13 +93,22 @@ export interface FileContextResponse {
|
|
|
72
93
|
summary: string;
|
|
73
94
|
} | null;
|
|
74
95
|
}
|
|
75
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Server snapshot returned by /api/v1/hooks/snapshot.
|
|
98
|
+
*
|
|
99
|
+
* Phase 3 (0.5.0): the dispatcher no longer reads `policies` from the
|
|
100
|
+
* snapshot — policy matching is fully server-side via
|
|
101
|
+
* /api/v1/hooks/policy-reminder. The snapshot is still used for
|
|
102
|
+
* coveredFiles + editedFiles + checkpoint/snapshot lifecycle fields.
|
|
103
|
+
* The `policies` field is retained for backwards compatibility with
|
|
104
|
+
* server versions that still populate it.
|
|
105
|
+
*/
|
|
76
106
|
export interface SnapshotResponse {
|
|
77
107
|
ok: boolean;
|
|
78
108
|
reason?: 'unauthorized' | 'no_project' | 'no_active_session';
|
|
79
109
|
coveredFiles: string[];
|
|
80
110
|
editedFiles: string[];
|
|
81
|
-
policies
|
|
111
|
+
policies?: {
|
|
82
112
|
forbiddenCommand: Array<{
|
|
83
113
|
pattern: string;
|
|
84
114
|
description: string;
|
package/dist/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgLH,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mnemonik/claude-code-hooks",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Claude Code lifecycle contextual hooks for Mnemonik. PreToolUse Edit/Write/NotebookEdit/Bash gates plus SessionStart bootstrap pre-injection, Stop checkpoint gate (advisory), PreCompact context_snapshot pre-injection, SessionEnd save, and UserPromptSubmit context inject. filesToWrite delivery of skill/rules/.mnemonik.json continues to flow for ALL clients including Claude Code — this package adds host-side hook gating only. Versioned independently from the @mnemonik/server release cadence (mirrors @mnemonik/scanner).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|