@agentguard-run/spend 0.2.2 → 0.3.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 (80) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/LICENSE +1 -1
  3. package/README.es-419.md +28 -102
  4. package/README.md +50 -124
  5. package/README.pt-BR.md +28 -102
  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/colors.d.ts +8 -3
  19. package/dist/cli/colors.d.ts.map +1 -1
  20. package/dist/cli/colors.js +93 -4
  21. package/dist/cli/colors.js.map +1 -1
  22. package/dist/cli/demo.d.ts.map +1 -1
  23. package/dist/cli/demo.js +23 -2
  24. package/dist/cli/demo.js.map +1 -1
  25. package/dist/cli/main.d.ts +0 -6
  26. package/dist/cli/main.d.ts.map +1 -1
  27. package/dist/cli/main.js +36 -16
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/cli/models.d.ts +18 -0
  30. package/dist/cli/models.d.ts.map +1 -0
  31. package/dist/cli/models.js +277 -0
  32. package/dist/cli/models.js.map +1 -0
  33. package/dist/cli/tips.d.ts +21 -0
  34. package/dist/cli/tips.d.ts.map +1 -0
  35. package/dist/cli/tips.js +191 -0
  36. package/dist/cli/tips.js.map +1 -0
  37. package/dist/cli/wizard.d.ts +27 -0
  38. package/dist/cli/wizard.d.ts.map +1 -0
  39. package/dist/cli/wizard.js +182 -0
  40. package/dist/cli/wizard.js.map +1 -0
  41. package/dist/cost-table.d.ts +11 -36
  42. package/dist/cost-table.d.ts.map +1 -1
  43. package/dist/cost-table.js +114 -45
  44. package/dist/cost-table.js.map +1 -1
  45. package/dist/index.d.ts +6 -3
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +17 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/openrouter-catalog.d.ts +56 -0
  50. package/dist/openrouter-catalog.d.ts.map +1 -0
  51. package/dist/openrouter-catalog.js +183 -0
  52. package/dist/openrouter-catalog.js.map +1 -0
  53. package/dist/spend-guard.d.ts +38 -55
  54. package/dist/spend-guard.d.ts.map +1 -1
  55. package/dist/spend-guard.js +268 -83
  56. package/dist/spend-guard.js.map +1 -1
  57. package/dist/telemetry.d.ts.map +1 -1
  58. package/dist/telemetry.js +52 -21
  59. package/dist/telemetry.js.map +1 -1
  60. package/dist/templates/index.d.ts +17 -0
  61. package/dist/templates/index.d.ts.map +1 -0
  62. package/dist/templates/index.js +100 -0
  63. package/dist/templates/index.js.map +1 -0
  64. package/dist/types.d.ts +18 -3
  65. package/dist/types.d.ts.map +1 -1
  66. package/package.json +32 -4
  67. package/src/bindings/anthropic.ts +142 -0
  68. package/src/bindings/bedrock.ts +200 -0
  69. package/src/cli/auth.ts +145 -0
  70. package/src/cli/models.ts +236 -0
  71. package/src/cli/tips.ts +161 -0
  72. package/src/cli/wizard.ts +160 -0
  73. package/src/openrouter-catalog.ts +180 -0
  74. package/src/templates/agent-support.yaml +30 -0
  75. package/src/templates/chargeback-evidence.yaml +30 -0
  76. package/src/templates/code-scan.yaml +30 -0
  77. package/src/templates/index.ts +109 -0
  78. package/src/templates/payment-approval.yaml +30 -0
  79. package/src/templates/risk-review.yaml +30 -0
  80. package/tests/fixtures/openrouter-catalog.json +1 -0
@@ -1,86 +1,149 @@
1
1
  "use strict";
2
2
  /**
3
- * AgentGuard(TM) Spend: Per-model cost table
3
+ * AgentGuard(TM) Spend: Per-model cost table.
4
4
  *
5
- * Costs are USD cents per 1,000 tokens (integer math).
6
- * Values reflect publicly-listed pricing as of May 2026 and are intentionally
7
- * conservative (rounded UP) so spend caps fire early rather than late.
5
+ * Costs are USD cents per 1,000 tokens. Customers can override this table
6
+ * locally via setCostOverride() or ~/.agentguard/cost-overrides.json.
8
7
  *
9
- * Customers can override this table via setCostOverride() when enterprise
10
- * contracts have negotiated rates that differ from public list pricing.
11
- *
12
- * Licensed under the alpha evaluation license; see LICENSE in the package
13
- * root. Patent notice: Protected by U.S. patent-pending technology
8
+ * Patent notice: Protected by U.S. patent-pending technology
14
9
  * (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
15
10
  * 64/071,781; 64/071,789).
16
11
  */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
17
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.DEFAULT_COST_OVERRIDES_PATH = void 0;
18
47
  exports.setCostOverride = setCostOverride;
