@coderifts/agent-guard 1.0.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.
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ /**
3
+ * @coderifts/agent-guard — guardToolCall (the security-core control flow).
4
+ *
5
+ * Order (frozen spec): redactor(call) -> input_fingerprint on the redacted call -> detect ->
6
+ * preflight (unless SKIPPED) -> decide -> executeFactory(envelope, redactedCall) IFF SKIPPED or
7
+ * CONTINUE / CONTINUE_WITH_MONITORING (or observeOnly). Fail-closed on every unknown; INTEGRITY
8
+ * causes always resolve CLOSED + trip the breaker; enforced:true only on a LIVE receipt-verified
9
+ * ALLOW/MONITOR; LKG is dormant in v1 (binding fields absent => UNUSABLE => closed). onEvent never throws.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.guardToolCall = guardToolCall;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const sdk_1 = require("@coderifts/sdk");
15
+ const detector_js_1 = require("./detector.js");
16
+ // Per-config breaker state (time-window; not consecutive).
17
+ const breakers = new WeakMap();
18
+ const nowMs = () => Date.now();
19
+ const iso = () => new Date().toISOString();
20
+ function emit(config, e) {
21
+ if (config.onEvent) {
22
+ try {
23
+ config.onEvent(e);
24
+ }
25
+ catch { /* onEvent never throws out */ }
26
+ }
27
+ }
28
+ function fingerprint(call) {
29
+ const canon = JSON.stringify({ toolName: call.toolName, arguments: call.arguments, artifacts: call.artifacts, filesTouched: call.filesTouched, diff: call.diff });
30
+ return 'sha256:' + (0, node_crypto_1.createHash)('sha256').update(canon).digest('hex');
31
+ }
32
+ function breakerRecord(config) {
33
+ let s = breakers.get(config);
34
+ if (!s) {
35
+ s = { fails: [] };
36
+ breakers.set(config, s);
37
+ }
38
+ s.fails.push(nowMs());
39
+ }
40
+ function breakerTripped(config) {
41
+ const s = breakers.get(config);
42
+ if (!s)
43
+ return false;
44
+ const win = config.breakerWindowMs ?? 60000;
45
+ const t = nowMs();
46
+ s.fails = s.fails.filter((x) => t - x < win);
47
+ return s.fails.length >= (config.maxUnavailablePerWindow ?? 3);
48
+ }
49
+ function classifyError(err, config) {
50
+ const e = err;
51
+ const name = e?.name;
52
+ const status = e?.status ?? e?.body?.status;
53
+ if (name === 'TimeoutError' || name === 'AbortError' || e?.code === 'ABORT_ERR')
54
+ return { cause: 'TIMEOUT', integrity: false };
55
+ if (status === 429 || name === 'RateLimitError')
56
+ return { cause: 'RATE_LIMITED', integrity: false };
57
+ if (status === 413)
58
+ return { cause: 'PAYLOAD_TOO_LARGE', integrity: true };
59
+ if (status === 422)
60
+ return { cause: 'REQUEST_REJECTED', integrity: true };
61
+ if (status === 400 || status === 401 || status === 409)
62
+ return { cause: 'REQUEST_REJECTED', integrity: true };
63
+ if (typeof status === 'number' && status >= 500)
64
+ return { cause: 'SERVER_ERROR', integrity: false };
65
+ if (name === 'TypeError' || /fetch failed|network|ENOTFOUND|ECONNREFUSED|EAI_AGAIN/i.test(String(e?.message)))
66
+ return { cause: 'NETWORK', integrity: false };
67
+ if (name === 'ApiError')
68
+ return { cause: 'SERVER_ERROR', integrity: false };
69
+ return { cause: 'INVALID_RESPONSE', integrity: true }; // unrecognized => integrity => closed
70
+ }
71
+ function withTimeout(p, ms) {
72
+ return new Promise((resolve, reject) => {
73
+ const timer = setTimeout(() => reject(Object.assign(new Error(`preflight timed out after ${ms}ms`), { name: 'TimeoutError' })), Math.max(1, ms));
74
+ p.then((v) => { clearTimeout(timer); resolve(v); }, (e) => { clearTimeout(timer); reject(e); });
75
+ });
76
+ }
77
+ async function preflightWithRetry(config, request) {
78
+ const retries = config.retries ?? 1;
79
+ const timeoutMs = config.timeoutMs ?? 2000;
80
+ const budget = config.totalBudgetMs ?? 4500;
81
+ const start = nowMs();
82
+ let last = { cause: 'TIMEOUT', integrity: false };
83
+ for (let attempt = 0; attempt <= retries; attempt++) {
84
+ const remaining = budget - (nowMs() - start);
85
+ if (remaining <= 0)
86
+ return { ok: false, cause: 'TIMEOUT', integrity: false };
87
+ try {
88
+ const response = await withTimeout(config.client.preflightChangeSet(request), Math.min(timeoutMs, remaining));
89
+ return { ok: true, response };
90
+ }
91
+ catch (err) {
92
+ last = classifyError(err, config);
93
+ if (last.integrity)
94
+ return { ok: false, ...last }; // integrity: never retry
95
+ }
96
+ }
97
+ return { ok: false, ...last };
98
+ }
99
+ /** Verify the envelope's receipt via the SDK. Returns the BRANDED envelope only when verified. */
100
+ async function verifyEnvelope(config, envelope) {
101
+ if (!envelope)
102
+ return null;
103
+ if (config.verifyReceipts === false)
104
+ return null; // opt-out => cannot brand => unenforceable + LKG unusable
105
+ const token = envelope.receipt?.token;
106
+ if (!token)
107
+ return null;
108
+ try {
109
+ const r = await config.client.verifyReceipt(token);
110
+ if (r && r.valid === true)
111
+ return envelope;
112
+ }
113
+ catch { /* verification failure is handled as RECEIPT_UNVERIFIED by the caller */ }
114
+ return null;
115
+ }
116
+ // ── Outcome builders (keep the discriminated union satisfied) ────────────────────
117
+ async function runEnforced(config, factory, approved, redacted) {
118
+ emit(config, { type: 'execution_started', at: iso(), action: approved.action, decisionId: approved.envelope.decision_id });
119
+ try {
120
+ const result = await factory(approved.envelope, redacted);
121
+ return { executionAttempted: true, executed: true, enforced: true, result, verdict: approved, preflighted: true };
122
+ }
123
+ catch (error) {
124
+ emit(config, { type: 'factory_error', at: iso(), action: approved.action });
125
+ return { executionAttempted: true, executed: false, enforced: true, error, verdict: approved, preflighted: true };
126
+ }
127
+ }
128
+ async function runUnenforced(config, factory, envelope, verdict, preflighted, redacted) {
129
+ emit(config, { type: 'execution_started', at: iso() });
130
+ try {
131
+ const result = await factory(envelope, redacted);
132
+ return { executionAttempted: true, executed: true, enforced: false, result, verdict, preflighted };
133
+ }
134
+ catch (error) {
135
+ emit(config, { type: 'factory_error', at: iso() });
136
+ return { executionAttempted: true, executed: false, enforced: false, error, verdict, preflighted };
137
+ }
138
+ }
139
+ function blocked(verdict, preflighted) {
140
+ return { executionAttempted: false, executed: false, enforced: false, verdict, preflighted };
141
+ }
142
+ function unavailableVerdict(parts, count) {
143
+ return { kind: 'UNAVAILABLE', decisionMissing: true, unavailableCount: count, ...parts };
144
+ }
145
+ async function guardToolCall(call, executeFactory, config) {
146
+ const failPolicy = config.failPolicy ?? 'closed';
147
+ // 12. redactor runs FIRST; everything downstream uses the redacted descriptor.
148
+ let redacted;
149
+ try {
150
+ redacted = config.redactor ? config.redactor(call) : call;
151
+ }
152
+ catch {
153
+ // A redactor throw is a CONFIG_ERROR (integrity) => closed.
154
+ breakerRecord(config);
155
+ return closedIntegrity(config, 'CONFIG_ERROR', failPolicy);
156
+ }
157
+ const inputFp = fingerprint(redacted); // used for LKG lookup (dormant in v1)
158
+ // 8/9. detector is fail-safe but a THROW is a DETECTOR_ERROR (integrity) => closed.
159
+ const detector = config.detector ?? detector_js_1.builtinDetector;
160
+ let detection;
161
+ try {
162
+ detection = detector.detect(redacted);
163
+ }
164
+ catch {
165
+ breakerRecord(config);
166
+ return closedIntegrity(config, 'DETECTOR_ERROR', failPolicy);
167
+ }
168
+ // requireExplicitArtifacts strict SKIP gate: suppress only when nonContract===true AND no signal.
169
+ const suppressedByStrict = config.requireExplicitArtifacts === true && redacted.nonContract === true
170
+ && (!detection.artifacts || detection.artifacts.length === 0) && detection.confident && !detection.trigger;
171
+ // SKIPPED path: not a contract call => execute with enforced:false, preflighted:false.
172
+ if (!detection.trigger || suppressedByStrict) {
173
+ emit(config, { type: 'detection_skip', at: iso(), signals: detection.signals, detectorVersion: detector.version });
174
+ const verdict = { kind: 'SKIPPED', reason: 'NOT_A_CONTRACT_CALL', signals: detection.signals, detectorVersion: detector.version };
175
+ return runUnenforced(config, executeFactory, null, verdict, false, redacted);
176
+ }
177
+ // config validation: lkg policy requires an LkgStore.
178
+ if (failPolicy === 'lkg' && !config.lkg) {
179
+ breakerRecord(config);
180
+ return closedIntegrity(config, 'CONFIG_ERROR', failPolicy);
181
+ }
182
+ // build the preflight request from the detected artifacts.
183
+ const request = {
184
+ artifacts: detection.artifacts,
185
+ context: { operation: config.operation ?? 'tool_call', environment: config.environment, audience: config.audience },
186
+ previous_receipt: undefined,
187
+ idempotency_key: undefined,
188
+ };
189
+ // request-attributable payload cap => PAYLOAD_TOO_LARGE (integrity) => closed.
190
+ const cap = config.maxPayloadBytes ?? 1_000_000;
191
+ if (Buffer.byteLength(JSON.stringify(request), 'utf8') > cap) {
192
+ breakerRecord(config);
193
+ return closedIntegrity(config, 'PAYLOAD_TOO_LARGE', failPolicy);
194
+ }
195
+ emit(config, { type: 'preflight_start', at: iso() });
196
+ const pf = await preflightWithRetry(config, request);
197
+ if (!pf.ok) {
198
+ // UNAVAILABLE. Integrity => always closed + breaker. Availability => failPolicy.
199
+ breakerRecord(config);
200
+ const count = (breakers.get(config)?.fails.length) ?? 1;
201
+ if (pf.integrity) {
202
+ emit(config, { type: 'breaker_tripped', at: iso(), cause: pf.cause });
203
+ const v = unavailableVerdict({ cause: pf.cause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
204
+ return blocked(v, false);
205
+ }
206
+ // availability
207
+ const availCause = pf.cause;
208
+ if (failPolicy === 'open' && !breakerTripped(config)) {
209
+ emit(config, { type: 'preflight_unavailable', at: iso(), cause: availCause, action: 'CONTINUE' });
210
+ const v = unavailableVerdict({ cause: availCause, failPolicy: 'open', resolution: 'OPEN_PASSTHROUGH', action: 'CONTINUE' }, count);
211
+ return runUnenforced(config, executeFactory, null, v, false, redacted);
212
+ }
213
+ if (failPolicy === 'lkg') {
214
+ const lkg = await tryLkg(config, inputFp);
215
+ if (lkg) {
216
+ emit(config, { type: 'preflight_unavailable', at: iso(), cause: availCause, action: lkg.action });
217
+ const v = unavailableVerdict({ cause: availCause, failPolicy: 'lkg', resolution: 'LKG_SUBSTITUTION', action: lkg.action, lkgEnvelope: lkg.envelope }, count);
218
+ return runUnenforced(config, executeFactory, lkg.envelope, v, false, redacted); // LKG NEVER enforces
219
+ }
220
+ // LKG unusable (dormant in v1: binding fields absent) => closed.
221
+ }
222
+ if (breakerTripped(config))
223
+ emit(config, { type: 'breaker_tripped', at: iso(), cause: availCause });
224
+ const v = unavailableVerdict({ cause: availCause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
225
+ return blocked(v, false);
226
+ }
227
+ // We have a response. Read the decision (envelope-first) and verify the receipt.
228
+ const rd = (0, sdk_1.readDecision)(pf.response);
229
+ if (rd.reason === 'UNREADABLE_DECISION' || !rd.envelope) {
230
+ // Schema-invalid / no envelope => integrity => closed.
231
+ breakerRecord(config);
232
+ return closedIntegrity(config, 'SCHEMA_INVALID', failPolicy);
233
+ }
234
+ const envelope = rd.envelope;
235
+ // 5. expiry check before honoring any decision.
236
+ const expired = isExpired(envelope);
237
+ const verified = await verifyEnvelope(config, envelope);
238
+ const receiptVerified = !!verified;
239
+ if (!receiptVerified)
240
+ emit(config, { type: 'receipt_unverified', at: iso(), decisionId: envelope.decision_id });
241
+ emit(config, { type: 'preflight_result', at: iso(), action: rd.executionAction, decisionId: envelope.decision_id });
242
+ // A bad signature (verifyReceipts on, token present, verify failed) is an INTEGRITY attack signal.
243
+ if (config.verifyReceipts !== false && !receiptVerified && envelope.receipt?.token) {
244
+ breakerRecord(config);
245
+ return closedIntegrity(config, 'RECEIPT_UNVERIFIED', failPolicy);
246
+ }
247
+ const action = rd.executionAction;
248
+ // Non-executable decisions.
249
+ if (action === 'STOP')
250
+ return blocked({ kind: 'BLOCK', action: 'STOP', envelope, receiptVerified }, true);
251
+ if (action === 'REQUEST_APPROVAL')
252
+ return blocked({ kind: 'APPROVAL', action: 'REQUEST_APPROVAL', envelope, receiptVerified }, true);
253
+ // An expired decision cannot be honored fresh => closed (integrity: wrong-time state).
254
+ if (expired) {
255
+ breakerRecord(config);
256
+ return closedIntegrity(config, 'SCHEMA_INVALID', failPolicy);
257
+ }
258
+ // Executable: CONTINUE (ALLOW) or CONTINUE_WITH_MONITORING (MONITOR).
259
+ const kind = action === 'CONTINUE' ? 'ALLOW' : 'MONITOR';
260
+ const sinkWired = !!config.onEvent; // v1: onEvent is the telemetry sink for MONITOR.
261
+ if (kind === 'MONITOR') {
262
+ if (sinkWired)
263
+ emit(config, { type: 'monitoring_required', at: iso(), decisionId: envelope.decision_id });
264
+ else
265
+ emit(config, { type: 'monitoring_unwired', at: iso(), decisionId: envelope.decision_id });
266
+ }
267
+ // observeOnly executes but never enforces.
268
+ if (config.observeOnly) {
269
+ emit(config, { type: 'observe_only_passthrough', at: iso(), action });
270
+ const verdict = kind === 'ALLOW'
271
+ ? { kind: 'ALLOW', action: 'CONTINUE', envelope, receiptVerified }
272
+ : { kind: 'MONITOR', action: 'CONTINUE_WITH_MONITORING', envelope, receiptVerified };
273
+ return runUnenforced(config, executeFactory, envelope, verdict, true, redacted);
274
+ }
275
+ // enforced:true requires a LIVE receipt-verified ALLOW/MONITOR, and (MONITOR) a wired sink.
276
+ const enforceable = receiptVerified && (kind === 'ALLOW' || sinkWired);
277
+ if (enforceable) {
278
+ const approved = kind === 'ALLOW'
279
+ ? { kind: 'ALLOW', action: 'CONTINUE', envelope, receiptVerified: true }
280
+ : { kind: 'MONITOR', action: 'CONTINUE_WITH_MONITORING', envelope, receiptVerified: true };
281
+ return runEnforced(config, executeFactory, approved, redacted);
282
+ }
283
+ // MONITOR with no sink (monitoring_unwired): execute but enforced:false.
284
+ const verdict = kind === 'ALLOW'
285
+ ? { kind: 'ALLOW', action: 'CONTINUE', envelope, receiptVerified }
286
+ : { kind: 'MONITOR', action: 'CONTINUE_WITH_MONITORING', envelope, receiptVerified };
287
+ return runUnenforced(config, executeFactory, envelope, verdict, true, redacted);
288
+ }
289
+ function closedIntegrity(config, cause, failPolicy) {
290
+ const count = (breakers.get(config)?.fails.length) ?? 1;
291
+ emit(config, { type: 'breaker_tripped', at: iso(), cause });
292
+ const v = unavailableVerdict({ cause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
293
+ return blocked(v, false);
294
+ }
295
+ function isExpired(envelope) {
296
+ const exp = envelope.expires_at;
297
+ if (typeof exp !== 'string')
298
+ return false;
299
+ const t = Date.parse(exp);
300
+ return Number.isFinite(t) && t < Date.now();
301
+ }
302
+ /** LKG substitution attempt. Dormant in v1: binding fields (ruleset_hash/environment/operation/
303
+ * audience) are absent from decision-result.v1, so any binding that cannot be evaluated => UNUSABLE. */
304
+ async function tryLkg(config, inputFp) {
305
+ if (!config.lkg)
306
+ return null;
307
+ let cached;
308
+ try {
309
+ cached = await config.lkg.get(inputFp);
310
+ }
311
+ catch {
312
+ return null;
313
+ }
314
+ if (!cached)
315
+ return null;
316
+ // Receipt verification is UNCONDITIONAL for LKG (with verifyReceipts:false it cannot brand => unusable).
317
+ const verified = await verifyEnvelope(config, cached);
318
+ if (!verified)
319
+ return null;
320
+ // Eligibility (rule 15): decision ALLOW|WARN, unexpired, age<lkgMaxAgeMs, fingerprint + ruleset_hash
321
+ // + environment + operation + audience all match. Any binding that cannot be evaluated => UNUSABLE.
322
+ const dec = cached.decision ?? '';
323
+ if (dec !== 'ALLOW' && dec !== 'WARN')
324
+ return null;
325
+ if (isExpired(cached))
326
+ return null;
327
+ const maxAge = config.lkgMaxAgeMs ?? 900000;
328
+ const evalAt = Date.parse(cached.evaluated_at);
329
+ if (Number.isFinite(evalAt) && Date.now() - evalAt > maxAge)
330
+ return null;
331
+ // Binding fields are NOT present in the frozen schema => cannot be evaluated => UNUSABLE (closed).
332
+ const bindings = [
333
+ cached.ruleset_hash,
334
+ cached.environment,
335
+ cached.operation,
336
+ cached.audience,
337
+ ];
338
+ if (bindings.some((b) => b === undefined))
339
+ return null; // any absent binding => UNUSABLE => closed
340
+ const action = dec === 'ALLOW' ? 'CONTINUE' : 'CONTINUE_WITH_MONITORING';
341
+ return { envelope: verified, action };
342
+ }
343
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @coderifts/agent-guard — fail-closed guard for AI agent tool calls.
3
+ *
4
+ * Preflight contract changes before they execute. Security core FROZEN (agent-guard-api v1.0).
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { guardToolCall } from '@coderifts/agent-guard';
9
+ * import { CodeRifts } from '@coderifts/sdk';
10
+ *
11
+ * const client = new CodeRifts({ apiKey: 'cr_live_...' });
12
+ * const outcome = await guardToolCall(
13
+ * { toolName: 'Edit', arguments: { path: 'openapi.yaml', ... }, filesTouched: ['openapi.yaml'] },
14
+ * async (envelope, redactedCall) => applyTheEdit(redactedCall),
15
+ * { client },
16
+ * );
17
+ * if (!outcome.executed) console.error('blocked:', outcome.verdict);
18
+ * ```
19
+ */
20
+ export { guardToolCall } from './guard.js';
21
+ export { builtinDetector, DETECTOR_VERSION } from './detector.js';
22
+ export { readDecision } from '@coderifts/sdk';
23
+ export type { ReceiptVerifiedEnvelope, GuardConfig, ToolCallDescriptor, ExecuteFactory, ApprovedVerdict, GuardOutcome, GuardVerdict, UnavailableVerdict, AvailabilityCause, IntegrityCause, UnavailableCause, TriggerDetector, LkgStore, GuardEvent, CodeRifts, DecisionResultEnvelope, ExecutionAction, Artifact, } from './types.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EACV,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,SAAS,EACT,sBAAsB,EACtB,eAAe,EACf,QAAQ,GACT,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * @coderifts/agent-guard — fail-closed guard for AI agent tool calls.
4
+ *
5
+ * Preflight contract changes before they execute. Security core FROZEN (agent-guard-api v1.0).
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { guardToolCall } from '@coderifts/agent-guard';
10
+ * import { CodeRifts } from '@coderifts/sdk';
11
+ *
12
+ * const client = new CodeRifts({ apiKey: 'cr_live_...' });
13
+ * const outcome = await guardToolCall(
14
+ * { toolName: 'Edit', arguments: { path: 'openapi.yaml', ... }, filesTouched: ['openapi.yaml'] },
15
+ * async (envelope, redactedCall) => applyTheEdit(redactedCall),
16
+ * { client },
17
+ * );
18
+ * if (!outcome.executed) console.error('blocked:', outcome.verdict);
19
+ * ```
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.readDecision = exports.DETECTOR_VERSION = exports.builtinDetector = exports.guardToolCall = void 0;
23
+ var guard_js_1 = require("./guard.js");
24
+ Object.defineProperty(exports, "guardToolCall", { enumerable: true, get: function () { return guard_js_1.guardToolCall; } });
25
+ var detector_js_1 = require("./detector.js");
26
+ Object.defineProperty(exports, "builtinDetector", { enumerable: true, get: function () { return detector_js_1.builtinDetector; } });
27
+ Object.defineProperty(exports, "DETECTOR_VERSION", { enumerable: true, get: function () { return detector_js_1.DETECTOR_VERSION; } });
28
+ var sdk_1 = require("@coderifts/sdk");
29
+ Object.defineProperty(exports, "readDecision", { enumerable: true, get: function () { return sdk_1.readDecision; } });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAEH,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AACtB,6CAAkE;AAAzD,8GAAA,eAAe,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAC1C,sCAA8C;AAArC,mGAAA,YAAY,OAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * @coderifts/agent-guard — public types (FROZEN security core, agent-guard-api v1.0, 2026-07-26).
3
+ *
4
+ * Transcribed VERBATIM from agent-guard-api.FROZEN-v1.0.md § Core API. The discriminated unions
5
+ * encode the frozen invariants at the type level (tsc-verified): TOCTOU (ExecuteFactory signature),
6
+ * retry-footgun (executionAttempted split), enforced-bypass (ApprovedVerdict + receiptVerified on
7
+ * every arm), integrity-fail-open (discriminated UnavailableVerdict), unverified-envelope execution
8
+ * (branded ReceiptVerifiedEnvelope). Fail-closed by default.
9
+ */
10
+ import type { CodeRifts, DecisionResultEnvelope, ExecutionAction, Artifact } from '@coderifts/sdk';
11
+ export type { CodeRifts, DecisionResultEnvelope, ExecutionAction, Artifact } from '@coderifts/sdk';
12
+ export type ReceiptVerifiedEnvelope = DecisionResultEnvelope & {
13
+ readonly __receiptVerified: unique symbol;
14
+ };
15
+ export interface GuardConfig {
16
+ client: CodeRifts;
17
+ failPolicy?: 'closed' | 'open' | 'lkg';
18
+ timeoutMs?: number;
19
+ retries?: number;
20
+ totalBudgetMs?: number;
21
+ maxUnavailablePerWindow?: number;
22
+ breakerWindowMs?: number;
23
+ maxPayloadBytes?: number;
24
+ environment?: string;
25
+ operation?: string;
26
+ audience?: string;
27
+ detector?: TriggerDetector;
28
+ requireExplicitArtifacts?: boolean;
29
+ lkg?: LkgStore;
30
+ lkgMaxAgeMs?: number;
31
+ observeOnly?: boolean;
32
+ redactor?: (d: ToolCallDescriptor) => ToolCallDescriptor;
33
+ verifyReceipts?: boolean;
34
+ onEvent?: (e: GuardEvent) => void;
35
+ }
36
+ export interface ToolCallDescriptor {
37
+ toolName: string;
38
+ arguments: unknown;
39
+ artifacts?: Artifact[];
40
+ nonContract?: boolean;
41
+ intent?: string;
42
+ filesTouched?: string[];
43
+ diff?: string;
44
+ }
45
+ export type ExecuteFactory<T> = (envelope: DecisionResultEnvelope | null, redactedCall: ToolCallDescriptor) => Promise<T>;
46
+ export type ApprovedVerdict = ({
47
+ kind: 'ALLOW';
48
+ action: 'CONTINUE';
49
+ envelope: DecisionResultEnvelope;
50
+ } | {
51
+ kind: 'MONITOR';
52
+ action: 'CONTINUE_WITH_MONITORING';
53
+ envelope: DecisionResultEnvelope;
54
+ }) & {
55
+ receiptVerified: true;
56
+ };
57
+ export type GuardOutcome<T> = {
58
+ executionAttempted: true;
59
+ executed: true;
60
+ enforced: true;
61
+ result: T;
62
+ verdict: ApprovedVerdict;
63
+ preflighted: true;
64
+ } | {
65
+ executionAttempted: true;
66
+ executed: true;
67
+ enforced: false;
68
+ result: T;
69
+ verdict: GuardVerdict;
70
+ preflighted: boolean;
71
+ } | {
72
+ executionAttempted: false;
73
+ executed: false;
74
+ enforced: false;
75
+ verdict: GuardVerdict;
76
+ preflighted: boolean;
77
+ } | {
78
+ executionAttempted: true;
79
+ executed: false;
80
+ enforced: true;
81
+ error: unknown;
82
+ verdict: ApprovedVerdict;
83
+ preflighted: true;
84
+ } | {
85
+ executionAttempted: true;
86
+ executed: false;
87
+ enforced: false;
88
+ error: unknown;
89
+ verdict: GuardVerdict;
90
+ preflighted: boolean;
91
+ };
92
+ export type GuardVerdict = {
93
+ kind: 'ALLOW';
94
+ action: 'CONTINUE';
95
+ envelope: DecisionResultEnvelope;
96
+ receiptVerified: boolean;
97
+ } | {
98
+ kind: 'MONITOR';
99
+ action: 'CONTINUE_WITH_MONITORING';
100
+ envelope: DecisionResultEnvelope;
101
+ receiptVerified: boolean;
102
+ } | {
103
+ kind: 'APPROVAL';
104
+ action: 'REQUEST_APPROVAL';
105
+ envelope: DecisionResultEnvelope;
106
+ receiptVerified: boolean;
107
+ } | {
108
+ kind: 'BLOCK';
109
+ action: 'STOP';
110
+ envelope: DecisionResultEnvelope;
111
+ receiptVerified: boolean;
112
+ } | {
113
+ kind: 'SKIPPED';
114
+ reason: 'NOT_A_CONTRACT_CALL';
115
+ signals: string[];
116
+ detectorVersion: string;
117
+ } | UnavailableVerdict;
118
+ export type UnavailableVerdict = {
119
+ kind: 'UNAVAILABLE';
120
+ decisionMissing: true;
121
+ unavailableCount: number;
122
+ } & ({
123
+ cause: IntegrityCause;
124
+ failPolicy: 'closed' | 'open' | 'lkg';
125
+ resolution: 'CLOSED';
126
+ action: 'STOP';
127
+ } | {
128
+ cause: AvailabilityCause;
129
+ failPolicy: 'closed' | 'open' | 'lkg';
130
+ resolution: 'CLOSED';
131
+ action: 'STOP';
132
+ } | {
133
+ cause: AvailabilityCause;
134
+ failPolicy: 'open';
135
+ resolution: 'OPEN_PASSTHROUGH';
136
+ action: 'CONTINUE';
137
+ } | {
138
+ cause: AvailabilityCause;
139
+ failPolicy: 'lkg';
140
+ resolution: 'LKG_SUBSTITUTION';
141
+ action: 'CONTINUE' | 'CONTINUE_WITH_MONITORING';
142
+ lkgEnvelope: ReceiptVerifiedEnvelope;
143
+ });
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';
146
+ export type UnavailableCause = AvailabilityCause | IntegrityCause;
147
+ export interface TriggerDetector {
148
+ version: string;
149
+ detect(call: ToolCallDescriptor): {
150
+ trigger: boolean;
151
+ artifacts: Artifact[];
152
+ signals: string[];
153
+ confident: boolean;
154
+ };
155
+ }
156
+ export interface LkgStore {
157
+ get(inputFingerprint: string): Promise<DecisionResultEnvelope | null>;
158
+ put(env: DecisionResultEnvelope): Promise<void>;
159
+ }
160
+ export type GuardEvent = {
161
+ type: 'preflight_start' | 'preflight_result' | 'preflight_unavailable' | 'detection_skip' | 'execution_started' | 'execution_skipped' | 'monitoring_required' | 'monitoring_unwired' | 'receipt_unverified' | 'breaker_tripped' | 'observe_only_passthrough' | 'factory_error';
162
+ at: string;
163
+ correlationId?: string;
164
+ decisionId?: string;
165
+ action?: ExecutionAction;
166
+ cause?: string;
167
+ durationMs?: number;
168
+ signals?: string[];
169
+ detectorVersion?: string;
170
+ };
171
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * @coderifts/agent-guard — public types (FROZEN security core, agent-guard-api v1.0, 2026-07-26).
4
+ *
5
+ * Transcribed VERBATIM from agent-guard-api.FROZEN-v1.0.md § Core API. The discriminated unions
6
+ * encode the frozen invariants at the type level (tsc-verified): TOCTOU (ExecuteFactory signature),
7
+ * retry-footgun (executionAttempted split), enforced-bypass (ApprovedVerdict + receiptVerified on
8
+ * every arm), integrity-fail-open (discriminated UnavailableVerdict), unverified-envelope execution
9
+ * (branded ReceiptVerifiedEnvelope). Fail-closed by default.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @coderifts/agent-guard — builtinDetector (the trust core).
3
+ *
4
+ * Fail-safe + versioned. Precedence (frozen spec): explicit artifacts > filesTouched patterns >
5
+ * diff/content markers > toolName > intent (add-only). A contract surface whose change cannot be
6
+ * proven inert triggers (confident=false => trigger=true). The Grok corpus of 68 vectors is the
7
+ * mandatory fixture set; this detector passes all 68 (46 trigger, 22 no-trigger).
8
+ */
9
+ import type { TriggerDetector } from './types.js';
10
+ export declare const DETECTOR_VERSION = "builtin/1.0.0";
11
+ export declare const builtinDetector: TriggerDetector;
12
+ //# sourceMappingURL=detector.d.ts.map