@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.
- package/CHANGELOG.md +11 -0
- package/dist/decision-log.d.ts.map +1 -1
- package/dist/decision-log.js +4 -1
- package/dist/decision-log.js.map +1 -1
- package/dist/frameworks/claude-code.d.ts +32 -0
- package/dist/frameworks/claude-code.d.ts.map +1 -0
- package/dist/frameworks/claude-code.js +75 -0
- package/dist/frameworks/claude-code.js.map +1 -0
- package/dist/frameworks/common.d.ts +51 -0
- package/dist/frameworks/common.d.ts.map +1 -0
- package/dist/frameworks/common.js +168 -0
- package/dist/frameworks/common.js.map +1 -0
- package/dist/frameworks/hermes.d.ts +34 -0
- package/dist/frameworks/hermes.d.ts.map +1 -0
- package/dist/frameworks/hermes.js +50 -0
- package/dist/frameworks/hermes.js.map +1 -0
- package/dist/frameworks/index.d.ts +6 -0
- package/dist/frameworks/index.d.ts.map +1 -0
- package/dist/frameworks/index.js +22 -0
- package/dist/frameworks/index.js.map +1 -0
- package/dist/frameworks/openrouter.d.ts +19 -0
- package/dist/frameworks/openrouter.d.ts.map +1 -0
- package/dist/frameworks/openrouter.js +85 -0
- package/dist/frameworks/openrouter.js.map +1 -0
- package/dist/frameworks/vercel-ai.d.ts +27 -0
- package/dist/frameworks/vercel-ai.d.ts.map +1 -0
- package/dist/frameworks/vercel-ai.js +96 -0
- package/dist/frameworks/vercel-ai.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/telemetry.js +1 -1
- package/package.json +33 -3
- package/src/frameworks/README.md +44 -0
- package/src/frameworks/claude-code.ts +108 -0
- package/src/frameworks/common.ts +208 -0
- package/src/frameworks/hermes.ts +83 -0
- package/src/frameworks/index.ts +5 -0
- package/src/frameworks/openrouter.ts +90 -0
- 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":"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"}
|
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.
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
+
}
|