@agentguard-run/spend 0.13.1 → 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 (37) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/frameworks/claude-code.d.ts +32 -0
  3. package/dist/frameworks/claude-code.d.ts.map +1 -0
  4. package/dist/frameworks/claude-code.js +75 -0
  5. package/dist/frameworks/claude-code.js.map +1 -0
  6. package/dist/frameworks/common.d.ts +51 -0
  7. package/dist/frameworks/common.d.ts.map +1 -0
  8. package/dist/frameworks/common.js +168 -0
  9. package/dist/frameworks/common.js.map +1 -0
  10. package/dist/frameworks/hermes.d.ts +34 -0
  11. package/dist/frameworks/hermes.d.ts.map +1 -0
  12. package/dist/frameworks/hermes.js +50 -0
  13. package/dist/frameworks/hermes.js.map +1 -0
  14. package/dist/frameworks/index.d.ts +6 -0
  15. package/dist/frameworks/index.d.ts.map +1 -0
  16. package/dist/frameworks/index.js +22 -0
  17. package/dist/frameworks/index.js.map +1 -0
  18. package/dist/frameworks/openrouter.d.ts +19 -0
  19. package/dist/frameworks/openrouter.d.ts.map +1 -0
  20. package/dist/frameworks/openrouter.js +85 -0
  21. package/dist/frameworks/openrouter.js.map +1 -0
  22. package/dist/frameworks/vercel-ai.d.ts +27 -0
  23. package/dist/frameworks/vercel-ai.d.ts.map +1 -0
  24. package/dist/frameworks/vercel-ai.js +96 -0
  25. package/dist/frameworks/vercel-ai.js.map +1 -0
  26. package/dist/index.d.ts +2 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2 -1
  29. package/dist/index.js.map +1 -1
  30. package/package.json +33 -3
  31. package/src/frameworks/README.md +44 -0
  32. package/src/frameworks/claude-code.ts +108 -0
  33. package/src/frameworks/common.ts +208 -0
  34. package/src/frameworks/hermes.ts +83 -0
  35. package/src/frameworks/index.ts +5 -0
  36. package/src/frameworks/openrouter.ts +90 -0
  37. package/src/frameworks/vercel-ai.ts +118 -0
