veryfront 0.1.223 → 0.1.225
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-detached-start.d.ts +7 -0
- package/esm/src/agent/ag-ui-detached-start.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-detached-start.js +110 -80
- package/esm/src/agent/ag-ui-runtime-handler.d.ts +8 -0
- package/esm/src/agent/ag-ui-runtime-handler.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-runtime-handler.js +70 -6
- package/esm/src/agent/index.d.ts +2 -2
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +1 -1
- 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-detached-start.ts +148 -97
- package/src/src/agent/ag-ui-runtime-handler.ts +111 -4
- package/src/src/agent/index.ts +3 -0
- package/src/src/utils/version-constant.ts +1 -1
package/esm/deno.js
CHANGED
|
@@ -55,6 +55,12 @@ export declare const AgUiDetachedStartAcceptedSchema: z.ZodObject<{
|
|
|
55
55
|
}, z.core.$strip>;
|
|
56
56
|
export type AgUiDetachedStartRequest = z.infer<typeof AgUiDetachedStartRequestSchema>;
|
|
57
57
|
export type AgUiDetachedStartAccepted = z.infer<typeof AgUiDetachedStartAcceptedSchema>;
|
|
58
|
+
export interface ExecuteAgUiDetachedStartInput {
|
|
59
|
+
request: AgUiDetachedStartRequest;
|
|
60
|
+
rawRequest?: Request;
|
|
61
|
+
requestOrCtx?: unknown;
|
|
62
|
+
context?: Record<string, unknown>;
|
|
63
|
+
}
|
|
58
64
|
interface AgUiDetachedStartExecutionInput {
|
|
59
65
|
request: AgUiDetachedStartRequest;
|
|
60
66
|
requestOrCtx: unknown;
|
|
@@ -93,6 +99,7 @@ export type AgUiDetachedStartHandlerOptions = (AgUiDetachedStartHandlerOptionsBa
|
|
|
93
99
|
agent?: undefined;
|
|
94
100
|
startDetachedExecution: AgUiDetachedExecutionStarter;
|
|
95
101
|
});
|
|
102
|
+
export declare function executeAgUiDetachedStart(options: AgUiDetachedStartHandlerOptions, input: ExecuteAgUiDetachedStartInput): Promise<Response>;
|
|
96
103
|
export declare function createAgUiDetachedStartHandler(options: AgUiDetachedStartHandlerOptions): (requestOrCtx: unknown) => Promise<Response>;
|
|
97
104
|
export {};
|
|
98
105
|
//# sourceMappingURL=ag-ui-detached-start.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ag-ui-detached-start.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-detached-start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,gBAAgB,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ag-ui-detached-start.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-detached-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,12 +84,6 @@ function buildMergedTools(agent, request, sessionManager) {
|
|
|
84
84
|
}
|
|
85
85
|
return { ...agent.config.tools, ...injectedTools };
|
|
86
86
|
}
|
|
87
|
-
async function resolveContextValue(value, request) {
|
|
88
|
-
if (typeof value === "function") {
|
|
89
|
-
return await value(request);
|
|
90
|
-
}
|
|
91
|
-
return value ?? {};
|
|
92
|
-
}
|
|
93
87
|
function scheduleDetachedTask(requestOrCtx, task) {
|
|
94
88
|
if (typeof requestOrCtx === "object" &&
|
|
95
89
|
requestOrCtx !== null &&
|
|
@@ -123,6 +117,111 @@ async function startDefaultDetachedExecution(input) {
|
|
|
123
117
|
const runtimeStream = await runtime.stream(normalizeAgUiMessages(input.request.messages), buildStreamContext(input.request, input.context, input.request.threadId, input.request.runId), undefined, input.request.model, input.request.maxOutputTokens, input.abortSignal);
|
|
124
118
|
await drainRuntimeStream(runtimeStream);
|
|
125
119
|
}
|
|
120
|
+
async function resolveDetachedStartContext(options, input) {
|
|
121
|
+
if (input.context) {
|
|
122
|
+
return input.context;
|
|
123
|
+
}
|
|
124
|
+
if (!options.context) {
|
|
125
|
+
return {};
|
|
126
|
+
}
|
|
127
|
+
if (typeof options.context === "function") {
|
|
128
|
+
if (!input.rawRequest) {
|
|
129
|
+
throw INVALID_ARGUMENT.create({
|
|
130
|
+
detail: "executeAgUiDetachedStart requires rawRequest when options.context is a function.",
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return await options.context(input.rawRequest);
|
|
134
|
+
}
|
|
135
|
+
return options.context;
|
|
136
|
+
}
|
|
137
|
+
function assertDetachedStartRawRequest(options, input) {
|
|
138
|
+
if (!options.startDetachedExecution) {
|
|
139
|
+
return input.rawRequest;
|
|
140
|
+
}
|
|
141
|
+
if (input.rawRequest) {
|
|
142
|
+
return input.rawRequest;
|
|
143
|
+
}
|
|
144
|
+
throw INVALID_ARGUMENT.create({
|
|
145
|
+
detail: "executeAgUiDetachedStart requires rawRequest when options.startDetachedExecution is used.",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
export async function executeAgUiDetachedStart(options, input) {
|
|
149
|
+
const rawRequest = assertDetachedStartRawRequest(options, input);
|
|
150
|
+
const context = await resolveDetachedStartContext(options, input);
|
|
151
|
+
try {
|
|
152
|
+
const abortSignal = options.sessionManager.startRun({
|
|
153
|
+
runId: input.request.runId,
|
|
154
|
+
threadId: input.request.threadId,
|
|
155
|
+
});
|
|
156
|
+
await options.onAccepted?.({
|
|
157
|
+
request: input.request,
|
|
158
|
+
runId: input.request.runId,
|
|
159
|
+
threadId: input.request.threadId,
|
|
160
|
+
});
|
|
161
|
+
const detachedTask = (async () => {
|
|
162
|
+
try {
|
|
163
|
+
if (options.startDetachedExecution) {
|
|
164
|
+
await options.startDetachedExecution({
|
|
165
|
+
request: input.request,
|
|
166
|
+
requestOrCtx: input.requestOrCtx,
|
|
167
|
+
rawRequest: rawRequest,
|
|
168
|
+
context,
|
|
169
|
+
abortSignal,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else if (options.agent) {
|
|
173
|
+
await startDefaultDetachedExecution({
|
|
174
|
+
agent: options.agent,
|
|
175
|
+
request: input.request,
|
|
176
|
+
context,
|
|
177
|
+
abortSignal,
|
|
178
|
+
sessionManager: options.sessionManager,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
throw new Error("Detached AG-UI start configuration became invalid during execution.");
|
|
183
|
+
}
|
|
184
|
+
options.sessionManager.completeRun(input.request.runId);
|
|
185
|
+
await options.onFinish?.({
|
|
186
|
+
runId: input.request.runId,
|
|
187
|
+
threadId: input.request.threadId,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
options.sessionManager.failRun(input.request.runId);
|
|
192
|
+
await options.onError?.({
|
|
193
|
+
runId: input.request.runId,
|
|
194
|
+
threadId: input.request.threadId,
|
|
195
|
+
error,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
})().catch(() => undefined);
|
|
199
|
+
scheduleDetachedTask(input.requestOrCtx, detachedTask);
|
|
200
|
+
return Response.json({
|
|
201
|
+
accepted: true,
|
|
202
|
+
duplicate: false,
|
|
203
|
+
runId: input.request.runId,
|
|
204
|
+
threadId: input.request.threadId,
|
|
205
|
+
}, { status: 202 });
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (error instanceof RunAlreadyExistsError) {
|
|
209
|
+
await options.onDuplicate?.({
|
|
210
|
+
request: input.request,
|
|
211
|
+
runId: input.request.runId,
|
|
212
|
+
threadId: input.request.threadId,
|
|
213
|
+
});
|
|
214
|
+
return Response.json({
|
|
215
|
+
accepted: true,
|
|
216
|
+
duplicate: true,
|
|
217
|
+
runId: input.request.runId,
|
|
218
|
+
threadId: input.request.threadId,
|
|
219
|
+
}, { status: 202 });
|
|
220
|
+
}
|
|
221
|
+
options.sessionManager.failRun(input.request.runId);
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
126
225
|
export function createAgUiDetachedStartHandler(options) {
|
|
127
226
|
if (!options.agent && !options.startDetachedExecution) {
|
|
128
227
|
throw new Error("Detached AG-UI start requires either an agent or startDetachedExecution handler.");
|
|
@@ -131,80 +230,11 @@ export function createAgUiDetachedStartHandler(options) {
|
|
|
131
230
|
const request = extractRequest(requestOrCtx);
|
|
132
231
|
try {
|
|
133
232
|
const parsed = AgUiDetachedStartRequestSchema.parse(await request.json());
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
});
|
|
140
|
-
await options.onAccepted?.({
|
|
141
|
-
request: parsed,
|
|
142
|
-
runId: parsed.runId,
|
|
143
|
-
threadId: parsed.threadId,
|
|
144
|
-
});
|
|
145
|
-
const detachedTask = (async () => {
|
|
146
|
-
try {
|
|
147
|
-
if (options.startDetachedExecution) {
|
|
148
|
-
await options.startDetachedExecution({
|
|
149
|
-
request: parsed,
|
|
150
|
-
requestOrCtx,
|
|
151
|
-
rawRequest: request,
|
|
152
|
-
context,
|
|
153
|
-
abortSignal,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
else if (options.agent) {
|
|
157
|
-
await startDefaultDetachedExecution({
|
|
158
|
-
agent: options.agent,
|
|
159
|
-
request: parsed,
|
|
160
|
-
context,
|
|
161
|
-
abortSignal,
|
|
162
|
-
sessionManager: options.sessionManager,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
throw new Error("Detached AG-UI start configuration became invalid during execution.");
|
|
167
|
-
}
|
|
168
|
-
options.sessionManager.completeRun(parsed.runId);
|
|
169
|
-
await options.onFinish?.({
|
|
170
|
-
runId: parsed.runId,
|
|
171
|
-
threadId: parsed.threadId,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
options.sessionManager.failRun(parsed.runId);
|
|
176
|
-
await options.onError?.({
|
|
177
|
-
runId: parsed.runId,
|
|
178
|
-
threadId: parsed.threadId,
|
|
179
|
-
error,
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
})().catch(() => undefined);
|
|
183
|
-
scheduleDetachedTask(requestOrCtx, detachedTask);
|
|
184
|
-
return Response.json({
|
|
185
|
-
accepted: true,
|
|
186
|
-
duplicate: false,
|
|
187
|
-
runId: parsed.runId,
|
|
188
|
-
threadId: parsed.threadId,
|
|
189
|
-
}, { status: 202 });
|
|
190
|
-
}
|
|
191
|
-
catch (error) {
|
|
192
|
-
if (error instanceof RunAlreadyExistsError) {
|
|
193
|
-
await options.onDuplicate?.({
|
|
194
|
-
request: parsed,
|
|
195
|
-
runId: parsed.runId,
|
|
196
|
-
threadId: parsed.threadId,
|
|
197
|
-
});
|
|
198
|
-
return Response.json({
|
|
199
|
-
accepted: true,
|
|
200
|
-
duplicate: true,
|
|
201
|
-
runId: parsed.runId,
|
|
202
|
-
threadId: parsed.threadId,
|
|
203
|
-
}, { status: 202 });
|
|
204
|
-
}
|
|
205
|
-
options.sessionManager.failRun(parsed.runId);
|
|
206
|
-
throw error;
|
|
207
|
-
}
|
|
233
|
+
return await executeAgUiDetachedStart(options, {
|
|
234
|
+
request: parsed,
|
|
235
|
+
rawRequest: request,
|
|
236
|
+
requestOrCtx,
|
|
237
|
+
});
|
|
208
238
|
}
|
|
209
239
|
catch (error) {
|
|
210
240
|
if (error instanceof z.ZodError) {
|
|
@@ -5,6 +5,11 @@ type AgUiResumeValue = {
|
|
|
5
5
|
result: unknown;
|
|
6
6
|
isError: boolean;
|
|
7
7
|
};
|
|
8
|
+
export interface AgUiRuntimeLifecycleContext {
|
|
9
|
+
request: AgUiRuntimeRequest;
|
|
10
|
+
toolCallId?: string;
|
|
11
|
+
error?: unknown;
|
|
12
|
+
}
|
|
8
13
|
export interface AgUiRuntimeHandlerExecuteInput {
|
|
9
14
|
request: Request;
|
|
10
15
|
agUiInput: AgUiRuntimeRequest;
|
|
@@ -16,6 +21,9 @@ export interface AgUiRuntimeHandlerOptions {
|
|
|
16
21
|
context?: Record<string, unknown> | ((request: Request) => Record<string, unknown> | Promise<Record<string, unknown>>);
|
|
17
22
|
sessionManager?: RunResumeSessionManager<AgUiResumeValue>;
|
|
18
23
|
execute?: AgUiRuntimeHandlerExecute;
|
|
24
|
+
onToolCallSeen?: (context: AgUiRuntimeLifecycleContext) => Promise<void> | void;
|
|
25
|
+
onFinish?: (context: AgUiRuntimeLifecycleContext) => Promise<void> | void;
|
|
26
|
+
onError?: (context: AgUiRuntimeLifecycleContext) => Promise<void> | void;
|
|
19
27
|
}
|
|
20
28
|
export interface AgUiRuntimeHandlerConfigWithAgent extends AgUiRuntimeHandlerOptions {
|
|
21
29
|
agent: Agent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ag-ui-runtime-handler.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-runtime-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;AAgBrC,KAAK,eAAe,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ag-ui-runtime-handler.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-runtime-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;AAgBrC,KAAK,eAAe,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAG7D,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqWD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,8BAA8B,KAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,cAAc,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1E;AAED,MAAM,WAAW,iCAAkC,SAAQ,yBAAyB;IAClF,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,wBAAwB,GAChC,iCAAiC,GACjC,CAAC,yBAAyB,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,yBAAyB,CAAA;CAAE,CAAC,CAAC;AAE5F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,CAAC,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAqI9C"}
|
|
@@ -12,6 +12,27 @@ const AG_UI_HEADERS = {
|
|
|
12
12
|
"Cache-Control": "no-cache",
|
|
13
13
|
Connection: "keep-alive",
|
|
14
14
|
};
|
|
15
|
+
function invokeLifecycleCallback(callback, context) {
|
|
16
|
+
if (!callback)
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
const result = callback(context);
|
|
20
|
+
void Promise.resolve(result).catch(() => undefined);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function invokeLifecycleCallbackAndWait(callback, context) {
|
|
27
|
+
if (!callback)
|
|
28
|
+
return;
|
|
29
|
+
try {
|
|
30
|
+
await callback(context);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
15
36
|
function isRequest(obj) {
|
|
16
37
|
return (typeof obj === "object" &&
|
|
17
38
|
obj !== null &&
|
|
@@ -140,7 +161,7 @@ async function createAgUiRuntimeStreamResponse(options) {
|
|
|
140
161
|
headers: { ...AG_UI_HEADERS },
|
|
141
162
|
});
|
|
142
163
|
}
|
|
143
|
-
async function createAgUiRuntimeDirectStreamResponse(agent, request, baseContext) {
|
|
164
|
+
async function createAgUiRuntimeDirectStreamResponse(agent, request, baseContext, lifecycle) {
|
|
144
165
|
await agent.clearMemory();
|
|
145
166
|
const result = await agent.stream({
|
|
146
167
|
messages: normalizeAgUiRuntimeMessages(request.messages),
|
|
@@ -153,6 +174,9 @@ async function createAgUiRuntimeDirectStreamResponse(agent, request, baseContext
|
|
|
153
174
|
upstreamBody: upstream.body,
|
|
154
175
|
upstreamStatus: upstream.status,
|
|
155
176
|
upstreamStatusText: upstream.statusText,
|
|
177
|
+
onFinish: lifecycle?.onFinish,
|
|
178
|
+
onError: lifecycle?.onError,
|
|
179
|
+
onToolCallSeen: lifecycle?.onToolCallSeen,
|
|
156
180
|
});
|
|
157
181
|
}
|
|
158
182
|
function createInjectedAgUiTool(runId, tool, sessionManager) {
|
|
@@ -199,7 +223,7 @@ function buildMergedTools(agent, request, sessionManager) {
|
|
|
199
223
|
}
|
|
200
224
|
return { ...agent.config.tools, ...injectedTools };
|
|
201
225
|
}
|
|
202
|
-
async function createAgUiRuntimeInjectedToolsStreamResponse(agent, request, baseContext, sessionManager) {
|
|
226
|
+
async function createAgUiRuntimeInjectedToolsStreamResponse(agent, request, baseContext, sessionManager, lifecycle) {
|
|
203
227
|
try {
|
|
204
228
|
sessionManager.startRun({ runId: request.runId, threadId: request.threadId });
|
|
205
229
|
}
|
|
@@ -228,12 +252,15 @@ async function createAgUiRuntimeInjectedToolsStreamResponse(agent, request, base
|
|
|
228
252
|
upstreamStatus: 200,
|
|
229
253
|
onFinish: () => {
|
|
230
254
|
sessionManager.completeRun(request.runId);
|
|
255
|
+
void lifecycle?.onFinish?.();
|
|
231
256
|
},
|
|
232
|
-
onError: () => {
|
|
257
|
+
onError: (error) => {
|
|
233
258
|
sessionManager.failRun(request.runId);
|
|
259
|
+
void lifecycle?.onError?.(error);
|
|
234
260
|
},
|
|
235
261
|
onToolCallSeen: (toolCallId) => {
|
|
236
262
|
sessionManager.prepareForSignal(request.runId, toolCallId);
|
|
263
|
+
void lifecycle?.onToolCallSeen?.(toolCallId);
|
|
237
264
|
},
|
|
238
265
|
});
|
|
239
266
|
}
|
|
@@ -260,16 +287,53 @@ export function createAgUiRuntimeHandler(config) {
|
|
|
260
287
|
}, { status: 501 }))
|
|
261
288
|
: createAgUiRuntimeDirectStreamResponse(config.agent, parsed, context)
|
|
262
289
|
: undefined;
|
|
290
|
+
const invokeLifecycle = (type, extra = {}) => {
|
|
291
|
+
invokeLifecycleCallback(config[type], {
|
|
292
|
+
request: parsed,
|
|
293
|
+
...extra,
|
|
294
|
+
});
|
|
295
|
+
};
|
|
296
|
+
const createDefaultResponseWithLifecycle = createDefaultResponse
|
|
297
|
+
? async () => {
|
|
298
|
+
try {
|
|
299
|
+
if (!config.agent) {
|
|
300
|
+
return await createDefaultResponse();
|
|
301
|
+
}
|
|
302
|
+
if (parsed.tools.length > 0) {
|
|
303
|
+
if (!config.sessionManager) {
|
|
304
|
+
return await createDefaultResponse();
|
|
305
|
+
}
|
|
306
|
+
return await createAgUiRuntimeInjectedToolsStreamResponse(config.agent, parsed, context, config.sessionManager, {
|
|
307
|
+
onFinish: () => invokeLifecycle("onFinish"),
|
|
308
|
+
onError: (error) => invokeLifecycle("onError", { error }),
|
|
309
|
+
onToolCallSeen: (toolCallId) => invokeLifecycle("onToolCallSeen", { toolCallId }),
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
return await createAgUiRuntimeDirectStreamResponse(config.agent, parsed, context, {
|
|
313
|
+
onFinish: () => invokeLifecycle("onFinish"),
|
|
314
|
+
onError: (error) => invokeLifecycle("onError", { error }),
|
|
315
|
+
onToolCallSeen: (toolCallId) => invokeLifecycle("onToolCallSeen", { toolCallId }),
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
await invokeLifecycleCallbackAndWait(config.onError, {
|
|
320
|
+
request: parsed,
|
|
321
|
+
error,
|
|
322
|
+
});
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
: undefined;
|
|
263
327
|
if (config.execute) {
|
|
264
328
|
return await config.execute({
|
|
265
329
|
request,
|
|
266
330
|
agUiInput: parsed,
|
|
267
331
|
context,
|
|
268
|
-
createDefaultResponse,
|
|
332
|
+
createDefaultResponse: createDefaultResponseWithLifecycle,
|
|
269
333
|
});
|
|
270
334
|
}
|
|
271
|
-
if (
|
|
272
|
-
return await
|
|
335
|
+
if (createDefaultResponseWithLifecycle) {
|
|
336
|
+
return await createDefaultResponseWithLifecycle();
|
|
273
337
|
}
|
|
274
338
|
throw new Error("createAgUiRuntimeHandler configuration became invalid during execution.");
|
|
275
339
|
}
|
package/esm/src/agent/index.d.ts
CHANGED
|
@@ -84,13 +84,13 @@ export { getTextFromParts, getToolArguments, hasArgs, hasInput } from "./types.j
|
|
|
84
84
|
export { BufferMemory, ConversationMemory, createMemory, createRedisMemory, type Memory, type MemoryPersistence, type MemoryStats, type RedisClient, RedisMemory, type RedisMemoryConfig, SummaryMemory, } from "./memory/index.js";
|
|
85
85
|
export { agentAsTool, createWorkflow, getAgent, getAgentsAsTools, getAllAgentIds, registerAgent, type WorkflowConfig, type WorkflowResult, type WorkflowStep, } from "./composition/index.js";
|
|
86
86
|
export { agent } from "./factory.js";
|
|
87
|
-
export { type AgUiRuntimeHandlerConfig, type AgUiRuntimeHandlerConfigWithAgent, type AgUiRuntimeHandlerExecute, type AgUiRuntimeHandlerExecuteInput, type AgUiRuntimeHandlerOptions, createAgUiRuntimeHandler, } from "./ag-ui-runtime-handler.js";
|
|
87
|
+
export { type AgUiRuntimeHandlerConfig, type AgUiRuntimeHandlerConfigWithAgent, type AgUiRuntimeHandlerExecute, type AgUiRuntimeHandlerExecuteInput, type AgUiRuntimeHandlerOptions, type AgUiRuntimeLifecycleContext, createAgUiRuntimeHandler, } from "./ag-ui-runtime-handler.js";
|
|
88
88
|
export { type AgUiRuntimeContextItem, AgUiRuntimeContextItemSchema, type AgUiRuntimeInjectedTool, AgUiRuntimeInjectedToolSchema, type AgUiRuntimeMessage, AgUiRuntimeMessageSchema, type AgUiRuntimeRequest, AgUiRuntimeRequestSchema, parseAgUiRuntimeRequest, parseAgUiRuntimeRequestOrError, } from "./runtime-ag-ui-contract.js";
|
|
89
89
|
export { normalizeAgUiRuntimeMessages } from "./ag-ui-runtime-support.js";
|
|
90
90
|
export { type AgUiBrowserEncodedEvent, type AgUiBrowserEncoderState, type AgUiBrowserRunFinishedMetadata, type AgUiRuntimeStreamEvent, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
|
|
91
91
|
export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
|
|
92
92
|
export { expandAllowedRemoteToolNames, getProviderNativeToolNames, type ProviderNativeToolInventoryOptions, } from "./provider-native-tool-inventory.js";
|
|
93
|
-
export { type AgUiDetachedStartAccepted, AgUiDetachedStartAcceptedSchema, type AgUiDetachedStartHandlerOptions, type AgUiDetachedStartRequest, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, } from "./ag-ui-detached-start.js";
|
|
93
|
+
export { type AgUiDetachedStartAccepted, AgUiDetachedStartAcceptedSchema, type AgUiDetachedStartHandlerOptions, type AgUiDetachedStartRequest, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, type ExecuteAgUiDetachedStartInput, } from "./ag-ui-detached-start.js";
|
|
94
94
|
export { type AgUiCancelHandlerOptions, type AgUiResumeHandlerOptions, type AgUiResumeSignal, AgUiResumeSignalSchema, createAgUiCancelHandler, createAgUiResumeHandler, } from "./ag-ui-run-control.js";
|
|
95
95
|
export { type AgUiSseEvent, createAgUiRunErrorEvent, createAgUiSseErrorResponse, normalizeAgUiMessages, parseAgUiRequest, parseAgUiRequestOrError, } from "./ag-ui-host-support.js";
|
|
96
96
|
export { type AgUiContextItem, type AgUiHandlerConfigWithAgent, type AgUiHandlerOptions, type AgUiInjectedTool, type AgUiRequest, AgUiRequestSchema, createAgUiHandler, } from "./ag-ui-handler.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,KAAK,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,OAAO,IAAI,YAAY,EACvB,WAAW,EACX,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,WAAW,EACX,KAAK,iBAAiB,EACtB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC7B,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,wCAAwC,GACzC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,kCAAkC,GACxC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,KAAK,yBAAyB,EAC9B,+BAA+B,EAC/B,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"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"}
|
package/esm/src/agent/index.js
CHANGED
|
@@ -89,7 +89,7 @@ export { normalizeAgUiRuntimeMessages } from "./ag-ui-runtime-support.js";
|
|
|
89
89
|
export { createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
|
|
90
90
|
export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
|
|
91
91
|
export { expandAllowedRemoteToolNames, getProviderNativeToolNames, } from "./provider-native-tool-inventory.js";
|
|
92
|
-
export { AgUiDetachedStartAcceptedSchema, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, } from "./ag-ui-detached-start.js";
|
|
92
|
+
export { AgUiDetachedStartAcceptedSchema, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, } from "./ag-ui-detached-start.js";
|
|
93
93
|
export { AgUiResumeSignalSchema, createAgUiCancelHandler, createAgUiResumeHandler, } from "./ag-ui-run-control.js";
|
|
94
94
|
export { createAgUiRunErrorEvent, createAgUiSseErrorResponse, normalizeAgUiMessages, parseAgUiRequest, parseAgUiRequestOrError, } from "./ag-ui-host-support.js";
|
|
95
95
|
export { AgUiRequestSchema, createAgUiHandler, } from "./ag-ui-handler.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.225";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
|
@@ -133,17 +133,6 @@ function buildMergedTools(
|
|
|
133
133
|
return { ...agent.config.tools, ...injectedTools };
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
async function resolveContextValue(
|
|
137
|
-
value: AgUiContextValue | undefined,
|
|
138
|
-
request: Request,
|
|
139
|
-
): Promise<Record<string, unknown>> {
|
|
140
|
-
if (typeof value === "function") {
|
|
141
|
-
return await value(request);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return value ?? {};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
136
|
function scheduleDetachedTask(requestOrCtx: unknown, task: Promise<void>): void {
|
|
148
137
|
if (
|
|
149
138
|
typeof requestOrCtx === "object" &&
|
|
@@ -181,6 +170,13 @@ export const AgUiDetachedStartAcceptedSchema = z.object({
|
|
|
181
170
|
export type AgUiDetachedStartRequest = z.infer<typeof AgUiDetachedStartRequestSchema>;
|
|
182
171
|
export type AgUiDetachedStartAccepted = z.infer<typeof AgUiDetachedStartAcceptedSchema>;
|
|
183
172
|
|
|
173
|
+
export interface ExecuteAgUiDetachedStartInput {
|
|
174
|
+
request: AgUiDetachedStartRequest;
|
|
175
|
+
rawRequest?: Request;
|
|
176
|
+
requestOrCtx?: unknown;
|
|
177
|
+
context?: Record<string, unknown>;
|
|
178
|
+
}
|
|
179
|
+
|
|
184
180
|
interface AgUiDetachedStartExecutionInput {
|
|
185
181
|
request: AgUiDetachedStartRequest;
|
|
186
182
|
requestOrCtx: unknown;
|
|
@@ -242,6 +238,142 @@ async function startDefaultDetachedExecution(input: {
|
|
|
242
238
|
await drainRuntimeStream(runtimeStream);
|
|
243
239
|
}
|
|
244
240
|
|
|
241
|
+
async function resolveDetachedStartContext(
|
|
242
|
+
options: AgUiDetachedStartHandlerOptions,
|
|
243
|
+
input: ExecuteAgUiDetachedStartInput,
|
|
244
|
+
): Promise<Record<string, unknown>> {
|
|
245
|
+
if (input.context) {
|
|
246
|
+
return input.context;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (!options.context) {
|
|
250
|
+
return {};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (typeof options.context === "function") {
|
|
254
|
+
if (!input.rawRequest) {
|
|
255
|
+
throw INVALID_ARGUMENT.create({
|
|
256
|
+
detail: "executeAgUiDetachedStart requires rawRequest when options.context is a function.",
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return await options.context(input.rawRequest);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return options.context;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function assertDetachedStartRawRequest(
|
|
267
|
+
options: AgUiDetachedStartHandlerOptions,
|
|
268
|
+
input: ExecuteAgUiDetachedStartInput,
|
|
269
|
+
): Request | undefined {
|
|
270
|
+
if (!options.startDetachedExecution) {
|
|
271
|
+
return input.rawRequest;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (input.rawRequest) {
|
|
275
|
+
return input.rawRequest;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
throw INVALID_ARGUMENT.create({
|
|
279
|
+
detail:
|
|
280
|
+
"executeAgUiDetachedStart requires rawRequest when options.startDetachedExecution is used.",
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export async function executeAgUiDetachedStart(
|
|
285
|
+
options: AgUiDetachedStartHandlerOptions,
|
|
286
|
+
input: ExecuteAgUiDetachedStartInput,
|
|
287
|
+
): Promise<Response> {
|
|
288
|
+
const rawRequest = assertDetachedStartRawRequest(options, input);
|
|
289
|
+
const context = await resolveDetachedStartContext(options, input);
|
|
290
|
+
|
|
291
|
+
try {
|
|
292
|
+
const abortSignal = options.sessionManager.startRun({
|
|
293
|
+
runId: input.request.runId,
|
|
294
|
+
threadId: input.request.threadId,
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
await options.onAccepted?.({
|
|
298
|
+
request: input.request,
|
|
299
|
+
runId: input.request.runId,
|
|
300
|
+
threadId: input.request.threadId,
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
const detachedTask = (async () => {
|
|
304
|
+
try {
|
|
305
|
+
if (options.startDetachedExecution) {
|
|
306
|
+
await options.startDetachedExecution({
|
|
307
|
+
request: input.request,
|
|
308
|
+
requestOrCtx: input.requestOrCtx,
|
|
309
|
+
rawRequest: rawRequest!,
|
|
310
|
+
context,
|
|
311
|
+
abortSignal,
|
|
312
|
+
});
|
|
313
|
+
} else if (options.agent) {
|
|
314
|
+
await startDefaultDetachedExecution({
|
|
315
|
+
agent: options.agent,
|
|
316
|
+
request: input.request,
|
|
317
|
+
context,
|
|
318
|
+
abortSignal,
|
|
319
|
+
sessionManager: options.sessionManager,
|
|
320
|
+
});
|
|
321
|
+
} else {
|
|
322
|
+
throw new Error(
|
|
323
|
+
"Detached AG-UI start configuration became invalid during execution.",
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
options.sessionManager.completeRun(input.request.runId);
|
|
328
|
+
await options.onFinish?.({
|
|
329
|
+
runId: input.request.runId,
|
|
330
|
+
threadId: input.request.threadId,
|
|
331
|
+
});
|
|
332
|
+
} catch (error) {
|
|
333
|
+
options.sessionManager.failRun(input.request.runId);
|
|
334
|
+
await options.onError?.({
|
|
335
|
+
runId: input.request.runId,
|
|
336
|
+
threadId: input.request.threadId,
|
|
337
|
+
error,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
})().catch(() => undefined);
|
|
341
|
+
|
|
342
|
+
scheduleDetachedTask(input.requestOrCtx, detachedTask);
|
|
343
|
+
|
|
344
|
+
return Response.json(
|
|
345
|
+
{
|
|
346
|
+
accepted: true,
|
|
347
|
+
duplicate: false,
|
|
348
|
+
runId: input.request.runId,
|
|
349
|
+
threadId: input.request.threadId,
|
|
350
|
+
} satisfies AgUiDetachedStartAccepted,
|
|
351
|
+
{ status: 202 },
|
|
352
|
+
);
|
|
353
|
+
} catch (error) {
|
|
354
|
+
if (error instanceof RunAlreadyExistsError) {
|
|
355
|
+
await options.onDuplicate?.({
|
|
356
|
+
request: input.request,
|
|
357
|
+
runId: input.request.runId,
|
|
358
|
+
threadId: input.request.threadId,
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
return Response.json(
|
|
362
|
+
{
|
|
363
|
+
accepted: true,
|
|
364
|
+
duplicate: true,
|
|
365
|
+
runId: input.request.runId,
|
|
366
|
+
threadId: input.request.threadId,
|
|
367
|
+
} satisfies AgUiDetachedStartAccepted,
|
|
368
|
+
{ status: 202 },
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
options.sessionManager.failRun(input.request.runId);
|
|
373
|
+
throw error;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
245
377
|
export function createAgUiDetachedStartHandler(
|
|
246
378
|
options: AgUiDetachedStartHandlerOptions,
|
|
247
379
|
): (requestOrCtx: unknown) => Promise<Response> {
|
|
@@ -256,92 +388,11 @@ export function createAgUiDetachedStartHandler(
|
|
|
256
388
|
|
|
257
389
|
try {
|
|
258
390
|
const parsed = AgUiDetachedStartRequestSchema.parse(await request.json());
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
threadId: parsed.threadId,
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
await options.onAccepted?.({
|
|
268
|
-
request: parsed,
|
|
269
|
-
runId: parsed.runId,
|
|
270
|
-
threadId: parsed.threadId,
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
const detachedTask = (async () => {
|
|
274
|
-
try {
|
|
275
|
-
if (options.startDetachedExecution) {
|
|
276
|
-
await options.startDetachedExecution({
|
|
277
|
-
request: parsed,
|
|
278
|
-
requestOrCtx,
|
|
279
|
-
rawRequest: request,
|
|
280
|
-
context,
|
|
281
|
-
abortSignal,
|
|
282
|
-
});
|
|
283
|
-
} else if (options.agent) {
|
|
284
|
-
await startDefaultDetachedExecution({
|
|
285
|
-
agent: options.agent,
|
|
286
|
-
request: parsed,
|
|
287
|
-
context,
|
|
288
|
-
abortSignal,
|
|
289
|
-
sessionManager: options.sessionManager,
|
|
290
|
-
});
|
|
291
|
-
} else {
|
|
292
|
-
throw new Error(
|
|
293
|
-
"Detached AG-UI start configuration became invalid during execution.",
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
options.sessionManager.completeRun(parsed.runId);
|
|
298
|
-
await options.onFinish?.({
|
|
299
|
-
runId: parsed.runId,
|
|
300
|
-
threadId: parsed.threadId,
|
|
301
|
-
});
|
|
302
|
-
} catch (error) {
|
|
303
|
-
options.sessionManager.failRun(parsed.runId);
|
|
304
|
-
await options.onError?.({
|
|
305
|
-
runId: parsed.runId,
|
|
306
|
-
threadId: parsed.threadId,
|
|
307
|
-
error,
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
})().catch(() => undefined);
|
|
311
|
-
|
|
312
|
-
scheduleDetachedTask(requestOrCtx, detachedTask);
|
|
313
|
-
|
|
314
|
-
return Response.json(
|
|
315
|
-
{
|
|
316
|
-
accepted: true,
|
|
317
|
-
duplicate: false,
|
|
318
|
-
runId: parsed.runId,
|
|
319
|
-
threadId: parsed.threadId,
|
|
320
|
-
} satisfies AgUiDetachedStartAccepted,
|
|
321
|
-
{ status: 202 },
|
|
322
|
-
);
|
|
323
|
-
} catch (error) {
|
|
324
|
-
if (error instanceof RunAlreadyExistsError) {
|
|
325
|
-
await options.onDuplicate?.({
|
|
326
|
-
request: parsed,
|
|
327
|
-
runId: parsed.runId,
|
|
328
|
-
threadId: parsed.threadId,
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
return Response.json(
|
|
332
|
-
{
|
|
333
|
-
accepted: true,
|
|
334
|
-
duplicate: true,
|
|
335
|
-
runId: parsed.runId,
|
|
336
|
-
threadId: parsed.threadId,
|
|
337
|
-
} satisfies AgUiDetachedStartAccepted,
|
|
338
|
-
{ status: 202 },
|
|
339
|
-
);
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
options.sessionManager.failRun(parsed.runId);
|
|
343
|
-
throw error;
|
|
344
|
-
}
|
|
391
|
+
return await executeAgUiDetachedStart(options, {
|
|
392
|
+
request: parsed,
|
|
393
|
+
rawRequest: request,
|
|
394
|
+
requestOrCtx,
|
|
395
|
+
});
|
|
345
396
|
} catch (error) {
|
|
346
397
|
if (error instanceof z.ZodError) {
|
|
347
398
|
return Response.json(
|
|
@@ -31,6 +31,39 @@ const AG_UI_HEADERS: Record<string, string> = {
|
|
|
31
31
|
type AgUiResumeValue = { result: unknown; isError: boolean };
|
|
32
32
|
type AgUiRuntimePart = Record<string, unknown> & { type: string };
|
|
33
33
|
|
|
34
|
+
export interface AgUiRuntimeLifecycleContext {
|
|
35
|
+
request: AgUiRuntimeRequest;
|
|
36
|
+
toolCallId?: string;
|
|
37
|
+
error?: unknown;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function invokeLifecycleCallback(
|
|
41
|
+
callback: ((context: AgUiRuntimeLifecycleContext) => Promise<void> | void) | undefined,
|
|
42
|
+
context: AgUiRuntimeLifecycleContext,
|
|
43
|
+
): void {
|
|
44
|
+
if (!callback) return;
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const result = callback(context);
|
|
48
|
+
void Promise.resolve(result).catch(() => undefined);
|
|
49
|
+
} catch {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async function invokeLifecycleCallbackAndWait(
|
|
55
|
+
callback: ((context: AgUiRuntimeLifecycleContext) => Promise<void> | void) | undefined,
|
|
56
|
+
context: AgUiRuntimeLifecycleContext,
|
|
57
|
+
): Promise<void> {
|
|
58
|
+
if (!callback) return;
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
await callback(context);
|
|
62
|
+
} catch {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
34
67
|
function isRequest(obj: unknown): obj is Request {
|
|
35
68
|
return (
|
|
36
69
|
typeof obj === "object" &&
|
|
@@ -212,6 +245,11 @@ async function createAgUiRuntimeDirectStreamResponse(
|
|
|
212
245
|
agent: Agent,
|
|
213
246
|
request: AgUiRuntimeRequest,
|
|
214
247
|
baseContext: Record<string, unknown>,
|
|
248
|
+
lifecycle?: {
|
|
249
|
+
onFinish?: () => Promise<void> | void;
|
|
250
|
+
onError?: (error: unknown) => Promise<void> | void;
|
|
251
|
+
onToolCallSeen?: (toolCallId: string) => Promise<void> | void;
|
|
252
|
+
},
|
|
215
253
|
): Promise<Response> {
|
|
216
254
|
await agent.clearMemory();
|
|
217
255
|
|
|
@@ -227,6 +265,9 @@ async function createAgUiRuntimeDirectStreamResponse(
|
|
|
227
265
|
upstreamBody: upstream.body,
|
|
228
266
|
upstreamStatus: upstream.status,
|
|
229
267
|
upstreamStatusText: upstream.statusText,
|
|
268
|
+
onFinish: lifecycle?.onFinish,
|
|
269
|
+
onError: lifecycle?.onError,
|
|
270
|
+
onToolCallSeen: lifecycle?.onToolCallSeen,
|
|
230
271
|
});
|
|
231
272
|
}
|
|
232
273
|
|
|
@@ -297,6 +338,11 @@ async function createAgUiRuntimeInjectedToolsStreamResponse(
|
|
|
297
338
|
request: AgUiRuntimeRequest,
|
|
298
339
|
baseContext: Record<string, unknown>,
|
|
299
340
|
sessionManager: RunResumeSessionManager<AgUiResumeValue>,
|
|
341
|
+
lifecycle?: {
|
|
342
|
+
onFinish?: () => Promise<void> | void;
|
|
343
|
+
onError?: (error: unknown) => Promise<void> | void;
|
|
344
|
+
onToolCallSeen?: (toolCallId: string) => Promise<void> | void;
|
|
345
|
+
},
|
|
300
346
|
): Promise<Response> {
|
|
301
347
|
try {
|
|
302
348
|
sessionManager.startRun({ runId: request.runId, threadId: request.threadId });
|
|
@@ -333,12 +379,15 @@ async function createAgUiRuntimeInjectedToolsStreamResponse(
|
|
|
333
379
|
upstreamStatus: 200,
|
|
334
380
|
onFinish: () => {
|
|
335
381
|
sessionManager.completeRun(request.runId);
|
|
382
|
+
void lifecycle?.onFinish?.();
|
|
336
383
|
},
|
|
337
|
-
onError: () => {
|
|
384
|
+
onError: (error) => {
|
|
338
385
|
sessionManager.failRun(request.runId);
|
|
386
|
+
void lifecycle?.onError?.(error);
|
|
339
387
|
},
|
|
340
388
|
onToolCallSeen: (toolCallId) => {
|
|
341
389
|
sessionManager.prepareForSignal(request.runId, toolCallId);
|
|
390
|
+
void lifecycle?.onToolCallSeen?.(toolCallId);
|
|
342
391
|
},
|
|
343
392
|
});
|
|
344
393
|
}
|
|
@@ -360,6 +409,9 @@ export interface AgUiRuntimeHandlerOptions {
|
|
|
360
409
|
| ((request: Request) => Record<string, unknown> | Promise<Record<string, unknown>>);
|
|
361
410
|
sessionManager?: RunResumeSessionManager<AgUiResumeValue>;
|
|
362
411
|
execute?: AgUiRuntimeHandlerExecute;
|
|
412
|
+
onToolCallSeen?: (context: AgUiRuntimeLifecycleContext) => Promise<void> | void;
|
|
413
|
+
onFinish?: (context: AgUiRuntimeLifecycleContext) => Promise<void> | void;
|
|
414
|
+
onError?: (context: AgUiRuntimeLifecycleContext) => Promise<void> | void;
|
|
363
415
|
}
|
|
364
416
|
|
|
365
417
|
export interface AgUiRuntimeHandlerConfigWithAgent extends AgUiRuntimeHandlerOptions {
|
|
@@ -414,17 +466,72 @@ export function createAgUiRuntimeHandler(
|
|
|
414
466
|
: createAgUiRuntimeDirectStreamResponse(config.agent, parsed, context)
|
|
415
467
|
: undefined;
|
|
416
468
|
|
|
469
|
+
const invokeLifecycle = (
|
|
470
|
+
type: "onFinish" | "onError" | "onToolCallSeen",
|
|
471
|
+
extra: Partial<AgUiRuntimeLifecycleContext> = {},
|
|
472
|
+
): void => {
|
|
473
|
+
invokeLifecycleCallback(config[type], {
|
|
474
|
+
request: parsed,
|
|
475
|
+
...extra,
|
|
476
|
+
});
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
const createDefaultResponseWithLifecycle = createDefaultResponse
|
|
480
|
+
? async () => {
|
|
481
|
+
try {
|
|
482
|
+
if (!config.agent) {
|
|
483
|
+
return await createDefaultResponse();
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (parsed.tools.length > 0) {
|
|
487
|
+
if (!config.sessionManager) {
|
|
488
|
+
return await createDefaultResponse();
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
return await createAgUiRuntimeInjectedToolsStreamResponse(
|
|
492
|
+
config.agent,
|
|
493
|
+
parsed,
|
|
494
|
+
context,
|
|
495
|
+
config.sessionManager,
|
|
496
|
+
{
|
|
497
|
+
onFinish: () => invokeLifecycle("onFinish"),
|
|
498
|
+
onError: (error) => invokeLifecycle("onError", { error }),
|
|
499
|
+
onToolCallSeen: (toolCallId) => invokeLifecycle("onToolCallSeen", { toolCallId }),
|
|
500
|
+
},
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
return await createAgUiRuntimeDirectStreamResponse(
|
|
505
|
+
config.agent,
|
|
506
|
+
parsed,
|
|
507
|
+
context,
|
|
508
|
+
{
|
|
509
|
+
onFinish: () => invokeLifecycle("onFinish"),
|
|
510
|
+
onError: (error) => invokeLifecycle("onError", { error }),
|
|
511
|
+
onToolCallSeen: (toolCallId) => invokeLifecycle("onToolCallSeen", { toolCallId }),
|
|
512
|
+
},
|
|
513
|
+
);
|
|
514
|
+
} catch (error) {
|
|
515
|
+
await invokeLifecycleCallbackAndWait(config.onError, {
|
|
516
|
+
request: parsed,
|
|
517
|
+
error,
|
|
518
|
+
});
|
|
519
|
+
throw error;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
: undefined;
|
|
523
|
+
|
|
417
524
|
if (config.execute) {
|
|
418
525
|
return await config.execute({
|
|
419
526
|
request,
|
|
420
527
|
agUiInput: parsed,
|
|
421
528
|
context,
|
|
422
|
-
createDefaultResponse,
|
|
529
|
+
createDefaultResponse: createDefaultResponseWithLifecycle,
|
|
423
530
|
});
|
|
424
531
|
}
|
|
425
532
|
|
|
426
|
-
if (
|
|
427
|
-
return await
|
|
533
|
+
if (createDefaultResponseWithLifecycle) {
|
|
534
|
+
return await createDefaultResponseWithLifecycle();
|
|
428
535
|
}
|
|
429
536
|
|
|
430
537
|
throw new Error("createAgUiRuntimeHandler configuration became invalid during execution.");
|
package/src/src/agent/index.ts
CHANGED
|
@@ -147,6 +147,7 @@ export {
|
|
|
147
147
|
type AgUiRuntimeHandlerExecute,
|
|
148
148
|
type AgUiRuntimeHandlerExecuteInput,
|
|
149
149
|
type AgUiRuntimeHandlerOptions,
|
|
150
|
+
type AgUiRuntimeLifecycleContext,
|
|
150
151
|
createAgUiRuntimeHandler,
|
|
151
152
|
} from "./ag-ui-runtime-handler.js";
|
|
152
153
|
export {
|
|
@@ -191,6 +192,8 @@ export {
|
|
|
191
192
|
type AgUiDetachedStartRequest,
|
|
192
193
|
AgUiDetachedStartRequestSchema,
|
|
193
194
|
createAgUiDetachedStartHandler,
|
|
195
|
+
executeAgUiDetachedStart,
|
|
196
|
+
type ExecuteAgUiDetachedStartInput,
|
|
194
197
|
} from "./ag-ui-detached-start.js";
|
|
195
198
|
export {
|
|
196
199
|
type AgUiCancelHandlerOptions,
|