veryfront 0.1.63 → 0.1.65
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/index.d.ts +1 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +10 -2
- package/esm/src/channels/control-plane.d.ts +259 -0
- package/esm/src/channels/control-plane.d.ts.map +1 -0
- package/esm/src/channels/control-plane.js +212 -0
- package/esm/src/channels/invoke.d.ts +71 -44
- package/esm/src/channels/invoke.d.ts.map +1 -1
- package/esm/src/channels/invoke.js +33 -114
- package/esm/src/integrations/endpoint-executor.d.ts +1 -0
- package/esm/src/integrations/endpoint-executor.d.ts.map +1 -1
- package/esm/src/integrations/endpoint-executor.js +44 -0
- package/esm/src/internal-agents/ag-ui-sse.d.ts +35 -0
- package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -0
- package/esm/src/internal-agents/ag-ui-sse.js +263 -0
- package/esm/src/internal-agents/control-plane-auth.d.ts +20 -0
- package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -0
- package/esm/src/internal-agents/control-plane-auth.js +56 -0
- package/esm/src/internal-agents/request-body.d.ts +9 -0
- package/esm/src/internal-agents/request-body.d.ts.map +1 -0
- package/esm/src/internal-agents/request-body.js +28 -0
- package/esm/src/internal-agents/run-stream.d.ts +14 -0
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -0
- package/esm/src/internal-agents/run-stream.js +259 -0
- package/esm/src/internal-agents/schema.d.ts +268 -0
- package/esm/src/internal-agents/schema.d.ts.map +1 -0
- package/esm/src/internal-agents/schema.js +71 -0
- package/esm/src/internal-agents/session-manager.d.ts +63 -0
- package/esm/src/internal-agents/session-manager.d.ts.map +1 -0
- package/esm/src/internal-agents/session-manager.js +258 -0
- package/esm/src/platform/adapters/runtime/deno/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/runtime/deno/adapter.js +4 -13
- package/esm/src/platform/compat/process.d.ts.map +1 -1
- package/esm/src/platform/compat/process.js +42 -5
- package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts +11 -0
- package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/agent-run-cancel.handler.js +62 -0
- package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts +11 -0
- package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/agent-run-resume.handler.js +77 -0
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts +14 -0
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/agent-stream.handler.js +86 -0
- package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts +11 -0
- package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/internal-agents-list.handler.js +73 -0
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +8 -0
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/agent/runtime/index.ts +12 -2
- package/src/src/channels/control-plane.ts +332 -0
- package/src/src/channels/invoke.ts +44 -164
- package/src/src/integrations/endpoint-executor.ts +51 -0
- package/src/src/internal-agents/ag-ui-sse.ts +327 -0
- package/src/src/internal-agents/control-plane-auth.ts +82 -0
- package/src/src/internal-agents/request-body.ts +42 -0
- package/src/src/internal-agents/run-stream.ts +354 -0
- package/src/src/internal-agents/schema.ts +102 -0
- package/src/src/internal-agents/session-manager.ts +358 -0
- package/src/src/platform/adapters/runtime/deno/adapter.ts +9 -11
- package/src/src/platform/compat/process.ts +56 -3
- package/src/src/server/handlers/request/agent-run-cancel.handler.ts +86 -0
- package/src/src/server/handlers/request/agent-run-resume.handler.ts +108 -0
- package/src/src/server/handlers/request/agent-stream.handler.ts +125 -0
- package/src/src/server/handlers/request/internal-agents-list.handler.ts +100 -0
- package/src/src/server/runtime-handler/index.ts +8 -0
|
@@ -2,7 +2,7 @@ import * as dntShim from "../../../../../_dnt.shims.js";
|
|
|
2
2
|
import { createError, NOT_SUPPORTED, toError } from "../../../../errors/index.js";
|
|
3
3
|
import { join } from "../../../compat/path/index.js";
|
|
4
4
|
import { serverLogger } from "../../../../utils/index.js";
|
|
5
|
-
import { getEnvOverlayStorage } from "../../../compat/process.js";
|
|
5
|
+
import { env as getEnvObject, getEnv, getEnvOverlayStorage, setEnv, } from "../../../compat/process.js";
|
|
6
6
|
import { createFileWatcher, createWatcherIterator, enqueueWatchEvent, } from "../shared/watcher-queue.js";
|
|
7
7
|
import { stopManagedServer } from "../shared/server-lifecycle.js";
|
|
8
8
|
const logger = serverLogger.component("deno");
|
|
@@ -201,22 +201,13 @@ class DenoFileSystemAdapter {
|
|
|
201
201
|
}
|
|
202
202
|
class DenoEnvironmentAdapter {
|
|
203
203
|
get(key) {
|
|
204
|
-
|
|
205
|
-
return undefined;
|
|
206
|
-
return dntShim.Deno.env.get(key);
|
|
204
|
+
return getEnv(key);
|
|
207
205
|
}
|
|
208
206
|
set(key, value) {
|
|
209
|
-
|
|
210
|
-
throw NOT_SUPPORTED.create({
|
|
211
|
-
detail: "DenoEnvironmentAdapter.set() can only be used in Deno runtime",
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
dntShim.Deno.env.set(key, value);
|
|
207
|
+
setEnv(key, value);
|
|
215
208
|
}
|
|
216
209
|
toObject() {
|
|
217
|
-
|
|
218
|
-
return {};
|
|
219
|
-
return dntShim.Deno.env.toObject();
|
|
210
|
+
return getEnvObject();
|
|
220
211
|
}
|
|
221
212
|
}
|
|
222
213
|
class DenoServerAdapter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/compat/process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAKlD,KAAK,cAAc,GAAG,cAAc,cAAc,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,IAAI,cAAc,CAIzF;AAWD,6EAA6E;AAC7E,wBAAgB,OAAO,IAAI,MAAM,EAAE,CAIlC;AAED,yFAAyF;AACzF,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAIzC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAI5B;AAED,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAU7C;
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/compat/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,18 +55,45 @@ export function chdir(directory) {
|
|
|
55
55
|
}
|
|
56
56
|
throw new Error("chdir() is not supported in this runtime");
|
|
57
57
|
}
|
|
58
|
+
function getEnvOverlayStore() {
|
|
59
|
+
const storage = getEnvOverlayStorage();
|
|
60
|
+
const store = storage?.getStore();
|
|
61
|
+
return store instanceof Map ? store : null;
|
|
62
|
+
}
|
|
63
|
+
function getOverlayEnvValue(store, key) {
|
|
64
|
+
if (!store?.has(key)) {
|
|
65
|
+
return { hasValue: false, value: undefined };
|
|
66
|
+
}
|
|
67
|
+
const value = store.get(key);
|
|
68
|
+
return { hasValue: true, value: value ?? undefined };
|
|
69
|
+
}
|
|
58
70
|
export function env() {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
const base = IS_DENO
|
|
72
|
+
? dntShim.Deno.env.toObject()
|
|
73
|
+
: runtimeProcess
|
|
74
|
+
? { ...runtimeProcess.env }
|
|
75
|
+
: {};
|
|
76
|
+
const overlay = getEnvOverlayStore();
|
|
77
|
+
if (!overlay)
|
|
78
|
+
return base;
|
|
79
|
+
for (const [key, value] of overlay.entries()) {
|
|
80
|
+
if (value === null) {
|
|
81
|
+
delete base[key];
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
base[key] = value;
|
|
85
|
+
}
|
|
86
|
+
return base;
|
|
64
87
|
}
|
|
65
88
|
/**
|
|
66
89
|
* Read a host-level environment variable without consulting any project env overlay.
|
|
67
90
|
* Use this for framework-owned runtime configuration that should not be shadowed by tenant env.
|
|
68
91
|
*/
|
|
69
92
|
export function getHostEnv(key) {
|
|
93
|
+
const overlayResult = getOverlayEnvValue(getEnvOverlayStore(), key);
|
|
94
|
+
if (overlayResult.hasValue) {
|
|
95
|
+
return overlayResult.value;
|
|
96
|
+
}
|
|
70
97
|
if (IS_DENO)
|
|
71
98
|
return dntShim.Deno.env.get(key);
|
|
72
99
|
if (runtimeProcess)
|
|
@@ -156,6 +183,11 @@ export function getEnvBoolean(key, fallback = false, options = {}) {
|
|
|
156
183
|
return fallback;
|
|
157
184
|
}
|
|
158
185
|
export function setEnv(key, value) {
|
|
186
|
+
const overlay = getEnvOverlayStore();
|
|
187
|
+
if (overlay) {
|
|
188
|
+
overlay.set(key, value);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
159
191
|
if (IS_DENO) {
|
|
160
192
|
dntShim.Deno.env.set(key, value);
|
|
161
193
|
return;
|
|
@@ -167,6 +199,11 @@ export function setEnv(key, value) {
|
|
|
167
199
|
throw new Error("setEnv() is not supported in this runtime");
|
|
168
200
|
}
|
|
169
201
|
export function deleteEnv(key) {
|
|
202
|
+
const overlay = getEnvOverlayStore();
|
|
203
|
+
if (overlay) {
|
|
204
|
+
overlay.set(key, null);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
170
207
|
if (IS_DENO) {
|
|
171
208
|
dntShim.Deno.env.delete(key);
|
|
172
209
|
return;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { type AgentRunSessionManager } from "../../../internal-agents/session-manager.js";
|
|
3
|
+
import { BaseHandler } from "../response/base.js";
|
|
4
|
+
import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
|
|
5
|
+
export declare class AgentRunCancelHandler extends BaseHandler {
|
|
6
|
+
private readonly sessionManager;
|
|
7
|
+
metadata: HandlerMetadata;
|
|
8
|
+
constructor(sessionManager?: AgentRunSessionManager);
|
|
9
|
+
handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=agent-run-cancel.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run-cancel.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-run-cancel.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAKrD,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,6CAA6C,CAAC;AAMrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AASnG,qBAAa,qBAAsB,SAAQ,WAAW;IAOxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,cAAc,GAAE,sBAA+C;IAItF,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAkDhF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
|
|
2
|
+
import { agentRunSessionManager, } from "../../../internal-agents/session-manager.js";
|
|
3
|
+
import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
|
|
4
|
+
import { BaseHandler } from "../response/base.js";
|
|
5
|
+
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
6
|
+
const CANCEL_PATH_REGEX = /^\/internal\/agents\/runs\/([^/]+)$/;
|
|
7
|
+
function getRunId(pathname) {
|
|
8
|
+
return CANCEL_PATH_REGEX.exec(pathname)?.[1] ?? null;
|
|
9
|
+
}
|
|
10
|
+
export class AgentRunCancelHandler extends BaseHandler {
|
|
11
|
+
sessionManager;
|
|
12
|
+
metadata = {
|
|
13
|
+
name: "AgentRunCancelHandler",
|
|
14
|
+
priority: PRIORITY_MEDIUM_API,
|
|
15
|
+
patterns: [{ pattern: "/internal/agents/runs/", prefix: true, method: "DELETE" }],
|
|
16
|
+
};
|
|
17
|
+
constructor(sessionManager = agentRunSessionManager) {
|
|
18
|
+
super();
|
|
19
|
+
this.sessionManager = sessionManager;
|
|
20
|
+
}
|
|
21
|
+
async handle(req, ctx) {
|
|
22
|
+
if (!this.shouldHandle(req, ctx)) {
|
|
23
|
+
return this.continue();
|
|
24
|
+
}
|
|
25
|
+
const runId = getRunId(new URL(req.url).pathname);
|
|
26
|
+
if (!runId) {
|
|
27
|
+
return this.continue();
|
|
28
|
+
}
|
|
29
|
+
return this.withProxyContext(ctx, async () => {
|
|
30
|
+
const builder = this.createResponseBuilder(ctx)
|
|
31
|
+
.withCORS(req, ctx.securityConfig?.cors)
|
|
32
|
+
.withSecurity(ctx.securityConfig ?? undefined, req);
|
|
33
|
+
try {
|
|
34
|
+
const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
|
|
35
|
+
await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
36
|
+
expectedSubject: runId,
|
|
37
|
+
expectedSurface: "studio",
|
|
38
|
+
});
|
|
39
|
+
const accepted = this.sessionManager.cancelRun(runId);
|
|
40
|
+
if (accepted) {
|
|
41
|
+
return this.respond(builder.json({ accepted: true }, 202));
|
|
42
|
+
}
|
|
43
|
+
return this.respond(builder.build(null, 204));
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error instanceof InternalAgentRequestBodyTooLargeError) {
|
|
47
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
48
|
+
}
|
|
49
|
+
if (error instanceof ControlPlaneRequestError) {
|
|
50
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
51
|
+
}
|
|
52
|
+
this.logWarn("Internal agent run cancel failed", {
|
|
53
|
+
error: error instanceof Error ? error.message : String(error),
|
|
54
|
+
runId,
|
|
55
|
+
projectId: ctx.projectId,
|
|
56
|
+
projectSlug: ctx.projectSlug,
|
|
57
|
+
});
|
|
58
|
+
return this.respond(builder.json({ error: "Internal cancel failed" }, 500));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { type AgentRunSessionManager } from "../../../internal-agents/session-manager.js";
|
|
3
|
+
import { BaseHandler } from "../response/base.js";
|
|
4
|
+
import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
|
|
5
|
+
export declare class AgentRunResumeHandler extends BaseHandler {
|
|
6
|
+
private readonly sessionManager;
|
|
7
|
+
metadata: HandlerMetadata;
|
|
8
|
+
constructor(sessionManager?: AgentRunSessionManager);
|
|
9
|
+
handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=agent-run-resume.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run-resume.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-run-resume.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAKrD,OAAO,EACL,KAAK,sBAAsB,EAK5B,MAAM,6CAA6C,CAAC;AAOrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AASnG,qBAAa,qBAAsB,SAAQ,WAAW;IAOxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,cAAc,GAAE,sBAA+C;IAItF,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoEhF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
|
|
2
|
+
import { agentRunSessionManager, RunNotActiveError, ToolResultConflictError, ToolResultNotWaitingError, } from "../../../internal-agents/session-manager.js";
|
|
3
|
+
import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
|
|
4
|
+
import { ResumeSignalSchema } from "../../../internal-agents/schema.js";
|
|
5
|
+
import { BaseHandler } from "../response/base.js";
|
|
6
|
+
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
7
|
+
const RESUME_PATH_REGEX = /^\/internal\/agents\/runs\/([^/]+)\/resume$/;
|
|
8
|
+
function getRunId(pathname) {
|
|
9
|
+
return RESUME_PATH_REGEX.exec(pathname)?.[1] ?? null;
|
|
10
|
+
}
|
|
11
|
+
export class AgentRunResumeHandler extends BaseHandler {
|
|
12
|
+
sessionManager;
|
|
13
|
+
metadata = {
|
|
14
|
+
name: "AgentRunResumeHandler",
|
|
15
|
+
priority: PRIORITY_MEDIUM_API,
|
|
16
|
+
patterns: [{ pattern: "/internal/agents/runs/", prefix: true, method: "POST" }],
|
|
17
|
+
};
|
|
18
|
+
constructor(sessionManager = agentRunSessionManager) {
|
|
19
|
+
super();
|
|
20
|
+
this.sessionManager = sessionManager;
|
|
21
|
+
}
|
|
22
|
+
async handle(req, ctx) {
|
|
23
|
+
if (!this.shouldHandle(req, ctx)) {
|
|
24
|
+
return this.continue();
|
|
25
|
+
}
|
|
26
|
+
const runId = getRunId(new URL(req.url).pathname);
|
|
27
|
+
if (!runId) {
|
|
28
|
+
return this.continue();
|
|
29
|
+
}
|
|
30
|
+
return this.withProxyContext(ctx, async () => {
|
|
31
|
+
const builder = this.createResponseBuilder(ctx)
|
|
32
|
+
.withCORS(req, ctx.securityConfig?.cors)
|
|
33
|
+
.withSecurity(ctx.securityConfig ?? undefined, req);
|
|
34
|
+
try {
|
|
35
|
+
const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
|
|
36
|
+
await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
37
|
+
expectedSubject: runId,
|
|
38
|
+
expectedSurface: "studio",
|
|
39
|
+
});
|
|
40
|
+
const signal = ResumeSignalSchema.parse(JSON.parse(rawBody));
|
|
41
|
+
const outcome = this.sessionManager.submitToolResult(runId, {
|
|
42
|
+
toolCallId: signal.toolCallId,
|
|
43
|
+
result: signal.result,
|
|
44
|
+
isError: signal.isError,
|
|
45
|
+
});
|
|
46
|
+
return this.respond(builder.json(outcome, 200));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (error instanceof InternalAgentRequestBodyTooLargeError) {
|
|
50
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
51
|
+
}
|
|
52
|
+
if (error instanceof ControlPlaneRequestError) {
|
|
53
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
54
|
+
}
|
|
55
|
+
if (error instanceof SyntaxError || (error instanceof Error && error.name === "ZodError")) {
|
|
56
|
+
return this.respond(builder.json({ error: "Invalid resume request" }, 400));
|
|
57
|
+
}
|
|
58
|
+
if (error instanceof ToolResultConflictError) {
|
|
59
|
+
return this.respond(builder.json({ error: "TOOL_RESULT_CONFLICT" }, 409));
|
|
60
|
+
}
|
|
61
|
+
if (error instanceof ToolResultNotWaitingError) {
|
|
62
|
+
return this.respond(builder.json({ error: "TOOL_RESULT_NOT_WAITING" }, 409));
|
|
63
|
+
}
|
|
64
|
+
if (error instanceof RunNotActiveError) {
|
|
65
|
+
return this.respond(builder.json({ error: "RUN_NOT_ACTIVE" }, 410));
|
|
66
|
+
}
|
|
67
|
+
this.logWarn("Internal agent run resume failed", {
|
|
68
|
+
error: error instanceof Error ? error.message : String(error),
|
|
69
|
+
runId,
|
|
70
|
+
projectId: ctx.projectId,
|
|
71
|
+
projectSlug: ctx.projectSlug,
|
|
72
|
+
});
|
|
73
|
+
return this.respond(builder.json({ error: "Internal resume failed" }, 500));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { type RuntimeAgentDiscoveryDeps } from "../../../channels/control-plane.js";
|
|
3
|
+
import { type RuntimeAgentStreamExecutionDeps } from "../../../internal-agents/run-stream.js";
|
|
4
|
+
import { BaseHandler } from "../response/base.js";
|
|
5
|
+
import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
|
|
6
|
+
export interface AgentStreamHandlerDeps extends RuntimeAgentDiscoveryDeps, RuntimeAgentStreamExecutionDeps {
|
|
7
|
+
}
|
|
8
|
+
export declare class AgentStreamHandler extends BaseHandler {
|
|
9
|
+
private readonly deps;
|
|
10
|
+
metadata: HandlerMetadata;
|
|
11
|
+
constructor(deps?: AgentStreamHandlerDeps);
|
|
12
|
+
handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=agent-stream.handler.d.ts.map
|
|
@@ -0,0 +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;AAehD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;CAAG;AAsBvE,qBAAa,kBAAmB,SAAQ,WAAW;IAOrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIjE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAgEhF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
|
|
3
|
+
import { createRuntimeAgentStreamResponse, } from "../../../internal-agents/run-stream.js";
|
|
4
|
+
import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
|
|
5
|
+
import { INTERNAL_AGENT_STREAM_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
|
|
6
|
+
import { AgentRunAlreadyExistsError, agentRunSessionManager, } from "../../../internal-agents/session-manager.js";
|
|
7
|
+
import { RuntimeRunAgentInputSchema } from "../../../internal-agents/schema.js";
|
|
8
|
+
import { BaseHandler } from "../response/base.js";
|
|
9
|
+
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
10
|
+
const defaultDeps = {
|
|
11
|
+
...defaultChannelInvokeDeps,
|
|
12
|
+
sessionManager: agentRunSessionManager,
|
|
13
|
+
};
|
|
14
|
+
function applyBuilderHeaders(target, source) {
|
|
15
|
+
const headers = new dntShim.Headers(target.headers);
|
|
16
|
+
for (const [key, value] of source.entries()) {
|
|
17
|
+
if (!headers.has(key)) {
|
|
18
|
+
headers.set(key, value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return new dntShim.Response(target.body, {
|
|
22
|
+
status: target.status,
|
|
23
|
+
statusText: target.statusText,
|
|
24
|
+
headers,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export class AgentStreamHandler extends BaseHandler {
|
|
28
|
+
deps;
|
|
29
|
+
metadata = {
|
|
30
|
+
name: "AgentStreamHandler",
|
|
31
|
+
priority: PRIORITY_MEDIUM_API,
|
|
32
|
+
patterns: [{ pattern: "/internal/agents/stream", exact: true, method: "POST" }],
|
|
33
|
+
};
|
|
34
|
+
constructor(deps = defaultDeps) {
|
|
35
|
+
super();
|
|
36
|
+
this.deps = deps;
|
|
37
|
+
}
|
|
38
|
+
async handle(req, ctx) {
|
|
39
|
+
if (!this.shouldHandle(req, ctx)) {
|
|
40
|
+
return this.continue();
|
|
41
|
+
}
|
|
42
|
+
return this.withProxyContext(ctx, async () => {
|
|
43
|
+
const builder = this.createResponseBuilder(ctx)
|
|
44
|
+
.withCORS(req, ctx.securityConfig?.cors)
|
|
45
|
+
.withSecurity(ctx.securityConfig ?? undefined, req);
|
|
46
|
+
try {
|
|
47
|
+
const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_STREAM_MAX_BODY_BYTES);
|
|
48
|
+
const payload = RuntimeRunAgentInputSchema.parse(JSON.parse(rawBody));
|
|
49
|
+
await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
50
|
+
expectedSubject: payload.runId,
|
|
51
|
+
expectedSurface: "studio",
|
|
52
|
+
});
|
|
53
|
+
await this.deps.ensureProjectDiscovery(ctx);
|
|
54
|
+
const agent = this.deps.getAgent(payload.agentId);
|
|
55
|
+
if (!agent) {
|
|
56
|
+
return this.respond(builder.json({ error: "Agent not found" }, 404));
|
|
57
|
+
}
|
|
58
|
+
const response = await createRuntimeAgentStreamResponse(payload, agent, this.deps);
|
|
59
|
+
return this.respond(applyBuilderHeaders(response, builder.headers));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof InternalAgentRequestBodyTooLargeError) {
|
|
63
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
64
|
+
}
|
|
65
|
+
if (error instanceof ControlPlaneRequestError) {
|
|
66
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
67
|
+
}
|
|
68
|
+
if (error instanceof SyntaxError) {
|
|
69
|
+
return this.respond(builder.json({ error: "Invalid internal agent stream request" }, 400));
|
|
70
|
+
}
|
|
71
|
+
if (error instanceof AgentRunAlreadyExistsError) {
|
|
72
|
+
return this.respond(builder.json({ error: error.message }, 409));
|
|
73
|
+
}
|
|
74
|
+
if (error instanceof Error && error.name === "ZodError") {
|
|
75
|
+
return this.respond(builder.json({ error: "Invalid internal agent stream request" }, 400));
|
|
76
|
+
}
|
|
77
|
+
this.logWarn("Internal agent stream request failed", {
|
|
78
|
+
error: error instanceof Error ? error.message : String(error),
|
|
79
|
+
projectId: ctx.projectId,
|
|
80
|
+
projectSlug: ctx.projectSlug,
|
|
81
|
+
});
|
|
82
|
+
return this.respond(builder.json({ error: "Internal agent stream failed" }, 500));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { BaseHandler } from "../response/base.js";
|
|
3
|
+
import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
|
|
4
|
+
import { type RuntimeAgentDiscoveryDeps } from "../../../channels/control-plane.js";
|
|
5
|
+
export declare class InternalAgentsListHandler extends BaseHandler {
|
|
6
|
+
private readonly deps;
|
|
7
|
+
metadata: HandlerMetadata;
|
|
8
|
+
constructor(deps?: RuntimeAgentDiscoveryDeps);
|
|
9
|
+
handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=internal-agents-list.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-agents-list.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/internal-agents-list.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,oCAAoC,CAAC;AAc5C,qBAAa,yBAA0B,SAAQ,WAAW;IAO5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,yBAAoD;IAIjF,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAkEhF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { BaseHandler } from "../response/base.js";
|
|
2
|
+
import { ControlPlaneAgentsListRequestSchema, listRuntimeAgents, } from "../../../channels/control-plane.js";
|
|
3
|
+
import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
|
|
4
|
+
import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
|
|
5
|
+
import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
|
|
6
|
+
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
7
|
+
import { ZodError } from "zod";
|
|
8
|
+
export class InternalAgentsListHandler extends BaseHandler {
|
|
9
|
+
deps;
|
|
10
|
+
metadata = {
|
|
11
|
+
name: "InternalAgentsListHandler",
|
|
12
|
+
priority: PRIORITY_MEDIUM_API,
|
|
13
|
+
patterns: [{ pattern: "/internal/agents/list", exact: true, method: "POST" }],
|
|
14
|
+
};
|
|
15
|
+
constructor(deps = defaultChannelInvokeDeps) {
|
|
16
|
+
super();
|
|
17
|
+
this.deps = deps;
|
|
18
|
+
}
|
|
19
|
+
async handle(req, ctx) {
|
|
20
|
+
if (!this.shouldHandle(req, ctx)) {
|
|
21
|
+
return this.continue();
|
|
22
|
+
}
|
|
23
|
+
return this.withProxyContext(ctx, async () => {
|
|
24
|
+
const builder = this.createResponseBuilder(ctx)
|
|
25
|
+
.withCORS(req, ctx.securityConfig?.cors)
|
|
26
|
+
.withSecurity(ctx.securityConfig ?? undefined, req);
|
|
27
|
+
try {
|
|
28
|
+
const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
|
|
29
|
+
const payload = ControlPlaneAgentsListRequestSchema.parse(JSON.parse(rawBody));
|
|
30
|
+
const claims = await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
31
|
+
expectedSubject: payload.requestId,
|
|
32
|
+
expectedSurface: payload.surface,
|
|
33
|
+
});
|
|
34
|
+
if (payload.projectId !== claims.project_id ||
|
|
35
|
+
(ctx.projectId !== undefined && payload.projectId !== ctx.projectId)) {
|
|
36
|
+
this.logWarn("Internal agents list request body did not match signed claims", {
|
|
37
|
+
projectSlug: ctx.projectSlug,
|
|
38
|
+
projectId: ctx.projectId,
|
|
39
|
+
requestId: payload.requestId,
|
|
40
|
+
signedRequestId: claims.sub,
|
|
41
|
+
surface: payload.surface,
|
|
42
|
+
signedSurface: claims.surface,
|
|
43
|
+
});
|
|
44
|
+
return this.respond(builder.json({ error: "Invalid control-plane signature" }, 401));
|
|
45
|
+
}
|
|
46
|
+
const response = await listRuntimeAgents(ctx, this.deps);
|
|
47
|
+
return this.respond(builder.json(response, 200));
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof InternalAgentRequestBodyTooLargeError) {
|
|
51
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
52
|
+
}
|
|
53
|
+
if (error instanceof ControlPlaneRequestError) {
|
|
54
|
+
this.logWarn("Internal agents list signature verification failed", {
|
|
55
|
+
error: error.message,
|
|
56
|
+
projectSlug: ctx.projectSlug,
|
|
57
|
+
projectId: ctx.projectId,
|
|
58
|
+
});
|
|
59
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
60
|
+
}
|
|
61
|
+
if (error instanceof SyntaxError || error instanceof ZodError) {
|
|
62
|
+
this.logWarn("Internal agents list request validation failed", {
|
|
63
|
+
error: error instanceof Error ? error.message : String(error),
|
|
64
|
+
projectSlug: ctx.projectSlug,
|
|
65
|
+
projectId: ctx.projectId,
|
|
66
|
+
});
|
|
67
|
+
return this.respond(builder.json({ error: "Invalid internal agents request" }, 400));
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAQlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAQlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6F7D,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAMtF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CAC/C;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,qBAAsC,GAC3C,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA4anF;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -42,6 +42,10 @@ import { HMRHandler } from "../handlers/preview/hmr.handler.js";
|
|
|
42
42
|
import { MarkdownPreviewHandler } from "../handlers/preview/markdown-preview.handler.js";
|
|
43
43
|
import { OpenAPIHandler } from "../handlers/request/openapi.handler.js";
|
|
44
44
|
import { OpenAPIDocsHandler } from "../handlers/request/openapi-docs.handler.js";
|
|
45
|
+
import { InternalAgentsListHandler } from "../handlers/request/internal-agents-list.handler.js";
|
|
46
|
+
import { AgentStreamHandler } from "../handlers/request/agent-stream.handler.js";
|
|
47
|
+
import { AgentRunResumeHandler } from "../handlers/request/agent-run-resume.handler.js";
|
|
48
|
+
import { AgentRunCancelHandler } from "../handlers/request/agent-run-cancel.handler.js";
|
|
45
49
|
import { ChannelInvokeHandler } from "../handlers/request/channel-invoke.handler.js";
|
|
46
50
|
import { DevDashboardHandler } from "../handlers/dev/dashboard/index.js";
|
|
47
51
|
import { ProjectsHandler } from "../handlers/dev/projects/index.js";
|
|
@@ -124,6 +128,10 @@ export function createVeryfrontHandler(projectDir, adapter, opts = { projectDir
|
|
|
124
128
|
new DebugContextHandler(),
|
|
125
129
|
new OpenAPIHandler(),
|
|
126
130
|
new OpenAPIDocsHandler(),
|
|
131
|
+
new InternalAgentsListHandler(),
|
|
132
|
+
new AgentStreamHandler(),
|
|
133
|
+
new AgentRunResumeHandler(),
|
|
134
|
+
new AgentRunCancelHandler(),
|
|
127
135
|
new ChannelInvokeHandler(),
|
|
128
136
|
new DevDashboardHandler(),
|
|
129
137
|
new ProjectsHandler(),
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
|
@@ -243,6 +243,7 @@ export class AgentRuntime {
|
|
|
243
243
|
callbacks?: {
|
|
244
244
|
onToolCall?: (toolCall: ToolCall) => void;
|
|
245
245
|
onChunk?: (chunk: string) => void;
|
|
246
|
+
onFinish?: (response: AgentResponse) => void;
|
|
246
247
|
},
|
|
247
248
|
modelOverride?: string,
|
|
248
249
|
maxOutputTokensOverride?: number,
|
|
@@ -298,7 +299,7 @@ export class AgentRuntime {
|
|
|
298
299
|
});
|
|
299
300
|
sendSSE(controller, encoder, { type: "text-start", id: textPartId });
|
|
300
301
|
|
|
301
|
-
await this.executeAgentLoopStreaming(
|
|
302
|
+
const response = await this.executeAgentLoopStreaming(
|
|
302
303
|
systemPrompt,
|
|
303
304
|
memoryMessages,
|
|
304
305
|
controller,
|
|
@@ -310,6 +311,7 @@ export class AgentRuntime {
|
|
|
310
311
|
languageModel,
|
|
311
312
|
maxOutputTokensOverride,
|
|
312
313
|
);
|
|
314
|
+
callbacks?.onFinish?.(response);
|
|
313
315
|
|
|
314
316
|
sendSSE(controller, encoder, { type: "text-end", id: textPartId });
|
|
315
317
|
sendSSE(controller, encoder, { type: "message-finish" });
|
|
@@ -479,7 +481,10 @@ export class AgentRuntime {
|
|
|
479
481
|
toolCall.status = "executing";
|
|
480
482
|
const startTime = Date.now();
|
|
481
483
|
|
|
482
|
-
const result = await executeTool(tc.toolName, toolCall.args, {
|
|
484
|
+
const result = await executeTool(tc.toolName, toolCall.args, {
|
|
485
|
+
agentId: this.id,
|
|
486
|
+
toolCallId: tc.toolCallId,
|
|
487
|
+
});
|
|
483
488
|
|
|
484
489
|
toolCall.status = "completed";
|
|
485
490
|
toolCall.result = result;
|
|
@@ -561,6 +566,7 @@ export class AgentRuntime {
|
|
|
561
566
|
callbacks?: {
|
|
562
567
|
onToolCall?: (toolCall: ToolCall) => void;
|
|
563
568
|
onChunk?: (chunk: string) => void;
|
|
569
|
+
onFinish?: (response: AgentResponse) => void;
|
|
564
570
|
},
|
|
565
571
|
textPartId?: string,
|
|
566
572
|
toolContext?: Record<string, unknown>,
|
|
@@ -590,6 +596,7 @@ export class AgentRuntime {
|
|
|
590
596
|
|
|
591
597
|
// Request-scoped skill policy (not class-level mutable state)
|
|
592
598
|
let activeSkillPolicy: string[] | undefined;
|
|
599
|
+
let finalFinishReason: string | undefined;
|
|
593
600
|
|
|
594
601
|
for (let step = 0; step < maxSteps; step++) {
|
|
595
602
|
sendSSE(controller, encoder, { type: "step-start" });
|
|
@@ -617,6 +624,7 @@ export class AgentRuntime {
|
|
|
617
624
|
onChunk: callbacks?.onChunk,
|
|
618
625
|
onUsage: (usage) => accumulateUsage(totalUsage, usage),
|
|
619
626
|
});
|
|
627
|
+
finalFinishReason = state.finishReason ?? finalFinishReason;
|
|
620
628
|
|
|
621
629
|
const streamParts: MessagePart[] = [];
|
|
622
630
|
if (state.accumulatedText) streamParts.push({ type: "text", text: state.accumulatedText });
|
|
@@ -707,6 +715,7 @@ export class AgentRuntime {
|
|
|
707
715
|
|
|
708
716
|
const result = await executeTool(tc.name, toolCall.args, {
|
|
709
717
|
agentId: this.id,
|
|
718
|
+
toolCallId: tc.id,
|
|
710
719
|
...toolContext,
|
|
711
720
|
});
|
|
712
721
|
|
|
@@ -768,6 +777,7 @@ export class AgentRuntime {
|
|
|
768
777
|
toolCalls,
|
|
769
778
|
status: "completed",
|
|
770
779
|
usage: totalUsage,
|
|
780
|
+
metadata: finalFinishReason ? { finishReason: finalFinishReason } : undefined,
|
|
771
781
|
};
|
|
772
782
|
}
|
|
773
783
|
|