@agentguard-run/spend 0.13.0 → 0.13.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/decision-log.d.ts.map +1 -1
  3. package/dist/decision-log.js +4 -1
  4. package/dist/decision-log.js.map +1 -1
  5. package/dist/frameworks/claude-code.d.ts +32 -0
  6. package/dist/frameworks/claude-code.d.ts.map +1 -0
  7. package/dist/frameworks/claude-code.js +75 -0
  8. package/dist/frameworks/claude-code.js.map +1 -0
  9. package/dist/frameworks/common.d.ts +51 -0
  10. package/dist/frameworks/common.d.ts.map +1 -0
  11. package/dist/frameworks/common.js +168 -0
  12. package/dist/frameworks/common.js.map +1 -0
  13. package/dist/frameworks/hermes.d.ts +34 -0
  14. package/dist/frameworks/hermes.d.ts.map +1 -0
  15. package/dist/frameworks/hermes.js +50 -0
  16. package/dist/frameworks/hermes.js.map +1 -0
  17. package/dist/frameworks/index.d.ts +6 -0
  18. package/dist/frameworks/index.d.ts.map +1 -0
  19. package/dist/frameworks/index.js +22 -0
  20. package/dist/frameworks/index.js.map +1 -0
  21. package/dist/frameworks/openrouter.d.ts +19 -0
  22. package/dist/frameworks/openrouter.d.ts.map +1 -0
  23. package/dist/frameworks/openrouter.js +85 -0
  24. package/dist/frameworks/openrouter.js.map +1 -0
  25. package/dist/frameworks/vercel-ai.d.ts +27 -0
  26. package/dist/frameworks/vercel-ai.d.ts.map +1 -0
  27. package/dist/frameworks/vercel-ai.js +96 -0
  28. package/dist/frameworks/vercel-ai.js.map +1 -0
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/telemetry.js +1 -1
  34. package/package.json +33 -3
  35. package/src/frameworks/README.md +44 -0
  36. package/src/frameworks/claude-code.ts +108 -0
  37. package/src/frameworks/common.ts +208 -0
  38. package/src/frameworks/hermes.ts +83 -0
  39. package/src/frameworks/index.ts +5 -0
  40. package/src/frameworks/openrouter.ts +90 -0
  41. package/src/frameworks/vercel-ai.ts +118 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSpendGuardOpenRouter = withSpendGuardOpenRouter;
