@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/dist/core/GuardFree.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { GuardConfig, GuardEventHandler, GuardEventName, GuardState, Reques
|
|
|
4
4
|
* Event controls added to a guarded client proxy.
|
|
5
5
|
*/
|
|
6
6
|
export interface GuardEventControls {
|
|
7
|
-
/** Subscribes to block, allow, or
|
|
7
|
+
/** Subscribes to block, allow, cost, or usage events. */
|
|
8
8
|
on(eventName: GuardEventName, handler: GuardEventHandler): () => void;
|
|
9
9
|
/** Removes an event handler. */
|
|
10
10
|
off(eventName: GuardEventName, handler: GuardEventHandler): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardFree.d.ts","sourceRoot":"","sources":["../../src/core/GuardFree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7G;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,
|
|
1
|
+
{"version":3,"file":"GuardFree.d.ts","sourceRoot":"","sources":["../../src/core/GuardFree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7G;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAC;IACtE,gCAAgC;IAChC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjE,qDAAqD;IACrD,aAAa,IAAI,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,GAAG,kBAAkB,CAAC;AAEjF;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,SAAS,MAAM,EAC1C,MAAM,EAAE,OAAO,EACf,MAAM,GAAE,WAAgB,EACxB,WAAW,GAAE,UAA+B,GAC3C,aAAa,CAAC,OAAO,CAAC,CAqDxB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,EAAE,OAAO,EACrE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EAC/B,MAAM,GAAE,WAAgB,GACvB,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,kBAAkB,CAepD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,GAAE,WAAgB,GAAG,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAiBrH;AAED;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAC;IACtE,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAClE"}
|
package/dist/core/GuardFree.js
CHANGED
|
@@ -105,7 +105,7 @@ function stripGuardMetadata(args) {
|
|
|
105
105
|
const [first, ...rest] = args;
|
|
106
106
|
if (!isPlainRecord(first))
|
|
107
107
|
return args;
|
|
108
|
-
const { projectId: _projectId, project_id: _project_id, userId: _userId, user_id: _user_id, sessionId: _sessionId, session_id: _session_id, ...providerParams } = first;
|
|
108
|
+
const { projectId: _projectId, project_id: _project_id, userId: _userId, user_id: _user_id, sessionId: _sessionId, session_id: _session_id, runId: _runId, run_id: _run_id, ...providerParams } = first;
|
|
109
109
|
return [providerParams, ...rest];
|
|
110
110
|
}
|
|
111
111
|
function isPlainRecord(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardFree.js","sourceRoot":"","sources":["../../src/core/GuardFree.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GuardFree.js","sourceRoot":"","sources":["../../src/core/GuardFree.ts"],"names":[],"mappings":"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"}
|
package/dist/core/GuardPro.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GuardWebhookConfig } from './types.js';
|
|
1
|
+
import type { CostGuardAlertsConfig, GuardBudgetConfig, GuardWebhookConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Minimal Redis client surface used by GuardPro. Supplying redisClient is useful for tests.
|
|
4
4
|
*/
|
|
@@ -9,8 +9,8 @@ export interface GuardProRedisClient {
|
|
|
9
9
|
on?(eventName: 'ready' | 'error' | 'close', handler: () => void): unknown;
|
|
10
10
|
/** Opens the Redis connection when the client is lazy. */
|
|
11
11
|
connect?(): Promise<unknown>;
|
|
12
|
-
/** Evaluates the atomic spend
|
|
13
|
-
eval(script: string, keys: number, key: string, amount: string, ttlSeconds: string): Promise<unknown>;
|
|
12
|
+
/** Evaluates the atomic spend decision Lua script. */
|
|
13
|
+
eval(script: string, keys: number, key: string, amount: string, ttlSeconds: string, budget: string): Promise<unknown>;
|
|
14
14
|
/** Reads the current spend value. */
|
|
15
15
|
get(key: string): Promise<string | null>;
|
|
16
16
|
/** Deletes a spend key. */
|
|
@@ -25,9 +25,15 @@ export interface GuardProConfig {
|
|
|
25
25
|
/** Redis connection URL. Instances sharing this URL reuse one pooled connection. */
|
|
26
26
|
redisUrl: string;
|
|
27
27
|
/** Budget in USD for each project/session window. */
|
|
28
|
-
budget: number;
|
|
28
|
+
budget: number | GuardBudgetConfig;
|
|
29
29
|
/** Session TTL in seconds. Defaults to 86400. */
|
|
30
30
|
windowSeconds?: number;
|
|
31
|
+
/** Default project identifier used in alert payloads when checkAndCharge supplies a project key. */
|
|
32
|
+
projectId?: string;
|
|
33
|
+
/** Agent run identifier used in alert payloads. */
|
|
34
|
+
runId?: string;
|
|
35
|
+
/** Local webhook alerts for block and threshold events. Disabled unless webhookUrl is supplied. */
|
|
36
|
+
alerts?: CostGuardAlertsConfig;
|
|
31
37
|
/** Slack webhook URL for budget block notifications. */
|
|
32
38
|
slackWebhook?: string;
|
|
33
39
|
/** Discord webhook URL for budget block notifications. */
|
|
@@ -46,9 +52,14 @@ export declare class GuardPro {
|
|
|
46
52
|
private readonly redisClient?;
|
|
47
53
|
private readonly poolEntry?;
|
|
48
54
|
private readonly budget;
|
|
55
|
+
private readonly budgetThresholdUsd?;
|
|
49
56
|
private readonly windowSeconds;
|
|
57
|
+
private readonly projectId?;
|
|
58
|
+
private readonly runId?;
|
|
59
|
+
private readonly alerts?;
|
|
50
60
|
private readonly webhooks?;
|
|
51
61
|
private readonly localSpend;
|
|
62
|
+
private readonly thresholdAlertedKeys;
|
|
52
63
|
private directRedisFailed;
|
|
53
64
|
private directRedisReady;
|
|
54
65
|
/**
|
|
@@ -79,14 +90,16 @@ export declare class GuardPro {
|
|
|
79
90
|
private attachConnectionEvents;
|
|
80
91
|
private getUsableRedis;
|
|
81
92
|
private connect;
|
|
82
|
-
private
|
|
83
|
-
private
|
|
84
|
-
private
|
|
93
|
+
private chargeRedisOrFallback;
|
|
94
|
+
private chargeRedis;
|
|
95
|
+
private chargeLocal;
|
|
85
96
|
private getLocal;
|
|
86
97
|
private markDisconnected;
|
|
87
98
|
private safeQuit;
|
|
88
99
|
private getSpendKey;
|
|
89
100
|
private createContext;
|
|
101
|
+
private alertThresholdIfNeeded;
|
|
102
|
+
private createAlertPayload;
|
|
90
103
|
}
|
|
91
104
|
/**
|
|
92
105
|
* Creates GuardPro.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardPro.d.ts","sourceRoot":"","sources":["../../src/core/GuardPro.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GuardPro.d.ts","sourceRoot":"","sources":["../../src/core/GuardPro.ts"],"names":[],"mappings":"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"}
|
package/dist/core/GuardPro.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Redis } from 'ioredis';
|
|
2
|
+
import { sendCostGuardAlert } from './alerts.js';
|
|
2
3
|
import { GuardError } from './GuardCore.js';
|
|
3
4
|
import { notifyBlockWebhooks } from './webhooks.js';
|
|
4
5
|
/**
|
|
@@ -10,18 +11,28 @@ export class GuardPro {
|
|
|
10
11
|
redisClient;
|
|
11
12
|
poolEntry;
|
|
12
13
|
budget;
|
|
14
|
+
budgetThresholdUsd;
|
|
13
15
|
windowSeconds;
|
|
16
|
+
projectId;
|
|
17
|
+
runId;
|
|
18
|
+
alerts;
|
|
14
19
|
webhooks;
|
|
15
20
|
localSpend = new Map();
|
|
21
|
+
thresholdAlertedKeys = new Set();
|
|
16
22
|
directRedisFailed = false;
|
|
17
23
|
directRedisReady = false;
|
|
18
24
|
/**
|
|
19
25
|
* Creates a GuardPro instance and reuses a pooled Redis connection for the same URL.
|
|
20
26
|
*/
|
|
21
27
|
constructor(config) {
|
|
28
|
+
const budget = normalizeBudget(config.budget);
|
|
22
29
|
this.redisUrl = config.redisUrl;
|
|
23
|
-
this.budget =
|
|
30
|
+
this.budget = budget.maxUsd;
|
|
31
|
+
this.budgetThresholdUsd = budget.thresholdUsd;
|
|
24
32
|
this.windowSeconds = config.windowSeconds ?? 86_400;
|
|
33
|
+
this.projectId = readString(config.projectId);
|
|
34
|
+
this.runId = readString(config.runId);
|
|
35
|
+
this.alerts = normalizeAlerts(config.alerts);
|
|
25
36
|
this.webhooks = {
|
|
26
37
|
...config.webhooks,
|
|
27
38
|
slack: config.webhooks?.slack ?? config.slackWebhook,
|
|
@@ -49,16 +60,19 @@ export class GuardPro {
|
|
|
49
60
|
}
|
|
50
61
|
const key = this.getSpendKey(projectId);
|
|
51
62
|
const redis = await this.getUsableRedis();
|
|
52
|
-
const
|
|
53
|
-
? await this.
|
|
54
|
-
: this.
|
|
55
|
-
if (
|
|
63
|
+
const decision = redis
|
|
64
|
+
? await this.chargeRedisOrFallback(redis, key, projectId, estimatedCost)
|
|
65
|
+
: this.chargeLocal(projectId, estimatedCost);
|
|
66
|
+
if (!decision.allowed) {
|
|
56
67
|
const context = this.createContext(projectId, estimatedCost);
|
|
57
|
-
const reason = `Project "${projectId}"
|
|
58
|
-
`
|
|
59
|
-
|
|
68
|
+
const reason = `Project "${projectId}" would exceed budget. ` +
|
|
69
|
+
`Projected spend: $${decision.projectedTotal.toFixed(6)} / Budget: $${this.budget.toFixed(6)}. ` +
|
|
70
|
+
`Current spend remains $${decision.total.toFixed(6)}.`;
|
|
71
|
+
void notifyBlockWebhooks(this.webhooks, { reason, context });
|
|
72
|
+
void sendCostGuardAlert(this.alerts, this.createAlertPayload('blocked', 'budget_exceeded', 'critical', projectId, estimatedCost, decision.total));
|
|
60
73
|
throw new GuardError(reason, context, 'BUDGET_EXCEEDED');
|
|
61
74
|
}
|
|
75
|
+
this.alertThresholdIfNeeded(projectId, decision.total);
|
|
62
76
|
}
|
|
63
77
|
/**
|
|
64
78
|
* Returns current spend for a project from Redis when available, otherwise from local fallback state.
|
|
@@ -189,36 +203,55 @@ export class GuardPro {
|
|
|
189
203
|
return null;
|
|
190
204
|
}
|
|
191
205
|
}
|
|
192
|
-
async
|
|
206
|
+
async chargeRedisOrFallback(redis, key, projectId, estimatedCost) {
|
|
193
207
|
try {
|
|
194
|
-
return await this.
|
|
208
|
+
return await this.chargeRedis(redis, key, estimatedCost);
|
|
195
209
|
}
|
|
196
210
|
catch {
|
|
197
211
|
this.markDisconnected();
|
|
198
|
-
return this.
|
|
212
|
+
return this.chargeLocal(projectId, estimatedCost);
|
|
199
213
|
}
|
|
200
214
|
}
|
|
201
|
-
async
|
|
202
|
-
const script = `
|
|
203
|
-
local
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
215
|
+
async chargeRedis(redis, key, estimatedCost) {
|
|
216
|
+
const script = `
|
|
217
|
+
local currentRaw = redis.call("GET", KEYS[1])
|
|
218
|
+
if not currentRaw then
|
|
219
|
+
currentRaw = "0"
|
|
220
|
+
end
|
|
221
|
+
local current = tonumber(currentRaw)
|
|
222
|
+
local amount = tonumber(ARGV[1])
|
|
223
|
+
local budget = tonumber(ARGV[3])
|
|
224
|
+
local projected = current + amount
|
|
225
|
+
if projected > budget then
|
|
226
|
+
return {0, currentRaw, tostring(projected)}
|
|
227
|
+
end
|
|
228
|
+
local total = redis.call("INCRBYFLOAT", KEYS[1], ARGV[1])
|
|
229
|
+
local ttl = redis.call("TTL", KEYS[1])
|
|
230
|
+
if ttl == -1 then
|
|
231
|
+
redis.call("EXPIRE", KEYS[1], ARGV[2])
|
|
232
|
+
end
|
|
233
|
+
return {1, total, tostring(projected)}
|
|
209
234
|
`;
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
if (!Number.isFinite(numericTotal) || numericTotal < 0) {
|
|
213
|
-
throw new Error('Redis returned an invalid spend total');
|
|
214
|
-
}
|
|
215
|
-
return numericTotal;
|
|
235
|
+
const result = await redis.eval(script, 1, key, estimatedCost.toString(), this.windowSeconds.toString(), this.budget.toString());
|
|
236
|
+
return parseRedisChargeDecision(result);
|
|
216
237
|
}
|
|
217
|
-
|
|
238
|
+
chargeLocal(projectId, estimatedCost) {
|
|
218
239
|
const record = this.getLocal(projectId);
|
|
219
|
-
record.total
|
|
240
|
+
const projectedTotal = roundMoney(record.total + estimatedCost);
|
|
241
|
+
if (projectedTotal > this.budget) {
|
|
242
|
+
return {
|
|
243
|
+
allowed: false,
|
|
244
|
+
total: roundMoney(record.total),
|
|
245
|
+
projectedTotal,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
record.total = projectedTotal;
|
|
220
249
|
this.localSpend.set(projectId, record);
|
|
221
|
-
return
|
|
250
|
+
return {
|
|
251
|
+
allowed: true,
|
|
252
|
+
total: record.total,
|
|
253
|
+
projectedTotal,
|
|
254
|
+
};
|
|
222
255
|
}
|
|
223
256
|
getLocal(projectId) {
|
|
224
257
|
const now = Date.now();
|
|
@@ -265,6 +298,30 @@ export class GuardPro {
|
|
|
265
298
|
prompt: `project:${projectId}`,
|
|
266
299
|
};
|
|
267
300
|
}
|
|
301
|
+
alertThresholdIfNeeded(projectId, total) {
|
|
302
|
+
if (this.budgetThresholdUsd === undefined || total < this.budgetThresholdUsd)
|
|
303
|
+
return;
|
|
304
|
+
const key = this.getSpendKey(projectId);
|
|
305
|
+
if (this.thresholdAlertedKeys.has(key))
|
|
306
|
+
return;
|
|
307
|
+
this.thresholdAlertedKeys.add(key);
|
|
308
|
+
void sendCostGuardAlert(this.alerts, this.createAlertPayload('threshold', 'budget_threshold', 'warning', projectId, undefined, total));
|
|
309
|
+
}
|
|
310
|
+
createAlertPayload(event, reason, severity, projectId, estimatedCost, total) {
|
|
311
|
+
return {
|
|
312
|
+
event,
|
|
313
|
+
reason,
|
|
314
|
+
severity,
|
|
315
|
+
projectId: this.projectId ?? projectId,
|
|
316
|
+
runId: this.runId,
|
|
317
|
+
estimatedCostUsd: estimatedCost === undefined ? undefined : roundMoney(estimatedCost),
|
|
318
|
+
estimatedSavedUsd: estimatedCost === undefined ? undefined : roundMoney(estimatedCost),
|
|
319
|
+
budgetLimitUsd: roundMoney(this.budget),
|
|
320
|
+
budgetUsedUsd: roundMoney(total),
|
|
321
|
+
timestamp: new Date().toISOString(),
|
|
322
|
+
packageName: '@salimassili/ai-costguard',
|
|
323
|
+
};
|
|
324
|
+
}
|
|
268
325
|
}
|
|
269
326
|
/**
|
|
270
327
|
* Creates GuardPro.
|
|
@@ -272,4 +329,76 @@ export class GuardPro {
|
|
|
272
329
|
export function getProGuard(config) {
|
|
273
330
|
return new GuardPro(config);
|
|
274
331
|
}
|
|
332
|
+
function normalizeBudget(configBudget) {
|
|
333
|
+
if (typeof configBudget === 'number') {
|
|
334
|
+
return { maxUsd: validateMoney(configBudget, 'budget') };
|
|
335
|
+
}
|
|
336
|
+
const maxUsd = validateMoney(configBudget.maxUsd, 'budget.maxUsd');
|
|
337
|
+
const thresholdUsd = configBudget.thresholdUsd === undefined
|
|
338
|
+
? normalizeThresholdPercent(configBudget.thresholdPercent, maxUsd)
|
|
339
|
+
: validateMoney(configBudget.thresholdUsd, 'budget.thresholdUsd');
|
|
340
|
+
if (thresholdUsd !== undefined && thresholdUsd > maxUsd) {
|
|
341
|
+
throw new Error('budget threshold must be less than or equal to budget.maxUsd');
|
|
342
|
+
}
|
|
343
|
+
return { maxUsd, thresholdUsd };
|
|
344
|
+
}
|
|
345
|
+
function normalizeThresholdPercent(value, maxUsd) {
|
|
346
|
+
if (value === undefined)
|
|
347
|
+
return undefined;
|
|
348
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0 || value > 1) {
|
|
349
|
+
throw new Error('budget.thresholdPercent must be a number greater than 0 and less than or equal to 1');
|
|
350
|
+
}
|
|
351
|
+
return maxUsd * value;
|
|
352
|
+
}
|
|
353
|
+
function normalizeAlerts(alerts) {
|
|
354
|
+
if (!alerts)
|
|
355
|
+
return undefined;
|
|
356
|
+
if (alerts.timeoutMs !== undefined && (!Number.isFinite(alerts.timeoutMs) || alerts.timeoutMs < 0)) {
|
|
357
|
+
throw new Error('alerts.timeoutMs must be a non-negative number');
|
|
358
|
+
}
|
|
359
|
+
if (alerts.format !== undefined && alerts.format !== 'json' && alerts.format !== 'slack') {
|
|
360
|
+
throw new Error('alerts.format must be "json" or "slack"');
|
|
361
|
+
}
|
|
362
|
+
for (const event of alerts.events ?? []) {
|
|
363
|
+
if (event !== 'blocked' && event !== 'threshold') {
|
|
364
|
+
throw new Error('alerts.events can only include "blocked" or "threshold"');
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
...alerts,
|
|
369
|
+
webhookUrl: readString(alerts.webhookUrl),
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
function readString(value) {
|
|
373
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
374
|
+
}
|
|
375
|
+
function validateMoney(value, field) {
|
|
376
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
|
|
377
|
+
throw new Error(`${field} must be a non-negative finite number`);
|
|
378
|
+
}
|
|
379
|
+
return value;
|
|
380
|
+
}
|
|
381
|
+
function parseRedisChargeDecision(result) {
|
|
382
|
+
if (!Array.isArray(result) || result.length < 3) {
|
|
383
|
+
throw new Error('Redis returned an invalid spend decision');
|
|
384
|
+
}
|
|
385
|
+
const allowedFlag = Number(result[0]);
|
|
386
|
+
const total = Number(result[1]);
|
|
387
|
+
const projectedTotal = Number(result[2]);
|
|
388
|
+
if ((allowedFlag !== 0 && allowedFlag !== 1) ||
|
|
389
|
+
!Number.isFinite(total) ||
|
|
390
|
+
total < 0 ||
|
|
391
|
+
!Number.isFinite(projectedTotal) ||
|
|
392
|
+
projectedTotal < 0) {
|
|
393
|
+
throw new Error('Redis returned an invalid spend decision');
|
|
394
|
+
}
|
|
395
|
+
return {
|
|
396
|
+
allowed: allowedFlag === 1,
|
|
397
|
+
total: roundMoney(total),
|
|
398
|
+
projectedTotal: roundMoney(projectedTotal),
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
function roundMoney(value) {
|
|
402
|
+
return Math.round(validateMoney(value, 'money') * 1_000_000) / 1_000_000;
|
|
403
|
+
}
|
|
275
404
|
//# sourceMappingURL=GuardPro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardPro.js","sourceRoot":"","sources":["../../src/core/GuardPro.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GuardPro.js","sourceRoot":"","sources":["../../src/core/GuardPro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CostGuardAlertPayload, CostGuardAlertsConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Sends a local webhook alert on a best-effort basis.
|
|
4
|
+
*/
|
|
5
|
+
export declare function sendCostGuardAlert(config: CostGuardAlertsConfig | undefined, payload: CostGuardAlertPayload): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=alerts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../src/core/alerts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const DEFAULT_ALERT_EVENTS = ['blocked'];
|
|
2
|
+
const DEFAULT_TIMEOUT_MS = 1500;
|
|
3
|
+
const MIN_TIMEOUT_MS = 100;
|
|
4
|
+
/**
|
|
5
|
+
* Sends a local webhook alert on a best-effort basis.
|
|
6
|
+
*/
|
|
7
|
+
export async function sendCostGuardAlert(config, payload) {
|
|
8
|
+
if (!config)
|
|
9
|
+
return;
|
|
10
|
+
const webhookUrl = config.webhookUrl?.trim();
|
|
11
|
+
if (!webhookUrl)
|
|
12
|
+
return;
|
|
13
|
+
const events = config.events?.length ? config.events : DEFAULT_ALERT_EVENTS;
|
|
14
|
+
if (!events.includes(payload.event))
|
|
15
|
+
return;
|
|
16
|
+
try {
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
const timeout = setTimeout(() => controller.abort(), Math.max(MIN_TIMEOUT_MS, config.timeoutMs ?? DEFAULT_TIMEOUT_MS));
|
|
19
|
+
try {
|
|
20
|
+
await fetch(webhookUrl, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: { 'content-type': 'application/json' },
|
|
23
|
+
body: shouldUseSlackFormat(config) ? slackBody(payload) : JSON.stringify(payload),
|
|
24
|
+
signal: controller.signal,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
clearTimeout(timeout);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Alerts are observability only; enforcement and application behavior must not depend on delivery.
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function shouldUseSlackFormat(config) {
|
|
36
|
+
return config.slack === true || config.format === 'slack';
|
|
37
|
+
}
|
|
38
|
+
function slackBody(payload) {
|
|
39
|
+
const action = payload.event === 'blocked'
|
|
40
|
+
? `blocked ${humanReason(payload.reason)} before provider call`
|
|
41
|
+
: `reported ${humanReason(payload.reason)}`;
|
|
42
|
+
const saved = payload.estimatedSavedUsd === undefined
|
|
43
|
+
? ''
|
|
44
|
+
: ` Estimated saved: $${payload.estimatedSavedUsd.toFixed(6)}.`;
|
|
45
|
+
return JSON.stringify({
|
|
46
|
+
text: `AI CostGuard ${action}.${saved}`,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function humanReason(reason) {
|
|
50
|
+
return reason.replace(/_/gu, ' ');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=alerts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/core/alerts.ts"],"names":[],"mappings":"AAMA,MAAM,oBAAoB,GAAmC,CAAC,SAAS,CAAC,CAAC;AACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAyC,EACzC,OAA8B;IAE9B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IAE5C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC,CACjE,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,UAAU,EAAE;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBACjF,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mGAAmG;IACrG,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA6B;IACzD,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC;AAC5D,CAAC;AAED,SAAS,SAAS,CAAC,OAA8B;IAC/C,MAAM,MAAM,GACV,OAAO,CAAC,KAAK,KAAK,SAAS;QACzB,CAAC,CAAC,WAAW,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB;QAC/D,CAAC,CAAC,YAAY,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAChD,MAAM,KAAK,GACT,OAAO,CAAC,iBAAiB,KAAK,SAAS;QACrC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,sBAAsB,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAEpE,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,gBAAgB,MAAM,IAAI,KAAK,EAAE;KACxC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -16,6 +16,59 @@ export interface GuardWebhookConfig {
|
|
|
16
16
|
/** Per-request timeout in milliseconds. Defaults to 1500. */
|
|
17
17
|
timeoutMs?: number;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Alert event names supported by the local webhook alert API.
|
|
21
|
+
*/
|
|
22
|
+
export type CostGuardAlertEvent = 'blocked' | 'threshold';
|
|
23
|
+
/**
|
|
24
|
+
* Alert severity used in local webhook payloads.
|
|
25
|
+
*/
|
|
26
|
+
export type CostGuardAlertSeverity = 'info' | 'warning' | 'critical';
|
|
27
|
+
/**
|
|
28
|
+
* Local webhook alert configuration. Alerts are best-effort and disabled unless webhookUrl is supplied.
|
|
29
|
+
*/
|
|
30
|
+
export interface CostGuardAlertsConfig {
|
|
31
|
+
/** User-owned webhook endpoint. Never logged by AI CostGuard. */
|
|
32
|
+
webhookUrl?: string;
|
|
33
|
+
/** Alert events to send. Defaults to ["blocked"]. */
|
|
34
|
+
events?: CostGuardAlertEvent[];
|
|
35
|
+
/** Per-alert timeout in milliseconds. Defaults to 1500. */
|
|
36
|
+
timeoutMs?: number;
|
|
37
|
+
/** Payload format. Defaults to "json". */
|
|
38
|
+
format?: 'json' | 'slack';
|
|
39
|
+
/** Convenience flag for Slack-compatible message bodies. */
|
|
40
|
+
slack?: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stable local webhook payload sent for alert events.
|
|
44
|
+
*/
|
|
45
|
+
export interface CostGuardAlertPayload {
|
|
46
|
+
event: CostGuardAlertEvent;
|
|
47
|
+
reason: string;
|
|
48
|
+
severity: CostGuardAlertSeverity;
|
|
49
|
+
projectId?: string;
|
|
50
|
+
runId?: string;
|
|
51
|
+
model?: string;
|
|
52
|
+
provider?: string;
|
|
53
|
+
estimatedCostUsd?: number;
|
|
54
|
+
estimatedSavedUsd?: number;
|
|
55
|
+
budgetLimitUsd?: number;
|
|
56
|
+
budgetUsedUsd?: number;
|
|
57
|
+
timestamp: string;
|
|
58
|
+
packageName: '@salimassili/ai-costguard';
|
|
59
|
+
packageVersion?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Budget configuration. A number keeps legacy behavior; object form enables threshold alerts.
|
|
63
|
+
*/
|
|
64
|
+
export interface GuardBudgetConfig {
|
|
65
|
+
/** Maximum process-local estimated spend in USD. */
|
|
66
|
+
maxUsd: number;
|
|
67
|
+
/** Optional threshold as a fraction from 0 to 1, for example 0.8 for 80%. */
|
|
68
|
+
thresholdPercent?: number;
|
|
69
|
+
/** Optional absolute threshold in USD. Takes precedence over thresholdPercent. */
|
|
70
|
+
thresholdUsd?: number;
|
|
71
|
+
}
|
|
19
72
|
/**
|
|
20
73
|
* Scope used to isolate budgets and behavior history.
|
|
21
74
|
*/
|
|
@@ -26,13 +79,15 @@ export interface GuardScope {
|
|
|
26
79
|
userId?: string;
|
|
27
80
|
/** Agent run, workflow, request, or conversation identifier. */
|
|
28
81
|
sessionId?: string;
|
|
82
|
+
/** Agent run identifier used by alert payloads and scope isolation. */
|
|
83
|
+
runId?: string;
|
|
29
84
|
}
|
|
30
85
|
/**
|
|
31
86
|
* Runtime configuration for the free process-local guard.
|
|
32
87
|
*/
|
|
33
88
|
export interface GuardConfig {
|
|
34
89
|
/** Process-local budget in USD for each scope. Defaults to 10. */
|
|
35
|
-
budget?: number;
|
|
90
|
+
budget?: number | GuardBudgetConfig;
|
|
36
91
|
/** Enables loop, retry-storm, and step-count checks. Defaults to true. */
|
|
37
92
|
behaviorAnalysis?: boolean;
|
|
38
93
|
/** Maximum prompt history retained for similarity checks. Defaults to 32. */
|
|
@@ -66,6 +121,8 @@ export interface GuardConfig {
|
|
|
66
121
|
scope?: GuardScope;
|
|
67
122
|
/** Optional runtime pricing entries that take precedence over built-ins. */
|
|
68
123
|
pricingOverrides?: ModelPricing[];
|
|
124
|
+
/** Local webhook alerts for block and threshold events. Disabled unless webhookUrl is supplied. */
|
|
125
|
+
alerts?: CostGuardAlertsConfig;
|
|
69
126
|
/** Slack and Discord webhook destinations for block events. */
|
|
70
127
|
webhooks?: GuardWebhookConfig;
|
|
71
128
|
/** Optional JSONL file path for local dashboard/event history. Disabled by default. */
|
|
@@ -76,6 +133,10 @@ export interface GuardConfig {
|
|
|
76
133
|
slackWebhook?: string;
|
|
77
134
|
/** Convenience Discord webhook URL. Equivalent to webhooks.discord. */
|
|
78
135
|
discordWebhook?: string;
|
|
136
|
+
/** Top-level project identifier, equivalent to scope.projectId when scope omits projectId. */
|
|
137
|
+
projectId?: string;
|
|
138
|
+
/** Top-level run identifier, equivalent to scope.runId when scope omits runId. */
|
|
139
|
+
runId?: string;
|
|
79
140
|
}
|
|
80
141
|
/**
|
|
81
142
|
* Normalized request data evaluated before an AI API call is allowed.
|
|
@@ -158,7 +219,7 @@ export type GuardDecision = 'allow' | 'block';
|
|
|
158
219
|
/**
|
|
159
220
|
* Supported event names emitted by guarded clients.
|
|
160
221
|
*/
|
|
161
|
-
export type GuardEventName = 'block' | 'allow' | 'cost';
|
|
222
|
+
export type GuardEventName = 'block' | 'allow' | 'cost' | 'usage';
|
|
162
223
|
/**
|
|
163
224
|
* Event payload emitted by a guard instance.
|
|
164
225
|
*/
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,iBAAiB,GACjB,oBAAoB,GACpB,eAAe,GACf,sBAAsB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.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 './core/tokenizer.js';
|
|
6
6
|
export type { TokenizerFn } from './core/tokenizer.js';
|
|
7
|
-
export type { GuardConfig, GuardErrorCode, GuardEvent, GuardEventHandler, GuardEventName, GuardScope, GuardState, GuardWebhookConfig, RequestContext, } from './core/types.js';
|
|
7
|
+
export type { GuardConfig, GuardBudgetConfig, CostGuardAlertsConfig, CostGuardAlertEvent, CostGuardAlertPayload, CostGuardAlertSeverity, GuardErrorCode, GuardEvent, GuardEventHandler, GuardEventName, GuardScope, GuardState, GuardWebhookConfig, RequestContext, } from './core/types.js';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5H,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5H,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,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,iBAAiB,CAAC"}
|