@salimassili/ai-costguard 2.1.4 → 2.2.2
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 +16 -9
- package/README.md +114 -40
- package/dist/core/CostGuard.d.ts +1 -1
- package/dist/core/CostGuard.d.ts.map +1 -1
- package/dist/core/GuardCore.d.ts +3 -0
- package/dist/core/GuardCore.d.ts.map +1 -1
- package/dist/core/GuardCore.js +161 -6
- package/dist/core/GuardCore.js.map +1 -1
- package/dist/core/GuardFree.d.ts +1 -1
- package/dist/core/GuardFree.d.ts.map +1 -1
- package/dist/core/GuardFree.js +1 -1
- package/dist/core/GuardFree.js.map +1 -1
- package/dist/core/GuardPro.d.ts +20 -7
- package/dist/core/GuardPro.d.ts.map +1 -1
- package/dist/core/GuardPro.js +157 -28
- package/dist/core/GuardPro.js.map +1 -1
- package/dist/core/alerts.d.ts +6 -0
- package/dist/core/alerts.d.ts.map +1 -0
- package/dist/core/alerts.js +52 -0
- package/dist/core/alerts.js.map +1 -0
- package/dist/core/types.d.ts +63 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/pricing/index.d.ts.map +1 -1
- package/dist/pricing/index.js +38 -10
- package/dist/pricing/index.js.map +1 -1
- package/docs/DASHBOARD.md +5 -3
- package/docs/INTEGRATIONS.md +45 -9
- package/examples/integrations/slack-alerts.mjs +59 -0
- package/examples/integrations/webhook-alerts.mjs +58 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
4
|
-
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
## 2.2.0 - 2026-07-03
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Changed `GuardPro` budget enforcement so blocked over-budget charges are not persisted as real spend.
|
|
8
|
+
- Added `usage` event logging after provider usage reconciliation so local dashboard actual-spend summaries reflect provider-reported usage.
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Aligned release-facing Pro copy around the current `$49` one-time production setup kit.
|
|
13
|
+
- Updated starter template dependencies to `@salimassili/ai-costguard` `^2.2.0`.
|
|
14
|
+
- Recalibrated the built-in zero-dependency token estimator with simple model-family and text-shape heuristics.
|
|
15
|
+
- Improved the fixed proxy token benchmark from `237.76%` average error to `9.68%` average error while keeping `registerTokenizer()` as the recommended exact-counting path.
|
|
16
|
+
- Added release hygiene ignores and contribution notes for generated artifacts, local install-test projects, package output, and paid-kit archives.
|
|
17
|
+
- Renamed starter templates from `*-firewall` to `*-costguard`.
|
|
18
|
+
- Marked the older `pro-v0.1` folder as archived Redis-starter material.
|
|
12
19
|
|
|
13
20
|
## 2.1.0 - 2026-06-09
|
|
14
21
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AI CostGuard
|
|
2
2
|
[](https://www.npmjs.com/package/@salimassili/ai-costguard)
|
|
3
|
-
[](https://salimassili.lemonsqueezy.com/buy/ai-costguard-pro)
|
|
4
4
|
|
|
5
5
|
AI CostGuard is a local-first runtime safety layer for AI agents that prevents runaway costs, loops, retries, and budget explosions before API calls execute. It wraps OpenAI-compatible clients and function-style SDK calls, estimates request cost locally, blocks budget overruns, detects repeated prompts, emits structured events, and exposes CLI checks plus a local dashboard.
|
|
6
6
|
|
|
@@ -147,10 +147,15 @@ Current runtime block codes:
|
|
|
147
147
|
## Configuration
|
|
148
148
|
|
|
149
149
|
```ts
|
|
150
|
-
guard(client, {
|
|
151
|
-
budget:
|
|
152
|
-
|
|
153
|
-
|
|
150
|
+
guard(client, {
|
|
151
|
+
budget: {
|
|
152
|
+
maxUsd: 10,
|
|
153
|
+
thresholdPercent: 0.8,
|
|
154
|
+
},
|
|
155
|
+
projectId: 'production-api',
|
|
156
|
+
runId: 'optional-agent-run',
|
|
157
|
+
maxSteps: 100,
|
|
158
|
+
behaviorAnalysis: true,
|
|
154
159
|
maxHistory: 32,
|
|
155
160
|
historyTtlMs: 5 * 60 * 1000,
|
|
156
161
|
loopDetection: {
|
|
@@ -163,10 +168,16 @@ guard(client, {
|
|
|
163
168
|
projectId: 'production-api',
|
|
164
169
|
userId: 'optional-user',
|
|
165
170
|
sessionId: 'optional-agent-run',
|
|
166
|
-
},
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
171
|
+
},
|
|
172
|
+
alerts: {
|
|
173
|
+
webhookUrl: process.env.COSTGUARD_WEBHOOK_URL,
|
|
174
|
+
events: ['blocked', 'threshold'],
|
|
175
|
+
timeoutMs: 1500,
|
|
176
|
+
format: 'slack',
|
|
177
|
+
},
|
|
178
|
+
guardedMethods: ['chat.completions.create', 'responses.create'],
|
|
179
|
+
pricingOverrides: [],
|
|
180
|
+
webhooks: {
|
|
170
181
|
slack: process.env.SLACK_WEBHOOK,
|
|
171
182
|
discord: process.env.DISCORD_WEBHOOK,
|
|
172
183
|
retries: 2,
|
|
@@ -176,8 +187,9 @@ guard(client, {
|
|
|
176
187
|
eventLogPrompt: 'none',
|
|
177
188
|
});
|
|
178
189
|
```
|
|
179
|
-
|
|
180
|
-
`scope` isolates budgets and behavior history. If no scope is supplied, the guard uses one process-local default scope.
|
|
190
|
+
|
|
191
|
+
`scope` isolates budgets and behavior history. If no scope is supplied, the guard uses one process-local default scope.
|
|
192
|
+
Top-level `projectId` and `runId` are convenience aliases for alert payloads and default scope values.
|
|
181
193
|
|
|
182
194
|
## Loop Detection Tuning
|
|
183
195
|
|
|
@@ -291,9 +303,9 @@ registerTokenizer(/^claude-/u, (text) => {
|
|
|
291
303
|
|
|
292
304
|
String patterns match model-name substrings case-insensitively. `RegExp` patterns are tested against the original model string. If a registered tokenizer throws or returns an invalid count, AI CostGuard falls back to the built-in approximation and keeps guarding the call.
|
|
293
305
|
|
|
294
|
-
## Events
|
|
295
|
-
|
|
296
|
-
```ts
|
|
306
|
+
## Events
|
|
307
|
+
|
|
308
|
+
```ts
|
|
297
309
|
const unsubscribe = openai.on('block', (event) => {
|
|
298
310
|
console.log(event.code, event.reason, event.context.estimatedCost);
|
|
299
311
|
});
|
|
@@ -301,7 +313,54 @@ const unsubscribe = openai.on('block', (event) => {
|
|
|
301
313
|
unsubscribe();
|
|
302
314
|
```
|
|
303
315
|
|
|
304
|
-
Supported events are `cost`, `allow`, and `
|
|
316
|
+
Supported events are `cost`, `allow`, `block`, and `usage`. `usage` is emitted after a successful provider response when recognizable usage fields are available. Handler errors are swallowed so observability code cannot change guard decisions.
|
|
317
|
+
|
|
318
|
+
## Slack / Webhook Alerts
|
|
319
|
+
|
|
320
|
+
Alerts are optional, local-first, and sent only to a webhook URL you provide. They are best-effort: failed or slow alert delivery never allows a blocked provider call, never replaces `GuardError`, and never crashes your app.
|
|
321
|
+
If `alerts.events` is omitted, only `blocked` alerts are sent. `threshold` alerts require `events: ['threshold']` or `events: ['blocked', 'threshold']` plus `budget.thresholdPercent` or `budget.thresholdUsd`.
|
|
322
|
+
|
|
323
|
+
```ts
|
|
324
|
+
import { guard } from '@salimassili/ai-costguard';
|
|
325
|
+
|
|
326
|
+
const safeClient = guard(openai, {
|
|
327
|
+
budget: { maxUsd: 5, thresholdPercent: 0.8 },
|
|
328
|
+
projectId: 'demo-agent',
|
|
329
|
+
runId: 'run-2026-06-16',
|
|
330
|
+
alerts: {
|
|
331
|
+
webhookUrl: process.env.COSTGUARD_WEBHOOK_URL,
|
|
332
|
+
events: ['blocked', 'threshold'],
|
|
333
|
+
timeoutMs: 1500,
|
|
334
|
+
format: 'slack',
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
If `format` is omitted, AI CostGuard sends a redacted JSON payload:
|
|
340
|
+
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"event": "blocked",
|
|
344
|
+
"reason": "budget_exceeded",
|
|
345
|
+
"severity": "critical",
|
|
346
|
+
"projectId": "demo-agent",
|
|
347
|
+
"runId": "run-2026-06-16",
|
|
348
|
+
"model": "gpt-4",
|
|
349
|
+
"provider": "openai",
|
|
350
|
+
"estimatedCostUsd": 0.0306,
|
|
351
|
+
"estimatedSavedUsd": 0.0306,
|
|
352
|
+
"budgetLimitUsd": 5,
|
|
353
|
+
"budgetUsedUsd": 4.99,
|
|
354
|
+
"timestamp": "2026-06-16T00:00:00.000Z",
|
|
355
|
+
"packageName": "@salimassili/ai-costguard"
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
For Slack incoming webhooks, use `format: 'slack'` or `slack: true`. AI CostGuard sends a Slack-compatible `{ "text": "..." }` body.
|
|
360
|
+
|
|
361
|
+
Alerts do not include raw prompts, request bodies, headers, API keys, environment variables, or webhook URLs. Do not commit webhook URLs; load them from environment variables or your secret manager. Alerts are not SaaS telemetry, a billing ledger, provider invoice reconciliation, or a hard security boundary.
|
|
362
|
+
|
|
363
|
+
Legacy `webhooks.slack`, `webhooks.discord`, `slackWebhook`, and `discordWebhook` block notifications remain supported for compatibility. New code should prefer `alerts`.
|
|
305
364
|
|
|
306
365
|
## Local Dashboard
|
|
307
366
|
|
|
@@ -344,9 +403,10 @@ Runnable mocked examples are included for:
|
|
|
344
403
|
- Anthropic SDK workflow budget guard
|
|
345
404
|
- Vercel AI SDK chatbot budget cap
|
|
346
405
|
- LangChain retry-storm prevention
|
|
347
|
-
- Mastra-style agent runner protection
|
|
348
|
-
- CrewAI launch/budget gate
|
|
349
|
-
-
|
|
406
|
+
- Mastra-style agent runner protection
|
|
407
|
+
- CrewAI launch/budget gate
|
|
408
|
+
- Local webhook and Slack alert mocks
|
|
409
|
+
- CI budget checks
|
|
350
410
|
|
|
351
411
|
See `docs/INTEGRATIONS.md` and `examples/integrations`.
|
|
352
412
|
|
|
@@ -389,33 +449,47 @@ Redis-backed shared spend tracking is isolated behind a subpath import:
|
|
|
389
449
|
```ts
|
|
390
450
|
import { GuardPro } from '@salimassili/ai-costguard/pro';
|
|
391
451
|
|
|
392
|
-
const pro = new GuardPro({
|
|
393
|
-
redisUrl: process.env.REDIS_URL ?? '',
|
|
394
|
-
budget: 25,
|
|
395
|
-
windowSeconds: 86400,
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
452
|
+
const pro = new GuardPro({
|
|
453
|
+
redisUrl: process.env.REDIS_URL ?? '',
|
|
454
|
+
budget: { maxUsd: 25, thresholdPercent: 0.8 },
|
|
455
|
+
windowSeconds: 86400,
|
|
456
|
+
projectId: 'production-agent',
|
|
457
|
+
runId: process.env.DEPLOYMENT_ID,
|
|
458
|
+
alerts: {
|
|
459
|
+
webhookUrl: process.env.COSTGUARD_WEBHOOK_URL,
|
|
460
|
+
events: ['blocked', 'threshold'],
|
|
461
|
+
timeoutMs: 1500,
|
|
462
|
+
format: 'slack',
|
|
463
|
+
},
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
await pro.checkAndCharge('production', 0.0042);
|
|
467
|
+
await pro.shutdown();
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
`checkAndCharge()` only persists allowed spend. If a charge would exceed the budget, `GuardPro` throws `GuardError` and leaves the stored Redis/local spend at the previous allowed total.
|
|
471
|
+
|
|
472
|
+
`ioredis` is an optional dependency and is not loaded by the root import.
|
|
403
473
|
|
|
404
474
|
AI CostGuard does not include license-key checks or local commercial-license enforcement.
|
|
405
475
|
|
|
406
476
|
## AI CostGuard Pro
|
|
407
477
|
|
|
408
|
-
AI CostGuard Free is the open-source npm package above
|
|
409
|
-
|
|
410
|
-
**AI CostGuard Pro** is a
|
|
411
|
-
|
|
412
|
-
Current
|
|
413
|
-
|
|
414
|
-
-
|
|
415
|
-
-
|
|
416
|
-
-
|
|
417
|
-
|
|
418
|
-
|
|
478
|
+
AI CostGuard Free is the open-source npm package above: free forever, MIT licensed.
|
|
479
|
+
|
|
480
|
+
**AI CostGuard Pro Self-Serve** is a `$49` one-time production setup kit for teams taking Node.js AI agents into production. Lemon Squeezy handles purchase, receipts, and downloads. The npm package does not perform runtime license-key enforcement.
|
|
481
|
+
|
|
482
|
+
Current production-kit materials include:
|
|
483
|
+
|
|
484
|
+
- Slack/webhook and threshold alert recipes
|
|
485
|
+
- Redis/GuardPro setup guide
|
|
486
|
+
- Multi-process shared-budget example
|
|
487
|
+
- CI budget gate
|
|
488
|
+
- Vercel AI and Express production examples
|
|
489
|
+
- Production deployment guide
|
|
490
|
+
- Environment-variable based Redis/webhook configuration guidance
|
|
491
|
+
|
|
492
|
+
Future kit updates may include multi-tenant examples, tokenizer adapter recipes, `GuardError` handling patterns, pricing override guides, and framework config starters as those files are completed.
|
|
419
493
|
|
|
420
494
|
No runtime license-key enforcement. No private npm package. No SaaS backend. You get a downloadable folder of setup materials and examples that use the public package API. Use environment variables or your deployment secret manager for provider keys, `REDIS_URL`, and webhook URLs; never hardcode secrets.
|
|
421
495
|
|
package/dist/core/CostGuard.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export { BUILTIN_PRICING_LAST_UPDATED, getPricing, getPricingMeta, registerPrici
|
|
|
4
4
|
export type { ModelPricing, PricingMeta } from '../pricing/index.js';
|
|
5
5
|
export { registerTokenizer } from './tokenizer.js';
|
|
6
6
|
export type { TokenizerFn } from './tokenizer.js';
|
|
7
|
-
export type { GuardConfig, GuardErrorCode, GuardEvent, GuardEventHandler, GuardEventName, GuardScope, GuardState, GuardWebhookConfig, RequestContext, } from './types.js';
|
|
7
|
+
export type { GuardConfig, GuardBudgetConfig, CostGuardAlertsConfig, CostGuardAlertEvent, CostGuardAlertPayload, CostGuardAlertSeverity, GuardErrorCode, GuardEvent, GuardEventHandler, GuardEventName, GuardScope, GuardState, GuardWebhookConfig, RequestContext, } from './types.js';
|
|
8
8
|
//# sourceMappingURL=CostGuard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CostGuard.d.ts","sourceRoot":"","sources":["../../src/core/CostGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7H,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"CostGuard.d.ts","sourceRoot":"","sources":["../../src/core/CostGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7H,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/core/GuardCore.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export declare class GuardCore {
|
|
|
51
51
|
private readonly state;
|
|
52
52
|
private readonly emitter;
|
|
53
53
|
private readonly approximateTokenWarnings;
|
|
54
|
+
private readonly thresholdAlertedScopes;
|
|
54
55
|
/**
|
|
55
56
|
* Creates a process-local guard evaluator.
|
|
56
57
|
*/
|
|
@@ -96,6 +97,8 @@ export declare class GuardCore {
|
|
|
96
97
|
private pruneScope;
|
|
97
98
|
private extractScope;
|
|
98
99
|
private warnApproximateTokens;
|
|
100
|
+
private alertThresholdIfNeeded;
|
|
101
|
+
private createAlertPayload;
|
|
99
102
|
}
|
|
100
103
|
/**
|
|
101
104
|
* Creates an empty process-local guard state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardCore.d.ts","sourceRoot":"","sources":["../../src/core/GuardCore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GuardCore.d.ts","sourceRoot":"","sources":["../../src/core/GuardCore.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EAGd,UAAU,EACV,cAAc,EACf,MAAM,YAAY,CAAC;AAiDpB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,OAAO,EAAE,cAAc,CAAC;IACxB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IAEtC;;OAEG;gBAED,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,cAAqC,EAC9C,IAAI,GAAE,cAAkC,EACxC,QAAQ,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAe5C,MAAM,IAAI,kBAAkB;CAG7B;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAqB;IAC9D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAE5D;;OAEG;gBACS,MAAM,GAAE,WAAgB,EAAE,WAAW,GAAE,UAA+B;IA0ClF;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAIrE;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIhE;;OAEG;IACH,QAAQ,IAAI,UAAU;IAItB;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAmCzE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB;IAuChD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAqBnE,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,kBAAkB;CAwB3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAK7C"}
|
package/dist/core/GuardCore.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getPricing } from '../pricing/index.js';
|
|
2
|
+
import { sendCostGuardAlert } from './alerts.js';
|
|
2
3
|
import { appendGuardEventLog } from './event-log.js';
|
|
3
4
|
import { GuardEventEmitter } from './events.js';
|
|
4
5
|
import { cosineSimilarity, maxCosineSimilarity } from './similarity.js';
|
|
@@ -57,6 +58,7 @@ export class GuardCore {
|
|
|
57
58
|
state;
|
|
58
59
|
emitter = new GuardEventEmitter();
|
|
59
60
|
approximateTokenWarnings = new Set();
|
|
61
|
+
thresholdAlertedScopes = new Set();
|
|
60
62
|
/**
|
|
61
63
|
* Creates a process-local guard evaluator.
|
|
62
64
|
*/
|
|
@@ -65,8 +67,11 @@ export class GuardCore {
|
|
|
65
67
|
const loopMinRepeats = config.loopDetection?.minHistorySize ?? config.loopMinRepeats ?? DEFAULT_LOOP_MIN_REPEATS;
|
|
66
68
|
const loopWindowSize = config.loopDetection?.windowSize ?? DEFAULT_LOOP_WINDOW_SIZE;
|
|
67
69
|
validateLoopConfig(loopSimilarityThreshold, loopMinRepeats, loopWindowSize);
|
|
70
|
+
const budget = normalizeBudget(config.budget);
|
|
71
|
+
const scope = normalizeConfigScope(config);
|
|
68
72
|
this.config = {
|
|
69
|
-
budget:
|
|
73
|
+
budget: budget.maxUsd,
|
|
74
|
+
budgetThresholdUsd: budget.thresholdUsd,
|
|
70
75
|
behaviorAnalysis: config.behaviorAnalysis ?? true,
|
|
71
76
|
maxHistory: config.maxHistory ?? DEFAULT_MAX_HISTORY,
|
|
72
77
|
historyTtlMs: Math.max(0, config.historyTtlMs ?? DEFAULT_HISTORY_TTL_MS),
|
|
@@ -79,7 +84,8 @@ export class GuardCore {
|
|
|
79
84
|
unknownModelPolicy: config.unknownModelPolicy ?? 'block',
|
|
80
85
|
unknownModelPricing: config.unknownModelPricing,
|
|
81
86
|
pricingOverrides: config.pricingOverrides,
|
|
82
|
-
scope
|
|
87
|
+
scope,
|
|
88
|
+
alerts: normalizeAlerts(config.alerts),
|
|
83
89
|
eventLogPath: config.eventLogPath,
|
|
84
90
|
eventLogPrompt: config.eventLogPrompt ?? 'none',
|
|
85
91
|
slackWebhook: config.slackWebhook,
|
|
@@ -135,8 +141,8 @@ export class GuardCore {
|
|
|
135
141
|
const pricing = registryPricing ?? (this.config.unknownModelPolicy === 'fallback' ? this.config.unknownModelPricing : undefined);
|
|
136
142
|
const inputPer1kTokens = pricing?.inputPer1kTokens ?? 0;
|
|
137
143
|
const outputPer1kTokens = pricing?.outputPer1kTokens ?? 0;
|
|
138
|
-
const estimatedCost = (tokenEstimate.inputTokens / 1000) * inputPer1kTokens +
|
|
139
|
-
(tokenEstimate.outputTokens / 1000) * outputPer1kTokens;
|
|
144
|
+
const estimatedCost = sanitizeMoney((tokenEstimate.inputTokens / 1000) * inputPer1kTokens +
|
|
145
|
+
(tokenEstimate.outputTokens / 1000) * outputPer1kTokens);
|
|
140
146
|
return {
|
|
141
147
|
model,
|
|
142
148
|
pricingKnown: pricing !== undefined,
|
|
@@ -157,6 +163,7 @@ export class GuardCore {
|
|
|
157
163
|
* Checks a request context, records allowed calls, emits events, and throws GuardError on block.
|
|
158
164
|
*/
|
|
159
165
|
check(context) {
|
|
166
|
+
normalizeRequestContext(context);
|
|
160
167
|
const scope = this.getScopeState(context);
|
|
161
168
|
this.pruneScope(scope, Date.now());
|
|
162
169
|
this.recordAttempt(scope, context);
|
|
@@ -181,6 +188,7 @@ export class GuardCore {
|
|
|
181
188
|
}
|
|
182
189
|
this.recordAllowed(scope, context);
|
|
183
190
|
this.emit('allow', context);
|
|
191
|
+
this.alertThresholdIfNeeded(scope, context);
|
|
184
192
|
return { decision: 'allow', context };
|
|
185
193
|
}
|
|
186
194
|
/**
|
|
@@ -202,6 +210,7 @@ export class GuardCore {
|
|
|
202
210
|
this.state.actualCost += actualCost;
|
|
203
211
|
const scope = this.getScopeState(context);
|
|
204
212
|
scope.actualCost += actualCost;
|
|
213
|
+
this.emit('usage', context);
|
|
205
214
|
}
|
|
206
215
|
checkBudget(scope, context) {
|
|
207
216
|
if (scope.totalCost + context.estimatedCost <= this.config.budget)
|
|
@@ -270,6 +279,10 @@ export class GuardCore {
|
|
|
270
279
|
scope.blockedCost += context.estimatedCost;
|
|
271
280
|
this.emit('block', context, reason, code);
|
|
272
281
|
void notifyBlockWebhooks(this.config.webhooks, { reason, context });
|
|
282
|
+
void sendCostGuardAlert(this.config.alerts, this.createAlertPayload('blocked', codeToAlertReason(code), 'critical', context, {
|
|
283
|
+
estimatedSavedUsd: context.estimatedCost,
|
|
284
|
+
budgetUsedUsd: scope.totalCost,
|
|
285
|
+
}));
|
|
273
286
|
throw new GuardError(reason, context, code, { similarity, scopeKey: context.scopeKey ?? 'default' });
|
|
274
287
|
}
|
|
275
288
|
emit(type, context, reason, code) {
|
|
@@ -308,6 +321,7 @@ export class GuardCore {
|
|
|
308
321
|
projectId: readString(record.projectId ?? record.project_id) ?? this.config.scope?.projectId,
|
|
309
322
|
userId: readString(record.userId ?? record.user_id) ?? this.config.scope?.userId,
|
|
310
323
|
sessionId: readString(record.sessionId ?? record.session_id) ?? this.config.scope?.sessionId,
|
|
324
|
+
runId: readString(record.runId ?? record.run_id) ?? this.config.scope?.runId,
|
|
311
325
|
};
|
|
312
326
|
}
|
|
313
327
|
warnApproximateTokens(model, scopeKey) {
|
|
@@ -318,6 +332,35 @@ export class GuardCore {
|
|
|
318
332
|
console.warn(`[ai-costguard] Using approximate token counting for model: ${model}. ` +
|
|
319
333
|
'Register an exact tokenizer via registerTokenizer() for production use.');
|
|
320
334
|
}
|
|
335
|
+
alertThresholdIfNeeded(scope, context) {
|
|
336
|
+
const thresholdUsd = this.config.budgetThresholdUsd;
|
|
337
|
+
if (thresholdUsd === undefined || scope.totalCost < thresholdUsd)
|
|
338
|
+
return;
|
|
339
|
+
const scopeKey = context.scopeKey ?? createScopeKey(context.scope);
|
|
340
|
+
if (this.thresholdAlertedScopes.has(scopeKey))
|
|
341
|
+
return;
|
|
342
|
+
this.thresholdAlertedScopes.add(scopeKey);
|
|
343
|
+
void sendCostGuardAlert(this.config.alerts, this.createAlertPayload('threshold', 'budget_threshold', 'warning', context, {
|
|
344
|
+
budgetUsedUsd: scope.totalCost,
|
|
345
|
+
}));
|
|
346
|
+
}
|
|
347
|
+
createAlertPayload(event, reason, severity, context, money = {}) {
|
|
348
|
+
return {
|
|
349
|
+
event,
|
|
350
|
+
reason,
|
|
351
|
+
severity,
|
|
352
|
+
projectId: context.scope?.projectId,
|
|
353
|
+
runId: context.scope?.runId ?? context.scope?.sessionId,
|
|
354
|
+
model: context.model === 'unknown' ? undefined : context.model,
|
|
355
|
+
provider: inferProvider(context.model),
|
|
356
|
+
estimatedCostUsd: roundMoney(context.estimatedCost),
|
|
357
|
+
estimatedSavedUsd: money.estimatedSavedUsd === undefined ? undefined : roundMoney(money.estimatedSavedUsd),
|
|
358
|
+
budgetLimitUsd: roundMoney(this.config.budget),
|
|
359
|
+
budgetUsedUsd: money.budgetUsedUsd === undefined ? undefined : roundMoney(money.budgetUsedUsd),
|
|
360
|
+
timestamp: new Date().toISOString(),
|
|
361
|
+
packageName: '@salimassili/ai-costguard',
|
|
362
|
+
};
|
|
363
|
+
}
|
|
321
364
|
}
|
|
322
365
|
/**
|
|
323
366
|
* Creates an empty process-local guard state.
|
|
@@ -352,6 +395,65 @@ function hydrateScopeState(state) {
|
|
|
352
395
|
state.recentPrompts ??= [];
|
|
353
396
|
state.recentRetries ??= [];
|
|
354
397
|
}
|
|
398
|
+
function normalizeBudget(configBudget) {
|
|
399
|
+
if (configBudget === undefined)
|
|
400
|
+
return { maxUsd: DEFAULT_BUDGET };
|
|
401
|
+
if (typeof configBudget === 'number') {
|
|
402
|
+
return { maxUsd: validateMoney(configBudget, 'budget') };
|
|
403
|
+
}
|
|
404
|
+
if (!isRecord(configBudget)) {
|
|
405
|
+
throw new Error('budget must be a non-negative number or { maxUsd } object');
|
|
406
|
+
}
|
|
407
|
+
const maxUsd = validateMoney(configBudget.maxUsd, 'budget.maxUsd');
|
|
408
|
+
const thresholdUsd = configBudget.thresholdUsd === undefined
|
|
409
|
+
? normalizeThresholdPercent(configBudget.thresholdPercent, maxUsd)
|
|
410
|
+
: validateMoney(configBudget.thresholdUsd, 'budget.thresholdUsd');
|
|
411
|
+
if (thresholdUsd !== undefined && thresholdUsd > maxUsd) {
|
|
412
|
+
throw new Error('budget threshold must be less than or equal to budget.maxUsd');
|
|
413
|
+
}
|
|
414
|
+
return { maxUsd, thresholdUsd };
|
|
415
|
+
}
|
|
416
|
+
function normalizeThresholdPercent(value, maxUsd) {
|
|
417
|
+
if (value === undefined)
|
|
418
|
+
return undefined;
|
|
419
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0 || value > 1) {
|
|
420
|
+
throw new Error('budget.thresholdPercent must be a number greater than 0 and less than or equal to 1');
|
|
421
|
+
}
|
|
422
|
+
return maxUsd * value;
|
|
423
|
+
}
|
|
424
|
+
function normalizeConfigScope(config) {
|
|
425
|
+
const projectId = readString(config.scope?.projectId) ?? readString(config.projectId);
|
|
426
|
+
const userId = readString(config.scope?.userId);
|
|
427
|
+
const sessionId = readString(config.scope?.sessionId);
|
|
428
|
+
const runId = readString(config.scope?.runId) ?? readString(config.runId);
|
|
429
|
+
if (!projectId && !userId && !sessionId && !runId)
|
|
430
|
+
return undefined;
|
|
431
|
+
return {
|
|
432
|
+
projectId,
|
|
433
|
+
userId,
|
|
434
|
+
sessionId,
|
|
435
|
+
runId,
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
function normalizeAlerts(alerts) {
|
|
439
|
+
if (!alerts)
|
|
440
|
+
return undefined;
|
|
441
|
+
if (alerts.timeoutMs !== undefined && (!Number.isFinite(alerts.timeoutMs) || alerts.timeoutMs < 0)) {
|
|
442
|
+
throw new Error('alerts.timeoutMs must be a non-negative number');
|
|
443
|
+
}
|
|
444
|
+
if (alerts.format !== undefined && alerts.format !== 'json' && alerts.format !== 'slack') {
|
|
445
|
+
throw new Error('alerts.format must be "json" or "slack"');
|
|
446
|
+
}
|
|
447
|
+
for (const event of alerts.events ?? []) {
|
|
448
|
+
if (event !== 'blocked' && event !== 'threshold') {
|
|
449
|
+
throw new Error('alerts.events can only include "blocked" or "threshold"');
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
...alerts,
|
|
454
|
+
webhookUrl: readString(alerts.webhookUrl),
|
|
455
|
+
};
|
|
456
|
+
}
|
|
355
457
|
function validateLoopConfig(similarityThreshold, minHistorySize, windowSize) {
|
|
356
458
|
if (!Number.isFinite(similarityThreshold) || similarityThreshold < 0 || similarityThreshold > 1) {
|
|
357
459
|
throw new Error('loopDetection.similarityThreshold must be between 0 and 1');
|
|
@@ -363,6 +465,16 @@ function validateLoopConfig(similarityThreshold, minHistorySize, windowSize) {
|
|
|
363
465
|
throw new Error('loopDetection.windowSize must be at least 1');
|
|
364
466
|
}
|
|
365
467
|
}
|
|
468
|
+
function normalizeRequestContext(context) {
|
|
469
|
+
context.model = readString(context.model) ?? 'unknown';
|
|
470
|
+
context.tokens = sanitizeCount(context.tokens);
|
|
471
|
+
context.inputTokens = context.inputTokens === undefined ? undefined : sanitizeCount(context.inputTokens);
|
|
472
|
+
context.outputTokens = context.outputTokens === undefined ? undefined : sanitizeCount(context.outputTokens);
|
|
473
|
+
context.estimatedCost = sanitizeMoney(context.estimatedCost);
|
|
474
|
+
context.actualCost = context.actualCost === undefined ? undefined : sanitizeMoney(context.actualCost);
|
|
475
|
+
context.timestamp = Number.isFinite(context.timestamp) ? context.timestamp : Date.now();
|
|
476
|
+
context.prompt = typeof context.prompt === 'string' ? context.prompt : '';
|
|
477
|
+
}
|
|
366
478
|
function createEmptyContext() {
|
|
367
479
|
return {
|
|
368
480
|
model: 'unknown',
|
|
@@ -380,9 +492,10 @@ function createScopeKey(scope) {
|
|
|
380
492
|
const projectId = normalizeScopePart(scope?.projectId);
|
|
381
493
|
const userId = normalizeScopePart(scope?.userId);
|
|
382
494
|
const sessionId = normalizeScopePart(scope?.sessionId);
|
|
383
|
-
|
|
495
|
+
const runId = normalizeScopePart(scope?.runId);
|
|
496
|
+
if (!projectId && !userId && !sessionId && !runId)
|
|
384
497
|
return 'default';
|
|
385
|
-
return `project:${projectId ?? '*'}|user:${userId ?? '*'}|session:${sessionId ?? '*'}`;
|
|
498
|
+
return `project:${projectId ?? '*'}|user:${userId ?? '*'}|session:${sessionId ?? '*'}|run:${runId ?? '*'}`;
|
|
386
499
|
}
|
|
387
500
|
function normalizeScopePart(value) {
|
|
388
501
|
const normalized = value?.trim();
|
|
@@ -416,6 +529,48 @@ function readPositiveNumber(value) {
|
|
|
416
529
|
return undefined;
|
|
417
530
|
return value;
|
|
418
531
|
}
|
|
532
|
+
function validateMoney(value, field) {
|
|
533
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
|
|
534
|
+
throw new Error(`${field} must be a non-negative finite number`);
|
|
535
|
+
}
|
|
536
|
+
return value;
|
|
537
|
+
}
|
|
538
|
+
function sanitizeMoney(value) {
|
|
539
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0)
|
|
540
|
+
return 0;
|
|
541
|
+
return value;
|
|
542
|
+
}
|
|
543
|
+
function sanitizeCount(value) {
|
|
544
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0)
|
|
545
|
+
return 0;
|
|
546
|
+
return Math.trunc(value);
|
|
547
|
+
}
|
|
548
|
+
function roundMoney(value) {
|
|
549
|
+
return Math.round(sanitizeMoney(value) * 1_000_000) / 1_000_000;
|
|
550
|
+
}
|
|
551
|
+
function codeToAlertReason(code) {
|
|
552
|
+
switch (code) {
|
|
553
|
+
case 'UNKNOWN_MODEL':
|
|
554
|
+
return 'unknown_model';
|
|
555
|
+
case 'BUDGET_EXCEEDED':
|
|
556
|
+
return 'budget_exceeded';
|
|
557
|
+
case 'MAX_STEPS_EXCEEDED':
|
|
558
|
+
return 'max_steps_exceeded';
|
|
559
|
+
case 'LOOP_DETECTED':
|
|
560
|
+
return 'loop_detected';
|
|
561
|
+
case 'RETRY_STORM_DETECTED':
|
|
562
|
+
return 'retry_storm';
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
function inferProvider(model) {
|
|
566
|
+
const normalized = model.toLowerCase();
|
|
567
|
+
if (normalized.startsWith('gpt-') || normalized.startsWith('o1') || normalized.startsWith('o3')) {
|
|
568
|
+
return 'openai';
|
|
569
|
+
}
|
|
570
|
+
if (normalized.startsWith('claude-'))
|
|
571
|
+
return 'anthropic';
|
|
572
|
+
return undefined;
|
|
573
|
+
}
|
|
419
574
|
function isRecord(value) {
|
|
420
575
|
return typeof value === 'object' && value !== null;
|
|
421
576
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardCore.js","sourceRoot":"","sources":["../../src/core/GuardCore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GuardCore.js","sourceRoot":"","sources":["../../src/core/GuardCore.ts"],"names":[],"mappings":"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"}
|