attenu-guard 0.3.0 → 0.4.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/CHANGELOG.md +62 -0
- package/README.md +8 -2
- package/dist/cjs/adapters/langgraph.d.ts +27 -3
- package/dist/cjs/adapters/langgraph.d.ts.map +1 -1
- package/dist/cjs/adapters/langgraph.js +290 -11
- package/dist/cjs/adapters/langgraph.js.map +1 -1
- package/dist/cjs/audit.d.ts +38 -1
- package/dist/cjs/audit.d.ts.map +1 -1
- package/dist/cjs/audit.js +69 -8
- package/dist/cjs/audit.js.map +1 -1
- package/dist/cjs/canonical.d.ts +19 -0
- package/dist/cjs/canonical.d.ts.map +1 -1
- package/dist/cjs/canonical.js +60 -2
- package/dist/cjs/canonical.js.map +1 -1
- package/dist/cjs/ceilings.d.ts.map +1 -1
- package/dist/cjs/ceilings.js +18 -0
- package/dist/cjs/ceilings.js.map +1 -1
- package/dist/cjs/chain.d.ts +32 -0
- package/dist/cjs/chain.d.ts.map +1 -1
- package/dist/cjs/chain.js +0 -0
- package/dist/cjs/chain.js.map +1 -1
- package/dist/cjs/cli.d.ts.map +1 -1
- package/dist/cjs/cli.js +4 -0
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/evidence.d.ts +41 -2
- package/dist/cjs/evidence.d.ts.map +1 -1
- package/dist/cjs/evidence.js +571 -13
- package/dist/cjs/evidence.js.map +1 -1
- package/dist/cjs/guard.d.ts +163 -9
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +426 -26
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +12 -9
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +24 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/params.d.ts +52 -0
- package/dist/cjs/params.d.ts.map +1 -0
- package/dist/cjs/params.js +97 -0
- package/dist/cjs/params.js.map +1 -0
- package/dist/cjs/reasons.d.ts +89 -1
- package/dist/cjs/reasons.d.ts.map +1 -1
- package/dist/cjs/reasons.js +99 -3
- package/dist/cjs/reasons.js.map +1 -1
- package/dist/cjs/version.d.ts +10 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +13 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/cjs/wire.d.ts.map +1 -1
- package/dist/cjs/wire.js +7 -0
- package/dist/cjs/wire.js.map +1 -1
- package/dist/esm/adapters/langgraph.d.ts +27 -3
- package/dist/esm/adapters/langgraph.d.ts.map +1 -1
- package/dist/esm/adapters/langgraph.js +290 -11
- package/dist/esm/adapters/langgraph.js.map +1 -1
- package/dist/esm/audit.d.ts +38 -1
- package/dist/esm/audit.d.ts.map +1 -1
- package/dist/esm/audit.js +68 -8
- package/dist/esm/audit.js.map +1 -1
- package/dist/esm/canonical.d.ts +19 -0
- package/dist/esm/canonical.d.ts.map +1 -1
- package/dist/esm/canonical.js +58 -1
- package/dist/esm/canonical.js.map +1 -1
- package/dist/esm/ceilings.d.ts.map +1 -1
- package/dist/esm/ceilings.js +19 -1
- package/dist/esm/ceilings.js.map +1 -1
- package/dist/esm/chain.d.ts +32 -0
- package/dist/esm/chain.d.ts.map +1 -1
- package/dist/esm/chain.js +0 -0
- package/dist/esm/chain.js.map +1 -1
- package/dist/esm/cli.d.ts.map +1 -1
- package/dist/esm/cli.js +4 -0
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/evidence.d.ts +41 -2
- package/dist/esm/evidence.d.ts.map +1 -1
- package/dist/esm/evidence.js +570 -12
- package/dist/esm/evidence.js.map +1 -1
- package/dist/esm/guard.d.ts +163 -9
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +393 -27
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +12 -9
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/params.d.ts +52 -0
- package/dist/esm/params.d.ts.map +1 -0
- package/dist/esm/params.js +92 -0
- package/dist/esm/params.js.map +1 -0
- package/dist/esm/reasons.d.ts +89 -1
- package/dist/esm/reasons.d.ts.map +1 -1
- package/dist/esm/reasons.js +97 -2
- package/dist/esm/reasons.js.map +1 -1
- package/dist/esm/version.d.ts +10 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +10 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/wire.d.ts.map +1 -1
- package/dist/esm/wire.js +8 -1
- package/dist/esm/wire.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/guard.js
CHANGED
|
@@ -27,12 +27,47 @@
|
|
|
27
27
|
* (`spawn`/`spawn_denied`/`kill`) even though the API reads
|
|
28
28
|
* issue/delegate/revoke. That field is a separately-versioned published wire
|
|
29
29
|
* contract that verifiers depend on.
|
|
30
|
+
*
|
|
31
|
+
* ## Execution binding (0.9.0, `Guard.issue(agentId, authority, {schemaVersion: 2})` only)
|
|
32
|
+
*
|
|
33
|
+
* `schemaVersion: 1` chains (the default — nothing below applies to them) behave EXACTLY as they
|
|
34
|
+
* did before 0.9.0: no `callId`, no pending tracking, no `NODE_FINALIZED` refusal, `check`'s new
|
|
35
|
+
* `authorizedParams`/`capture`/`adapter` options throw if supplied. A caller opts in per chain,
|
|
36
|
+
* once, at `Guard.issue` — schema versions never mix within a chain
|
|
37
|
+
* (docs/execution-binding spec section 9).
|
|
38
|
+
*
|
|
39
|
+
* On a `schemaVersion: 2` chain, `check`'s transition is, in order:
|
|
40
|
+
*
|
|
41
|
+
* 1. refuse if the node is already `complete()`d (`ReasonCode.NODE_FINALIZED`);
|
|
42
|
+
* 2. otherwise evaluate authority/ceilings and update meters (`evaluate` + auto-metering,
|
|
43
|
+
* unchanged from schema version 1);
|
|
44
|
+
* 3. allocate `callId` — 16 bytes from `crypto.randomBytes`, lowercase hex; if that throws, the
|
|
45
|
+
* call is denied and NOTHING is appended (`ReasonCode.CALL_ID_UNAVAILABLE`);
|
|
46
|
+
* 4. commit the entry (append to the audit log — may throw `CommittedAuditError` if persistence
|
|
47
|
+
* fails AFTER the in-memory commit; this method attaches `.decision` to that error before it
|
|
48
|
+
* propagates, per spec section 1: "carries the committed entry and the decision");
|
|
49
|
+
* 5. register an allowed call as pending (even across a `CommittedAuditError` — spec: "the
|
|
50
|
+
* guard registers an allowed call as pending before raising");
|
|
51
|
+
* 6. return the `Decision`, which now carries `.callId`.
|
|
52
|
+
*
|
|
53
|
+
* `recordOutcome` is the producer API a body-owning wrapper calls once it knows how the call
|
|
54
|
+
* ended; `complete` refuses (returns a falsy-in-`==` `CompletionResult`) while calls are still
|
|
55
|
+
* pending; `revoke`/`revokeAgent` snapshot the still-pending callIds onto the `kill` entry as
|
|
56
|
+
* `pending_at_kill` without clearing them — a late `recordOutcome` after a kill is accepted.
|
|
57
|
+
*
|
|
58
|
+
* JavaScript has no analogue of Python's `__bool__`, so unlike the Python library,
|
|
59
|
+
* `if (guard.complete())` cannot be made to read `false` on refusal — see `CompletionResult`'s
|
|
60
|
+
* own doc comment in reasons.ts for exactly what IS and is not bridged.
|
|
30
61
|
*/
|
|
31
62
|
import { AuthorityError } from "./authority.js";
|
|
32
|
-
import { AuditLog } from "./audit.js";
|
|
63
|
+
import { AuditLog, CommittedAuditError } from "./audit.js";
|
|
33
64
|
import { Chain, MonotonicClock } from "./chain.js";
|
|
34
65
|
import { ctxFieldOf, isMetered } from "./ceilings.js";
|
|
35
|
-
import { DISPOSITIONS, Decision, Disposition, Reason, ReasonCode } from "./reasons.js";
|
|
66
|
+
import { BODY_STATES, BodyState, CAPTURES, Capture, CompletionResult, DISPOSITIONS, Decision, Disposition, Reason, ReasonCode, } from "./reasons.js";
|
|
67
|
+
import * as paramsMod from "./params.js";
|
|
68
|
+
import { ParamsHashReason } from "./params.js";
|
|
69
|
+
import { VERSION } from "./version.js";
|
|
70
|
+
import { randomBytes } from "node:crypto";
|
|
36
71
|
/**
|
|
37
72
|
* Thrown only by `enforce`. Carries the full `Decision`, so a caller can branch
|
|
38
73
|
* on `err.decision.reasons[0].code` instead of parsing a message string.
|
|
@@ -45,6 +80,18 @@ export class AuthorityDenied extends Error {
|
|
|
45
80
|
this.name = "AuthorityDenied";
|
|
46
81
|
}
|
|
47
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Thrown by `Guard.recordOutcome` when `callId` already has a recorded outcome in this chain's
|
|
85
|
+
* lifetime. A programming error in the caller (a wrapper observing the same call twice), not a
|
|
86
|
+
* policy outcome — "exactly one outcome per callId, enforced at append" (docs/execution-binding
|
|
87
|
+
* spec section 3).
|
|
88
|
+
*/
|
|
89
|
+
export class DuplicateOutcomeError extends Error {
|
|
90
|
+
constructor(message) {
|
|
91
|
+
super(message);
|
|
92
|
+
this.name = "DuplicateOutcomeError";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
48
95
|
/**
|
|
49
96
|
* A monotonic integer for audit sequencing, distinct from the wall clock used
|
|
50
97
|
* for TTL expiry — it keeps the log's ordering deterministic regardless of
|
|
@@ -73,9 +120,27 @@ export class Guard {
|
|
|
73
120
|
this.strikes = strikes;
|
|
74
121
|
}
|
|
75
122
|
// ---- factory ----------------------------------------------------------
|
|
76
|
-
/**
|
|
123
|
+
/**
|
|
124
|
+
* A fresh root Guard, starting a new delegation chain. `schemaVersion: 2` opts the whole chain
|
|
125
|
+
* into 0.9.0 execution binding — see the module doc comment.
|
|
126
|
+
*
|
|
127
|
+
* `auditOverwrite: true` (silently replace an existing non-empty ledger at `auditPath`) is
|
|
128
|
+
* REFUSED on a `schemaVersion: 2` chain: the restart rule has no escape hatch on v2 — a v2
|
|
129
|
+
* process restart must always open a NEW audit path, never overwrite an old one, so that a
|
|
130
|
+
* pending call from before the restart stays truthfully unaccounted rather than vanishing
|
|
131
|
+
* under a fresh chain at the same path. v1 keeps the flag exactly as before.
|
|
132
|
+
*/
|
|
77
133
|
static issue(agentId, authority, options = {}) {
|
|
78
134
|
const chainId = options.chainId ?? "chain";
|
|
135
|
+
const schemaVersion = options.schemaVersion ?? 1;
|
|
136
|
+
if (schemaVersion !== 1 && schemaVersion !== 2) {
|
|
137
|
+
throw new Error(`unsupported schemaVersion ${schemaVersion}; expected 1 or 2`);
|
|
138
|
+
}
|
|
139
|
+
if (schemaVersion === 2 && options.auditOverwrite) {
|
|
140
|
+
throw new Error("auditOverwrite: true is not permitted on a schemaVersion: 2 chain — the restart rule " +
|
|
141
|
+
"has no escape hatch on v2 (docs/execution-binding spec section 1). Open a new audit " +
|
|
142
|
+
"path for the new chain instead; v1 chains may still set auditOverwrite: true.");
|
|
143
|
+
}
|
|
79
144
|
const chain = new Chain(chainId, {
|
|
80
145
|
maxDepth: options.maxDepth ?? 6,
|
|
81
146
|
maxFanout: options.maxFanout ?? 16,
|
|
@@ -84,15 +149,22 @@ export class Guard {
|
|
|
84
149
|
const audit = new AuditLog({
|
|
85
150
|
path: options.auditPath ?? null,
|
|
86
151
|
sinks: options.auditSinks ?? [],
|
|
152
|
+
schemaVersion,
|
|
153
|
+
overwrite: options.auditOverwrite ?? false,
|
|
87
154
|
});
|
|
88
155
|
const seq = new SeqClock();
|
|
89
156
|
const node = chain.addRoot(agentId, authority, options.task ?? "root");
|
|
90
|
-
|
|
157
|
+
const rootFields = {
|
|
91
158
|
chain_id: chainId,
|
|
92
159
|
node: node.nodeId,
|
|
93
160
|
agent: agentId,
|
|
94
161
|
authority: authority.toWire(),
|
|
95
|
-
}
|
|
162
|
+
};
|
|
163
|
+
if (schemaVersion === 2) {
|
|
164
|
+
chain.paramsSalt = randomBytes(16);
|
|
165
|
+
rootFields["params_salt"] = chain.paramsSalt.toString("hex");
|
|
166
|
+
}
|
|
167
|
+
audit.append("root", seq.now(), rootFields);
|
|
96
168
|
return new Guard(node, chain, audit, seq, options.strictMetering ?? false, options.strikes ?? null);
|
|
97
169
|
}
|
|
98
170
|
// ---- identity ---------------------------------------------------------
|
|
@@ -121,6 +193,18 @@ export class Guard {
|
|
|
121
193
|
get isComplete() {
|
|
122
194
|
return this.node.complete;
|
|
123
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* 0.9.0: the schema version this Guard's chain was issued at (1 or 2 — see
|
|
198
|
+
* `Guard.issue({schemaVersion})`). Adapters use this to decide whether to pass
|
|
199
|
+
* `capture`/`adapter`/`authorizedParams` to `check` and call `recordOutcome` afterwards,
|
|
200
|
+
* rather than reaching into the audit log directly.
|
|
201
|
+
*/
|
|
202
|
+
get schemaVersion() {
|
|
203
|
+
return this.audit.schemaVersion;
|
|
204
|
+
}
|
|
205
|
+
get isV2() {
|
|
206
|
+
return this.schemaVersion === 2;
|
|
207
|
+
}
|
|
124
208
|
/** Is `other` an ancestor of this guard in the same chain? */
|
|
125
209
|
isDescendantOf(other) {
|
|
126
210
|
if (other.chain !== this.chain)
|
|
@@ -134,21 +218,34 @@ export class Guard {
|
|
|
134
218
|
return false;
|
|
135
219
|
}
|
|
136
220
|
/**
|
|
137
|
-
* Mark this node's work FINISHED — one `done` event
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
221
|
+
* Mark this node's work FINISHED — one `done` event.
|
|
222
|
+
*
|
|
223
|
+
* On a `schemaVersion: 2` chain, returns a `CompletionResult` (see its own doc comment in
|
|
224
|
+
* reasons.ts for the JavaScript-specific limits of its truthiness bridge) and refuses — a
|
|
225
|
+
* falsy-by-`.completed` `CompletionResult` carrying `.pendingCallIds` — while this node has
|
|
226
|
+
* `allow`ed calls that have not yet reported an outcome; completing while a call is still open
|
|
227
|
+
* would be a false claim that the node's work is finished. Idempotent:
|
|
228
|
+
* `CompletionResult(false, [])` if already marked.
|
|
229
|
+
*
|
|
230
|
+
* On a `schemaVersion: 1` chain (the default) this returns a plain `boolean`, byte-and-type
|
|
231
|
+
* IDENTICAL to every release before 0.9.0 — v1 never gained pending-call awareness, so there is
|
|
232
|
+
* nothing new to report and no reason to change its return type. Purely a lifecycle marker
|
|
233
|
+
* either way — it does NOT change authority; revocation is the hard stop.
|
|
141
234
|
*/
|
|
142
235
|
complete() {
|
|
236
|
+
const v2 = this.isV2;
|
|
143
237
|
if (this.node.complete)
|
|
144
|
-
return false;
|
|
238
|
+
return v2 ? new CompletionResult(false, []) : false;
|
|
239
|
+
const pending = v2 ? this.chain.pendingFor(this.node.nodeId) : [];
|
|
240
|
+
if (pending.length > 0)
|
|
241
|
+
return new CompletionResult(false, pending); // only reachable on v2
|
|
145
242
|
this.node.complete = true;
|
|
146
243
|
this.append("done", {
|
|
147
244
|
chain_id: this.chainId,
|
|
148
245
|
node: this.node.nodeId,
|
|
149
246
|
agent: this.node.agentId,
|
|
150
247
|
});
|
|
151
|
-
return true;
|
|
248
|
+
return v2 ? new CompletionResult(true, []) : true;
|
|
152
249
|
}
|
|
153
250
|
// ---- delegation -------------------------------------------------------
|
|
154
251
|
/**
|
|
@@ -259,7 +356,7 @@ export class Guard {
|
|
|
259
356
|
`${Array.from(DISPOSITIONS).sort().join(", ")}`);
|
|
260
357
|
}
|
|
261
358
|
}
|
|
262
|
-
logDecision(decision, scope, tool, context, disposition) {
|
|
359
|
+
logDecision(decision, scope, tool, context, disposition, extraFields) {
|
|
263
360
|
const event = decision.allowed ? "allow" : "deny";
|
|
264
361
|
const fields = {
|
|
265
362
|
chain_id: this.chainId,
|
|
@@ -283,7 +380,9 @@ export class Guard {
|
|
|
283
380
|
if (d !== null)
|
|
284
381
|
fields["disposition"] = d;
|
|
285
382
|
}
|
|
286
|
-
|
|
383
|
+
if (extraFields)
|
|
384
|
+
Object.assign(fields, extraFields);
|
|
385
|
+
return this.append(event, fields);
|
|
287
386
|
}
|
|
288
387
|
// ---- enforcement ------------------------------------------------------
|
|
289
388
|
callLimits() {
|
|
@@ -307,6 +406,37 @@ export class Guard {
|
|
|
307
406
|
}
|
|
308
407
|
return filled;
|
|
309
408
|
}
|
|
409
|
+
static attachCallId(decision, callId) {
|
|
410
|
+
return callId === null ? decision : decision.withCallId(callId);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* `[hashHex, reason]` against this chain's `paramsSalt` — see params.ts. `[null, null]` if the
|
|
414
|
+
* caller omitted the option entirely (opted out of this specific commitment).
|
|
415
|
+
*/
|
|
416
|
+
paramsCommitment(value) {
|
|
417
|
+
if (value === undefined)
|
|
418
|
+
return [null, null];
|
|
419
|
+
const salt = this.chain.paramsSalt;
|
|
420
|
+
if (salt === null)
|
|
421
|
+
return [null, ParamsHashReason.UNSUPPORTED]; // cannot happen for a properly-issued v2 chain
|
|
422
|
+
return paramsMod.commit(value, salt);
|
|
423
|
+
}
|
|
424
|
+
static validateCaptureAdapter(capture, adapter) {
|
|
425
|
+
if (capture !== null && !CAPTURES.has(capture)) {
|
|
426
|
+
throw new Error(`unknown capture ${JSON.stringify(capture)}; expected one of ` +
|
|
427
|
+
`${Array.from(CAPTURES).sort().join(", ")}`);
|
|
428
|
+
}
|
|
429
|
+
if (capture !== null && adapter === null) {
|
|
430
|
+
throw new Error("adapter: {module, version, hookPath} is required alongside capture " +
|
|
431
|
+
"(docs/execution-binding spec section 2)");
|
|
432
|
+
}
|
|
433
|
+
if (adapter !== null) {
|
|
434
|
+
const missing = ["module", "version", "hookPath"].filter((k) => !(k in adapter));
|
|
435
|
+
if (missing.length > 0) {
|
|
436
|
+
throw new Error(`adapter is missing ${JSON.stringify(missing)}; expected module/version/hookPath`);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
310
440
|
/**
|
|
311
441
|
* Authorize an action. Returns a `Decision`; it does not throw on a denial.
|
|
312
442
|
* Every call — allow or deny — is appended to the audit log.
|
|
@@ -315,33 +445,134 @@ export class Guard {
|
|
|
315
445
|
* supply `calls`, the guard supplies the running count for (node, pattern)
|
|
316
446
|
* itself, including this call, and increments it on allow. An explicit
|
|
317
447
|
* `calls` in the context always wins.
|
|
448
|
+
*
|
|
449
|
+
* `authorizedParams`/`capture`/`adapter` (0.9.0, `schemaVersion: 2` chains only — throws
|
|
450
|
+
* otherwise): the execution-binding inputs, see the module doc comment and
|
|
451
|
+
* docs/execution-binding spec sections 1-4. On a schema-version-2 chain, the returned
|
|
452
|
+
* `Decision.callId` is what a later `recordOutcome` call binds to.
|
|
318
453
|
*/
|
|
319
454
|
check(scope, options = {}) {
|
|
320
455
|
const disposition = options.disposition ?? null;
|
|
321
456
|
Guard.checkDisposition(disposition); // refuse before anything reaches the ledger
|
|
457
|
+
const isV2 = this.isV2;
|
|
458
|
+
const authorizedParams = options.authorizedParams;
|
|
459
|
+
const capture = options.capture ?? null;
|
|
460
|
+
const adapter = options.adapter ?? null;
|
|
461
|
+
if (!isV2 && (authorizedParams !== undefined || capture !== null || adapter !== null)) {
|
|
462
|
+
throw new Error("authorizedParams/capture/adapter require a schemaVersion: 2 chain " +
|
|
463
|
+
"(Guard.issue(..., {schemaVersion: 2}))");
|
|
464
|
+
}
|
|
465
|
+
Guard.validateCaptureAdapter(capture, adapter);
|
|
322
466
|
const ctx = { ...(options.context ?? {}) };
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
467
|
+
const nid = this.node.nodeId;
|
|
468
|
+
// 1. refuse if the node is finalized (v2 only — a v1 chain's `complete()` has always been a
|
|
469
|
+
// pure informational marker that leaves authority, and `check`, untouched).
|
|
470
|
+
let decision;
|
|
471
|
+
let filled;
|
|
472
|
+
if (isV2 && this.node.complete) {
|
|
473
|
+
decision = Decision.deny(new Reason(ReasonCode.NODE_FINALIZED, { message: "node already finalized (complete())" }), nid);
|
|
474
|
+
filled = [];
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
// 2. evaluate authority/ceilings; update meters on allow.
|
|
478
|
+
filled = this.autoMeter(scope, ctx);
|
|
479
|
+
decision = this.evaluate(scope, ctx, options.metered ?? false);
|
|
480
|
+
if (decision.allowed) {
|
|
481
|
+
for (const c of filled)
|
|
482
|
+
this.chain.countCall(nid, c.meterKey ?? "*");
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
// 3. allocate callId (v2 only) — fail-closed, nothing written, if the CSPRNG throws.
|
|
486
|
+
let callId = null;
|
|
487
|
+
if (isV2) {
|
|
488
|
+
try {
|
|
489
|
+
callId = randomBytes(16).toString("hex");
|
|
490
|
+
}
|
|
491
|
+
catch (exc) {
|
|
492
|
+
// Pre-commit failure (spec section 1): meters are restored, nothing is pending, the call
|
|
493
|
+
// is denied, nothing is appended.
|
|
494
|
+
if (decision.allowed) {
|
|
495
|
+
for (const c of filled)
|
|
496
|
+
this.chain.uncountCall(nid, c.meterKey ?? "*");
|
|
497
|
+
}
|
|
498
|
+
return Decision.deny(new Reason(ReasonCode.CALL_ID_UNAVAILABLE, { message: String(exc) }), nid);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
const extra = {};
|
|
502
|
+
if (isV2) {
|
|
503
|
+
extra["call_id"] = callId;
|
|
504
|
+
if (decision.allowed) {
|
|
505
|
+
if (capture !== null) {
|
|
506
|
+
extra["capture"] = capture;
|
|
507
|
+
extra["adapter"] = {
|
|
508
|
+
module: adapter.module,
|
|
509
|
+
version: adapter.version,
|
|
510
|
+
hook_path: adapter.hookPath,
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
// A bare check() with no wrapper IS itself an observation, honestly described:
|
|
515
|
+
// authorization was observed; execution was not. The guard supplies this default
|
|
516
|
+
// rather than leaving capture/adapter absent, so every v2 allow carries them — the
|
|
517
|
+
// verifier requires both (merge-gate item 4); the caller-facing API stays optional,
|
|
518
|
+
// the ledger is not.
|
|
519
|
+
extra["capture"] = Capture.PRE_HOOK_ONLY;
|
|
520
|
+
extra["adapter"] = { module: "attenu-guard", version: VERSION, hook_path: "Guard.check" };
|
|
521
|
+
}
|
|
522
|
+
const [ph, preason] = this.paramsCommitment(authorizedParams);
|
|
523
|
+
if (ph !== null)
|
|
524
|
+
extra["authorized_params_hash"] = ph;
|
|
525
|
+
else if (preason !== null)
|
|
526
|
+
extra["params_hash_reason"] = preason;
|
|
527
|
+
}
|
|
328
528
|
}
|
|
329
|
-
|
|
529
|
+
// 4. commit (append) — a post-commit persistence failure throws CommittedAuditError; attach
|
|
530
|
+
// `.decision` (spec: "carries the committed entry and the decision") before it propagates,
|
|
531
|
+
// and still register the pending call first (step 5). ANY OTHER exception here (e.g. a
|
|
532
|
+
// canonicalization failure while hashing the entry, inside AuditLog.append's hashEntry
|
|
533
|
+
// call, which runs BEFORE its commit point) is a pre-commit failure exactly like the
|
|
534
|
+
// CSPRNG case above: meters are restored, nothing is pending, and the exception is
|
|
535
|
+
// re-thrown as-is (not swallowed into a Decision — unlike CSPRNG exhaustion, a malformed
|
|
536
|
+
// context/authorizedParams value is the caller's error, and this library's convention
|
|
537
|
+
// elsewhere is to throw on malformed input, not silently deny).
|
|
538
|
+
try {
|
|
539
|
+
this.logDecision(decision, scope, options.tool ?? null, ctx, disposition, extra);
|
|
540
|
+
}
|
|
541
|
+
catch (exc) {
|
|
542
|
+
if (exc instanceof CommittedAuditError) {
|
|
543
|
+
const decisionWithId = Guard.attachCallId(decision, callId);
|
|
544
|
+
if (isV2 && decision.allowed)
|
|
545
|
+
this.chain.registerPending(nid, callId);
|
|
546
|
+
exc.decision = decisionWithId;
|
|
547
|
+
}
|
|
548
|
+
else if (decision.allowed) {
|
|
549
|
+
for (const c of filled)
|
|
550
|
+
this.chain.uncountCall(nid, c.meterKey ?? "*");
|
|
551
|
+
}
|
|
552
|
+
throw exc;
|
|
553
|
+
}
|
|
554
|
+
decision = Guard.attachCallId(decision, callId);
|
|
555
|
+
// 5. register pending (allows only).
|
|
556
|
+
if (isV2 && decision.allowed)
|
|
557
|
+
this.chain.registerPending(nid, callId);
|
|
558
|
+
// 6. fall through to strike-policy handling, then return.
|
|
330
559
|
if (!decision.allowed &&
|
|
331
560
|
this.strikes !== null &&
|
|
332
561
|
this.strikes.enabled &&
|
|
333
|
-
!this.chain.isRevoked(
|
|
334
|
-
const count = this.chain.recordStrike(this.strikes.key(
|
|
562
|
+
!this.chain.isRevoked(nid)) {
|
|
563
|
+
const count = this.chain.recordStrike(this.strikes.key(nid, scope));
|
|
335
564
|
if (count >= this.strikes.n) {
|
|
336
|
-
const revoked = this.chain.revoke(
|
|
565
|
+
const revoked = this.chain.revoke(nid);
|
|
566
|
+
const killExtra = isV2 ? this.pendingAtKill(revoked) : {};
|
|
337
567
|
this.append("kill", {
|
|
338
568
|
chain_id: this.chainId,
|
|
339
|
-
target:
|
|
569
|
+
target: nid,
|
|
340
570
|
reason: "strike_policy",
|
|
341
571
|
scope,
|
|
342
572
|
strikes: count,
|
|
343
573
|
mode: this.strikes.mode,
|
|
344
574
|
revoked,
|
|
575
|
+
...killExtra,
|
|
345
576
|
});
|
|
346
577
|
}
|
|
347
578
|
}
|
|
@@ -358,7 +589,8 @@ export class Guard {
|
|
|
358
589
|
}
|
|
359
590
|
/**
|
|
360
591
|
* A pure dry-run: identical policy evaluation to `check`, but it never throws
|
|
361
|
-
* and — critically — writes NOTHING to the audit log.
|
|
592
|
+
* and — critically — writes NOTHING to the audit log. Never allocates a `callId`
|
|
593
|
+
* (there is nothing to bind an outcome to).
|
|
362
594
|
*/
|
|
363
595
|
wouldAllow(scope, options = {}) {
|
|
364
596
|
const ctx = { ...(options.context ?? {}) };
|
|
@@ -374,21 +606,153 @@ export class Guard {
|
|
|
374
606
|
*
|
|
375
607
|
* `scope` defaults to `tool` (or "-"), because the published schema requires
|
|
376
608
|
* a string scope on allow and deny events.
|
|
609
|
+
*
|
|
610
|
+
* On a `schemaVersion: 2` chain this also allocates and attaches a `callId` (same fail-closed
|
|
611
|
+
* CSPRNG handling as `check`) — every allow/deny entry carries one; a deny never expects an
|
|
612
|
+
* outcome.
|
|
377
613
|
*/
|
|
378
614
|
recordDenial(reason, message = "", options = {}) {
|
|
379
615
|
Guard.checkDisposition(options.disposition ?? null);
|
|
380
616
|
const r = reason instanceof Reason ? reason : new Reason(String(reason), { message });
|
|
381
617
|
const decision = Decision.deny(r, this.node.nodeId);
|
|
618
|
+
const isV2 = this.isV2;
|
|
382
619
|
const tool = options.tool ?? null;
|
|
383
|
-
|
|
384
|
-
|
|
620
|
+
let callId = null;
|
|
621
|
+
if (isV2) {
|
|
622
|
+
try {
|
|
623
|
+
callId = randomBytes(16).toString("hex");
|
|
624
|
+
}
|
|
625
|
+
catch {
|
|
626
|
+
return Decision.deny(r, this.node.nodeId); // fail-closed: nothing written
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
try {
|
|
630
|
+
this.logDecision(decision, options.scope ?? tool ?? "-", tool, { ...(options.context ?? {}) }, options.disposition ?? null, isV2 ? { call_id: callId } : undefined);
|
|
631
|
+
}
|
|
632
|
+
catch (exc) {
|
|
633
|
+
if (exc instanceof CommittedAuditError) {
|
|
634
|
+
exc.decision = Guard.attachCallId(decision, callId);
|
|
635
|
+
}
|
|
636
|
+
throw exc;
|
|
637
|
+
}
|
|
638
|
+
return Guard.attachCallId(decision, callId);
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* The body-owning wrapper's report of how an `allow`ed call (identified by `callId`, from that
|
|
642
|
+
* `check` call's `Decision.callId`) ended. `schemaVersion: 2` chains only.
|
|
643
|
+
*
|
|
644
|
+
* `bodyState` is one of the `BodyState` constants. `errorCode` is required exactly when
|
|
645
|
+
* `bodyState === BodyState.RAISED` (a normalized exception class name, never a message) and
|
|
646
|
+
* forbidden otherwise. `durationMs` (observation start to observation end) is required.
|
|
647
|
+
* `invokedParams` is the corresponding JSON object the wrapper observed immediately before the
|
|
648
|
+
* actual invocation — hashed the same way as `check`'s `authorizedParams`; omit the option to
|
|
649
|
+
* opt out. `receipt` is unverified carriage, `{type, ref, digest}`.
|
|
650
|
+
*
|
|
651
|
+
* Exactly one outcome per `callId` is enforced here (throws `DuplicateOutcomeError`); a second
|
|
652
|
+
* outcome for the same callId is a caller bug, not a policy outcome. A callId that was never
|
|
653
|
+
* pending anywhere in this chain (bound to a deny, or foreign) is still recorded — this is a
|
|
654
|
+
* best-effort runtime cleanup, not a gate; the offline verifier is what flags
|
|
655
|
+
* `outcome_without_allow`/`cross_ref` from the ledger alone.
|
|
656
|
+
*/
|
|
657
|
+
recordOutcome(callId, bodyState, options) {
|
|
658
|
+
if (!this.isV2) {
|
|
659
|
+
throw new Error("recordOutcome requires a schemaVersion: 2 chain (Guard.issue(..., {schemaVersion: 2}))");
|
|
660
|
+
}
|
|
661
|
+
if (!BODY_STATES.has(bodyState)) {
|
|
662
|
+
throw new Error(`unknown bodyState ${JSON.stringify(bodyState)}; expected one of ` +
|
|
663
|
+
`${Array.from(BODY_STATES).sort().join(", ")}`);
|
|
664
|
+
}
|
|
665
|
+
const errorCode = options.errorCode ?? null;
|
|
666
|
+
if (bodyState === BodyState.RAISED) {
|
|
667
|
+
if (typeof errorCode !== "string" || !errorCode) {
|
|
668
|
+
throw new Error("errorCode is required (a non-empty string) when bodyState === BodyState.RAISED");
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
else if (errorCode !== null) {
|
|
672
|
+
throw new Error("errorCode is only permitted when bodyState === BodyState.RAISED");
|
|
673
|
+
}
|
|
674
|
+
const durationMs = options.durationMs;
|
|
675
|
+
if (!Number.isInteger(durationMs) || durationMs < 0) {
|
|
676
|
+
throw new Error(`durationMs must be a non-negative integer; got ${JSON.stringify(durationMs)}`);
|
|
677
|
+
}
|
|
678
|
+
const receipt = options.receipt ?? null;
|
|
679
|
+
if (receipt !== null) {
|
|
680
|
+
const r = receipt;
|
|
681
|
+
const missing = ["type", "ref", "digest"].filter((k) => !(k in r));
|
|
682
|
+
if (missing.length > 0) {
|
|
683
|
+
throw new Error(`receipt is missing ${JSON.stringify(missing)}; expected type/ref/digest`);
|
|
684
|
+
}
|
|
685
|
+
for (const k of ["type", "ref"]) {
|
|
686
|
+
if (typeof r[k] !== "string" || !r[k]) {
|
|
687
|
+
throw new Error(`receipt[${JSON.stringify(k)}] must be a non-empty string`);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
if (typeof r["digest"] !== "string" || !/^[0-9a-f]{64}$/.test(r["digest"])) {
|
|
691
|
+
throw new Error("receipt['digest'] must be a lowercase-hex SHA-256 digest (64 hex characters) — spec section 7");
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
// Exactly one outcome per callId, "enforced at append" (spec section 3): peek first, but
|
|
695
|
+
// only COMMIT the outcomed/pending state AFTER the append actually reaches its commit point
|
|
696
|
+
// — see below. A pre-commit failure here (e.g. a canonicalization failure while hashing this
|
|
697
|
+
// entry) must leave callId exactly as unresolved as before this call, so a corrected retry
|
|
698
|
+
// is still possible and `complete()` does not wrongly believe the call was accounted for.
|
|
699
|
+
if (this.chain.isOutcomed(callId)) {
|
|
700
|
+
throw new DuplicateOutcomeError(`callId ${JSON.stringify(callId)} already has a recorded outcome`);
|
|
701
|
+
}
|
|
702
|
+
const fields = {
|
|
703
|
+
chain_id: this.chainId,
|
|
704
|
+
node: this.node.nodeId,
|
|
705
|
+
call_id: callId,
|
|
706
|
+
body_state: bodyState,
|
|
707
|
+
duration_ms: durationMs,
|
|
708
|
+
};
|
|
709
|
+
if (errorCode !== null)
|
|
710
|
+
fields["error_code"] = errorCode;
|
|
711
|
+
const [ph, preason] = this.paramsCommitment(options.invokedParams);
|
|
712
|
+
if (ph !== null)
|
|
713
|
+
fields["invoked_params_hash"] = ph;
|
|
714
|
+
else if (preason !== null)
|
|
715
|
+
fields["params_hash_reason"] = preason;
|
|
716
|
+
if (receipt !== null)
|
|
717
|
+
fields["receipt"] = { ...receipt };
|
|
718
|
+
let entry;
|
|
719
|
+
try {
|
|
720
|
+
entry = this.append("outcome", fields);
|
|
721
|
+
}
|
|
722
|
+
catch (exc) {
|
|
723
|
+
if (exc instanceof CommittedAuditError) {
|
|
724
|
+
// post-commit: the outcome DID reach the in-memory chain; it is now safe (and correct)
|
|
725
|
+
// to mark it done and drop it from pending before the persistence failure propagates.
|
|
726
|
+
this.chain.markOutcomed(callId);
|
|
727
|
+
this.chain.resolvePending(callId);
|
|
728
|
+
}
|
|
729
|
+
throw exc;
|
|
730
|
+
}
|
|
731
|
+
// success: commit the bookkeeping only now, never before.
|
|
732
|
+
this.chain.markOutcomed(callId);
|
|
733
|
+
this.chain.resolvePending(callId);
|
|
734
|
+
return entry;
|
|
385
735
|
}
|
|
386
736
|
// ---- chain controls ---------------------------------------------------
|
|
737
|
+
/**
|
|
738
|
+
* `{pending_at_kill: [...]}` — the still-open callIds across every node a kill revoked,
|
|
739
|
+
* snapshotted (NOT cleared: a late `recordOutcome` after this kill is still accepted — spec
|
|
740
|
+
* section 1). Only meaningful on v2 chains; call only when `isV2`.
|
|
741
|
+
*/
|
|
742
|
+
pendingAtKill(revokedNodes) {
|
|
743
|
+
const pending = new Set();
|
|
744
|
+
for (const nid of revokedNodes) {
|
|
745
|
+
for (const c of this.chain.pendingFor(nid))
|
|
746
|
+
pending.add(c);
|
|
747
|
+
}
|
|
748
|
+
return { pending_at_kill: Array.from(pending).sort() };
|
|
749
|
+
}
|
|
387
750
|
/** Cascade-revoke a node — by default this one — and its whole subtree. */
|
|
388
751
|
revoke(nodeId) {
|
|
389
752
|
const target = nodeId ?? this.node.nodeId;
|
|
390
753
|
const revoked = this.chain.revoke(target);
|
|
391
|
-
|
|
754
|
+
const extra = this.isV2 ? this.pendingAtKill(revoked) : {};
|
|
755
|
+
this.append("kill", { chain_id: this.chainId, target, revoked, ...extra });
|
|
392
756
|
return revoked;
|
|
393
757
|
}
|
|
394
758
|
/**
|
|
@@ -400,11 +764,13 @@ export class Guard {
|
|
|
400
764
|
*/
|
|
401
765
|
revokeAgent(agentId) {
|
|
402
766
|
const revoked = this.chain.revokeAgent(agentId);
|
|
767
|
+
const extra = this.isV2 ? this.pendingAtKill(revoked) : {};
|
|
403
768
|
this.append("kill", {
|
|
404
769
|
chain_id: this.chainId,
|
|
405
770
|
target: this.node.nodeId,
|
|
406
771
|
agent: agentId,
|
|
407
772
|
revoked,
|
|
773
|
+
...extra,
|
|
408
774
|
});
|
|
409
775
|
return revoked;
|
|
410
776
|
}
|
package/dist/esm/guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"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"}
|