@coderifts/agent-guard 14.1.0 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +3 -1
  2. package/dist/cjs/adapters/crewai.d.ts +88 -0
  3. package/dist/cjs/adapters/crewai.d.ts.map +1 -0
  4. package/dist/cjs/adapters/crewai.js +99 -0
  5. package/dist/cjs/adapters/crewai.js.map +1 -0
  6. package/dist/cjs/adapters/langchain.d.ts +93 -0
  7. package/dist/cjs/adapters/langchain.d.ts.map +1 -0
  8. package/dist/cjs/adapters/langchain.js +99 -0
  9. package/dist/cjs/adapters/langchain.js.map +1 -0
  10. package/dist/cjs/atomic-profile.d.ts +16 -7
  11. package/dist/cjs/atomic-profile.d.ts.map +1 -1
  12. package/dist/cjs/atomic-profile.js +18 -7
  13. package/dist/cjs/atomic-profile.js.map +1 -1
  14. package/dist/cjs/deny-remedy.d.ts +74 -0
  15. package/dist/cjs/deny-remedy.d.ts.map +1 -0
  16. package/dist/cjs/deny-remedy.js +127 -0
  17. package/dist/cjs/deny-remedy.js.map +1 -0
  18. package/dist/cjs/deploy-gate.d.ts +32 -1
  19. package/dist/cjs/deploy-gate.d.ts.map +1 -1
  20. package/dist/cjs/deploy-gate.js +18 -6
  21. package/dist/cjs/deploy-gate.js.map +1 -1
  22. package/dist/cjs/deploy-receipt-token.d.ts +9 -2
  23. package/dist/cjs/deploy-receipt-token.d.ts.map +1 -1
  24. package/dist/cjs/deploy-receipt-token.js +70 -1
  25. package/dist/cjs/deploy-receipt-token.js.map +1 -1
  26. package/dist/cjs/execution-grant.d.ts +100 -0
  27. package/dist/cjs/execution-grant.d.ts.map +1 -1
  28. package/dist/cjs/execution-grant.js +101 -0
  29. package/dist/cjs/execution-grant.js.map +1 -1
  30. package/dist/cjs/guard.d.ts.map +1 -1
  31. package/dist/cjs/guard.js +67 -8
  32. package/dist/cjs/guard.js.map +1 -1
  33. package/dist/cjs/index.d.ts +7 -1
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +23 -3
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/next-agent-step.d.ts +50 -0
  38. package/dist/cjs/next-agent-step.d.ts.map +1 -0
  39. package/dist/cjs/next-agent-step.js +53 -0
  40. package/dist/cjs/next-agent-step.js.map +1 -0
  41. package/dist/cjs/policy.d.ts.map +1 -1
  42. package/dist/cjs/policy.js +1 -1
  43. package/dist/cjs/policy.js.map +1 -1
  44. package/dist/cjs/posture-receipt.d.ts +39 -0
  45. package/dist/cjs/posture-receipt.d.ts.map +1 -1
  46. package/dist/cjs/posture-receipt.js +39 -0
  47. package/dist/cjs/posture-receipt.js.map +1 -1
  48. package/dist/cjs/types.d.ts +39 -0
  49. package/dist/cjs/types.d.ts.map +1 -1
  50. package/dist/cjs/with-coderifts.d.ts +36 -0
  51. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  52. package/dist/cjs/with-coderifts.js +60 -4
  53. package/dist/cjs/with-coderifts.js.map +1 -1
  54. package/dist/esm/adapters/crewai.d.ts +88 -0
  55. package/dist/esm/adapters/crewai.d.ts.map +1 -0
  56. package/dist/esm/adapters/crewai.js +95 -0
  57. package/dist/esm/adapters/crewai.js.map +1 -0
  58. package/dist/esm/adapters/langchain.d.ts +93 -0
  59. package/dist/esm/adapters/langchain.d.ts.map +1 -0
  60. package/dist/esm/adapters/langchain.js +94 -0
  61. package/dist/esm/adapters/langchain.js.map +1 -0
  62. package/dist/esm/atomic-profile.d.ts +16 -7
  63. package/dist/esm/atomic-profile.d.ts.map +1 -1
  64. package/dist/esm/atomic-profile.js +18 -7
  65. package/dist/esm/atomic-profile.js.map +1 -1
  66. package/dist/esm/deny-remedy.d.ts +74 -0
  67. package/dist/esm/deny-remedy.d.ts.map +1 -0
  68. package/dist/esm/deny-remedy.js +122 -0
  69. package/dist/esm/deny-remedy.js.map +1 -0
  70. package/dist/esm/deploy-gate.d.ts +32 -1
  71. package/dist/esm/deploy-gate.d.ts.map +1 -1
  72. package/dist/esm/deploy-gate.js +18 -6
  73. package/dist/esm/deploy-gate.js.map +1 -1
  74. package/dist/esm/deploy-receipt-token.d.ts +9 -2
  75. package/dist/esm/deploy-receipt-token.d.ts.map +1 -1
  76. package/dist/esm/deploy-receipt-token.js +70 -1
  77. package/dist/esm/deploy-receipt-token.js.map +1 -1
  78. package/dist/esm/execution-grant.d.ts +100 -0
  79. package/dist/esm/execution-grant.d.ts.map +1 -1
  80. package/dist/esm/execution-grant.js +98 -0
  81. package/dist/esm/execution-grant.js.map +1 -1
  82. package/dist/esm/guard.d.ts.map +1 -1
  83. package/dist/esm/guard.js +68 -9
  84. package/dist/esm/guard.js.map +1 -1
  85. package/dist/esm/index.d.ts +7 -1
  86. package/dist/esm/index.d.ts.map +1 -1
  87. package/dist/esm/index.js +12 -1
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/next-agent-step.d.ts +50 -0
  90. package/dist/esm/next-agent-step.d.ts.map +1 -0
  91. package/dist/esm/next-agent-step.js +49 -0
  92. package/dist/esm/next-agent-step.js.map +1 -0
  93. package/dist/esm/policy.d.ts.map +1 -1
  94. package/dist/esm/policy.js +1 -1
  95. package/dist/esm/policy.js.map +1 -1
  96. package/dist/esm/posture-receipt.d.ts +39 -0
  97. package/dist/esm/posture-receipt.d.ts.map +1 -1
  98. package/dist/esm/posture-receipt.js +39 -0
  99. package/dist/esm/posture-receipt.js.map +1 -1
  100. package/dist/esm/types.d.ts +39 -0
  101. package/dist/esm/types.d.ts.map +1 -1
  102. package/dist/esm/with-coderifts.d.ts +36 -0
  103. package/dist/esm/with-coderifts.d.ts.map +1 -1
  104. package/dist/esm/with-coderifts.js +58 -3
  105. package/dist/esm/with-coderifts.js.map +1 -1
  106. package/package.json +2 -2
