veryfront 0.1.154 → 0.1.155
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/esm/deno.js +1 -1
- package/esm/src/agent/ag-ui-handler.d.ts +6 -0
- package/esm/src/agent/ag-ui-handler.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-handler.js +115 -19
- package/esm/src/observability/error-collector.d.ts +1 -0
- package/esm/src/observability/error-collector.d.ts.map +1 -1
- package/esm/src/observability/error-collector.js +6 -3
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/agent/ag-ui-handler.ts +187 -27
- package/src/src/observability/error-collector.ts +13 -3
- package/src/src/utils/version-constant.ts +1 -1
package/esm/deno.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as dntShim from "../../_dnt.shims.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import type { Agent } from "./types.js";
|
|
4
|
+
import { type RunResumeSessionManager } from "./runtime/index.js";
|
|
4
5
|
declare const AgUiInjectedToolSchema: z.ZodObject<{
|
|
5
6
|
name: z.ZodString;
|
|
6
7
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -65,8 +66,13 @@ export declare const AgUiRequestSchema: z.ZodObject<{
|
|
|
65
66
|
export type AgUiInjectedTool = z.infer<typeof AgUiInjectedToolSchema>;
|
|
66
67
|
export type AgUiContextItem = z.infer<typeof AgUiContextItemSchema>;
|
|
67
68
|
export type AgUiRequest = z.infer<typeof AgUiRequestSchema>;
|
|
69
|
+
type AgUiResumeValue = {
|
|
70
|
+
result: unknown;
|
|
71
|
+
isError: boolean;
|
|
72
|
+
};
|
|
68
73
|
export interface AgUiHandlerOptions {
|
|
69
74
|
context?: Record<string, unknown> | ((request: dntShim.Request) => Record<string, unknown> | Promise<Record<string, unknown>>);
|
|
75
|
+
sessionManager?: RunResumeSessionManager<AgUiResumeValue>;
|
|
70
76
|
}
|
|
71
77
|
export interface AgUiHandlerConfigWithAgent extends AgUiHandlerOptions {
|
|
72
78
|
agent: Agent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ag-ui-handler.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,KAAK,EAAW,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ag-ui-handler.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,KAAK,EAAW,MAAM,YAAY,CAAC;AACjD,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAsC5B,QAAA,MAAM,sBAAsB;;;;iBAO1B,CAAC;AAEH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;2BAqBzB,CAAC;AAYH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,KAAK,eAAe,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AA4Y7D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/F,cAAc,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,KAAK,EAAE,KAAK,CAAC;CACd;AAUD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,0BAA0B,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as dntShim from "../../_dnt.shims.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { getAgent } from "./composition/index.js";
|
|
4
|
+
import { AgentRuntime, RunAlreadyExistsError, } from "./runtime/index.js";
|
|
4
5
|
import { INVALID_ARGUMENT } from "../errors/index.js";
|
|
6
|
+
import { SKILL_TOOL_IDS } from "../skill/types.js";
|
|
7
|
+
import { toolRegistry } from "../tool/index.js";
|
|
5
8
|
import { createStreamTransformState, finalizeRunEvents, formatAgUiEvent, mapRuntimeEventToAgUi, parseSseJsonEvents, } from "../internal-agents/ag-ui-sse.js";
|
|
6
9
|
const AGENT_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
7
10
|
const MAX_TOOL_PARAMETERS_BYTES = 16_384;
|
|
@@ -194,25 +197,15 @@ function enqueueEvent(controller, event, payload) {
|
|
|
194
197
|
return false;
|
|
195
198
|
}
|
|
196
199
|
}
|
|
197
|
-
async function createAgUiStreamResponse(
|
|
198
|
-
const
|
|
199
|
-
const runId = request.runId ?? generateRunId();
|
|
200
|
-
await agent.clearMemory();
|
|
201
|
-
const result = await agent.stream({
|
|
202
|
-
messages: normalizeMessages(request.messages),
|
|
203
|
-
context: buildStreamContext(request, baseContext, threadId, runId),
|
|
204
|
-
...(request.model ? { model: request.model } : {}),
|
|
205
|
-
...(request.maxOutputTokens ? { maxOutputTokens: request.maxOutputTokens } : {}),
|
|
206
|
-
});
|
|
207
|
-
const upstream = result.toDataStreamResponse();
|
|
208
|
-
const upstreamBody = upstream.body;
|
|
200
|
+
async function createAgUiStreamResponse(options) {
|
|
201
|
+
const { agentId, request, runId, threadId, upstreamBody, upstreamStatus, upstreamStatusText, onFinish, onError, } = options;
|
|
209
202
|
const stream = new ReadableStream({
|
|
210
203
|
start: async (controller) => {
|
|
211
204
|
const state = createStreamTransformState();
|
|
212
205
|
let reader = null;
|
|
213
206
|
let remainder = "";
|
|
214
207
|
const decoder = new TextDecoder();
|
|
215
|
-
if (!enqueueEvent(controller, "RunStarted", { runId, threadId, agentId
|
|
208
|
+
if (!enqueueEvent(controller, "RunStarted", { runId, threadId, agentId })) {
|
|
216
209
|
return;
|
|
217
210
|
}
|
|
218
211
|
if (!enqueueEvent(controller, "StateSnapshot", { snapshot: {} })) {
|
|
@@ -228,6 +221,7 @@ async function createAgUiStreamResponse(agent, request, baseContext) {
|
|
|
228
221
|
return;
|
|
229
222
|
}
|
|
230
223
|
}
|
|
224
|
+
onFinish?.();
|
|
231
225
|
closeController(controller);
|
|
232
226
|
return;
|
|
233
227
|
}
|
|
@@ -261,8 +255,10 @@ async function createAgUiStreamResponse(agent, request, baseContext) {
|
|
|
261
255
|
return;
|
|
262
256
|
}
|
|
263
257
|
}
|
|
258
|
+
onFinish?.();
|
|
264
259
|
}
|
|
265
260
|
catch (error) {
|
|
261
|
+
onError?.(error);
|
|
266
262
|
enqueueEvent(controller, "RunError", {
|
|
267
263
|
message: error instanceof Error ? error.message : "Agent run failed",
|
|
268
264
|
});
|
|
@@ -274,11 +270,105 @@ async function createAgUiStreamResponse(agent, request, baseContext) {
|
|
|
274
270
|
},
|
|
275
271
|
});
|
|
276
272
|
return new dntShim.Response(stream, {
|
|
277
|
-
status:
|
|
278
|
-
statusText:
|
|
273
|
+
status: upstreamStatus,
|
|
274
|
+
statusText: upstreamStatusText,
|
|
279
275
|
headers: { ...AG_UI_HEADERS },
|
|
280
276
|
});
|
|
281
277
|
}
|
|
278
|
+
async function createAgUiDirectStreamResponse(agent, request, baseContext) {
|
|
279
|
+
const threadId = request.threadId ?? dntShim.crypto.randomUUID();
|
|
280
|
+
const runId = request.runId ?? generateRunId();
|
|
281
|
+
await agent.clearMemory();
|
|
282
|
+
const result = await agent.stream({
|
|
283
|
+
messages: normalizeMessages(request.messages),
|
|
284
|
+
context: buildStreamContext(request, baseContext, threadId, runId),
|
|
285
|
+
...(request.model ? { model: request.model } : {}),
|
|
286
|
+
...(request.maxOutputTokens ? { maxOutputTokens: request.maxOutputTokens } : {}),
|
|
287
|
+
});
|
|
288
|
+
const upstream = result.toDataStreamResponse();
|
|
289
|
+
return await createAgUiStreamResponse({
|
|
290
|
+
agentId: agent.id,
|
|
291
|
+
request,
|
|
292
|
+
runId,
|
|
293
|
+
threadId,
|
|
294
|
+
upstreamBody: upstream.body,
|
|
295
|
+
upstreamStatus: upstream.status,
|
|
296
|
+
upstreamStatusText: upstream.statusText,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function createInjectedAgUiTool(runId, tool, sessionManager) {
|
|
300
|
+
return {
|
|
301
|
+
id: tool.name,
|
|
302
|
+
type: "function",
|
|
303
|
+
description: tool.description ?? tool.name,
|
|
304
|
+
inputSchema: z.record(z.string(), z.unknown()),
|
|
305
|
+
inputSchemaJson: (tool.parameters ??
|
|
306
|
+
{ type: "object", properties: {}, additionalProperties: true }),
|
|
307
|
+
execute: async (_input, context) => {
|
|
308
|
+
const toolCallId = typeof context?.toolCallId === "string" ? context.toolCallId : null;
|
|
309
|
+
if (!toolCallId) {
|
|
310
|
+
throw new Error(`Missing toolCallId for injected tool "${tool.name}"`);
|
|
311
|
+
}
|
|
312
|
+
const submitted = await sessionManager.waitForSignal(runId, toolCallId);
|
|
313
|
+
if (submitted.isError) {
|
|
314
|
+
throw new Error(typeof submitted.result === "string"
|
|
315
|
+
? submitted.result
|
|
316
|
+
: JSON.stringify(submitted.result));
|
|
317
|
+
}
|
|
318
|
+
return submitted.result;
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
async function createAgUiInjectedToolsStreamResponse(agent, request, baseContext, sessionManager) {
|
|
323
|
+
const threadId = request.threadId ?? dntShim.crypto.randomUUID();
|
|
324
|
+
const runId = request.runId ?? generateRunId();
|
|
325
|
+
try {
|
|
326
|
+
sessionManager.startRun({ runId, threadId });
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
if (error instanceof RunAlreadyExistsError) {
|
|
330
|
+
return dntShim.Response.json({ error: "Run already active" }, { status: 409 });
|
|
331
|
+
}
|
|
332
|
+
throw error;
|
|
333
|
+
}
|
|
334
|
+
const injectedTools = Object.fromEntries(request.tools.map((tool) => [tool.name, createInjectedAgUiTool(runId, tool, sessionManager)]));
|
|
335
|
+
const mergedTools = !agent.config.tools
|
|
336
|
+
? injectedTools
|
|
337
|
+
: agent.config.tools === true
|
|
338
|
+
? {
|
|
339
|
+
...Object.fromEntries([...toolRegistry.getAll()]
|
|
340
|
+
.filter(([toolId]) => agent.config.skills || !SKILL_TOOL_IDS.has(toolId))
|
|
341
|
+
.map(([toolId]) => [toolId, true])),
|
|
342
|
+
...injectedTools,
|
|
343
|
+
}
|
|
344
|
+
: { ...agent.config.tools, ...injectedTools };
|
|
345
|
+
const runtime = new AgentRuntime(agent.id, {
|
|
346
|
+
...agent.config,
|
|
347
|
+
tools: mergedTools,
|
|
348
|
+
});
|
|
349
|
+
let upstreamBody;
|
|
350
|
+
try {
|
|
351
|
+
upstreamBody = await runtime.stream(normalizeMessages(request.messages), buildStreamContext(request, baseContext, threadId, runId), undefined, request.model, request.maxOutputTokens);
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
sessionManager.failRun(runId);
|
|
355
|
+
throw error;
|
|
356
|
+
}
|
|
357
|
+
return await createAgUiStreamResponse({
|
|
358
|
+
agentId: agent.id,
|
|
359
|
+
request,
|
|
360
|
+
runId,
|
|
361
|
+
threadId,
|
|
362
|
+
upstreamBody,
|
|
363
|
+
upstreamStatus: 200,
|
|
364
|
+
onFinish: () => {
|
|
365
|
+
sessionManager.completeRun(runId);
|
|
366
|
+
},
|
|
367
|
+
onError: () => {
|
|
368
|
+
sessionManager.failRun(runId);
|
|
369
|
+
},
|
|
370
|
+
});
|
|
371
|
+
}
|
|
282
372
|
function mergeConfig(config, options) {
|
|
283
373
|
if (!options)
|
|
284
374
|
return config;
|
|
@@ -310,14 +400,20 @@ export function createAgUiHandler(agentIdOrConfig, options) {
|
|
|
310
400
|
try {
|
|
311
401
|
const parsed = AgUiRequestSchema.parse(await request.json());
|
|
312
402
|
if (parsed.tools.length > 0) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
403
|
+
if (!options?.sessionManager) {
|
|
404
|
+
return dntShim.Response.json({
|
|
405
|
+
error: "Injected AG-UI tools require a public RunResumeSessionManager on createAgUiHandler().",
|
|
406
|
+
}, { status: 501 });
|
|
407
|
+
}
|
|
408
|
+
const context = typeof options?.context === "function"
|
|
409
|
+
? await options.context(request)
|
|
410
|
+
: options?.context ?? {};
|
|
411
|
+
return await createAgUiInjectedToolsStreamResponse(agent, parsed, context, options.sessionManager);
|
|
316
412
|
}
|
|
317
413
|
const context = typeof options?.context === "function"
|
|
318
414
|
? await options.context(request)
|
|
319
415
|
: options?.context ?? {};
|
|
320
|
-
return await
|
|
416
|
+
return await createAgUiDirectStreamResponse(agent, parsed, context);
|
|
321
417
|
}
|
|
322
418
|
catch (error) {
|
|
323
419
|
if (error instanceof z.ZodError) {
|
|
@@ -69,6 +69,7 @@ export declare class ErrorCollector {
|
|
|
69
69
|
* @param slug Error slug from registry (optional)
|
|
70
70
|
*/
|
|
71
71
|
addRuntimeError(message: string, stack?: string, context?: Record<string, unknown>, slug?: string): DevError;
|
|
72
|
+
private addFileContextError;
|
|
72
73
|
/**
|
|
73
74
|
* Add a bundle error
|
|
74
75
|
* @param message Error message
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-collector.d.ts","sourceRoot":"","sources":["../../../src/src/observability/error-collector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"error-collector.d.ts","sourceRoot":"","sources":["../../../src/src/observability/error-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,9 @@ export class ErrorCollector {
|
|
|
79
79
|
addRuntimeError(message, stack, context, slug) {
|
|
80
80
|
return this.addTypedError("runtime", message, { stack, context, slug });
|
|
81
81
|
}
|
|
82
|
+
addFileContextError(type, message, file, context, slug) {
|
|
83
|
+
return this.addTypedError(type, message, { file, context, slug });
|
|
84
|
+
}
|
|
82
85
|
/**
|
|
83
86
|
* Add a bundle error
|
|
84
87
|
* @param message Error message
|
|
@@ -87,7 +90,7 @@ export class ErrorCollector {
|
|
|
87
90
|
* @param slug Error slug from registry (optional)
|
|
88
91
|
*/
|
|
89
92
|
addBundleError(message, file, context, slug) {
|
|
90
|
-
return this.
|
|
93
|
+
return this.addFileContextError("bundle", message, file, context, slug);
|
|
91
94
|
}
|
|
92
95
|
/**
|
|
93
96
|
* Add an HMR error
|
|
@@ -97,7 +100,7 @@ export class ErrorCollector {
|
|
|
97
100
|
* @param slug Error slug from registry (optional)
|
|
98
101
|
*/
|
|
99
102
|
addHMRError(message, file, context, slug) {
|
|
100
|
-
return this.
|
|
103
|
+
return this.addFileContextError("hmr", message, file, context, slug);
|
|
101
104
|
}
|
|
102
105
|
/**
|
|
103
106
|
* Add a module error
|
|
@@ -107,7 +110,7 @@ export class ErrorCollector {
|
|
|
107
110
|
* @param slug Error slug from registry (optional)
|
|
108
111
|
*/
|
|
109
112
|
addModuleError(message, file, context, slug) {
|
|
110
|
-
return this.
|
|
113
|
+
return this.addFileContextError("module", message, file, context, slug);
|
|
111
114
|
}
|
|
112
115
|
getAll(filter) {
|
|
113
116
|
const errors = Array.from(this.errors.values());
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.155";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
|
@@ -2,7 +2,14 @@ import * as dntShim from "../../_dnt.shims.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { getAgent } from "./composition/index.js";
|
|
4
4
|
import type { Agent, Message } from "./types.js";
|
|
5
|
+
import {
|
|
6
|
+
AgentRuntime,
|
|
7
|
+
RunAlreadyExistsError,
|
|
8
|
+
type RunResumeSessionManager,
|
|
9
|
+
} from "./runtime/index.js";
|
|
5
10
|
import { INVALID_ARGUMENT } from "../errors/index.js";
|
|
11
|
+
import { SKILL_TOOL_IDS } from "../skill/types.js";
|
|
12
|
+
import { type Tool, toolRegistry } from "../tool/index.js";
|
|
6
13
|
import {
|
|
7
14
|
createStreamTransformState,
|
|
8
15
|
finalizeRunEvents,
|
|
@@ -101,6 +108,7 @@ export type AgUiContextItem = z.infer<typeof AgUiContextItemSchema>;
|
|
|
101
108
|
export type AgUiRequest = z.infer<typeof AgUiRequestSchema>;
|
|
102
109
|
|
|
103
110
|
type AgUiRuntimePart = Record<string, unknown> & { type: string };
|
|
111
|
+
type AgUiResumeValue = { result: unknown; isError: boolean };
|
|
104
112
|
|
|
105
113
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
106
114
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -259,24 +267,29 @@ function enqueueEvent(
|
|
|
259
267
|
}
|
|
260
268
|
|
|
261
269
|
async function createAgUiStreamResponse(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
270
|
+
options: {
|
|
271
|
+
agentId: string;
|
|
272
|
+
request: AgUiRequest;
|
|
273
|
+
runId: string;
|
|
274
|
+
threadId: string;
|
|
275
|
+
upstreamBody: ReadableStream<Uint8Array> | null;
|
|
276
|
+
upstreamStatus: number;
|
|
277
|
+
upstreamStatusText?: string;
|
|
278
|
+
onFinish?: () => void;
|
|
279
|
+
onError?: (error: unknown) => void;
|
|
280
|
+
},
|
|
265
281
|
): Promise<dntShim.Response> {
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
const upstream = result.toDataStreamResponse();
|
|
279
|
-
const upstreamBody = upstream.body;
|
|
282
|
+
const {
|
|
283
|
+
agentId,
|
|
284
|
+
request,
|
|
285
|
+
runId,
|
|
286
|
+
threadId,
|
|
287
|
+
upstreamBody,
|
|
288
|
+
upstreamStatus,
|
|
289
|
+
upstreamStatusText,
|
|
290
|
+
onFinish,
|
|
291
|
+
onError,
|
|
292
|
+
} = options;
|
|
280
293
|
|
|
281
294
|
const stream = new ReadableStream<Uint8Array>({
|
|
282
295
|
start: async (controller) => {
|
|
@@ -285,7 +298,7 @@ async function createAgUiStreamResponse(
|
|
|
285
298
|
let remainder = "";
|
|
286
299
|
const decoder = new TextDecoder();
|
|
287
300
|
|
|
288
|
-
if (!enqueueEvent(controller, "RunStarted", { runId, threadId, agentId
|
|
301
|
+
if (!enqueueEvent(controller, "RunStarted", { runId, threadId, agentId })) {
|
|
289
302
|
return;
|
|
290
303
|
}
|
|
291
304
|
if (!enqueueEvent(controller, "StateSnapshot", { snapshot: {} })) {
|
|
@@ -302,6 +315,7 @@ async function createAgUiStreamResponse(
|
|
|
302
315
|
return;
|
|
303
316
|
}
|
|
304
317
|
}
|
|
318
|
+
onFinish?.();
|
|
305
319
|
closeController(controller);
|
|
306
320
|
return;
|
|
307
321
|
}
|
|
@@ -340,7 +354,9 @@ async function createAgUiStreamResponse(
|
|
|
340
354
|
return;
|
|
341
355
|
}
|
|
342
356
|
}
|
|
357
|
+
onFinish?.();
|
|
343
358
|
} catch (error) {
|
|
359
|
+
onError?.(error);
|
|
344
360
|
enqueueEvent(controller, "RunError", {
|
|
345
361
|
message: error instanceof Error ? error.message : "Agent run failed",
|
|
346
362
|
});
|
|
@@ -352,16 +368,147 @@ async function createAgUiStreamResponse(
|
|
|
352
368
|
});
|
|
353
369
|
|
|
354
370
|
return new dntShim.Response(stream, {
|
|
355
|
-
status:
|
|
356
|
-
statusText:
|
|
371
|
+
status: upstreamStatus,
|
|
372
|
+
statusText: upstreamStatusText,
|
|
357
373
|
headers: { ...AG_UI_HEADERS },
|
|
358
374
|
});
|
|
359
375
|
}
|
|
360
376
|
|
|
377
|
+
async function createAgUiDirectStreamResponse(
|
|
378
|
+
agent: Agent,
|
|
379
|
+
request: AgUiRequest,
|
|
380
|
+
baseContext: Record<string, unknown>,
|
|
381
|
+
): Promise<dntShim.Response> {
|
|
382
|
+
const threadId = request.threadId ?? dntShim.crypto.randomUUID();
|
|
383
|
+
const runId = request.runId ?? generateRunId();
|
|
384
|
+
|
|
385
|
+
await agent.clearMemory();
|
|
386
|
+
|
|
387
|
+
const result = await agent.stream({
|
|
388
|
+
messages: normalizeMessages(request.messages),
|
|
389
|
+
context: buildStreamContext(request, baseContext, threadId, runId),
|
|
390
|
+
...(request.model ? { model: request.model } : {}),
|
|
391
|
+
...(request.maxOutputTokens ? { maxOutputTokens: request.maxOutputTokens } : {}),
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
const upstream = result.toDataStreamResponse();
|
|
395
|
+
return await createAgUiStreamResponse({
|
|
396
|
+
agentId: agent.id,
|
|
397
|
+
request,
|
|
398
|
+
runId,
|
|
399
|
+
threadId,
|
|
400
|
+
upstreamBody: upstream.body,
|
|
401
|
+
upstreamStatus: upstream.status,
|
|
402
|
+
upstreamStatusText: upstream.statusText,
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
function createInjectedAgUiTool(
|
|
407
|
+
runId: string,
|
|
408
|
+
tool: AgUiInjectedTool,
|
|
409
|
+
sessionManager: RunResumeSessionManager<AgUiResumeValue>,
|
|
410
|
+
): Tool {
|
|
411
|
+
return {
|
|
412
|
+
id: tool.name,
|
|
413
|
+
type: "function",
|
|
414
|
+
description: tool.description ?? tool.name,
|
|
415
|
+
inputSchema: z.record(z.string(), z.unknown()),
|
|
416
|
+
inputSchemaJson: (tool.parameters ??
|
|
417
|
+
{ type: "object", properties: {}, additionalProperties: true }) as Tool["inputSchemaJson"],
|
|
418
|
+
execute: async (_input, context) => {
|
|
419
|
+
const toolCallId = typeof context?.toolCallId === "string" ? context.toolCallId : null;
|
|
420
|
+
if (!toolCallId) {
|
|
421
|
+
throw new Error(`Missing toolCallId for injected tool "${tool.name}"`);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const submitted = await sessionManager.waitForSignal(runId, toolCallId);
|
|
425
|
+
if (submitted.isError) {
|
|
426
|
+
throw new Error(
|
|
427
|
+
typeof submitted.result === "string"
|
|
428
|
+
? submitted.result
|
|
429
|
+
: JSON.stringify(submitted.result),
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
return submitted.result;
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
async function createAgUiInjectedToolsStreamResponse(
|
|
438
|
+
agent: Agent,
|
|
439
|
+
request: AgUiRequest,
|
|
440
|
+
baseContext: Record<string, unknown>,
|
|
441
|
+
sessionManager: RunResumeSessionManager<AgUiResumeValue>,
|
|
442
|
+
): Promise<dntShim.Response> {
|
|
443
|
+
const threadId = request.threadId ?? dntShim.crypto.randomUUID();
|
|
444
|
+
const runId = request.runId ?? generateRunId();
|
|
445
|
+
|
|
446
|
+
try {
|
|
447
|
+
sessionManager.startRun({ runId, threadId });
|
|
448
|
+
} catch (error) {
|
|
449
|
+
if (error instanceof RunAlreadyExistsError) {
|
|
450
|
+
return dntShim.Response.json({ error: "Run already active" }, { status: 409 });
|
|
451
|
+
}
|
|
452
|
+
throw error;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
const injectedTools = Object.fromEntries(
|
|
456
|
+
request.tools.map((tool) => [tool.name, createInjectedAgUiTool(runId, tool, sessionManager)]),
|
|
457
|
+
);
|
|
458
|
+
|
|
459
|
+
const mergedTools: Agent["config"]["tools"] = !agent.config.tools
|
|
460
|
+
? injectedTools
|
|
461
|
+
: agent.config.tools === true
|
|
462
|
+
? {
|
|
463
|
+
...Object.fromEntries(
|
|
464
|
+
[...toolRegistry.getAll()]
|
|
465
|
+
.filter(([toolId]) => agent.config.skills || !SKILL_TOOL_IDS.has(toolId))
|
|
466
|
+
.map(([toolId]) => [toolId, true]),
|
|
467
|
+
),
|
|
468
|
+
...injectedTools,
|
|
469
|
+
}
|
|
470
|
+
: { ...agent.config.tools, ...injectedTools };
|
|
471
|
+
|
|
472
|
+
const runtime = new AgentRuntime(agent.id, {
|
|
473
|
+
...agent.config,
|
|
474
|
+
tools: mergedTools,
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
let upstreamBody: ReadableStream<Uint8Array>;
|
|
478
|
+
try {
|
|
479
|
+
upstreamBody = await runtime.stream(
|
|
480
|
+
normalizeMessages(request.messages),
|
|
481
|
+
buildStreamContext(request, baseContext, threadId, runId),
|
|
482
|
+
undefined,
|
|
483
|
+
request.model,
|
|
484
|
+
request.maxOutputTokens,
|
|
485
|
+
);
|
|
486
|
+
} catch (error) {
|
|
487
|
+
sessionManager.failRun(runId);
|
|
488
|
+
throw error;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
return await createAgUiStreamResponse({
|
|
492
|
+
agentId: agent.id,
|
|
493
|
+
request,
|
|
494
|
+
runId,
|
|
495
|
+
threadId,
|
|
496
|
+
upstreamBody,
|
|
497
|
+
upstreamStatus: 200,
|
|
498
|
+
onFinish: () => {
|
|
499
|
+
sessionManager.completeRun(runId);
|
|
500
|
+
},
|
|
501
|
+
onError: () => {
|
|
502
|
+
sessionManager.failRun(runId);
|
|
503
|
+
},
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
|
|
361
507
|
export interface AgUiHandlerOptions {
|
|
362
508
|
context?:
|
|
363
509
|
| Record<string, unknown>
|
|
364
510
|
| ((request: dntShim.Request) => Record<string, unknown> | Promise<Record<string, unknown>>);
|
|
511
|
+
sessionManager?: RunResumeSessionManager<AgUiResumeValue>;
|
|
365
512
|
}
|
|
366
513
|
|
|
367
514
|
export interface AgUiHandlerConfigWithAgent extends AgUiHandlerOptions {
|
|
@@ -418,12 +565,25 @@ export function createAgUiHandler(
|
|
|
418
565
|
const parsed = AgUiRequestSchema.parse(await request.json());
|
|
419
566
|
|
|
420
567
|
if (parsed.tools.length > 0) {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
568
|
+
if (!options?.sessionManager) {
|
|
569
|
+
return dntShim.Response.json(
|
|
570
|
+
{
|
|
571
|
+
error:
|
|
572
|
+
"Injected AG-UI tools require a public RunResumeSessionManager on createAgUiHandler().",
|
|
573
|
+
},
|
|
574
|
+
{ status: 501 },
|
|
575
|
+
);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
const context = typeof options?.context === "function"
|
|
579
|
+
? await options.context(request)
|
|
580
|
+
: options?.context ?? {};
|
|
581
|
+
|
|
582
|
+
return await createAgUiInjectedToolsStreamResponse(
|
|
583
|
+
agent,
|
|
584
|
+
parsed,
|
|
585
|
+
context,
|
|
586
|
+
options.sessionManager,
|
|
427
587
|
);
|
|
428
588
|
}
|
|
429
589
|
|
|
@@ -431,7 +591,7 @@ export function createAgUiHandler(
|
|
|
431
591
|
? await options.context(request)
|
|
432
592
|
: options?.context ?? {};
|
|
433
593
|
|
|
434
|
-
return await
|
|
594
|
+
return await createAgUiDirectStreamResponse(agent, parsed, context);
|
|
435
595
|
} catch (error) {
|
|
436
596
|
if (error instanceof z.ZodError) {
|
|
437
597
|
return dntShim.Response.json(
|
|
@@ -150,6 +150,16 @@ export class ErrorCollector {
|
|
|
150
150
|
return this.addTypedError("runtime", message, { stack, context, slug });
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
private addFileContextError(
|
|
154
|
+
type: "bundle" | "hmr" | "module",
|
|
155
|
+
message: string,
|
|
156
|
+
file?: string,
|
|
157
|
+
context?: Record<string, unknown>,
|
|
158
|
+
slug?: string,
|
|
159
|
+
): DevError {
|
|
160
|
+
return this.addTypedError(type, message, { file, context, slug });
|
|
161
|
+
}
|
|
162
|
+
|
|
153
163
|
/**
|
|
154
164
|
* Add a bundle error
|
|
155
165
|
* @param message Error message
|
|
@@ -163,7 +173,7 @@ export class ErrorCollector {
|
|
|
163
173
|
context?: Record<string, unknown>,
|
|
164
174
|
slug?: string,
|
|
165
175
|
): DevError {
|
|
166
|
-
return this.
|
|
176
|
+
return this.addFileContextError("bundle", message, file, context, slug);
|
|
167
177
|
}
|
|
168
178
|
|
|
169
179
|
/**
|
|
@@ -179,7 +189,7 @@ export class ErrorCollector {
|
|
|
179
189
|
context?: Record<string, unknown>,
|
|
180
190
|
slug?: string,
|
|
181
191
|
): DevError {
|
|
182
|
-
return this.
|
|
192
|
+
return this.addFileContextError("hmr", message, file, context, slug);
|
|
183
193
|
}
|
|
184
194
|
|
|
185
195
|
/**
|
|
@@ -195,7 +205,7 @@ export class ErrorCollector {
|
|
|
195
205
|
context?: Record<string, unknown>,
|
|
196
206
|
slug?: string,
|
|
197
207
|
): DevError {
|
|
198
|
-
return this.
|
|
208
|
+
return this.addFileContextError("module", message, file, context, slug);
|
|
199
209
|
}
|
|
200
210
|
|
|
201
211
|
getAll(filter?: ErrorFilter): DevError[] {
|