@agentguard-run/spend 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/LICENSE +1 -1
  3. package/README.es-419.md +37 -100
  4. package/README.md +58 -121
  5. package/README.pt-BR.md +37 -100
  6. package/dist/bindings/anthropic.d.ts +11 -0
  7. package/dist/bindings/anthropic.d.ts.map +1 -0
  8. package/dist/bindings/anthropic.js +116 -0
  9. package/dist/bindings/anthropic.js.map +1 -0
  10. package/dist/bindings/bedrock.d.ts +11 -0
  11. package/dist/bindings/bedrock.d.ts.map +1 -0
  12. package/dist/bindings/bedrock.js +177 -0
  13. package/dist/bindings/bedrock.js.map +1 -0
  14. package/dist/cli/auth.d.ts +7 -0
  15. package/dist/cli/auth.d.ts.map +1 -0
  16. package/dist/cli/auth.js +189 -0
  17. package/dist/cli/auth.js.map +1 -0
  18. package/dist/cli/coach.d.ts +5 -0
  19. package/dist/cli/coach.d.ts.map +1 -0
  20. package/dist/cli/coach.js +257 -0
  21. package/dist/cli/coach.js.map +1 -0
  22. package/dist/cli/colors.d.ts +8 -3
  23. package/dist/cli/colors.d.ts.map +1 -1
  24. package/dist/cli/colors.js +93 -4
  25. package/dist/cli/colors.js.map +1 -1
  26. package/dist/cli/demo.d.ts.map +1 -1
  27. package/dist/cli/demo.js +23 -2
  28. package/dist/cli/demo.js.map +1 -1
  29. package/dist/cli/main.d.ts +0 -6
  30. package/dist/cli/main.d.ts.map +1 -1
  31. package/dist/cli/main.js +42 -16
  32. package/dist/cli/main.js.map +1 -1
  33. package/dist/cli/models.d.ts +18 -0
  34. package/dist/cli/models.d.ts.map +1 -0
  35. package/dist/cli/models.js +277 -0
  36. package/dist/cli/models.js.map +1 -0
  37. package/dist/cli/tips.d.ts +21 -0
  38. package/dist/cli/tips.d.ts.map +1 -0
  39. package/dist/cli/tips.js +191 -0
  40. package/dist/cli/tips.js.map +1 -0
  41. package/dist/cli/wizard.d.ts +27 -0
  42. package/dist/cli/wizard.d.ts.map +1 -0
  43. package/dist/cli/wizard.js +182 -0
  44. package/dist/cli/wizard.js.map +1 -0
  45. package/dist/coach/anomaly.d.ts +26 -0
  46. package/dist/coach/anomaly.d.ts.map +1 -0
  47. package/dist/coach/anomaly.js +119 -0
  48. package/dist/coach/anomaly.js.map +1 -0
  49. package/dist/coach/conversation.d.ts +69 -0
  50. package/dist/coach/conversation.d.ts.map +1 -0
  51. package/dist/coach/conversation.js +228 -0
  52. package/dist/coach/conversation.js.map +1 -0
  53. package/dist/coach/forecast.d.ts +19 -0
  54. package/dist/coach/forecast.d.ts.map +1 -0
  55. package/dist/coach/forecast.js +57 -0
  56. package/dist/coach/forecast.js.map +1 -0
  57. package/dist/coach/llm-client.d.ts +41 -0
  58. package/dist/coach/llm-client.d.ts.map +1 -0
  59. package/dist/coach/llm-client.js +248 -0
  60. package/dist/coach/llm-client.js.map +1 -0
  61. package/dist/coach/output.d.ts +41 -0
  62. package/dist/coach/output.d.ts.map +1 -0
  63. package/dist/coach/output.js +173 -0
  64. package/dist/coach/output.js.map +1 -0
  65. package/dist/coach/system-prompt.d.ts +20 -0
  66. package/dist/coach/system-prompt.d.ts.map +1 -0
  67. package/dist/coach/system-prompt.js +177 -0
  68. package/dist/coach/system-prompt.js.map +1 -0
  69. package/dist/cost-table.d.ts +11 -36
  70. package/dist/cost-table.d.ts.map +1 -1
  71. package/dist/cost-table.js +114 -45
  72. package/dist/cost-table.js.map +1 -1
  73. package/dist/index.d.ts +9 -3
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +30 -2
  76. package/dist/index.js.map +1 -1
  77. package/dist/openrouter-catalog.d.ts +56 -0
  78. package/dist/openrouter-catalog.d.ts.map +1 -0
  79. package/dist/openrouter-catalog.js +183 -0
  80. package/dist/openrouter-catalog.js.map +1 -0
  81. package/dist/spend-guard.d.ts +38 -55
  82. package/dist/spend-guard.d.ts.map +1 -1
  83. package/dist/spend-guard.js +268 -83
  84. package/dist/spend-guard.js.map +1 -1
  85. package/dist/telemetry.d.ts.map +1 -1
  86. package/dist/telemetry.js +52 -21
  87. package/dist/telemetry.js.map +1 -1
  88. package/dist/templates/index.d.ts +17 -0
  89. package/dist/templates/index.d.ts.map +1 -0
  90. package/dist/templates/index.js +100 -0
  91. package/dist/templates/index.js.map +1 -0
  92. package/dist/types.d.ts +18 -3
  93. package/dist/types.d.ts.map +1 -1
  94. package/package.json +39 -4
  95. package/src/bindings/anthropic.ts +142 -0
  96. package/src/bindings/bedrock.ts +200 -0
  97. package/src/cli/auth.ts +145 -0
  98. package/src/cli/coach.ts +249 -0
  99. package/src/cli/models.ts +236 -0
  100. package/src/cli/tips.ts +161 -0
  101. package/src/cli/wizard.ts +160 -0
  102. package/src/coach/anomaly.ts +98 -0
  103. package/src/coach/conversation.ts +248 -0
  104. package/src/coach/forecast.ts +64 -0
  105. package/src/coach/llm-client.ts +247 -0
  106. package/src/coach/output.ts +172 -0
  107. package/src/coach/system-prompt.ts +181 -0
  108. package/src/openrouter-catalog.ts +180 -0
  109. package/src/templates/agent-support.yaml +30 -0
  110. package/src/templates/chargeback-evidence.yaml +30 -0
  111. package/src/templates/code-scan.yaml +30 -0
  112. package/src/templates/index.ts +109 -0
  113. package/src/templates/payment-approval.yaml +30 -0
  114. package/src/templates/risk-review.yaml +30 -0
  115. package/tests/fixtures/openrouter-catalog.json +1 -0
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * AgentGuard(TM) Spend: Core SDK entry point
3
3
  *
