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.
Files changed (68) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/agent/runtime/index.d.ts +1 -0
  3. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  4. package/esm/src/agent/runtime/index.js +10 -2
  5. package/esm/src/channels/control-plane.d.ts +259 -0
  6. package/esm/src/channels/control-plane.d.ts.map +1 -0
  7. package/esm/src/channels/control-plane.js +212 -0
  8. package/esm/src/channels/invoke.d.ts +71 -44
  9. package/esm/src/channels/invoke.d.ts.map +1 -1
  10. package/esm/src/channels/invoke.js +33 -114
  11. package/esm/src/integrations/endpoint-executor.d.ts +1 -0
  12. package/esm/src/integrations/endpoint-executor.d.ts.map +1 -1
  13. package/esm/src/integrations/endpoint-executor.js +44 -0
  14. package/esm/src/internal-agents/ag-ui-sse.d.ts +35 -0
  15. package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -0
  16. package/esm/src/internal-agents/ag-ui-sse.js +263 -0
  17. package/esm/src/internal-agents/control-plane-auth.d.ts +20 -0
  18. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -0
  19. package/esm/src/internal-agents/control-plane-auth.js +56 -0
  20. package/esm/src/internal-agents/request-body.d.ts +9 -0
  21. package/esm/src/internal-agents/request-body.d.ts.map +1 -0
  22. package/esm/src/internal-agents/request-body.js +28 -0
  23. package/esm/src/internal-agents/run-stream.d.ts +14 -0
  24. package/esm/src/internal-agents/run-stream.d.ts.map +1 -0
  25. package/esm/src/internal-agents/run-stream.js +259 -0
  26. package/esm/src/internal-agents/schema.d.ts +268 -0
  27. package/esm/src/internal-agents/schema.d.ts.map +1 -0
  28. package/esm/src/internal-agents/schema.js +71 -0
  29. package/esm/src/internal-agents/session-manager.d.ts +63 -0
  30. package/esm/src/internal-agents/session-manager.d.ts.map +1 -0
  31. package/esm/src/internal-agents/session-manager.js +258 -0
  32. package/esm/src/platform/adapters/runtime/deno/adapter.d.ts.map +1 -1
  33. package/esm/src/platform/adapters/runtime/deno/adapter.js +4 -13
  34. package/esm/src/platform/compat/process.d.ts.map +1 -1
  35. package/esm/src/platform/compat/process.js +42 -5
  36. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts +11 -0
  37. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -0
  38. package/esm/src/server/handlers/request/agent-run-cancel.handler.js +62 -0
  39. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts +11 -0
  40. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -0
  41. package/esm/src/server/handlers/request/agent-run-resume.handler.js +77 -0
  42. package/esm/src/server/handlers/request/agent-stream.handler.d.ts +14 -0
  43. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -0
  44. package/esm/src/server/handlers/request/agent-stream.handler.js +86 -0
  45. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts +11 -0
  46. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -0
  47. package/esm/src/server/handlers/request/internal-agents-list.handler.js +73 -0
  48. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  49. package/esm/src/server/runtime-handler/index.js +8 -0
  50. package/package.json +1 -1
  51. package/src/deno.js +1 -1
  52. package/src/src/agent/runtime/index.ts +12 -2
  53. package/src/src/channels/control-plane.ts +332 -0
  54. package/src/src/channels/invoke.ts +44 -164
  55. package/src/src/integrations/endpoint-executor.ts +51 -0
  56. package/src/src/internal-agents/ag-ui-sse.ts +327 -0
  57. package/src/src/internal-agents/control-plane-auth.ts +82 -0
  58. package/src/src/internal-agents/request-body.ts +42 -0
  59. package/src/src/internal-agents/run-stream.ts +354 -0
  60. package/src/src/internal-agents/schema.ts +102 -0
  61. package/src/src/internal-agents/session-manager.ts +358 -0
  62. package/src/src/platform/adapters/runtime/deno/adapter.ts +9 -11
  63. package/src/src/platform/compat/process.ts +56 -3
  64. package/src/src/server/handlers/request/agent-run-cancel.handler.ts +86 -0
  65. package/src/src/server/handlers/request/agent-run-resume.handler.ts +108 -0
  66. package/src/src/server/handlers/request/agent-stream.handler.ts +125 -0
  67. package/src/src/server/handlers/request/internal-agents-list.handler.ts +100 -0
  68. 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
- if (typeof dntShim.Deno === "undefined" || typeof dntShim.Deno.env === "undefined")
205
- return undefined;
206
- return dntShim.Deno.env.get(key);
204
+ return getEnv(key);
207
205
  }
208
206
  set(key, value) {
209
- if (typeof dntShim.Deno === "undefined" || typeof dntShim.Deno.env === "undefined") {
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
- if (typeof dntShim.Deno === "undefined" || typeof dntShim.Deno.env === "undefined")
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":"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"}
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
- if (IS_DENO)
60
- return dntShim.Deno.env.toObject();
61
- if (runtimeProcess)
62
- return runtimeProcess.env;
63
- return {};
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;AAyF7D,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,CAwanF;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.63",
3
+ "version": "0.1.65",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.63",
3
+ "version": "0.1.65",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -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, { agentId: this.id });
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