attenu-guard 0.3.1 → 0.5.0

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