@agentguard-run/spend 0.3.0 → 0.4.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 +5 -0
- package/README.es-419.md +11 -0
- package/README.md +11 -0
- package/README.pt-BR.md +11 -0
- package/dist/cli/coach.d.ts +5 -0
- package/dist/cli/coach.d.ts.map +1 -0
- package/dist/cli/coach.js +257 -0
- package/dist/cli/coach.js.map +1 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +6 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/coach/anomaly.d.ts +26 -0
- package/dist/coach/anomaly.d.ts.map +1 -0
- package/dist/coach/anomaly.js +119 -0
- package/dist/coach/anomaly.js.map +1 -0
- package/dist/coach/conversation.d.ts +69 -0
- package/dist/coach/conversation.d.ts.map +1 -0
- package/dist/coach/conversation.js +228 -0
- package/dist/coach/conversation.js.map +1 -0
- package/dist/coach/forecast.d.ts +19 -0
- package/dist/coach/forecast.d.ts.map +1 -0
- package/dist/coach/forecast.js +57 -0
- package/dist/coach/forecast.js.map +1 -0
- package/dist/coach/llm-client.d.ts +41 -0
- package/dist/coach/llm-client.d.ts.map +1 -0
- package/dist/coach/llm-client.js +248 -0
- package/dist/coach/llm-client.js.map +1 -0
- package/dist/coach/output.d.ts +41 -0
- package/dist/coach/output.d.ts.map +1 -0
- package/dist/coach/output.js +173 -0
- package/dist/coach/output.js.map +1 -0
- package/dist/coach/system-prompt.d.ts +20 -0
- package/dist/coach/system-prompt.d.ts.map +1 -0
- package/dist/coach/system-prompt.js +177 -0
- package/dist/coach/system-prompt.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/telemetry.js +1 -1
- package/package.json +9 -2
- package/src/cli/coach.ts +249 -0
- package/src/coach/anomaly.ts +98 -0
- package/src/coach/conversation.ts +248 -0
- package/src/coach/forecast.ts +64 -0
- package/src/coach/llm-client.ts +247 -0
- package/src/coach/output.ts +172 -0
- package/src/coach/system-prompt.ts +181 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
- Added `agentguard coach` subcommand: local LLM-driven policy setup via your OpenRouter key.
|
|
6
|
+
- Added local Coach session logs, policy and quickstart writers, projected savings output, and review and forecast skeletons.
|
|
7
|
+
|
|
3
8
|
## 0.3.0
|
|
4
9
|
|
|
5
10
|
- Added streaming true-up for OpenAI, Anthropic, and Bedrock, including signed settlement entries.
|
package/README.es-419.md
CHANGED
|
@@ -16,6 +16,17 @@ agentguard wizard
|
|
|
16
16
|
|
|
17
17
|
El wizard escribe `~/.agentguard/policy.yaml`, `~/.agentguard/quickstart.ts` y `~/.agentguard/quickstart.py`. También imprime el snippet listo para pegar en su app.
|
|
18
18
|
|
|
19
|
+
|
|
20
|
+
## ¿Necesita ayuda configurando? Ejecute `agentguard coach`
|
|
21
|
+
|
|
22
|
+
`agentguard coach` usa su clave de OpenRouter, o cualquier endpoint compatible con OpenAI vía `--base-url`, para guiar la configuración en su terminal. La infraestructura de AgentGuard nunca ve prompts, respuestas, claves, detalles de política ni el log de sesión.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
agentguard coach
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Coach escribe `~/.agentguard/policy.yaml`, un quickstart según el lenguaje, la matemática de ahorro proyectado y un log JSONL local en `~/.agentguard/coach-sessions/`.
|
|
29
|
+
|
|
19
30
|
## Por qué OpenRouter
|
|
20
31
|
|
|
21
32
|
Una clave de OpenRouter da acceso a cientos de modelos de muchos proveedores. Finanzas ve una factura. AgentGuard aplica quién usa qué, qué tiers de tarea pueden llegar a qué modelos y cuánto puede gastar cada llamada. La clave vive en `OPENROUTER_API_KEY` o `~/.agentguard/openrouter-key` con modo `600`.
|
package/README.md
CHANGED
|
@@ -31,6 +31,17 @@ const response = await guardedClient.chat.completions.create({
|
|
|
31
31
|
|
|
32
32
|
Then run your agent. AgentGuard decides locally before any provider call starts, signs the receipt, and applies allow, downgrade, shadow, or block.
|
|
33
33
|
|
|
34
|
+
|
|
35
|
+
## Need help configuring? Run `agentguard coach`
|
|
36
|
+
|
|
37
|
+
`agentguard coach` uses your OpenRouter key, or any OpenAI-compatible endpoint you pass with `--base-url`, to run a local setup dialogue in your terminal. AgentGuard infrastructure never sees the prompts, completions, keys, policy details, or session log.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
agentguard coach
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Coach writes `~/.agentguard/policy.yaml`, a language-aware quickstart file, projected savings math, and a local JSONL session log under `~/.agentguard/coach-sessions/`.
|
|
44
|
+
|
|
34
45
|
## Why OpenRouter?
|
|
35
46
|
|
|
36
47
|
One OpenRouter key gives your team access to hundreds of models across many providers. Your CFO sees one invoice. AgentGuard enforces who uses what, which task tiers can reach which models, and what each call can spend. The OpenRouter key can live in `OPENROUTER_API_KEY` or `~/.agentguard/openrouter-key` with mode `600`.
|
package/README.pt-BR.md
CHANGED
|
@@ -16,6 +16,17 @@ agentguard wizard
|
|
|
16
16
|
|
|
17
17
|
O wizard escreve `~/.agentguard/policy.yaml`, `~/.agentguard/quickstart.ts` e `~/.agentguard/quickstart.py`. Ele também imprime o snippet pronto para colar no app.
|
|
18
18
|
|
|
19
|
+
|
|
20
|
+
## Precisa de ajuda para configurar? Rode `agentguard coach`
|
|
21
|
+
|
|
22
|
+
`agentguard coach` usa sua chave OpenRouter, ou qualquer endpoint compatível com OpenAI via `--base-url`, para guiar a configuração no terminal. A infraestrutura da AgentGuard nunca vê prompts, respostas, chaves, detalhes de política nem o log de sessão.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
agentguard coach
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Coach escreve `~/.agentguard/policy.yaml`, um quickstart conforme a linguagem, a matemática de economia projetada e um log JSONL local em `~/.agentguard/coach-sessions/`.
|
|
29
|
+
|
|
19
30
|
## Por que OpenRouter
|
|
20
31
|
|
|
21
32
|
Uma chave OpenRouter dá acesso a centenas de modelos de muitos provedores. Finanças vê uma fatura. AgentGuard aplica quem usa o quê, quais tiers de tarefa podem acessar quais modelos e quanto cada chamada pode gastar. A chave fica em `OPENROUTER_API_KEY` ou `~/.agentguard/openrouter-key` com modo `600`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coach.d.ts","sourceRoot":"","sources":["../../src/cli/coach.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgF9D"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `agentguard coach`: local LLM-driven policy setup.
|
|
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.runCoach = runCoach;
|
|
40
|
+
const readline = __importStar(require("readline"));
|
|
41
|
+
const index_1 = require("../index");
|
|
42
|
+
const conversation_1 = require("../coach/conversation");
|
|
43
|
+
const forecast_1 = require("../coach/forecast");
|
|
44
|
+
const llm_client_1 = require("../coach/llm-client");
|
|
45
|
+
const anomaly_1 = require("../coach/anomaly");
|
|
46
|
+
const system_prompt_1 = require("../coach/system-prompt");
|
|
47
|
+
const output_1 = require("../coach/output");
|
|
48
|
+
const colors_1 = require("./colors");
|
|
49
|
+
const HELP = `agentguard coach: local LLM-driven policy setup
|
|
50
|
+
|
|
51
|
+
usage:
|
|
52
|
+
agentguard coach [--provider openrouter|openai|anthropic|compatible] [--base-url <url>] [--model <model>]
|
|
53
|
+
agentguard coach review [--scope <name>]
|
|
54
|
+
agentguard coach forecast [--scope <name>] [--cap-cents <cents>]
|
|
55
|
+
|
|
56
|
+
examples:
|
|
57
|
+
agentguard auth openrouter
|
|
58
|
+
agentguard coach
|
|
59
|
+
agentguard coach --base-url https://api.deepseek.com/v1 --model deepseek-chat
|
|
60
|
+
agentguard coach review
|
|
61
|
+
`;
|
|
62
|
+
async function runCoach(argv) {
|
|
63
|
+
if (argv.includes('--help') || argv.includes('-h')) {
|
|
64
|
+
console.log(HELP);
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
if (argv[0] === 'review')
|
|
68
|
+
return runCoachReview(argv.slice(1));
|
|
69
|
+
if (argv[0] === 'forecast')
|
|
70
|
+
return runCoachForecast(argv.slice(1));
|
|
71
|
+
const options = parseOptions(argv);
|
|
72
|
+
const apiKey = (0, llm_client_1.resolveCoachApiKey)(options.provider);
|
|
73
|
+
if (options.provider !== 'mock' && !apiKey) {
|
|
74
|
+
console.log('');
|
|
75
|
+
console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(` ${(0, colors_1.yellow)('agentguard coach needs a local provider key')}`);
|
|
78
|
+
console.log(' Run agentguard auth openrouter, set OPENROUTER_API_KEY, or pass --base-url with AGENTGUARD_COACH_API_KEY.');
|
|
79
|
+
console.log(' Prompts and policy details stay in your terminal and go only to your chosen provider.');
|
|
80
|
+
console.log('');
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
let cancelled = false;
|
|
84
|
+
const logger = (0, output_1.createCoachSessionLogger)();
|
|
85
|
+
const onSigint = () => {
|
|
86
|
+
cancelled = true;
|
|
87
|
+
logger.append('cancelled', { reason: 'sigint' });
|
|
88
|
+
process.stdout.write('\ncoach cancelled. No policy files were written.\n');
|
|
89
|
+
};
|
|
90
|
+
process.once('SIGINT', onSigint);
|
|
91
|
+
try {
|
|
92
|
+
const conversation = new conversation_1.CoachConversation(options.language ? { language: options.language } : undefined);
|
|
93
|
+
const history = [{ role: 'system', content: system_prompt_1.MASTER_SYSTEM_PROMPT }];
|
|
94
|
+
const client = (0, llm_client_1.createCoachClient)({ provider: options.provider, baseUrl: options.baseUrl, model: options.model, apiKey: apiKey ?? undefined });
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log((0, colors_1.cyanBold)('AgentGuard Coach'));
|
|
99
|
+
console.log((0, colors_1.dim)('Local LLM setup. No AgentGuard service receives prompts, completions, keys, or policies.'));
|
|
100
|
+
console.log('');
|
|
101
|
+
if (options.defaults || !process.stdin.isTTY) {
|
|
102
|
+
fillDefaults(conversation);
|
|
103
|
+
logger.append('answers_defaulted', { answers: conversation.snapshot() });
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
await runInteractiveQuestions(conversation, logger, history, client, () => cancelled);
|
|
107
|
+
}
|
|
108
|
+
if (cancelled)
|
|
109
|
+
return 130;
|
|
110
|
+
if (!conversation.isComplete()) {
|
|
111
|
+
console.log((0, colors_1.yellow)('coach did not collect enough answers to write policy files.'));
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
const profile = conversation.profile(process.cwd());
|
|
115
|
+
if (options.language)
|
|
116
|
+
profile.language = options.language;
|
|
117
|
+
logger.append('profile_built', { profile });
|
|
118
|
+
console.log('');
|
|
119
|
+
await streamCoachSummary(client, history, profileSummaryPrompt(profile), logger, () => cancelled);
|
|
120
|
+
if (cancelled)
|
|
121
|
+
return 130;
|
|
122
|
+
const outputs = (0, output_1.writeCoachOutputs)(profile, { language: profile.language, overwrite: options.yes || options.defaults });
|
|
123
|
+
logger.append('files_written', { policyPath: outputs.policyPath, quickstartPath: outputs.quickstartPath, sessionLogPath: logger.path });
|
|
124
|
+
console.log('');
|
|
125
|
+
console.log(outputs.savingsTable);
|
|
126
|
+
console.log('');
|
|
127
|
+
console.log(`${(0, colors_1.green)('created')} ${outputs.policyPath}`);
|
|
128
|
+
console.log(`${(0, colors_1.green)('created')} ${outputs.quickstartPath}`);
|
|
129
|
+
console.log(`${(0, colors_1.green)('session')} ${logger.path}`);
|
|
130
|
+
console.log('');
|
|
131
|
+
console.log('Next: agentguard demo --policy ~/.agentguard/policy.yaml');
|
|
132
|
+
console.log('Verify receipts: https://agentguard.run/verify');
|
|
133
|
+
console.log('');
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
process.removeListener('SIGINT', onSigint);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function runCoachReview(argv) {
|
|
141
|
+
const scope = valueAfter(argv, '--scope') ?? 'default';
|
|
142
|
+
const anomalies = (0, anomaly_1.reviewAnomalies)((0, anomaly_1.readDecisionSpend)(scope));
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
145
|
+
console.log('');
|
|
146
|
+
if (anomalies.length === 0) {
|
|
147
|
+
console.log('No local spend anomalies found for the last 24 hours.');
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
for (const item of anomalies) {
|
|
151
|
+
console.log(`${item.scope}/${item.agentId}: ${(0, conversation_1.formatCents)(item.last24hCents)} in last 24h. Baseline ${(0, conversation_1.formatCents)(item.baselineCents)}, sigma ${(0, conversation_1.formatCents)(item.sigmaCents)}.`);
|
|
152
|
+
console.log(`Suggestion: ${item.suggestion}`);
|
|
153
|
+
}
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
async function runCoachForecast(argv) {
|
|
157
|
+
const scope = valueAfter(argv, '--scope') ?? 'default';
|
|
158
|
+
const cap = valueAfter(argv, '--cap-cents');
|
|
159
|
+
const forecast = (0, forecast_1.forecastMonthEnd)((0, anomaly_1.readDecisionSpend)(scope), cap ? Number(cap) : null);
|
|
160
|
+
console.log('');
|
|
161
|
+
console.log(' ' + (0, colors_1.banner)(index_1.AGENTGUARD_SPEND_VERSION));
|
|
162
|
+
console.log('');
|
|
163
|
+
console.log(`Days observed: ${forecast.daysObserved}`);
|
|
164
|
+
console.log(`Projected month-end: ${(0, conversation_1.formatCents)(forecast.monthEndCents)}`);
|
|
165
|
+
if (forecast.capCents !== null)
|
|
166
|
+
console.log(`Cap: ${(0, conversation_1.formatCents)(forecast.capCents)}`);
|
|
167
|
+
console.log(forecast.message);
|
|
168
|
+
return 0;
|
|
169
|
+
}
|
|
170
|
+
async function runInteractiveQuestions(conversation, logger, history, client, isCancelled) {
|
|
171
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
172
|
+
const ask = (prompt) => new Promise((resolve) => rl.question(`${prompt}\n> `, resolve));
|
|
173
|
+
try {
|
|
174
|
+
while (!conversation.isComplete() && !isCancelled()) {
|
|
175
|
+
const question = conversation.currentQuestion();
|
|
176
|
+
if (!question)
|
|
177
|
+
break;
|
|
178
|
+
const answer = (await ask(question.prompt)).trim();
|
|
179
|
+
if (answer.toLowerCase() === 'back') {
|
|
180
|
+
conversation.back();
|
|
181
|
+
logger.append('back', { to: conversation.currentQuestion()?.id });
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (!answer)
|
|
185
|
+
continue;
|
|
186
|
+
conversation.answer(answer);
|
|
187
|
+
logger.append('answer', { question: question.id, answer });
|
|
188
|
+
history.push({ role: 'user', content: `${question.prompt}\n${answer}` });
|
|
189
|
+
await streamCoachSummary(client, history, coachQuestionPrompt(question.id), logger, isCancelled);
|
|
190
|
+
conversation.next();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
rl.close();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async function streamCoachSummary(client, history, prompt, logger, isCancelled) {
|
|
198
|
+
history.push({ role: 'user', content: prompt });
|
|
199
|
+
let content = '';
|
|
200
|
+
process.stdout.write('\n');
|
|
201
|
+
try {
|
|
202
|
+
for await (const token of client.streamChat(history)) {
|
|
203
|
+
if (isCancelled())
|
|
204
|
+
break;
|
|
205
|
+
content += token;
|
|
206
|
+
process.stdout.write(token);
|
|
207
|
+
}
|
|
208
|
+
process.stdout.write('\n');
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
212
|
+
content = `Coach provider unavailable: ${message}`;
|
|
213
|
+
console.log(content);
|
|
214
|
+
}
|
|
215
|
+
history.push({ role: 'assistant', content });
|
|
216
|
+
logger.append('assistant', { content });
|
|
217
|
+
}
|
|
218
|
+
function fillDefaults(conversation) {
|
|
219
|
+
const answers = [
|
|
220
|
+
'A customer support agent for an ecommerce business',
|
|
221
|
+
'Team of 5, around 2000 support tickets and orders per month',
|
|
222
|
+
'triage refunds, draft support replies, assemble chargeback evidence',
|
|
223
|
+
'$199 monthly budget with low per-call costs',
|
|
224
|
+
'Confirmed',
|
|
225
|
+
];
|
|
226
|
+
for (const answer of answers) {
|
|
227
|
+
if (!conversation.currentQuestion())
|
|
228
|
+
break;
|
|
229
|
+
conversation.answer(answer);
|
|
230
|
+
conversation.next();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function coachQuestionPrompt(id) {
|
|
234
|
+
return `Acknowledge the ${id} answer in 2 short sentences. Ask only the next unanswered setup question. Do not write files yet.`;
|
|
235
|
+
}
|
|
236
|
+
function profileSummaryPrompt(profile) {
|
|
237
|
+
return `Prepare a concise final setup summary for this profile before files are written: ${JSON.stringify(profile)}. Include projected savings math in words. Do not invent model names or pricing.`;
|
|
238
|
+
}
|
|
239
|
+
function parseOptions(argv) {
|
|
240
|
+
const baseUrl = valueAfter(argv, '--base-url');
|
|
241
|
+
const providerFlag = valueAfter(argv, '--provider');
|
|
242
|
+
const provider = providerFlag ?? (baseUrl ? 'compatible' : 'openrouter');
|
|
243
|
+
const language = valueAfter(argv, '--language');
|
|
244
|
+
return {
|
|
245
|
+
provider,
|
|
246
|
+
baseUrl,
|
|
247
|
+
model: valueAfter(argv, '--model'),
|
|
248
|
+
language: language === 'py' ? 'py' : language === 'ts' ? 'ts' : undefined,
|
|
249
|
+
defaults: argv.includes('--defaults'),
|
|
250
|
+
yes: argv.includes('--yes') || argv.includes('-y'),
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
function valueAfter(argv, flag) {
|
|
254
|
+
const index = argv.indexOf(flag);
|
|
255
|
+
return index >= 0 ? argv[index + 1] : undefined;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=coach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coach.js","sourceRoot":"","sources":["../../src/cli/coach.ts"],"names":[],"mappings":"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"}
|
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;;GAEG;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuCH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwElF"}
|
package/dist/cli/main.js
CHANGED
|
@@ -45,6 +45,7 @@ usage:
|
|
|
45
45
|
agentguard <command> [options]
|
|
46
46
|
|
|
47
47
|
commands:
|
|
48
|
+
coach Local LLM setup that writes policy.yaml and quickstart code.
|
|
48
49
|
wizard Guided setup for policy.yaml and quickstarts.
|
|
49
50
|
models Browse models, sync OpenRouter pricing, update policy.
|
|
50
51
|
auth Configure local provider keys.
|
|
@@ -61,6 +62,7 @@ commands:
|
|
|
61
62
|
|
|
62
63
|
examples:
|
|
63
64
|
agentguard auth openrouter
|
|
65
|
+
agentguard coach
|
|
64
66
|
agentguard wizard
|
|
65
67
|
agentguard models --sync-pricing
|
|
66
68
|
agentguard models --task payment-approval
|
|
@@ -87,6 +89,10 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
87
89
|
const { maybeShowStartupTips } = await Promise.resolve().then(() => __importStar(require('./tips')));
|
|
88
90
|
maybeShowStartupTips(showTips);
|
|
89
91
|
}
|
|
92
|
+
if (command === 'coach') {
|
|
93
|
+
const { runCoach } = await Promise.resolve().then(() => __importStar(require('./coach')));
|
|
94
|
+
return runCoach(rest);
|
|
95
|
+
}
|
|
90
96
|
if (command === 'wizard') {
|
|
91
97
|
const { runWizard } = await Promise.resolve().then(() => __importStar(require('./wizard')));
|
|
92
98
|
return runWizard(rest);
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentGuard(TM) Spend: local Coach anomaly review skeleton.
|
|
3
|
+
*
|
|
4
|
+
* Reads local decision logs only. No network calls are made.
|
|
5
|
+
*
|
|
6
|
+
* Patent notice: Protected by U.S. patent-pending technology
|
|
7
|
+
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
8
|
+
* 64/071,781; 64/071,789).
|
|
9
|
+
*/
|
|
10
|
+
export interface CoachSpendPoint {
|
|
11
|
+
ts: string;
|
|
12
|
+
scope: string;
|
|
13
|
+
agentId: string;
|
|
14
|
+
cents: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CoachAnomaly {
|
|
17
|
+
scope: string;
|
|
18
|
+
agentId: string;
|
|
19
|
+
last24hCents: number;
|
|
20
|
+
baselineCents: number;
|
|
21
|
+
sigmaCents: number;
|
|
22
|
+
suggestion: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function readDecisionSpend(scope?: string, home?: string): CoachSpendPoint[];
|
|
25
|
+
export declare function reviewAnomalies(points: CoachSpendPoint[], now?: Date): CoachAnomaly[];
|
|
26
|
+
//# sourceMappingURL=anomaly.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anomaly.d.ts","sourceRoot":"","sources":["../../src/coach/anomaly.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAY,EAAE,IAAI,SAAmB,GAAG,eAAe,EAAE,CAuB/F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,GAAG,OAAa,GAAG,YAAY,EAAE,CA6B3F"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentGuard(TM) Spend: local Coach anomaly review skeleton.
|
|
4
|
+
*
|
|
5
|
+
* Reads local decision logs only. No network calls are made.
|
|
6
|
+
*
|
|
7
|
+
* Patent notice: Protected by U.S. patent-pending technology
|
|
8
|
+
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
9
|
+
* 64/071,781; 64/071,789).
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.readDecisionSpend = readDecisionSpend;
|
|
46
|
+
exports.reviewAnomalies = reviewAnomalies;
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const output_1 = require("./output");
|
|
50
|
+
function readDecisionSpend(scope = 'default', home = (0, output_1.agentguardHome)()) {
|
|
51
|
+
const file = path.join(home, scope, 'decisions.ndjson');
|
|
52
|
+
if (!fs.existsSync(file))
|
|
53
|
+
return [];
|
|
54
|
+
const points = [];
|
|
55
|
+
for (const line of fs.readFileSync(file, 'utf8').split('\n')) {
|
|
56
|
+
if (!line.trim())
|
|
57
|
+
continue;
|
|
58
|
+
try {
|
|
59
|
+
const parsed = JSON.parse(line);
|
|
60
|
+
const decision = parsed.decision ?? parsed;
|
|
61
|
+
const cents = Number(decision.actualCents ?? decision.projectedCents ?? 0);
|
|
62
|
+
const ts = String(decision.timestamp ?? parsed.timestamp ?? new Date(0).toISOString());
|
|
63
|
+
const scopeObj = decision.scope ?? {};
|
|
64
|
+
points.push({
|
|
65
|
+
ts,
|
|
66
|
+
scope: String(scopeObj.tenantId ?? decision.triggeredScopeKey ?? scope),
|
|
67
|
+
agentId: String(scopeObj.agentId ?? decision.agentId ?? 'unknown'),
|
|
68
|
+
cents: Number.isFinite(cents) ? cents : 0,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return points;
|
|
76
|
+
}
|
|
77
|
+
function reviewAnomalies(points, now = new Date()) {
|
|
78
|
+
const cutoff = now.getTime() - 24 * 60 * 60 * 1000;
|
|
79
|
+
const byAgent = new Map();
|
|
80
|
+
for (const point of points) {
|
|
81
|
+
const key = `${point.scope}\t${point.agentId}`;
|
|
82
|
+
byAgent.set(key, [...(byAgent.get(key) ?? []), point]);
|
|
83
|
+
}
|
|
84
|
+
const anomalies = [];
|
|
85
|
+
for (const [key, rows] of byAgent) {
|
|
86
|
+
const [scope, agentId] = key.split('\t');
|
|
87
|
+
const daily = bucketDaily(rows);
|
|
88
|
+
const historical = daily.filter((row) => row.day < dayKey(new Date(cutoff))).map((row) => row.cents);
|
|
89
|
+
const recent = rows.filter((row) => Date.parse(row.ts) >= cutoff).reduce((sum, row) => sum + row.cents, 0);
|
|
90
|
+
if (historical.length < 3 || recent <= 0)
|
|
91
|
+
continue;
|
|
92
|
+
const mean = historical.reduce((sum, value) => sum + value, 0) / historical.length;
|
|
93
|
+
const variance = historical.reduce((sum, value) => sum + Math.pow(value - mean, 2), 0) / historical.length;
|
|
94
|
+
const sigma = Math.sqrt(variance);
|
|
95
|
+
if (recent > mean + 3 * sigma) {
|
|
96
|
+
anomalies.push({
|
|
97
|
+
scope: scope ?? 'unknown',
|
|
98
|
+
agentId: agentId ?? 'unknown',
|
|
99
|
+
last24hCents: recent,
|
|
100
|
+
baselineCents: Math.round(mean),
|
|
101
|
+
sigmaCents: Math.round(sigma),
|
|
102
|
+
suggestion: 'Lower the per_day cap or add a per_minute block cap for this agent.',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return anomalies.sort((a, b) => b.last24hCents - a.last24hCents);
|
|
107
|
+
}
|
|
108
|
+
function bucketDaily(points) {
|
|
109
|
+
const buckets = new Map();
|
|
110
|
+
for (const point of points) {
|
|
111
|
+
const day = dayKey(new Date(point.ts));
|
|
112
|
+
buckets.set(day, (buckets.get(day) ?? 0) + point.cents);
|
|
113
|
+
}
|
|
114
|
+
return [...buckets.entries()].map(([day, cents]) => ({ day, cents })).sort((a, b) => a.day.localeCompare(b.day));
|
|
115
|
+
}
|
|
116
|
+
function dayKey(date) {
|
|
117
|
+
return date.toISOString().slice(0, 10);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=anomaly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anomaly.js","sourceRoot":"","sources":["../../src/coach/anomaly.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentGuard(TM) Spend: Coach conversation state.
|
|
3
|
+
*
|
|
4
|
+
* Patent notice: Protected by U.S. patent-pending technology
|
|
5
|
+
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
6
|
+
* 64/071,781; 64/071,789).
|
|
7
|
+
*/
|
|
8
|
+
import type { CapabilityTier, SpendPolicy } from '../types';
|
|
9
|
+
export type CoachQuestionId = 'building' | 'scale' | 'tasks' | 'budget' | 'confirm';
|
|
10
|
+
export interface CoachQuestion {
|
|
11
|
+
id: CoachQuestionId;
|
|
12
|
+
prompt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface CoachAnswers {
|
|
15
|
+
building?: string;
|
|
16
|
+
scale?: string;
|
|
17
|
+
tasks?: string;
|
|
18
|
+
budget?: string;
|
|
19
|
+
confirm?: string;
|
|
20
|
+
language?: 'ts' | 'py';
|
|
21
|
+
}
|
|
22
|
+
export interface CoachBusinessProfile {
|
|
23
|
+
vertical: string;
|
|
24
|
+
tenantId: string;
|
|
25
|
+
teamSize: number;
|
|
26
|
+
monthlyVolume: number;
|
|
27
|
+
tasks: string[];
|
|
28
|
+
monthlyBudgetCents: number;
|
|
29
|
+
requiredCapability: CapabilityTier;
|
|
30
|
+
primaryModel: string;
|
|
31
|
+
fallbackModel: string;
|
|
32
|
+
perCallCapCents: number;
|
|
33
|
+
perDayCapCents: number;
|
|
34
|
+
perMonthCapCents: number;
|
|
35
|
+
scopeLabel: string;
|
|
36
|
+
language: 'ts' | 'py';
|
|
37
|
+
}
|
|
38
|
+
export interface ProjectedSavingsRow {
|
|
39
|
+
label: string;
|
|
40
|
+
beforeCents: number;
|
|
41
|
+
afterCents: number;
|
|
42
|
+
savingsCents: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ProjectedSavings {
|
|
45
|
+
rows: ProjectedSavingsRow[];
|
|
46
|
+
monthlyBeforeCents: number;
|
|
47
|
+
monthlyAfterCents: number;
|
|
48
|
+
monthlySavingsCents: number;
|
|
49
|
+
savingsPercent: number;
|
|
50
|
+
}
|
|
51
|
+
export declare const COACH_QUESTIONS: CoachQuestion[];
|
|
52
|
+
export declare class CoachConversation {
|
|
53
|
+
private answers;
|
|
54
|
+
private index;
|
|
55
|
+
constructor(initial?: CoachAnswers);
|
|
56
|
+
currentQuestion(): CoachQuestion | null;
|
|
57
|
+
answer(value: string): void;
|
|
58
|
+
next(): CoachQuestion | null;
|
|
59
|
+
back(): CoachQuestion | null;
|
|
60
|
+
isComplete(): boolean;
|
|
61
|
+
snapshot(): CoachAnswers;
|
|
62
|
+
profile(cwd?: string): CoachBusinessProfile;
|
|
63
|
+
}
|
|
64
|
+
export declare function buildBusinessProfile(answers: CoachAnswers, cwd?: string): CoachBusinessProfile;
|
|
65
|
+
export declare function buildPolicyFromProfile(profile: CoachBusinessProfile): SpendPolicy;
|
|
66
|
+
export declare function projectedSavings(profile: CoachBusinessProfile): ProjectedSavings;
|
|
67
|
+
export declare function formatCents(cents: number): string;
|
|
68
|
+
export declare function detectProjectLanguage(cwd: string): 'ts' | 'py';
|
|
69
|
+
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/coach/conversation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAY,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,eAAe,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,cAAc,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,EAM1C,CAAC;AAaF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAAK;gBAEN,OAAO,CAAC,EAAE,YAAY;IAKlC,eAAe,IAAI,aAAa,GAAG,IAAI;IAIvC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM3B,IAAI,IAAI,aAAa,GAAG,IAAI;IAK5B,IAAI,IAAI,aAAa,GAAG,IAAI;IAK5B,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,YAAY;IAIxB,OAAO,CAAC,GAAG,SAAgB,GAAG,oBAAoB;CAGnD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAgB,GAAG,oBAAoB,CAwBrG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CAgCjF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,gBAAgB,CAgBhF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQ9D"}
|