19
48
  exports.clearCostOverrides = clearCostOverrides;
49
+ exports.listCostOverrides = listCostOverrides;
50
+ exports.persistCostOverrides = persistCostOverrides;
51
+ exports.loadPersistedCostOverrides = loadPersistedCostOverrides;
20
52
  exports.getModelCost = getModelCost;
21
53
  exports.computeCallCents = computeCallCents;
22
54
  exports.inferProvider = inferProvider;
23
- /**
24
- * Default cost table. Values are list-price ceilings as of May 2026.
25
- * Update via setCostOverride() for negotiated enterprise rates.
26
- */
27
- const DEFAULT_COSTS = {
28
- // OpenAI
55
+ exports.knownModelCosts = knownModelCosts;
56
+ const fs = __importStar(require("fs"));
57
+ const os = __importStar(require("os"));
58
+ const path = __importStar(require("path"));
59
+ const STATE_DIR = process.env.AGENTGUARD_HOME || path.join(os.homedir(), '.agentguard');
60
+ exports.DEFAULT_COST_OVERRIDES_PATH = path.join(STATE_DIR, 'cost-overrides.json');
61
+ const BASE_COSTS = {
29
62
  'gpt-5': { inputCentsPerKtok: 0.5, outputCentsPerKtok: 1.5 },
30
63
  'gpt-5-mini': { inputCentsPerKtok: 0.05, outputCentsPerKtok: 0.2 },
31
64
  'gpt-4o': { inputCentsPerKtok: 0.25, outputCentsPerKtok: 1.0 },
32
65
  'gpt-4o-mini': { inputCentsPerKtok: 0.015, outputCentsPerKtok: 0.06 },
33
- // Anthropic
34
66
  'claude-opus-4-7': { inputCentsPerKtok: 2.0, outputCentsPerKtok: 10.0 },
35
67
  'claude-opus-4-6': { inputCentsPerKtok: 1.5, outputCentsPerKtok: 7.5 },
36
68
  'claude-sonnet-4-6': { inputCentsPerKtok: 0.3, outputCentsPerKtok: 1.5 },
37
69
  'claude-sonnet-4-5': { inputCentsPerKtok: 0.3, outputCentsPerKtok: 1.5 },
38
70
  'claude-haiku-4-5': { inputCentsPerKtok: 0.1, outputCentsPerKtok: 0.5 },
39
- // Google Gemini
40
71
  'gemini-3.1-pro-preview': { inputCentsPerKtok: 0.2, outputCentsPerKtok: 1.0 },
41
72
  'gemini-3-flash-preview': { inputCentsPerKtok: 0.02, outputCentsPerKtok: 0.1 },
42
73
  'gemini-3-pro-image-preview': { inputCentsPerKtok: 0.4, outputCentsPerKtok: 2.0 },
43
- // AWS Bedrock - common models (rates vary by region; these are us-east-1 ceilings)
44
74
  'anthropic.claude-opus-4-v1:0': { inputCentsPerKtok: 1.5, outputCentsPerKtok: 7.5 },
45
75
  'anthropic.claude-sonnet-4-v1:0': { inputCentsPerKtok: 0.3, outputCentsPerKtok: 1.5 },
46
76
  'amazon.nova-pro-v1:0': { inputCentsPerKtok: 0.08, outputCentsPerKtok: 0.32 },
47
77
  'amazon.nova-lite-v1:0': { inputCentsPerKtok: 0.006, outputCentsPerKtok: 0.024 },
48
78
  };
49
- /** Runtime override storage. Keyed by exact model name. */
79
+ const OPENROUTER_ALIASES = {
80
+ 'gpt-5': 'openai/gpt-5',
81
+ 'gpt-5-mini': 'openai/gpt-5-mini',
82
+ 'gpt-4o': 'openai/gpt-4o',
83
+ 'gpt-4o-mini': 'openai/gpt-4o-mini',
84
+ 'claude-opus-4-7': 'anthropic/claude-opus-4-7',
85
+ 'claude-opus-4-6': 'anthropic/claude-opus-4-6',
86
+ 'claude-sonnet-4-6': 'anthropic/claude-sonnet-4-6',
87
+ 'claude-sonnet-4-5': 'anthropic/claude-sonnet-4-5',
88
+ 'claude-haiku-4-5': 'anthropic/claude-haiku-4-5',
89
+ 'gemini-3.1-pro-preview': 'google/gemini-3.1-pro-preview',
90
+ 'gemini-3-flash-preview': 'google/gemini-3-flash-preview',
91
+ 'gemini-3-pro-image-preview': 'google/gemini-3-pro-image-preview',
92
+ };
93
+ const DEFAULT_COSTS = { ...BASE_COSTS };
94
+ for (const [base, alias] of Object.entries(OPENROUTER_ALIASES)) {
95
+ const cost = BASE_COSTS[base];
96
+ if (cost)
97
+ DEFAULT_COSTS[alias] = cost;
98
+ }
50
99
  const overrides = new Map();
51
- /**
52
- * Override the cost for a specific model. Used when the customer has negotiated
53
- * enterprise rates that differ from list pricing.
54
- */
100
+ let persistedLoaded = false;
101
+ loadPersistedCostOverrides();
55
102
  function setCostOverride(model, cost) {
56
103
  validateCost(cost);
57
- overrides.set(model, cost);
104
+ overrides.set(model, { ...cost });
58
105
  }
59
- /**
60
- * Clear all cost overrides. Mainly for testing.
61
- */
62
106
  function clearCostOverrides() {
63
107
  overrides.clear();
64
108
  }
65
- /**
66
- * Look up the cost for a model. Returns null if the model is unknown AND no
67
- * override has been registered. Callers should treat unknown models defensively
68
- * (e.g., by registering an override or by rejecting the call).
69
- */
109
+ function listCostOverrides() {
110
+ loadPersistedCostOverrides();
111
+ return Object.fromEntries([...overrides.entries()].map(([model, cost]) => [model, { ...cost }]));
112
+ }
113
+ function persistCostOverrides(filePath = exports.DEFAULT_COST_OVERRIDES_PATH) {
114
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
115
+ fs.writeFileSync(filePath, JSON.stringify(listCostOverrides(), null, 2) + '\n', { mode: 0o600 });
116
+ try {
117
+ fs.chmodSync(filePath, 0o600);
118
+ }
119
+ catch {
120
+ return;
121
+ }
122
+ }
123
+ function loadPersistedCostOverrides(filePath = exports.DEFAULT_COST_OVERRIDES_PATH) {
124
+ if (persistedLoaded && filePath === exports.DEFAULT_COST_OVERRIDES_PATH)
125
+ return overrides.size;
126
+ persistedLoaded = true;
127
+ try {
128
+ const parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));
129
+ let count = 0;
130
+ for (const [model, cost] of Object.entries(parsed)) {
131
+ validateCost(cost);
132
+ overrides.set(model, { ...cost });
133
+ count += 1;
134
+ }
135
+ return count;
136
+ }
137
+ catch {
138
+ return 0;
139
+ }
140
+ }
70
141
  function getModelCost(model) {
142
+ loadPersistedCostOverrides();
71
143
  if (overrides.has(model))
72
144
  return overrides.get(model) ?? null;
73
145
  return DEFAULT_COSTS[model] ?? null;
74
146
  }
