veryfront 0.1.139 → 0.1.141
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/runtime/ai-stream-handler.d.ts.map +1 -1
- package/esm/src/agent/runtime/ai-stream-handler.js +59 -0
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +62 -0
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.js +30 -0
- 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/runtime/ai-stream-handler.ts +79 -0
- package/src/src/internal-agents/run-stream.ts +62 -0
- package/src/src/server/handlers/request/agent-stream.handler.ts +30 -0
- package/src/src/utils/version-constant.ts +1 -1
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/ai-stream-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/ai-stream-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAUpD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,CAAC;CACZ;AA6HD,wBAAgB,iBAAiB,IAAI,aAAa,CAQjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EACxC,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,CAAC,EAAE,iBAAiB,EAC7B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CAsNf"}
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
import { sendSSE } from "./sse-utils.js";
|
|
11
11
|
import { isDynamicTool } from "./tool-helpers.js";
|
|
12
12
|
import { serverLogger } from "../../utils/index.js";
|
|
13
|
+
import { isAnyDebugEnabled } from "../../utils/constants/env.js";
|
|
13
14
|
import { setActiveSpanAttributes, withSpan } from "../../observability/tracing/otlp-setup.js";
|
|
15
|
+
import { getHostEnv } from "../../platform/compat/process.js";
|
|
14
16
|
const logger = serverLogger.component("agent");
|
|
15
17
|
function isRecord(value) {
|
|
16
18
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -63,6 +65,45 @@ function stringifyToolError(output) {
|
|
|
63
65
|
return String(output);
|
|
64
66
|
}
|
|
65
67
|
}
|
|
68
|
+
function summarizeDebugValue(value) {
|
|
69
|
+
if (value instanceof Error) {
|
|
70
|
+
return {
|
|
71
|
+
name: value.name,
|
|
72
|
+
message: value.message,
|
|
73
|
+
stack: value.stack,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (typeof value === "string") {
|
|
77
|
+
return value.length > 500 ? `${value.slice(0, 500)}…` : value;
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
function logProviderToolPart(partType, part) {
|
|
82
|
+
if (!isAnyDebugEnabled({ get: getHostEnv })) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (part.providerExecuted !== true) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (part.toolName !== "web_search" && part.toolName !== "web_fetch") {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
logger.debug("Provider tool stream part observed", {
|
|
92
|
+
partType,
|
|
93
|
+
toolCallId: part.toolCallId,
|
|
94
|
+
toolName: part.toolName,
|
|
95
|
+
providerExecuted: part.providerExecuted,
|
|
96
|
+
dynamic: part.dynamic,
|
|
97
|
+
preliminary: part.preliminary,
|
|
98
|
+
isError: part.isError,
|
|
99
|
+
outputType: typeof part.output,
|
|
100
|
+
errorType: typeof part.error,
|
|
101
|
+
inputType: typeof part.input,
|
|
102
|
+
output: summarizeDebugValue(part.output),
|
|
103
|
+
error: summarizeDebugValue(part.error),
|
|
104
|
+
input: summarizeDebugValue(part.input),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
66
107
|
export function createStreamState() {
|
|
67
108
|
return {
|
|
68
109
|
accumulatedText: "",
|
|
@@ -158,6 +199,16 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
158
199
|
}
|
|
159
200
|
case "tool-result": {
|
|
160
201
|
const isError = "isError" in part && part.isError === true;
|
|
202
|
+
logProviderToolPart("tool-result", {
|
|
203
|
+
toolCallId: part.toolCallId,
|
|
204
|
+
toolName: part.toolName,
|
|
205
|
+
providerExecuted: "providerExecuted" in part ? part.providerExecuted : undefined,
|
|
206
|
+
dynamic: "dynamic" in part ? part.dynamic : undefined,
|
|
207
|
+
output: part.output,
|
|
208
|
+
input: "input" in part ? part.input : undefined,
|
|
209
|
+
preliminary: "preliminary" in part ? part.preliminary : undefined,
|
|
210
|
+
isError,
|
|
211
|
+
});
|
|
161
212
|
if (isError) {
|
|
162
213
|
state.toolResults.push({
|
|
163
214
|
toolCallId: part.toolCallId,
|
|
@@ -206,6 +257,14 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
206
257
|
break;
|
|
207
258
|
}
|
|
208
259
|
case "tool-error": {
|
|
260
|
+
logProviderToolPart("tool-error", {
|
|
261
|
+
toolCallId: part.toolCallId,
|
|
262
|
+
toolName: part.toolName,
|
|
263
|
+
providerExecuted: "providerExecuted" in part ? part.providerExecuted : undefined,
|
|
264
|
+
dynamic: "dynamic" in part ? part.dynamic : undefined,
|
|
265
|
+
error: part.error,
|
|
266
|
+
input: "input" in part ? part.input : undefined,
|
|
267
|
+
});
|
|
209
268
|
state.toolResults.push({
|
|
210
269
|
toolCallId: part.toolCallId,
|
|
211
270
|
toolName: part.toolName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAYxD,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,sBAAsB,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAClC;QACH,MAAM,EAAE,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;SAC9C,EACD,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,EAChC,WAAW,CAAC,EAAE,WAAW,KACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1C,CAAC;CACH;AAsLD,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CA2N3B"}
|
|
@@ -5,7 +5,9 @@ import { toolRegistry } from "../tool/index.js";
|
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { createStreamTransformState, finalizeRunEvents, formatAgUiEvent, mapRuntimeEventToAgUi, parseSseJsonEvents, } from "./ag-ui-sse.js";
|
|
7
7
|
import { AgentRunCancelledError } from "./session-manager.js";
|
|
8
|
+
import { serverLogger } from "../utils/index.js";
|
|
8
9
|
const anyObjectSchema = z.record(z.string(), z.unknown());
|
|
10
|
+
const logger = serverLogger.component("internal-agent-run-stream");
|
|
9
11
|
function createInjectedStudioTool(runId, toolName, description, parameters, sessionManager) {
|
|
10
12
|
return {
|
|
11
13
|
id: toolName,
|
|
@@ -140,6 +142,14 @@ function getAllowedRemoteToolNames(forwardedProps) {
|
|
|
140
142
|
return allowedTools.every((toolName) => typeof toolName === "string") ? allowedTools : [];
|
|
141
143
|
}
|
|
142
144
|
export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
145
|
+
logger.info("Starting internal agent runtime stream", {
|
|
146
|
+
runId: input.runId,
|
|
147
|
+
threadId: input.threadId,
|
|
148
|
+
agentId: input.agentId,
|
|
149
|
+
messageCount: input.messages.length,
|
|
150
|
+
toolCount: input.tools.length,
|
|
151
|
+
contextCount: input.context.length,
|
|
152
|
+
});
|
|
143
153
|
const abortSignal = deps.sessionManager.startRun({
|
|
144
154
|
runId: input.runId,
|
|
145
155
|
threadId: input.threadId,
|
|
@@ -173,9 +183,20 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
173
183
|
completedResponse = response;
|
|
174
184
|
},
|
|
175
185
|
}, undefined, undefined, abortSignal);
|
|
186
|
+
logger.info("Internal agent runtime stream attached", {
|
|
187
|
+
runId: input.runId,
|
|
188
|
+
threadId: input.threadId,
|
|
189
|
+
agentId: input.agentId,
|
|
190
|
+
});
|
|
176
191
|
}
|
|
177
192
|
catch (error) {
|
|
178
193
|
deps.sessionManager.failRun(input.runId);
|
|
194
|
+
logger.error("Internal agent runtime stream setup failed", {
|
|
195
|
+
runId: input.runId,
|
|
196
|
+
threadId: input.threadId,
|
|
197
|
+
agentId: input.agentId,
|
|
198
|
+
error: error instanceof Error ? error.message : String(error),
|
|
199
|
+
});
|
|
179
200
|
throw error;
|
|
180
201
|
}
|
|
181
202
|
const response = new ReadableStream({
|
|
@@ -204,6 +225,11 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
204
225
|
};
|
|
205
226
|
const abortHandler = () => {
|
|
206
227
|
aborted = true;
|
|
228
|
+
logger.warn("Internal agent runtime stream aborted", {
|
|
229
|
+
runId: input.runId,
|
|
230
|
+
threadId: input.threadId,
|
|
231
|
+
agentId: input.agentId,
|
|
232
|
+
});
|
|
207
233
|
reader.cancel(new AgentRunCancelledError()).catch(() => { });
|
|
208
234
|
};
|
|
209
235
|
abortSignal.addEventListener("abort", abortHandler, { once: true });
|
|
@@ -218,6 +244,11 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
218
244
|
const { done, value } = await reader.read();
|
|
219
245
|
throwIfAborted();
|
|
220
246
|
if (done) {
|
|
247
|
+
logger.info("Internal agent runtime stream reader completed", {
|
|
248
|
+
runId: input.runId,
|
|
249
|
+
threadId: input.threadId,
|
|
250
|
+
agentId: input.agentId,
|
|
251
|
+
});
|
|
221
252
|
break;
|
|
222
253
|
}
|
|
223
254
|
remainder += decoder.decode(value, { stream: true });
|
|
@@ -241,10 +272,24 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
241
272
|
enqueueIfAttached(mappedEvent.event, mappedEvent.payload);
|
|
242
273
|
}
|
|
243
274
|
deps.sessionManager.completeRun(input.runId);
|
|
275
|
+
logger.info("Internal agent runtime stream finalized", {
|
|
276
|
+
runId: input.runId,
|
|
277
|
+
threadId: input.threadId,
|
|
278
|
+
agentId: input.agentId,
|
|
279
|
+
sawVisibleOutput: state.sawVisibleOutput,
|
|
280
|
+
sawTerminalError: state.sawTerminalError,
|
|
281
|
+
finishReason: state.metadata.finishReason,
|
|
282
|
+
});
|
|
244
283
|
}
|
|
245
284
|
catch (error) {
|
|
246
285
|
if (error instanceof AgentRunCancelledError) {
|
|
247
286
|
deps.sessionManager.cancelRun(input.runId);
|
|
287
|
+
logger.warn("Internal agent runtime stream cancelled", {
|
|
288
|
+
runId: input.runId,
|
|
289
|
+
threadId: input.threadId,
|
|
290
|
+
agentId: input.agentId,
|
|
291
|
+
error: error.message,
|
|
292
|
+
});
|
|
248
293
|
enqueueIfAttached("RunError", {
|
|
249
294
|
code: "CANCELLED",
|
|
250
295
|
message: error.message,
|
|
@@ -252,6 +297,12 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
252
297
|
}
|
|
253
298
|
else {
|
|
254
299
|
deps.sessionManager.failRun(input.runId);
|
|
300
|
+
logger.error("Internal agent runtime stream failed", {
|
|
301
|
+
runId: input.runId,
|
|
302
|
+
threadId: input.threadId,
|
|
303
|
+
agentId: input.agentId,
|
|
304
|
+
error: error instanceof Error ? error.message : String(error),
|
|
305
|
+
});
|
|
255
306
|
enqueueIfAttached("RunError", {
|
|
256
307
|
code: "RUNTIME_ERROR",
|
|
257
308
|
message: error instanceof Error ? error.message : String(error),
|
|
@@ -263,10 +314,21 @@ export async function createRuntimeAgentStreamResponse(input, agent, deps) {
|
|
|
263
314
|
if (clientAttached) {
|
|
264
315
|
controller.close();
|
|
265
316
|
}
|
|
317
|
+
logger.debug("Internal agent runtime stream response closed", {
|
|
318
|
+
runId: input.runId,
|
|
319
|
+
threadId: input.threadId,
|
|
320
|
+
agentId: input.agentId,
|
|
321
|
+
clientAttached,
|
|
322
|
+
});
|
|
266
323
|
}
|
|
267
324
|
},
|
|
268
325
|
cancel() {
|
|
269
326
|
clientAttached = false;
|
|
327
|
+
logger.info("Internal agent runtime client detached", {
|
|
328
|
+
runId: input.runId,
|
|
329
|
+
threadId: input.threadId,
|
|
330
|
+
agentId: input.agentId,
|
|
331
|
+
});
|
|
270
332
|
return Promise.resolve();
|
|
271
333
|
},
|
|
272
334
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAkBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAkBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAKnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AA4ED,qBAAa,kBAAmB,SAAQ,WAAW;IAOrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAwBxB,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CA+GhF"}
|
|
@@ -9,11 +9,13 @@ import { RuntimeRunAgentInputSchema, } from "../../../internal-agents/schema.js"
|
|
|
9
9
|
import { BaseHandler } from "../response/base.js";
|
|
10
10
|
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
11
11
|
import { getHostEnv } from "../../../platform/compat/process.js";
|
|
12
|
+
import { serverLogger } from "../../../utils/index.js";
|
|
12
13
|
const defaultDeps = {
|
|
13
14
|
...defaultChannelInvokeDeps,
|
|
14
15
|
sessionManager: agentRunSessionManager,
|
|
15
16
|
resolveRuntimeOwnerInvokeUrl,
|
|
16
17
|
};
|
|
18
|
+
const logger = serverLogger.component("agent-stream-handler");
|
|
17
19
|
function buildAgentSourceRunOptions(sourceContext) {
|
|
18
20
|
switch (sourceContext.type) {
|
|
19
21
|
case "branch":
|
|
@@ -93,13 +95,36 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
93
95
|
expectedSubject: payload.runId,
|
|
94
96
|
expectedSurface: "studio",
|
|
95
97
|
});
|
|
98
|
+
logger.info("Accepted internal agent stream request", {
|
|
99
|
+
runId: payload.runId,
|
|
100
|
+
threadId: payload.threadId,
|
|
101
|
+
agentId: payload.agentId,
|
|
102
|
+
projectId: ctx.projectId,
|
|
103
|
+
projectSlug: ctx.projectSlug,
|
|
104
|
+
messageCount: payload.messages.length,
|
|
105
|
+
toolCount: payload.tools.length,
|
|
106
|
+
hasAgentSource: Boolean(payload.agentSource),
|
|
107
|
+
});
|
|
96
108
|
return await this.withAgentSourceContext(ctx, payload.agentSource, async () => {
|
|
97
109
|
await this.deps.ensureProjectDiscovery(ctx);
|
|
98
110
|
const agent = this.deps.getAgent(payload.agentId);
|
|
99
111
|
if (!agent) {
|
|
112
|
+
logger.warn("Internal agent stream request referenced unknown agent", {
|
|
113
|
+
runId: payload.runId,
|
|
114
|
+
agentId: payload.agentId,
|
|
115
|
+
projectId: ctx.projectId,
|
|
116
|
+
projectSlug: ctx.projectSlug,
|
|
117
|
+
});
|
|
100
118
|
return this.respond(builder.json({ error: "Agent not found" }, 404));
|
|
101
119
|
}
|
|
102
120
|
const response = await createRuntimeAgentStreamResponse(payload, agent, this.deps);
|
|
121
|
+
logger.info("Internal agent stream response created", {
|
|
122
|
+
runId: payload.runId,
|
|
123
|
+
threadId: payload.threadId,
|
|
124
|
+
agentId: payload.agentId,
|
|
125
|
+
projectId: ctx.projectId,
|
|
126
|
+
projectSlug: ctx.projectSlug,
|
|
127
|
+
});
|
|
103
128
|
const runtimeOwnerInvokeUrl = await this.deps.resolveRuntimeOwnerInvokeUrl?.(req) ??
|
|
104
129
|
null;
|
|
105
130
|
const responseWithOwner = runtimeOwnerInvokeUrl
|
|
@@ -129,6 +154,11 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
129
154
|
projectId: ctx.projectId,
|
|
130
155
|
projectSlug: ctx.projectSlug,
|
|
131
156
|
});
|
|
157
|
+
logger.error("Internal agent stream handler failed", {
|
|
158
|
+
projectId: ctx.projectId,
|
|
159
|
+
projectSlug: ctx.projectSlug,
|
|
160
|
+
error: error instanceof Error ? error.message : String(error),
|
|
161
|
+
});
|
|
132
162
|
return this.respond(builder.json({ error: "Internal agent stream failed" }, 500));
|
|
133
163
|
}
|
|
134
164
|
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.141";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
|
@@ -12,7 +12,9 @@ import type { StreamTextResult, ToolSet } from "ai";
|
|
|
12
12
|
import { sendSSE } from "./sse-utils.js";
|
|
13
13
|
import { isDynamicTool } from "./tool-helpers.js";
|
|
14
14
|
import { serverLogger } from "../../utils/index.js";
|
|
15
|
+
import { isAnyDebugEnabled } from "../../utils/constants/env.js";
|
|
15
16
|
import { setActiveSpanAttributes, withSpan } from "../../observability/tracing/otlp-setup.js";
|
|
17
|
+
import { getHostEnv } from "../../platform/compat/process.js";
|
|
16
18
|
|
|
17
19
|
const logger = serverLogger.component("agent");
|
|
18
20
|
|
|
@@ -115,6 +117,65 @@ function stringifyToolError(output: unknown): string {
|
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
|
|
120
|
+
function summarizeDebugValue(value: unknown): unknown {
|
|
121
|
+
if (value instanceof Error) {
|
|
122
|
+
return {
|
|
123
|
+
name: value.name,
|
|
124
|
+
message: value.message,
|
|
125
|
+
stack: value.stack,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (typeof value === "string") {
|
|
130
|
+
return value.length > 500 ? `${value.slice(0, 500)}…` : value;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return value;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function logProviderToolPart(
|
|
137
|
+
partType: "tool-result" | "tool-error",
|
|
138
|
+
part: {
|
|
139
|
+
toolCallId: string;
|
|
140
|
+
toolName: string;
|
|
141
|
+
providerExecuted?: boolean;
|
|
142
|
+
dynamic?: boolean;
|
|
143
|
+
output?: unknown;
|
|
144
|
+
error?: unknown;
|
|
145
|
+
input?: unknown;
|
|
146
|
+
preliminary?: boolean;
|
|
147
|
+
isError?: boolean;
|
|
148
|
+
},
|
|
149
|
+
): void {
|
|
150
|
+
if (!isAnyDebugEnabled({ get: getHostEnv })) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (part.providerExecuted !== true) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (part.toolName !== "web_search" && part.toolName !== "web_fetch") {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
logger.debug("Provider tool stream part observed", {
|
|
163
|
+
partType,
|
|
164
|
+
toolCallId: part.toolCallId,
|
|
165
|
+
toolName: part.toolName,
|
|
166
|
+
providerExecuted: part.providerExecuted,
|
|
167
|
+
dynamic: part.dynamic,
|
|
168
|
+
preliminary: part.preliminary,
|
|
169
|
+
isError: part.isError,
|
|
170
|
+
outputType: typeof part.output,
|
|
171
|
+
errorType: typeof part.error,
|
|
172
|
+
inputType: typeof part.input,
|
|
173
|
+
output: summarizeDebugValue(part.output),
|
|
174
|
+
error: summarizeDebugValue(part.error),
|
|
175
|
+
input: summarizeDebugValue(part.input),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
118
179
|
export function createStreamState(): AIStreamState {
|
|
119
180
|
return {
|
|
120
181
|
accumulatedText: "",
|
|
@@ -228,6 +289,16 @@ export function processStream(
|
|
|
228
289
|
|
|
229
290
|
case "tool-result": {
|
|
230
291
|
const isError = "isError" in part && part.isError === true;
|
|
292
|
+
logProviderToolPart("tool-result", {
|
|
293
|
+
toolCallId: part.toolCallId,
|
|
294
|
+
toolName: part.toolName,
|
|
295
|
+
providerExecuted: "providerExecuted" in part ? part.providerExecuted : undefined,
|
|
296
|
+
dynamic: "dynamic" in part ? part.dynamic : undefined,
|
|
297
|
+
output: part.output,
|
|
298
|
+
input: "input" in part ? part.input : undefined,
|
|
299
|
+
preliminary: "preliminary" in part ? part.preliminary : undefined,
|
|
300
|
+
isError,
|
|
301
|
+
});
|
|
231
302
|
if (isError) {
|
|
232
303
|
state.toolResults.push({
|
|
233
304
|
toolCallId: part.toolCallId,
|
|
@@ -278,6 +349,14 @@ export function processStream(
|
|
|
278
349
|
}
|
|
279
350
|
|
|
280
351
|
case "tool-error": {
|
|
352
|
+
logProviderToolPart("tool-error", {
|
|
353
|
+
toolCallId: part.toolCallId,
|
|
354
|
+
toolName: part.toolName,
|
|
355
|
+
providerExecuted: "providerExecuted" in part ? part.providerExecuted : undefined,
|
|
356
|
+
dynamic: "dynamic" in part ? part.dynamic : undefined,
|
|
357
|
+
error: part.error,
|
|
358
|
+
input: "input" in part ? part.input : undefined,
|
|
359
|
+
});
|
|
281
360
|
state.toolResults.push({
|
|
282
361
|
toolCallId: part.toolCallId,
|
|
283
362
|
toolName: part.toolName,
|
|
@@ -17,8 +17,10 @@ import {
|
|
|
17
17
|
} from "./ag-ui-sse.js";
|
|
18
18
|
import { AgentRunCancelledError, type AgentRunSessionManager } from "./session-manager.js";
|
|
19
19
|
import type { RuntimeRunAgentInput } from "./schema.js";
|
|
20
|
+
import { serverLogger } from "../utils/index.js";
|
|
20
21
|
|
|
21
22
|
const anyObjectSchema = z.record(z.string(), z.unknown());
|
|
23
|
+
const logger = serverLogger.component("internal-agent-run-stream");
|
|
22
24
|
|
|
23
25
|
type RuntimeFilteredAgent = Agent & {
|
|
24
26
|
config: Agent["config"] & {
|
|
@@ -230,6 +232,14 @@ export async function createRuntimeAgentStreamResponse(
|
|
|
230
232
|
agent: Agent,
|
|
231
233
|
deps: RuntimeAgentStreamExecutionDeps,
|
|
232
234
|
): Promise<dntShim.Response> {
|
|
235
|
+
logger.info("Starting internal agent runtime stream", {
|
|
236
|
+
runId: input.runId,
|
|
237
|
+
threadId: input.threadId,
|
|
238
|
+
agentId: input.agentId,
|
|
239
|
+
messageCount: input.messages.length,
|
|
240
|
+
toolCount: input.tools.length,
|
|
241
|
+
contextCount: input.context.length,
|
|
242
|
+
});
|
|
233
243
|
const abortSignal = deps.sessionManager.startRun({
|
|
234
244
|
runId: input.runId,
|
|
235
245
|
threadId: input.threadId,
|
|
@@ -272,8 +282,19 @@ export async function createRuntimeAgentStreamResponse(
|
|
|
272
282
|
undefined,
|
|
273
283
|
abortSignal,
|
|
274
284
|
);
|
|
285
|
+
logger.info("Internal agent runtime stream attached", {
|
|
286
|
+
runId: input.runId,
|
|
287
|
+
threadId: input.threadId,
|
|
288
|
+
agentId: input.agentId,
|
|
289
|
+
});
|
|
275
290
|
} catch (error) {
|
|
276
291
|
deps.sessionManager.failRun(input.runId);
|
|
292
|
+
logger.error("Internal agent runtime stream setup failed", {
|
|
293
|
+
runId: input.runId,
|
|
294
|
+
threadId: input.threadId,
|
|
295
|
+
agentId: input.agentId,
|
|
296
|
+
error: error instanceof Error ? error.message : String(error),
|
|
297
|
+
});
|
|
277
298
|
throw error;
|
|
278
299
|
}
|
|
279
300
|
|
|
@@ -306,6 +327,11 @@ export async function createRuntimeAgentStreamResponse(
|
|
|
306
327
|
|
|
307
328
|
const abortHandler = () => {
|
|
308
329
|
aborted = true;
|
|
330
|
+
logger.warn("Internal agent runtime stream aborted", {
|
|
331
|
+
runId: input.runId,
|
|
332
|
+
threadId: input.threadId,
|
|
333
|
+
agentId: input.agentId,
|
|
334
|
+
});
|
|
309
335
|
reader.cancel(new AgentRunCancelledError()).catch(() => {});
|
|
310
336
|
};
|
|
311
337
|
|
|
@@ -324,6 +350,11 @@ export async function createRuntimeAgentStreamResponse(
|
|
|
324
350
|
throwIfAborted();
|
|
325
351
|
|
|
326
352
|
if (done) {
|
|
353
|
+
logger.info("Internal agent runtime stream reader completed", {
|
|
354
|
+
runId: input.runId,
|
|
355
|
+
threadId: input.threadId,
|
|
356
|
+
agentId: input.agentId,
|
|
357
|
+
});
|
|
327
358
|
break;
|
|
328
359
|
}
|
|
329
360
|
|
|
@@ -353,15 +384,35 @@ export async function createRuntimeAgentStreamResponse(
|
|
|
353
384
|
enqueueIfAttached(mappedEvent.event, mappedEvent.payload);
|
|
354
385
|
}
|
|
355
386
|
deps.sessionManager.completeRun(input.runId);
|
|
387
|
+
logger.info("Internal agent runtime stream finalized", {
|
|
388
|
+
runId: input.runId,
|
|
389
|
+
threadId: input.threadId,
|
|
390
|
+
agentId: input.agentId,
|
|
391
|
+
sawVisibleOutput: state.sawVisibleOutput,
|
|
392
|
+
sawTerminalError: state.sawTerminalError,
|
|
393
|
+
finishReason: state.metadata.finishReason,
|
|
394
|
+
});
|
|
356
395
|
} catch (error) {
|
|
357
396
|
if (error instanceof AgentRunCancelledError) {
|
|
358
397
|
deps.sessionManager.cancelRun(input.runId);
|
|
398
|
+
logger.warn("Internal agent runtime stream cancelled", {
|
|
399
|
+
runId: input.runId,
|
|
400
|
+
threadId: input.threadId,
|
|
401
|
+
agentId: input.agentId,
|
|
402
|
+
error: error.message,
|
|
403
|
+
});
|
|
359
404
|
enqueueIfAttached("RunError", {
|
|
360
405
|
code: "CANCELLED",
|
|
361
406
|
message: error.message,
|
|
362
407
|
});
|
|
363
408
|
} else {
|
|
364
409
|
deps.sessionManager.failRun(input.runId);
|
|
410
|
+
logger.error("Internal agent runtime stream failed", {
|
|
411
|
+
runId: input.runId,
|
|
412
|
+
threadId: input.threadId,
|
|
413
|
+
agentId: input.agentId,
|
|
414
|
+
error: error instanceof Error ? error.message : String(error),
|
|
415
|
+
});
|
|
365
416
|
enqueueIfAttached("RunError", {
|
|
366
417
|
code: "RUNTIME_ERROR",
|
|
367
418
|
message: error instanceof Error ? error.message : String(error),
|
|
@@ -372,10 +423,21 @@ export async function createRuntimeAgentStreamResponse(
|
|
|
372
423
|
if (clientAttached) {
|
|
373
424
|
controller.close();
|
|
374
425
|
}
|
|
426
|
+
logger.debug("Internal agent runtime stream response closed", {
|
|
427
|
+
runId: input.runId,
|
|
428
|
+
threadId: input.threadId,
|
|
429
|
+
agentId: input.agentId,
|
|
430
|
+
clientAttached,
|
|
431
|
+
});
|
|
375
432
|
}
|
|
376
433
|
},
|
|
377
434
|
cancel() {
|
|
378
435
|
clientAttached = false;
|
|
436
|
+
logger.info("Internal agent runtime client detached", {
|
|
437
|
+
runId: input.runId,
|
|
438
|
+
threadId: input.threadId,
|
|
439
|
+
agentId: input.agentId,
|
|
440
|
+
});
|
|
379
441
|
return Promise.resolve();
|
|
380
442
|
},
|
|
381
443
|
});
|
|
@@ -31,6 +31,7 @@ import { BaseHandler } from "../response/base.js";
|
|
|
31
31
|
import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
|
|
32
32
|
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
33
33
|
import { getHostEnv } from "../../../platform/compat/process.js";
|
|
34
|
+
import { serverLogger } from "../../../utils/index.js";
|
|
34
35
|
|
|
35
36
|
export interface AgentStreamHandlerDeps
|
|
36
37
|
extends RuntimeAgentDiscoveryDeps, RuntimeAgentStreamExecutionDeps {
|
|
@@ -42,6 +43,7 @@ const defaultDeps: AgentStreamHandlerDeps = {
|
|
|
42
43
|
sessionManager: agentRunSessionManager,
|
|
43
44
|
resolveRuntimeOwnerInvokeUrl,
|
|
44
45
|
};
|
|
46
|
+
const logger = serverLogger.component("agent-stream-handler");
|
|
45
47
|
|
|
46
48
|
type SourceContextFsWrapper = {
|
|
47
49
|
isMultiProjectMode?: () => boolean;
|
|
@@ -165,6 +167,16 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
165
167
|
expectedSubject: payload.runId,
|
|
166
168
|
expectedSurface: "studio",
|
|
167
169
|
});
|
|
170
|
+
logger.info("Accepted internal agent stream request", {
|
|
171
|
+
runId: payload.runId,
|
|
172
|
+
threadId: payload.threadId,
|
|
173
|
+
agentId: payload.agentId,
|
|
174
|
+
projectId: ctx.projectId,
|
|
175
|
+
projectSlug: ctx.projectSlug,
|
|
176
|
+
messageCount: payload.messages.length,
|
|
177
|
+
toolCount: payload.tools.length,
|
|
178
|
+
hasAgentSource: Boolean(payload.agentSource),
|
|
179
|
+
});
|
|
168
180
|
|
|
169
181
|
return await this.withAgentSourceContext(
|
|
170
182
|
ctx,
|
|
@@ -174,6 +186,12 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
174
186
|
|
|
175
187
|
const agent = this.deps.getAgent(payload.agentId);
|
|
176
188
|
if (!agent) {
|
|
189
|
+
logger.warn("Internal agent stream request referenced unknown agent", {
|
|
190
|
+
runId: payload.runId,
|
|
191
|
+
agentId: payload.agentId,
|
|
192
|
+
projectId: ctx.projectId,
|
|
193
|
+
projectSlug: ctx.projectSlug,
|
|
194
|
+
});
|
|
177
195
|
return this.respond(builder.json({ error: "Agent not found" }, 404));
|
|
178
196
|
}
|
|
179
197
|
|
|
@@ -182,6 +200,13 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
182
200
|
agent as Agent,
|
|
183
201
|
this.deps,
|
|
184
202
|
);
|
|
203
|
+
logger.info("Internal agent stream response created", {
|
|
204
|
+
runId: payload.runId,
|
|
205
|
+
threadId: payload.threadId,
|
|
206
|
+
agentId: payload.agentId,
|
|
207
|
+
projectId: ctx.projectId,
|
|
208
|
+
projectSlug: ctx.projectSlug,
|
|
209
|
+
});
|
|
185
210
|
const runtimeOwnerInvokeUrl = await this.deps.resolveRuntimeOwnerInvokeUrl?.(req) ??
|
|
186
211
|
null;
|
|
187
212
|
const responseWithOwner = runtimeOwnerInvokeUrl
|
|
@@ -224,6 +249,11 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
224
249
|
projectId: ctx.projectId,
|
|
225
250
|
projectSlug: ctx.projectSlug,
|
|
226
251
|
});
|
|
252
|
+
logger.error("Internal agent stream handler failed", {
|
|
253
|
+
projectId: ctx.projectId,
|
|
254
|
+
projectSlug: ctx.projectSlug,
|
|
255
|
+
error: error instanceof Error ? error.message : String(error),
|
|
256
|
+
});
|
|
227
257
|
return this.respond(builder.json({ error: "Internal agent stream failed" }, 500));
|
|
228
258
|
}
|
|
229
259
|
});
|