@agentguard-run/spend 0.1.3 → 0.1.6

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBH,oBAyBC;AA9CD,oCAAoD;AAEpD,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;CAiBZ,CAAC;AAEK,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,cAAc,gCAAwB,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,QAAQ,GAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,UAAU,GAAC,CAAC;QAC/C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,OAAO,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8CAA8C;AAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CACT,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,CAAC,GAAG,EAAE,EAAE;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `agentguard verify` — verify a signed decision log entry.
3
+ *
4
+ * Default target: --trace latest reads ~/.agentguard/demo/latest-receipt.json
5
+ * (produced by `agentguard demo`) and verifies its Ed25519 signature.
6
+ */
7
+ export declare function runVerify(argv: string[]): Promise<number>;
8
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E/D"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * `agentguard verify` — verify a signed decision log entry.
4
+ *
5
+ * Default target: --trace latest reads ~/.agentguard/demo/latest-receipt.json
6
+ * (produced by `agentguard demo`) and verifies its Ed25519 signature.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.runVerify = runVerify;
43
+ const fs = __importStar(require("fs"));
44
+ const os = __importStar(require("os"));
45
+ const path = __importStar(require("path"));
46
+ const decision_log_1 = require("../decision-log");
47
+ const index_1 = require("../index");
48
+ const colors_1 = require("./colors");
49
+ const DEMO_RECEIPT = path.join(os.homedir(), '.agentguard', 'demo', 'latest-receipt.json');
50
+ async function runVerify(argv) {
51
+ let trace = 'latest';
52
+ let publicKeyHex;
53
+ for (let i = 0; i < argv.length; i++) {
54
+ const a = argv[i];
55
+ if (a === '--trace') {
56
+ trace = argv[++i] ?? 'latest';
57
+ }
58
+ else if (a === '--public-key') {
59
+ publicKeyHex = argv[++i];
60
+ }
61
+ else if (a === '--help' || a === '-h') {
62
+ console.log('agentguard verify [--trace latest|<path>] [--public-key <hex>]');
63
+ return 0;
64
+ }
65
+ }
66
+ let source;
67
+ if (trace === 'latest') {
68
+ source = DEMO_RECEIPT;
69
+ if (!fs.existsSync(source)) {
70
+ console.log((0, colors_1.redBold)('error: ') + 'no demo receipt found.');
71
+ console.log('');
72
+ console.log(` run ${(0, colors_1.greenBold)('agentguard demo')} first to produce a receipt.`);
73
+ return 2;
74
+ }
75
+ }
76
+ else {
77
+ source = path.resolve(trace.replace(/^~/, os.homedir()));
78
+ if (!fs.existsSync(source)) {
79
+ console.log((0, colors_1.redBold)('error: ') + `receipt file not found: ${source}`);
80
+ return 2;
81
+ }
82
+ }
83
+ const raw = JSON.parse(fs.readFileSync(source, 'utf-8'));
84
+ const entry = {
85
+ sequence: raw.sequence,
86
+ entryHash: raw.entryHash,
87
+ previousHash: raw.previousHash,
88
+ signature: raw.signature,
89
+ signerFingerprint: raw.signerFingerprint,
90
+ decision: raw.decision,
91
+ };
92
+ const pubHex = publicKeyHex || raw.publicKeyHex;
93
+ if (!pubHex) {
94
+ console.log((0, colors_1.redBold)('error: ') + 'no public key available for verification.');
95
+ return 2;
96
+ }
97
+ const publicKey = Uint8Array.from(Buffer.from(pubHex, 'hex'));
98
+ const ok = await (0, decision_log_1.verifyEntry)(entry, publicKey);
99
+ console.log('');
100
+ console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
101
+ console.log('');
102
+ console.log(' ' + (0, colors_1.cyanBold)(`agentguard verify --trace ${trace}`));
103
+ console.log('');
104
+ const label = (s) => (0, colors_1.dim)(` ${s.padEnd(14)}`);
105
+ console.log(label('receipt') + entry.entryHash.slice(0, 32) + (0, colors_1.dim)('...'));
106
+ console.log(label('signer') + entry.signerFingerprint.slice(0, 32) + (0, colors_1.dim)('...'));
107
+ console.log(label('sequence') + String(entry.sequence));
108
+ console.log(label('policy') + entry.decision.policyId);
109
+ console.log(label('action') + entry.decision.action);
110
+ console.log('');
111
+ if (ok) {
112
+ console.log(' ' + (0, colors_1.greenBold)('✓ signature valid'));
113
+ console.log(' ' + (0, colors_1.green)('✓ entry hash matches canonical JSON'));
114
+ console.log(' ' + (0, colors_1.green)('✓ chain link to previous entry intact'));
115
+ console.log('');
116
+ return 0;
117
+ }
118
+ console.log(' ' + (0, colors_1.redBold)('✗ verification FAILED'));
119
+ console.log('');
120
+ console.log((0, colors_1.dim)(' one or more of: signature mismatch, entryHash mismatch, chain broken.'));
121
+ console.log('');
122
+ return 1;
123
+ }
124
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"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"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * AgentGuard Spend i18n module (TypeScript).
3
+ *
4
+ * Resolves locale at runtime via the standard priority chain:
5
+ *
6
+ * 1. explicit config (passed to SpendGuardConfig or to a binding)
7
+ * 2. AGENTGUARD_LOCALE environment variable
8
+ * 3. operating-system / runtime locale (Intl.DateTimeFormat or process.env.LANG)
9
+ * 4. en-US fallback
10
+ *
11
+ * Supports en-US (default), es-419 (Latin American Spanish), and pt-BR
12
+ * (Brazilian Portuguese) in v0.1.4.
13
+ */
14
+ export declare const SUPPORTED_LOCALES: readonly ["en-US", "es-419", "pt-BR"];
15
+ export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];
16
+ export declare const DEFAULT_LOCALE: SupportedLocale;
17
+ export declare function resolveLocale(explicit?: string): SupportedLocale;
18
+ type TranslationKey = 'blocked_header' | 'field_agent' | 'field_provider' | 'field_amount' | 'field_cap' | 'field_status' | 'status_blocked' | 'field_saved' | 'check_cap_enforced' | 'check_receipt' | 'check_provider_never_charged' | 'field_policy' | 'field_reasons' | 'reasons_none' | 'window_per_call' | 'window_per_minute' | 'window_per_hour' | 'window_per_day' | 'window_per_month' | 'short_message' | 'default_soft_cap_reason' | 'default_hard_cap_reason' | 'default_minute_burst_reason' | 'default_monthly_ceiling_reason' | 'cap_exceeded_format';
19
+ export declare const TRANSLATIONS: Record<SupportedLocale, Record<TranslationKey, string>>;
20
+ export declare function t(key: TranslationKey, locale?: string): string;
21
+ /**
22
+ * Format a multi-line blocked-call trace matching the Python SDK and the
23
+ * agentguard.run/the-block/ marketing screenshot. Localized per the active
24
+ * locale (auto-detected unless `locale` is explicitly passed).
25
+ */
26
+ export interface BlockedTraceArgs {
27
+ policyId: string;
28
+ provider: string;
29
+ projectedCents: number;
30
+ windowSpendBefore: number;
31
+ reasons: string[];
32
+ triggeredCap?: {
33
+ amountCents: number;
34
+ window: string;
35
+ };
36
+ agentId?: string;
37
+ locale?: string;
38
+ }
39
+ export declare function formatBlockedTrace(args: BlockedTraceArgs): string;
40
+ export {};
41
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,iBAAiB,uCAAwC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,eAAO,MAAM,cAAc,EAAE,eAAyB,CAAC;AAgCvD,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,CAGhE;AAED,KAAK,cAAc,GACf,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,8BAA8B,GAC9B,cAAc,GACd,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,yBAAyB,GACzB,yBAAyB,GACzB,6BAA6B,GAC7B,gCAAgC,GAChC,qBAAqB,CAAC;AAE1B,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAqFhF,CAAC;AAEF,wBAAgB,CAAC,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAO9D;AAyBD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CA+DjE"}
package/dist/i18n.js ADDED
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ /**
3
+ * AgentGuard Spend i18n module (TypeScript).
4
+ *
5
+ * Resolves locale at runtime via the standard priority chain:
6
+ *
7
+ * 1. explicit config (passed to SpendGuardConfig or to a binding)
8
+ * 2. AGENTGUARD_LOCALE environment variable
9
+ * 3. operating-system / runtime locale (Intl.DateTimeFormat or process.env.LANG)
10
+ * 4. en-US fallback
11
+ *
12
+ * Supports en-US (default), es-419 (Latin American Spanish), and pt-BR
13
+ * (Brazilian Portuguese) in v0.1.4.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TRANSLATIONS = exports.DEFAULT_LOCALE = exports.SUPPORTED_LOCALES = void 0;
17
+ exports.resolveLocale = resolveLocale;
18
+ exports.t = t;
19
+ exports.formatBlockedTrace = formatBlockedTrace;
20
+ exports.SUPPORTED_LOCALES = ['en-US', 'es-419', 'pt-BR'];
21
+ exports.DEFAULT_LOCALE = 'en-US';
22
+ function normalizeLocale(raw) {
23
+ if (!raw)
24
+ return exports.DEFAULT_LOCALE;
25
+ const s = raw.toLowerCase().replace(/_/g, '-');
26
+ if (s.startsWith('es'))
27
+ return 'es-419';
28
+ if (s.startsWith('pt'))
29
+ return 'pt-BR';
30
+ return exports.DEFAULT_LOCALE;
31
+ }
32
+ function detectSystemLocale() {
33
+ // Node first (Intl in Node returns en-US regardless of system on some platforms)
34
+ if (typeof process !== 'undefined' && process.env) {
35
+ const env = process.env.AGENTGUARD_LOCALE ||
36
+ process.env.LC_ALL ||
37
+ process.env.LC_MESSAGES ||
38
+ process.env.LANG;
39
+ if (env)
40
+ return env;
41
+ }
42
+ // Browser / Deno / Bun fallback via Intl
43
+ try {
44
+ if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {
45
+ const resolved = Intl.DateTimeFormat().resolvedOptions().locale;
46
+ if (resolved)
47
+ return resolved;
48
+ }
49
+ }
50
+ catch {
51
+ // ignore
52
+ }
53
+ return undefined;
54
+ }
55
+ function resolveLocale(explicit) {
56
+ if (explicit)
57
+ return normalizeLocale(explicit);
58
+ return normalizeLocale(detectSystemLocale());
59
+ }
60
+ exports.TRANSLATIONS = {
61
+ // ---------------- English (source of truth) ----------------
62
+ 'en-US': {
63
+ blocked_header: 'AgentGuard Spend — call blocked',
64
+ field_agent: 'agent',
65
+ field_provider: 'provider',
66
+ field_amount: 'amount',
67
+ field_cap: 'cap',
68
+ field_status: 'status',
69
+ status_blocked: 'BLOCKED',
70
+ field_saved: 'saved',
71
+ check_cap_enforced: 'spend cap enforced',
72
+ check_receipt: 'receipt tamper-evident',
73
+ check_provider_never_charged: 'provider never charged',
74
+ field_policy: 'policy',
75
+ field_reasons: 'reasons',
76
+ reasons_none: '(none)',
77
+ window_per_call: 'call',
78
+ window_per_minute: 'minute',
79
+ window_per_hour: 'hour',
80
+ window_per_day: 'day',
81
+ window_per_month: 'month',
82
+ short_message: 'AgentGuard Spend blocked call',
83
+ default_soft_cap_reason: 'Soft daily cap reached, routing to fallback model',
84
+ default_hard_cap_reason: 'Hard daily ceiling exceeded',
85
+ default_minute_burst_reason: 'Per-minute burst guard',
86
+ default_monthly_ceiling_reason: 'Monthly hard ceiling',
87
+ cap_exceeded_format: "Cap '{window}={amount_cents}c' exceeded",
88
+ },
89
+ // ---------------- Latin American Spanish (es-419) ----------------
90
+ 'es-419': {
91
+ blocked_header: 'AgentGuard Spend — llamada bloqueada',
92
+ field_agent: 'agente',
93
+ field_provider: 'proveedor',
94
+ field_amount: 'monto',
95
+ field_cap: 'límite',
96
+ field_status: 'estado',
97
+ status_blocked: 'BLOQUEADO',
98
+ field_saved: 'ahorrado',
99
+ check_cap_enforced: 'límite de gasto aplicado',
100
+ check_receipt: 'recibo a prueba de manipulación',
101
+ check_provider_never_charged: 'proveedor nunca cobrado',
102
+ field_policy: 'política',
103
+ field_reasons: 'razones',
104
+ reasons_none: '(ninguna)',
105
+ window_per_call: 'llamada',
106
+ window_per_minute: 'minuto',
107
+ window_per_hour: 'hora',
108
+ window_per_day: 'día',
109
+ window_per_month: 'mes',
110
+ short_message: 'AgentGuard Spend bloqueó la llamada',
111
+ default_soft_cap_reason: 'Límite diario blando alcanzado, enrutando al modelo de respaldo',
112
+ default_hard_cap_reason: 'Tope diario duro excedido',
113
+ default_minute_burst_reason: 'Protección de ráfaga por minuto',
114
+ default_monthly_ceiling_reason: 'Tope mensual duro',
115
+ cap_exceeded_format: "Límite '{window}={amount_cents}c' excedido",
116
+ },
117
+ // ---------------- Brazilian Portuguese (pt-BR) ----------------
118
+ 'pt-BR': {
119
+ blocked_header: 'AgentGuard Spend — chamada bloqueada',
120
+ field_agent: 'agente',
121
+ field_provider: 'provedor',
122
+ field_amount: 'valor',
123
+ field_cap: 'limite',
124
+ field_status: 'status',
125
+ status_blocked: 'BLOQUEADO',
126
+ field_saved: 'economizado',
127
+ check_cap_enforced: 'limite de gasto aplicado',
128
+ check_receipt: 'recibo à prova de adulteração',
129
+ check_provider_never_charged: 'provedor nunca cobrado',
130
+ field_policy: 'política',
131
+ field_reasons: 'motivos',
132
+ reasons_none: '(nenhum)',
133
+ window_per_call: 'chamada',
134
+ window_per_minute: 'minuto',
135
+ window_per_hour: 'hora',
136
+ window_per_day: 'dia',
137
+ window_per_month: 'mês',
138
+ short_message: 'AgentGuard Spend bloqueou a chamada',
139
+ default_soft_cap_reason: 'Limite diário leve atingido, redirecionando para modelo alternativo',
140
+ default_hard_cap_reason: 'Teto diário rígido excedido',
141
+ default_minute_burst_reason: 'Proteção de pico por minuto',
142
+ default_monthly_ceiling_reason: 'Teto mensal rígido',
143
+ cap_exceeded_format: "Limite '{window}={amount_cents}c' excedido",
144
+ },
145
+ };
146
+ function t(key, locale) {
147
+ const resolved = resolveLocale(locale);
148
+ return (exports.TRANSLATIONS[resolved][key] ??
149
+ exports.TRANSLATIONS[exports.DEFAULT_LOCALE][key] ??
150
+ key);
151
+ }
152
+ function formatCents(cents) {
153
+ const sign = cents < 0 ? '-' : '';
154
+ const abs = Math.abs(Math.round(cents));
155
+ const dollars = Math.floor(abs / 100);
156
+ const remainder = abs % 100;
157
+ const dollarsStr = dollars.toLocaleString('en-US');
158
+ const remainderStr = remainder.toString().padStart(2, '0');
159
+ return `${sign}$${dollarsStr}.${remainderStr}`;
160
+ }
161
+ function windowLabel(window, locale) {
162
+ const key = {
163
+ per_call: 'window_per_call',
164
+ per_minute: 'window_per_minute',
165
+ per_hour: 'window_per_hour',
166
+ per_day: 'window_per_day',
167
+ per_month: 'window_per_month',
168
+ }[window];
169
+ return key ? t(key, locale) : window;
170
+ }
171
+ function formatBlockedTrace(args) {
172
+ const { policyId, provider, projectedCents, windowSpendBefore, reasons, triggeredCap, agentId, locale, } = args;
173
+ const agent = agentId || 'unknown';
174
+ let capStr = 'n/a';
175
+ let savedCents = 0;
176
+ if (triggeredCap) {
177
+ capStr = `${formatCents(triggeredCap.amountCents)} / ${windowLabel(triggeredCap.window, locale)}`;
178
+ savedCents = Math.max(0, projectedCents - Math.max(0, triggeredCap.amountCents - windowSpendBefore));
179
+ }
180
+ const amountStr = formatCents(projectedCents);
181
+ const reasonsStr = reasons.length > 0 ? reasons.join('; ') : t('reasons_none', locale);
182
+ const fieldAgent = t('field_agent', locale);
183
+ const fieldProvider = t('field_provider', locale);
184
+ const fieldAmount = t('field_amount', locale);
185
+ const fieldCap = t('field_cap', locale);
186
+ const fieldStatus = t('field_status', locale);
187
+ const fieldSaved = t('field_saved', locale);
188
+ const labelWidth = Math.max(fieldAgent.length, fieldProvider.length, fieldAmount.length, fieldCap.length, fieldStatus.length, fieldSaved.length) + 2;
189
+ const pad = (s) => s + ' '.repeat(Math.max(0, labelWidth - s.length));
190
+ const lines = [
191
+ t('blocked_header', locale),
192
+ '',
193
+ ` ${pad(fieldAgent)}${agent}`,
194
+ ` ${pad(fieldProvider)}${provider}`,
195
+ ` ${pad(fieldAmount)}${amountStr}`,
196
+ ` ${pad(fieldCap)}${capStr}`,
197
+ ` ${pad(fieldStatus)}${t('status_blocked', locale)}`,
198
+ '',
199
+ ` ${pad(fieldSaved)}+${formatCents(savedCents)}`,
200
+ '',
201
+ ` ✓ ${t('check_cap_enforced', locale)}`,
202
+ ` ✓ ${t('check_receipt', locale)}`,
203
+ ` ✓ ${t('check_provider_never_charged', locale)}`,
204
+ '',
205
+ `${t('field_policy', locale)}: ${policyId}`,
206
+ `${t('field_reasons', locale)}: ${reasonsStr}`,
207
+ ];
208
+ return lines.join('\n');
209
+ }
210
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,7 +11,8 @@ export { evaluatePolicy, buildScopeKey } 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 { SpendGuard, withSpendGuard, AgentGuardBlockedError, type SpendGuardConfig, type OpenAIBindingOptions, } from './spend-guard';
14
- export declare const AGENTGUARD_SPEND_VERSION = "0.1.3";
14
+ export { DEFAULT_LOCALE, SUPPORTED_LOCALES, TRANSLATIONS, type SupportedLocale, resolveLocale, t, formatBlockedTrace, type BlockedTraceArgs, } from './i18n';
15
+ export declare const AGENTGUARD_SPEND_VERSION = "0.1.6";
15
16
  /** Patent marking. 35 U.S.C. § 287 constructive notice. */