75
- /**
76
- * Compute the cents this call would cost given input + output token counts.
77
- * Returns null if the model is unknown (caller must decide how to handle).
78
- *
79
- * Formula: cents = ceil( (cents_per_ktok * tokens) / 1000 )
80
- *
81
- * Rounds UP so caps fire conservatively (a call that would cost 19.4c
82
- * counts as 20c against the budget).
83
- */
84
147
  function computeCallCents(model, inputTokens, outputTokens) {
85
148
  validateTokenCount('inputTokens', inputTokens);
86
149
  validateTokenCount('outputTokens', outputTokens);
@@ -96,11 +159,14 @@ function computeCallCents(model, inputTokens, outputTokens) {
96
159
  }
97
160
  return total;
98
161
  }
99
- /**
100
- * Infer the Provider enum from a model name. Used when callers do not pass
101
- * provider explicitly. Returns 'unknown' if no pattern matches.
102
- */
103
162
  function inferProvider(model) {
163
+ const providerPrefix = model.split('/')[0];
164
+ if (providerPrefix === 'openai')
165
+ return 'openai';
166
+ if (providerPrefix === 'anthropic')
167
+ return 'anthropic';
168
+ if (providerPrefix === 'google')
169
+ return 'gemini';
104
170
  if (model.startsWith('gpt-') || model.startsWith('o1') || model.startsWith('o3'))
105
171
  return 'openai';
106
172
  if (model.startsWith('claude-'))
@@ -113,6 +179,9 @@ function inferProvider(model) {
113
179
  return 'bedrock';
114
180
  return 'unknown';
115
181
  }
182
+ function knownModelCosts() {
183
+ return { ...DEFAULT_COSTS, ...listCostOverrides() };
184
+ }
116
185
  function validateTokenCount(name, value) {
117
186
  if (!Number.isSafeInteger(value) || value < 0) {
118
187
  throw new Error(`${name} must be a non-negative safe integer`);
@@ -1 +1 @@
1
- {"version":3,"file":"cost-table.js","sourceRoot":"","sources":["../src/cost-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-table.js","sourceRoot":"","sources":["../src/cost-table.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,14 +6,17 @@
6
6
  * 64/071,781; 64/071,789).
7
7
  */
8
8
  export type { SpendAction, SpendWindow, Provider, EnforcementMode, CapabilityTier, SpendCap, SpendScope, SpendPolicy, CallContext, SpendDecision, SignedDecisionLogEntry, SpendStore, DecisionLogStore, } from './types';
9
- export { getModelCost, setCostOverride, clearCostOverrides, computeCallCents, inferProvider, type ModelCost, } from './cost-table';
9
+ export { getModelCost, setCostOverride, clearCostOverrides, computeCallCents, inferProvider, listCostOverrides, loadPersistedCostOverrides, persistCostOverrides, knownModelCosts, type ModelCost, } from './cost-table';
10
10
  export { evaluatePolicy, buildScopeKey, adjustPolicyWindowSpend } from './policy';
11
11
  export { canonicalJson, sha256Hex, computeEntryHash, computeSignerFingerprint, signDecision, verifyEntry, verifyChain, GENESIS_PREVIOUS_HASH, InMemoryDecisionLogStore, } from './decision-log';
12
12
  export { InMemorySpendStore } from './store-memory';
13
13
  export { telemetryStatus, enableTelemetry, disableTelemetry, resetTelemetryInstallId, recordTelemetryEvent, type TelemetryStatus, } from './telemetry';
14
- export { SpendGuard, withSpendGuard, AgentGuardBlockedError, type SpendGuardConfig, type OpenAIBindingOptions, } from './spend-guard';
14
+ export { fetchCatalog, getCachedCatalog, syncPricingIntoCostTable, persistOverrides, modelCostFromOpenRouter, type OpenRouterCatalog, type OpenRouterModel, type SyncPricingResult, } from './openrouter-catalog';
15
+ export { SpendGuard, withSpendGuard, AgentGuardBlockedError, type SpendGuardConfig, type OpenAIBindingOptions, type StreamSettlementOptions, type StreamSettlementResult, } from './spend-guard';
16
+ export { withSpendGuardAnthropic, type AnthropicBindingOptions } from './bindings/anthropic';
17
+ export { withSpendGuardBedrock, type BedrockBindingOptions } from './bindings/bedrock';
15
18
  export { DEFAULT_LOCALE, SUPPORTED_LOCALES, TRANSLATIONS, type SupportedLocale, resolveLocale, t, formatBlockedTrace, type BlockedTraceArgs, } from './i18n';
16
- export declare const AGENTGUARD_SPEND_VERSION = "0.2.2";
19
+ export declare const AGENTGUARD_SPEND_VERSION = "0.3.0";
17
20
  /** Patent marking. 35 U.S.C. § 287 constructive notice. */
18
21
  export declare const PATENT_NOTICE: string;
19
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,YAAY,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGlF,OAAO,EACL,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,KAAK,eAAe,EACpB,aAAa,EACb,CAAC,EACD,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,2DAA2D;AAC3D,eAAO,MAAM,aAAa,QAG8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,YAAY,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGlF,OAAO,EACL,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,KAAK,eAAe,EACpB,aAAa,EACb,CAAC,EACD,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,2DAA2D;AAC3D,eAAO,MAAM,aAAa,QAG8B,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * 64/071,781; 64/071,789).
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.PATENT_NOTICE = exports.AGENTGUARD_SPEND_VERSION = exports.formatBlockedTrace = exports.t = exports.resolveLocale = exports.TRANSLATIONS = exports.SUPPORTED_LOCALES = exports.DEFAULT_LOCALE = exports.AgentGuardBlockedError = exports.withSpendGuard = exports.SpendGuard = exports.recordTelemetryEvent = exports.resetTelemetryInstallId = exports.disableTelemetry = exports.enableTelemetry = exports.telemetryStatus = exports.InMemorySpendStore = exports.InMemoryDecisionLogStore = exports.GENESIS_PREVIOUS_HASH = exports.verifyChain = exports.verifyEntry = exports.signDecision = exports.computeSignerFingerprint = exports.computeEntryHash = exports.sha256Hex = exports.canonicalJson = exports.adjustPolicyWindowSpend = exports.buildScopeKey = exports.evaluatePolicy = exports.inferProvider = exports.computeCallCents = exports.clearCostOverrides = exports.setCostOverride = exports.getModelCost = void 0;
10
+ exports.PATENT_NOTICE = exports.AGENTGUARD_SPEND_VERSION = exports.formatBlockedTrace = exports.t = exports.resolveLocale = exports.TRANSLATIONS = exports.SUPPORTED_LOCALES = exports.DEFAULT_LOCALE = exports.withSpendGuardBedrock = exports.withSpendGuardAnthropic = exports.AgentGuardBlockedError = exports.withSpendGuard = exports.SpendGuard = exports.modelCostFromOpenRouter = exports.persistOverrides = exports.syncPricingIntoCostTable = exports.getCachedCatalog = exports.fetchCatalog = exports.recordTelemetryEvent = exports.resetTelemetryInstallId = exports.disableTelemetry = exports.enableTelemetry = exports.telemetryStatus = exports.InMemorySpendStore = exports.InMemoryDecisionLogStore = exports.GENESIS_PREVIOUS_HASH = exports.verifyChain = exports.verifyEntry = exports.signDecision = exports.computeSignerFingerprint = exports.computeEntryHash = exports.sha256Hex = exports.canonicalJson = exports.adjustPolicyWindowSpend = exports.buildScopeKey = exports.evaluatePolicy = exports.knownModelCosts = exports.persistCostOverrides = exports.loadPersistedCostOverrides = exports.listCostOverrides = exports.inferProvider = exports.computeCallCents = exports.clearCostOverrides = exports.setCostOverride = exports.getModelCost = void 0;
11
11
  const telemetry_1 = require("./telemetry");
12
12
  // Cost table
13
13
  var cost_table_1 = require("./cost-table");
@@ -16,6 +16,10 @@ Object.defineProperty(exports, "setCostOverride", { enumerable: true, get: funct
16
16
  Object.defineProperty(exports, "clearCostOverrides", { enumerable: true, get: function () { return cost_table_1.clearCostOverrides; } });
17
17
  Object.defineProperty(exports, "computeCallCents", { enumerable: true, get: function () { return cost_table_1.computeCallCents; } });
18
18
  Object.defineProperty(exports, "inferProvider", { enumerable: true, get: function () { return cost_table_1.inferProvider; } });
19
+ Object.defineProperty(exports, "listCostOverrides", { enumerable: true, get: function () { return cost_table_1.listCostOverrides; } });
20
+ Object.defineProperty(exports, "loadPersistedCostOverrides", { enumerable: true, get: function () { return cost_table_1.loadPersistedCostOverrides; } });
21
+ Object.defineProperty(exports, "persistCostOverrides", { enumerable: true, get: function () { return cost_table_1.persistCostOverrides; } });
22
+ Object.defineProperty(exports, "knownModelCosts", { enumerable: true, get: function () { return cost_table_1.knownModelCosts; } });
19
23
  // Policy engine
20
24
  var policy_1 = require("./policy");
21
25
  Object.defineProperty(exports, "evaluatePolicy", { enumerable: true, get: function () { return policy_1.evaluatePolicy; } });
@@ -42,11 +46,22 @@ Object.defineProperty(exports, "enableTelemetry", { enumerable: true, get: funct
42
46
  Object.defineProperty(exports, "disableTelemetry", { enumerable: true, get: function () { return telemetry_2.disableTelemetry; } });
43
47
  Object.defineProperty(exports, "resetTelemetryInstallId", { enumerable: true, get: function () { return telemetry_2.resetTelemetryInstallId; } });
44
48
  Object.defineProperty(exports, "recordTelemetryEvent", { enumerable: true, get: function () { return telemetry_2.recordTelemetryEvent; } });
49
+ // OpenRouter catalog
50
+ var openrouter_catalog_1 = require("./openrouter-catalog");
51
+ Object.defineProperty(exports, "fetchCatalog", { enumerable: true, get: function () { return openrouter_catalog_1.fetchCatalog; } });
52
+ Object.defineProperty(exports, "getCachedCatalog", { enumerable: true, get: function () { return openrouter_catalog_1.getCachedCatalog; } });
53
+ Object.defineProperty(exports, "syncPricingIntoCostTable", { enumerable: true, get: function () { return openrouter_catalog_1.syncPricingIntoCostTable; } });
54
+ Object.defineProperty(exports, "persistOverrides", { enumerable: true, get: function () { return openrouter_catalog_1.persistOverrides; } });
55
+ Object.defineProperty(exports, "modelCostFromOpenRouter", { enumerable: true, get: function () { return openrouter_catalog_1.modelCostFromOpenRouter; } });
45
56
  // Core wrapper
46
57
  var spend_guard_1 = require("./spend-guard");
47
58
  Object.defineProperty(exports, "SpendGuard", { enumerable: true, get: function () { return spend_guard_1.SpendGuard; } });
48
59
  Object.defineProperty(exports, "withSpendGuard", { enumerable: true, get: function () { return spend_guard_1.withSpendGuard; } });
49
60
  Object.defineProperty(exports, "AgentGuardBlockedError", { enumerable: true, get: function () { return spend_guard_1.AgentGuardBlockedError; } });
61
+ var anthropic_1 = require("./bindings/anthropic");
62
+ Object.defineProperty(exports, "withSpendGuardAnthropic", { enumerable: true, get: function () { return anthropic_1.withSpendGuardAnthropic; } });
63
+ var bedrock_1 = require("./bindings/bedrock");
64
+ Object.defineProperty(exports, "withSpendGuardBedrock", { enumerable: true, get: function () { return bedrock_1.withSpendGuardBedrock; } });
50
65
  // Localization (en-US, es-419, pt-BR)
51
66
  var i18n_1 = require("./i18n");
52
67
  Object.defineProperty(exports, "DEFAULT_LOCALE", { enumerable: true, get: function () { return i18n_1.DEFAULT_LOCALE; } });
@@ -55,7 +70,7 @@ Object.defineProperty(exports, "TRANSLATIONS", { enumerable: true, get: function
55
70
  Object.defineProperty(exports, "resolveLocale", { enumerable: true, get: function () { return i18n_1.resolveLocale; } });
56
71
  Object.defineProperty(exports, "t", { enumerable: true, get: function () { return i18n_1.t; } });
57
72
  Object.defineProperty(exports, "formatBlockedTrace", { enumerable: true, get: function () { return i18n_1.formatBlockedTrace; } });
58
- exports.AGENTGUARD_SPEND_VERSION = '0.2.2';
73
+ exports.AGENTGUARD_SPEND_VERSION = '0.3.0';
59
74
  /** Patent marking. 35 U.S.C. § 287 constructive notice. */
60
75
  exports.PATENT_NOTICE = 'Protected by U.S. patent-pending technology ' +
61
76
  '(App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; ' +
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,2CAA8E;AAmB9E,aAAa;AACb,2CAOsB;AANpB,0GAAA,YAAY,OAAA;AACZ,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AAIf,gBAAgB;AAChB,mCAAkF;AAAzE,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,iHAAA,uBAAuB,OAAA;AAE/D,eAAe;AACf,+CAUwB;AATtB,6GAAA,aAAa,OAAA;AACb,yGAAA,SAAS,OAAA;AACT,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AACxB,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,qHAAA,qBAAqB,OAAA;AACrB,wHAAA,wBAAwB,OAAA;AAG1B,wBAAwB;AACxB,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAE3B,qBAAqB;AACrB,yCAOqB;AANnB,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AAItB,eAAe;AACf,6CAMuB;AALrB,yGAAA,UAAU,OAAA;AACV,6GAAA,cAAc,OAAA;AACd,qHAAA,sBAAsB,OAAA;AAKxB,sCAAsC;AACtC,+BASgB;AARd,sGAAA,cAAc,OAAA;AACd,yGAAA,iBAAiB,OAAA;AACjB,oGAAA,YAAY,OAAA;AAEZ,qGAAA,aAAa,OAAA;AACb,yFAAA,CAAC,OAAA;AACD,0GAAA,kBAAkB,OAAA;AAIP,QAAA,wBAAwB,GAAG,OAAO,CAAC;AAEhD,2DAA2D;AAC9C,QAAA,aAAa,GACxB,8CAA8C;IAC9C,6DAA6D;IAC7D,sDAAsD,CAAC;AACzD,IAAA,gCAAuB,EAAC,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,2CAA8E;AAmB9E,aAAa;AACb,2CAWsB;AAVpB,0GAAA,YAAY,OAAA;AACZ,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,+GAAA,iBAAiB,OAAA;AACjB,wHAAA,0BAA0B,OAAA;AAC1B,kHAAA,oBAAoB,OAAA;AACpB,6GAAA,eAAe,OAAA;AAIjB,gBAAgB;AAChB,mCAAkF;AAAzE,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,iHAAA,uBAAuB,OAAA;AAE/D,eAAe;AACf,+CAUwB;AATtB,6GAAA,aAAa,OAAA;AACb,yGAAA,SAAS,OAAA;AACT,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AACxB,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,qHAAA,qBAAqB,OAAA;AACrB,wHAAA,wBAAwB,OAAA;AAG1B,wBAAwB;AACxB,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAE3B,qBAAqB;AACrB,yCAOqB;AANnB,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AAItB,qBAAqB;AACrB,2DAS8B;AAR5B,kHAAA,YAAY,OAAA;AACZ,sHAAA,gBAAgB,OAAA;AAChB,8HAAA,wBAAwB,OAAA;AACxB,sHAAA,gBAAgB,OAAA;AAChB,6HAAA,uBAAuB,OAAA;AAMzB,eAAe;AACf,6CAQuB;AAPrB,yGAAA,UAAU,OAAA;AACV,6GAAA,cAAc,OAAA;AACd,qHAAA,sBAAsB,OAAA;AAOxB,kDAA6F;AAApF,oHAAA,uBAAuB,OAAA;AAChC,8CAAuF;AAA9E,gHAAA,qBAAqB,OAAA;AAE9B,sCAAsC;AACtC,+BASgB;AARd,sGAAA,cAAc,OAAA;AACd,yGAAA,iBAAiB,OAAA;AACjB,oGAAA,YAAY,OAAA;AAEZ,qGAAA,aAAa,OAAA;AACb,yFAAA,CAAC,OAAA;AACD,0GAAA,kBAAkB,OAAA;AAIP,QAAA,wBAAwB,GAAG,OAAO,CAAC;AAEhD,2DAA2D;AAC9C,QAAA,aAAa,GACxB,8CAA8C;IAC9C,6DAA6D;IAC7D,sDAAsD,CAAC;AACzD,IAAA,gCAAuB,EAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * AgentGuard(TM) Spend: OpenRouter catalog sync.
3
+ *
4
+ * OpenRouter requests go directly from the customer runtime to openrouter.ai.
5
+ * AgentGuard infrastructure does not receive prompts, completions, keys,
6
+ * policy files, or pricing overrides.
7
+ *
8
+ * Patent notice: Protected by U.S. patent-pending technology
9
+ * (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
10
+ * 64/071,781; 64/071,789).
11
+ */
12
+ import { type ModelCost } from './cost-table';
13
+ export interface OpenRouterPricing {
14
+ prompt?: string;
15
+ completion?: string;
16
+ image?: string;
17
+ request?: string;
18
+ }
19
+ export interface OpenRouterModel {
20
+ id: string;
21
+ name?: string;
22
+ context_length?: number;
23
+ pricing?: OpenRouterPricing;
24
+ architecture?: {
25
+ modality?: string;
26
+ tokenizer?: string;
27
+ instruct_type?: string | null;
28
+ };
29
+ top_provider?: {
30
+ context_length?: number;
31
+ max_completion_tokens?: number | null;
32
+ is_moderated?: boolean;
33
+ };
34
+ per_request_limits?: Record<string, unknown> | null;
35
+ [key: string]: unknown;
36
+ }
37
+ export interface OpenRouterCatalog {
38
+ data: OpenRouterModel[];
39
+ fetchedAt?: string;
40
+ }
41
+ export interface FetchCatalogOptions {
42
+ ttlMs?: number;
43
+ force?: boolean;
44
+ endpoint?: string;
45
+ cachePath?: string;
46
+ }
47
+ export interface SyncPricingResult {
48
+ count: number;
49
+ applied: string[];
50
+ }
51
+ export declare function fetchCatalog(opts?: FetchCatalogOptions): Promise<OpenRouterCatalog>;
52
+ export declare function getCachedCatalog(cachePath?: string): OpenRouterCatalog | null;
53
+ export declare function syncPricingIntoCostTable(opts?: FetchCatalogOptions): Promise<SyncPricingResult>;
54
+ export declare function persistOverrides(filePath?: string): void;
55
+ export declare function modelCostFromOpenRouter(model: OpenRouterModel): ModelCost | null;
56
+ //# sourceMappingURL=openrouter-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-catalog.d.ts","sourceRoot":"","sources":["../src/openrouter-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EAAsE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAElH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACxF,YAAY,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1G,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AASD,wBAAsB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuB7F;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,MAA2B,GAAG,iBAAiB,GAAG,IAAI,CAGjG;AAED,wBAAsB,wBAAwB,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAWzG;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAUhF"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * AgentGuard(TM) Spend: OpenRouter catalog sync.
4
+ *
5
+ * OpenRouter requests go directly from the customer runtime to openrouter.ai.
6
+ * AgentGuard infrastructure does not receive prompts, completions, keys,
7
+ * policy files, or pricing overrides.
8
+ *
9
+ * Patent notice: Protected by U.S. patent-pending technology
10
+ * (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
11
+ * 64/071,781; 64/071,789).
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.fetchCatalog = fetchCatalog;
48
+ exports.getCachedCatalog = getCachedCatalog;
49
+ exports.syncPricingIntoCostTable = syncPricingIntoCostTable;
50
+ exports.persistOverrides = persistOverrides;
51
+ exports.modelCostFromOpenRouter = modelCostFromOpenRouter;
52
+ const fs = __importStar(require("fs"));
53
+ const https = __importStar(require("https"));
54
+ const os = __importStar(require("os"));
55
+ const path = __importStar(require("path"));
56
+ const cost_table_1 = require("./cost-table");
57
+ const DAY_MS = 24 * 60 * 60 * 1000;
58
+ const STATE_DIR = process.env.AGENTGUARD_HOME || path.join(os.homedir(), '.agentguard');
59
+ const DEFAULT_CACHE_PATH = path.join(STATE_DIR, 'openrouter-catalog.json');
60
+ const DEFAULT_ENDPOINT = 'https://openrouter.ai/api/v1/models';
61
+ let memoryCatalog = null;
62
+ async function fetchCatalog(opts = {}) {
63
+ const ttlMs = opts.ttlMs ?? DAY_MS;
64
+ const cachePath = opts.cachePath ?? DEFAULT_CACHE_PATH;
65
+ if (!opts.force) {
66
+ const cached = readCachedCatalog(cachePath, ttlMs);
67
+ if (cached)
68
+ return cached;
69
+ }
70
+ const fixturePath = process.env.AGENTGUARD_OPENROUTER_CATALOG_FIXTURE;
71
+ if (fixturePath) {
72
+ const fixture = parseCatalog(fs.readFileSync(fixturePath, 'utf8'));
73
+ return saveCatalog(fixture, cachePath);
74
+ }
75
+ try {
76
+ const body = await getJson(opts.endpoint ?? DEFAULT_ENDPOINT);
77
+ const catalog = parseCatalog(body);
78
+ return saveCatalog(catalog, cachePath);
79
+ }
80
+ catch (err) {
81
+ const cached = readCachedCatalog(cachePath, Number.MAX_SAFE_INTEGER);
82
+ if (cached)
83
+ return cached;
84
+ throw err;
85
+ }
86
+ }
87
+ function getCachedCatalog(cachePath = DEFAULT_CACHE_PATH) {
88
+ if (memoryCatalog)
89
+ return memoryCatalog;
90
+ return readCachedCatalog(cachePath, Number.MAX_SAFE_INTEGER);
91
+ }
92
+ async function syncPricingIntoCostTable(opts = {}) {
93
+ const catalog = await fetchCatalog(opts);
94
+ const applied = [];
95
+ for (const model of catalog.data) {
96
+ const cost = modelCostFromOpenRouter(model);
97
+ if (!cost)
98
+ continue;
99
+ (0, cost_table_1.setCostOverride)(model.id, cost);
100
+ applied.push(model.id);
101
+ }
102
+ (0, cost_table_1.persistCostOverrides)(cost_table_1.DEFAULT_COST_OVERRIDES_PATH);
103
+ return { count: applied.length, applied };
104
+ }
105
+ function persistOverrides(filePath) {
106
+ (0, cost_table_1.persistCostOverrides)(filePath);
107
+ }
108
+ function modelCostFromOpenRouter(model) {
109
+ const prompt = Number(model.pricing?.prompt);
110
+ const completion = Number(model.pricing?.completion);
111
+ if (!Number.isFinite(prompt) || !Number.isFinite(completion) || prompt < 0 || completion < 0) {
112
+ return null;
113
+ }
114
+ return {
115
+ inputCentsPerKtok: prompt * 100 * 1000,
116
+ outputCentsPerKtok: completion * 100 * 1000,
117
+ };
118
+ }
119
+ function readCachedCatalog(filePath, ttlMs) {
120
+ try {
121
+ const stat = fs.statSync(filePath);
122
+ if (Date.now() - stat.mtimeMs > ttlMs)
123
+ return null;
124
+ const catalog = parseCatalog(fs.readFileSync(filePath, 'utf8'));
125
+ memoryCatalog = catalog;
126
+ return catalog;
127
+ }
128
+ catch {
129
+ return null;
130
+ }
131
+ }
132
+ function saveCatalog(catalog, filePath) {
133
+ const stamped = { ...catalog, fetchedAt: catalog.fetchedAt ?? new Date().toISOString() };
134
+ memoryCatalog = stamped;
135
+ try {
136
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
137
+ fs.writeFileSync(filePath, JSON.stringify(stamped, null, 2) + '\n', { mode: 0o600 });
138
+ try {
139
+ fs.chmodSync(filePath, 0o600);
140
+ }
141
+ catch {
142
+ return stamped;
143
+ }
144
+ }
145
+ catch {
146
+ return stamped;
147
+ }
148
+ return stamped;
149
+ }
150
+ function parseCatalog(body) {
151
+ const parsed = JSON.parse(body);
152
+ if (!parsed || !Array.isArray(parsed.data))
153
+ throw new Error('OpenRouter catalog response must include data[]');
154
+ const data = parsed.data.filter((item) => Boolean(item && typeof item.id === 'string'));
155
+ return { ...parsed, data };
156
+ }
157
+ function getJson(endpoint) {
158
+ return new Promise((resolve, reject) => {
159
+ const url = new URL(endpoint);
160
+ const req = https.request({
161
+ method: 'GET',
162
+ hostname: url.hostname,
163
+ path: url.pathname + url.search,
164
+ headers: { accept: 'application/json' },
165
+ timeout: 5000,
166
+ }, (res) => {
167
+ const chunks = [];
168
+ res.on('data', (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
169
+ res.on('end', () => {
170
+ const body = Buffer.concat(chunks).toString('utf8');
171
+ if (!res.statusCode || res.statusCode < 200 || res.statusCode >= 300) {
172
+ reject(new Error('OpenRouter catalog fetch failed with HTTP ' + String(res.statusCode)));
173
+ return;
174
+ }
175
+ resolve(body);
176
+ });
177
+ });
178
+ req.on('error', reject);
179
+ req.on('timeout', () => req.destroy(new Error('OpenRouter catalog fetch timed out')));
180
+ req.end();
181
+ });
182
+ }
183
+ //# sourceMappingURL=openrouter-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-catalog.js","sourceRoot":"","sources":["../src/openrouter-catalog.ts"],"names":[],"mappings":"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"}