@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.
- package/README.md +52 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/agent-control-tools.d.ts +22 -0
- package/dist/nodes/agent-control-tools.d.ts.map +1 -0
- package/dist/nodes/agent-control-tools.js +123 -0
- package/dist/nodes/agent-control-tools.js.map +1 -0
- package/dist/nodes/agent-loop.d.ts +73 -0
- package/dist/nodes/agent-loop.d.ts.map +1 -0
- package/dist/nodes/agent-loop.js +168 -0
- package/dist/nodes/agent-loop.js.map +1 -0
- package/dist/nodes/agent-recommended-models.d.ts +152 -0
- package/dist/nodes/agent-recommended-models.d.ts.map +1 -0
- package/dist/nodes/agent-recommended-models.js +656 -0
- package/dist/nodes/agent-recommended-models.js.map +1 -0
- package/dist/nodes/agent-thinking.d.ts +29 -0
- package/dist/nodes/agent-thinking.d.ts.map +1 -0
- package/dist/nodes/agent-thinking.js +139 -0
- package/dist/nodes/agent-thinking.js.map +1 -0
- package/dist/nodes/agent-threads.d.ts +17 -0
- package/dist/nodes/agent-threads.d.ts.map +1 -0
- package/dist/nodes/agent-threads.js +93 -0
- package/dist/nodes/agent-threads.js.map +1 -0
- package/dist/nodes/agent-tool-hydration.d.ts +50 -0
- package/dist/nodes/agent-tool-hydration.d.ts.map +1 -0
- package/dist/nodes/agent-tool-hydration.js +106 -0
- package/dist/nodes/agent-tool-hydration.js.map +1 -0
- package/dist/nodes/agent-utils.d.ts +174 -0
- package/dist/nodes/agent-utils.d.ts.map +1 -0
- package/dist/nodes/agent-utils.js +553 -0
- package/dist/nodes/agent-utils.js.map +1 -0
- package/dist/nodes/agents.d.ts +402 -0
- package/dist/nodes/agents.d.ts.map +1 -0
- package/dist/nodes/agents.js +1491 -0
- package/dist/nodes/agents.js.map +1 -0
- package/dist/nodes/director.d.ts +126 -0
- package/dist/nodes/director.d.ts.map +1 -0
- package/dist/nodes/director.js +337 -0
- package/dist/nodes/director.js.map +1 -0
- package/dist/nodes/gemini.d.ts +171 -0
- package/dist/nodes/gemini.d.ts.map +1 -0
- package/dist/nodes/gemini.js +985 -0
- package/dist/nodes/gemini.js.map +1 -0
- package/dist/nodes/generators.d.ts +162 -0
- package/dist/nodes/generators.d.ts.map +1 -0
- package/dist/nodes/generators.js +966 -0
- package/dist/nodes/generators.js.map +1 -0
- package/dist/nodes/mistral.d.ts +109 -0
- package/dist/nodes/mistral.d.ts.map +1 -0
- package/dist/nodes/mistral.js +447 -0
- package/dist/nodes/mistral.js.map +1 -0
- package/dist/nodes/openai.d.ts +292 -0
- package/dist/nodes/openai.d.ts.map +1 -0
- package/dist/nodes/openai.js +1806 -0
- package/dist/nodes/openai.js.map +1 -0
- package/dist/nodes/provider-spend.d.ts +45 -0
- package/dist/nodes/provider-spend.d.ts.map +1 -0
- package/dist/nodes/provider-spend.js +69 -0
- package/dist/nodes/provider-spend.js.map +1 -0
- package/dist/nodes/shots.d.ts +108 -0
- package/dist/nodes/shots.d.ts.map +1 -0
- package/dist/nodes/shots.js +378 -0
- package/dist/nodes/shots.js.map +1 -0
- package/dist/nodes/xai.d.ts +99 -0
- package/dist/nodes/xai.d.ts.map +1 -0
- package/dist/nodes/xai.js +360 -0
- package/dist/nodes/xai.js.map +1 -0
- 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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"}
|