@agentguard-run/spend 0.1.6 → 0.1.7

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,5 @@
1
+ /**
2
+ * `agentguard doctor` — check installation health and configuration.
3
+ */
4
+ export declare function runDoctor(argv: string[]): Promise<number>;
5
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+FH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyF/D"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * `agentguard doctor` — check installation health and configuration.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runDoctor = runDoctor;
40
+ const fs = __importStar(require("fs"));
41
+ const os = __importStar(require("os"));
42
+ const path = __importStar(require("path"));
43
+ const index_1 = require("../index");
44
+ const colors_1 = require("./colors");
45
+ function checkRequire(name) {
46
+ try {
47
+ const m = require(name);
48
+ const version = m.VERSION || m.version || '?';
49
+ return { ok: true, note: `v${version}` };
50
+ }
51
+ catch {
52
+ return { ok: false, note: 'not installed (optional)' };
53
+ }
54
+ }
55
+ function checkWritable(p) {
56
+ try {
57
+ fs.mkdirSync(p, { recursive: true });
58
+ const testFile = path.join(p, '.doctor-write-test');
59
+ fs.writeFileSync(testFile, 'ok');
60
+ fs.unlinkSync(testFile);
61
+ return { ok: true, note: p };
62
+ }
63
+ catch (e) {
64
+ return { ok: false, note: String(e) };
65
+ }
66
+ }
67
+ async function checkCrypto() {
68
+ try {
69
+ const ed = await Promise.resolve().then(() => __importStar(require('@noble/ed25519')));
70
+ const priv = new Uint8Array(32);
71
+ for (let i = 0; i < 32; i++)
72
+ priv[i] = i;
73
+ const pub = await ed.getPublicKeyAsync(priv);
74
+ if (pub.length === 32) {
75
+ return { ok: true, note: 'Ed25519 key derivation OK (32-byte public key)' };
76
+ }
77
+ return { ok: false, note: `unexpected public key size: ${pub.length}` };
78
+ }
79
+ catch (e) {
80
+ return { ok: false, note: `crypto backend failed: ${e}` };
81
+ }
82
+ }
83
+ async function checkDryRunBlock() {
84
+ try {
85
+ const { SpendGuard } = await Promise.resolve().then(() => __importStar(require('../spend-guard')));
86
+ const { InMemorySpendStore } = await Promise.resolve().then(() => __importStar(require('../store-memory')));
87
+ const { InMemoryDecisionLogStore } = await Promise.resolve().then(() => __importStar(require('../decision-log')));
88
+ const ed = await Promise.resolve().then(() => __importStar(require('@noble/ed25519')));
89
+ const privateKey = new Uint8Array(32);
90
+ for (let i = 0; i < 32; i++)
91
+ privateKey[i] = i;
92
+ const publicKey = await ed.getPublicKeyAsync(privateKey);
93
+ const policy = {
94
+ id: 'doctor-v1',
95
+ name: 'Doctor dry-run policy',
96
+ scope: { tenantId: 'doctor' },
97
+ caps: [
98
+ { amountCents: 0, window: 'per_day', action: 'block', reason: 'doctor check' },
99
+ ],
100
+ mode: 'enforce',
101
+ version: 1,
102
+ effectiveFrom: '2026-01-01T00:00:00.000Z',
103
+ };
104
+ const guard = new SpendGuard({
105
+ policy,
106
+ spendStore: new InMemorySpendStore(),
107
+ logStore: new InMemoryDecisionLogStore(),
108
+ signingKeys: { privateKey, publicKey },
109
+ });
110
+ const result = await guard.decide({
111
+ provider: 'openai',
112
+ model: 'gpt-4o',
113
+ inputTokens: 100,
114
+ outputTokens: 50,
115
+ scope: { tenantId: 'doctor', agentId: 'dry-run' },
116
+ });
117
+ if (result.decision?.action === 'block') {
118
+ return { ok: true, note: 'block path fires correctly' };
119
+ }
120
+ return {
121
+ ok: false,
122
+ note: `expected action=block, got action=${result.decision?.action}`,
123
+ };
124
+ }
125
+ catch (e) {
126
+ return { ok: false, note: `dry-run block failed: ${e}` };
127
+ }
128
+ }
129
+ async function runDoctor(argv) {
130
+ if (argv.includes('--help') || argv.includes('-h')) {
131
+ console.log('agentguard doctor');
132
+ return 0;
133
+ }
134
+ console.log('');
135
+ console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
136
+ console.log('');
137
+ console.log(' ' + (0, colors_1.cyanBold)('agentguard doctor') + (0, colors_1.dim)(' · setup health check'));
138
+ console.log('');
139
+ const checks = [];
140
+ // 1. Core package self-check
141
+ checks.push({
142
+ name: '@agentguard-run/spend package',
143
+ ok: true,
144
+ note: `v${index_1.AGENTGUARD_SPEND_VERSION}`,
145
+ });
146
+ // 2. Crypto
147
+ const cryptoCheck = await checkCrypto();
148
+ checks.push({ name: 'Ed25519 crypto backend', ...cryptoCheck });
149
+ // 3. Optional providers
150
+ for (const provider of ['openai', '@anthropic-ai/sdk', '@aws-sdk/client-bedrock-runtime']) {
151
+ const r = checkRequire(provider);
152
+ checks.push({ name: `provider: ${provider}`, ...r, optional: true });
153
+ }
154
+ // 4. ~/.agentguard writable
155
+ checks.push({
156
+ name: '~/.agentguard/ writable',
157
+ ...checkWritable(path.join(os.homedir(), '.agentguard')),
158
+ });
159
+ // 5. Policy file in cwd
160
+ const policyPath = path.join(process.cwd(), 'agentguard.policy.yaml');
161
+ if (fs.existsSync(policyPath)) {
162
+ checks.push({ name: 'policy file (cwd)', ok: true, note: `found: ${path.basename(policyPath)}` });
163
+ }
164
+ else {
165
+ checks.push({
166
+ name: 'policy file (cwd)',
167
+ ok: false,
168
+ note: `not found in ${path.basename(process.cwd())}/ — run 'agentguard init'`,
169
+ });
170
+ }
171
+ // 6. Dry-run block
172
+ const dryRun = await checkDryRunBlock();
173
+ checks.push({ name: 'dry-run block simulation', ...dryRun });
174
+ const labelWidth = Math.max(...checks.map((c) => c.name.length)) + 2;
175
+ let passCount = 0;
176
+ let optionalFailCount = 0;
177
+ let failCount = 0;
178
+ for (const c of checks) {
179
+ let mark;
180
+ if (c.ok) {
181
+ mark = (0, colors_1.green)('✓');
182
+ passCount++;
183
+ }
184
+ else if (c.optional) {
185
+ mark = (0, colors_1.dim)('·');
186
+ optionalFailCount++;
187
+ }
188
+ else {
189
+ mark = (0, colors_1.redBold)('✗');
190
+ failCount++;
191
+ }
192
+ console.log(` ${mark} ${c.name.padEnd(labelWidth)}${(0, colors_1.dim)(c.note)}`);
193
+ }
194
+ console.log('');
195
+ console.log((0, colors_1.dim)(' ───────────────────────────────────────────'));
196
+ if (failCount === 0) {
197
+ console.log(` ${(0, colors_1.greenBold)('healthy')} ` +
198
+ (0, colors_1.dim)(`(${passCount} passing, ${optionalFailCount} optional providers not installed)`));
199
+ console.log('');
200
+ return 0;
201
+ }
202
+ console.log(` ${(0, colors_1.redBold)('issues found')} ` + (0, colors_1.dim)(`(${failCount} failing, ${passCount} passing)`));
203
+ console.log('');
204
+ console.log((0, colors_1.dim)(" fix the ✗ items above, then re-run 'agentguard doctor'."));
205
+ console.log('');
206
+ return 1;
207
+ }
208
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * `agentguard explain` — decode a signed receipt with cap math + signature breakdown.
3
+ */
4
+ export declare function runExplain(argv: string[]): Promise<number>;
5
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoCH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6GhE"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * `agentguard explain` — decode a signed receipt with cap math + signature breakdown.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runExplain = runExplain;
40
+ const fs = __importStar(require("fs"));
41
+ const os = __importStar(require("os"));
42
+ const path = __importStar(require("path"));
43
+ const index_1 = require("../index");
44
+ const colors_1 = require("./colors");
45
+ const DEMO_RECEIPT = path.join(os.homedir(), '.agentguard', 'demo', 'latest-receipt.json');
46
+ const WINDOW_LABELS = {
47
+ per_call: 'per call',
48
+ per_minute: 'per minute',
49
+ per_hour: 'per hour',
50
+ per_day: 'per day',
51
+ per_month: 'per month',
52
+ };
53
+ const WINDOW_RESETS = {
54
+ per_call: 'next call',
55
+ per_minute: 'top of next minute (UTC)',
56
+ per_hour: 'top of next hour (UTC)',
57
+ per_day: 'UTC midnight',
58
+ per_month: '1st of next month (UTC)',
59
+ };
60
+ function formatCents(cents) {
61
+ const sign = cents < 0 ? '-' : '';
62
+ const abs = Math.abs(Math.round(cents));
63
+ const dollars = Math.floor(abs / 100);
64
+ const remainder = abs % 100;
65
+ const dollarsStr = dollars.toLocaleString('en-US');
66
+ const remainderStr = String(remainder).padStart(2, '0');
67
+ return `${sign}$${dollarsStr}.${remainderStr}`;
68
+ }
69
+ async function runExplain(argv) {
70
+ if (argv.includes('--help') || argv.includes('-h')) {
71
+ console.log('agentguard explain [latest|<path>]');
72
+ return 0;
73
+ }
74
+ const receiptArg = argv.find((a) => !a.startsWith('-')) || 'latest';
75
+ console.log('');
76
+ console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
77
+ console.log('');
78
+ console.log(' ' + (0, colors_1.cyanBold)(`agentguard explain ${receiptArg}`));
79
+ console.log('');
80
+ let source;
81
+ if (receiptArg === 'latest') {
82
+ if (!fs.existsSync(DEMO_RECEIPT)) {
83
+ console.log(' ' + (0, colors_1.redBold)('error: ') + 'no demo receipt found.');
84
+ console.log(` run ${(0, colors_1.greenBold)('agentguard demo')} first to produce a receipt.`);
85
+ console.log('');
86
+ return 2;
87
+ }
88
+ source = DEMO_RECEIPT;
89
+ }
90
+ else {
91
+ source = path.resolve(receiptArg.replace(/^~/, os.homedir()));
92
+ if (!fs.existsSync(source)) {
93
+ console.log(' ' + (0, colors_1.redBold)('error: ') + `receipt file not found: ${source}`);
94
+ console.log('');
95
+ return 2;
96
+ }
97
+ }
98
+ const raw = JSON.parse(fs.readFileSync(source, 'utf-8'));
99
+ const decision = raw.decision;
100
+ const cap = decision.triggeredCap;
101
+ const agentId = String(decision.triggeredScopeKey || 'unknown')
102
+ .split('|')
103
+ .pop()
104
+ .replace('agentId=', '');
105
+ // 1. What happened
106
+ console.log((0, colors_1.dim)(' what happened'));
107
+ console.log((0, colors_1.dim)(' ─────────────'));
108
+ const action = decision.action || '?';
109
+ const colorAction = action === 'block'
110
+ ? (0, colors_1.redBold)(action.toUpperCase())
111
+ : action === 'downgrade'
112
+ ? (0, colors_1.yellow)(action.toUpperCase())
113
+ : (0, colors_1.green)(action.toUpperCase());
114
+ console.log(` action ${colorAction}`);
115
+ console.log(` agent ${agentId}`);
116
+ console.log(` provider ${decision.provider || '?'}`);
117
+ console.log(` model ${decision.modelRequested || '?'}`);
118
+ console.log('');
119
+ // 2. Cap math
120
+ console.log((0, colors_1.dim)(' cap math'));
121
+ console.log((0, colors_1.dim)(' ────────'));
122
+ const projected = decision.projectedCents || 0;
123
+ const windowBefore = decision.windowSpendBefore || 0;
124
+ console.log(` this call would have cost ${(0, colors_1.greenBold)(formatCents(projected))}`);
125
+ console.log(` spent in window before ${formatCents(windowBefore)}`);
126
+ if (cap) {
127
+ const capCents = cap.amountCents || 0;
128
+ const window = cap.window || '?';
129
+ const windowLabel = WINDOW_LABELS[window] || window;
130
+ const remaining = Math.max(0, capCents - windowBefore);
131
+ const overBy = Math.max(0, projected - remaining);
132
+ console.log(` cap ${(0, colors_1.redBold)(formatCents(capCents))} ${(0, colors_1.dim)(windowLabel)}`);
133
+ console.log(` remaining in window ${formatCents(remaining)}`);
134
+ if (overBy > 0)
135
+ console.log(` call exceeds remaining by ${(0, colors_1.redBold)(formatCents(overBy))}`);
136
+ const saved = Math.max(0, projected - remaining);
137
+ if (saved > 0)
138
+ console.log(` amount saved by block ${(0, colors_1.greenBold)('+' + formatCents(saved))}`);
139
+ console.log('');
140
+ console.log((0, colors_1.dim)(' what unblocks'));
141
+ console.log((0, colors_1.dim)(' ─────────────'));
142
+ const reset = WINDOW_RESETS[window] || 'next window boundary';
143
+ console.log(` window resets at ${(0, colors_1.greenBold)(reset)}`);
144
+ if (cap.downgradeTo)
145
+ console.log(` downgrade target ${(0, colors_1.greenBold)(cap.downgradeTo)}`);
146
+ console.log('');
147
+ }
148
+ // 3. Cryptographic receipt
149
+ console.log((0, colors_1.dim)(' cryptographic receipt'));
150
+ console.log((0, colors_1.dim)(' ─────────────────────'));
151
+ console.log(` sequence ${raw.sequence ?? '?'}`);
152
+ console.log(` entry hash ${String(raw.entryHash || '?').slice(0, 48)}${(0, colors_1.dim)('...')}`);
153
+ console.log(` prev hash ${String(raw.previousHash || '?').slice(0, 48)}${(0, colors_1.dim)('...')}`);
154
+ console.log(` signer (fp) ${String(raw.signerFingerprint || '?').slice(0, 32)}${(0, colors_1.dim)('...')}`);
155
+ const signature = String(raw.signature || '');
156
+ console.log(` signature ${signature.slice(0, 48)}${signature.length > 48 ? (0, colors_1.dim)('...') : ''}`);
157
+ console.log('');
158
+ console.log(` ${(0, colors_1.dim)('to verify cryptographically:')} ${(0, colors_1.greenBold)('agentguard verify --trace latest')}`);
159
+ console.log('');
160
+ // 4. Policy
161
+ console.log((0, colors_1.dim)(' policy'));
162
+ console.log((0, colors_1.dim)(' ──────'));
163
+ console.log(` id ${decision.policyId || '?'}`);
164
+ console.log(` version ${decision.policyVersion || '?'}`);
165
+ console.log(` mode ${decision.enforcementMode || '?'}`);
166
+ const reasons = decision.reasons || [];
167
+ if (reasons.length > 0)
168
+ console.log(` reasons ${reasons.join('; ')}`);
169
+ console.log('');
170
+ return 0;
171
+ }
172
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCH,gCA6GC;AA/ID,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,oCAAoD;AACpD,qCAAoF;AAEpF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAE3F,MAAM,aAAa,GAA2B;IAC5C,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF,MAAM,aAAa,GAA2B;IAC5C,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,0BAA0B;IACtC,QAAQ,EAAE,wBAAwB;IAClC,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,yBAAyB;CACrC,CAAC;AAEF,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC;IAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,GAAG,IAAI,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,eAAM,EAAC,gCAAwB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,iBAAQ,EAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,MAAc,CAAC;IACnB,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,gBAAO,EAAC,SAAS,CAAC,GAAG,wBAAwB,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAA,kBAAS,EAAC,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,YAAY,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,gBAAO,EAAC,SAAS,CAAC,GAAG,2BAA2B,MAAM,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,IAAI,SAAS,CAAC;SAC5D,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,EAAG;SACN,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3B,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,iBAAiB,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,iBAAiB,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;IACtC,MAAM,WAAW,GACf,MAAM,KAAK,OAAO;QAChB,CAAC,CAAC,IAAA,gBAAO,EAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,MAAM,KAAK,WAAW;YACtB,CAAC,CAAC,IAAA,eAAM,EAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC9B,CAAC,CAAC,IAAA,cAAK,EAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,cAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,cAAc;IACd,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,YAAY,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,YAAY,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAA,kBAAS,EAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAE1E,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;QACjC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAA,gBAAO,EAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAA,YAAG,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAA,gBAAO,EAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAA,kBAAS,EAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,iBAAiB,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,iBAAiB,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,sBAAsB,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAA,kBAAS,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAA,kBAAS,EAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,yBAAyB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,yBAAyB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAA,YAAG,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAA,YAAG,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAA,YAAG,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClG,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAA,YAAG,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,KAAK,IAAA,YAAG,EAAC,8BAA8B,CAAC,IAAI,IAAA,kBAAS,EAAC,kCAAkC,CAAC,EAAE,CAC5F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,YAAY;IACZ,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,UAAU,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,IAAA,YAAG,EAAC,UAAU,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,eAAe,IAAI,GAAG,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAa,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * `agentguard init` — scaffold a project to use AgentGuard Spend.
3
+ */
4
+ export declare function runInit(argv: string[]): Promise<number>;
5
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuGH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E7D"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * `agentguard init` — scaffold a project to use AgentGuard Spend.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runInit = runInit;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const index_1 = require("../index");
43
+ const colors_1 = require("./colors");
44
+ const POLICY_TEMPLATE = (now) => `# AgentGuard Spend policy (generated by \`agentguard init\`)
45
+ # All amounts are integer cents. 500 = $5.00.
46
+ id: my-default-policy-v1
47
+ name: My default AgentGuard policy
48
+ version: 1
49
+ effectiveFrom: "${now}"
50
+ mode: enforce
51
+
52
+ scope:
53
+ tenantId: my-tenant
54
+
55
+ caps:
56
+ # Soft daily cap: when $5/day reached, downgrade to a cheaper model.
57
+ - amountCents: 500
58
+ window: per_day
59
+ action: downgrade
60
+ downgradeTo: gpt-4o-mini
61
+ reason: "Soft daily cap reached, routing to gpt-4o-mini"
62
+
63
+ # Hard daily ceiling: at $20/day, block the call.
64
+ - amountCents: 2000
65
+ window: per_day
66
+ action: block
67
+ reason: "Hard daily ceiling ($20/day)"
68
+
69
+ # Per-minute burst guard: catches runaway loops.
70
+ - amountCents: 200
71
+ window: per_minute
72
+ action: block
73
+ reason: "Per-minute burst guard ($2/min)"
74
+ `;
75
+ const QUICKSTART_TEMPLATE = `/**
76
+ * AgentGuard Spend quickstart (generated by \`agentguard init\`).
77
+ *
78
+ * Run after \`npm install @agentguard-run/spend openai\`:
79
+ * node agentguard_quickstart.js
80
+ */
81
+ import OpenAI from 'openai';
82
+ import {
83
+ withSpendGuard,
84
+ AgentGuardBlockedError,
85
+ type SpendPolicy,
86
+ } from '@agentguard-run/spend';
87
+ import { randomBytes } from 'crypto';
88
+
89
+ const policy: SpendPolicy = {
90
+ id: 'my-default-policy-v1',
91
+ name: 'My default AgentGuard policy',
92
+ scope: { tenantId: 'my-tenant' },
93
+ caps: [
94
+ {
95
+ amountCents: 500,
96
+ window: 'per_day',
97
+ action: 'downgrade',
98
+ downgradeTo: 'gpt-4o-mini',
99
+ reason: 'Soft daily cap reached, routing to gpt-4o-mini',
100
+ },
101
+ {
102
+ amountCents: 2000,
103
+ window: 'per_day',
104
+ action: 'block',
105
+ reason: 'Hard daily ceiling (\$20/day)',
106
+ },
107
+ ],
108
+ mode: 'enforce',
109
+ version: 1,
110
+ effectiveFrom: '${new Date().toISOString()}',
111
+ };
112
+
113
+ const privateKey = new Uint8Array(randomBytes(32));
114
+
115
+ const client = withSpendGuard(new OpenAI(), {
116
+ policy,
117
+ scope: { tenantId: 'my-tenant', agentId: 'my-first-agent' },
118
+ config: {
119
+ policy,
120
+ signingKeys: { privateKey, publicKey: new Uint8Array(32) },
121
+ },
122
+ });
123
+
124
+ try {
125
+ const response = await client.chat.completions.create({
126
+ model: 'gpt-4o',
127
+ messages: [{ role: 'user', content: 'Hello from AgentGuard!' }],
128
+ });
129
+ console.log(response.choices[0].message.content);
130
+ } catch (err) {
131
+ if (err instanceof AgentGuardBlockedError) {
132
+ console.error(err.message);
133
+ } else {
134
+ throw err;
135
+ }
136
+ }
137
+ `;
138
+ async function runInit(argv) {
139
+ const force = argv.includes('--force');
140
+ const policyOnly = argv.includes('--policy-only');
141
+ if (argv.includes('--help') || argv.includes('-h')) {
142
+ console.log('agentguard init [--force] [--policy-only]');
143
+ return 0;
144
+ }
145
+ const cwd = process.cwd();
146
+ const policyPath = path.join(cwd, 'agentguard.policy.yaml');
147
+ const quickstartPath = path.join(cwd, 'agentguard_quickstart.ts');
148
+ const gitignorePath = path.join(cwd, '.gitignore');
149
+ console.log('');
150
+ console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
151
+ console.log('');
152
+ console.log(' ' + (0, colors_1.cyanBold)('agentguard init') + (0, colors_1.dim)(' · scaffold a project'));
153
+ console.log('');
154
+ const created = [];
155
+ const skipped = [];
156
+ if (fs.existsSync(policyPath) && !force) {
157
+ skipped.push([path.basename(policyPath), 'already exists (use --force to overwrite)']);
158
+ }
159
+ else {
160
+ const now = new Date().toISOString();
161
+ fs.writeFileSync(policyPath, POLICY_TEMPLATE(now));
162
+ created.push(path.basename(policyPath));
163
+ }
164
+ if (!policyOnly) {
165
+ if (fs.existsSync(quickstartPath) && !force) {
166
+ skipped.push([path.basename(quickstartPath), 'already exists (use --force to overwrite)']);
167
+ }
168
+ else {
169
+ fs.writeFileSync(quickstartPath, QUICKSTART_TEMPLATE);
170
+ created.push(path.basename(quickstartPath));
171
+ }
172
+ }
173
+ let gitignoreModified = false;
174
+ if (fs.existsSync(gitignorePath)) {
175
+ const existing = fs.readFileSync(gitignorePath, 'utf-8');
176
+ if (!existing.includes('.agentguard')) {
177
+ const prefix = existing.endsWith('\n') ? '' : '\n';
178
+ fs.appendFileSync(gitignorePath, prefix + '.agentguard/\n');
179
+ gitignoreModified = true;
180
+ }
181
+ }
182
+ else {
183
+ fs.writeFileSync(gitignorePath, '.agentguard/\n');
184
+ gitignoreModified = true;
185
+ created.push('.gitignore');
186
+ }
187
+ for (const p of created)
188
+ console.log(` ${(0, colors_1.green)('+ created')} ${p}`);
189
+ if (gitignoreModified && !created.includes('.gitignore')) {
190
+ console.log(` ${(0, colors_1.green)('~ updated')} .gitignore ${(0, colors_1.dim)('(added .agentguard/)')}`);
191
+ }
192
+ for (const [p, reason] of skipped) {
193
+ console.log(` ${(0, colors_1.yellow)('= skipped')} ${p} ${(0, colors_1.dim)('(' + reason + ')')}`);
194
+ }
195
+ if (created.length === 0 && !gitignoreModified) {
196
+ console.log(` ${(0, colors_1.yellow)('nothing to do')} ${(0, colors_1.dim)('all files exist; pass --force to overwrite')}`);
197
+ return 0;
198
+ }
199
+ console.log('');
200
+ console.log((0, colors_1.dim)(' ───────────────────────────────────────────'));
201
+ console.log(` ${(0, colors_1.dim)('next:')}`);
202
+ console.log(` 1. edit ${(0, colors_1.greenBold)('agentguard.policy.yaml')} to set your caps`);
203
+ console.log(` 2. ${(0, colors_1.greenBold)('node agentguard_quickstart.js')} ${(0, colors_1.dim)('to see it in action')}`);
204
+ console.log(` 3. ${(0, colors_1.greenBold)('agentguard doctor')} ${(0, colors_1.dim)('to verify your setup')}`);
205
+ console.log('');
206
+ return 0;
207
+ }
208
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAuBH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlF"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6BH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAqClF"}
package/dist/cli/main.js CHANGED
@@ -52,12 +52,18 @@ usage:
52
52
  commands:
