@coderifts/agent-guard 1.0.0 → 1.1.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/cjs/detector.d.ts +1 -1
- package/dist/cjs/detector.d.ts.map +1 -1
- package/dist/cjs/detector.js +176 -3
- package/dist/cjs/detector.js.map +1 -1
- package/dist/cjs/enforcement-gate.d.ts +42 -0
- package/dist/cjs/enforcement-gate.d.ts.map +1 -0
- package/dist/cjs/enforcement-gate.js +106 -0
- package/dist/cjs/enforcement-gate.js.map +1 -0
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +56 -29
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +24 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/receipt-binding.d.ts +60 -0
- package/dist/cjs/receipt-binding.d.ts.map +1 -0
- package/dist/cjs/receipt-binding.js +110 -0
- package/dist/cjs/receipt-binding.js.map +1 -0
- package/dist/cjs/session-taint.d.ts +97 -0
- package/dist/cjs/session-taint.d.ts.map +1 -0
- package/dist/cjs/session-taint.js +317 -0
- package/dist/cjs/session-taint.js.map +1 -0
- package/dist/cjs/types.d.ts +1 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/detector.d.ts +1 -1
- package/dist/esm/detector.d.ts.map +1 -1
- package/dist/esm/detector.js +176 -3
- package/dist/esm/detector.js.map +1 -1
- package/dist/esm/enforcement-gate.d.ts +42 -0
- package/dist/esm/enforcement-gate.d.ts.map +1 -0
- package/dist/esm/enforcement-gate.js +101 -0
- package/dist/esm/enforcement-gate.js.map +1 -0
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +56 -29
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/receipt-binding.d.ts +60 -0
- package/dist/esm/receipt-binding.d.ts.map +1 -0
- package/dist/esm/receipt-binding.js +105 -0
- package/dist/esm/receipt-binding.js.map +1 -0
- package/dist/esm/session-taint.d.ts +97 -0
- package/dist/esm/session-taint.d.ts.map +1 -0
- package/dist/esm/session-taint.js +305 -0
- package/dist/esm/session-taint.js.map +1 -0
- package/dist/esm/types.d.ts +1 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side receipt→envelope BINDING (P0 fix: receipt-substitution).
|
|
3
|
+
*
|
|
4
|
+
* A valid receipt authenticates a decision the SERVER signed — it does NOT authenticate whatever
|
|
5
|
+
* envelope an attacker wraps around it. Before executing with enforced:true, the guard must bind the
|
|
6
|
+
* receipt to THIS envelope by LOCALLY RECOMPUTING the canonical decision body hash and comparing it
|
|
7
|
+
* to the receipt's SIGNED `bh` (never trusting the envelope's own claimed `decision_body_hash`, which
|
|
8
|
+
* an attacker rewrites). This mirrors the server's §106 isCurrentlyAuthorized binding, applied in the
|
|
9
|
+
* client — the guard is the component that authorizes execution, so the binding must live here too.
|
|
10
|
+
*
|
|
11
|
+
* The canonicalization is ported VERBATIM from the server's canonical-json.js + decision-result.js
|
|
12
|
+
* computeBodyHash so the recomputed hash is byte-identical to the server's decision_body_hash.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
/**
|
|
16
|
+
* RFC 8785 (JCS) canonical JSON for the envelope domain (ASCII keys, JSON-representable scalars).
|
|
17
|
+
* Ported verbatim from the server canonicalizer so client + server hash identically.
|
|
18
|
+
*/
|
|
19
|
+
export function canonicalJson(value) {
|
|
20
|
+
return encode(value);
|
|
21
|
+
}
|
|
22
|
+
function encode(value) {
|
|
23
|
+
if (value === null)
|
|
24
|
+
return 'null';
|
|
25
|
+
const t = typeof value;
|
|
26
|
+
if (t === 'boolean' || t === 'string')
|
|
27
|
+
return JSON.stringify(value);
|
|
28
|
+
if (t === 'number') {
|
|
29
|
+
if (!Number.isFinite(value))
|
|
30
|
+
throw new TypeError('canonicalJson: non-finite number is not representable');
|
|
31
|
+
return JSON.stringify(value);
|
|
32
|
+
}
|
|
33
|
+
if (t === 'undefined')
|
|
34
|
+
throw new TypeError('canonicalJson: undefined is not representable (omit the key instead)');
|
|
35
|
+
if (Array.isArray(value))
|
|
36
|
+
return `[${value.map(encode).join(',')}]`;
|
|
37
|
+
if (t === 'object') {
|
|
38
|
+
const obj = value;
|
|
39
|
+
const keys = Object.keys(obj).sort();
|
|
40
|
+
return `{${keys.map((k) => `${JSON.stringify(k)}:${encode(obj[k])}`).join(',')}}`;
|
|
41
|
+
}
|
|
42
|
+
throw new TypeError(`canonicalJson: unsupported type ${t}`);
|
|
43
|
+
}
|
|
44
|
+
function sha256hex(s) {
|
|
45
|
+
return createHash('sha256').update(s).digest('hex');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* decision_body_hash = 'sha256:' + sha256(canonicalJson(envelope MINUS receipt MINUS
|
|
49
|
+
* decision_body_hash)). Recomputed LOCALLY from the presented envelope so a rewritten field can
|
|
50
|
+
* never pass — identical algorithm to the server's decision-result.js computeBodyHash.
|
|
51
|
+
*/
|
|
52
|
+
export function computeBodyHash(envelope) {
|
|
53
|
+
const rest = { ...envelope };
|
|
54
|
+
delete rest.receipt;
|
|
55
|
+
delete rest.decision_body_hash;
|
|
56
|
+
return `sha256:${sha256hex(canonicalJson(rest))}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Bind a verified receipt to THIS envelope. Fail-closed on ANY mismatch. Ordered checks:
|
|
60
|
+
* 1. valid === true (bad signature → RECEIPT_UNVERIFIED)
|
|
61
|
+
* 2. status === 'VERIFIED_CURRENT' (expired / superseded / wrong-audience / wrong-env
|
|
62
|
+
* / scope-mismatch → RECEIPT_ENVELOPE_MISMATCH)
|
|
63
|
+
* 3. signed bh === LOCALLY-recomputed body hash (the anti-substitution anchor — binds the ENTIRE
|
|
64
|
+
* decision body incl. decision/execution_action/fp)
|
|
65
|
+
* 4. signed fp === envelope.fingerprint (explicit fingerprint binding)
|
|
66
|
+
* 5. operation / environment / audience scope (when the AUTHENTICATED envelope carries them —
|
|
67
|
+
* bh already binds their presence/value)
|
|
68
|
+
*
|
|
69
|
+
* @param envelope the presented decision envelope (attacker-influenced; NOT trusted for bh/fp)
|
|
70
|
+
* @param vr the SDK verifyReceipt result ({ valid, status, payload:{ fp, bh, … } })
|
|
71
|
+
* @param ctx host operation/environment/audience the receipt must match
|
|
72
|
+
*/
|
|
73
|
+
export function bindReceiptToEnvelope(envelope, vr, ctx = {}) {
|
|
74
|
+
if (!envelope)
|
|
75
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: 'no envelope' };
|
|
76
|
+
if (!vr || vr.valid !== true)
|
|
77
|
+
return { ok: false, cause: 'RECEIPT_UNVERIFIED', detail: `valid=${vr ? vr.valid : 'none'}` };
|
|
78
|
+
if (vr.status !== 'VERIFIED_CURRENT') {
|
|
79
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: `status ${vr.status ?? 'unknown'} != VERIFIED_CURRENT` };
|
|
80
|
+
}
|
|
81
|
+
const payload = (vr.payload || {});
|
|
82
|
+
// 3. LOCAL body-hash recomputation — the load-bearing anti-substitution check.
|
|
83
|
+
const localBh = computeBodyHash(envelope);
|
|
84
|
+
if (typeof payload.bh !== 'string' || payload.bh !== localBh) {
|
|
85
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: 'decision_body_hash mismatch (receipt was signed over a different envelope)' };
|
|
86
|
+
}
|
|
87
|
+
// 4. Signed fingerprint must bind the envelope's fingerprint.
|
|
88
|
+
if (typeof payload.fp !== 'string' || payload.fp !== envelope.fingerprint) {
|
|
89
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: 'verdict_fingerprint mismatch' };
|
|
90
|
+
}
|
|
91
|
+
// 5. Scope: operation / environment / audience (bh already authenticates these values; this asserts
|
|
92
|
+
// the receipt was issued for the CURRENTLY-REQUESTED context — the merge≠deploy / §106 rule).
|
|
93
|
+
const requestedOp = ctx.operation ?? 'tool_call';
|
|
94
|
+
if (envelope.operation != null && requestedOp != null && envelope.operation !== requestedOp) {
|
|
95
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: `operation ${String(envelope.operation)} != ${String(requestedOp)}` };
|
|
96
|
+
}
|
|
97
|
+
if (ctx.environment != null && envelope.environment != null && envelope.environment !== ctx.environment) {
|
|
98
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: `environment ${String(envelope.environment)} != ${String(ctx.environment)}` };
|
|
99
|
+
}
|
|
100
|
+
if (ctx.audience != null && envelope.audience != null && envelope.audience !== ctx.audience) {
|
|
101
|
+
return { ok: false, cause: 'RECEIPT_ENVELOPE_MISMATCH', detail: `audience ${String(envelope.audience)} != ${String(ctx.audience)}` };
|
|
102
|
+
}
|
|
103
|
+
return { ok: true };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=receipt-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-binding.js","sourceRoot":"","sources":["../../src/receipt-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @coderifts/agent-guard — process-local session-taint detector (SEPARATE surface).
|
|
3
|
+
*
|
|
4
|
+
* Implements session-taint-detector-SPEC.md verbatim: a multi-call taint tracker that flags when a
|
|
5
|
+
* session both accumulates contract taint AND emits an SSOT sink — closing the gap where a sequence
|
|
6
|
+
* passes single-call DG-1 yet mutates SSOT. Additive: the frozen `builtinDetector.detect()` is NOT
|
|
7
|
+
* touched. Versioned SEPARATELY (session-taint/1.0.0), monotonic toward caution.
|
|
8
|
+
*
|
|
9
|
+
* Normative: flag ⇔ ssot_sink_events ≠ ∅ ∧ tainted. Fixture-faithful classifier order (§1.6: NON_SINK
|
|
10
|
+
* first, so snapshot/prettier stay under-set — a documented, Peter-accepted quirk; flag unaffected).
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolCallDescriptor } from './types.js';
|
|
13
|
+
export declare const SESSION_TAINT_VERSION = "session-taint/1.0.0";
|
|
14
|
+
export type PathClass = 'prose' | 'scratch' | 'migration' | 'ssot' | 'code_or_config' | 'other';
|
|
15
|
+
export declare function pathClass(p: string): PathClass;
|
|
16
|
+
export type PendingRename = {
|
|
17
|
+
from: string;
|
|
18
|
+
to: string;
|
|
19
|
+
} | {
|
|
20
|
+
drop: string;
|
|
21
|
+
};
|
|
22
|
+
export interface SessionState {
|
|
23
|
+
scratch_writes: string[];
|
|
24
|
+
contract_looking_scratch: string[];
|
|
25
|
+
encoded_fragments: string[];
|
|
26
|
+
intermediate_artifacts: string[];
|
|
27
|
+
pending_renames: PendingRename[];
|
|
28
|
+
optional_fields_added: string[];
|
|
29
|
+
required_fields_declared: string[];
|
|
30
|
+
ssot_paths_touched: string[];
|
|
31
|
+
ssot_sink_events: string[];
|
|
32
|
+
ssot_invalidated: boolean;
|
|
33
|
+
reverse_snapshot: boolean;
|
|
34
|
+
formatter_only_ssot: boolean;
|
|
35
|
+
store_keys: string[];
|
|
36
|
+
tainted: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function emptySessionState(): SessionState;
|
|
39
|
+
/** Serialize to the fixture's projected form (pending_renames -> "from->to" | "drop:name"). */
|
|
40
|
+
export declare function projectState(s: SessionState): Record<string, unknown>;
|
|
41
|
+
export type CmdClass = 'non_sink' | 'ssot_invalidate' | 'ssot_sink' | 'reverse_snapshot' | 'formatter' | 'unknown_script';
|
|
42
|
+
export declare function classifyCommand(command: string, action: string, cfg?: SessionTaintConfig): CmdClass;
|
|
43
|
+
export declare function updateSession(state: SessionState, call: {
|
|
44
|
+
toolName?: string;
|
|
45
|
+
arguments?: unknown;
|
|
46
|
+
}, cfg?: SessionTaintConfig): SessionState;
|
|
47
|
+
export declare function computeTainted(s: SessionState): boolean;
|
|
48
|
+
export interface SessionEval {
|
|
49
|
+
flag: boolean;
|
|
50
|
+
trip: boolean;
|
|
51
|
+
key_signal: string | null;
|
|
52
|
+
}
|
|
53
|
+
export declare function deriveKeySignal(s: SessionState): string;
|
|
54
|
+
/** flag ⇔ (ssot_sink_events ≠ ∅ || sink_seen) ∧ (tainted || overflow). */
|
|
55
|
+
export declare function evaluate(state: SessionState, prevFlagged?: boolean, opts?: {
|
|
56
|
+
overflow?: boolean;
|
|
57
|
+
sinkSeen?: boolean;
|
|
58
|
+
}): SessionEval;
|
|
59
|
+
export interface SessionTaintConfig {
|
|
60
|
+
extraSinkPatterns?: RegExp[];
|
|
61
|
+
extraNonSinkPatterns?: RegExp[];
|
|
62
|
+
maxCalls?: number;
|
|
63
|
+
maxPathsTracked?: number;
|
|
64
|
+
maxSinkEvents?: number;
|
|
65
|
+
maxStateBytes?: number;
|
|
66
|
+
ttlMs?: number;
|
|
67
|
+
bindCwd?: boolean;
|
|
68
|
+
sessionId?: string;
|
|
69
|
+
sessionTaintSeverity?: 'caution' | 'stop';
|
|
70
|
+
}
|
|
71
|
+
export interface SessionTaintObservation {
|
|
72
|
+
flag: boolean;
|
|
73
|
+
trip: boolean;
|
|
74
|
+
key_signal: string | null;
|
|
75
|
+
state: Readonly<SessionState>;
|
|
76
|
+
version: typeof SESSION_TAINT_VERSION;
|
|
77
|
+
overflow: boolean;
|
|
78
|
+
severity: 'caution' | 'stop';
|
|
79
|
+
}
|
|
80
|
+
export declare class SessionTaintTracker {
|
|
81
|
+
readonly version = "session-taint/1.0.0";
|
|
82
|
+
private state;
|
|
83
|
+
private prevFlag;
|
|
84
|
+
private callCount;
|
|
85
|
+
private overflow;
|
|
86
|
+
private sinkSeen;
|
|
87
|
+
private lastObserveAt;
|
|
88
|
+
private cfg;
|
|
89
|
+
constructor(config?: SessionTaintConfig);
|
|
90
|
+
private pathTotal;
|
|
91
|
+
observe(call: ToolCallDescriptor): SessionTaintObservation;
|
|
92
|
+
status(): SessionTaintObservation;
|
|
93
|
+
reset(): void;
|
|
94
|
+
private snapshot;
|
|
95
|
+
private now;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=session-taint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-taint.d.ts","sourceRoot":"","sources":["../../src/session-taint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @coderifts/agent-guard — process-local session-taint detector (SEPARATE surface).
|
|
3
|
+
*
|
|
4
|
+
* Implements session-taint-detector-SPEC.md verbatim: a multi-call taint tracker that flags when a
|
|
5
|
+
* session both accumulates contract taint AND emits an SSOT sink — closing the gap where a sequence
|
|
6
|
+
* passes single-call DG-1 yet mutates SSOT. Additive: the frozen `builtinDetector.detect()` is NOT
|
|
7
|
+
* touched. Versioned SEPARATELY (session-taint/1.0.0), monotonic toward caution.
|
|
8
|
+
*
|
|
9
|
+
* Normative: flag ⇔ ssot_sink_events ≠ ∅ ∧ tainted. Fixture-faithful classifier order (§1.6: NON_SINK
|
|
10
|
+
* first, so snapshot/prettier stay under-set — a documented, Peter-accepted quirk; flag unaffected).
|
|
11
|
+
*/
|
|
12
|
+
export const SESSION_TAINT_VERSION = 'session-taint/1.0.0';
|
|
13
|
+
// ── §1.3 classifiers ─────────────────────────────────────────────────────────────────────────
|
|
14
|
+
const NON_SSOT_RE = /(^|\/)(tests?|__tests__|fixtures?|__mocks__|src\/internal)\//i;
|
|
15
|
+
const PIPELINE_SCRATCH_RE = /(^|\/)(build|\.cache|codegen|idl)(\/|$)/i;
|
|
16
|
+
const PROSE_RE = /(^|\/)(README|CHANGELOG|LICENSE)(\.\w+)?$|\.md$/i;
|
|
17
|
+
const SSOT_PATH_RE = /(^|\/)(openapi|swagger|asyncapi)[^/]*\.(ya?ml|json)$|(^|\/)mcp\.json$|\.graphql$|\.gql$|(^|\/)idl\/.*\.proto$|(^|\/)specs?\/.*\.(ya?ml|json)$|openapi\.yaml|schema\.graphql|asyncapi\.yaml/i;
|
|
18
|
+
const MIGRATION_RE = /(^|\/)migrations?\//i;
|
|
19
|
+
const CODE_OR_CONFIG_RE = /\.(ts|tsx|js|jsx)$/i;
|
|
20
|
+
const CONTRACT_CONTENT_RE = /\bopenapi\s*[:=]|\bswagger\s*[:=]|\basyncapi\s*[:=]|syntax\s*=\s*["']proto3|["']inputSchema["']|\btype\s+Query\b|(^|\n)\s*paths\s*:/i;
|
|
21
|
+
const STAGING_NAME_RE = /\.b64$|enc\/|field-map|flags\.json|optional_fields|required_fields|service\.idl|frags\/|BREAKING_DROP/i;
|
|
22
|
+
const NON_SINK_RE = /validate-frags|gen-docs|reload-flags|snapshot-spec|prettier|npm test|npm install|npx prettier/i;
|
|
23
|
+
const SSOT_INVALIDATE_RE = /archive-old-spec/i;
|
|
24
|
+
const SSOT_SINK_RE = /dsl-to-openapi|merge-spec|publish-fixture|promote-spec|sync-graphql|b64join-write|decode-promote|apply-field-map|render-openapi|idl\/compile|generate-and-test|compile_spec_bundle|install-proto|install-mcp|promote-asyncapi|repack-extract|codegen\/build\.js|codegen\/apply|codegen\/render/i;
|
|
25
|
+
export function pathClass(p) {
|
|
26
|
+
if (PROSE_RE.test(p))
|
|
27
|
+
return 'prose';
|
|
28
|
+
if (NON_SSOT_RE.test(p) || PIPELINE_SCRATCH_RE.test(p))
|
|
29
|
+
return 'scratch';
|
|
30
|
+
if (MIGRATION_RE.test(p))
|
|
31
|
+
return 'migration';
|
|
32
|
+
if (SSOT_PATH_RE.test(p))
|
|
33
|
+
return 'ssot';
|
|
34
|
+
if (CODE_OR_CONFIG_RE.test(p) || p.startsWith('src/') || p.startsWith('config/') || p === 'package.json')
|
|
35
|
+
return 'code_or_config';
|
|
36
|
+
return 'other';
|
|
37
|
+
}
|
|
38
|
+
export function emptySessionState() {
|
|
39
|
+
return {
|
|
40
|
+
scratch_writes: [], contract_looking_scratch: [], encoded_fragments: [], intermediate_artifacts: [],
|
|
41
|
+
pending_renames: [], optional_fields_added: [], required_fields_declared: [], ssot_paths_touched: [],
|
|
42
|
+
ssot_sink_events: [], ssot_invalidated: false, reverse_snapshot: false, formatter_only_ssot: false,
|
|
43
|
+
store_keys: [], tainted: false,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Serialize to the fixture's projected form (pending_renames -> "from->to" | "drop:name"). */
|
|
47
|
+
export function projectState(s) {
|
|
48
|
+
return {
|
|
49
|
+
scratch_writes: s.scratch_writes.slice(),
|
|
50
|
+
encoded_fragments: s.encoded_fragments.slice(),
|
|
51
|
+
pending_renames: s.pending_renames.map((r) => ('drop' in r ? `drop:${r.drop}` : `${r.from}->${r.to}`)),
|
|
52
|
+
optional_fields_added: s.optional_fields_added.slice(),
|
|
53
|
+
required_fields_declared: s.required_fields_declared.slice(),
|
|
54
|
+
ssot_paths_touched: s.ssot_paths_touched.slice(),
|
|
55
|
+
contract_looking_scratch: s.contract_looking_scratch.slice(),
|
|
56
|
+
intermediate_artifacts: s.intermediate_artifacts.slice(),
|
|
57
|
+
ssot_sink_events: s.ssot_sink_events.slice(),
|
|
58
|
+
ssot_invalidated: s.ssot_invalidated,
|
|
59
|
+
reverse_snapshot: s.reverse_snapshot,
|
|
60
|
+
formatter_only_ssot: s.formatter_only_ssot,
|
|
61
|
+
store_keys: s.store_keys.slice(),
|
|
62
|
+
tainted: s.tainted,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// ── §2.2 extractors ──────────────────────────────────────────────────────────────────────────
|
|
66
|
+
function asRecord(args) { return args && typeof args === 'object' ? args : {}; }
|
|
67
|
+
function extractPaths(args) {
|
|
68
|
+
const a = asRecord(args);
|
|
69
|
+
const out = [];
|
|
70
|
+
for (const k of ['path', 'target', 'file', 'dest', 'filename', 'destination'])
|
|
71
|
+
if (typeof a[k] === 'string')
|
|
72
|
+
out.push(a[k]);
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
function extractContent(args) {
|
|
76
|
+
const a = asRecord(args);
|
|
77
|
+
const parts = [];
|
|
78
|
+
for (const k of ['contents', 'content', 'new_string', 'old_string', 'patch', 'value', 'command'])
|
|
79
|
+
if (typeof a[k] === 'string')
|
|
80
|
+
parts.push(a[k]);
|
|
81
|
+
return parts.join('\n');
|
|
82
|
+
}
|
|
83
|
+
// ── §2.3 encoded-fragment heuristic (fixture-faithful — do not "fix" without regenerating) ──────
|
|
84
|
+
function isEncodedFragment(path, content) {
|
|
85
|
+
if (path && /part\.|enc\/|\.b64$|pkg\.part/i.test(path))
|
|
86
|
+
return true;
|
|
87
|
+
const c = content.replace(/\s+/g, '');
|
|
88
|
+
if (c.length >= 8 && c.length < 80 && /^[A-Za-z0-9+/=]+$/.test(c))
|
|
89
|
+
return true;
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
export function classifyCommand(command, action, cfg = {}) {
|
|
93
|
+
const s = `${command || ''} ${action || ''}`;
|
|
94
|
+
const extraNon = cfg.extraNonSinkPatterns || [];
|
|
95
|
+
const extraSink = cfg.extraSinkPatterns || [];
|
|
96
|
+
if (NON_SINK_RE.test(s) || extraNon.some((r) => r.test(s)))
|
|
97
|
+
return 'non_sink';
|
|
98
|
+
if (SSOT_INVALIDATE_RE.test(s))
|
|
99
|
+
return 'ssot_invalidate';
|
|
100
|
+
if (SSOT_SINK_RE.test(s) || action === 'compile_spec_bundle' || extraSink.some((r) => r.test(s)))
|
|
101
|
+
return 'ssot_sink';
|
|
102
|
+
if (/snapshot/i.test(s))
|
|
103
|
+
return 'reverse_snapshot';
|
|
104
|
+
if (/prettier|format/i.test(s))
|
|
105
|
+
return 'formatter';
|
|
106
|
+
return 'unknown_script';
|
|
107
|
+
}
|
|
108
|
+
function pushUniq(arr, v) { if (v != null && !arr.includes(v))
|
|
109
|
+
arr.push(v); }
|
|
110
|
+
// ── §2.5 transition ────────────────────────────────────────────────────────────────────────────
|
|
111
|
+
export function updateSession(state, call, cfg = {}) {
|
|
112
|
+
const s = JSON.parse(JSON.stringify(state)); // pure: new state
|
|
113
|
+
const args = asRecord(call && call.arguments);
|
|
114
|
+
const paths = extractPaths(args);
|
|
115
|
+
const content = extractContent(args);
|
|
116
|
+
const tool = call && call.toolName;
|
|
117
|
+
// store
|
|
118
|
+
if (tool === 'store' && typeof args.key === 'string') {
|
|
119
|
+
pushUniq(s.store_keys, args.key);
|
|
120
|
+
if (/spec_|api_|openapi|schema/i.test(args.key) || /BREAKING|ROUTE|FIELD|REMOVE|MANDATORY|required|optional/i.test(String(args.value))) {
|
|
121
|
+
pushUniq(s.intermediate_artifacts, `store:${args.key}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// apply
|
|
125
|
+
if (tool === 'apply' && typeof args.action === 'string') {
|
|
126
|
+
if (classifyCommand('', args.action, cfg) === 'ssot_sink')
|
|
127
|
+
s.ssot_sink_events.push(args.action);
|
|
128
|
+
}
|
|
129
|
+
// Bash / command
|
|
130
|
+
if (tool === 'Bash' || typeof args.command === 'string') {
|
|
131
|
+
const cmd = typeof args.command === 'string' ? args.command : '';
|
|
132
|
+
const kind = classifyCommand(cmd, '', cfg);
|
|
133
|
+
if (kind === 'ssot_sink')
|
|
134
|
+
s.ssot_sink_events.push(cmd);
|
|
135
|
+
if (kind === 'ssot_invalidate')
|
|
136
|
+
s.ssot_invalidated = true;
|
|
137
|
+
if (kind === 'reverse_snapshot')
|
|
138
|
+
s.reverse_snapshot = true;
|
|
139
|
+
if (kind === 'formatter' && (SSOT_PATH_RE.test(cmd) || /openapi|swagger|asyncapi|\.graphql|\.gql|mcp\.json|schema/i.test(cmd)))
|
|
140
|
+
s.formatter_only_ssot = true;
|
|
141
|
+
}
|
|
142
|
+
// path-bearing writes/edits
|
|
143
|
+
for (const p of paths) {
|
|
144
|
+
const pc = pathClass(p);
|
|
145
|
+
const isScratch = pc === 'scratch' || NON_SSOT_RE.test(p) || PIPELINE_SCRATCH_RE.test(p);
|
|
146
|
+
if (isScratch) {
|
|
147
|
+
pushUniq(s.scratch_writes, p);
|
|
148
|
+
if (CONTRACT_CONTENT_RE.test(content) || STAGING_NAME_RE.test(p + content))
|
|
149
|
+
pushUniq(s.contract_looking_scratch, p);
|
|
150
|
+
if (PIPELINE_SCRATCH_RE.test(p))
|
|
151
|
+
pushUniq(s.intermediate_artifacts, p);
|
|
152
|
+
if (isEncodedFragment(p, content) || /\.b64$/i.test(p) || /enc\//i.test(p) || /pkg\.part/i.test(p))
|
|
153
|
+
pushUniq(s.encoded_fragments, p);
|
|
154
|
+
if (/field-map|flags\.json|optional_fields|required_fields|\.idl$/i.test(p))
|
|
155
|
+
pushUniq(s.intermediate_artifacts, p);
|
|
156
|
+
}
|
|
157
|
+
if (pc === 'ssot' && !(tool === 'Bash' && /prettier/i.test(typeof args.command === 'string' ? args.command : '')))
|
|
158
|
+
pushUniq(s.ssot_paths_touched, p);
|
|
159
|
+
// field-map JSON
|
|
160
|
+
if (/field-map/i.test(p)) {
|
|
161
|
+
let obj;
|
|
162
|
+
try {
|
|
163
|
+
obj = JSON.parse(content);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
obj = null;
|
|
167
|
+
}
|
|
168
|
+
if (obj && typeof obj === 'object' && !Array.isArray(obj)) {
|
|
169
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
170
|
+
if (k === '__drop' && Array.isArray(v)) {
|
|
171
|
+
for (const d of v)
|
|
172
|
+
s.pending_renames.push({ drop: String(d) });
|
|
173
|
+
}
|
|
174
|
+
else if (typeof v === 'string')
|
|
175
|
+
s.pending_renames.push({ from: k, to: v });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// flags.json optional/required
|
|
180
|
+
if (/flags\.json/i.test(p)) {
|
|
181
|
+
for (const m of content.matchAll(/"(\w+)":\s*"optional"/g))
|
|
182
|
+
pushUniq(s.optional_fields_added, m[1]);
|
|
183
|
+
for (const m of content.matchAll(/"(\w+)":\s*"required"/g))
|
|
184
|
+
pushUniq(s.required_fields_declared, m[1]);
|
|
185
|
+
}
|
|
186
|
+
// list files
|
|
187
|
+
if (/optional_fields/i.test(p))
|
|
188
|
+
for (const line of content.split('\n'))
|
|
189
|
+
if (line.trim())
|
|
190
|
+
pushUniq(s.optional_fields_added, line.trim());
|
|
191
|
+
if (/required_fields/i.test(p))
|
|
192
|
+
for (const line of content.split('\n'))
|
|
193
|
+
if (line.trim())
|
|
194
|
+
pushUniq(s.required_fields_declared, line.trim());
|
|
195
|
+
// ST-009 yaml heuristics
|
|
196
|
+
if (NON_SSOT_RE.test(p) && /required:\s*\[[^\]]*owner_id/.test(content))
|
|
197
|
+
pushUniq(s.required_fields_declared, 'owner_id');
|
|
198
|
+
if (NON_SSOT_RE.test(p) && /owner_id:\s*\{type: string\}/.test(content))
|
|
199
|
+
pushUniq(s.optional_fields_added, 'owner_id');
|
|
200
|
+
if (/\.idl$/i.test(p) || p.startsWith('idl/'))
|
|
201
|
+
pushUniq(s.intermediate_artifacts, p);
|
|
202
|
+
}
|
|
203
|
+
// body flags (with/without path)
|
|
204
|
+
if (/BREAKING_DROP|FIELD .* REMOVE|MANDATORY/i.test(content))
|
|
205
|
+
pushUniq(s.intermediate_artifacts, paths[0] || 'inline_flag');
|
|
206
|
+
s.tainted = computeTainted(s);
|
|
207
|
+
return s;
|
|
208
|
+
}
|
|
209
|
+
// ── §3.2 taint predicate ─────────────────────────────────────────────────────────────────────
|
|
210
|
+
export function computeTainted(s) {
|
|
211
|
+
return (s.contract_looking_scratch.length > 0
|
|
212
|
+
|| s.encoded_fragments.length > 0
|
|
213
|
+
|| s.intermediate_artifacts.length > 0
|
|
214
|
+
|| s.store_keys.some((k) => /spec_|api_|schema|openapi/i.test(k))
|
|
215
|
+
|| s.pending_renames.length > 0
|
|
216
|
+
|| s.optional_fields_added.some((f) => s.required_fields_declared.includes(f))
|
|
217
|
+
|| (s.required_fields_declared.length > 0 && s.optional_fields_added.length > 0)
|
|
218
|
+
|| s.ssot_invalidated === true);
|
|
219
|
+
}
|
|
220
|
+
export function deriveKeySignal(s) {
|
|
221
|
+
if (s.ssot_invalidated)
|
|
222
|
+
return 'delete_recreate_ssot_via_session';
|
|
223
|
+
if (s.encoded_fragments.length)
|
|
224
|
+
return 'encoded_scratch_then_ssot_promotion';
|
|
225
|
+
if (s.optional_fields_added.some((f) => s.required_fields_declared.includes(f)) || (s.required_fields_declared.length && s.optional_fields_added.length))
|
|
226
|
+
return 'cumulative_required_flip';
|
|
227
|
+
if (s.pending_renames.length)
|
|
228
|
+
return 'cumulative_rename_via_codegen';
|
|
229
|
+
if (s.contract_looking_scratch.length)
|
|
230
|
+
return 'scratch_to_ssot_promotion';
|
|
231
|
+
if (s.intermediate_artifacts.length)
|
|
232
|
+
return 'cross_call_reassembly_to_ssot';
|
|
233
|
+
return 'session_ssot_sink_with_taint';
|
|
234
|
+
}
|
|
235
|
+
/** flag ⇔ (ssot_sink_events ≠ ∅ || sink_seen) ∧ (tainted || overflow). */
|
|
236
|
+
export function evaluate(state, prevFlagged = false, opts = {}) {
|
|
237
|
+
const sink = state.ssot_sink_events.length > 0 || opts.sinkSeen === true;
|
|
238
|
+
const taint = state.tainted || opts.overflow === true;
|
|
239
|
+
const flag = sink && taint;
|
|
240
|
+
return { flag, trip: flag && !prevFlagged, key_signal: flag ? deriveKeySignal(state) : null };
|
|
241
|
+
}
|
|
242
|
+
const DEF = { maxCalls: 256, maxPathsTracked: 512, maxSinkEvents: 64, maxStateBytes: 256_000, ttlMs: 3_600_000 };
|
|
243
|
+
export class SessionTaintTracker {
|
|
244
|
+
version = SESSION_TAINT_VERSION;
|
|
245
|
+
state = emptySessionState();
|
|
246
|
+
prevFlag = false;
|
|
247
|
+
callCount = 0;
|
|
248
|
+
overflow = false;
|
|
249
|
+
sinkSeen = false;
|
|
250
|
+
lastObserveAt = 0;
|
|
251
|
+
cfg;
|
|
252
|
+
constructor(config = {}) { this.cfg = config; }
|
|
253
|
+
pathTotal() {
|
|
254
|
+
const s = this.state;
|
|
255
|
+
return s.scratch_writes.length + s.contract_looking_scratch.length + s.encoded_fragments.length
|
|
256
|
+
+ s.intermediate_artifacts.length + s.ssot_paths_touched.length;
|
|
257
|
+
}
|
|
258
|
+
observe(call) {
|
|
259
|
+
const now = this.now();
|
|
260
|
+
// §4.3 TTL: soft reset to a fresh session on expiry.
|
|
261
|
+
if (this.lastObserveAt && now - this.lastObserveAt > (this.cfg.ttlMs ?? DEF.ttlMs))
|
|
262
|
+
this.reset();
|
|
263
|
+
this.lastObserveAt = now;
|
|
264
|
+
const next = updateSession(this.state, call, this.cfg);
|
|
265
|
+
// §4.3 caps → sticky overflow forces taint (monotonic caution; NOT drop-oldest).
|
|
266
|
+
this.callCount++;
|
|
267
|
+
if (this.callCount > (this.cfg.maxCalls ?? DEF.maxCalls))
|
|
268
|
+
this.overflow = true;
|
|
269
|
+
if (this.pathTotal() > (this.cfg.maxPathsTracked ?? DEF.maxPathsTracked))
|
|
270
|
+
this.overflow = true;
|
|
271
|
+
if (JSON.stringify(next).length > (this.cfg.maxStateBytes ?? DEF.maxStateBytes))
|
|
272
|
+
this.overflow = true;
|
|
273
|
+
// maxSinkEvents: stop growing the list but keep sink presence sticky.
|
|
274
|
+
if (next.ssot_sink_events.length > (this.cfg.maxSinkEvents ?? DEF.maxSinkEvents)) {
|
|
275
|
+
next.ssot_sink_events = next.ssot_sink_events.slice(0, this.cfg.maxSinkEvents ?? DEF.maxSinkEvents);
|
|
276
|
+
}
|
|
277
|
+
this.state = next;
|
|
278
|
+
if (this.state.ssot_sink_events.length > 0)
|
|
279
|
+
this.sinkSeen = true;
|
|
280
|
+
return this.snapshot();
|
|
281
|
+
}
|
|
282
|
+
status() { return this.snapshot(); }
|
|
283
|
+
reset() {
|
|
284
|
+
this.state = emptySessionState();
|
|
285
|
+
this.prevFlag = false;
|
|
286
|
+
this.callCount = 0;
|
|
287
|
+
this.overflow = false;
|
|
288
|
+
this.sinkSeen = false;
|
|
289
|
+
this.lastObserveAt = 0;
|
|
290
|
+
}
|
|
291
|
+
snapshot() {
|
|
292
|
+
const eva = evaluate(this.state, this.prevFlag, { overflow: this.overflow, sinkSeen: this.sinkSeen });
|
|
293
|
+
if (eva.flag)
|
|
294
|
+
this.prevFlag = true;
|
|
295
|
+
return {
|
|
296
|
+
flag: eva.flag, trip: eva.trip, key_signal: eva.key_signal,
|
|
297
|
+
state: projectState(this.state),
|
|
298
|
+
version: SESSION_TAINT_VERSION, overflow: this.overflow,
|
|
299
|
+
severity: this.cfg.sessionTaintSeverity || 'caution',
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// Date.now is fine at runtime; isolated for testability.
|
|
303
|
+
now() { return Date.now(); }
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=session-taint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-taint.js","sourceRoot":"","sources":["../../src/session-taint.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -142,7 +142,7 @@ export type UnavailableVerdict = {
|
|
|
142
142
|
lkgEnvelope: ReceiptVerifiedEnvelope;
|
|
143
143
|
});
|
|
144
144
|
export type AvailabilityCause = 'TIMEOUT' | 'NETWORK' | 'SERVER_ERROR' | 'RATE_LIMITED';
|
|
145
|
-
export type IntegrityCause = 'INVALID_RESPONSE' | 'UNSUPPORTED_VERSION' | 'SCHEMA_INVALID' | 'RECEIPT_UNVERIFIED' | 'DETECTOR_ERROR' | 'CONFIG_ERROR' | 'PAYLOAD_TOO_LARGE' | 'REQUEST_REJECTED';
|
|
145
|
+
export type IntegrityCause = 'INVALID_RESPONSE' | 'UNSUPPORTED_VERSION' | 'SCHEMA_INVALID' | 'RECEIPT_UNVERIFIED' | 'DETECTOR_ERROR' | 'CONFIG_ERROR' | 'PAYLOAD_TOO_LARGE' | 'REQUEST_REJECTED' | 'RECEIPT_ENVELOPE_MISMATCH' | 'DECISION_INCONSISTENT' | 'ANALYSIS_DEGRADED' | 'ARTIFACT_MISMATCH' | 'RECEIPT_MISSING' | 'MONITORING_UNWIRED';
|
|
146
146
|
export type UnavailableCause = AvailabilityCause | IntegrityCause;
|
|
147
147
|
export interface TriggerDetector {
|
|
148
148
|
version: string;
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coderifts/agent-guard",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Fail-closed guard for AI agent tool calls — preflight contract changes before they execute. Security core frozen (agent-guard-api v1.0).",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Fail-closed guard for AI agent tool calls — preflight contract changes before they execute. Security core frozen (agent-guard-api v1.0); v1.1 adds client-side enforcement: receipt→envelope binding, decision↔action reconciliation, safe_for_agent + degraded fail-closed, and enforced⟺executed (P0 client-enforcement pack).",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
7
7
|
"types": "./dist/cjs/index.d.ts",
|