16
17
  export declare const PATENT_NOTICE: string;
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,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,MAAM,UAAU,CAAC;AAGzD,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,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,2DAA2D;AAC3D,eAAO,MAAM,aAAa,QAIK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,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,MAAM,UAAU,CAAC;AAGzD,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,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,QAIK,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * and an additional application filed May 2026).
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.PATENT_NOTICE = exports.AGENTGUARD_SPEND_VERSION = exports.AgentGuardBlockedError = exports.withSpendGuard = exports.SpendGuard = exports.InMemorySpendStore = exports.InMemoryDecisionLogStore = exports.GENESIS_PREVIOUS_HASH = exports.verifyChain = exports.verifyEntry = exports.signDecision = exports.computeSignerFingerprint = exports.computeEntryHash = exports.sha256Hex = exports.canonicalJson = 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.AgentGuardBlockedError = exports.withSpendGuard = exports.SpendGuard = exports.InMemorySpendStore = exports.InMemoryDecisionLogStore = exports.GENESIS_PREVIOUS_HASH = exports.verifyChain = exports.verifyEntry = exports.signDecision = exports.computeSignerFingerprint = exports.computeEntryHash = exports.sha256Hex = exports.canonicalJson = exports.buildScopeKey = exports.evaluatePolicy = exports.inferProvider = exports.computeCallCents = exports.clearCostOverrides = exports.setCostOverride = exports.getModelCost = void 0;
11
11
  // Cost table
