@nodetool-ai/llm-nodes 0.8.1

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 (71) hide show
  1. package/README.md +52 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/index.d.ts +18 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +22 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/nodes/agent-control-tools.d.ts +22 -0
  8. package/dist/nodes/agent-control-tools.d.ts.map +1 -0
  9. package/dist/nodes/agent-control-tools.js +123 -0
  10. package/dist/nodes/agent-control-tools.js.map +1 -0
  11. package/dist/nodes/agent-loop.d.ts +73 -0
  12. package/dist/nodes/agent-loop.d.ts.map +1 -0
  13. package/dist/nodes/agent-loop.js +168 -0
  14. package/dist/nodes/agent-loop.js.map +1 -0
  15. package/dist/nodes/agent-recommended-models.d.ts +152 -0
  16. package/dist/nodes/agent-recommended-models.d.ts.map +1 -0
  17. package/dist/nodes/agent-recommended-models.js +656 -0
  18. package/dist/nodes/agent-recommended-models.js.map +1 -0
  19. package/dist/nodes/agent-thinking.d.ts +29 -0
  20. package/dist/nodes/agent-thinking.d.ts.map +1 -0
  21. package/dist/nodes/agent-thinking.js +139 -0
  22. package/dist/nodes/agent-thinking.js.map +1 -0
  23. package/dist/nodes/agent-threads.d.ts +17 -0
  24. package/dist/nodes/agent-threads.d.ts.map +1 -0
  25. package/dist/nodes/agent-threads.js +93 -0
  26. package/dist/nodes/agent-threads.js.map +1 -0
  27. package/dist/nodes/agent-tool-hydration.d.ts +50 -0
  28. package/dist/nodes/agent-tool-hydration.d.ts.map +1 -0
  29. package/dist/nodes/agent-tool-hydration.js +106 -0
  30. package/dist/nodes/agent-tool-hydration.js.map +1 -0
  31. package/dist/nodes/agent-utils.d.ts +174 -0
  32. package/dist/nodes/agent-utils.d.ts.map +1 -0
  33. package/dist/nodes/agent-utils.js +553 -0
  34. package/dist/nodes/agent-utils.js.map +1 -0
  35. package/dist/nodes/agents.d.ts +402 -0
  36. package/dist/nodes/agents.d.ts.map +1 -0
  37. package/dist/nodes/agents.js +1491 -0
  38. package/dist/nodes/agents.js.map +1 -0
  39. package/dist/nodes/director.d.ts +126 -0
  40. package/dist/nodes/director.d.ts.map +1 -0
  41. package/dist/nodes/director.js +337 -0
  42. package/dist/nodes/director.js.map +1 -0
  43. package/dist/nodes/gemini.d.ts +171 -0
  44. package/dist/nodes/gemini.d.ts.map +1 -0
  45. package/dist/nodes/gemini.js +985 -0
  46. package/dist/nodes/gemini.js.map +1 -0
  47. package/dist/nodes/generators.d.ts +162 -0
  48. package/dist/nodes/generators.d.ts.map +1 -0
  49. package/dist/nodes/generators.js +966 -0
  50. package/dist/nodes/generators.js.map +1 -0
  51. package/dist/nodes/mistral.d.ts +109 -0
  52. package/dist/nodes/mistral.d.ts.map +1 -0
  53. package/dist/nodes/mistral.js +447 -0
  54. package/dist/nodes/mistral.js.map +1 -0
  55. package/dist/nodes/openai.d.ts +292 -0
  56. package/dist/nodes/openai.d.ts.map +1 -0
  57. package/dist/nodes/openai.js +1806 -0
  58. package/dist/nodes/openai.js.map +1 -0
  59. package/dist/nodes/provider-spend.d.ts +45 -0
  60. package/dist/nodes/provider-spend.d.ts.map +1 -0
  61. package/dist/nodes/provider-spend.js +69 -0
  62. package/dist/nodes/provider-spend.js.map +1 -0
  63. package/dist/nodes/shots.d.ts +108 -0
  64. package/dist/nodes/shots.d.ts.map +1 -0
  65. package/dist/nodes/shots.js +378 -0
  66. package/dist/nodes/shots.js.map +1 -0
  67. package/dist/nodes/xai.d.ts +99 -0
  68. package/dist/nodes/xai.d.ts.map +1 -0
  69. package/dist/nodes/xai.js +360 -0
  70. package/dist/nodes/xai.js.map +1 -0
  71. package/package.json +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-utils.d.ts","sourceRoot":"","sources":["../../src/nodes/agent-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,553 @@
