@agentguard-run/spend 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- 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 +17 -2
- 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/cli/colors.js
CHANGED
|
@@ -3,16 +3,57 @@
|
|
|
3
3
|
* ANSI color helpers with TTY detection.
|
|
4
4
|
*
|
|
5
5
|
* Honors:
|
|
6
|
-
* - NO_COLOR=1
|
|
7
|
-
* - AGENTGUARD_COLOR=0
|
|
8
|
-
* - process.stdout.isTTY
|
|
6
|
+
* - NO_COLOR=1
|
|
7
|
+
* - AGENTGUARD_COLOR=0
|
|
8
|
+
* - process.stdout.isTTY
|
|
9
9
|
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
10
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
44
|
exports.dim = exports.bold = exports.brightCyan = exports.brightGreen = exports.brightRed = exports.cyan = exports.yellow = exports.green = exports.red = void 0;
|
|
12
45
|
exports.cyanBold = cyanBold;
|
|
13
46
|
exports.redBold = redBold;
|
|
14
47
|
exports.greenBold = greenBold;
|
|
48
|
+
exports.agentguardHome = agentguardHome;
|
|
49
|
+
exports.currentPolicyPath = currentPolicyPath;
|
|
50
|
+
exports.currentPolicyId = currentPolicyId;
|
|
51
|
+
exports.currentScopeLabel = currentScopeLabel;
|
|
15
52
|
exports.banner = banner;
|
|
53
|
+
exports.statusBar = statusBar;
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const os = __importStar(require("os"));
|
|
56
|
+
const path = __importStar(require("path"));
|
|
16
57
|
function colorEnabled() {
|
|
17
58
|
if (typeof process === 'undefined')
|
|
18
59
|
return false;
|
|
@@ -46,7 +87,55 @@ function redBold(text) {
|
|
|
46
87
|
function greenBold(text) {
|
|
47
88
|
return colorEnabled() ? `\x1b[1;32m${text}\x1b[0m` : text;
|
|
48
89
|
}
|
|
90
|
+
function agentguardHome() {
|
|
91
|
+
return process.env.AGENTGUARD_HOME || path.join(os.homedir(), '.agentguard');
|
|
92
|
+
}
|
|
93
|
+
function currentPolicyPath() {
|
|
94
|
+
const candidates = [
|
|
95
|
+
process.env.AGENTGUARD_POLICY,
|
|
96
|
+
path.join(process.cwd(), 'agentguard.policy.yaml'),
|
|
97
|
+
path.join(agentguardHome(), 'policy.yaml'),
|
|
98
|
+
].filter((value) => Boolean(value));
|
|
99
|
+
for (const candidate of candidates) {
|
|
100
|
+
try {
|
|
101
|
+
if (fs.existsSync(candidate))
|
|
102
|
+
return candidate;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
function currentPolicyId() {
|
|
111
|
+
const file = currentPolicyPath();
|
|
112
|
+
if (!file)
|
|
113
|
+
return 'none';
|
|
114
|
+
try {
|
|
115
|
+
const match = fs.readFileSync(file, 'utf8').match(/^id:\s*['"]?([^'"\n]+)['"]?/m);
|
|
116
|
+
return match ? match[1].trim() : path.basename(file);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return path.basename(file);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function currentScopeLabel() {
|
|
123
|
+
return process.env.AGENTGUARD_SCOPE || 'tenantId=local';
|
|
124
|
+
}
|
|
49
125
|
function banner(version) {
|
|
50
|
-
|
|
126
|
+
const lines = [
|
|
127
|
+
`⬡ AGENTGUARD SPEND · v${version}`,
|
|
128
|
+
`policy: ${currentPolicyId()} /policy to change`,
|
|
129
|
+
`scope: ${currentScopeLabel()}`,
|
|
130
|
+
`directory: ${process.cwd()}`,
|
|
131
|
+
];
|
|
132
|
+
const width = Math.max(...lines.map((line) => line.length));
|
|
133
|
+
const top = '╭' + '─'.repeat(width + 2) + '╮';
|
|
134
|
+
const bottom = '╰' + '─'.repeat(width + 2) + '╯';
|
|
135
|
+
const body = lines.map((line) => '│ ' + line.padEnd(width) + ' │');
|
|
136
|
+
return cyanBold([top, ...body, bottom].join('\n'));
|
|
137
|
+
}
|
|
138
|
+
function statusBar() {
|
|
139
|
+
return (0, exports.dim)(`policy: ${currentPolicyId()} · scope: ${currentScopeLabel()} · ${process.cwd()}`);
|
|
51
140
|
}
|
|
52
141
|
//# sourceMappingURL=colors.js.map
|
package/dist/cli/colors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/demo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/cli/demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/cli/demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuJ7D"}
|
package/dist/cli/demo.js
CHANGED
|
@@ -65,10 +65,12 @@ async function runDemo(argv) {
|
|
|
65
65
|
console.log('agentguard demo');
|
|
66
66
|
console.log('Run a deterministic simulation with a real cryptographic receipt.');
|
|
67
67
|
console.log('Options:');
|
|
68
|
-
console.log(' --no-color
|
|
68
|
+
console.log(' --no-color Disable colored output (same as NO_COLOR=1).');
|
|
69
|
+
console.log(' --emit-receipt-json <path> Write public verifier demo receipt JSON.');
|
|
69
70
|
return 0;
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
+
const emitReceiptPath = valueAfter(argv, '--emit-receipt-json');
|
|
73
|
+
// Simulated parameters matching the marketing screenshot at agentguard.run/the-block/.
|
|
72
74
|
const agentId = 'agent-finance-bot-v3';
|
|
73
75
|
const provider = 'anthropic';
|
|
74
76
|
const modelRequested = 'claude-opus-4-7';
|
|
@@ -136,6 +138,21 @@ async function runDemo(argv) {
|
|
|
136
138
|
agentId,
|
|
137
139
|
}));
|
|
138
140
|
console.log('');
|
|
141
|
+
const verifierReceipt = {
|
|
142
|
+
entry: {
|
|
143
|
+
sequence: signedEntry.sequence,
|
|
144
|
+
decision: signedEntry.decision,
|
|
145
|
+
previousHash: signedEntry.previousHash,
|
|
146
|
+
entryHash: signedEntry.entryHash,
|
|
147
|
+
signature: signedEntry.signature,
|
|
148
|
+
signerFingerprint: signedEntry.signerFingerprint,
|
|
149
|
+
},
|
|
150
|
+
publicKeyHex: Buffer.from(publicKey).toString('hex'),
|
|
151
|
+
};
|
|
152
|
+
if (emitReceiptPath) {
|
|
153
|
+
fs.mkdirSync(path.dirname(path.resolve(emitReceiptPath)), { recursive: true });
|
|
154
|
+
fs.writeFileSync(path.resolve(emitReceiptPath), JSON.stringify(verifierReceipt, null, 2) + '\n');
|
|
155
|
+
}
|
|
139
156
|
// Persist the receipt so `agentguard verify --trace latest` works.
|
|
140
157
|
try {
|
|
141
158
|
fs.mkdirSync(DEMO_HOME, { recursive: true });
|
|
@@ -170,4 +187,8 @@ async function runDemo(argv) {
|
|
|
170
187
|
console.log('');
|
|
171
188
|
return 0;
|
|
172
189
|
}
|
|
190
|
+
function valueAfter(argv, flag) {
|
|
191
|
+
const index = argv.indexOf(flag);
|
|
192
|
+
return index >= 0 ? argv[index + 1] : undefined;
|
|
193
|
+
}
|
|
173
194
|
//# sourceMappingURL=demo.js.map
|
package/dist/cli/demo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/cli/demo.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBH,
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/cli/demo.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AgentGuard CLI entry point.
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* agentguard demo Run a deterministic simulation
|
|
6
|
-
* agentguard verify --trace latest Verify the latest demo receipt
|
|
7
|
-
* agentguard --version Show installed SDK version
|
|
8
|
-
* agentguard --help Show this help
|
|
9
3
|
*/
|
|
10
4
|
export declare function main(argv?: string[]): Promise<number>;
|
|
11
5
|
//# sourceMappingURL=main.d.ts.map
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAoElF"}
|
package/dist/cli/main.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* AgentGuard CLI entry point.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* agentguard demo Run a deterministic simulation
|
|
7
|
-
* agentguard verify --trace latest Verify the latest demo receipt
|
|
8
|
-
* agentguard --version Show installed SDK version
|
|
9
|
-
* agentguard --help Show this help
|
|
10
4
|
*/
|
|
11
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
6
|
if (k2 === undefined) k2 = k;
|
|
@@ -44,12 +38,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
44
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
39
|
exports.main = main;
|
|
46
40
|
const index_1 = require("../index");
|
|
41
|
+
const colors_1 = require("./colors");
|
|
47
42
|
const HELP = `agentguard: local-runtime spend caps + signed receipts for AI agents
|
|
48
43
|
|
|
49
44
|
usage:
|
|
50
45
|
agentguard <command> [options]
|
|
51
46
|
|
|
52
47
|
commands:
|
|
48
|
+
wizard Guided setup for policy.yaml and quickstarts.
|
|
49
|
+
models Browse models, sync OpenRouter pricing, update policy.
|
|
50
|
+
auth Configure local provider keys.
|
|
51
|
+
tips Show AgentGuard usage tips.
|
|
53
52
|
demo Run a deterministic simulation with a real cryptographic receipt.
|
|
54
53
|
verify Verify a signed AgentGuard receipt.
|
|
55
54
|
init Scaffold a project (policy.yaml + quickstart + .gitignore).
|
|
@@ -61,27 +60,49 @@ commands:
|
|
|
61
60
|
--help Show this help.
|
|
62
61
|
|
|
63
62
|
examples:
|
|
64
|
-
agentguard
|
|
65
|
-
agentguard
|
|
66
|
-
agentguard
|
|
63
|
+
agentguard auth openrouter
|
|
64
|
+
agentguard wizard
|
|
65
|
+
agentguard models --sync-pricing
|
|
66
|
+
agentguard models --task payment-approval
|
|
67
|
+
agentguard demo --emit-receipt-json ./demo-receipt.json
|
|
67
68
|
agentguard verify --trace latest
|
|
68
|
-
agentguard explain latest
|
|
69
|
-
agentguard telemetry status
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
verify: https://agentguard.run/verify
|
|
71
|
+
docs: https://agentguard.run
|
|
73
72
|
`;
|
|
74
73
|
async function main(argv = process.argv.slice(2)) {
|
|
75
74
|
if (argv.length === 0 || ['-h', '--help', 'help'].includes(argv[0])) {
|
|
76
|
-
|
|
75
|
+
console.log((0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
76
|
+
process.stdout.write('\n' + HELP);
|
|
77
77
|
return 0;
|
|
78
78
|
}
|
|
79
79
|
if (['-v', '--version', 'version'].includes(argv[0])) {
|
|
80
80
|
console.log(`agentguard ${index_1.AGENTGUARD_SPEND_VERSION}`);
|
|
81
81
|
return 0;
|
|
82
82
|
}
|
|
83
|
+
const showTips = argv.includes('--tips');
|
|
83
84
|
const command = argv[0];
|
|
84
|
-
const rest = argv.slice(1);
|
|
85
|
+
const rest = argv.slice(1).filter((arg) => arg !== '--tips');
|
|
86
|
+
if (command !== 'tips') {
|
|
87
|
+
const { maybeShowStartupTips } = await Promise.resolve().then(() => __importStar(require('./tips')));
|
|
88
|
+
maybeShowStartupTips(showTips);
|
|
89
|
+
}
|
|
90
|
+
if (command === 'wizard') {
|
|
91
|
+
const { runWizard } = await Promise.resolve().then(() => __importStar(require('./wizard')));
|
|
92
|
+
return runWizard(rest);
|
|
93
|
+
}
|
|
94
|
+
if (command === 'models') {
|
|
95
|
+
const { runModels } = await Promise.resolve().then(() => __importStar(require('./models')));
|
|
96
|
+
return runModels(rest);
|
|
97
|
+
}
|
|
98
|
+
if (command === 'auth') {
|
|
99
|
+
const { runAuth } = await Promise.resolve().then(() => __importStar(require('./auth')));
|
|
100
|
+
return runAuth(rest);
|
|
101
|
+
}
|
|
102
|
+
if (command === 'tips') {
|
|
103
|
+
const { runTips } = await Promise.resolve().then(() => __importStar(require('./tips')));
|
|
104
|
+
return runTips(rest);
|
|
105
|
+
}
|
|
85
106
|
if (command === 'demo') {
|
|
86
107
|
const { runDemo } = await Promise.resolve().then(() => __importStar(require('./demo')));
|
|
87
108
|
return runDemo(rest);
|
|
@@ -114,7 +135,6 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
114
135
|
process.stderr.write(HELP);
|
|
115
136
|
return 2;
|
|
116
137
|
}
|
|
117
|
-
// Allow `node dist/cli/main.js demo` directly
|
|
118
138
|
if (require.main === module) {
|
|
119
139
|
main().then((code) => process.exit(code), (err) => {
|
|
120
140
|
console.error(err);
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type OpenRouterModel } from '../openrouter-catalog';
|
|
2
|
+
export interface ModelRow {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
inputCentsPerMtok: number | null;
|
|
6
|
+
outputCentsPerMtok: number | null;
|
|
7
|
+
capability: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function rowsFromCatalog(models: OpenRouterModel[]): ModelRow[];
|
|
10
|
+
export declare function rowsFromCostTable(): ModelRow[];
|
|
11
|
+
export declare function filterRows(rows: ModelRow[], opts: {
|
|
12
|
+
search?: string;
|
|
13
|
+
capability?: string;
|
|
14
|
+
task?: string;
|
|
15
|
+
}): ModelRow[];
|
|
16
|
+
export declare function suggestedAssignments(task: string): Record<string, string[]>;
|
|
17
|
+
export declare function runModels(argv: string[]): Promise<number>;
|
|
18
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/cli/models.ts"],"names":[],"mappings":"AAIA,OAAO,EAA4D,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKvH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,QAAQ,EAAE,CAYrE;AAED,wBAAgB,iBAAiB,IAAI,QAAQ,EAAE,CAQ9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,EAAE,CAetH;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAQ3E;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C/D"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.rowsFromCatalog = rowsFromCatalog;
|
|
37
|
+
exports.rowsFromCostTable = rowsFromCostTable;
|
|
38
|
+
exports.filterRows = filterRows;
|
|
39
|
+
exports.suggestedAssignments = suggestedAssignments;
|
|
40
|
+
exports.runModels = runModels;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const readline = __importStar(require("readline"));
|
|
44
|
+
const index_1 = require("../index");
|
|
45
|
+
const openrouter_catalog_1 = require("../openrouter-catalog");
|
|
46
|
+
const cost_table_1 = require("../cost-table");
|
|
47
|
+
const templates_1 = require("../templates");
|
|
48
|
+
const colors_1 = require("./colors");
|
|
49
|
+
function rowsFromCatalog(models) {
|
|
50
|
+
return models.map((model) => {
|
|
51
|
+
const input = Number(model.pricing?.prompt);
|
|
52
|
+
const output = Number(model.pricing?.completion);
|
|
53
|
+
return {
|
|
54
|
+
id: model.id,
|
|
55
|
+
name: model.name ?? model.id,
|
|
56
|
+
inputCentsPerMtok: Number.isFinite(input) ? input * 100 * 1_000_000 : null,
|
|
57
|
+
outputCentsPerMtok: Number.isFinite(output) ? output * 100 * 1_000_000 : null,
|
|
58
|
+
capability: capabilityForModel(model.id),
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function rowsFromCostTable() {
|
|
63
|
+
return Object.entries((0, cost_table_1.knownModelCosts)()).map(([id, cost]) => ({
|
|
64
|
+
id,
|
|
65
|
+
name: id,
|
|
66
|
+
inputCentsPerMtok: cost.inputCentsPerKtok * 1000,
|
|
67
|
+
outputCentsPerMtok: cost.outputCentsPerKtok * 1000,
|
|
68
|
+
capability: capabilityForModel(id),
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
function filterRows(rows, opts) {
|
|
72
|
+
let out = rows;
|
|
73
|
+
if (opts.task) {
|
|
74
|
+
const template = (0, templates_1.getTaskTemplate)(opts.task);
|
|
75
|
+
if (template) {
|
|
76
|
+
const allowed = new Set(template.allowedModels);
|
|
77
|
+
out = out.filter((row) => allowed.has(row.id) || row.capability === template.requiredCapability);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (opts.capability)
|
|
81
|
+
out = out.filter((row) => row.capability === opts.capability);
|
|
82
|
+
if (opts.search) {
|
|
83
|
+
const needle = opts.search.toLowerCase();
|
|
84
|
+
out = out.filter((row) => row.id.toLowerCase().includes(needle) || row.name.toLowerCase().includes(needle));
|
|
85
|
+
}
|
|
86
|
+
return out.sort((a, b) => displayCost(a) - displayCost(b) || a.id.localeCompare(b.id));
|
|
87
|
+
}
|
|
88
|
+
function suggestedAssignments(task) {
|
|
89
|
+
const template = (0, templates_1.getTaskTemplate)(task);
|
|
90
|
+
if (!template)
|
|
91
|
+
return {};
|
|
92
|
+
return {
|
|
93
|
+
primary: [template.primaryModel],
|
|
94
|
+
fallback: [template.fallbackModel],
|
|
95
|
+
allowed: template.allowedModels,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function runModels(argv) {
|
|
99
|
+
if (argv.includes('--help') || argv.includes('-h')) {
|
|
100
|
+
console.log('agentguard models [--sync-pricing] [--search <term>] [--capability <tier>] [--task <template>] [--json]');
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
const sync = argv.includes('--sync-pricing');
|
|
104
|
+
const json = argv.includes('--json');
|
|
105
|
+
const search = argValue(argv, '--search');
|
|
106
|
+
const capability = argValue(argv, '--capability');
|
|
107
|
+
const task = argValue(argv, '--task');
|
|
108
|
+
if (sync) {
|
|
109
|
+
const result = await (0, openrouter_catalog_1.syncPricingIntoCostTable)({ force: true });
|
|
110
|
+
if (json) {
|
|
111
|
+
console.log(JSON.stringify(result, null, 2));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
116
|
+
console.log('');
|
|
117
|
+
console.log(` ${(0, colors_1.green)('applied')} ${result.count} OpenRouter pricing overrides`);
|
|
118
|
+
console.log(` ${(0, colors_1.dim)('saved')} ${(0, colors_1.agentguardHome)()}/cost-overrides.json`);
|
|
119
|
+
console.log('');
|
|
120
|
+
}
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
const rows = await loadRows();
|
|
124
|
+
const filtered = filterRows(rows, { search, capability, task });
|
|
125
|
+
if (json) {
|
|
126
|
+
console.log(JSON.stringify({ models: filtered, assignments: task ? suggestedAssignments(task) : undefined }, null, 2));
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
if (process.stdin.isTTY && !search && !capability && !task) {
|
|
130
|
+
const selected = await interactivePick(filtered);
|
|
131
|
+
if (selected.length > 0)
|
|
132
|
+
writeSelectedModels(selected);
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
printRows(filtered, task);
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
async function loadRows() {
|
|
139
|
+
const cached = (0, openrouter_catalog_1.getCachedCatalog)();
|
|
140
|
+
if (cached)
|
|
141
|
+
return rowsFromCatalog(cached.data);
|
|
142
|
+
try {
|
|
143
|
+
const catalog = await (0, openrouter_catalog_1.fetchCatalog)();
|
|
144
|
+
return rowsFromCatalog(catalog.data);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return rowsFromCostTable();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function printRows(rows, task) {
|
|
151
|
+
console.log('');
|
|
152
|
+
console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
153
|
+
console.log('');
|
|
154
|
+
if (task && templates_1.TASK_TEMPLATES[task]) {
|
|
155
|
+
const assignment = suggestedAssignments(task);
|
|
156
|
+
console.log(' ' + (0, colors_1.cyanBold)(`task: ${task}`));
|
|
157
|
+
console.log(` primary: ${assignment.primary?.join(', ') ?? 'n/a'}`);
|
|
158
|
+
console.log(` fallback: ${assignment.fallback?.join(', ') ?? 'n/a'}`);
|
|
159
|
+
console.log('');
|
|
160
|
+
}
|
|
161
|
+
for (const row of rows.slice(0, 80)) {
|
|
162
|
+
console.log(` ${(0, colors_1.green)(row.id.padEnd(38))} ${formatCost(row).padEnd(22)} ${(0, colors_1.dim)(row.capability)}`);
|
|
163
|
+
}
|
|
164
|
+
if (rows.length > 80)
|
|
165
|
+
console.log(` ${(0, colors_1.yellow)(String(rows.length - 80) + ' more')} refine with agentguard models --search <term>`);
|
|
166
|
+
console.log('');
|
|
167
|
+
console.log(' ' + (0, colors_1.statusBar)());
|
|
168
|
+
console.log('');
|
|
169
|
+
}
|
|
170
|
+
async function interactivePick(rows) {
|
|
171
|
+
const selected = new Set();
|
|
172
|
+
let cursor = 0;
|
|
173
|
+
let filtered = rows.slice(0, 80);
|
|
174
|
+
let query = '';
|
|
175
|
+
readline.emitKeypressEvents(process.stdin);
|
|
176
|
+
if (process.stdin.isTTY)
|
|
177
|
+
process.stdin.setRawMode(true);
|
|
178
|
+
const render = () => {
|
|
179
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
180
|
+
console.log((0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
181
|
+
console.log('');
|
|
182
|
+
console.log(`Search: ${query || (0, colors_1.dim)('press / to filter')} Selected: ${selected.size}`);
|
|
183
|
+
console.log('');
|
|
184
|
+
filtered.slice(0, 18).forEach((row, index) => {
|
|
185
|
+
const marker = selected.has(row.id) ? '[x]' : '[ ]';
|
|
186
|
+
const pointer = index === cursor ? '>' : ' ';
|
|
187
|
+
console.log(`${pointer} ${marker} ${row.id.padEnd(40)} ${formatCost(row).padEnd(20)} ${row.capability}`);
|
|
188
|
+
});
|
|
189
|
+
console.log('');
|
|
190
|
+
console.log((0, colors_1.dim)('[/] search [space] select [enter] confirm [q] quit'));
|
|
191
|
+
};
|
|
192
|
+
render();
|
|
193
|
+
return new Promise((resolve) => {
|
|
194
|
+
const onKey = (_chunk, key) => {
|
|
195
|
+
if (key.name === 'q' || (key.ctrl && key.name === 'c'))
|
|
196
|
+
finish([]);
|
|
197
|
+
else if (key.name === 'return')
|
|
198
|
+
finish([...selected]);
|
|
199
|
+
else if (key.name === 'down') {
|
|
200
|
+
cursor = Math.min(cursor + 1, Math.max(0, filtered.length - 1));
|
|
201
|
+
render();
|
|
202
|
+
}
|
|
203
|
+
else if (key.name === 'up') {
|
|
204
|
+
cursor = Math.max(cursor - 1, 0);
|
|
205
|
+
render();
|
|
206
|
+
}
|
|
207
|
+
else if (key.name === 'space') {
|
|
208
|
+
const row = filtered[cursor];
|
|
209
|
+
if (row)
|
|
210
|
+
selected.has(row.id) ? selected.delete(row.id) : selected.add(row.id);
|
|
211
|
+
render();
|
|
212
|
+
}
|
|
213
|
+
else if (key.name === 'backspace') {
|
|
214
|
+
query = query.slice(0, -1);
|
|
215
|
+
filtered = filterRows(rows, { search: query });
|
|
216
|
+
cursor = 0;
|
|
217
|
+
render();
|
|
218
|
+
}
|
|
219
|
+
else if (key.sequence && key.sequence.length === 1 && key.sequence !== '/') {
|
|
220
|
+
query += key.sequence;
|
|
221
|
+
filtered = filterRows(rows, { search: query });
|
|
222
|
+
cursor = 0;
|
|
223
|
+
render();
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
const finish = (value) => {
|
|
227
|
+
process.stdin.off('keypress', onKey);
|
|
228
|
+
if (process.stdin.isTTY)
|
|
229
|
+
process.stdin.setRawMode(false);
|
|
230
|
+
process.stdout.write('\n');
|
|
231
|
+
resolve(value);
|
|
232
|
+
};
|
|
233
|
+
process.stdin.on('keypress', onKey);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
function writeSelectedModels(models) {
|
|
237
|
+
const filePath = path.join((0, colors_1.agentguardHome)(), 'policy.yaml');
|
|
238
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
239
|
+
let existing = '';
|
|
240
|
+
try {
|
|
241
|
+
existing = fs.readFileSync(filePath, 'utf8');
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
existing = defaultPolicy();
|
|
245
|
+
}
|
|
246
|
+
const block = ['allowedModels:', ...models.map((model) => ` - ${model}`)].join('\n') + '\n';
|
|
247
|
+
const next = existing.match(/^allowedModels:/m)
|
|
248
|
+
? existing.replace(/^allowedModels:\n(?: - .*\n)*/m, block)
|
|
249
|
+
: existing.trimEnd() + '\n' + block;
|
|
250
|
+
fs.writeFileSync(filePath, next);
|
|
251
|
+
console.log(`${(0, colors_1.green)('saved')} ${filePath}`);
|
|
252
|
+
}
|
|
253
|
+
function defaultPolicy() {
|
|
254
|
+
return 'id: local-policy-v1\nname: Local AgentGuard policy\nversion: 1\neffectiveFrom: "' + new Date().toISOString() + '"\nmode: enforce\nscope:\n tenantId: local\ncaps:\n - amountCents: 100\n window: per_call\n action: allow\n';
|
|
255
|
+
}
|
|
256
|
+
function formatCost(row) {
|
|
257
|
+
if (row.inputCentsPerMtok === null || row.outputCentsPerMtok === null)
|
|
258
|
+
return '$n/a per 1M';
|
|
259
|
+
return `$${(row.inputCentsPerMtok / 100).toFixed(2)}/$${(row.outputCentsPerMtok / 100).toFixed(2)} per 1M`;
|
|
260
|
+
}
|
|
261
|
+
function displayCost(row) {
|
|
262
|
+
return row.inputCentsPerMtok ?? Number.MAX_SAFE_INTEGER;
|
|
263
|
+
}
|
|
264
|
+
function capabilityForModel(model) {
|
|
265
|
+
if (model.includes('gpt-5') || model.includes('opus') || model.includes('sonnet'))
|
|
266
|
+
return 'payment_initiate';
|
|
267
|
+
if (model.includes('mini') || model.includes('haiku') || model.includes('flash'))
|
|
268
|
+
return 'read_only';
|
|
269
|
+
if ((0, cost_table_1.getModelCost)(model))
|
|
270
|
+
return 'data_write';
|
|
271
|
+
return 'read_only';
|
|
272
|
+
}
|
|
273
|
+
function argValue(argv, flag) {
|
|
274
|
+
const index = argv.indexOf(flag);
|
|
275
|
+
return index >= 0 ? argv[index + 1] : undefined;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=models.js.map
|