4
+ exports.withOpenRouterSpendGuard = withOpenRouterSpendGuard;
5
+ exports.createOpenRouterFetch = createOpenRouterFetch;
6
+ const spend_guard_1 = require("../spend-guard");
7
+ const common_1 = require("./common");
8
+ function withSpendGuardOpenRouter(client, opts) {
9
+ const config = {
10
+ ...(opts.config ?? {}),
11
+ openRouterBaseUrl: opts.openRouterBaseUrl ?? opts.config?.openRouterBaseUrl ?? 'https://openrouter.ai/api/v1',
12
+ providerRoute: opts.config?.providerRoute ?? 'openrouter',
13
+ };
14
+ return (0, spend_guard_1.withSpendGuard)(client, {
15
+ policy: opts.policy,
16
+ scope: opts.scope,
17
+ capabilityClaim: opts.capabilityClaim,
18
+ licenseKey: opts.licenseKey,
19
+ config,
20
+ });
21
+ }
22
+ function withOpenRouterSpendGuard(client, opts) {
23
+ return withSpendGuardOpenRouter(client, opts);
24
+ }
25
+ function createOpenRouterFetch(opts) {
26
+ const guard = (0, common_1.createFrameworkGuard)({ ...opts, defaultModel: opts.defaultModel ?? 'openrouter/auto', framework: 'openrouter' });
27
+ const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
28
+ if (!fetchImpl)
29
+ throw new Error('createOpenRouterFetch: fetch is not available');
30
+ const endpoint = opts.endpoint ?? 'https://openrouter.ai/api/v1/chat/completions';
31
+ return async (url, init = {}) => {
32
+ const target = String(url);
33
+ if (!target.startsWith(endpoint))
34
+ return fetchImpl(target, init);
35
+ const body = parseJsonBody(init.body);
36
+ const preflight = await (0, common_1.preflightFrameworkCall)(guard, opts, {
37
+ framework: 'openrouter',
38
+ model: typeof body.model === 'string' ? body.model : opts.defaultModel ?? 'openrouter/auto',
39
+ params: body,
40
+ metadata: metadataRecord(body.metadata),
41
+ requestShape: {
42
+ endpoint: '/api/v1/chat/completions',
43
+ stream: body.stream === true,
44
+ maxTokens: typeof body.max_tokens === 'number' ? body.max_tokens : undefined,
45
+ toolCount: Array.isArray(body.tools) ? body.tools.length : 0,
46
+ },
47
+ });
48
+ const nextBody = preflight.decision.action === 'downgrade' && preflight.decision.modelResolved !== preflight.decision.modelRequested
49
+ ? { ...body, model: preflight.decision.modelResolved }
50
+ : body;
51
+ const response = await fetchImpl(target, { ...init, body: JSON.stringify(nextBody) });
52
+ await (0, common_1.settleFrameworkCall)(preflight, await responseJson(response));
53
+ return response;
54
+ };
55
+ }
56
+ function parseJsonBody(body) {
57
+ if (typeof body === 'string') {
58
+ try {
59
+ return JSON.parse(body);
60
+ }
61
+ catch {
62
+ return {};
63
+ }
64
+ }
65
+ if (body && typeof body === 'object' && !Array.isArray(body))
66
+ return body;
67
+ return {};
68
+ }
69
+ function metadataRecord(value) {
70
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
71
+ }
72
+ async function responseJson(response) {
73
+ const maybe = response;
74
+ try {
75
+ if (typeof maybe.clone === 'function')
76
+ return await maybe.clone().json?.();
77
+ if (typeof maybe.json === 'function')
78
+ return await maybe.json();
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ return null;
84
+ }
85
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/frameworks/openrouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type FrameworkAdapterOptions } from './common';
2
+ export type AgentGuardAiSdkMiddleware = {
3
+ specificationVersion: 'v3';
4
+ transformParams?: (args: {
5
+ type: 'generate' | 'stream';
6
+ params: unknown;
7
+ model: unknown;
8
+ }) => Promise<unknown> | unknown;
9
+ wrapGenerate?: (args: {
10
+ doGenerate: () => Promise<unknown>;
11
+ doStream?: () => Promise<unknown>;
12
+ params: unknown;
13
+ model: unknown;
14
+ }) => Promise<unknown>;
15
+ wrapStream?: (args: {
16
+ doGenerate?: () => Promise<unknown>;
17
+ doStream: () => Promise<unknown>;
18
+ params: unknown;
19
+ model: unknown;
20
+ }) => Promise<unknown>;
21
+ };
22
+ export interface AgentGuardAiSdkOptions extends FrameworkAdapterOptions {
23
+ framework?: 'vercel-ai-sdk';
24
+ }
25
+ export declare function agentguardAiSdkMiddleware(opts: AgentGuardAiSdkOptions): AgentGuardAiSdkMiddleware;
26
+ export declare const agentguard: typeof agentguardAiSdkMiddleware;
27
+ //# sourceMappingURL=vercel-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../src/frameworks/vercel-ai.ts"],"names":[],"mappings":"AACA,OAAO,EAA8I,KAAK,uBAAuB,EAA2B,MAAM,UAAU,CAAC;AAE7N,MAAM,MAAM,yBAAyB,GAAG;IACtC,oBAAoB,EAAE,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACzH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtJ,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrJ,CAAC;AAEF,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,GAAG,yBAAyB,CAwBjG;AAED,eAAO,MAAM,UAAU,kCAA4B,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.agentguard = void 0;
4
+ exports.agentguardAiSdkMiddleware = agentguardAiSdkMiddleware;
5
+ const common_1 = require("./common");
6
+ function agentguardAiSdkMiddleware(opts) {
7
+ const guard = (0, common_1.createFrameworkGuard)({ ...opts, framework: 'vercel-ai-sdk' });
8
+ return {
9
+ specificationVersion: 'v3',
10
+ transformParams: ({ params }) => params,
11
+ wrapGenerate: async ({ doGenerate, params, model }) => {
12
+ const preflight = await aiSdkPreflight(guard, opts, params, model, 'generate');
13
+ const result = await doGenerate();
14
+ await (0, common_1.settleFrameworkCall)(preflight, result);
15
+ await (0, common_1.recordFrameworkReceipt)(guard, 'vercel-ai-sdk', {
16
+ event: 'post_generate',
17
+ decisionId: preflight.decision.decisionId,
18
+ model: preflight.decision.modelResolved,
19
+ requestShape: requestShape(params, 'generate'),
20
+ hasUsage: Boolean((0, common_1.objectRecord)(result)?.usage),
21
+ });
22
+ return result;
23
+ },
24
+ wrapStream: async ({ doStream, params, model }) => {
25
+ const preflight = await aiSdkPreflight(guard, opts, params, model, 'stream');
26
+ const result = await doStream();
27
+ return wrapAiSdkStreamResult(guard, preflight, result, params);
28
+ },
29
+ };
30
+ }
31
+ exports.agentguard = agentguardAiSdkMiddleware;
32
+ async function aiSdkPreflight(guard, opts, params, model, type) {
33
+ return (0, common_1.preflightFrameworkCall)(guard, opts, {
34
+ framework: 'vercel-ai-sdk',
35
+ model: (0, common_1.modelFromUnknown)(model, opts.defaultModel ?? 'unknown'),
36
+ params,
37
+ metadata: agentguardMetadata(params),
38
+ requestShape: requestShape(params, type),
39
+ });
40
+ }
41
+ function requestShape(params, type) {
42
+ const record = (0, common_1.objectRecord)(params) ?? {};
43
+ const tools = (0, common_1.objectRecord)(record.tools) ?? {};
44
+ return {
45
+ type,
46
+ maxOutputTokens: record.maxOutputTokens ?? record.maxTokens,
47
+ toolNames: Object.keys(tools).sort(),
48
+ providerOptionsPresent: Boolean(record.providerOptions),
49
+ redacted: (0, common_1.redactDataPlane)({ prompt: record.prompt, messages: record.messages }),
50
+ };
51
+ }
52
+ function agentguardMetadata(params) {
53
+ const record = (0, common_1.objectRecord)(params) ?? {};
54
+ const providerOptions = (0, common_1.objectRecord)(record.providerOptions) ?? (0, common_1.objectRecord)(record.providerMetadata) ?? {};
55
+ const metadata = (0, common_1.objectRecord)(providerOptions.agentguard) ?? {};
56
+ return metadata;
57
+ }
58
+ async function wrapAiSdkStreamResult(guard, preflight, result, params) {
59
+ const record = (0, common_1.objectRecord)(result);
60
+ const stream = record?.stream;
61
+ if (!stream || typeof stream.pipeThrough !== 'function') {
62
+ await (0, common_1.settleFrameworkCall)(preflight, result, true);
63
+ await (0, common_1.recordFrameworkReceipt)(guard, 'vercel-ai-sdk', {
64
+ event: 'post_stream',
65
+ decisionId: preflight.decision.decisionId,
66
+ model: preflight.decision.modelResolved,
67
+ requestShape: requestShape(params, 'stream'),
68
+ partial: true,
69
+ });
70
+ return result;
71
+ }
72
+ const TransformStreamCtor = globalThis.TransformStream;
73
+ if (!TransformStreamCtor)
74
+ return result;
75
+ let finalUsage = null;
76
+ const transform = new TransformStreamCtor({
77
+ transform(chunk, controller) {
78
+ const usage = (0, common_1.objectRecord)(chunk)?.usage;
79
+ if (usage)
80
+ finalUsage = { usage };
81
+ controller.enqueue(chunk);
82
+ },
83
+ async flush() {
84
+ await (0, common_1.settleFrameworkCall)(preflight, finalUsage ?? result);
85
+ await (0, common_1.recordFrameworkReceipt)(guard, 'vercel-ai-sdk', {
86
+ event: 'post_stream',
87
+ decisionId: preflight.decision.decisionId,
88
+ model: preflight.decision.modelResolved,
89
+ requestShape: requestShape(params, 'stream'),
90
+ partial: false,
91
+ });
92
+ },
93
+ });
94
+ return { ...record, stream: stream.pipeThrough(transform) };
95
+ }
96
+ //# sourceMappingURL=vercel-ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai.js","sourceRoot":"","sources":["../../src/frameworks/vercel-ai.ts"],"names":[],"mappings":";;;AAcA,8DAwBC;AArCD,qCAA6N;AAa7N,SAAgB,yBAAyB,CAAC,IAA4B;IACpE,MAAM,KAAK,GAAG,IAAA,6BAAoB,EAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;IAC5E,OAAO;QACL,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM;QACvC,YAAY,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YACpD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,IAAA,4BAAmB,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAA,+BAAsB,EAAC,KAAK,EAAE,eAAe,EAAE;gBACnD,KAAK,EAAE,eAAe;gBACtB,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU;gBACzC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa;gBACvC,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;gBAC9C,QAAQ,EAAE,OAAO,CAAC,IAAA,qBAAY,EAAC,MAAM,CAAC,EAAE,KAAK,CAAC;aAC/C,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YAChD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;YAChC,OAAO,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC;AAEY,QAAA,UAAU,GAAG,yBAAyB,CAAC;AAEpD,KAAK,UAAU,cAAc,CAC3B,KAAiB,EACjB,IAA4B,EAC5B,MAAe,EACf,KAAc,EACd,IAA2B;IAE3B,OAAO,IAAA,+BAAsB,EAAC,KAAK,EAAE,IAAI,EAAE;QACzC,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,IAAA,yBAAgB,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;QAC9D,MAAM;QACN,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC;QACpC,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;KACzC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAe,EAAE,IAA2B;IAChE,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO;QACL,IAAI;QACJ,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,SAAS;QAC3D,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;QACpC,sBAAsB,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;QACvD,QAAQ,EAAE,IAAA,wBAAe,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAe;IACzC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,eAAe,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAA,qBAAY,EAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC5G,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAAiB,EACjB,SAA6B,EAC7B,MAAe,EACf,MAAe;IAEf,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,MAAM,IAAI,OAAQ,MAAoC,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACvF,MAAM,IAAA,4BAAmB,EAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,IAAA,+BAAsB,EAAC,KAAK,EAAE,eAAe,EAAE;YACnD,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU;YACzC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa;YACvC,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC5C,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,mBAAmB,GAAI,UAAkG,CAAC,eAAe,CAAC;IAChJ,IAAI,CAAC,mBAAmB;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,UAAU,GAAY,IAAI,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC;QACxC,SAAS,CAAC,KAAc,EAAE,UAAiD;YACzE,MAAM,KAAK,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YACzC,IAAI,KAAK;gBAAE,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC;YAClC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,IAAA,4BAAmB,EAAC,SAAS,EAAE,UAAU,IAAI,MAAM,CAAC,CAAC;YAC3D,MAAM,IAAA,+BAAsB,EAAC,KAAK,EAAE,eAAe,EAAE;gBACnD,KAAK,EAAE,aAAa;gBACpB,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU;gBACzC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa;gBACvC,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAC5C,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAG,MAA2D,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;AACpH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -33,7 +33,7 @@ export { withSpendGuardAnthropic, type AnthropicBindingOptions } from './binding
33
33
  export { withSpendGuardBedrock, type BedrockBindingOptions } from './bindings/bedrock';
