@agentguard-run/spend 0.1.9 → 0.2.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 (68) hide show
  1. package/PATENTS.md +37 -0
  2. package/dist/adapters/postgres-store.d.ts +8 -2
  3. package/dist/adapters/postgres-store.d.ts.map +1 -1
  4. package/dist/adapters/postgres-store.js +58 -6
  5. package/dist/adapters/postgres-store.js.map +1 -1
  6. package/dist/adapters/redis-store.d.ts +10 -2
  7. package/dist/adapters/redis-store.d.ts.map +1 -1
  8. package/dist/adapters/redis-store.js +90 -24
  9. package/dist/adapters/redis-store.js.map +1 -1
  10. package/dist/cli/demo.d.ts +2 -2
  11. package/dist/cli/demo.js +4 -4
  12. package/dist/cli/demo.js.map +1 -1
  13. package/dist/cli/doctor.d.ts +1 -1
  14. package/dist/cli/doctor.js +2 -2
  15. package/dist/cli/doctor.js.map +1 -1
  16. package/dist/cli/explain.d.ts +1 -1
  17. package/dist/cli/explain.js +1 -1
  18. package/dist/cli/init.d.ts +1 -1
  19. package/dist/cli/init.js +1 -1
  20. package/dist/cli/main.d.ts.map +1 -1
  21. package/dist/cli/main.js +7 -1
  22. package/dist/cli/main.js.map +1 -1
  23. package/dist/cli/serve.d.ts +1 -1
  24. package/dist/cli/serve.d.ts.map +1 -1
  25. package/dist/cli/serve.js +19 -14
  26. package/dist/cli/serve.js.map +1 -1
  27. package/dist/cli/telemetry.d.ts +2 -0
  28. package/dist/cli/telemetry.d.ts.map +1 -0
  29. package/dist/cli/telemetry.js +37 -0
  30. package/dist/cli/telemetry.js.map +1 -0
  31. package/dist/cli/verify.d.ts +2 -2
  32. package/dist/cli/verify.d.ts.map +1 -1
  33. package/dist/cli/verify.js +53 -36
  34. package/dist/cli/verify.js.map +1 -1
  35. package/dist/cost-table.d.ts +2 -2
  36. package/dist/cost-table.d.ts.map +1 -1
  37. package/dist/cost-table.js +23 -3
  38. package/dist/cost-table.js.map +1 -1
  39. package/dist/decision-log.d.ts +5 -4
  40. package/dist/decision-log.d.ts.map +1 -1
  41. package/dist/decision-log.js +40 -15
  42. package/dist/decision-log.js.map +1 -1
  43. package/dist/i18n.js +3 -3
  44. package/dist/i18n.js.map +1 -1
  45. package/dist/index.d.ts +5 -4
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +13 -6
  48. package/dist/index.js.map +1 -1
  49. package/dist/policy.d.ts +8 -21
  50. package/dist/policy.d.ts.map +1 -1
  51. package/dist/policy.js +226 -109
  52. package/dist/policy.js.map +1 -1
  53. package/dist/spend-guard.d.ts +6 -2
  54. package/dist/spend-guard.d.ts.map +1 -1
  55. package/dist/spend-guard.js +95 -26
  56. package/dist/spend-guard.js.map +1 -1
  57. package/dist/store-memory.d.ts +8 -2
  58. package/dist/store-memory.d.ts.map +1 -1
  59. package/dist/store-memory.js +34 -2
  60. package/dist/store-memory.js.map +1 -1
  61. package/dist/telemetry.d.ts +11 -0
  62. package/dist/telemetry.d.ts.map +1 -0
  63. package/dist/telemetry.js +149 -0
  64. package/dist/telemetry.js.map +1 -0
  65. package/dist/types.d.ts +23 -4
  66. package/dist/types.d.ts.map +1 -1
  67. package/dist/types.js +2 -2
  68. package/package.json +22 -8
package/dist/policy.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * AgentGuard(TM) Spend Policy evaluation engine
3
+ * AgentGuard(TM) Spend: Policy evaluation engine
4
4
  *
5
5
  * Evaluates a SpendPolicy against a CallContext and returns a SpendDecision.
6
6
  * Pure function over inputs and the spend store; no network calls, no provider
@@ -8,36 +8,47 @@
8
8
  *
