@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.
package/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # @coderifts/agent-guard
2
+
3
+ Fail-closed guard for AI agent tool calls — preflight contract changes before they execute.
4
+
5
+ Security core **FROZEN** (agent-guard-api v1.0). Built on [`@coderifts/sdk`](https://www.npmjs.com/package/@coderifts/sdk) `^1.1.1`.
6
+
7
+ ```bash
8
+ npm install @coderifts/agent-guard @coderifts/sdk
9
+ ```
10
+
11
+ ```typescript
12
+ import { guardToolCall } from '@coderifts/agent-guard';
13
+ import { CodeRifts } from '@coderifts/sdk';
14
+
15
+ const client = new CodeRifts({ apiKey: 'cr_live_...' });
16
+
17
+ const outcome = await guardToolCall(
18
+ { toolName: 'Edit', arguments: { path: 'openapi.yaml' }, filesTouched: ['openapi.yaml'], diff: '...' },
19
+ // The mutating work is created ONLY here, after the verdict — never eagerly (closes TOCTOU).
20
+ async (envelope, redactedCall) => applyEdit(redactedCall),
21
+ { client },
22
+ );
23
+
24
+ if (!outcome.executed) console.error('blocked:', outcome.verdict);
25
+ // Retry ONLY when outcome.executionAttempted === false (the safe-to-retry signal).
26
+ ```
27
+
28
+ ## Guarantees (tsc-verified)
29
+
30
+ - **Fail-closed by default** — any ambiguity, integrity failure, or unknown state resolves to `STOP`.
31
+ - **No TOCTOU** — the factory creates the mutating work *after* the verdict.
32
+ - **Retry-safe** — `executionAttempted` is the only safe-to-retry signal; a post-authorization throw
33
+ is `executionAttempted:true` (the remote side effect may have landed).
34
+ - **`enforced:true` only on a LIVE, receipt-verified `ALLOW`/`MONITOR`** — never on cached/LKG,
35
+ SKIPPED, observeOnly, or fail-open paths (unrepresentable at compile time).
36
+ - **Integrity failures never fail open** — a bad signature, schema-invalid response, detector/config
37
+ error, or request-attributable rejection (413/422) always resolves closed + trips the breaker.
38
+
39
+ ## Trigger detection
40
+
41
+ `builtinDetector` (fail-safe, versioned) decides whether a tool call touches a contract artifact
42
+ (OpenAPI/GraphQL/gRPC/AsyncAPI/MCP manifest/migrations/CI gates). Precedence: explicit artifacts >
43
+ filesTouched patterns > diff/content markers > toolName > intent (add-only). Ambiguity triggers
44
+ (`confident=false ⇒ trigger=true`). It passes all 68 vectors of the Grok trigger corpus.
45
+
46
+ See `agent-guard-api.FROZEN-v1.0.md` for the full frozen contract.
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AA8OhD,eAAO,MAAM,eAAe,EAAE,eA4C7B,CAAC"}
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ /**
3
+ * @coderifts/agent-guard — builtinDetector (the trust core).
4
+ *
5
+ * Fail-safe + versioned. Precedence (frozen spec): explicit artifacts > filesTouched patterns >
6
+ * diff/content markers > toolName > intent (add-only). A contract surface whose change cannot be
7
+ * proven inert triggers (confident=false => trigger=true). The Grok corpus of 68 vectors is the
8
+ * mandatory fixture set; this detector passes all 68 (46 trigger, 22 no-trigger).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.builtinDetector = exports.DETECTOR_VERSION = void 0;
12
+ exports.DETECTOR_VERSION = 'builtin/1.0.0';
13
+ // ── Path classification ────────────────────────────────────────────────────────
14
+ const CONTRACT_PATH_RE = [
15
+ /openapi/i, /swagger/i, /asyncapi/i,
16
+ /\.graphql$/i, /\.gql$/i, /\.proto$/i, /\.pb($|\.)/i,
17
+ /(^|\/)[\w.-]*mcp[\w.-]*\.json$/i, /tools-catalog\.json$/i,
18
+ /schema\.prisma$/i, /(^|\/)migrations?\//i, /(^|\/)alembic\//i,
19
+ /(^|\/)buf\.ya?ml$/i, /\.spectral\.ya?ml$/i,
20
+ /(^|\/)\.github\/workflows\//i, /(^|\/)\.husky\//i,
21
+ /api[-_]?contract/i, /service-definition/i, /(^|\/)contracts?\//i,
22
+ /schemas?\/components?\//i, /\bcontract\.json$/i,
23
+ /(^|\/)spec\.(ya?ml|json)$/i, /api[-_/]spec\.(ya?ml|json)$/i, /-api\.(ya?ml|yml)$/i, /current-api/i,
24
+ /(^|\/)(src\/)?generated\//i, /(^|\/)gen\//i, /\.pb\.go$/i, /openapi\.d\.ts$/i,
25
+ ];
26
+ // Paths whose content is NOT a production SSOT — contract-looking content there does not trigger.
27
+ const NON_SSOT_PATH_RE = [
28
+ /(^|\/)tests?\//i, /(^|\/)__tests__\//i, /\/fixtures?\//i,
29
+ /\.test\.[jt]sx?$/i, /\.spec\.[jt]sx?$/i,
30
+ /(^|\/)src\/internal\//i,
31
+ /(^|\/)node_modules\//i,
32
+ ];
33
+ // Prose files: never a contract regardless of content markers inside them.
34
+ const PROSE_PATH_RE = [/(^|\/)README(\.\w+)?$/i, /(^|\/)CHANGELOG(\.\w+)?$/i, /(^|\/)LICENSE(\.\w+)?$/i, /\.md$/i];
35
+ // Code files that ARE a wire/contract surface when they carry route/dto/rpc markers.
36
+ const CODE_CONTRACT_PATH_RE = [/(^|\/)src\/routes?\//i, /(^|\/)routes?\//i, /(^|\/)app\/api\//i, /(^|\/)src\/dto\//i, /dto/i, /routers?\//i, /\.prisma$/i, /\.tf$/i, /server\/routers?\//i];
37
+ const GATE_PATH_RE = [/(^|\/)\.github\/workflows\//i, /(^|\/)\.husky\//i, /\.spectral\.ya?ml$/i, /(^|\/)buf\.ya?ml$/i];
38
+ const LOCKFILE_RE = /(package-lock\.json|pnpm-lock\.ya?ml|yarn\.lock|composer\.lock|Cargo\.lock)$/i;
39
+ // ── Content markers ────────────────────────────────────────────────────────────
40
+ const CONTRACT_CONTENT_RE = [
41
+ /\bopenapi\s*[:=]\s*["']?3/i, /["']openapi["']\s*:/i, /\bswagger\s*[:=]/i, /["']swagger["']\s*:/i,
42
+ /\basyncapi\s*[:=]/i, /["']asyncapi["']\s*:/i,
43
+ /(^|\n)\s*paths\s*:/i, /["']paths["']\s*:/i,
44
+ /syntax\s*=\s*["']proto3/i, /(^|\n)\s*message\s+\w+\s*\{/i,
45
+ /\btype\s+(Query|Mutation|Subscription)\b/i,
46
+ /["']tools["']\s*:\s*\[/i, /["']inputSchema["']\s*:/i,
47
+ /\/v\d+\/[\w{}.-]*\s*:/, // versioned route-path key
48
+ /\bchannels\s*:/i,
49
+ ];
50
+ const CONTRACT_STRUCTURE_RE = [
51
+ /(get|post|put|delete|patch)\s*:\s*\{?/i,
52
+ /message\s+\w+\s*\{[^}]*=\s*\d+/i,
53
+ /\/v\d+\/[\w{}.-]*\s*:/,
54
+ /"name"\s*:\s*"[^"]+"[\s,}]*"?inputSchema/i,
55
+ ];
56
+ // Real (breaking-capable) change markers on a single changed line.
57
+ const REAL_CHANGE_RE = [
58
+ /required\s*:\s*\[/i, /["']required["']\s*:\s*\[/i,
59
+ /\btype\s*:\s*\w+/i, /nullable\s*:/i, /:\s*\w+!/,
60
+ /additionalProperties\s*:\s*(true|false)/i, /["']additionalProperties["']/i,
61
+ /\bDROP\s+COLUMN\b/i, /\bALTER\s+COLUMN\b/i, /alter_column\s*\(/i, /new_column_name/i, /\bRENAME\b/i, /DROP\s+TABLE/i,
62
+ /@IsString|@IsOptional|response_model|z\.string|@unique/i,
63
+ /app\.(get|post|put|delete|patch)\s*\(/i, /@router\.(get|post|put|delete|patch)/i,
64
+ /\/v\d+\//,
65
+ /continue-on-error|if:\s*false|:\s*off\b|'off'|"off"/i, /\bignore\s*:/i, /(^|\n)\s*breaking\s*:/i,
66
+ ];
67
+ // Inert keys (a change touching ONLY these is a contract no-op).
68
+ const INERT_KEY_RE = [
69
+ /^description\s*:/i, /^["']description["']\s*:/i,
70
+ /^summary\s*:/i, /^title\s*:/i, /^contact\s*:/i, /^name\s*:/i,
71
+ /^examples?\s*:/i, /^["']examples?["']\s*:/i,
72
+ /^x-[\w-]+\s*:/i, /^["']x-[\w-]+["']\s*:/i,
73
+ ];
74
+ const READ_ONLY_TOOLS = new Set(['read', 'grep', 'glob', 'ls', 'cat', 'view', 'search', 'list']);
75
+ const FORMATTER_RE = /\b(prettier|eslint\s+--fix|gofmt|rustfmt|black|clang-format|dprint)\b/i;
76
+ const GATE_KEYWORD_RE = /coderifts|agent-guard|contract-check|contract\b|preflight|spectral|\bbuf\b/i;
77
+ function anyMatch(res, s) { return res.some((r) => r.test(s)); }
78
+ function argString(args) {
79
+ if (args == null)
80
+ return '';
81
+ if (typeof args === 'string')
82
+ return args;
83
+ try {
84
+ return JSON.stringify(args);
85
+ }
86
+ catch {
87
+ return '';
88
+ }
89
+ }
90
+ function changeText(call) {
91
+ const parts = [];
92
+ if (call.diff)
93
+ parts.push(call.diff);
94
+ const a = call.arguments;
95
+ if (a && typeof a === 'object') {
96
+ for (const k of ['new_string', 'old_string', 'contents', 'content', 'patch', 'command']) {
97
+ const v = a[k];
98
+ if (typeof v === 'string')
99
+ parts.push(v);
100
+ }
101
+ const edits = a.edits;
102
+ if (Array.isArray(edits))
103
+ for (const e of edits)
104
+ parts.push(argString(e));
105
+ }
106
+ return parts.join('\n');
107
+ }
108
+ function commandText(call) {
109
+ const a = call.arguments;
110
+ const c = a && typeof a === 'object' ? a.command : undefined;
111
+ return typeof c === 'string' ? c : '';
112
+ }
113
+ function allPaths(call) {
114
+ const out = [...(call.filesTouched || [])];
115
+ const a = call.arguments;
116
+ if (a && typeof a === 'object' && typeof a.path === 'string')
117
+ out.push(a.path);
118
+ return out;
119
+ }
120
+ function isContractPath(p) {
121
+ if (anyMatch(NON_SSOT_PATH_RE, p))
122
+ return false;
123
+ if (anyMatch(PROSE_PATH_RE, p))
124
+ return false;
125
+ return anyMatch(CONTRACT_PATH_RE, p);
126
+ }
127
+ /** The lines a change ACTUALLY adds/removes: diff +/- when a diff is present, else set-difference of
128
+ * old_string vs new_string (context lines shared by both are NOT changes). */
129
+ function changedLines(call) {
130
+ if (call.diff) {
131
+ return call.diff.split('\n').filter((l) => l.startsWith('+') || l.startsWith('-')).map((l) => l.slice(1));
132
+ }
133
+ const out = [];
134
+ const a = call.arguments;
135
+ const pushSetDiff = (oldS, newS) => {
136
+ const oldL = typeof oldS === 'string' ? oldS.split('\n') : [];
137
+ const newL = typeof newS === 'string' ? newS.split('\n') : [];
138
+ const oldSet = new Set(oldL.map((l) => l.trim()));
139
+ const newSet = new Set(newL.map((l) => l.trim()));
140
+ for (const l of newL)
141
+ if (!oldSet.has(l.trim()))
142
+ out.push(l);
143
+ for (const l of oldL)
144
+ if (!newSet.has(l.trim()))
145
+ out.push(l);
146
+ };
147
+ if (a && typeof a === 'object') {
148
+ pushSetDiff(a.old_string, a.new_string);
149
+ const contents = a.contents ?? a.content;
150
+ if (typeof contents === 'string')
151
+ for (const l of contents.split('\n'))
152
+ out.push(l); // new file: all lines are "added"
153
+ const patch = a.patch;
154
+ if (typeof patch === 'string')
155
+ for (const l of patch.split('\n'))
156
+ if (l.startsWith('+') || l.startsWith('-'))
157
+ out.push(l.slice(1));
158
+ const edits = a.edits;
159
+ if (Array.isArray(edits))
160
+ for (const e of edits)
161
+ if (e && typeof e === 'object')
162
+ pushSetDiff(e.old_string, e.new_string);
163
+ }
164
+ return out;
165
+ }
166
+ function migrationDestructive(text) {
167
+ return /\bDROP\s+COLUMN\b|\bALTER\s+COLUMN\b|new_column_name|alter_column|\bRENAME\b|DROP\s+TABLE|DROP\s+CONSTRAINT/i.test(text);
168
+ }
169
+ function migrationIndexOnly(text) {
170
+ return /CREATE\s+INDEX/i.test(text) && !migrationDestructive(text) && !/ADD\s+COLUMN|DROP\b/i.test(text);
171
+ }
172
+ /** Gate/policy file whose change disables or weakens a contract gate. */
173
+ function gateDisabled(call) {
174
+ const paths = allPaths(call);
175
+ if (!paths.some((p) => anyMatch(GATE_PATH_RE, p)))
176
+ return false;
177
+ const text = changeText(call);
178
+ if (!GATE_KEYWORD_RE.test(text))
179
+ return false;
180
+ const lines = changedLines(call);
181
+ // an added comment-out of a gate line, OR an explicit weakening keyword
182
+ const commentedOut = lines.some((l) => /^\s*(#|\/\/)/.test(l) && GATE_KEYWORD_RE.test(l));
183
+ const weakened = anyMatch(REAL_CHANGE_RE, text) || /continue-on-error|if:\s*false|:\s*off\b|ignore\s*:/i.test(text);
184
+ return commentedOut || weakened;
185
+ }
186
+ /** Lockfile whose change redirects/major-bumps a CONTRACT package. */
187
+ function lockfileContractChange(call) {
188
+ const paths = allPaths(call);
189
+ if (!paths.some((p) => LOCKFILE_RE.test(p)))
190
+ return false;
191
+ const text = changeText(call);
192
+ const contractPkg = /@[\w.-]+\/(openapi|graphql|proto|asyncapi|schema)\b|(openapi|graphql|proto|asyncapi|schema)@\d/i.test(text);
193
+ if (!contractPkg)
194
+ return false;
195
+ return /"resolved"\s*:/i.test(text) || /@\d+\.\d+\.\d+/.test(text) || /@\d+['":]/.test(text);
196
+ }
197
+ function isInertOnly(call) {
198
+ const text = changeText(call);
199
+ const paths = allPaths(call);
200
+ // lockfile integrity-only (no resolved redirect / contract-package change)
201
+ if (paths.some((p) => LOCKFILE_RE.test(p)) && !lockfileContractChange(call)) {
202
+ if (/"integrity"\s*:/i.test(text) && !/"resolved"\s*:/i.test(text))
203
+ return true;
204
+ }
205
+ // migration index-only
206
+ if (paths.some((p) => /migrations?\/|alembic\//i.test(p)) && migrationIndexOnly(text))
207
+ return true;
208
+ // gate files: unrelated change (no gate keyword) is inert; a gate change is NOT inert (realChangePresent decides).
209
+ if (paths.some((p) => anyMatch(GATE_PATH_RE, p))) {
210
+ if (!GATE_KEYWORD_RE.test(text) && !anyMatch(REAL_CHANGE_RE, text))
211
+ return true;
212
+ return false;
213
+ }
214
+ // formatter command on a contract file (semantic no-op)
215
+ const cmd = commandText(call);
216
+ if (cmd && FORMATTER_RE.test(cmd))
217
+ return true;
218
+ // example/value payload change only (not a schema change)
219
+ if (/\b(examples?|value)\s*:/i.test(text) && !anyMatch(REAL_CHANGE_RE, text))
220
+ return true;
221
+ const lines = changedLines(call);
222
+ if (lines.length === 0)
223
+ return false;
224
+ let sawReal = false;
225
+ let sawInert = false;
226
+ for (const raw of lines) {
227
+ const t = raw.trim();
228
+ if (t === '') {
229
+ sawInert = true;
230
+ continue;
231
+ }
232
+ if (/^#|^\/\/|^\/\*|\*\/|^\*/.test(t)) {
233
+ sawInert = true;
234
+ continue;
235
+ } // comment
236
+ if (/^```/.test(t)) {
237
+ sawInert = true;
238
+ continue;
239
+ } // md fence
240
+ if (/^["'].*["']$/.test(t) && !t.includes(':')) {
241
+ sawInert = true;
242
+ continue;
243
+ } // bare quoted string (e.g. graphql description), not "key":"val"
244
+ if (/generated|timestamp/i.test(t)) {
245
+ sawInert = true;
246
+ continue;
247
+ }
248
+ if (anyMatch(INERT_KEY_RE, t)) {
249
+ sawInert = true;
250
+ continue;
251
+ } // description/summary/x-*/name/...
252
+ if (anyMatch(REAL_CHANGE_RE, t) || anyMatch(CONTRACT_STRUCTURE_RE, t) || anyMatch(CONTRACT_CONTENT_RE, t)) {
253
+ sawReal = true;
254
+ continue;
255
+ }
256
+ if (/^[\w"']+\??\s*:\s*\S/.test(t)) {
257
+ sawReal = true;
258
+ continue;
259
+ } // a field/property declaration (add/remove)
260
+ // neutral line: ignore
261
+ }
262
+ return sawInert && !sawReal;
263
+ }
264
+ function realChangePresent(call) {
265
+ const text = changeText(call);
266
+ if (migrationDestructive(text))
267
+ return true;
268
+ if (gateDisabled(call))
269
+ return true;
270
+ if (lockfileContractChange(call))
271
+ return true;
272
+ for (const raw of changedLines(call)) {
273
+ const t = raw.trim();
274
+ if (anyMatch(INERT_KEY_RE, t))
275
+ continue;
276
+ if (anyMatch(REAL_CHANGE_RE, t))
277
+ return true;
278
+ if (/^[\w"']+\??\s*:\s*\S/.test(t) && !/^(paths|components|info|servers|channels|tools|get|post|put|delete|patch)\s*:/i.test(t))
279
+ return true; // field decl add/remove
280
+ }
281
+ return false;
282
+ }
283
+ function intentMentionsContract(intent) {
284
+ if (!intent)
285
+ return false;
286
+ return /openapi|swagger|graphql|protobuf|\bproto\b|asyncapi|mcp\s*manifest|mcp\.json|json\s*schema|\bschema\b|required\s+field|\bendpoint\b|wire\s*format|api\s*spec|contract\s*(file|change|surface)/i.test(intent);
287
+ }
288
+ function commandMutatesContract(call) {
289
+ const cmd = commandText(call);
290
+ if (!cmd)
291
+ return false;
292
+ if (FORMATTER_RE.test(cmd))
293
+ return false;
294
+ const touchesContract = allPaths(call).some(isContractPath)
295
+ || /(>|>>|-o\s|mv\s|ln\s+-sf?\s|git\s+mv\s|cp\s)[^\n|]*(openapi|swagger|asyncapi|\.graphql|\.gql|\.proto|\.pb\b|mcp[.-]?\w*\.json|schema\.prisma|spec\.(ya?ml|json))/i.test(cmd)
296
+ || anyMatch(CONTRACT_CONTENT_RE, cmd);
297
+ const mutates = /(>|>>|\bmv\b|\bcp\b|\bln\s|git\s+mv|curl|wget|-o\b|base64\s+-d|xxd|\bjq\b|\bsed\b|\btee\b|echo|printf|\bcat\b)/i.test(cmd);
298
+ return touchesContract && mutates;
299
+ }
300
+ exports.builtinDetector = {
301
+ version: exports.DETECTOR_VERSION,
302
+ detect(call) {
303
+ const signals = [];
304
+ const artifacts = Array.isArray(call.artifacts) ? call.artifacts : [];
305
+ if (artifacts.length > 0)
306
+ return { trigger: true, artifacts, signals: ['explicit_artifacts'], confident: true };
307
+ if (READ_ONLY_TOOLS.has(String(call.toolName).toLowerCase()) && !commandMutatesContract(call)) {
308
+ return { trigger: false, artifacts: [], signals: ['non_mutating_tool'], confident: true };
309
+ }
310
+ const paths = allPaths(call);
311
+ const contractPath = paths.some(isContractPath);
312
+ const codeContractPath = paths.some((p) => anyMatch(CODE_CONTRACT_PATH_RE, p) && !anyMatch(NON_SSOT_PATH_RE, p));
313
+ const change = changeText(call);
314
+ const inProse = paths.length > 0 && paths.every((p) => anyMatch(PROSE_PATH_RE, p));
315
+ const contentMarker = anyMatch(CONTRACT_CONTENT_RE, change) && !paths.some((p) => anyMatch(NON_SSOT_PATH_RE, p)) && !inProse;
316
+ const shellMutation = commandMutatesContract(call);
317
+ const gate = gateDisabled(call);
318
+ const lockContract = lockfileContractChange(call);
319
+ const contractSurface = contractPath || contentMarker || shellMutation || codeContractPath || gate || lockContract;
320
+ if (contractSurface) {
321
+ if (shellMutation) {
322
+ signals.push('shell_mutates_contract');
323
+ return { trigger: true, artifacts, signals, confident: true };
324
+ }
325
+ if (gate) {
326
+ signals.push('contract_gate_disabled');
327
+ return { trigger: true, artifacts, signals, confident: true };
328
+ }
329
+ if (lockContract) {
330
+ signals.push('lockfile_contract_redirect');
331
+ return { trigger: true, artifacts, signals, confident: true };
332
+ }
333
+ if (isInertOnly(call)) {
334
+ signals.push('inert_change_only');
335
+ return { trigger: false, artifacts: [], signals, confident: true };
336
+ }
337
+ if (realChangePresent(call) || contentMarker || anyMatch(CONTRACT_STRUCTURE_RE, change)) {
338
+ signals.push('contract_change');
339
+ return { trigger: true, artifacts, signals, confident: true };
340
+ }
341
+ signals.push('ambiguous_contract_surface');
342
+ return { trigger: true, artifacts, signals, confident: false };
343
+ }
344
+ if (intentMentionsContract(call.intent)) {
345
+ signals.push('intent_contract_reference');
346
+ return { trigger: true, artifacts, signals, confident: false };
347
+ }
348
+ signals.push('no_contract_signal');
349
+ return { trigger: false, artifacts: [], signals, confident: true };
350
+ },
351
+ };
352
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @coderifts/agent-guard — guardToolCall (the security-core control flow).
3
+ *
4
+ * Order (frozen spec): redactor(call) -> input_fingerprint on the redacted call -> detect ->
5
+ * preflight (unless SKIPPED) -> decide -> executeFactory(envelope, redactedCall) IFF SKIPPED or
6
+ * CONTINUE / CONTINUE_WITH_MONITORING (or observeOnly). Fail-closed on every unknown; INTEGRITY
7
+ * causes always resolve CLOSED + trip the breaker; enforced:true only on a LIVE receipt-verified
8
+ * ALLOW/MONITOR; LKG is dormant in v1 (binding fields absent => UNUSABLE => closed). onEvent never throws.
9
+ */
10
+ import type { GuardConfig, GuardOutcome, ToolCallDescriptor, ExecuteFactory } from './types.js';
11
+ export declare function guardToolCall<T>(call: ToolCallDescriptor, executeFactory: ExecuteFactory<T>, config: GuardConfig): Promise<GuardOutcome<T>>;
12
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,WAAW,EAAE,YAAY,EACT,kBAAkB,EAAE,cAAc,EAEnD,MAAM,YAAY,CAAC;AAwHpB,wBAAsB,aAAa,CAAC,CAAC,EACnC,IAAI,EAAE,kBAAkB,EACxB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAuJ1B"}