@agentguard-run/spend 0.1.9 → 0.2.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/PATENTS.md +37 -0
- package/dist/adapters/postgres-store.d.ts +8 -2
- package/dist/adapters/postgres-store.d.ts.map +1 -1
- package/dist/adapters/postgres-store.js +58 -6
- package/dist/adapters/postgres-store.js.map +1 -1
- package/dist/adapters/redis-store.d.ts +10 -2
- package/dist/adapters/redis-store.d.ts.map +1 -1
- package/dist/adapters/redis-store.js +90 -24
- package/dist/adapters/redis-store.js.map +1 -1
- package/dist/cli/demo.d.ts +2 -2
- package/dist/cli/demo.js +4 -4
- package/dist/cli/demo.js.map +1 -1
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.js +2 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +1 -1
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +7 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +19 -14
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/telemetry.d.ts +2 -0
- package/dist/cli/telemetry.d.ts.map +1 -0
- package/dist/cli/telemetry.js +37 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/verify.d.ts +2 -2
- package/dist/cli/verify.d.ts.map +1 -1
- package/dist/cli/verify.js +53 -36
- package/dist/cli/verify.js.map +1 -1
- package/dist/cost-table.d.ts +2 -2
- package/dist/cost-table.d.ts.map +1 -1
- package/dist/cost-table.js +23 -3
- package/dist/cost-table.js.map +1 -1
- package/dist/decision-log.d.ts +5 -4
- package/dist/decision-log.d.ts.map +1 -1
- package/dist/decision-log.js +40 -15
- package/dist/decision-log.js.map +1 -1
- package/dist/i18n.js +3 -3
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -6
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts +8 -21
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +226 -109
- package/dist/policy.js.map +1 -1
- package/dist/spend-guard.d.ts +6 -2
- package/dist/spend-guard.d.ts.map +1 -1
- package/dist/spend-guard.js +95 -26
- package/dist/spend-guard.js.map +1 -1
- package/dist/store-memory.d.ts +8 -2
- package/dist/store-memory.d.ts.map +1 -1
- package/dist/store-memory.js +34 -2
- package/dist/store-memory.js.map +1 -1
- package/dist/telemetry.d.ts +11 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +149 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +23 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/package.json +22 -8
package/dist/spend-guard.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* AgentGuard(TM) Spend
|
|
3
|
+
* AgentGuard(TM) Spend: Core SDK entry point
|
|
4
4
|
*
|
|
5
5
|
* `withSpendGuard()` wraps a provider SDK client (OpenAI, Anthropic, Bedrock)
|
|
6
6
|
* and enforces a SpendPolicy locally before each call is sent to the provider.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Patent notice: Protected by U.S. patent-pending technology
|
|
15
15
|
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
16
|
-
*
|
|
16
|
+
* 64/071,781; 64/071,789).
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.AgentGuardBlockedError = exports.SpendGuard = void 0;
|
|
@@ -24,16 +24,19 @@ const store_memory_1 = require("./store-memory");
|
|
|
24
24
|
const decision_log_2 = require("./decision-log");
|
|
25
25
|
const cost_table_1 = require("./cost-table");
|
|
26
26
|
const i18n_1 = require("./i18n");
|
|
27
|
+
const telemetry_1 = require("./telemetry");
|
|
27
28
|
class SpendGuard {
|
|
28
29
|
config;
|
|
29
30
|
spendStore;
|
|
30
31
|
logStore;
|
|
31
32
|
nextSequence = 0;
|
|
32
33
|
previousHash = decision_log_1.GENESIS_PREVIOUS_HASH;
|
|
34
|
+
decisionLock = Promise.resolve();
|
|
33
35
|
constructor(config) {
|
|
34
36
|
this.config = config;
|
|
35
37
|
this.spendStore = config.spendStore ?? new store_memory_1.InMemorySpendStore();
|
|
36
38
|
this.logStore = config.logStore ?? new decision_log_2.InMemoryDecisionLogStore();
|
|
39
|
+
(0, telemetry_1.recordTelemetryEvent)('sdk_init');
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
39
42
|
* Hydrate the chain pointer from the log store. Call this once at startup
|
|
@@ -41,35 +44,67 @@ class SpendGuard {
|
|
|
41
44
|
* previous run.
|
|
42
45
|
*/
|
|
43
46
|
async hydrate() {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
await this.withDecisionLock(async () => {
|
|
48
|
+
const latest = await this.logStore.getLatest(this.getSignerFingerprint());
|
|
49
|
+
if (latest) {
|
|
50
|
+
this.nextSequence = latest.sequence + 1;
|
|
51
|
+
this.previousHash = latest.entryHash;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
49
54
|
}
|
|
50
55
|
/**
|
|
51
56
|
* Evaluate the policy for a call and append to the decision log.
|
|
52
57
|
* Returns the decision plus the signed log entry (or null if unsigned).
|
|
53
58
|
*/
|
|
54
59
|
async decide(call) {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
const result = await this.withDecisionLock(async () => {
|
|
61
|
+
const decision = await (0, policy_1.evaluatePolicy)(this.config.policy, call, this.spendStore);
|
|
62
|
+
let signed = null;
|
|
63
|
+
if (this.config.signingKeys) {
|
|
64
|
+
await this.refreshChainHead();
|
|
65
|
+
signed = await (0, decision_log_1.signDecision)({
|
|
66
|
+
sequence: this.nextSequence,
|
|
67
|
+
decision,
|
|
68
|
+
previousHash: this.previousHash,
|
|
69
|
+
privateKey: this.config.signingKeys.privateKey,
|
|
70
|
+
publicKey: this.config.signingKeys.publicKey,
|
|
71
|
+
});
|
|
72
|
+
await this.logStore.append(signed);
|
|
73
|
+
this.nextSequence += 1;
|
|
74
|
+
this.previousHash = signed.entryHash;
|
|
75
|
+
}
|
|
76
|
+
return { decision, signed };
|
|
77
|
+
});
|
|
69
78
|
if (this.config.onDecision) {
|
|
70
|
-
await this.config.onDecision(decision, signed);
|
|
79
|
+
await this.config.onDecision(result.decision, result.signed);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
getSignerFingerprint() {
|
|
84
|
+
return this.config.signingKeys
|
|
85
|
+
? (0, decision_log_1.computeSignerFingerprint)(this.config.signingKeys.publicKey)
|
|
86
|
+
: undefined;
|
|
87
|
+
}
|
|
88
|
+
async refreshChainHead() {
|
|
89
|
+
const latest = await this.logStore.getLatest(this.getSignerFingerprint());
|
|
90
|
+
if (latest && latest.sequence >= this.nextSequence) {
|
|
91
|
+
this.nextSequence = latest.sequence + 1;
|
|
92
|
+
this.previousHash = latest.entryHash;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async withDecisionLock(fn) {
|
|
96
|
+
const previous = this.decisionLock;
|
|
97
|
+
let release;
|
|
98
|
+
this.decisionLock = new Promise((resolve) => {
|
|
99
|
+
release = resolve;
|
|
100
|
+
});
|
|
101
|
+
await previous;
|
|
102
|
+
try {
|
|
103
|
+
return await fn();
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
release();
|
|
71
107
|
}
|
|
72
|
-
return { decision, signed };
|
|
73
108
|
}
|
|
74
109
|
/** Default token estimator: approx 1 token per 4 characters of English. */
|
|
75
110
|
defaultTokenEstimator(text) {
|
|
@@ -129,13 +164,18 @@ function withSpendGuard(client, opts) {
|
|
|
129
164
|
const originalCreate = client?.chat?.completions?.create?.bind(client.chat.completions);
|
|
130
165
|
if (!originalCreate) {
|
|
131
166
|
throw new Error('withSpendGuard: expected an OpenAI client with chat.completions.create. ' +
|
|
132
|
-
'For Anthropic or Bedrock, use
|
|
167
|
+
'For Anthropic or AWS Bedrock, use the Python SDK (agentguard-spend) which has dedicated bindings. ' +
|
|
168
|
+
'Native Node bindings for Anthropic + Bedrock are on the roadmap.');
|
|
133
169
|
}
|
|
134
170
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
135
171
|
client.chat.completions.create = async (params) => {
|
|
136
172
|
const inputText = serializeMessages(params?.messages ?? []);
|
|
137
173
|
const inputTokens = guard.estimateTokens(inputText);
|
|
138
|
-
const outputTokens = typeof params?.
|
|
174
|
+
const outputTokens = typeof params?.max_completion_tokens === 'number'
|
|
175
|
+
? params.max_completion_tokens
|
|
176
|
+
: typeof params?.max_tokens === 'number'
|
|
177
|
+
? params.max_tokens
|
|
178
|
+
: 512;
|
|
139
179
|
const provider = (0, cost_table_1.inferProvider)(params?.model ?? '');
|
|
140
180
|
const call = {
|
|
141
181
|
provider,
|
|
@@ -154,7 +194,9 @@ function withSpendGuard(client, opts) {
|
|
|
154
194
|
params = { ...params, model: decision.modelResolved };
|
|
155
195
|
}
|
|
156
196
|
// shadow + allow + downgrade all proceed to the provider.
|
|
157
|
-
|
|
197
|
+
const response = await originalCreate(params);
|
|
198
|
+
await trueUpSpend(guard, opts.policy, call, decision, response);
|
|
199
|
+
return response;
|
|
158
200
|
};
|
|
159
201
|
// Attach the guard so callers can introspect or await hydration.
|
|
160
202
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -170,4 +212,31 @@ function serializeMessages(messages) {
|
|
|
170
212
|
.map((m) => (typeof m?.content === 'string' ? m.content : JSON.stringify(m?.content ?? '')))
|
|
171
213
|
.join('\n');
|
|
172
214
|
}
|
|
215
|
+
async function trueUpSpend(guard, policy, call, decision, response) {
|
|
216
|
+
if (decision.action !== 'allow' && decision.action !== 'downgrade' && decision.action !== 'shadow')
|
|
217
|
+
return;
|
|
218
|
+
const usage = extractUsage(response);
|
|
219
|
+
if (!usage)
|
|
220
|
+
return;
|
|
221
|
+
const estimatedCents = (0, cost_table_1.computeCallCents)(decision.modelResolved, call.inputTokens, call.outputTokens);
|
|
222
|
+
const actualCents = (0, cost_table_1.computeCallCents)(decision.modelResolved, usage.inputTokens, usage.outputTokens);
|
|
223
|
+
if (estimatedCents === null || actualCents === null)
|
|
224
|
+
return;
|
|
225
|
+
const delta = actualCents - estimatedCents;
|
|
226
|
+
if (delta === 0)
|
|
227
|
+
return;
|
|
228
|
+
await (0, policy_1.adjustPolicyWindowSpend)(policy, guard.getSpendStore(), delta);
|
|
229
|
+
}
|
|
230
|
+
function extractUsage(response) {
|
|
231
|
+
const usage = response?.usage;
|
|
232
|
+
if (!usage)
|
|
233
|
+
return null;
|
|
234
|
+
const input = usage.prompt_tokens ?? usage.input_tokens;
|
|
235
|
+
const output = usage.completion_tokens ?? usage.output_tokens;
|
|
236
|
+
if (!Number.isSafeInteger(input) || !Number.isSafeInteger(output))
|
|
237
|
+
return null;
|
|
238
|
+
if (input < 0 || output < 0)
|
|
239
|
+
return null;
|
|
240
|
+
return { inputTokens: input, outputTokens: output };
|
|
241
|
+
}
|
|
173
242
|
//# sourceMappingURL=spend-guard.js.map
|
package/dist/spend-guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend-guard.js","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;
|
|
1
|
+
{"version":3,"file":"spend-guard.js","sourceRoot":"","sources":["../src/spend-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/store-memory.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AgentGuard(TM) Spend
|
|
2
|
+
* AgentGuard(TM) Spend: In-memory spend store
|
|
3
3
|
*
|
|
4
4
|
* Reference implementation of the SpendStore interface. Suitable for tests,
|
|
5
5
|
* examples, and single-process shadow deployments. Production callers with
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Licensed under the alpha evaluation license; see LICENSE in the package
|
|
10
10
|
* root. Patent notice: Protected by U.S. patent-pending technology
|
|
11
11
|
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
12
|
-
*
|
|
12
|
+
* 64/071,781; 64/071,789).
|
|
13
13
|
*/
|
|
14
14
|
import type { SpendStore, SpendWindow } from './types';
|
|
15
15
|
export declare const WINDOW_DURATION_MS: Record<SpendWindow, number>;
|
|
@@ -29,6 +29,12 @@ export declare class InMemorySpendStore implements SpendStore {
|
|
|
29
29
|
private rollIfStale;
|
|
30
30
|
getWindowSpend(scopeKey: string, window: SpendWindow): Promise<number>;
|
|
31
31
|
incrementWindowSpend(scopeKey: string, window: SpendWindow, cents: number): Promise<number>;
|
|
32
|
+
reserveWindowSpend(scopeKey: string, window: SpendWindow, cents: number, limitCents: number): Promise<{
|
|
33
|
+
allowed: boolean;
|
|
34
|
+
before: number;
|
|
35
|
+
after: number;
|
|
36
|
+
}>;
|
|
37
|
+
settleWindowSpend(scopeKey: string, window: SpendWindow, deltaCents: number): Promise<number>;
|
|
32
38
|
/** Clear all state. Test helper. */
|
|
33
39
|
reset(): void;
|
|
34
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-memory.d.ts","sourceRoot":"","sources":["../src/store-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AASvD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAM1D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,KAAK,CAAkC;IAE/C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,WAAW;IAYb,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtE,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"store-memory.d.ts","sourceRoot":"","sources":["../src/store-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AASvD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAM1D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,KAAK,CAAkC;IAE/C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,WAAW;IAYb,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtE,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAOZ,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBzD,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAOlB,oCAAoC;IACpC,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/store-memory.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* AgentGuard(TM) Spend
|
|
3
|
+
* AgentGuard(TM) Spend: In-memory spend store
|
|
4
4
|
*
|
|
5
5
|
* Reference implementation of the SpendStore interface. Suitable for tests,
|
|
6
6
|
* examples, and single-process shadow deployments. Production callers with
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Licensed under the alpha evaluation license; see LICENSE in the package
|
|
11
11
|
* root. Patent notice: Protected by U.S. patent-pending technology
|
|
12
12
|
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
13
|
-
*
|
|
13
|
+
* 64/071,781; 64/071,789).
|
|
14
14
|
*/
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.InMemorySpendStore = exports.WINDOW_DURATION_MS = void 0;
|
|
@@ -58,14 +58,46 @@ class InMemorySpendStore {
|
|
|
58
58
|
return state.cents;
|
|
59
59
|
}
|
|
60
60
|
async incrementWindowSpend(scopeKey, window, cents) {
|
|
61
|
+
validateCents('cents', cents);
|
|
61
62
|
const state = this.rollIfStale(scopeKey, window, Date.now());
|
|
62
63
|
state.cents += cents;
|
|
63
64
|
return state.cents;
|
|
64
65
|
}
|
|
66
|
+
async reserveWindowSpend(scopeKey, window, cents, limitCents) {
|
|
67
|
+
validateCents('cents', cents);
|
|
68
|
+
validateCents('limitCents', limitCents);
|
|
69
|
+
const state = this.rollIfStale(scopeKey, window, Date.now());
|
|
70
|
+
const before = state.cents;
|
|
71
|
+
const after = before + cents;
|
|
72
|
+
if (!Number.isSafeInteger(after)) {
|
|
73
|
+
throw new Error('reserveWindowSpend: computed cents must be a safe integer');
|
|
74
|
+
}
|
|
75
|
+
if (after > limitCents) {
|
|
76
|
+
return { allowed: false, before, after };
|
|
77
|
+
}
|
|
78
|
+
state.cents = after;
|
|
79
|
+
return { allowed: true, before, after };
|
|
80
|
+
}
|
|
81
|
+
async settleWindowSpend(scopeKey, window, deltaCents) {
|
|
82
|
+
validateDelta(deltaCents);
|
|
83
|
+
const state = this.rollIfStale(scopeKey, window, Date.now());
|
|
84
|
+
state.cents = Math.max(0, state.cents + deltaCents);
|
|
85
|
+
return state.cents;
|
|
86
|
+
}
|
|
65
87
|
/** Clear all state. Test helper. */
|
|
66
88
|
reset() {
|
|
67
89
|
this.state.clear();
|
|
68
90
|
}
|
|
69
91
|
}
|
|
70
92
|
exports.InMemorySpendStore = InMemorySpendStore;
|
|
93
|
+
function validateCents(name, cents) {
|
|
94
|
+
if (!Number.isSafeInteger(cents) || cents < 0) {
|
|
95
|
+
throw new Error(`${name} must be a non-negative safe integer`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function validateDelta(deltaCents) {
|
|
99
|
+
if (!Number.isSafeInteger(deltaCents)) {
|
|
100
|
+
throw new Error('deltaCents must be a safe integer');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
71
103
|
//# sourceMappingURL=store-memory.js.map
|
package/dist/store-memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-memory.js","sourceRoot":"","sources":["../src/store-memory.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAwBH,kCAIC;AAjBY,QAAA,kBAAkB,GAAgC;IAC7D,QAAQ,EAAE,CAAC,EAAE,uCAAuC;IACpD,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,EAAE,GAAG,UAAU,EAAE,sEAAsE;CACnG,CAAC;AAEF;;;;GAIG;AACH,SAAgB,WAAW,CAAC,MAAmB,EAAE,KAAa;IAC5D,MAAM,GAAG,GAAG,0BAAkB,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,sBAAsB;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAa,kBAAkB;IACrB,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEvC,GAAG,CAAC,QAAgB,EAAE,MAAmB;QAC/C,OAAO,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC;IAClC,CAAC;IAEO,WAAW,CAAC,QAAgB,EAAE,MAAmB,EAAE,KAAa;QACtE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,MAAmB;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,QAAgB,EAChB,MAAmB,EACnB,KAAa;QAEb,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QACrB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,oCAAoC;IACpC,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"store-memory.js","sourceRoot":"","sources":["../src/store-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface TelemetryStatus {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
anonymousInstallId: string | null;
|
|
4
|
+
statePath: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function telemetryStatus(): TelemetryStatus;
|
|
7
|
+
export declare function enableTelemetry(): TelemetryStatus;
|
|
8
|
+
export declare function disableTelemetry(): TelemetryStatus;
|
|
9
|
+
export declare function resetTelemetryInstallId(): TelemetryStatus;
|
|
10
|
+
export declare function recordTelemetryEvent(event: string): void;
|
|
11
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,wBAAgB,eAAe,IAAI,eAAe,CAOjD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAKjD;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CAKlD;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAKzD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAwCxD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.telemetryStatus = telemetryStatus;
|
|
37
|
+
exports.enableTelemetry = enableTelemetry;
|
|
38
|
+
exports.disableTelemetry = disableTelemetry;
|
|
39
|
+
exports.resetTelemetryInstallId = resetTelemetryInstallId;
|
|
40
|
+
exports.recordTelemetryEvent = recordTelemetryEvent;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const https = __importStar(require("https"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const crypto_1 = require("crypto");
|
|
46
|
+
const AGENTGUARD_SPEND_VERSION = '0.2.0';
|
|
47
|
+
const STATE_DIR = path.join(os.homedir(), '.agentguard');
|
|
48
|
+
const STATE_PATH = path.join(STATE_DIR, 'telemetry.json');
|
|
49
|
+
const BEACON_URL = 'https://agentguard.run/api/beacon';
|
|
50
|
+
const sentEvents = new Set();
|
|
51
|
+
function telemetryStatus() {
|
|
52
|
+
const state = loadState();
|
|
53
|
+
return {
|
|
54
|
+
enabled: telemetryEnabled(state),
|
|
55
|
+
anonymousInstallId: state.anonymousInstallId ?? null,
|
|
56
|
+
statePath: STATE_PATH,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function enableTelemetry() {
|
|
60
|
+
const state = ensureInstallId(loadState());
|
|
61
|
+
state.enabled = true;
|
|
62
|
+
saveState(state);
|
|
63
|
+
return telemetryStatus();
|
|
64
|
+
}
|
|
65
|
+
function disableTelemetry() {
|
|
66
|
+
const state = loadState();
|
|
67
|
+
state.enabled = false;
|
|
68
|
+
saveState(state);
|
|
69
|
+
return telemetryStatus();
|
|
70
|
+
}
|
|
71
|
+
function resetTelemetryInstallId() {
|
|
72
|
+
const state = loadState();
|
|
73
|
+
state.anonymousInstallId = (0, crypto_1.randomUUID)();
|
|
74
|
+
saveState(state);
|
|
75
|
+
return telemetryStatus();
|
|
76
|
+
}
|
|
77
|
+
function recordTelemetryEvent(event) {
|
|
78
|
+
if (sentEvents.has(event))
|
|
79
|
+
return;
|
|
80
|
+
const state = loadState();
|
|
81
|
+
if (!telemetryEnabled(state))
|
|
82
|
+
return;
|
|
83
|
+
const withId = ensureInstallId(state);
|
|
84
|
+
saveState(withId);
|
|
85
|
+
sentEvents.add(event);
|
|
86
|
+
const payload = JSON.stringify({
|
|
87
|
+
event,
|
|
88
|
+
sdk_name: '@agentguard-run/spend',
|
|
89
|
+
sdk_version: AGENTGUARD_SPEND_VERSION,
|
|
90
|
+
runtime: `node-${process.version}`,
|
|
91
|
+
os_family: process.platform,
|
|
92
|
+
anonymous_install_id: withId.anonymousInstallId,
|
|
93
|
+
ci_env_detected: isCI(),
|
|
94
|
+
tty: Boolean(process.stdout?.isTTY),
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
const url = new URL(BEACON_URL);
|
|
98
|
+
const req = https.request({
|
|
99
|
+
method: 'POST',
|
|
100
|
+
hostname: url.hostname,
|
|
101
|
+
path: url.pathname,
|
|
102
|
+
headers: {
|
|
103
|
+
'content-type': 'application/json',
|
|
104
|
+
'content-length': Buffer.byteLength(payload),
|
|
105
|
+
},
|
|
106
|
+
timeout: 1000,
|
|
107
|
+
}, (res) => res.resume());
|
|
108
|
+
req.on('error', () => undefined);
|
|
109
|
+
req.on('timeout', () => req.destroy());
|
|
110
|
+
req.end(payload);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Telemetry is best effort and never affects SDK behavior.
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function telemetryEnabled(state) {
|
|
117
|
+
if (process.env.AGENTGUARD_NO_BEACON === '1')
|
|
118
|
+
return false;
|
|
119
|
+
if (process.env.AGENTGUARD_TELEMETRY === '1')
|
|
120
|
+
return true;
|
|
121
|
+
return state.enabled === true;
|
|
122
|
+
}
|
|
123
|
+
function loadState() {
|
|
124
|
+
try {
|
|
125
|
+
return JSON.parse(fs.readFileSync(STATE_PATH, 'utf-8'));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return {};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function saveState(state) {
|
|
132
|
+
fs.mkdirSync(STATE_DIR, { recursive: true });
|
|
133
|
+
fs.writeFileSync(STATE_PATH, JSON.stringify(state, null, 2) + '\n', { mode: 0o600 });
|
|
134
|
+
}
|
|
135
|
+
function ensureInstallId(state) {
|
|
136
|
+
if (!state.anonymousInstallId)
|
|
137
|
+
state.anonymousInstallId = (0, crypto_1.randomUUID)();
|
|
138
|
+
return state;
|
|
139
|
+
}
|
|
140
|
+
function isCI() {
|
|
141
|
+
return Boolean(process.env.CI ||
|
|
142
|
+
process.env.GITHUB_ACTIONS ||
|
|
143
|
+
process.env.GITLAB_CI ||
|
|
144
|
+
process.env.CIRCLECI ||
|
|
145
|
+
process.env.BUILDKITE ||
|
|
146
|
+
process.env.VERCEL ||
|
|
147
|
+
process.env.NETLIFY);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AgentGuard(TM) Spend
|
|
2
|
+
* AgentGuard(TM) Spend: Core type definitions
|
|
3
3
|
*
|
|
4
4
|
* Patent notice: Protected by U.S. patent-pending technology
|
|
5
5
|
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
6
|
-
*
|
|
6
|
+
* 64/071,781; 64/071,789).
|
|
7
7
|
*
|
|
8
8
|
* Design rule: NO DATA PLANE INVOLVEMENT.
|
|
9
9
|
* All policy decisions are made locally in the customer runtime.
|
|
@@ -157,6 +157,14 @@ export interface SignedDecisionLogEntry {
|
|
|
157
157
|
/** Hex-encoded public key fingerprint (first 8 bytes of SHA-256(pubkey)) */
|
|
158
158
|
signerFingerprint: string;
|
|
159
159
|
}
|
|
160
|
+
export interface SpendReservation {
|
|
161
|
+
/** True when cents were reserved against the window. */
|
|
162
|
+
allowed: boolean;
|
|
163
|
+
/** Cents spent in the window before this reservation attempt. */
|
|
164
|
+
before: number;
|
|
165
|
+
/** Cents that would be or were spent after the reservation. */
|
|
166
|
+
after: number;
|
|
167
|
+
}
|
|
160
168
|
/**
|
|
161
169
|
* Storage backend for spend state. Implementations may use Redis, Postgres,
|
|
162
170
|
* SQLite, in-memory, or anything else. Spend state never leaves the customer
|
|
@@ -172,6 +180,17 @@ export interface SpendStore {
|
|
|
172
180
|
* Returns the new total. Implementations MUST be atomic to prevent races.
|
|
173
181
|
*/
|
|
174
182
|
incrementWindowSpend(scopeKey: string, window: SpendWindow, cents: number): Promise<number>;
|
|
183
|
+
/**
|
|
184
|
+
* Atomically reserve cents if the post-reservation total is <= limitCents.
|
|
185
|
+
* Implementations that omit this method will still work, but cannot provide
|
|
186
|
+
* distributed cap safety under concurrent writers.
|
|
187
|
+
*/
|
|
188
|
+
reserveWindowSpend?(scopeKey: string, window: SpendWindow, cents: number, limitCents: number): Promise<SpendReservation>;
|
|
189
|
+
/**
|
|
190
|
+
* Adjust a prior reservation after provider usage is known. Negative deltas
|
|
191
|
+
* must clamp at zero rather than creating negative spend.
|
|
192
|
+
*/
|
|
193
|
+
settleWindowSpend?(scopeKey: string, window: SpendWindow, deltaCents: number): Promise<number>;
|
|
175
194
|
}
|
|
176
195
|
/**
|
|
177
196
|
* Storage backend for the signed decision log. Implementations may append to a
|
|
@@ -181,8 +200,8 @@ export interface DecisionLogStore {
|
|
|
181
200
|
/** Append a new signed entry to the chain. */
|
|
182
201
|
append(entry: SignedDecisionLogEntry): Promise<void>;
|
|
183
202
|
/** Get the most recent entry, or null if empty. */
|
|
184
|
-
getLatest(): Promise<SignedDecisionLogEntry | null>;
|
|
203
|
+
getLatest(signerFingerprint?: string): Promise<SignedDecisionLogEntry | null>;
|
|
185
204
|
/** Iterate from sequence onward (used by verification tools). */
|
|
186
|
-
read(fromSequence: number, limit: number): Promise<SignedDecisionLogEntry[]>;
|
|
205
|
+
read(fromSequence: number, limit: number, signerFingerprint?: string): Promise<SignedDecisionLogEntry[]>;
|
|
187
206
|
}
|
|
188
207
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* AgentGuard(TM) Spend
|
|
3
|
+
* AgentGuard(TM) Spend: Core type definitions
|
|
4
4
|
*
|
|
5
5
|
* Patent notice: Protected by U.S. patent-pending technology
|
|
6
6
|
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
7
|
-
*
|
|
7
|
+
* 64/071,781; 64/071,789).
|
|
8
8
|
*
|
|
9
9
|
* Design rule: NO DATA PLANE INVOLVEMENT.
|
|
10
10
|
* All policy decisions are made locally in the customer runtime.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentguard-run/spend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Local-runtime spend caps and capability-gated model routing for AI agents. Prompts, API keys, and signing keys stay inside the customer runtime. Zero data plane involvement.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -79,13 +79,27 @@
|
|
|
79
79
|
"@langchain/core": ">=0.3.0"
|
|
80
80
|
},
|
|
81
81
|
"peerDependenciesMeta": {
|
|
82
|
-
"openai": {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"@
|
|
82
|
+
"openai": {
|
|
83
|
+
"optional": true
|
|
84
|
+
},
|
|
85
|
+
"@anthropic-ai/sdk": {
|
|
86
|
+
"optional": true
|
|
87
|
+
},
|
|
88
|
+
"@aws-sdk/client-bedrock-runtime": {
|
|
89
|
+
"optional": true
|
|
90
|
+
},
|
|
91
|
+
"ioredis": {
|
|
92
|
+
"optional": true
|
|
93
|
+
},
|
|
94
|
+
"pg": {
|
|
95
|
+
"optional": true
|
|
96
|
+
},
|
|
97
|
+
"@aws-sdk/client-kms": {
|
|
98
|
+
"optional": true
|
|
99
|
+
},
|
|
100
|
+
"@langchain/core": {
|
|
101
|
+
"optional": true
|
|
102
|
+
}
|
|
89
103
|
},
|
|
90
104
|
"devDependencies": {
|
|
91
105
|
"@types/node": "^20.0.0",
|