9
9
  * Patent notice: Protected by U.S. patent-pending technology
10
10
  * (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
11
- * and an additional application filed May 2026).
11
+ * 64/071,781; 64/071,789).
12
12
  */
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports._testing = void 0;
15
15
  exports.buildScopeKey = buildScopeKey;
16
16
  exports.evaluatePolicy = evaluatePolicy;
17
+ exports.adjustPolicyWindowSpend = adjustPolicyWindowSpend;
17
18
  const crypto_1 = require("crypto");
18
19
  const cost_table_1 = require("./cost-table");
20
+ const decision_log_1 = require("./decision-log");
19
21
  /**
20
- * Build a deterministic scope key from a SpendScope. The key identifies a
21
- * single (tenant, user, team, agent, provider) combination for storing window
22
- * spend totals.
22
+ * Build a collision-resistant storage key from a SpendScope. The hash is over
23
+ * canonical JSON, so attacker-controlled separators in tenant/user IDs cannot
24
+ * collide with another scope shape.
23
25
  */
24
26
  function buildScopeKey(scope) {
25
- const parts = [
26
- `tenant=${scope.tenantId}`,
27
- scope.userId ? `user=${scope.userId}` : '',
28
- scope.teamId ? `team=${scope.teamId}` : '',
29
- scope.agentId ? `agent=${scope.agentId}` : '',
30
- scope.taskId ? `task=${scope.taskId}` : '',
31
- scope.provider ? `prov=${scope.provider}` : '',
32
- ].filter(Boolean);
33
- return parts.join('|');
27
+ return `scope:v1:${(0, decision_log_1.sha256Hex)((0, decision_log_1.canonicalJson)(normalizeScope(scope)))}`;
28
+ }
29
+ function normalizeScope(scope) {
30
+ const out = { tenantId: scope.tenantId };
31
+ if (scope.userId)
32
+ out.userId = scope.userId;
33
+ if (scope.teamId)
34
+ out.teamId = scope.teamId;
35
+ if (scope.agentId)
36
+ out.agentId = scope.agentId;
37
+ if (scope.taskId)
38
+ out.taskId = scope.taskId;
39
+ if (scope.provider)
40
+ out.provider = scope.provider;
41
+ return out;
42
+ }
43
+ function callScopeWithProvider(call) {
44
+ return {
45
+ ...call.scope,
46
+ provider: call.scope.provider ?? call.provider,
47
+ };
34
48
  }
35
49
  /**
36
- * Returns true if the cap's scope shape is satisfied by the call's scope.
37
- *
38
- * A cap matches if every non-empty field in the cap's policy scope is present
39
- * AND equal in the call's scope. Empty fields in the policy scope are
40
- * wildcards (match anything).
50
+ * Returns true if the policy scope shape is satisfied by the call scope.
51
+ * Empty fields in the policy scope are wildcards.
41
52
  */