34
34
  export { recommend, defaultKey, type ModelRouteRecommendation, type RecommendOptions } from './router';
35
35
  export { DEFAULT_LOCALE, SUPPORTED_LOCALES, TRANSLATIONS, type SupportedLocale, resolveLocale, t, formatBlockedTrace, type BlockedTraceArgs, } from './i18n';
36
- export declare const AGENTGUARD_SPEND_VERSION = "0.13.0";
36
+ export declare const AGENTGUARD_SPEND_VERSION = "0.13.2";
37
37
  export declare const agentguard: {
38
38
  workflow: typeof runWorkflow;
39
39
  };
@@ -43,4 +43,5 @@ export * from './outcomes';
43
43
  export * from './verticals';
44
44
  export * from './governance';
45
45
  export * from './byo';
46
+ export * from './frameworks';
46
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -161,7 +161,7 @@ Object.defineProperty(exports, "TRANSLATIONS", { enumerable: true, get: function
161
161
  Object.defineProperty(exports, "resolveLocale", { enumerable: true, get: function () { return i18n_1.resolveLocale; } });
162
162
  Object.defineProperty(exports, "t", { enumerable: true, get: function () { return i18n_1.t; } });
163
163
  Object.defineProperty(exports, "formatBlockedTrace", { enumerable: true, get: function () { return i18n_1.formatBlockedTrace; } });
164
- exports.AGENTGUARD_SPEND_VERSION = '0.13.0';
164
+ exports.AGENTGUARD_SPEND_VERSION = '0.13.2';
165
165
  exports.agentguard = {
166
166
  workflow: context_1.workflow,
167
167
  };
@@ -174,4 +174,5 @@ __exportStar(require("./outcomes"), exports);
174
174
  __exportStar(require("./verticals"), exports);
175
175
  __exportStar(require("./governance"), exports);
176
176
  __exportStar(require("./byo"), exports);
177
+ __exportStar(require("./frameworks"), exports);
177
178
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/telemetry.js CHANGED
@@ -43,7 +43,7 @@ const https = __importStar(require("https"));
43
43
  const os = __importStar(require("os"));
44
44
  const path = __importStar(require("path"));
45
45
  const crypto_1 = require("crypto");
46
- const AGENTGUARD_SPEND_VERSION = '0.13.0';
46
+ const AGENTGUARD_SPEND_VERSION = '0.13.1';
47
47
  const STATE_DIR = path.join(os.homedir(), '.agentguard');
48
48
  const INSTALL_PATH = path.join(STATE_DIR, 'install.json');
49
49
  const BEACON_URL = 'https://agentguard.run/api/beacon';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentguard-run/spend",
3
- "version": "0.13.0",
3
+ "version": "0.13.2",
4
4
  "description": "All terminology and labels used in AgentGuard materials are descriptive of software functionality only, not legal definitions or guarantees of compliance. Terms like receipt, audit log, evidence, audit trail, and attestation refer solely to cryptographically-signed records produced by the software. Full functional-use disclaimer in README.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -79,6 +79,31 @@
79
79
  "types": "./dist/receipts/dag.d.ts",
80
80
  "require": "./dist/receipts/dag.js",
81
81
  "default": "./dist/receipts/dag.js"
82
+ },
83
+ "./frameworks": {
84
+ "types": "./dist/frameworks/index.d.ts",
85
+ "require": "./dist/frameworks/index.js",
86
+ "default": "./dist/frameworks/index.js"
87
+ },
88
+ "./frameworks/vercel-ai": {
89
+ "types": "./dist/frameworks/vercel-ai.d.ts",
90
+ "require": "./dist/frameworks/vercel-ai.js",
91
+ "default": "./dist/frameworks/vercel-ai.js"
92
+ },
93
+ "./frameworks/claude-code": {
94
+ "types": "./dist/frameworks/claude-code.d.ts",
95
+ "require": "./dist/frameworks/claude-code.js",
96
+ "default": "./dist/frameworks/claude-code.js"
97
+ },
98
+ "./frameworks/hermes": {
99
+ "types": "./dist/frameworks/hermes.d.ts",
100
+ "require": "./dist/frameworks/hermes.js",
101
+ "default": "./dist/frameworks/hermes.js"
102
+ },
103
+ "./frameworks/openrouter": {
104
+ "types": "./dist/frameworks/openrouter.d.ts",
105
+ "require": "./dist/frameworks/openrouter.js",
106
+ "default": "./dist/frameworks/openrouter.js"
82
107
  }
83
108
  },
