@belticlabs/agent-risk-sdk 0.5.0 → 0.7.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.
@@ -1,19 +1,9 @@
1
- import { P as PaymentMomentPayload } from '../verdict-DMnbFuS5.js';
2
- import { LanguageModelMiddleware, Tool, ToolSet } from 'ai';
3
- import { S as SessionSource } from '../session-D9E-efc0.js';
1
+ import { LanguageModelMiddleware, ToolSet } from 'ai';
2
+ import { S as Session } from '../session-DAN29XoB.js';
3
+ import '../index-DAVKGJs5.js';
4
4
  import 'zod';
5
5
 
6
- interface PaymentMoments {
7
- requested?: PaymentMomentPayload;
8
- presented?: PaymentMomentPayload;
9
- }
10
- interface WrapToolOptions<I = unknown, O = unknown> {
11
- name?: string;
12
- /** When the tool performs a purchase, map its input/output to the payment moments it produced. */
13
- payment?: (input: I, output: O) => PaymentMoments | null;
14
- }
15
- declare function middleware(source: SessionSource): LanguageModelMiddleware;
16
- declare function wrapTool<T extends Tool>(source: SessionSource, tool: T, opts?: WrapToolOptions): T;
17
- declare function wrapTools<T extends ToolSet>(source: SessionSource, tools: T, opts?: Record<string, WrapToolOptions>): T;
6
+ declare function middleware(session: Session): LanguageModelMiddleware;
7
+ declare function wrapTools<T extends ToolSet>(session: Session, tools: T): T;
18
8
 
19
- export { type PaymentMoments, type WrapToolOptions, middleware, wrapTool, wrapTools };
9
+ export { middleware, wrapTools };
package/dist/ai/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import {
2
- Sessions,
3
2
  recordCall
4
- } from "../chunk-JSE6JQJC.js";
3
+ } from "../chunk-JGVVQUXQ.js";
5
4
  import {
6
5
  toJson,
7
6
  toJsonObject
8
7
  } from "../chunk-FQDHFTVR.js";
9
8
  import {
10
9
  uuidv7
11
- } from "../chunk-X3W2Z5GC.js";
10
+ } from "../chunk-UXXSE643.js";
11
+ import "../chunk-FNU4CRJJ.js";
12
12
 
13
13
  // src/ai/index.ts
14
14
  var PARAM_KEYS = [
@@ -23,16 +23,18 @@ var PARAM_KEYS = [
23
23
  "responseFormat",
24
24
  "stopSequences"
25
25
  ];
26
- function middleware(source) {
26
+ function middleware(session) {
27
27
  return {
28
28
  wrapGenerate: async ({ doGenerate, params, model }) => {
29
- const session = await Sessions.resolve(source);
30
- if (!session) return doGenerate();
29
+ const stream = await session.stream();
30
+ if (!stream) return doGenerate();
31
31
  return recordCall(
32
- session,
33
- "llm_call",
34
- uuidv7(),
35
- { provider: model.provider, modelId: model.modelId, params: pick(params) },
32
+ stream.llmCall({
33
+ callId: uuidv7(),
34
+ provider: model.provider,
35
+ modelId: model.modelId,
36
+ params: pick(params)
37
+ }),
36
38
  doGenerate,
37
39
  (result) => ({
38
40
  content: toJson(result.content),
@@ -43,16 +45,15 @@ function middleware(source) {
43
45
  },
44
46
  // A stream ends when it drains, not when doStream resolves — so its end is emitted at flush.
45
47
  wrapStream: async ({ doStream, params, model }) => {
46
- const session = await Sessions.resolve(source);
47
- if (!session) return doStream();
48
- const callId = uuidv7();
49
- const started = Date.now();
50
- await session.emit("llm_call.start", {
51
- callId,
48
+ const evidence = await session.stream();
49
+ if (!evidence) return doStream();
50
+ const span = evidence.llmCall({
51
+ callId: uuidv7(),
52
52
  provider: model.provider,
53
53
  modelId: model.modelId,
54
54
  params: pick(params)
55
55
  });
56
+ await span.opened;
56
57
  const { stream, ...rest } = await doStream();
57
58
  const parts = [];
58
59
  let finish = {};
@@ -65,12 +66,10 @@ function middleware(source) {
65
66
  controller.enqueue(part);
66
67
  },
67
68
  flush: async () => {
68
- await session.emit("llm_call.end", {
69
- callId,
69
+ await span.end({
70
70
  content: toJson(parts),
71
71
  ...finish.finishReason ? { finishReason: finish.finishReason } : {},
72
- ...finish.usage ? { usage: toJsonObject(finish.usage) } : {},
73
- durationMs: Date.now() - started
72
+ ...finish.usage ? { usage: toJsonObject(finish.usage) } : {}
74
73
  });
75
74
  }
76
75
  });
@@ -78,38 +77,29 @@ function middleware(source) {
78
77
  }
79
78
  };
80
79
  }
81
- function wrapTool(source, tool, opts = {}) {
80
+ function wrapTools(session, tools) {
81
+ const out = {};
82
+ for (const [name, tool] of Object.entries(tools))
83
+ out[name] = wrapTool(session, name, tool);
84
+ return out;
85
+ }
86
+ function wrapTool(session, toolName, tool) {
82
87
  if (!tool.execute) return tool;
83
88
  const original = tool.execute;
84
- const toolName = opts.name ?? tool.name ?? "tool";
85
89
  const execute = async (input, options) => {
86
- const session = await Sessions.resolve(source);
87
- if (!session) return original(input, options);
90
+ const stream = await session.stream();
91
+ if (!stream) return original(input, options);
88
92
  return recordCall(
89
- session,
90
- "tool_call",
91
- options.toolCallId,
92
- { toolName, input: toJson(input), transport: "local" },
93
+ stream.toolCall({ callId: options.toolCallId, toolName, input: toJson(input) }),
93
94
  async () => {
94
95
  const output = await original(input, options);
95
96
  return output && typeof output === "object" && Symbol.asyncIterator in output ? collect(output) : output;
96
97
  },
97
- async (output) => {
98
- const moments = opts.payment?.(input, output) ?? null;
99
- if (moments?.requested) await session.emit("payment.requested", moments.requested);
100
- if (moments?.presented) await session.emit("payment.presented", moments.presented);
101
- return { output: toJson(output) };
102
- }
98
+ (output) => ({ output: toJson(output) })
103
99
  );
104
100
  };
105
101
  return { ...tool, execute };
106
102
  }
107
- function wrapTools(source, tools, opts = {}) {
108
- const out = {};
109
- for (const [name, tool] of Object.entries(tools))
110
- out[name] = wrapTool(source, tool, { name, ...opts[name] });
111
- return out;
112
- }
113
103
  function pick(params) {
114
104
  const out = {};
115
105
  for (const k of PARAM_KEYS) {
@@ -125,6 +115,5 @@ async function collect(it) {
125
115
  }
126
116
  export {
127
117
  middleware,
128
- wrapTool,
129
118
  wrapTools
130
119
  };