42
53
  function policyMatchesCall(policyScope, callScope) {
43
54
  if (policyScope.tenantId !== callScope.tenantId)
@@ -54,10 +65,6 @@ function policyMatchesCall(policyScope, callScope) {
54
65
  return false;
55
66
  return true;
56
67
  }
57
- /**
58
- * Restrictiveness order: block > downgrade > shadow > allow. Used to combine
59
- * actions when multiple caps trigger simultaneously.
60
- */
61
68
  const ACTION_RANK = {
62
69
  block: 3,
63
70
  downgrade: 2,
@@ -67,25 +74,15 @@ const ACTION_RANK = {
67
74
  function mostRestrictive(a, b) {
68
75
  return ACTION_RANK[a] >= ACTION_RANK[b] ? a : b;
69
76
  }
70
- /**
71
- * Evaluate the policy against the call. Returns a SpendDecision describing the
72
- * action to take, the cap that triggered it (if any), and the projected vs
73
- * actual spend in the relevant window.
74
- *
75
- * Side effect: on 'allow' and 'downgrade', this function INCREMENTS the window
76
- * spend. On 'block' and 'shadow' the increment is NOT applied (a blocked call
77
- * does not cost anything; a shadow call is observed but not yet wired through).
78
- * Callers that need to count shadow calls toward spend should increment
79
- * explicitly after the provider call returns.
80
- */
81
77
  async function evaluatePolicy(policy, call, store) {
78
+ validatePolicy(policy);
79
+ validateCall(call);
82
80
  const decisionId = (0, crypto_1.randomUUID)();
83
81
  const timestamp = new Date().toISOString();
84
- const reasons = [];
85
- // 1. Confirm policy applies to this call.
86
- if (!policyMatchesCall(policy.scope, call.scope)) {
87
- reasons.push(`Policy ${policy.id} scope does not match call scope`);
88
- return {
82
+ const provider = call.provider ?? (0, cost_table_1.inferProvider)(call.model);
83
+ const callScope = callScopeWithProvider(call);
84
+ if (!policyMatchesCall(policy.scope, callScope)) {
85
+ return buildDecision({
89
86
  decisionId,
90
87
  timestamp,
91
88
  action: 'allow',
@@ -94,22 +91,17 @@ async function evaluatePolicy(policy, call, store) {
94
91
  projectedCents: 0,
95
92
  windowSpendBefore: 0,
96
93
  windowSpendAfter: 0,
97
- provider: call.provider ?? (0, cost_table_1.inferProvider)(call.model),
94
+ provider,
98
95
  modelRequested: call.model,
99
96
  modelResolved: call.model,
100
- policyId: policy.id,
101
- policyVersion: policy.version,
102
- enforcementMode: policy.mode,
103
- reasons,
104
- };
97
+ policy,
98
+ reasons: [`Policy ${policy.id} scope does not match call scope`],
99
+ });
105
100
  }
106
- // 2. Capability gate (Patent D §7.3 reduction). If the policy requires a
107
- // capability tier and the caller's claim is below it, block immediately.
108
101
  if (policy.requiredCapability) {
109
102
  const claimed = call.capabilityClaim;
110
103
  if (!claimed || !capabilityMeetsRequirement(claimed, policy.requiredCapability)) {
111
- reasons.push(`Capability '${claimed ?? 'none'}' below required '${policy.requiredCapability}'`);
112
- return {
104
+ return buildDecision({
113
105
  decisionId,
114
106
  timestamp,
115
107
  action: 'block',
@@ -118,49 +110,96 @@ async function evaluatePolicy(policy, call, store) {
118
110
  projectedCents: 0,
119
111
  windowSpendBefore: 0,
120
112
  windowSpendAfter: 0,
121
- provider: call.provider ?? (0, cost_table_1.inferProvider)(call.model),
113
+ provider,
122
114
  modelRequested: call.model,
123
115
  modelResolved: call.model,
124
- policyId: policy.id,
125
- policyVersion: policy.version,
126
- enforcementMode: policy.mode,
127
- reasons,
128
- };
116
+ policy,
117
+ reasons: [`Capability '${claimed ?? 'none'}' below required '${policy.requiredCapability}'`],
118
+ });
129
119
  }
130
120
  }
131
- // 3. Compute projected cost.
132
121
  const projectedCents = (0, cost_table_1.computeCallCents)(call.model, call.inputTokens, call.outputTokens);
133
122
  if (projectedCents === null) {
134
- reasons.push(`Unknown model '${call.model}', no cost data — defaulting to allow`);
135
- return {
123
+ const action = policy.mode === 'enforce' ? 'block' : 'allow';
124
+ return buildDecision({
136
125
  decisionId,
137
126
  timestamp,
138
- action: policy.mode === 'enforce' ? 'block' : 'allow',
127
+ action,
139
128
  triggeredCap: null,
140
129
  triggeredScopeKey: null,
141
130
  projectedCents: 0,
142
131
  windowSpendBefore: 0,
143
132
  windowSpendAfter: 0,
144
- provider: call.provider ?? (0, cost_table_1.inferProvider)(call.model),
133
+ provider,
145
134
  modelRequested: call.model,
146
135
  modelResolved: call.model,
147
- policyId: policy.id,
148
- policyVersion: policy.version,
149
- enforcementMode: policy.mode,
150
- reasons,
151
- };
136
+ policy,
137
+ reasons: [`Unknown model '${call.model}', no cost data; ${action === 'block' ? 'blocking' : 'allowing'} call`],
138
+ });
152
139
  }
153
- // 4. Evaluate caps in order. First triggered cap wins; if multiple caps would
154
- // fire on this call, the most restrictive action is selected.
140
+ const scopeKey = buildScopeKey(policy.scope);
141
+ let concurrentReason = null;
142
+ for (let attempt = 0; attempt < 3; attempt++) {
143
+ const evaluation = await evaluateCaps(policy, call, store, scopeKey, projectedCents);
144
+ if (concurrentReason)
145
+ evaluation.reasons.push(concurrentReason);
146
+ const effectiveAction = policy.mode === 'shadow' && (evaluation.chosenAction === 'block' || evaluation.chosenAction === 'downgrade')
147
+ ? 'shadow'
148
+ : evaluation.chosenAction;
149
+ const chargedCents = computeChargedCents(effectiveAction, evaluation.modelResolved, call, projectedCents);
150
+ if (effectiveAction === 'allow' || effectiveAction === 'downgrade' || effectiveAction === 'shadow') {
151
+ const reservation = await reserveSpendForAction(policy, store, scopeKey, effectiveAction, chargedCents, policy.mode !== 'shadow');
152
+ if (!reservation.ok) {
153
+ concurrentReason = `Concurrent spend update crossed ${reservation.window} cap; re-evaluating`;
154
+ continue;
155
+ }
156
+ if (evaluation.chosenAction === 'allow' && reservation.first) {
157
+ evaluation.windowSpendBefore = reservation.first.before;
158
+ evaluation.windowSpendAfter = reservation.first.after;
159
+ }
160
+ }
161
+ return buildDecision({
162
+ decisionId,
163
+ timestamp,
164
+ action: effectiveAction,
165
+ triggeredCap: evaluation.triggeredCap,
166
+ triggeredScopeKey: evaluation.triggeredScopeKey,
167
+ projectedCents,
168
+ windowSpendBefore: evaluation.windowSpendBefore,
169
+ windowSpendAfter: evaluation.windowSpendAfter,
170
+ provider,
171
+ modelRequested: call.model,
172
+ modelResolved: evaluation.modelResolved,
173
+ policy,
174
+ reasons: evaluation.reasons,
175
+ });
176
+ }
177
+ return buildDecision({
178
+ decisionId,
179
+ timestamp,
180
+ action: 'block',
181
+ triggeredCap: null,
182
+ triggeredScopeKey: scopeKey,
183
+ projectedCents,
184
+ windowSpendBefore: 0,
185
+ windowSpendAfter: projectedCents,
186
+ provider,
187
+ modelRequested: call.model,
188
+ modelResolved: call.model,
189
+ policy,
190
+ reasons: [concurrentReason ?? 'Concurrent spend update prevented a safe reservation'],
191
+ });
192
+ }
193
+ async function evaluateCaps(policy, call, store, scopeKey, projectedCents) {
194
+ const reasons = [];
155
195
  let chosenAction = 'allow';
156
196
  let triggeredCap = null;
157
197
  let triggeredScopeKey = null;
158
198
  let windowSpendBefore = 0;
159
199
  let windowSpendAfter = 0;
160
200
  let modelResolved = call.model;
161
- const scopeKey = buildScopeKey(call.scope);
162
201
  for (const cap of policy.caps) {
163
- const currentSpend = await store.getWindowSpend(scopeKey, cap.window);
202
+ const currentSpend = cap.window === 'per_call' ? 0 : await store.getWindowSpend(scopeKey, cap.window);
164
203
  const projectedTotal = currentSpend + projectedCents;
165
204
  if (projectedTotal > cap.amountCents) {
166
205
  const candidateAction = cap.action;
@@ -170,12 +209,11 @@ async function evaluatePolicy(policy, call, store) {
170
209
  triggeredScopeKey = scopeKey;
171
210
  windowSpendBefore = currentSpend;
172
211
  windowSpendAfter = projectedTotal;
173
- if (candidateAction === 'downgrade' && cap.downgradeTo) {
212
+ if (candidateAction === 'downgrade' && cap.downgradeTo)
174
213
  modelResolved = cap.downgradeTo;
175
- }
176
214
  reasons.push(`Cap '${cap.window}=${cap.amountCents}c' exceeded ` +
177
215
  `(spent=${currentSpend}c, +call=${projectedCents}c, total=${projectedTotal}c) ` +
178
- `→ ${candidateAction}` +
216
+ `to ${candidateAction}` +
179
217
  (cap.reason ? ` (${cap.reason})` : ''));
180
218
  }
181
219
  }
@@ -185,48 +223,100 @@ async function evaluatePolicy(policy, call, store) {
185
223
  windowSpendBefore = 0;
186
224
  windowSpendAfter = projectedCents;
187
225
  }
188
- // 5. Apply enforcement mode. In SHADOW mode, downgrade with the same cap to
189
- // 'shadow' (log only, do not block or rewrite). CANARY mode applies the
190
- // enforcement for a 5% sticky slice of agents (handled by caller via
191
- // wrapper.ts). ENFORCE mode applies the chosen action as-is.
192
- const effectiveAction = policy.mode === 'shadow' && (chosenAction === 'block' || chosenAction === 'downgrade')
193
- ? 'shadow'
194
- : chosenAction;
195
- // 6. If action is allow or downgrade, increment the window spend for caps
196
- // that did NOT trigger (so future calls see the running total).
197
- // On block/shadow we do not increment because the call did not (or will
198
- // not) actually execute against the provider.
199
- // On downgrade, the customer pays for the RESOLVED model, not the original.
200
- // Recompute the actual cost so the budget is charged correctly.
201
- let chargedCents = projectedCents;
202
- if (effectiveAction === 'downgrade' && modelResolved !== call.model) {
226
+ return { chosenAction, triggeredCap, triggeredScopeKey, windowSpendBefore, windowSpendAfter, modelResolved, reasons };
227
+ }
228
+ function computeChargedCents(action, modelResolved, call, projectedCents) {
229
+ if (action === 'downgrade' && modelResolved !== call.model) {
203
230
  const downgradedCost = (0, cost_table_1.computeCallCents)(modelResolved, call.inputTokens, call.outputTokens);
204
231
  if (downgradedCost !== null)
205
- chargedCents = downgradedCost;
232
+ return downgradedCost;
206
233
  }
207
- if (effectiveAction === 'allow' || effectiveAction === 'downgrade') {
208
- // Track spend against the same windows the policy cares about.
209
- const windowsToTrack = new Set(policy.caps.map((c) => c.window));
210
- for (const w of windowsToTrack) {
211
- await store.incrementWindowSpend(scopeKey, w, chargedCents);
234
+ return projectedCents;
235
+ }
236
+ async function reserveSpendForAction(policy, store, scopeKey, action, cents, enforceLimits) {
237
+ validateCents('cents', cents);
238
+ const windows = [...new Set(policy.caps.map((c) => c.window))].filter((w) => w !== 'per_call');
239
+ const reservations = [];
240
+ for (const window of windows) {
241
+ const limit = enforceLimits ? capLimitForAction(policy, window, action) : null;
242
+ const reservation = limit === null
243
+ ? await reserveWithoutLimit(store, scopeKey, window, cents)
244
+ : await reserveWithLimit(store, scopeKey, window, cents, limit);
245
+ if (!reservation.allowed) {
246
+ await rollbackReservations(store, scopeKey, reservations);
247
+ return { ok: false, window, before: reservation.before, after: reservation.after };
212
248
  }
249
+ reservations.push({ window, cents, before: reservation.before, after: reservation.after });
250
+ }
251
+ return { ok: true, first: reservations[0] ? { before: reservations[0].before, after: reservations[0].after } : undefined };
252
+ }
253
+ function capLimitForAction(policy, window, action) {
254
+ const stricter = policy.caps
255
+ .filter((cap) => cap.action !== 'shadow' && cap.window === window && ACTION_RANK[cap.action] > ACTION_RANK[action])
256
+ .map((cap) => cap.amountCents);
257
+ return stricter.length > 0 ? Math.min(...stricter) : null;
258
+ }
259
+ async function reserveWithLimit(store, scopeKey, window, cents, limitCents) {
260
+ validateCents('limitCents', limitCents);
261
+ if (store.reserveWindowSpend)
262
+ return store.reserveWindowSpend(scopeKey, window, cents, limitCents);
263
+ const before = await store.getWindowSpend(scopeKey, window);
264
+ const projected = before + cents;
265
+ if (projected > limitCents)
266
+ return { allowed: false, before, after: projected };
267
+ const after = await store.incrementWindowSpend(scopeKey, window, cents);
268
+ if (after > limitCents) {
269
+ await settleWindow(store, scopeKey, window, -cents);
270
+ return { allowed: false, before, after };
271
+ }
272
+ return { allowed: true, before, after };
273
+ }
274
+ async function reserveWithoutLimit(store, scopeKey, window, cents) {
275
+ const before = await store.getWindowSpend(scopeKey, window);
276
+ const after = await store.incrementWindowSpend(scopeKey, window, cents);
277
+ return { allowed: true, before, after };
278
+ }
279
+ async function rollbackReservations(store, scopeKey, reservations) {
280
+ for (const reservation of reservations.reverse()) {
281
+ await settleWindow(store, scopeKey, reservation.window, -reservation.cents);
282
+ }
283
+ }
284
+ async function settleWindow(store, scopeKey, window, deltaCents) {
285
+ validateDelta(deltaCents);
286
+ if (store.settleWindowSpend)
287
+ return store.settleWindowSpend(scopeKey, window, deltaCents);
288
+ if (deltaCents > 0)
289
+ return store.incrementWindowSpend(scopeKey, window, deltaCents);
290
+ return store.getWindowSpend(scopeKey, window);
291
+ }
292
+ async function adjustPolicyWindowSpend(policy, store, deltaCents) {
293
+ validatePolicy(policy);
294
+ validateDelta(deltaCents);
295
+ if (deltaCents === 0)
296
+ return;
297
+ const scopeKey = buildScopeKey(policy.scope);
298
+ const windows = [...new Set(policy.caps.map((c) => c.window))].filter((w) => w !== 'per_call');
299
+ for (const window of windows) {
300
+ await settleWindow(store, scopeKey, window, deltaCents);
213
301
  }
302
+ }
303
+ function buildDecision(args) {
214
304
  return {
215
- decisionId,
216
- timestamp,
217
- action: effectiveAction,
218
- triggeredCap,
219
- triggeredScopeKey,
220
- projectedCents,
221
- windowSpendBefore,
222
- windowSpendAfter,
223
- provider: call.provider ?? (0, cost_table_1.inferProvider)(call.model),
224
- modelRequested: call.model,
225
- modelResolved,
226
- policyId: policy.id,
227
- policyVersion: policy.version,
228
- enforcementMode: policy.mode,
229
- reasons,
305
+ decisionId: args.decisionId,
306
+ timestamp: args.timestamp,
307
+ action: args.action,
308
+ triggeredCap: args.triggeredCap,
309
+ triggeredScopeKey: args.triggeredScopeKey,
310
+ projectedCents: args.projectedCents,
311
+ windowSpendBefore: args.windowSpendBefore,
312
+ windowSpendAfter: args.windowSpendAfter,
313
+ provider: args.provider,
314
+ modelRequested: args.modelRequested,
315
+ modelResolved: args.modelResolved,
316
+ policyId: args.policy.id,
317
+ policyVersion: args.policy.version,
318
+ enforcementMode: args.policy.mode,
319
+ reasons: args.reasons,
230
320
  };
231
321
  }
232
322
  const CAPABILITY_ORDER = {
@@ -238,6 +328,33 @@ const CAPABILITY_ORDER = {
238
328
  function capabilityMeetsRequirement(claimed, required) {
239
329
  return CAPABILITY_ORDER[claimed] >= CAPABILITY_ORDER[required];
240
330
  }
241
- // Re-export combining helper for tests and external callers.
331
+ function validatePolicy(policy) {
332
+ if (!policy.id || !policy.scope?.tenantId)
333
+ throw new Error('SpendPolicy must include id and scope.tenantId');
334
+ if (!Number.isSafeInteger(policy.version) || policy.version < 0)
335
+ throw new Error('SpendPolicy.version must be a non-negative safe integer');
336
+ for (const cap of policy.caps)
337
+ validateCap(cap);
338
+ }
339
+ function validateCap(cap) {
340
+ validateCents('cap.amountCents', cap.amountCents);
341
+ if (!ACTION_RANK.hasOwnProperty(cap.action))
342
+ throw new Error(`Unknown cap action '${cap.action}'`);
343
+ }
344
+ function validateCall(call) {
345
+ if (!call.scope?.tenantId)
346
+ throw new Error('CallContext.scope.tenantId is required');
347
+ validateCents('inputTokens', call.inputTokens);
348
+ validateCents('outputTokens', call.outputTokens);
349
+ }
350
+ function validateCents(name, value) {
351
+ if (!Number.isSafeInteger(value) || value < 0) {
352
+ throw new Error(`${name} must be a non-negative safe integer`);
353
+ }
354
+ }
355
+ function validateDelta(deltaCents) {
356
+ if (!Number.isSafeInteger(deltaCents))
357
+ throw new Error('deltaCents must be a safe integer');
358
+ }
242
359
  exports._testing = { mostRestrictive, policyMatchesCall, capabilityMeetsRequirement };
243
360
  //# sourceMappingURL=policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AgentGuard(TM) Spend Core SDK entry point
2
+ * AgentGuard(TM) Spend: Core SDK entry point
3
3
  *
4
4
  * `withSpendGuard()` wraps a provider SDK client (OpenAI, Anthropic, Bedrock)
5
5
  * and enforces a SpendPolicy locally before each call is sent to the provider.
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * Patent notice: Protected by U.S. patent-pending technology
14
14
  * (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
15
- * and an additional application filed May 2026).
15
+ * 64/071,781; 64/071,789).
16
16
  */
17
17
  import type { SpendPolicy, CallContext, SpendDecision, SpendStore, DecisionLogStore, SignedDecisionLogEntry, CapabilityTier, SpendScope } from './types';
18
18
  /**
@@ -47,6 +47,7 @@ export declare class SpendGuard {
47
47
  private logStore;
48
48
  private nextSequence;
49
49
  private previousHash;
50
+ private decisionLock;
50
51
  constructor(config: SpendGuardConfig);
51
52
  /**
52
53
  * Hydrate the chain pointer from the log store. Call this once at startup
@@ -62,6 +63,9 @@ export declare class SpendGuard {
62
63
  decision: SpendDecision;
63
64
  signed: SignedDecisionLogEntry | null;
64
65
  }>;
66
+ private getSignerFingerprint;
67
+ private refreshChainHead;
68
+ private withDecisionLock;
65
69
  /** Default token estimator: approx 1 token per 4 characters of English. */
66
70
  private defaultTokenEstimator;
67
71
  /** Estimate tokens for a string using the configured estimator. */
@@ -1 +1 @@
1
- {"version":3,"file":"spend-guard.d.ts","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EAEtB,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAWjB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAC;IACpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,+EAA+E;IAC/E,WAAW,CAAC,EAAE;QACZ,kCAAkC;QAClC,UAAU,EAAE,UAAU,CAAC;QACvB,iCAAiC;QACjC,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;IACF,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;2DAEuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAyB;gBAEjC,MAAM,EAAE,gBAAgB;IAMpC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;QACvC,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;KACvC,CAAC;IAwBF,2EAA2E;IAC3E,OAAO,CAAC,qBAAqB;IAI7B,mEAAmE;IACnE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKpC,uDAAuD;IACvD,aAAa,IAAI,UAAU;IAI3B,qDAAqD;IACrD,WAAW,IAAI,gBAAgB;CAGhC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;CAC3C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;gBACJ,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM;CAwBzE;AAED;;;;GAIG;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,oBAAoB,GAEzB,GAAG,CA8CL"}
1
+ {"version":3,"file":"spend-guard.d.ts","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EAEtB,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAajB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAC;IACpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,+EAA+E;IAC/E,WAAW,CAAC,EAAE;QACZ,kCAAkC;QAClC,UAAU,EAAE,UAAU,CAAC;QACvB,iCAAiC;QACjC,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;IACF,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;2DAEuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,YAAY,CAAoC;gBAE5C,MAAM,EAAE,gBAAgB;IAOpC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;QACvC,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;KACvC,CAAC;IA6BF,OAAO,CAAC,oBAAoB;YAMd,gBAAgB;YAQhB,gBAAgB;IAc9B,2EAA2E;IAC3E,OAAO,CAAC,qBAAqB;IAI7B,mEAAmE;IACnE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKpC,uDAAuD;IACvD,aAAa,IAAI,UAAU;IAI3B,qDAAqD;IACrD,WAAW,IAAI,gBAAgB;CAGhC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;CAC3C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;gBACJ,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM;CAwBzE;AAED;;;;GAIG;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,oBAAoB,GAEzB,GAAG,CAqDL"}