53
53
  demo Run a deterministic simulation with a real cryptographic receipt.
54
54
  verify Verify a signed AgentGuard receipt.
55
+ init Scaffold a project (policy.yaml + quickstart + .gitignore).
56
+ doctor Check installation health and configuration.
57
+ explain Decode a signed receipt with cap math + signature breakdown.
55
58
  --version Show the installed SDK version.
56
59
  --help Show this help.
57
60
 
58
61
  examples:
62
+ agentguard init
63
+ agentguard doctor
59
64
  agentguard demo
60
65
  agentguard verify --trace latest
66
+ agentguard explain latest
61
67
 
62
68
  docs: https://agentguard.run
63
69
  install: pip install agentguard-spend / npm install @agentguard-run/spend
@@ -81,6 +87,18 @@ async function main(argv = process.argv.slice(2)) {
81
87
  const { runVerify } = await Promise.resolve().then(() => __importStar(require('./verify')));
82
88
  return runVerify(rest);
83
89
  }
90
+ if (command === 'init') {
91
+ const { runInit } = await Promise.resolve().then(() => __importStar(require('./init')));
92
+ return runInit(rest);
93
+ }
94
+ if (command === 'doctor') {
95
+ const { runDoctor } = await Promise.resolve().then(() => __importStar(require('./doctor')));
96
+ return runDoctor(rest);
97
+ }
98
+ if (command === 'explain') {
99
+ const { runExplain } = await Promise.resolve().then(() => __importStar(require('./explain')));
100
+ return runExplain(rest);
101
+ }
84
102
  process.stderr.write(`agentguard: unknown command '${command}'\n\n`);