@@ -12,6 +12,7 @@
12
12
  *
13
13
  * No fetch. Same inputs → same output.
14
14
  */
15
+ import { readNextAgentStep } from './next-agent-step.js';
15
16
  import { createPublicKey, verify as cryptoVerify } from 'node:crypto';
16
17
  import { isReceiptExpired } from '@coderifts/sdk';
17
18
  import { computeBodyHash } from './receipt-binding.js';
@@ -32,6 +33,48 @@ function reconstructInput(payload) {
32
33
  }
33
34
  return v1;
34
35
  }
36
+ /**
37
+ * The key-withdrawal half of the published verifier's status taxonomy
38
+ * (`receipt-verifier/verify.js` deriveStatus, RECEIPT_FORMAT.md §7.1),
39
+ * transliterated. Returns the refusal status, or null to continue.
40
+ *
41
+ * Order matters and matches the reference: an unknown status fails closed before
42
+ * anything else is read; `revoked_at` kills the whole key history because the
43
+ * attacker chooses `ts`; `retired_at` only rejects receipts signed at or after
44
+ * it. A revoked key is never valid — UNDECIDABLE is not a softer accept, it
45
+ * reports that a legitimate pre-compromise receipt cannot be told apart from a
46
+ * backdated forgery.
47
+ *
48
+ * Kept as a small local function rather than a shared import: this package ships
49
+ * pure and dependency-light, and the reference core is CommonJS with a CLI and
50
+ * `fs` at module scope. `test/vendor-core.test.js` pins agreement with a
51
+ * byte-identical copy of that core, so the two cannot drift silently.
52
+ */
53
+ function deriveKeyWithdrawalStatus(ts, keyMeta) {
54
+ const KNOWN_STATUSES = ['active', 'retired', 'revoked', null];
55
+ if (!KNOWN_STATUSES.includes(keyMeta.status))
56
+ return 'UNKNOWN_KEY_STATUS';
57
+ if (typeof keyMeta.revoked_at === 'string' && keyMeta.revoked_at.length > 0)
58
+ return 'KEY_REVOKED';
59
+ if (typeof keyMeta.retired_at === 'string' && keyMeta.retired_at.length > 0 && ts) {
60
+ const issued = Date.parse(ts);
61
+ const retired = Date.parse(keyMeta.retired_at);
62
+ if (Number.isFinite(issued) && Number.isFinite(retired) && issued >= retired) {
63
+ return 'KEY_RETIRED_AFTER_SIGNING';
64
+ }
65
+ }
66
+ if (keyMeta.status === 'revoked') {
67
+ const at = keyMeta.compromised_at;
68
+ if (typeof at !== 'string' || at.length === 0)
69
+ return 'REVOKED_KEY_UNDECIDABLE';
70
+ const boundary = Date.parse(at);
71
+ const issued = typeof ts === 'string' ? Date.parse(ts) : NaN;
72
+ if (!Number.isFinite(boundary) || !Number.isFinite(issued))
73
+ return 'REVOKED_KEY_UNDECIDABLE';
74
+ return issued >= boundary ? 'REVOKED_KEY' : 'REVOKED_KEY_UNDECIDABLE';
75
+ }
76
+ return null;
77
+ }
35
78
  function isIssueTimeWithinKeyWindow(ts, keyMeta) {
36
79
  if (!keyMeta || keyMeta.status === 'active')
37
80
  return true;
@@ -56,6 +99,12 @@ function isIssueTimeWithinKeyWindow(ts, keyMeta) {
56
99
  return false;
57
100
  return true;
58
101
  }
102
+ function optionalString(source, field) {
103
+ if (!source || typeof source !== 'object')
104
+ return null;
105
+ const v = source[field];
106
+ return typeof v === 'string' && v.length > 0 ? v : null;
107
+ }
59
108
  function resolveKey(kid, registry, pinnedKeyPem) {
60
109
  if (typeof pinnedKeyPem === 'string' && pinnedKeyPem.trim().length > 0) {
61
110
  try {
@@ -64,6 +113,8 @@ function resolveKey(kid, registry, pinnedKeyPem) {
64
113
  status: 'active',
65
114
  valid_from: null,
66
115
  retired_at: null,
116
+ revoked_at: null,
117
+ compromised_at: null,
67
118
  };
68
119
  }
69
120
  catch {
@@ -79,9 +130,11 @@ function resolveKey(kid, registry, pinnedKeyPem) {
79
130
  try {
80
131
  return {
81
132
  publicKey: createPublicKey(entry.public_key_pem),
82
- status: entry.status === 'retired' ? 'retired' : 'active',
133
+ status: typeof entry.status === 'string' ? entry.status : null,
83
134
  valid_from: entry.valid_from || null,
84
135
  retired_at: entry.retired_at || null,
136
+ revoked_at: optionalString(entry, 'revoked_at'),
137
+ compromised_at: optionalString(entry, 'compromised_at'),
85
138
  };
86
139
  }
87
140
  catch {
@@ -114,6 +167,11 @@ function viewFromEnvelope(envelope, payload, currently_authorized) {
114
167
  : (typeof payload.fp === 'string' ? payload.fp : undefined),
115
168
  body_hash: typeof payload.bh === 'string' ? payload.bh : undefined,
116
169
  target_id: envelope.target_id == null ? undefined : String(envelope.target_id),
170
+ // Read from the envelope the caller supplied. On the currently_authorized path the
171
+ // body hash has already bound it; on the expired / retired-key paths the signature
172
+ // was authentic too. Every path that did NOT authenticate returns through fail(),
173
+ // which sets view: null — so this field cannot carry an unsigned step.
174
+ next_agent_step: readNextAgentStep(envelope),
117
175
  };
118
176
  }
119
177
  /**
@@ -164,6 +222,17 @@ export function verifyDeployReceiptToken(input, _intended = {}, nowMs) {
164
222
  return fail('INVALID_SIGNATURE', 'invalid_signature', { payload, authz_reason: 'delimiter_in_field' });
165
223
  }
166
224
  }
225
+ // A key the registry has withdrawn is judged BEFORE any authorization path.
226
+ // The signature verified — that is precisely the problem a withdrawal exists
227
+ // to answer, and no timestamp on a receipt the attacker minted may rehabilitate it.
228
+ const withdrawn = deriveKeyWithdrawalStatus(typeof payload.ts === 'string' ? payload.ts : undefined, resolved);
229
+ if (withdrawn) {
230
+ return fail(withdrawn, withdrawn === 'UNKNOWN_KEY_STATUS' ? 'unknown_key_status' : 'revoked_key', {
231
+ payload,
232
+ authz_reason: withdrawn.toLowerCase(),
233
+ key_status: withdrawn === 'UNKNOWN_KEY_STATUS' ? 'unknown' : 'revoked',
234
+ });
235
+ }
167
236
  if (resolved.status === 'retired') {
168
237
  if (!isIssueTimeWithinKeyWindow(typeof payload.ts === 'string' ? payload.ts : undefined, resolved)) {
169
238
  return fail('INVALID_SIGNATURE', 'invalid_signature', { payload, authz_reason: 'retired_key_outside_window' });
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-receipt-token.js","sourceRoot":"","sources":["../../src/deploy-receipt-token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-receipt-token.js","sourceRoot":"","sources":["../../src/deploy-receipt-token.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,110 @@ export type ExecutionGrantConfig = {
13
13
  }) => string | Promise<string>;
14
14
  /** Default 'v1' this wave. ATOMIC construction requires 'v2'. */
15
15
  grantVersion?: 'v1' | 'v2';
16
+ /**
17
+ * The V2 binding a grant request should carry (AUDIT P1 / RES-1).
18
+ *
19
+ * MEASURED before adding: the guard's authorize request sent only
20
+ * `include_execution_grant` and `state_nonce`, and the SDK's
21
+ * PreflightChangeSetRequest declares NEITHER these fields NOR `state_nonce` —
22
+ * the guard builds its own request literal and posts it as `unknown`, so the
23
+ * wire shape is guard-local. Adding them here is therefore a guard-side
24
+ * config surface, not a claim that the SDK type endorses them.
25
+ *
26
+ * Every one is OPTIONAL and every one is sent only when set. A deployment
27
+ * that does not configure a field gets it NAMED in the observation's
28
+ * `v2_fields_absent`, never a placeholder on the wire.
29
+ *
30
+ * ── DEPRECATED ALIASES (1198) ────────────────────────────────────────────
31
+ * The canonical home is the TOP LEVEL of the withCodeRifts input, where
32
+ * executorId/adapterId/targetUri already lived before this config existed
33
+ * (with-coderifts.ts:394-396) and where the ATOMIC construction check reads
34
+ * them. Setting them here still works and still reaches the wire — but a
35
+ * value here that DISAGREES with the top level is an initialization error,
36
+ * because the two used to feed different halves of the system with nothing
37
+ * reconciling them. See resolveV2Fields.
38
+ *
39
+ * Unreleased when this was written — added after the 14.1.0 release and never
40
+ * published — so no adopter depends on the nested spelling.
41
+ */
42
+ executorId?: string;
43
+ adapterId?: string;
44
+ targetUri?: string;
45
+ tenantId?: string;
46
+ policyHash?: string;
47
+ audienceHash?: string;
16
48
  };
49
+ /**
50
+ * THE CANONICAL V2 FIELD SET (roadmap 1198).
51
+ *
52
+ * MEASURED SPLIT-BRAIN, which is what this exists to end:
53
+ * · executorId / adapterId / targetUri lived in BOTH the top-level input
54
+ * (with-coderifts.ts:394-396 → the ATOMIC construction check and the
55
+ * posture tuple) and the nested executionGrant config (→ the authorize
56
+ * request). Nothing compared them, so a configuration could bind the
57
+ * profile to one executor and put another — or none — on the wire.
58
+ * · policyHash had a READER and no writer: atomic-profile.ts:247 passes
59
+ * `input.policyHash` to the posture verifier and with-coderifts.ts:911-915
60
+ * never forwarded it, so that binding was permanently undefined.
61
+ * · tenantId / audienceHash existed on the wire side only.
62
+ *
63
+ * This reads both spellings, REFUSES a disagreement, and returns one set that
64
+ * the wire and the profile both use. A field neither side supplies stays
65
+ * genuinely absent — the case 6bca531's named-absent was written for, and now
66
+ * the only case it covers.
67
+ */
68
+ export declare const V2_FIELD_KEYS: readonly ["executorId", "adapterId", "targetUri", "tenantId", "policyHash", "audienceHash"];
69
+ export type V2FieldKey = typeof V2_FIELD_KEYS[number];
70
+ export type V2Fields = Partial<Record<V2FieldKey, string>>;
71
+ /**
72
+ * Resolve the canonical set from an input carrying either spelling.
73
+ *
74
+ * THROWS on disagreement. Preferring one silently is what produced the split:
75
+ * a caller who set both would have one quietly ignored, with no way to see
76
+ * which one survived.
77
+ */
78
+ export declare function resolveV2Fields(input?: {
79
+ executorId?: unknown;
80
+ adapterId?: unknown;
81
+ targetUri?: unknown;
82
+ tenantId?: unknown;
83
+ policyHash?: unknown;
84
+ audienceHash?: unknown;
85
+ executionGrant?: ExecutionGrantConfig | null;
86
+ } | null): V2Fields;
87
+ /** The V2 request fields, in the wire spelling. One list, used to send and to report. */
88
+ export declare const V2_WIRE_FIELDS: readonly [readonly ["executor_id", "executorId"], readonly ["adapter_id", "adapterId"], readonly ["target_uri", "targetUri"], readonly ["tenant_id", "tenantId"], readonly ["policy_hash", "policyHash"], readonly ["audience_hash", "audienceHash"]];
89
+ export type V2WireResult = {
90
+ /** Wire-name -> value, for the fields this deployment actually configured. */
91
+ fields: Record<string, string>;
92
+ /** Wire-names this deployment did NOT configure. Named, never placeheld. */
93
+ absent: string[];
94
+ };
95
+ /**
96
+ * Build the V2 field set for an authorize request.
97
+ *
98
+ * V1 sends nothing here: the fields describe a v2 binding, and attaching them
99
+ * to a v1 request would assert a shape the grant does not have.
100
+ *
101
+ * A value that is not a non-empty string is ABSENT, not empty-string-sent. An
102
+ * empty executor_id on the wire is indistinguishable from a real one that
103
+ * happens to be blank, and the server would bind it.
104
+ */
105
+ export declare function v2WireFields(config: {
106
+ executionGrant?: ExecutionGrantConfig;
107
+ } | null | undefined): V2WireResult;
17
108
  export type ExecutionGrantObservation = {
18
109
  requested: boolean;
19
110
  arrived: boolean;
111
+ /** Which grant shape was requested. */
112
+ grant_version?: 'v1' | 'v2';
113
+ /**
114
+ * The V2 binding this request actually carried, and what it could not.
115
+ * `v2_fields_absent` is the honest half: a field the deployment never
116
+ * configured is reported here rather than sent as an empty placeholder.
117
+ */
118
+ v2_fields_sent?: string[];
119
+ v2_fields_absent?: string[];
20
120
  };
21
121
  export type ExecutionGrantCallContext = {
22
122
  execution_grant: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-grant.d.ts","sourceRoot":"","sources":["../../src/execution-grant.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;KACf,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,iEAAiE;IACjE,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,oBAAoB,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErH;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASjE;AAED,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAM9D;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,oBAAoB,CAAA;CAAE,EACjD,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EACpE,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAevD"}
1
+ {"version":3,"file":"execution-grant.d.ts","sourceRoot":"","sources":["../../src/execution-grant.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;KACf,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,iEAAiE;IACjE,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,6FAEf,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AACtD,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC9C,GAAG,IAAI,GAAG,QAAQ,CAiClB;AAED,yFAAyF;AACzF,eAAO,MAAM,cAAc,uPAOhB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG;IACzB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,oBAAoB,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACnE,YAAY,CAiBd;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,oBAAoB,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErH;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASjE;AAED,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAM9D;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,oBAAoB,CAAA;CAAE,EACjD,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EACpE,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAevD"}
@@ -4,6 +4,104 @@
4
4
  * Grant request is per guardToolCall invocation (local vars). The token is not
5
5
  * a verdict input and is not folded into any fingerprint preimage.
6
6
  */
7
+ /**
8
+ * THE CANONICAL V2 FIELD SET (roadmap 1198).
9
+ *
10
+ * MEASURED SPLIT-BRAIN, which is what this exists to end:
11
+ * · executorId / adapterId / targetUri lived in BOTH the top-level input
12
+ * (with-coderifts.ts:394-396 → the ATOMIC construction check and the
13
+ * posture tuple) and the nested executionGrant config (→ the authorize
14
+ * request). Nothing compared them, so a configuration could bind the
15
+ * profile to one executor and put another — or none — on the wire.
16
+ * · policyHash had a READER and no writer: atomic-profile.ts:247 passes
17
+ * `input.policyHash` to the posture verifier and with-coderifts.ts:911-915
18
+ * never forwarded it, so that binding was permanently undefined.
19
+ * · tenantId / audienceHash existed on the wire side only.
20
+ *
21
+ * This reads both spellings, REFUSES a disagreement, and returns one set that
22
+ * the wire and the profile both use. A field neither side supplies stays
23
+ * genuinely absent — the case 6bca531's named-absent was written for, and now
24
+ * the only case it covers.
25
+ */
26
+ export const V2_FIELD_KEYS = Object.freeze([
27
+ 'executorId', 'adapterId', 'targetUri', 'tenantId', 'policyHash', 'audienceHash',
28
+ ]);
29
+ /**
30
+ * Resolve the canonical set from an input carrying either spelling.
31
+ *
32
+ * THROWS on disagreement. Preferring one silently is what produced the split:
33
+ * a caller who set both would have one quietly ignored, with no way to see
34
+ * which one survived.
35
+ */
36
+ export function resolveV2Fields(input) {
37
+ const top = (input || {});
38
+ const nested = ((input && input.executionGrant) || {});
39
+ const out = {};
40
+ const conflicts = [];
41
+ for (const key of V2_FIELD_KEYS) {
42
+ const t = typeof top[key] === 'string' && top[key].length > 0
43
+ ? top[key] : undefined;
44
+ const n = typeof nested[key] === 'string' && nested[key].length > 0
45
+ ? nested[key] : undefined;
46
+ if (t !== undefined && n !== undefined && t !== n) {
47
+ conflicts.push(` ${key}: top-level ${JSON.stringify(t)} vs executionGrant.${key} ${JSON.stringify(n)}`);
48
+ continue;
49
+ }
50
+ const v = t !== undefined ? t : n;
51
+ if (v !== undefined)
52
+ out[key] = v;
53
+ }
54
+ if (conflicts.length > 0) {
55
+ const err = new Error('withCodeRifts: the V2 identity fields are configured in two places and they disagree.\n'
56
+ + `${conflicts.join('\n')}\n\n`
57
+ + 'These feed DIFFERENT halves of the system — the top level binds the ATOMIC construction '
58
+ + 'check and the posture receipt, the executionGrant copy goes on the authorize request — so '
59
+ + 'a disagreement builds a grant against one identity and verifies against another. Set each '
60
+ + 'field ONCE, at the top level; the executionGrant spelling is a deprecated alias.');
61
+ err.code = 'V2_FIELDS_CONFLICT';
62
+ throw err;
63
+ }
64
+ return out;
65
+ }
66
+ /** The V2 request fields, in the wire spelling. One list, used to send and to report. */
67
+ export const V2_WIRE_FIELDS = Object.freeze([
68
+ ['executor_id', 'executorId'],
69
+ ['adapter_id', 'adapterId'],
70
+ ['target_uri', 'targetUri'],
71
+ ['tenant_id', 'tenantId'],
72
+ ['policy_hash', 'policyHash'],
73
+ ['audience_hash', 'audienceHash'],
74
+ ]);
75
+ /**
76
+ * Build the V2 field set for an authorize request.
77
+ *
78
+ * V1 sends nothing here: the fields describe a v2 binding, and attaching them
79
+ * to a v1 request would assert a shape the grant does not have.
80
+ *
81
+ * A value that is not a non-empty string is ABSENT, not empty-string-sent. An
82
+ * empty executor_id on the wire is indistinguishable from a real one that
83
+ * happens to be blank, and the server would bind it.
84
+ */
85
+ export function v2WireFields(config) {
86
+ const g = config && config.executionGrant;
87
+ const fields = {};
88
+ const absent = [];
89
+ if (!g || g.grantVersion !== 'v2') {
90
+ return { fields, absent: V2_WIRE_FIELDS.map(([wire]) => wire) };
91
+ }
92
+ // ONE SOURCE. Reading `config.executionGrant` directly here was half of the
93
+ // 1198 split: the profile read the top level and the wire read the nested
94
+ // copy, and a value set only at the top level never left the process.
95
+ const resolved = resolveV2Fields(config);
96
+ for (const [wire, key] of V2_WIRE_FIELDS) {
97
+ const v = resolved[key];
98
+ if (typeof v === 'string' && v.length > 0)
99
+ fields[wire] = v;
100
+ else
101
+ absent.push(wire);
102
+ }
103
+ return { fields, absent };
104
+ }
7
105
  export function isExecutionGrantEnabled(config) {
8
106
  return !!(config && config.executionGrant && config.executionGrant.enabled === true);
9
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"execution-grant.js","sourceRoot":"","sources":["../../src/execution-grant.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,MAAM,UAAU,uBAAuB,CAAC,MAAoE;IAC1G,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAiB;IACvD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,CAAC,GAAI,QAA0C,CAAC,eAAe,CAAC;IACtE,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAkB;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAsB,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACjF,MAAM,EAAE,GAAG,MAAM,CAAE,CAAoB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAAoD,CAAC;IAC/D,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAiD,EACjD,IAAoE,EACpE,SAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC;IAClF,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;YACzB,UAAU,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;YACzE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC,CAAC;QACH,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"execution-grant.js","sourceRoot":"","sources":["../../src/execution-grant.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc;CACxE,CAAC,CAAC;AAKZ;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAQxB;IACN,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAA4B,CAAC;IAClF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAK,GAAG,CAAC,GAAG,CAAY,CAAC,MAAM,GAAG,CAAC;YACvE,CAAC,CAAE,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACrC,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAK,MAAM,CAAC,GAAG,CAAY,CAAC,MAAM,GAAG,CAAC;YAC7E,CAAC,CAAE,MAAM,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAExC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzG,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,yFAAyF;cACvF,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;cAC7B,0FAA0F;cAC1F,4FAA4F;cAC5F,4FAA4F;cAC5F,kFAAkF,CACrF,CAAC;QACD,GAAgC,CAAC,IAAI,GAAG,oBAAoB,CAAC;QAC9D,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,CAAC,aAAa,EAAE,YAAY,CAAC;IAC7B,CAAC,YAAY,EAAE,WAAW,CAAC;IAC3B,CAAC,YAAY,EAAE,WAAW,CAAC;IAC3B,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,aAAa,EAAE,YAAY,CAAC;IAC7B,CAAC,eAAe,EAAE,cAAc,CAAC;CACzB,CAAC,CAAC;AASZ;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAoE;IAEpE,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IAClE,CAAC;IACD,4EAA4E;IAC5E,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAA+C,CAAC,CAAC;IAClF,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAiB,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACvD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAoBD,MAAM,UAAU,uBAAuB,CAAC,MAAoE;IAC1G,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAiB;IACvD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,CAAC,GAAI,QAA0C,CAAC,eAAe,CAAC;IACtE,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAkB;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAsB,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACjF,MAAM,EAAE,GAAG,MAAM,CAAE,CAAoB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAAoD,CAAC;IAC/D,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAiD,EACjD,IAAoE,EACpE,SAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC;IAClF,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;YACzB,UAAU,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;YACzE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC,CAAC;QACH,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -1 +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;AAYpB,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,wBAAwB,CAAC;AAkehC;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,IAAI,EAAE,kBAAkB,EACxB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,oBAAoB,GAAG,2BAA2B,GAC/D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAqc1B"}
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;AAYpB,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,wBAAwB,CAAC;AAugBhC;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,IAAI,EAAE,kBAAkB,EACxB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,oBAAoB,GAAG,2BAA2B,GAC/D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAwe1B"}
package/dist/esm/guard.js CHANGED
@@ -22,7 +22,9 @@ import { buildCasAttestation, evaluateCasEvidence, isExecuteIfUnchangedOutcome,
22
22
  import { deliverMonitoring, monitoringDeliveryFailClosed, } from './monitoring-delivery.js';
23
23
  import { tryIssueMonitoringAttestation } from './monitoring-attestation.js';
24
24
  import { observePolicyPresence } from './policy.js';
25
- import { isExecutionGrantEnabled, isSignerUnavailableError, readExecutionGrantToken, resolveStateNonceForCall, } from './execution-grant.js';
25
+ import { buildDenyRemedy, denyErrorForReason } from './deny-remedy.js';
26
+ import { readNextAgentStep } from './next-agent-step.js';
27
+ import { isExecutionGrantEnabled, isSignerUnavailableError, v2WireFields, readExecutionGrantToken, resolveStateNonceForCall, } from './execution-grant.js';
26
28
  // Per-config breaker state (time-window; not consecutive).
27
29
  const breakers = new WeakMap();
28
30
  const nowMs = () => Date.now();
@@ -219,12 +221,43 @@ function coverageSnap(config) {
219
221
  function coverageOutcomeFieldsFrom(s) {
220
222
  return s.coverageObserved ? { coverage_observed: s.coverageObserved } : {};
221
223
  }
222
- function blocked(config, verdict, preflighted, freshness, conditional_write, monitoring_delivery, monitoring_attestation, grantObs) {
224
+ /**
225
+ * Every refusal the guard reaches before the factory runs. `call` is optional so
226
+ * the refusal does not depend on it: without it the outcome is exactly what it
227
+ * was before the remedy existed; with it the outcome additionally names the
228
+ * next step.
229
+ *
230
+ * The remedy is attached AFTER the verdict. No branch below reads it, and none
231
+ * can turn executed:false into anything else.
232
+ */
233
+ function blocked(config, verdict, preflighted, freshness, conditional_write, monitoring_delivery, monitoring_attestation, grantObs, call) {
223
234
  const commit_observation = {
224
235
  status: 'not_observed', observed_at: iso(), host_attestation: 'absent',
225
236
  };
226
237
  const base = { executionAttempted: false, executed: false, enforced: false, verdict, preflighted };
227
238
  const cov = coverageSnap(config);
239
+ // Only an UNAVAILABLE verdict carries a cause. A BLOCK or REQUEST_APPROVAL is a
240
+ // policy decision on a grant that verified fine — obtaining another grant is not
241
+ // the next step there, so those refusals carry no remedy.
242
+ const cause = 'cause' in verdict ? verdict.cause : null;
243
+ // I-1288f — the DECISION's step, from the envelope, and ONLY when this run verified
244
+ // the receipt. A BLOCK on an unverified envelope is still a BLOCK (the verdict does
245
+ // not soften), but the remediation text on it is unauthenticated: the response came
246
+ // over the network and nothing here bound it. SKIPPED and UNAVAILABLE verdicts carry
247
+ // no envelope at all, so `'envelope' in verdict` is the second guard.
248
+ const nextStep = ('envelope' in verdict && 'receiptVerified' in verdict
249
+ && verdict.receiptVerified === true)
250
+ ? readNextAgentStep(verdict.envelope)
251
+ : null;
252
+ const remedy = call
253
+ ? buildDenyRemedy({
254
+ error: denyErrorForReason(cause),
255
+ target: call.toolName || null,
256
+ // The guard's own input fingerprint, already sha256:<hex>.
257
+ fingerprint: fingerprint(call),
258
+ observed: { cause, resolution: 'resolution' in verdict ? verdict.resolution : null },
259
+ })
260
+ : null;
228
261
  const out = {
229
262
  ...base,
230
263
  proof: buildExecutionProof({
@@ -242,6 +275,8 @@ function blocked(config, verdict, preflighted, freshness, conditional_write, mon
242
275
  ...(monitoring_attestation ? { monitoring_attestation } : {}),
243
276
  ...coverageOutcomeFieldsFrom(cov),
244
277
  ...(grantObs ? { execution_grant: grantObs } : {}),
278
+ ...(remedy ? { remedy } : {}),
279
+ ...(nextStep ? { next_step: nextStep } : {}),
245
280
  };
246
281
  return attachPolicyPresence(out, config);
247
282
  }
@@ -495,7 +530,7 @@ export async function guardToolCall(call, executeFactory, config, callContext) {
495
530
  const v = unavailableVerdict({ cause: 'MISSING_ARTIFACT_CONTENT', failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
496
531
  const { basis } = freshnessFor(config, redacted, fctx, detection.artifacts);
497
532
  const { basis: cw } = conditionalWriteFor(config, redacted, cwctx, detection.artifacts);
498
- return blocked(config, v, false, basis, cw);
533
+ return blocked(config, v, false, basis, cw, undefined, undefined, undefined, redacted);
499
534
  }
500
535
  // config validation: lkg policy requires an LkgStore.
501
536
  if (failPolicy === 'lkg' && !config.lkg) {
@@ -527,6 +562,30 @@ export async function guardToolCall(call, executeFactory, config, callContext) {
527
562
  request.include_execution_grant = true;
528
563
  if (nonceRes.nonce)
529
564
  request.state_nonce = nonceRes.nonce;
565
+ // ── V2 WIRE FIELDS (AUDIT P1 / RES-1) ────────────────────────────────────
566
+ // The builder used to send include_execution_grant and state_nonce and
567
+ // nothing else, so the V2 binding the config demanded never reached the
568
+ // wire. Each configured field is attached; each unconfigured one is NAMED
569
+ // in the observation rather than sent as an empty placeholder, which the
570
+ // server would otherwise bind as a real value.
571
+ const wire = v2WireFields(config);
572
+ if (config.executionGrant?.grantVersion === 'v2') {
573
+ request.grant_version = 'v2';
574
+ for (const [k, v] of Object.entries(wire.fields))
575
+ request[k] = v;
576
+ }
577
+ // Recorded ONLY for v2. On v1 these fields are not "absent" — they are not
578
+ // part of that grant shape at all, and stamping six absences onto every v1
579
+ // observation would report a gap where there is no field. It also keeps the
580
+ // v1 observation byte-identical for the callers already pinning it.
581
+ if (config.executionGrant?.grantVersion === 'v2') {
582
+ grantObs = {
583
+ ...grantObs,
584
+ grant_version: 'v2',
585
+ v2_fields_sent: Object.keys(wire.fields),
586
+ v2_fields_absent: wire.absent,
587
+ };
588
+ }
530
589
  }
531
590
  // request-attributable payload cap => PAYLOAD_TOO_LARGE (integrity) => closed.
532
591
  const cap = config.maxPayloadBytes ?? 1_000_000;
@@ -545,7 +604,7 @@ export async function guardToolCall(call, executeFactory, config, callContext) {
545
604
  if (pf.integrity) {
546
605
  emit(config, { type: 'breaker_tripped', at: iso(), cause: pf.cause });
547
606
  const v = unavailableVerdict({ cause: pf.cause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
548
- return blocked(config, v, false, basis, cw, undefined, undefined, grantObs);
607
+ return blocked(config, v, false, basis, cw, undefined, undefined, grantObs, redacted);
549
608
  }
550
609
  // availability
551
610
  const availCause = pf.cause;
@@ -555,7 +614,7 @@ export async function guardToolCall(call, executeFactory, config, callContext) {
555
614
  if (breakerTripped(config))
556
615
  emit(config, { type: 'breaker_tripped', at: iso(), cause: availCause });
557
616
  const v = unavailableVerdict({ cause: availCause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
558
- return blocked(config, v, false, basis, cw, undefined, undefined, grantObs);
617
+ return blocked(config, v, false, basis, cw, undefined, undefined, grantObs, redacted);
559
618
  }
560
619
  if (failPolicy === 'open' && !breakerTripped(config)) {
561
620
  emit(config, { type: 'preflight_unavailable', at: iso(), cause: availCause, action: 'CONTINUE' });
@@ -574,7 +633,7 @@ export async function guardToolCall(call, executeFactory, config, callContext) {
574
633
  if (breakerTripped(config))
575
634
  emit(config, { type: 'breaker_tripped', at: iso(), cause: availCause });
576
635
  const v = unavailableVerdict({ cause: availCause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
577
- return blocked(config, v, false, basis, cw, undefined, undefined, grantObs);
636
+ return blocked(config, v, false, basis, cw, undefined, undefined, grantObs, redacted);
578
637
  }
579
638
  // We have a response. Read the decision (envelope-first) and verify the receipt.
580
639
  const rd = readDecision(pf.response);
@@ -635,8 +694,8 @@ export async function guardToolCall(call, executeFactory, config, callContext) {
635
694
  const { basis } = freshnessFor(config, redacted, fctx, detection.artifacts);
636
695
  const { basis: cw } = conditionalWriteFor(config, redacted, cwctx, detection.artifacts);
637
696
  return gate.decision === 'BLOCK'
638
- ? blocked(config, { kind: 'BLOCK', action: 'STOP', envelope, receiptVerified }, true, basis, cw, undefined, undefined, grantObs)
639
- : blocked(config, { kind: 'APPROVAL', action: 'REQUEST_APPROVAL', envelope, receiptVerified }, true, basis, cw, undefined, undefined, grantObs);
697
+ ? blocked(config, { kind: 'BLOCK', action: 'STOP', envelope, receiptVerified }, true, basis, cw, undefined, undefined, grantObs, redacted)
698
+ : blocked(config, { kind: 'APPROVAL', action: 'REQUEST_APPROVAL', envelope, receiptVerified }, true, basis, cw, undefined, undefined, grantObs, redacted);
640
699
  }
641
700
  const kind = gate.kind; // 'ALLOW' | 'MONITOR' — allow-class, safe, non-degraded, artifact-bound.
642
701
  // Native grant: allow-class authorize that requested a grant must RECEIVE one.
@@ -824,7 +883,7 @@ function closedIntegrity(config, cause, failPolicy, fctx, cwctx, redacted, arts,
824
883
  const v = unavailableVerdict({ cause, failPolicy, resolution: 'CLOSED', action: 'STOP' }, count);
825
884
  const { basis } = freshnessFor(config, redacted, fctx, arts);
826
885
  const { basis: cw } = conditionalWriteFor(config, redacted, cwctx, arts);
827
- return blocked(config, v, false, basis, cw, monitoring_delivery, monitoring_attestation, grantObs);
886
+ return blocked(config, v, false, basis, cw, monitoring_delivery, monitoring_attestation, grantObs, redacted);
828
887
  }
829
888
  function isExpired(envelope) {
830
889
  const exp = envelope.expires_at;