12
12
  var cost_table_1 = require("./cost-table");
13
13
  Object.defineProperty(exports, "getModelCost", { enumerable: true, get: function () { return cost_table_1.getModelCost; } });
@@ -38,7 +38,15 @@ var spend_guard_1 = require("./spend-guard");
38
38
  Object.defineProperty(exports, "SpendGuard", { enumerable: true, get: function () { return spend_guard_1.SpendGuard; } });
39
39
  Object.defineProperty(exports, "withSpendGuard", { enumerable: true, get: function () { return spend_guard_1.withSpendGuard; } });
40
40
  Object.defineProperty(exports, "AgentGuardBlockedError", { enumerable: true, get: function () { return spend_guard_1.AgentGuardBlockedError; } });
41
- exports.AGENTGUARD_SPEND_VERSION = '0.1.3';
41
+ // Localization (en-US, es-419, pt-BR)
42
+ var i18n_1 = require("./i18n");
43
+ Object.defineProperty(exports, "DEFAULT_LOCALE", { enumerable: true, get: function () { return i18n_1.DEFAULT_LOCALE; } });
44
+ Object.defineProperty(exports, "SUPPORTED_LOCALES", { enumerable: true, get: function () { return i18n_1.SUPPORTED_LOCALES; } });
45
+ Object.defineProperty(exports, "TRANSLATIONS", { enumerable: true, get: function () { return i18n_1.TRANSLATIONS; } });
46
+ Object.defineProperty(exports, "resolveLocale", { enumerable: true, get: function () { return i18n_1.resolveLocale; } });
47
+ Object.defineProperty(exports, "t", { enumerable: true, get: function () { return i18n_1.t; } });
48
+ Object.defineProperty(exports, "formatBlockedTrace", { enumerable: true, get: function () { return i18n_1.formatBlockedTrace; } });
49
+ exports.AGENTGUARD_SPEND_VERSION = '0.1.6';
42
50
  /** Patent marking. 35 U.S.C. § 287 constructive notice. */