84
109
  "bin": {
@@ -111,7 +136,8 @@
111
136
  "src/governance.ts",
112
137
  "src/byo",
113
138
  "src/cli/byo.ts",
114
- "docs/patents/CLAIM_MAPPING.md"
139
+ "docs/patents/CLAIM_MAPPING.md",
140
+ "src/frameworks"
115
141
  ],
116
142
  "scripts": {
117
143
  "build": "tsc",
@@ -159,7 +185,8 @@
159
185
  "@langchain/core": ">=0.3.0",
160
186
  "ioredis": ">=5.0.0",
161
187
  "openai": ">=5.0.0",
162
- "pg": ">=8.10.0"
188
+ "pg": ">=8.10.0",
189
+ "ai": ">=6.0.0"
163
190
  },
164
191
  "peerDependenciesMeta": {
165
192
  "openai": {
@@ -182,6 +209,9 @@
182
209
  },
183
210
  "@langchain/core": {
184
211
  "optional": true
212
+ },
213
+ "ai": {
214
+ "optional": true
185
215
  }
186
216
  },
187
217
  "devDependencies": {
@@ -0,0 +1,44 @@
1
+ # AgentGuard framework adapters
2
+
3
+ Thin adapters translate framework hook and middleware events into the shared AgentGuard Spend core. They do not proxy prompts, completions, provider keys, or signing keys.
4
+
5
+ ## Vercel AI SDK
6
+
7
+ ```ts
8
+ import { wrapLanguageModel } from 'ai';
9
+ import { agentguardAiSdkMiddleware } from '@agentguard-run/spend/frameworks/vercel-ai';
10
+
11
+ const governed = wrapLanguageModel({
12
+ model,
13
+ middleware: agentguardAiSdkMiddleware({ policy, scope }),
14
+ });
15
+ ```
16
+
17
+ ## Claude Code hooks
18
+
19
+ ```ts
20
+ import { createClaudeCodeHooks } from '@agentguard-run/spend/frameworks/claude-code';
21
+
22
+ const hooks = createClaudeCodeHooks({ policy, scope });
23
+ await hooks.handleHookInput(JSON.parse(process.env.CLAUDE_HOOK_INPUT || '{}'));
24
+ ```
25
+
26
+ ## Hermes
27
+
28
+ ```ts
29
+ import { createHermesPlugin } from '@agentguard-run/spend/frameworks/hermes';
30
+
31
+ export default createHermesPlugin({ policy, scope });
32
+ ```
33
+
34
+ ## OpenRouter
35
+
36
+ ```ts
37
+ import OpenAI from 'openai';
38
+ import { withSpendGuardOpenRouter } from '@agentguard-run/spend/frameworks/openrouter';
39
+
40
+ const client = withSpendGuardOpenRouter(new OpenAI({
41
+ baseURL: 'https://openrouter.ai/api/v1',
42
+ apiKey: process.env.OPENROUTER_API_KEY,
43
+ }), { policy, scope });
44
+ ```
@@ -0,0 +1,108 @@
1
+ import type { SpendGuard } from '../spend-guard';
2
+ import { createFrameworkGuard, recordFrameworkReceipt, redactDataPlane, safeRequestShape, stringValue, type FrameworkAdapterOptions } from './common';
3
+
4
+ export interface ClaudeCodeHookInput {
5
+ session_id?: string;
6
+ transcript_path?: string;
7
+ cwd?: string;
8
+ hook_event_name?: string;
9
+ tool_name?: string;
10
+ tool_input?: Record<string, unknown>;
11
+ tool_response?: Record<string, unknown>;
12
+ }
13
+
14
+ export interface ClaudeCodeHookOutput {
15
+ continue?: boolean;
16
+ suppressOutput?: boolean;
17
+ systemMessage?: string;
18
+ hookSpecificOutput?: {
19
+ hookEventName: 'PreToolUse' | 'PostToolUse';
20
+ permissionDecision?: 'allow' | 'deny' | 'ask';
21
+ permissionDecisionReason?: string;
22
+ additionalContext?: string;
23
+ };
24
+ }
25
+
26
+ export interface ClaudeCodeHooks {
27
+ guard: SpendGuard;
28
+ handlePreToolUse(input: ClaudeCodeHookInput): Promise<ClaudeCodeHookOutput>;
29
+ handlePostToolUse(input: ClaudeCodeHookInput): Promise<ClaudeCodeHookOutput>;
30
+ handleHookInput(input: ClaudeCodeHookInput): Promise<ClaudeCodeHookOutput>;
31
+ settingsSnippet(command: string): Record<string, unknown>;
32
+ }
33
+
34
+ export function createClaudeCodeHooks(opts: FrameworkAdapterOptions): ClaudeCodeHooks {
35
+ const guard = createFrameworkGuard({ ...opts, framework: 'claude-code' });
36
+ return {
37
+ guard,
38
+ handlePreToolUse: (input) => handlePreToolUse(guard, opts, input),
39
+ handlePostToolUse: (input) => handlePostToolUse(guard, input),
40
+ handleHookInput: async (input) => {
41
+ if (input.hook_event_name === 'PostToolUse') return handlePostToolUse(guard, input);
42
+ return handlePreToolUse(guard, opts, input);
43
+ },
44
+ settingsSnippet: (command) => ({
45
+ hooks: {
46
+ PreToolUse: [{ matcher: '*', hooks: [{ type: 'command', command }] }],
47
+ PostToolUse: [{ matcher: '*', hooks: [{ type: 'command', command }] }],
48
+ },
49
+ }),
50
+ };
51
+ }
52
+
53
+ export const createAgentGuardClaudeCodeHooks = createClaudeCodeHooks;
54
+
55
+ async function handlePreToolUse(
56
+ guard: SpendGuard,
57
+ opts: FrameworkAdapterOptions,
58
+ input: ClaudeCodeHookInput,
59
+ ): Promise<ClaudeCodeHookOutput> {
60
+ const toolName = stringValue(input.tool_name) ?? 'unknown_tool';
61
+ const cleanArgs = redactDataPlane(input.tool_input ?? {}) as Record<string, unknown>;
62
+ try {
63
+ const gate = await guard.guardToolCall({
64
+ toolName,
65
+ toolArgs: safeRequestShape(cleanArgs),
66
+ workflowId: input.session_id,
67
+ scope: opts.scope,
68
+ });
69
+ if (!gate.approved) {
70
+ return deny('AgentGuard blocked tool call: ' + gate.decision.reasons.join('; '));
71
+ }
72
+ if (gate.matchedPattern) {
73
+ return {
74
+ hookSpecificOutput: {
75
+ hookEventName: 'PreToolUse',
76
+ permissionDecision: 'ask',
77
+ permissionDecisionReason: 'AgentGuard matched ' + gate.matchedPattern + '. Confirm before tool execution.',
78
+ },
79
+ };
80
+ }
81
+ return { continue: true, suppressOutput: true };
82
+ } catch (error) {
83
+ return deny(error instanceof Error ? error.message : 'AgentGuard hook failed closed');
84
+ }
85
+ }
86
+
87
+ async function handlePostToolUse(guard: SpendGuard, input: ClaudeCodeHookInput): Promise<ClaudeCodeHookOutput> {
88
+ await recordFrameworkReceipt(guard, 'claude-code', {
89
+ event: 'PostToolUse',
90
+ sessionId: input.session_id ?? null,
91
+ toolName: input.tool_name ?? 'unknown_tool',
92
+ cwd: input.cwd ?? null,
93
+ toolInput: redactDataPlane(input.tool_input ?? {}),
94
+ toolResponse: redactDataPlane(input.tool_response ?? {}),
95
+ });
96
+ return { continue: true, suppressOutput: true };
97
+ }
98
+
99
+ function deny(reason: string): ClaudeCodeHookOutput {
100
+ return {
101
+ continue: true,
102
+ hookSpecificOutput: {
103
+ hookEventName: 'PreToolUse',
104
+ permissionDecision: 'deny',
105
+ permissionDecisionReason: reason,
106
+ },
107
+ };
108
+ }