@@ -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.1";
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.1';
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":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;AAEH,2CAA8E;AAC9E,gDAA6D;AAmB7D,aAAa;AACb,2CAWsB;AAVpB,0GAAA,YAAY,OAAA;AACZ,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,+GAAA,iBAAiB,OAAA;AACjB,wHAAA,0BAA0B,OAAA;AAC1B,kHAAA,oBAAoB,OAAA;AACpB,6GAAA,eAAe,OAAA;AAIjB,gBAAgB;AAChB,mCAAuK;AAA9J,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,iHAAA,uBAAuB,OAAA;AAAE,mHAAA,yBAAyB,OAAA;AAAE,qHAAA,2BAA2B,OAAA;AAAE,qHAAA,2BAA2B,OAAA;AAEpJ,eAAe;AACf,+CAUwB;AATtB,6GAAA,aAAa,OAAA;AACb,yGAAA,SAAS,OAAA;AACT,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AACxB,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,qHAAA,qBAAqB,OAAA;AACrB,wHAAA,wBAAwB,OAAA;AAG1B,wBAAwB;AACxB,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAE3B,mBAAmB;AACnB,qCAWmB;AAVjB,yHAAA,8BAA8B,OAAA;AAC9B,6GAAA,kBAAkB,OAAA;AAClB,qHAAA,0BAA0B,OAAA;AAC1B,mHAAA,wBAAwB,OAAA;AACxB,oHAAA,yBAAyB,OAAA;AACzB,oHAAA,yBAAyB,OAAA;AACzB,gHAAA,qBAAqB,OAAA;AAMvB,qBAAqB;AACrB,yCAOqB;AANnB,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AAItB,qBAAqB;AACrB,2DAS8B;AAR5B,kHAAA,YAAY,OAAA;AACZ,sHAAA,gBAAgB,OAAA;AAChB,8HAAA,wBAAwB,OAAA;AACxB,sHAAA,gBAAgB,OAAA;AAChB,6HAAA,uBAAuB,OAAA;AAMzB,oDAMgC;AAL9B,sHAAA,yBAAyB,OAAA;AACzB,2HAAA,8BAA8B,OAAA;AAC9B,6GAAA,gBAAgB,OAAA;AAoBlB,4CAAuF;AAA9E,yGAAA,eAAe,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAC3D,sCAuBwB;AAtBtB,yGAAA,kBAAkB,OAAA;AAClB,0GAAA,mBAAmB,OAAA;AACnB,6GAAA,sBAAsB,OAAA;AACtB,uGAAA,gBAAgB,OAAA;AAChB,uGAAA,gBAAgB,OAAA;AAChB,qGAAA,cAAc,OAAA;AACd,2GAAA,oBAAoB,OAAA;AACpB,iGAAA,UAAU,OAAA;AACV,yGAAA,kBAAkB,OAAA;AAClB,kGAAA,WAAW,OAAA;AACX,sGAAA,eAAe,OAAA;AACf,uGAAA,gBAAgB,OAAA;AAYlB,sDAAuG;AAA9F,+GAAA,iBAAiB,OAAA;AAC1B,oEAAgK;AAAvJ,sHAAA,iBAAiB,OAAA;AAAE,uHAAA,kBAAkB,OAAA;AAAE,uHAAA,kBAAkB,OAAA;AAAE,iHAAA,YAAY,OAAA;AAAE,oHAAA,eAAe,OAAA;AAAE,yHAAA,oBAAoB,OAAA;AACvH,6CAA+J;AAAtJ,oHAAA,yBAAyB,OAAA;AAAE,yHAAA,8BAA8B,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAE3G,qBAAqB;AACrB,8CAA+D;AAAtD,mGAAA,QAAQ,OAAA;AAAE,0GAAA,eAAe,OAAA;AAClC,8DAAoF;AAA3E,mHAAA,gBAAgB,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAC/C,4CAK2B;AAJzB,kHAAA,wBAAwB,OAAA;AACxB,qHAAA,2BAA2B,OAAA;AAC3B,oHAAA,0BAA0B,OAAA;AAC1B,sHAAA,4BAA4B,OAAA;AAY9B,sBAAsB;AACtB,uDAOgC;AAN9B,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AACpB,sHAAA,sBAAsB,OAAA;AACtB,gHAAA,gBAAgB,OAAA;AAIlB,mDAA2H;AAAlH,iHAAA,mBAAmB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAClD,2CAAwG;AAA/F,oHAAA,0BAA0B,OAAA;AAAE,6GAAA,mBAAmB,OAAA;AAExD,eAAe;AACf,6CAQuB;AAPrB,yGAAA,UAAU,OAAA;AACV,6GAAA,cAAc,OAAA;AACd,qHAAA,sBAAsB,OAAA;AAOxB,kDAA6F;AAApF,oHAAA,uBAAuB,OAAA;AAChC,8CAAuF;AAA9E,gHAAA,qBAAqB,OAAA;AAC9B,mCAAuG;AAA9F,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAE9B,sCAAsC;AACtC,+BASgB;AARd,sGAAA,cAAc,OAAA;AACd,yGAAA,iBAAiB,OAAA;AACjB,oGAAA,YAAY,OAAA;AAEZ,qGAAA,aAAa,OAAA;AACb,yFAAA,CAAC,OAAA;AACD,0GAAA,kBAAkB,OAAA;AAIP,QAAA,wBAAwB,GAAG,QAAQ,CAAC;AAGpC,QAAA,UAAU,GAAG;IACxB,QAAQ,EAAE,kBAAW;CACtB,CAAC;AAEF,2DAA2D;AAC9C,QAAA,aAAa,GACxB,8CAA8C;IAC9C,6DAA6D;IAC7D,sDAAsD,CAAC;AACzD,IAAA,gCAAuB,EAAC,UAAU,CAAC,CAAC;AAEpC,6CAA2B;AAC3B,8CAA4B;AAC5B,+CAA6B;AAC7B,wCAAsB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentguard-run/spend",
3
- "version": "0.13.1",
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
+ }
@@ -0,0 +1,208 @@
1
+ import type { CapabilityTier, CallContext, Provider, SignedDecisionLogEntry, SpendDecision, SpendPolicy, SpendScope } from '../types';
2
+ import { inferProvider } from '../cost-table';
3
+ import { sanitizeMetadata } from '../governance';
4
+ import { AgentGuardBlockedError, SpendGuard, type SpendGuardConfig } from '../spend-guard';
5
+
6
+ export interface FrameworkAdapterOptions {
7
+ policy: SpendPolicy;
8
+ scope: SpendScope;
9
+ capabilityClaim?: CapabilityTier;
10
+ config?: Omit<SpendGuardConfig, 'policy'>;
11
+ licenseKey?: string;
12
+ defaultModel?: string;
13
+ defaultOutputTokens?: number;
14
+ framework?: string;
15
+ }
16
+
17
+ export interface FrameworkPreflight {
18
+ guard: SpendGuard;
19
+ call: CallContext;
20
+ decision: SpendDecision;
21
+ signed: SignedDecisionLogEntry | null;
22
+ }
23
+
24
+ export interface FrameworkCallInput {
25
+ framework: string;
26
+ model?: string;
27
+ provider?: Provider;
28
+ params?: unknown;
29
+ requestShape?: Record<string, unknown>;
30
+ metadata?: Record<string, unknown>;
31
+ workflowId?: string;
32
+ subagentId?: string;
33
+ toolName?: string;
34
+ outputTokens?: number;
35
+ }
36
+
37
+ const DATA_PLANE_KEYS = /^(prompt|completion|content|messages|input|output|text|raw)$/i;
38
+
39
+ export function createFrameworkGuard(opts: FrameworkAdapterOptions): SpendGuard {
40
+ return new SpendGuard({
41
+ policy: opts.policy,
42
+ ...(opts.config ?? {}),
43
+ licenseKey: opts.licenseKey ?? opts.config?.licenseKey,
44
+ });
45
+ }
46
+
47
+ export function safeRequestShape(value: unknown): Record<string, unknown> {
48
+ const redacted = redactDataPlane(value);
49
+ if (redacted && typeof redacted === 'object' && !Array.isArray(redacted)) {
50
+ return sanitizeMetadata(redacted as Record<string, unknown>);
51
+ }
52
+ return { valueType: typeof value };
53
+ }
54
+
55
+ export function redactDataPlane(value: unknown): unknown {
56
+ if (value == null) return value;
57
+ if (Array.isArray(value)) return value.map((child) => redactDataPlane(child));
58
+ if (typeof value !== 'object') return value;
59
+ const out: Record<string, unknown> = {};
60
+ for (const [key, child] of Object.entries(value as Record<string, unknown>)) {
61
+ if (DATA_PLANE_KEYS.test(key)) {
62
+ out[key + '_present'] = child != null;
63
+ out[key + '_type'] = Array.isArray(child) ? 'array' : typeof child;
64
+ if (Array.isArray(child)) out[key + '_items'] = child.length;
65
+ continue;
66
+ }
67
+ out[key] = redactDataPlane(child);
68
+ }
69
+ return out;
70
+ }
71
+
72
+ export function estimateInputTokens(guard: SpendGuard, value: unknown): number {
73
+ const serialized = typeof value === 'string' ? value : stableJson(value ?? {});
74
+ return Math.max(1, guard.estimateTokens(serialized));
75
+ }
76
+
77
+ export function outputTokensFromParams(params: unknown, fallback = 512): number {
78
+ const record = objectRecord(params);
79
+ const value =
80
+ record?.max_tokens ??
81
+ record?.maxTokens ??
82
+ record?.maxOutputTokens ??
83
+ record?.max_completion_tokens ??
84
+ record?.maxCompletionTokens;
85
+ return Number.isSafeInteger(value) && (value as number) >= 0 ? value as number : fallback;
86
+ }
87
+
88
+ export function modelFromUnknown(model: unknown, fallback = 'unknown'): string {
89
+ if (typeof model === 'string' && model.trim()) return model.trim();
90
+ const record = objectRecord(model);
91
+ for (const key of ['modelId', 'model_id', 'id', 'name']) {
92
+ const value = record?.[key];
93
+ if (typeof value === 'string' && value.trim()) return value.trim();
94
+ }
95
+ return fallback;
96
+ }
97
+
98
+ export function providerFromModel(model: string, provider?: Provider): Provider {
99
+ return provider ?? inferProvider(model);
100
+ }
101
+
102
+ export function buildFrameworkCall(
103
+ guard: SpendGuard,
104
+ opts: FrameworkAdapterOptions,
105
+ input: FrameworkCallInput,
106
+ ): CallContext {
107
+ const model = modelFromUnknown(input.model, opts.defaultModel ?? 'unknown');
108
+ const metadata = sanitizeMetadata(redactDataPlane(input.metadata ?? {}) as Record<string, unknown>);
109
+ const requestShape = sanitizeMetadata({
110
+ framework: input.framework,
111
+ ...(input.requestShape ?? safeRequestShape(input.params)),
112
+ });
113
+ return {
114
+ provider: providerFromModel(model, input.provider),
115
+ model,
116
+ inputTokens: estimateInputTokens(guard, input.params),
117
+ outputTokens: input.outputTokens ?? outputTokensFromParams(input.params, opts.defaultOutputTokens ?? 512),
118
+ scope: opts.scope,
119
+ capabilityClaim: opts.capabilityClaim,
120
+ workflowId: input.workflowId ?? stringValue(metadata.workflowId) ?? stringValue(metadata.workflow_id),
121
+ subagentId: input.subagentId ?? stringValue(metadata.subagentId) ?? stringValue(metadata.subagent_id),
122
+ label: stringValue(metadata.label) ?? input.framework,
123
+ toolName: input.toolName,
124
+ requestShape,
125
+ };
126
+ }
127
+
128
+ export async function preflightFrameworkCall(
129
+ guard: SpendGuard,
130
+ opts: FrameworkAdapterOptions,
131
+ input: FrameworkCallInput,
132
+ ): Promise<FrameworkPreflight> {
133
+ const call = buildFrameworkCall(guard, opts, input);
134
+ const { decision, signed } = await guard.decide(call);
135
+ if (decision.action === 'block') {
136
+ throw new AgentGuardBlockedError(decision, opts.scope, opts.config?.locale);
137
+ }
138
+ return { guard, call, decision, signed };
139
+ }
140
+
141
+ export async function settleFrameworkCall(preflight: FrameworkPreflight, result: unknown, partial = false): Promise<void> {
142
+ const usage = usageFromResult(result);
143
+ if (!usage) return;
144
+ await preflight.guard.settleStreamUsage(
145
+ preflight.decision.decisionId,
146
+ usage.inputTokens,
147
+ usage.outputTokens,
148
+ { partial },
149
+ );
150
+ }
151
+
152
+ export async function recordFrameworkReceipt(
153
+ guard: SpendGuard,
154
+ framework: string,
155
+ receipt: Record<string, unknown>,
156
+ ): Promise<{ decision: SpendDecision; signed: SignedDecisionLogEntry | null }> {
157
+ return guard.recordOutcomeReceipt({
158
+ type: 'framework_adapter',
159
+ framework,
160
+ totalCostCents: safeInteger(receipt.totalCostCents),
161
+ ...sanitizeMetadata(redactDataPlane(receipt) as Record<string, unknown>),
162
+ });
163
+ }
164
+
165
+ export function usageFromResult(result: unknown): { inputTokens: number; outputTokens: number } | null {
166
+ const candidates = [
167
+ objectRecord(result)?.usage,
168
+ objectRecord(objectRecord(result)?.response)?.usage,
169
+ objectRecord(objectRecord(result)?.rawResponse)?.usage,
170
+ ];
171
+ for (const candidate of candidates) {
172
+ const usage = objectRecord(candidate);
173
+ if (!usage) continue;
174
+ const input = firstInteger(usage.inputTokens, usage.promptTokens, usage.prompt_tokens, usage.input_tokens);
175
+ const output = firstInteger(usage.outputTokens, usage.completionTokens, usage.completion_tokens, usage.output_tokens);
176
+ if (input !== null && output !== null) return { inputTokens: input, outputTokens: output };
177
+ }
178
+ return null;
179
+ }
180
+
181
+ export function objectRecord(value: unknown): Record<string, unknown> | null {
182
+ return value && typeof value === 'object' && !Array.isArray(value)
183
+ ? value as Record<string, unknown>
184
+ : null;
185
+ }
186
+
187
+ export function stringValue(value: unknown): string | undefined {
188
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
189
+ }
190
+
191
+ function firstInteger(...values: unknown[]): number | null {
192
+ for (const value of values) {
193
+ if (Number.isSafeInteger(value) && (value as number) >= 0) return value as number;
194
+ }
195
+ return null;
196
+ }
197
+
198
+ function safeInteger(value: unknown): number {
199
+ return Number.isSafeInteger(value) && (value as number) >= 0 ? value as number : 0;
200
+ }
201
+
202
+ function stableJson(value: unknown): string {
203
+ try {
204
+ return JSON.stringify(value);
205
+ } catch {
206
+ return String(value);
207
+ }
208
+ }