4
- * `withSpendGuard()` wraps a provider SDK client (OpenAI, Anthropic, Bedrock)
5
- * and enforces a SpendPolicy locally before each call is sent to the provider.
4
+ * `withSpendGuard()` wraps provider SDK clients and enforces a SpendPolicy
5
+ * locally before each call is sent to the provider.
6
6
  *
7
7
  * Design rule: ZERO DATA PLANE INVOLVEMENT.
8
8
  * - Prompts never leave the customer process.
@@ -15,32 +15,36 @@
15
15
  * 64/071,781; 64/071,789).
16
16
  */
17
17
  import type { SpendPolicy, CallContext, SpendDecision, SpendStore, DecisionLogStore, SignedDecisionLogEntry, CapabilityTier, SpendScope } from './types';
18
- /**
19
- * Configuration for an AgentGuard Spend instance.
20
- */
21
18
  export interface SpendGuardConfig {
22
- /** The policy to evaluate every call against */
19
+ /** The policy to evaluate every call against. */
23
20
  policy: SpendPolicy;
24
- /** Spend state store (default: in-memory) */
21
+ /** Spend state store. Defaults to in-memory. */
25
22
  spendStore?: SpendStore;
26
- /** Decision log store (default: in-memory) */
23
+ /** Decision log store. Defaults to in-memory. */
27
24
  logStore?: DecisionLogStore;
28
- /** Ed25519 signing keys; if omitted, decisions are NOT signed (alpha-only). */
25
+ /** Ed25519 signing keys. If omitted, decisions are not signed. */
29
26
  signingKeys?: {
30
- /** 32-byte Ed25519 secret seed */
27
+ /** 32-byte Ed25519 secret seed. */
31
28
  privateKey: Uint8Array;
32
- /** 32-byte Ed25519 public key */
29
+ /** 32-byte Ed25519 public key. */
33
30
  publicKey: Uint8Array;
34
31
  };
35
- /** Optional hook fired on every decision (useful for OTel / SIEM export) */
32
+ /** Optional hook fired on every decision and settlement. */
36
33
  onDecision?: (decision: SpendDecision, signed: SignedDecisionLogEntry | null) => void | Promise<void>;
37
34
  /** Optional token-count estimator. Defaults to `chars / 4` heuristic. */
38
35
  tokenEstimator?: (text: string) => number;
39
- /** Optional locale for localized block traces. Defaults to auto-detection
40
- * via AGENTGUARD_LOCALE env var or system locale, falling back to en-US.
41
- * Supported in v0.1.4: 'en-US', 'es-419', 'pt-BR'. */
36
+ /** Optional locale for localized block traces. */
42
37
  locale?: string;
43
38
  }