85
103
  process.stderr.write(HELP);
86
104
  return 2;
@@ -1 +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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BH,oBAqCC;AAhED,oCAAoD;AAEpD,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBZ,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;IACD,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;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,WAAW,GAAC,CAAC;QACjD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,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"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export { canonicalJson, sha256Hex, computeEntryHash, computeSignerFingerprint, s
12
12
  export { InMemorySpendStore } from './store-memory';
13
13
  export { SpendGuard, withSpendGuard, AgentGuardBlockedError, type SpendGuardConfig, type OpenAIBindingOptions, } from './spend-guard';
14
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
+ export declare const AGENTGUARD_SPEND_VERSION = "0.1.7";
16
16
  /** Patent marking. 35 U.S.C. § 287 constructive notice. */
17
17
  export declare const PATENT_NOTICE: string;
18
18
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -46,7 +46,7 @@ Object.defineProperty(exports, "TRANSLATIONS", { enumerable: true, get: function
46
46
  Object.defineProperty(exports, "resolveLocale", { enumerable: true, get: function () { return i18n_1.resolveLocale; } });
47
47
  Object.defineProperty(exports, "t", { enumerable: true, get: function () { return i18n_1.t; } });
48
48
  Object.defineProperty(exports, "formatBlockedTrace", { enumerable: true, get: function () { return i18n_1.formatBlockedTrace; } });
49
- exports.AGENTGUARD_SPEND_VERSION = '0.1.6';
49
+ exports.AGENTGUARD_SPEND_VERSION = '0.1.7';
50
50
  /** Patent marking. 35 U.S.C. § 287 constructive notice. */
51
51
  exports.PATENT_NOTICE = 'Protected by U.S. patent-pending technology ' +
52
52
  '(App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; ' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentguard-run/spend",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
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",