@agentguard-run/spend 0.2.1 → 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.
- package/CHANGELOG.md +12 -0
- package/LICENSE +1 -1
- package/README.es-419.md +28 -102
- package/README.md +50 -124
- package/README.pt-BR.md +28 -102
- package/dist/bindings/anthropic.d.ts +11 -0
- package/dist/bindings/anthropic.d.ts.map +1 -0
- package/dist/bindings/anthropic.js +116 -0
- package/dist/bindings/anthropic.js.map +1 -0
- package/dist/bindings/bedrock.d.ts +11 -0
- package/dist/bindings/bedrock.d.ts.map +1 -0
- package/dist/bindings/bedrock.js +177 -0
- package/dist/bindings/bedrock.js.map +1 -0
- package/dist/cli/auth.d.ts +7 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +189 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/colors.d.ts +8 -3
- package/dist/cli/colors.d.ts.map +1 -1
- package/dist/cli/colors.js +93 -4
- package/dist/cli/colors.js.map +1 -1
- package/dist/cli/demo.d.ts.map +1 -1
- package/dist/cli/demo.js +23 -2
- package/dist/cli/demo.js.map +1 -1
- package/dist/cli/main.d.ts +0 -6
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +36 -16
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/models.d.ts +18 -0
- package/dist/cli/models.d.ts.map +1 -0
- package/dist/cli/models.js +277 -0
- package/dist/cli/models.js.map +1 -0
- package/dist/cli/tips.d.ts +21 -0
- package/dist/cli/tips.d.ts.map +1 -0
- package/dist/cli/tips.js +191 -0
- package/dist/cli/tips.js.map +1 -0
- package/dist/cli/wizard.d.ts +27 -0
- package/dist/cli/wizard.d.ts.map +1 -0
- package/dist/cli/wizard.js +182 -0
- package/dist/cli/wizard.js.map +1 -0
- package/dist/cost-table.d.ts +11 -36
- package/dist/cost-table.d.ts.map +1 -1
- package/dist/cost-table.js +114 -45
- package/dist/cost-table.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -8
- package/dist/index.js.map +1 -1
- package/dist/openrouter-catalog.d.ts +56 -0
- package/dist/openrouter-catalog.d.ts.map +1 -0
- package/dist/openrouter-catalog.js +183 -0
- package/dist/openrouter-catalog.js.map +1 -0
- package/dist/spend-guard.d.ts +38 -55
- package/dist/spend-guard.d.ts.map +1 -1
- package/dist/spend-guard.js +268 -83
- package/dist/spend-guard.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +52 -21
- package/dist/telemetry.js.map +1 -1
- package/dist/templates/index.d.ts +17 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +100 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/types.d.ts +18 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +32 -4
- package/src/bindings/anthropic.ts +142 -0
- package/src/bindings/bedrock.ts +200 -0
- package/src/cli/auth.ts +145 -0
- package/src/cli/models.ts +236 -0
- package/src/cli/tips.ts +161 -0
- package/src/cli/wizard.ts +160 -0
- package/src/openrouter-catalog.ts +180 -0
- package/src/templates/agent-support.yaml +30 -0
- package/src/templates/chargeback-evidence.yaml +30 -0
- package/src/templates/code-scan.yaml +30 -0
- package/src/templates/index.ts +109 -0
- package/src/templates/payment-approval.yaml +30 -0
- package/src/templates/risk-review.yaml +30 -0
- package/tests/fixtures/openrouter-catalog.json +1 -0
package/dist/cost-table.js
CHANGED
|
@@ -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
|
|
6
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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`);
|
package/dist/cost-table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-table.js","sourceRoot":"","sources":["../src/cost-table.ts"],"names":[],"mappings":";AAAA
|
|
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 {
|
|
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.
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
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,8 @@
|
|
|
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
|
+
const telemetry_1 = require("./telemetry");
|
|
11
12
|
// Cost table
|
|
12
13
|
var cost_table_1 = require("./cost-table");
|
|
13
14
|
Object.defineProperty(exports, "getModelCost", { enumerable: true, get: function () { return cost_table_1.getModelCost; } });
|
|
@@ -15,6 +16,10 @@ Object.defineProperty(exports, "setCostOverride", { enumerable: true, get: funct
|
|
|
15
16
|
Object.defineProperty(exports, "clearCostOverrides", { enumerable: true, get: function () { return cost_table_1.clearCostOverrides; } });
|
|
16
17
|
Object.defineProperty(exports, "computeCallCents", { enumerable: true, get: function () { return cost_table_1.computeCallCents; } });
|
|
17
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; } });
|
|
18
23
|
// Policy engine
|
|
19
24
|
var policy_1 = require("./policy");
|
|
20
25
|
Object.defineProperty(exports, "evaluatePolicy", { enumerable: true, get: function () { return policy_1.evaluatePolicy; } });
|
|
@@ -35,17 +40,28 @@ Object.defineProperty(exports, "InMemoryDecisionLogStore", { enumerable: true, g
|
|
|
35
40
|
var store_memory_1 = require("./store-memory");
|
|
36
41
|
Object.defineProperty(exports, "InMemorySpendStore", { enumerable: true, get: function () { return store_memory_1.InMemorySpendStore; } });
|
|
37
42
|
// Telemetry controls
|
|
38
|
-
var
|
|
39
|
-
Object.defineProperty(exports, "telemetryStatus", { enumerable: true, get: function () { return
|
|
40
|
-
Object.defineProperty(exports, "enableTelemetry", { enumerable: true, get: function () { return
|
|
41
|
-
Object.defineProperty(exports, "disableTelemetry", { enumerable: true, get: function () { return
|
|
42
|
-
Object.defineProperty(exports, "resetTelemetryInstallId", { enumerable: true, get: function () { return
|
|
43
|
-
Object.defineProperty(exports, "recordTelemetryEvent", { enumerable: true, get: function () { return
|
|
43
|
+
var telemetry_2 = require("./telemetry");
|
|
44
|
+
Object.defineProperty(exports, "telemetryStatus", { enumerable: true, get: function () { return telemetry_2.telemetryStatus; } });
|
|
45
|
+
Object.defineProperty(exports, "enableTelemetry", { enumerable: true, get: function () { return telemetry_2.enableTelemetry; } });
|
|
46
|
+
Object.defineProperty(exports, "disableTelemetry", { enumerable: true, get: function () { return telemetry_2.disableTelemetry; } });
|
|
47
|
+
Object.defineProperty(exports, "resetTelemetryInstallId", { enumerable: true, get: function () { return telemetry_2.resetTelemetryInstallId; } });
|
|
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; } });
|
|
44
56
|
// Core wrapper
|
|
45
57
|
var spend_guard_1 = require("./spend-guard");
|
|
46
58
|
Object.defineProperty(exports, "SpendGuard", { enumerable: true, get: function () { return spend_guard_1.SpendGuard; } });
|
|
47
59
|
Object.defineProperty(exports, "withSpendGuard", { enumerable: true, get: function () { return spend_guard_1.withSpendGuard; } });
|
|
48
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; } });
|
|
49
65
|
// Localization (en-US, es-419, pt-BR)
|
|
50
66
|
var i18n_1 = require("./i18n");
|
|
51
67
|
Object.defineProperty(exports, "DEFAULT_LOCALE", { enumerable: true, get: function () { return i18n_1.DEFAULT_LOCALE; } });
|
|
@@ -54,9 +70,10 @@ Object.defineProperty(exports, "TRANSLATIONS", { enumerable: true, get: function
|
|
|
54
70
|
Object.defineProperty(exports, "resolveLocale", { enumerable: true, get: function () { return i18n_1.resolveLocale; } });
|
|
55
71
|
Object.defineProperty(exports, "t", { enumerable: true, get: function () { return i18n_1.t; } });
|
|
56
72
|
Object.defineProperty(exports, "formatBlockedTrace", { enumerable: true, get: function () { return i18n_1.formatBlockedTrace; } });
|
|
57
|
-
exports.AGENTGUARD_SPEND_VERSION = '0.
|
|
73
|
+
exports.AGENTGUARD_SPEND_VERSION = '0.3.0';
|
|
58
74
|
/** Patent marking. 35 U.S.C. § 287 constructive notice. */
|
|
59
75
|
exports.PATENT_NOTICE = 'Protected by U.S. patent-pending technology ' +
|
|
60
76
|
'(App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; ' +
|
|
61
77
|
'64/071,781; 64/071,789). Additional patents pending.';
|
|
78
|
+
(0, telemetry_1.recordTelemetryEvent)('sdk_init');
|
|
62
79
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
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":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDH,oCAuBC;AAED,4CAGC;AAED,4DAWC;AAED,4CAEC;AAED,0DAUC;AAzGD,uCAAyB;AACzB,6CAA+B;AAC/B,uCAAyB;AACzB,2CAA6B;AAC7B,6CAAkH;AAqClH,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAC3E,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAE/D,IAAI,aAAa,GAA6B,IAAI,CAAC;AAE5C,KAAK,UAAU,YAAY,CAAC,OAA4B,EAAE;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;IACtE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrE,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,YAAoB,kBAAkB;IACrE,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,OAAO,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC/D,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAAC,OAA4B,EAAE;IAC3E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAA,4BAAe,EAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,IAAA,iCAAoB,EAAC,wCAA2B,CAAC,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAiB;IAChD,IAAA,iCAAoB,EAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,uBAAuB,CAAC,KAAsB;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;QACtC,kBAAkB,EAAE,UAAU,GAAG,GAAG,GAAG,IAAI;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,KAAa;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,aAAa,GAAG,OAAO,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAA0B,EAAE,QAAgB;IAC/D,MAAM,OAAO,GAAsB,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5G,aAAa,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,OAAO,CAAC;QAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;IACrD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAA2B,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;IACjH,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,OAAO,CAAC,QAAgB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CACvB;YACE,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;YAC/B,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;YACvC,OAAO,EAAE,IAAI;SACd,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5F,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBACrE,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBACzF,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC;QACtF,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC"}
|