1
+ import { gateTools, Tool, TOOL_CALL_ID_FIELD } from "@nodetool-ai/agents";
2
+ import { expandAssetReferences, extractJson, generateStructured, isProviderStop, isToolCall } from "@nodetool-ai/runtime";
3
+ import { isChunk } from "@nodetool-ai/protocol";
4
+ import { hydrateBuiltinAgentTool } from "./agent-tool-hydration.js";
5
+ import { isBoolean, isCallable, isNonEmptyString, isNumber, isObjectLike, isRecord, isString } from "@nodetool-ai/node-sdk";
6
+ // The structured-output call and its JSON fallback live in
7
+ // `@nodetool-ai/runtime` — one implementation for the nodes, the agents, and
8
+ // the server's `generate_text` RPC. Re-exported: this module is their import
9
+ // site.
10
+ export { extractJson, generateStructured };
11
+ export function asText(value) {
12
+ if (isString(value))
13
+ return value;
14
+ if (isNumber(value) || isBoolean(value))
15
+ return String(value);
16
+ if (!value)
17
+ return "";
18
+ if (Array.isArray(value))
19
+ return value.map(asText).join(" ");
20
+ if (isObjectLike(value)) {
21
+ const msg = value;
22
+ if (isString(msg.content))
23
+ return msg.content;
24
+ if (Array.isArray(msg.content)) {
25
+ return msg.content
26
+ .map((part) => (part && part.type === "text" ? (part.text ?? "") : ""))
27
+ .join(" ")
28
+ .trim();
29
+ }
30
+ return JSON.stringify(value);
31
+ }
32
+ return "";
33
+ }
34
+ export function makeThreadId() {
35
+ return `thread_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
36
+ }
37
+ export function getCategories(value) {
38
+ if (!Array.isArray(value))
39
+ return [];
40
+ return value.map((v) => String(v)).filter((v) => v.trim().length > 0);
41
+ }
42
+ export function getModelConfig(props) {
43
+ const model = (props.model ?? {});
44
+ return {
45
+ providerId: model.provider ?? "",
46
+ modelId: model.id ?? ""
47
+ };
48
+ }
49
+ /**
50
+ * Whether this context can hand out a provider. False for the bare context a
51
+ * hermetic single-node run supplies, which carries no provider access.
52
+ */
53
+ export function hasProviderAccess(context) {
54
+ return !!context && typeof context.getProvider === "function";
55
+ }
56
+ export function hasProviderSupport(context, providerId, modelId) {
57
+ return hasProviderAccess(context) && !!providerId && !!modelId;
58
+ }
59
+ export function normalizeProviderStreamItem(item) {
60
+ if (!isObjectLike(item) ||
61
+ !("type" in item) ||
62
+ item.type !== "chunk") {
63
+ return item;
64
+ }
65
+ const chunk = item;
66
+ if (isNonEmptyString(chunk.content_type)) {
67
+ return chunk;
68
+ }
69
+ return {
70
+ ...chunk,
71
+ content_type: "text"
72
+ };
73
+ }
74
+ /**
75
+ * Render a tool-call streaming item as a Chunk so callers see tool dispatches
76
+ * inline with the assistant's text/thinking stream. The structured payload
77
+ * lives in `content_metadata`; `content` is a human-readable summary.
78
+ */
79
+ export function toolCallChunk(toolCall) {
80
+ const argsJson = (() => {
81
+ try {
82
+ return JSON.stringify(toolCall.args ?? {});
83
+ }
84
+ catch {
85
+ return "{}";
86
+ }
87
+ })();
88
+ return {
89
+ type: "chunk",
90
+ content: `${toolCall.name}(${argsJson})`,
91
+ content_type: "tool_call",
92
+ content_metadata: {
93
+ tool_call_id: toolCall.id,
94
+ tool_name: toolCall.name,
95
+ args: toolCall.args ?? {}
96
+ },
97
+ done: false
98
+ };
99
+ }
100
+ export async function* streamProviderMessages(provider, args) {
101
+ const request = {
102
+ ...args,
103
+ messages: [...args.messages],
104
+ tools: args.tools ? [...args.tools] : undefined
105
+ };
106
+ if (isCallable(provider.generateMessagesTraced)) {
107
+ for await (const item of provider.generateMessagesTraced(request)) {
108
+ yield normalizeProviderStreamItem(item);
109
+ }
110
+ return;
111
+ }
112
+ if (isCallable(provider.generateMessages)) {
113
+ for await (const item of provider.generateMessages(request)) {
114
+ yield normalizeProviderStreamItem(item);
115
+ }
116
+ return;
117
+ }
118
+ const result = await provider.generateMessage(request);
119
+ const content = messageContentText(result.content);
120
+ if (content || (result.toolCalls?.length ?? 0) === 0) {
121
+ yield {
122
+ type: "chunk",
123
+ content,
124
+ content_type: "text",
125
+ done: true
126
+ };
127
+ }
128
+ for (const toolCall of result.toolCalls ?? []) {
129
+ yield toolCall;
130
+ }
131
+ }
132
+ /**
133
+ * Map a model's raw classification output to one of the allowed categories.
134
+ * Tries the parsed JSON `category` field (case-insensitive exact match) first,
135
+ * then a substring-containment scan of the raw text. Throws if neither matches
136
+ * — never invents an answer by defaulting to the first category.
137
+ */
138
+ export function parseCategory(raw, categories) {
139
+ const parsed = extractJson(raw);
140
+ const category = parsed?.category;
141
+ const categoryValue = isString(category) ? category : "";
142
+ for (const category of categories) {
143
+ if (categoryValue.trim().toLowerCase() === category.trim().toLowerCase()) {
144
+ return category;
145
+ }
146
+ }
147
+ const lowered = raw.toLowerCase();
148
+ for (const category of categories) {
149
+ if (category.toLowerCase() && lowered.includes(category.toLowerCase())) {
150
+ return category;
151
+ }
152
+ }
153
+ const preview = raw.length > 200 ? `${raw.slice(0, 200)}…` : raw;
154
+ throw new Error(`Classifier could not map the model output to an allowed category. ` +
155
+ `Model output: ${JSON.stringify(preview)}. ` +
156
+ `Allowed categories: ${categories.join(", ")}.`);
157
+ }
158
+ export function messageContentText(content) {
159
+ if (isString(content))
160
+ return content;
161
+ if (!Array.isArray(content))
162
+ return asText(content);
163
+ return content
164
+ .map((part) => {
165
+ if (!isObjectLike(part))
166
+ return asText(part);
167
+ if (part.type === "text") {
168
+ return String(part.text ?? "");
169
+ }
170
+ return "";
171
+ })
172
+ .join("")
173
+ .trim();
174
+ }
175
+ export function normalizeRole(role) {
176
+ if (role === "system" ||
177
+ role === "user" ||
178
+ role === "assistant" ||
179
+ role === "tool") {
180
+ return role;
181
+ }
182
+ return null;
183
+ }
184
+ export function normalizeBinaryRef(value) {
185
+ if (!isObjectLike(value))
186
+ return null;
187
+ const record = value;
188
+ const out = {};
189
+ if (isNonEmptyString(record.uri))
190
+ out.uri = record.uri;
191
+ if (record.data instanceof Uint8Array || isString(record.data))
192
+ out.data = record.data;
193
+ if (isNonEmptyString(record.mimeType))
194
+ out.mimeType = record.mimeType;
195
+ if (isNonEmptyString(record.mime_type))
196
+ out.mimeType = record.mime_type;
197
+ // A library-picked or freshly-generated ref carries only `asset_id` (with an
198
+ // empty `uri`). Encode it as an `asset://<id>` URI so `buildUserMessage` keeps
199
+ // the image/audio part and `ProcessingContext.resolveMessageMediaUris`
200
+ // dereferences it to bytes before the provider call.
201
+ if (!out.uri && !out.data) {
202
+ const assetId = record.asset_id;
203
+ if (isNonEmptyString(assetId)) {
204
+ out.uri = `asset://${assetId}`;
205
+ }
206
+ }
207
+ return out.uri || out.data ? out : null;
208
+ }
209
+ export function normalizeMessageContent(value) {
210
+ if (value == null || isString(value))
211
+ return value ?? null;
212
+ if (!Array.isArray(value))
213
+ return asText(value);
214
+ const parts = [];
215
+ for (const part of value) {
216
+ if (!isObjectLike(part)) {
217
+ const text = asText(part);
218
+ if (text)
219
+ parts.push({ type: "text", text });
220
+ continue;
221
+ }
222
+ const record = part;
223
+ const kind = isString(record.type) ? record.type : "";
224
+ if (kind === "text") {
225
+ parts.push({ type: "text", text: asText(record.text ?? "") });
226
+ continue;
227
+ }
228
+ if (kind === "image" || kind === "image_url") {
229
+ const image = normalizeBinaryRef(record.image ?? record.image_url ?? record.imageUrl);
230
+ if (image)
231
+ parts.push({ type: "image_url", image });
232
+ continue;
233
+ }
234
+ if (kind === "audio") {
235
+ const audio = normalizeBinaryRef(record.audio);
236
+ if (audio)
237
+ parts.push({ type: "audio", audio });
238
+ continue;
239
+ }
240
+ const text = asText(part);
241
+ if (text)
242
+ parts.push({ type: "text", text });
243
+ }
244
+ return parts;
245
+ }
246
+ export function normalizeToolCalls(value) {
247
+ if (!Array.isArray(value))
248
+ return null;
249
+ const toolCalls = value
250
+ .filter((item) => !!item && typeof item === "object")
251
+ .map((item, index) => {
252
+ const call = {
253
+ id: isNonEmptyString(item.id) ? item.id : `tool_${index + 1}`,
254
+ name: isString(item.name) ? item.name : "",
255
+ args: isObjectLike(item.args)
256
+ ? item.args
257
+ : {}
258
+ };
259
+ // Gemini 3 rejects a replayed function call whose signature is gone, so
260
+ // it has to survive the round trip through stored history.
261
+ if (isNonEmptyString(item.thought_signature)) {
262
+ call.thought_signature = item.thought_signature;
263
+ }
264
+ return call;
265
+ })
266
+ .filter((item) => item.name.length > 0);
267
+ return toolCalls.length > 0 ? toolCalls : null;
268
+ }
269
+ export function normalizeMessage(value) {
270
+ if (!isObjectLike(value))
271
+ return null;
272
+ const record = value;
273
+ const role = normalizeRole(record.role);
274
+ if (!role)
275
+ return null;
276
+ return {
277
+ role,
278
+ content: normalizeMessageContent(record.content),
279
+ toolCalls: normalizeToolCalls(record.toolCalls ?? record.tool_calls),
280
+ toolCallId: isString(record.toolCallId)
281
+ ? record.toolCallId
282
+ : isString(record.tool_call_id)
283
+ ? record.tool_call_id
284
+ : null,
285
+ threadId: isString(record.threadId)
286
+ ? record.threadId
287
+ : isString(record.thread_id)
288
+ ? record.thread_id
289
+ : null
290
+ };
291
+ }
292
+ /**
293
+ * Normalize a list-typed media input to an array. Accepts an array (the
294
+ * declared `list[image]`/`list[audio]` shape), a lone ref (defensive, in case
295
+ * coercion didn't run), or null/undefined.
296
+ */
297
+ export function toRefArray(value) {
298
+ if (Array.isArray(value))
299
+ return value;
300
+ if (value === null || value === undefined)
301
+ return [];
302
+ return [value];
303
+ }
304
+ export function buildUserMessage(prompt, images, audios) {
305
+ const content = expandAssetReferences(prompt);
306
+ for (const image of toRefArray(images)) {
307
+ const imageRef = normalizeBinaryRef(image);
308
+ if (imageRef) {
309
+ content.push({ type: "image_url", image: imageRef });
310
+ }
311
+ }
312
+ for (const audio of toRefArray(audios)) {
313
+ const audioRef = normalizeBinaryRef(audio);
314
+ if (audioRef) {
315
+ content.push({ type: "audio", audio: audioRef });
316
+ }
317
+ }
318
+ return { role: "user", content };
319
+ }
320
+ /**
321
+ * A user message that keeps `content` a plain string unless a media ref is
322
+ * actually attached. The Summarizer/Extractor/Classifier nodes declare `image`
323
+ * and `audio` props; wiring them through {@link buildUserMessage} unconditionally
324
+ * would also turn every text-only request into a parts array and run the prompt
325
+ * through `expandAssetReferences`, changing what existing graphs send. This
326
+ * keeps the old string shape whenever no ref resolves.
327
+ */
328
+ export function userMessageWithMedia(text, images, audios) {
329
+ const message = buildUserMessage(text, images, audios);
330
+ const parts = Array.isArray(message.content) ? message.content : [];
331
+ const hasMedia = parts.some((part) => part.type === "image_url" || part.type === "audio");
332
+ return hasMedia ? message : { role: "user", content: text };
333
+ }
334
+ /**
335
+ * Normalize and classify a provider stream into {@link ProviderStreamEvent}s.
336
+ * Mirrors the branch structure both consumers previously inlined: tool-call
337
+ * announcements, thinking chunks, audio chunks, any other content chunk (as
338
+ * `text`, carrying the original chunk so a consumer can inspect content_type),
339
+ * finalized `{ type: "message" }` events split by role, and the loop's `stop`
340
+ * item. The `text` event's `delta` is the chunk's string content ("" for
341
+ * non-string payloads).
342
+ */
343
+ export async function* classifyProviderStream(stream) {
344
+ for await (const raw of stream) {
345
+ const item = normalizeProviderStreamItem(raw);
346
+ if (isProviderStop(item)) {
347
+ yield { kind: "stop", stop: item };
348
+ continue;
349
+ }
350
+ if (isToolCall(item)) {
351
+ yield { kind: "tool_call", toolCall: item };
352
+ continue;
353
+ }
354
+ if (isChunk(item)) {
355
+ if (item.thinking) {
356
+ yield { kind: "thinking", chunk: item };
357
+ continue;
358
+ }
359
+ if (item.content_type === "audio") {
360
+ yield { kind: "audio", chunk: item };
361
+ continue;
362
+ }
363
+ const delta = isString(item.content) ? item.content : "";
364
+ yield { kind: "text", chunk: item, delta };
365
+ continue;
366
+ }
367
+ if (isObjectLike(item) &&
368
+ "type" in item &&
369
+ item.type === "message") {
370
+ const message = item.message;
371
+ if (!message)
372
+ continue;
373
+ yield message.role === "assistant"
374
+ ? { kind: "assistant_message", message }
375
+ : { kind: "tool_message", message };
376
+ }
377
+ }
378
+ }
379
+ /**
380
+ * Resolve selected tool names to executable tools.
381
+ *
382
+ * A tool the caller injected into the context wins over builtin hydration:
383
+ * only the caller can wire MCP, workspace, skill, and security-gated tools,
384
+ * and a builtin stub of the same name would be the weaker of the two.
385
+ */
386
+ export function normalizeTools(value, context) {
387
+ if (!Array.isArray(value))
388
+ return [];
389
+ return value
390
+ .filter((tool) => !!tool &&
391
+ typeof tool === "object" &&
392
+ typeof tool.name === "string")
393
+ .map((tool) => context?.getInjectedTool?.(tool.name) ??
394
+ hydrateBuiltinAgentTool(tool));
395
+ }
396
+ /**
397
+ * A {@link ToolLike} that is not a `Tool`, presented as one.
398
+ *
399
+ * The gate takes `Tool`s: it reads the identity and schema a capability needs
400
+ * and calls `process`. Most of an agent node's tools already are one — the
401
+ * builtin registry hands back instances — but a caller can inject any shape
402
+ * through `context.setInjectedTools`, and a tool that reaches the model
403
+ * ungated because of its shape is the hole A2 exists to close.
404
+ */
405
+ class AdaptedAgentTool extends Tool {
406
+ inner;
407
+ name;
408
+ description;
409
+ /**
410
+ * Always ask for the call id. A `ToolLike` takes it as a third argument to
411
+ * `execute`, which the gate's `Tool` contract has no room for, so it comes
412
+ * through the reserved arg field and is put back below. A tool that nests
413
+ * its own events (`run_subtask`) stamps it on them; losing it un-nests every
414
+ * card the call produces.
415
+ */
416
+ needsToolCallId = true;
417
+ constructor(inner) {
418
+ super();
419
+ this.inner = inner;
420
+ this.name = inner.name;
421
+ this.description = inner.description ?? "";
422
+ }
423
+ get inputSchema() {
424
+ // A ToolLike declares its schema as a bare record; JsonSchema is the same
425
+ // record with the fields a provider reads spelled out.
426
+ return (this.inner.inputSchema ?? {
427
+ type: "object",
428
+ properties: {}
429
+ });
430
+ }
431
+ toProviderTool() {
432
+ // The same two branches `toProviderTools` took before the gate existed, so
433
+ // wrapping a tool does not change what the model is shown.
434
+ return isCallable(this.inner.toProviderTool)
435
+ ? this.inner.toProviderTool()
436
+ : {
437
+ name: this.name,
438
+ description: this.description,
439
+ inputSchema: this.inputSchema
440
+ };
441
+ }
442
+ // HOLDOUT (anti-slop/no-unknown-returns): `Tool.process` answers whatever
443
+ // the wrapped tool answers.
444
+ async process(context, params) {
445
+ const { [TOOL_CALL_ID_FIELD]: toolCallId, ...args } = params;
446
+ // `execute` first, the way the node's own dispatch prefers it: it is where
447
+ // a tool coerces its params before `process` sees them.
448
+ if (isCallable(this.inner.execute)) {
449
+ return this.inner.execute(context, args, isString(toolCallId) ? { toolCallId } : {});
450
+ }
451
+ if (!isCallable(this.inner.process)) {
452
+ return { status: "error", error: `Non-executable tool: ${this.name}` };
453
+ }
454
+ return this.inner.process(context, args);
455
+ }
456
+ }
457
+ /**
458
+ * Wrap an agent node's tools in the run's permission gate.
459
+ *
460
+ * One ladder covers every host (invariant I-1): the node's tools go through
461
+ * the same `decidePermission` a chat turn's belt does, with the gate the host
462
+ * put on the context. Approving `run_node` is then approval to run the node,
463
+ * not to run whatever the node decides to call — its tools used to resolve
464
+ * ungated, so every call inside it ran unasked.
465
+ *
466
+ * A name-stub that never hydrated is left alone: it has nothing to run, and
467
+ * the node's dispatch already answers for it by name.
468
+ */
469
+ export function gateAgentTools(tools, gate) {
470
+ return tools.map((tool) => {
471
+ if (!isCallable(tool.process) && !isCallable(tool.execute))
472
+ return tool;
473
+ const gateable = tool instanceof Tool ? tool : new AdaptedAgentTool(tool);
474
+ // `Tool` satisfies ToolLike structurally except for `process`, which
475
+ // answers `unknown` where ToolLike names the values a result can take —
476
+ // the same crossing `normalizeTools` makes when it hydrates.
477
+ return gateTools([gateable], gate)[0];
478
+ });
479
+ }
480
+ export function uniqueToolName(baseName, existingNames) {
481
+ const used = new Set(existingNames);
482
+ if (!used.has(baseName))
483
+ return baseName;
484
+ let suffix = 2;
485
+ while (used.has(`${baseName}_${suffix}`))
486
+ suffix += 1;
487
+ return `${baseName}_${suffix}`;
488
+ }
489
+ export function toProviderTools(tools) {
490
+ return tools.map((tool) => isCallable(tool.toProviderTool)
491
+ ? tool.toProviderTool()
492
+ : {
493
+ name: tool.name,
494
+ description: tool.description,
495
+ inputSchema: tool.inputSchema
496
+ });
497
+ }
498
+ export function serializeToolResult(value) {
499
+ if (value == null)
500
+ return value;
501
+ if (Array.isArray(value))
502
+ return value.map(serializeToolResult);
503
+ // SAFETY: what is left here is neither null/undefined, an array, nor an
504
+ // object — a primitive, which is already its own JSON rendering.
505
+ if (!isObjectLike(value))
506
+ return value;
507
+ if (value instanceof Uint8Array) {
508
+ return Buffer.from(value).toString("base64");
509
+ }
510
+ const record = value;
511
+ return Object.fromEntries(Object.entries(record).map(([key, item]) => [
512
+ key,
513
+ serializeToolResult(item)
514
+ ]));
515
+ }
516
+ export function getStructuredOutputSchema(node) {
517
+ const outputs = node._dynamic_outputs;
518
+ if (!isRecord(outputs))
519
+ return null;
520
+ const properties = {};
521
+ const required = [];
522
+ for (const [name, spec] of Object.entries(outputs)) {
523
+ required.push(name);
524
+ const value = isRecord(spec) ? spec : {};
525
+ const declared = isString(value.type) ? value.type.toLowerCase() : "str";
526
+ let type = "string";
527
+ if (["int", "integer"].includes(declared))
528
+ type = "integer";
529
+ else if (["float", "number"].includes(declared))
530
+ type = "number";
531
+ else if (["bool", "boolean"].includes(declared))
532
+ type = "boolean";
533
+ else if (["list", "array"].includes(declared))
534
+ type = "array";
535
+ else if (["dict", "object"].includes(declared))
536
+ type = "object";
537
+ properties[name] = { type };
538
+ }
539
+ if (required.length === 0)
540
+ return null;
541
+ return {
542
+ type: "object",
543
+ additionalProperties: false,
544
+ required,
545
+ properties
546
+ };
547
+ }
548
+ export function hasContentType(message, type) {
549
+ return Array.isArray(message?.content)
550
+ ? message.content.some((part) => part.type === type)
551
+ : false;
552
+ }
553
+ //# sourceMappingURL=agent-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-utils.js","sourceRoot":"","sources":["../../src/nodes/agent-utils.ts"],"names":[],"mappings":"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"}