39
+ export interface StreamSettlementOptions {
40
+ partial?: boolean;
41
+ reason?: string;
42
+ }
43
+ export interface StreamSettlementResult {
44
+ decision: SpendDecision;
45
+ signed: SignedDecisionLogEntry | null;
46
+ deltaCents: number;
47
+ }
44
48
  export declare class SpendGuard {
45
49
  private config;
46
50
  private spendStore;
@@ -48,55 +52,25 @@ export declare class SpendGuard {
48
52
  private nextSequence;
49
53
  private previousHash;
50
54
  private decisionLock;
55
+ private reservations;
51
56
  constructor(config: SpendGuardConfig);
52
- /**
53
- * Hydrate the chain pointer from the log store. Call this once at startup
54
- * if the log store is persistent and may already contain entries from a
55
- * previous run.
56
- */
57
57
  hydrate(): Promise<void>;
58
- /**
59
- * Evaluate the policy for a call and append to the decision log.
60
- * Returns the decision plus the signed log entry (or null if unsigned).
61
- */
62
58
  decide(call: CallContext): Promise<{
63
59
  decision: SpendDecision;
64
60
  signed: SignedDecisionLogEntry | null;
65
61
  }>;
62
+ settleStreamUsage(decisionId: string, actualInputTokens: number, actualOutputTokens: number, options?: StreamSettlementOptions): Promise<StreamSettlementResult | null>;
63
+ private signAndAppendDecision;
64
+ private rememberReservation;
65
+ private buildSettlementDecision;
66
66
  private getSignerFingerprint;
67
67
  private refreshChainHead;
68
68
  private withDecisionLock;
69
- /** Default token estimator: approx 1 token per 4 characters of English. */
70
69
  private defaultTokenEstimator;
71
- /** Estimate tokens for a string using the configured estimator. */
72
70
  estimateTokens(text: string): number;
73
- /** Expose the spend store for tests and dashboards. */
74
71
  getSpendStore(): SpendStore;
75
- /** Expose the log store for tests and dashboards. */
76
72
  getLogStore(): DecisionLogStore;
77
73
  }
78
- /**
79
- * Drop-in wrapper for an OpenAI v5+ client.
80
- *
81
- * Usage:
82
- * import OpenAI from 'openai';
83
- * import { withSpendGuard } from '@merchantguard/agentguard-spend';
84
- *
85
- * const openai = new OpenAI();
86
- * const policy: SpendPolicy = { ... };
87
- * const guarded = withSpendGuard(openai, { policy, scope: { tenantId, userId } });
88
- *
89
- * const completion = await guarded.chat.completions.create({
90
- * model: 'gpt-5',
91
- * messages: [{ role: 'user', content: 'hi' }],
92
- * });
93
- *
94
- * Internals:
95
- * - On every chat.completions.create call we estimate input tokens, decide
96
- * under the policy, then either pass through, downgrade the model, or
97
- * short-circuit with a structured `AgentGuardBlockedError`.
98
- * - After the call returns, we record the actual output tokens for true-up.
99
- */
100
74
  export interface OpenAIBindingOptions {
101
75
  policy: SpendPolicy;
102
76
  scope: SpendScope;
@@ -109,10 +83,19 @@ export declare class AgentGuardBlockedError extends Error {
109
83
  locale?: string;
110
84
  constructor(decision: SpendDecision, scope?: SpendScope, locale?: string);
111
85
  }
112
- /**
113
- * Wrap an OpenAI client. Returns a proxy whose chat.completions.create
114
- * enforces the spend policy. Other endpoints pass through untouched in this
115
- * alpha; subsequent releases will cover responses, embeddings, and images.
116
- */
117
86
  export declare function withSpendGuard(client: any, opts: OpenAIBindingOptions): any;
87
+ export declare function serializeMessages(messages: unknown): string;
88
+ export declare function serializeMessageContent(message: unknown): string;
89
+ export declare function extractText(value: unknown): string;
90
+ export declare function outputTokensFromParams(params: unknown): number;
91
+ export interface UsageCounts {
92
+ inputTokens: number;
93
+ outputTokens: number;
94
+ }
95
+ export declare function extractUsage(response: unknown): UsageCounts | null;
96
+ export declare function usageCountsFromObject(usage: unknown): UsageCounts | null;
97
+ export declare function wrapUsageStream<T>(stream: AsyncIterable<T>, hooks: {
98
+ onChunk: (chunk: T) => void;
99
+ settle: (partial: boolean, reason?: string) => Promise<unknown>;
100
+ }): AsyncIterable<T>;
118
101
  //# sourceMappingURL=spend-guard.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"spend-guard.d.ts","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * AgentGuard(TM) Spend: Core SDK entry point
4
4
  *
5
- * `withSpendGuard()` wraps a provider SDK client (OpenAI, Anthropic, Bedrock)
6
- * and enforces a SpendPolicy locally before each call is sent to the provider.
5
+ * `withSpendGuard()` wraps provider SDK clients and enforces a SpendPolicy
6
+ * locally before each call is sent to the provider.
7
7
  *
8
8
  * Design rule: ZERO DATA PLANE INVOLVEMENT.
9
9
  * - Prompts never leave the customer process.
@@ -18,6 +18,14 @@
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.AgentGuardBlockedError = exports.SpendGuard = void 0;
20
20
  exports.withSpendGuard = withSpendGuard;
21
+ exports.serializeMessages = serializeMessages;
22
+ exports.serializeMessageContent = serializeMessageContent;
23
+ exports.extractText = extractText;
24
+ exports.outputTokensFromParams = outputTokensFromParams;
25
+ exports.extractUsage = extractUsage;
26
+ exports.usageCountsFromObject = usageCountsFromObject;
27
+ exports.wrapUsageStream = wrapUsageStream;
28
+ const crypto_1 = require("crypto");
21
29
  const policy_1 = require("./policy");
22
30
  const decision_log_1 = require("./decision-log");
23
31
  const store_memory_1 = require("./store-memory");
@@ -32,17 +40,13 @@ class SpendGuard {
32
40
  nextSequence = 0;
33
41
  previousHash = decision_log_1.GENESIS_PREVIOUS_HASH;
34
42
  decisionLock = Promise.resolve();
43
+ reservations = new Map();
35
44
  constructor(config) {
36
45
  this.config = config;
37
46
  this.spendStore = config.spendStore ?? new store_memory_1.InMemorySpendStore();
38
47
  this.logStore = config.logStore ?? new decision_log_2.InMemoryDecisionLogStore();
39
48
  (0, telemetry_1.recordTelemetryEvent)('sdk_init');
40
49
  }
41
- /**
42
- * Hydrate the chain pointer from the log store. Call this once at startup
43
- * if the log store is persistent and may already contain entries from a
44
- * previous run.
45
- */
46
50
  async hydrate() {
47
51
  await this.withDecisionLock(async () => {
48
52
  const latest = await this.logStore.getLatest(this.getSignerFingerprint());
@@ -52,27 +56,11 @@ class SpendGuard {
52
56
  }
53
57
  });
54
58
  }
55
- /**
56
- * Evaluate the policy for a call and append to the decision log.
57
- * Returns the decision plus the signed log entry (or null if unsigned).
58
- */
59
59
  async decide(call) {
60
60
  const result = await this.withDecisionLock(async () => {
61
61
  const decision = await (0, policy_1.evaluatePolicy)(this.config.policy, call, this.spendStore);
62
- let signed = null;
63
- if (this.config.signingKeys) {
64
- await this.refreshChainHead();
65
- signed = await (0, decision_log_1.signDecision)({
66
- sequence: this.nextSequence,
67
- decision,
68
- previousHash: this.previousHash,
69
- privateKey: this.config.signingKeys.privateKey,
70
- publicKey: this.config.signingKeys.publicKey,
71
- });
72
- await this.logStore.append(signed);
73
- this.nextSequence += 1;
74
- this.previousHash = signed.entryHash;
75
- }
62
+ const signed = await this.signAndAppendDecision(decision);
63
+ this.rememberReservation(call, decision);
76
64
  return { decision, signed };
77
65
  });
78
66
  if (this.config.onDecision) {
@@ -80,6 +68,102 @@ class SpendGuard {
80
68
  }
81
69
  return result;
82
70
  }
71
+ async settleStreamUsage(decisionId, actualInputTokens, actualOutputTokens, options = {}) {
72
+ validateTokenCount('actualInputTokens', actualInputTokens);
73
+ validateTokenCount('actualOutputTokens', actualOutputTokens);
74
+ const result = await this.withDecisionLock(async () => {
75
+ const reservation = this.reservations.get(decisionId);
76
+ if (!reservation || reservation.settled)
77
+ return null;
78
+ reservation.settled = true;
79
+ const actualCents = (0, cost_table_1.computeCallCents)(reservation.decision.modelResolved, actualInputTokens, actualOutputTokens);
80
+ if (actualCents === null)
81
+ return null;
82
+ const deltaCents = actualCents - reservation.chargedCents;
83
+ if (deltaCents !== 0) {
84
+ await (0, policy_1.adjustPolicyWindowSpend)(reservation.policy, this.spendStore, deltaCents);
85
+ }
86
+ const settlement = this.buildSettlementDecision({
87
+ reservation,
88
+ actualInputTokens,
89
+ actualOutputTokens,
90
+ actualCents,
91
+ deltaCents,
92
+ partial: options.partial === true,
93
+ reason: options.reason,
94
+ });
95
+ const signed = await this.signAndAppendDecision(settlement);
96
+ return { decision: settlement, signed, deltaCents };
97
+ });
98
+ if (result && this.config.onDecision) {
99
+ await this.config.onDecision(result.decision, result.signed);
100
+ }
101
+ return result;
102
+ }
103
+ async signAndAppendDecision(decision) {
104
+ if (!this.config.signingKeys)
105
+ return null;
106
+ await this.refreshChainHead();
107
+ const signed = await (0, decision_log_1.signDecision)({
108
+ sequence: this.nextSequence,
109
+ decision,
110
+ previousHash: this.previousHash,
111
+ privateKey: this.config.signingKeys.privateKey,
112
+ publicKey: this.config.signingKeys.publicKey,
113
+ });
114
+ await this.logStore.append(signed);
115
+ this.nextSequence += 1;
116
+ this.previousHash = signed.entryHash;
117
+ return signed;
118
+ }
119
+ rememberReservation(call, decision) {
120
+ if (decision.action !== 'allow' && decision.action !== 'downgrade' && decision.action !== 'shadow')
121
+ return;
122
+ const chargedCents = (0, cost_table_1.computeCallCents)(decision.modelResolved, call.inputTokens, call.outputTokens);
123
+ if (chargedCents === null)
124
+ return;
125
+ this.reservations.set(decision.decisionId, {
126
+ policy: this.config.policy,
127
+ call,
128
+ decision,
129
+ chargedCents,
130
+ settled: false,
131
+ });
132
+ }
133
+ buildSettlementDecision(args) {
134
+ const { reservation } = args;
135
+ return {
136
+ decisionId: (0, crypto_1.randomUUID)(),
137
+ timestamp: new Date().toISOString(),
138
+ action: 'allow',
139
+ triggeredCap: reservation.decision.triggeredCap,
140
+ triggeredScopeKey: reservation.decision.triggeredScopeKey,
141
+ projectedCents: args.actualCents,
142
+ windowSpendBefore: reservation.decision.windowSpendAfter,
143
+ windowSpendAfter: Math.max(0, reservation.decision.windowSpendAfter + args.deltaCents),
144
+ provider: reservation.decision.provider,
145
+ modelRequested: reservation.decision.modelRequested,
146
+ modelResolved: reservation.decision.modelResolved,
147
+ policyId: reservation.policy.id,
148
+ policyVersion: reservation.policy.version,
149
+ enforcementMode: reservation.policy.mode,
150
+ reasons: [
151
+ `Usage settlement for decision ${reservation.decision.decisionId}: ` +
152
+ `estimated=${reservation.chargedCents}c actual=${args.actualCents}c delta=${args.deltaCents}c` +
153
+ (args.partial ? ' partial=true' : '') +
154
+ (args.reason ? ` reason=${args.reason}` : ''),
155
+ ],
156
+ entryType: 'settlement',
157
+ originalDecisionId: reservation.decision.decisionId,
158
+ estimatedInputTokens: reservation.call.inputTokens,
159
+ estimatedOutputTokens: reservation.call.outputTokens,
160
+ actualInputTokens: args.actualInputTokens,
161
+ actualOutputTokens: args.actualOutputTokens,
162
+ actualCents: args.actualCents,
163
+ deltaCents: args.deltaCents,
164
+ partial: args.partial,
165
+ };
166
+ }
83
167
  getSignerFingerprint() {
84
168
  return this.config.signingKeys
85
169
  ? (0, decision_log_1.computeSignerFingerprint)(this.config.signingKeys.publicKey)
@@ -106,20 +190,18 @@ class SpendGuard {
106
190
  release();
107
191
  }
108
192
  }
109
- /** Default token estimator: approx 1 token per 4 characters of English. */
110
193
  defaultTokenEstimator(text) {
111
194
  return Math.ceil(text.length / 4);
112
195
  }
113
- /** Estimate tokens for a string using the configured estimator. */
114
196
  estimateTokens(text) {
115
197
  const fn = this.config.tokenEstimator ?? this.defaultTokenEstimator;
116
- return fn(text);
198
+ const tokens = fn(text);
199
+ validateTokenCount('estimatedTokens', tokens);
200
+ return tokens;
117
201
  }
118
- /** Expose the spend store for tests and dashboards. */
119
202
  getSpendStore() {
120
203
  return this.spendStore;
121
204
  }
122
- /** Expose the log store for tests and dashboards. */
123
205
  getLogStore() {
124
206
  return this.logStore;
125
207
  }
@@ -153,90 +235,193 @@ class AgentGuardBlockedError extends Error {
153
235
  }
154
236
  }
155
237
  exports.AgentGuardBlockedError = AgentGuardBlockedError;
156
- /**
157
- * Wrap an OpenAI client. Returns a proxy whose chat.completions.create
158
- * enforces the spend policy. Other endpoints pass through untouched in this
159
- * alpha; subsequent releases will cover responses, embeddings, and images.
160
- */
238
+ function withSpendGuard(
161
239
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
- function withSpendGuard(client, opts) {
240
+ client, opts) {
163
241
  const guard = new SpendGuard({ policy: opts.policy, ...(opts.config ?? {}) });
164
242
  const originalCreate = client?.chat?.completions?.create?.bind(client.chat.completions);
165
243
  if (!originalCreate) {
166
- throw new Error('withSpendGuard: expected an OpenAI client with chat.completions.create. ' +
167
- 'For Anthropic or AWS Bedrock, use the Python SDK (agentguard-spend) which has dedicated bindings. ' +
168
- 'Native Node bindings for Anthropic + Bedrock are on the roadmap.');
244
+ throw new Error('withSpendGuard: expected an OpenAI client with chat.completions.create');
169
245
  }
170
246
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
247
  client.chat.completions.create = async (params) => {
172
- const inputText = serializeMessages(params?.messages ?? []);
173
- const inputTokens = guard.estimateTokens(inputText);
174
- const outputTokens = typeof params?.max_completion_tokens === 'number'
175
- ? params.max_completion_tokens
176
- : typeof params?.max_tokens === 'number'
177
- ? params.max_tokens
178
- : 512;
179
- const provider = (0, cost_table_1.inferProvider)(params?.model ?? '');
180
- const call = {
181
- provider,
182
- model: params?.model ?? 'unknown',
183
- inputTokens,
184
- outputTokens,
185
- scope: opts.scope,
186
- capabilityClaim: opts.capabilityClaim,
187
- label: params?.metadata?.label,
188
- };
248
+ const call = buildOpenAICall(params, guard, opts);
189
249
  const { decision } = await guard.decide(call);
190
250
  if (decision.action === 'block') {
191
251
  throw new AgentGuardBlockedError(decision, opts.scope, opts.config?.locale);
192
252
  }
253
+ let nextParams = params;
193
254
  if (decision.action === 'downgrade' && decision.modelResolved !== decision.modelRequested) {
194
- params = { ...params, model: decision.modelResolved };
255
+ nextParams = { ...params, model: decision.modelResolved };
195
256
  }
196
- // shadow + allow + downgrade all proceed to the provider.
197
- const response = await originalCreate(params);
198
- await trueUpSpend(guard, opts.policy, call, decision, response);
257
+ if (nextParams?.stream === true) {
258
+ nextParams = {
259
+ ...nextParams,
260
+ stream_options: { ...(nextParams.stream_options ?? {}), include_usage: true },
261
+ };
262
+ const stream = await originalCreate(nextParams);
263
+ return wrapOpenAIStream(stream, guard, decision, call);
264
+ }
265
+ const response = await originalCreate(nextParams);
266
+ await trueUpSpend(guard, decision, response);
199
267
  return response;
200
268
  };
201
- // Attach the guard so callers can introspect or await hydration.
202
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
203
269
  client.__agentguard = guard;
204
270
  return client;
205
271
  }
272
+ function buildOpenAICall(
206
273
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
274
+ params, guard, opts) {
275
+ const inputText = serializeMessages(params?.messages ?? []);
276
+ const inputTokens = guard.estimateTokens(inputText);
277
+ const outputTokens = outputTokensFromParams(params);
278
+ const provider = (0, cost_table_1.inferProvider)(params?.model ?? '');
279
+ return {
280
+ provider,
281
+ model: params?.model ?? 'unknown',
282
+ inputTokens,
283
+ outputTokens,
284
+ scope: opts.scope,
285
+ capabilityClaim: opts.capabilityClaim,
286
+ label: params?.metadata?.label,
287
+ };
288
+ }
207
289
  function serializeMessages(messages) {
208
290
  if (!Array.isArray(messages))
209
291
  return '';
210
- return messages
211
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
212
- .map((m) => (typeof m?.content === 'string' ? m.content : JSON.stringify(m?.content ?? '')))
213
- .join('\n');
292
+ return messages.map(serializeMessageContent).join('\n');
214
293
  }
215
- async function trueUpSpend(guard, policy, call, decision, response) {
216
- if (decision.action !== 'allow' && decision.action !== 'downgrade' && decision.action !== 'shadow')
217
- return;
218
- const usage = extractUsage(response);
219
- if (!usage)
220
- return;
221
- const estimatedCents = (0, cost_table_1.computeCallCents)(decision.modelResolved, call.inputTokens, call.outputTokens);
222
- const actualCents = (0, cost_table_1.computeCallCents)(decision.modelResolved, usage.inputTokens, usage.outputTokens);
223
- if (estimatedCents === null || actualCents === null)
224
- return;
225
- const delta = actualCents - estimatedCents;
226
- if (delta === 0)
227
- return;
228
- await (0, policy_1.adjustPolicyWindowSpend)(policy, guard.getSpendStore(), delta);
294
+ function serializeMessageContent(message) {
295
+ const content = message?.content ?? message;
296
+ return extractText(content);
297
+ }
298
+ function extractText(value) {
299
+ if (typeof value === 'string')
300
+ return value;
301
+ if (Array.isArray(value))
302
+ return value.map(extractText).join('\n');
303
+ if (value && typeof value === 'object') {
304
+ const obj = value;
305
+ if (typeof obj.text === 'string')
306
+ return obj.text;
307
+ if (typeof obj.content === 'string')
308
+ return obj.content;
309
+ if (Array.isArray(obj.content))
310
+ return extractText(obj.content);
311
+ return JSON.stringify(value);
312
+ }
313
+ return value == null ? '' : String(value);
314
+ }
315
+ function outputTokensFromParams(params) {
316
+ const obj = params;
317
+ const value = obj?.max_completion_tokens ?? obj?.max_tokens ?? obj?.maxTokens;
318
+ return Number.isSafeInteger(value) && value >= 0 ? value : 512;
229
319
  }
230
320
  function extractUsage(response) {
231
321
  const usage = response?.usage;
232
- if (!usage)
322
+ return usageCountsFromObject(usage);
323
+ }
324
+ function usageCountsFromObject(usage) {
325
+ if (!usage || typeof usage !== 'object')
233
326
  return null;
234
- const input = usage.prompt_tokens ?? usage.input_tokens;
235
- const output = usage.completion_tokens ?? usage.output_tokens;
327
+ const obj = usage;
328
+ const input = obj.prompt_tokens ?? obj.input_tokens ?? obj.inputTokens;
329
+ const output = obj.completion_tokens ?? obj.output_tokens ?? obj.outputTokens;
236
330
  if (!Number.isSafeInteger(input) || !Number.isSafeInteger(output))
237
331
  return null;
238
332
  if (input < 0 || output < 0)
239
333
  return null;
240
334
  return { inputTokens: input, outputTokens: output };
241
335
  }
336
+ async function trueUpSpend(guard, decision, response) {
337
+ if (decision.action !== 'allow' && decision.action !== 'downgrade' && decision.action !== 'shadow')
338
+ return;
339
+ const usage = extractUsage(response);
340
+ if (!usage)
341
+ return;
342
+ await guard.settleStreamUsage(decision.decisionId, usage.inputTokens, usage.outputTokens, { partial: false });
343
+ }
344
+ function wrapOpenAIStream(stream, guard, decision, call) {
345
+ const tracker = new OpenAIStreamUsageTracker(guard, call);
346
+ return wrapUsageStream(stream, {
347
+ onChunk: (chunk) => tracker.observe(chunk),
348
+ settle: (partial, reason) => {
349
+ const usage = tracker.usage();
350
+ return guard.settleStreamUsage(decision.decisionId, usage.inputTokens, usage.outputTokens, { partial, reason });
351
+ },
352
+ });
353
+ }
354
+ class OpenAIStreamUsageTracker {
355
+ guard;
356
+ call;
357
+ usageInput = null;
358
+ usageOutput = null;
359
+ content = '';
360
+ constructor(guard, call) {
361
+ this.guard = guard;
362
+ this.call = call;
363
+ }
364
+ observe(chunk) {
365
+ const usage = extractUsage(chunk);
366
+ if (usage) {
367
+ this.usageInput = usage.inputTokens;
368
+ this.usageOutput = usage.outputTokens;
369
+ }
370
+ const choices = chunk?.choices;
371
+ if (!Array.isArray(choices))
372
+ return;
373
+ for (const choice of choices) {
374
+ const delta = choice?.delta;
375
+ if (typeof delta?.content === 'string')
376
+ this.content += delta.content;
377
+ }
378
+ }
379
+ usage() {
380
+ return {
381
+ inputTokens: this.usageInput ?? this.call.inputTokens,
382
+ outputTokens: this.usageOutput ?? this.guard.estimateTokens(this.content),
383
+ };
384
+ }
385
+ }
386
+ function wrapUsageStream(stream, hooks) {
387
+ return (async function* wrapped() {
388
+ let completed = false;
389
+ let settled = false;
390
+ const settleOnce = async (partial, reason) => {
391
+ if (settled)
392
+ return;
393
+ settled = true;
394
+ try {
395
+ await hooks.settle(partial, reason);
396
+ }
397
+ catch {
398
+ return;
399
+ }
400
+ };
401
+ try {
402
+ for await (const chunk of stream) {
403
+ hooks.onChunk(chunk);
404
+ yield chunk;
405
+ }
406
+ completed = true;
407
+ }
408
+ catch (err) {
409
+ await settleOnce(true, errorReason(err));
410
+ return;
411
+ }
412
+ finally {
413
+ await settleOnce(!completed, completed ? undefined : 'stream_closed_before_completion');
414
+ }
415
+ })();
416
+ }
417
+ function errorReason(err) {
418
+ if (err instanceof Error && err.message)
419
+ return err.message.slice(0, 120);
420
+ return 'stream_error';
421
+ }
422
+ function validateTokenCount(name, value) {
423
+ if (!Number.isSafeInteger(value) || value < 0) {
424
+ throw new Error(`${name} must be a non-negative safe integer`);
425
+ }
426
+ }
242
427
  //# sourceMappingURL=spend-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spend-guard.js","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spend-guard.js","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,wBAAgB,eAAe,IAAI,eAAe,CAOjD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAKjD;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CAKlD;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAKzD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAwCxD"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAgB,eAAe,IAAI,eAAe,CAOjD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAOjD;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CAIlD;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAIzD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAwCxD"}