43
51
  exports.PATENT_NOTICE = 'Protected by U.S. patent-pending technology ' +
44
52
  '(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;;;AAmBH,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,mCAAyD;AAAhD,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AAEtC,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,eAAe;AACf,6CAMuB;AALrB,yGAAA,UAAU,OAAA;AACV,6GAAA,cAAc,OAAA;AACd,qHAAA,sBAAsB,OAAA;AAKX,QAAA,wBAAwB,GAAG,OAAO,CAAC;AAEhD,2DAA2D;AAC9C,QAAA,aAAa,GACxB,8CAA8C;IAC9C,6DAA6D;IAC7D,iDAAiD;IACjD,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAmBH,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,mCAAyD;AAAhD,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AAEtC,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,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,iDAAiD;IACjD,6BAA6B,CAAC"}
@@ -36,6 +36,10 @@ export interface SpendGuardConfig {
36
36
  onDecision?: (decision: SpendDecision, signed: SignedDecisionLogEntry | null) => void | Promise<void>;
37
37
  /** Optional token-count estimator. Defaults to `chars / 4` heuristic. */
38
38
  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'. */
42
+ locale?: string;
39
43
  }
40
44
  export declare class SpendGuard {
41
45
  private config;
@@ -97,7 +101,9 @@ export interface OpenAIBindingOptions {
97
101
  }
98
102
  export declare class AgentGuardBlockedError extends Error {
99
103
  decision: SpendDecision;
100
- constructor(decision: SpendDecision);
104
+ scope?: SpendScope;
105
+ locale?: string;
106
+ constructor(decision: SpendDecision, scope?: SpendScope, locale?: string);
101
107
  }
102
108
  /**
103
109
  * Wrap an OpenAI client. Returns a proxy whose chat.completions.create
@@ -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;AAUjB;;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;CAC3C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAyB;gBAEjC,MAAM,EAAE,gBAAgB;IAMpC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;QACvC,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;KACvC,CAAC;IAwBF,2EAA2E;IAC3E,OAAO,CAAC,qBAAqB;IAI7B,mEAAmE;IACnE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKpC,uDAAuD;IACvD,aAAa,IAAI,UAAU;IAI3B,qDAAqD;IACrD,WAAW,IAAI,gBAAgB;CAGhC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;CAC3C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,EAAE,aAAa,CAAC;gBACZ,QAAQ,EAAE,aAAa;CAQpC;AAED;;;;GAIG;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,oBAAoB,GAEzB,GAAG,CA8CL"}
1
+ {"version":3,"file":"spend-guard.d.ts","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EAEtB,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAWjB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAC;IACpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,+EAA+E;IAC/E,WAAW,CAAC,EAAE;QACZ,kCAAkC;QAClC,UAAU,EAAE,UAAU,CAAC;QACvB,iCAAiC;QACjC,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;IACF,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;2DAEuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAyB;gBAEjC,MAAM,EAAE,gBAAgB;IAMpC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;QACvC,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;KACvC,CAAC;IAwBF,2EAA2E;IAC3E,OAAO,CAAC,qBAAqB;IAI7B,mEAAmE;IACnE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKpC,uDAAuD;IACvD,aAAa,IAAI,UAAU;IAI3B,qDAAqD;IACrD,WAAW,IAAI,gBAAgB;CAGhC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;CAC3C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;gBACJ,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM;CAwBzE;AAED;;;;GAIG;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,oBAAoB,GAEzB,GAAG,CA8CL"}
@@ -23,6 +23,7 @@ const decision_log_1 = require("./decision-log");
23
23
  const store_memory_1 = require("./store-memory");
24
24
  const decision_log_2 = require("./decision-log");
25
25
  const cost_table_1 = require("./cost-table");
26
+ const i18n_1 = require("./i18n");
26
27
  class SpendGuard {
27
28
  config;
28
29
  spendStore;
@@ -91,11 +92,29 @@ class SpendGuard {
91
92
  exports.SpendGuard = SpendGuard;
92
93
  class AgentGuardBlockedError extends Error {
93
94
  decision;
94
- constructor(decision) {
95
- super(`AgentGuard Spend blocked call: policy='${decision.policyId}' ` +
96
- `action='${decision.action}' reasons=${decision.reasons.join('; ')}`);
95
+ scope;
96
+ locale;
97
+ constructor(decision, scope, locale) {
98
+ const agentId = scope?.agentId || scope?.userId || scope?.tenantId;
99
+ super((0, i18n_1.formatBlockedTrace)({
100
+ policyId: decision.policyId,
101
+ provider: decision.provider,
102
+ projectedCents: decision.projectedCents,
103
+ windowSpendBefore: decision.windowSpendBefore,
104
+ reasons: decision.reasons,
105
+ triggeredCap: decision.triggeredCap
106
+ ? {
107
+ amountCents: decision.triggeredCap.amountCents,
108
+ window: decision.triggeredCap.window,
109
+ }
110
+ : undefined,
111
+ agentId,
112
+ locale,
113
+ }));
97
114
  this.name = 'AgentGuardBlockedError';
98
115
  this.decision = decision;
116
+ this.scope = scope;
117
+ this.locale = locale;
99
118
  }
100
119
  }
101
120
  exports.AgentGuardBlockedError = AgentGuardBlockedError;
@@ -129,7 +148,7 @@ function withSpendGuard(client, opts) {
129
148
  };
130
149
  const { decision } = await guard.decide(call);
131
150
  if (decision.action === 'block') {
132
- throw new AgentGuardBlockedError(decision);
151
+ throw new AgentGuardBlockedError(decision, opts.scope, opts.config?.locale);
133
152
  }
134
153
  if (decision.action === 'downgrade' && decision.modelResolved !== decision.modelRequested) {
135
154
  params = { ...params, model: decision.modelResolved };
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentguard-run/spend",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
4
4
  "description": "Local-runtime spend caps and capability-gated model routing for AI agents. Prompts, API keys, and signing keys stay inside the customer runtime. Zero data plane involvement.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,8 +21,12 @@
21
21
  "default": "./dist/decision-log.js"
22
22
  }
23
23
  },
24
+ "bin": {
25
+ "agentguard": "./bin/agentguard.js"
26
+ },
24
27
  "files": [
25
28
  "dist",
29
+ "bin",
26
30
  "README.md",
27
31
  "LICENSE",
28
32
  "PATENTS.md"