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
@@ -0,0 +1,125 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import type { Agent } from "../../../agent/index.js";
3
+ import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
4
+ import { type RuntimeAgentDiscoveryDeps } from "../../../channels/control-plane.js";
5
+ import {
6
+ createRuntimeAgentStreamResponse,
7
+ type RuntimeAgentStreamExecutionDeps,
8
+ } from "../../../internal-agents/run-stream.js";
9
+ import {
10
+ ControlPlaneRequestError,
11
+ verifyControlPlaneRequest,
12
+ } from "../../../internal-agents/control-plane-auth.js";
13
+ import {
14
+ INTERNAL_AGENT_STREAM_MAX_BODY_BYTES,
15
+ InternalAgentRequestBodyTooLargeError,
16
+ readInternalAgentRequestBody,
17
+ } from "../../../internal-agents/request-body.js";
18
+ import {
19
+ AgentRunAlreadyExistsError,
20
+ agentRunSessionManager,
21
+ } from "../../../internal-agents/session-manager.js";
22
+ import { RuntimeRunAgentInputSchema } from "../../../internal-agents/schema.js";
23
+ import { BaseHandler } from "../response/base.js";
24
+ import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
25
+ import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
26
+
27
+ export interface AgentStreamHandlerDeps
28
+ extends RuntimeAgentDiscoveryDeps, RuntimeAgentStreamExecutionDeps {}
29
+
30
+ const defaultDeps: AgentStreamHandlerDeps = {
31
+ ...defaultChannelInvokeDeps,
32
+ sessionManager: agentRunSessionManager,
33
+ };
34
+
35
+ function applyBuilderHeaders(target: dntShim.Response, source: dntShim.Headers): dntShim.Response {
36
+ const headers = new dntShim.Headers(target.headers);
37
+ for (const [key, value] of source.entries()) {
38
+ if (!headers.has(key)) {
39
+ headers.set(key, value);
40
+ }
41
+ }
42
+
43
+ return new dntShim.Response(target.body, {
44
+ status: target.status,
45
+ statusText: target.statusText,
46
+ headers,
47
+ });
48
+ }
49
+
50
+ export class AgentStreamHandler extends BaseHandler {
51
+ metadata: HandlerMetadata = {
52
+ name: "AgentStreamHandler",
53
+ priority: PRIORITY_MEDIUM_API as HandlerPriority,
54
+ patterns: [{ pattern: "/internal/agents/stream", exact: true, method: "POST" }],
55
+ };
56
+
57
+ constructor(private readonly deps: AgentStreamHandlerDeps = defaultDeps) {
58
+ super();
59
+ }
60
+
61
+ async handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult> {
62
+ if (!this.shouldHandle(req, ctx)) {
63
+ return this.continue();
64
+ }
65
+
66
+ return this.withProxyContext(ctx, async () => {
67
+ const builder = this.createResponseBuilder(ctx)
68
+ .withCORS(req, ctx.securityConfig?.cors)
69
+ .withSecurity(ctx.securityConfig ?? undefined, req);
70
+
71
+ try {
72
+ const rawBody = await readInternalAgentRequestBody(
73
+ req,
74
+ INTERNAL_AGENT_STREAM_MAX_BODY_BYTES,
75
+ );
76
+ const payload = RuntimeRunAgentInputSchema.parse(JSON.parse(rawBody));
77
+ await verifyControlPlaneRequest(req, ctx, rawBody, {
78
+ expectedSubject: payload.runId,
79
+ expectedSurface: "studio",
80
+ });
81
+
82
+ await this.deps.ensureProjectDiscovery(ctx);
83
+
84
+ const agent = this.deps.getAgent(payload.agentId);
85
+ if (!agent) {
86
+ return this.respond(builder.json({ error: "Agent not found" }, 404));
87
+ }
88
+
89
+ const response = await createRuntimeAgentStreamResponse(payload, agent as Agent, this.deps);
90
+ return this.respond(applyBuilderHeaders(response, builder.headers));
91
+ } catch (error) {
92
+ if (error instanceof InternalAgentRequestBodyTooLargeError) {
93
+ return this.respond(builder.json({ error: error.message }, error.status));
94
+ }
95
+
96
+ if (error instanceof ControlPlaneRequestError) {
97
+ return this.respond(builder.json({ error: error.message }, error.status));
98
+ }
99
+
100
+ if (error instanceof SyntaxError) {
101
+ return this.respond(
102
+ builder.json({ error: "Invalid internal agent stream request" }, 400),
103
+ );
104
+ }
105
+
106
+ if (error instanceof AgentRunAlreadyExistsError) {
107
+ return this.respond(builder.json({ error: error.message }, 409));
108
+ }
109
+
110
+ if (error instanceof Error && error.name === "ZodError") {
111
+ return this.respond(
112
+ builder.json({ error: "Invalid internal agent stream request" }, 400),
113
+ );
114
+ }
115
+
116
+ this.logWarn("Internal agent stream request failed", {
117
+ error: error instanceof Error ? error.message : String(error),
118
+ projectId: ctx.projectId,
119
+ projectSlug: ctx.projectSlug,
120
+ });
121
+ return this.respond(builder.json({ error: "Internal agent stream failed" }, 500));
122
+ }
123
+ });
124
+ }
125
+ }
@@ -0,0 +1,100 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { BaseHandler } from "../response/base.js";
3
+ import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
4
+ import {
5
+ type ControlPlaneAgentsListRequest,
6
+ ControlPlaneAgentsListRequestSchema,
7
+ listRuntimeAgents,
8
+ type RuntimeAgentDiscoveryDeps,
9
+ } from "../../../channels/control-plane.js";
10
+ import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
11
+ import {
12
+ ControlPlaneRequestError,
13
+ verifyControlPlaneRequest,
14
+ } from "../../../internal-agents/control-plane-auth.js";
15
+ import {
16
+ INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES,
17
+ InternalAgentRequestBodyTooLargeError,
18
+ readInternalAgentRequestBody,
19
+ } from "../../../internal-agents/request-body.js";
20
+ import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
21
+ import { ZodError } from "zod";
22
+
23
+ export class InternalAgentsListHandler extends BaseHandler {
24
+ metadata: HandlerMetadata = {
25
+ name: "InternalAgentsListHandler",
26
+ priority: PRIORITY_MEDIUM_API as HandlerPriority,
27
+ patterns: [{ pattern: "/internal/agents/list", exact: true, method: "POST" }],
28
+ };
29
+
30
+ constructor(private readonly deps: RuntimeAgentDiscoveryDeps = defaultChannelInvokeDeps) {
31
+ super();
32
+ }
33
+
34
+ async handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult> {
35
+ if (!this.shouldHandle(req, ctx)) {
36
+ return this.continue();
37
+ }
38
+
39
+ return this.withProxyContext(ctx, async () => {
40
+ const builder = this.createResponseBuilder(ctx)
41
+ .withCORS(req, ctx.securityConfig?.cors)
42
+ .withSecurity(ctx.securityConfig ?? undefined, req);
43
+
44
+ try {
45
+ const rawBody = await readInternalAgentRequestBody(
46
+ req,
47
+ INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES,
48
+ );
49
+ const payload: ControlPlaneAgentsListRequest = ControlPlaneAgentsListRequestSchema.parse(
50
+ JSON.parse(rawBody),
51
+ );
52
+ const claims = await verifyControlPlaneRequest(req, ctx, rawBody, {
53
+ expectedSubject: payload.requestId,
54
+ expectedSurface: payload.surface,
55
+ });
56
+
57
+ if (
58
+ payload.projectId !== claims.project_id ||
59
+ (ctx.projectId !== undefined && payload.projectId !== ctx.projectId)
60
+ ) {
61
+ this.logWarn("Internal agents list request body did not match signed claims", {
62
+ projectSlug: ctx.projectSlug,
63
+ projectId: ctx.projectId,
64
+ requestId: payload.requestId,
65
+ signedRequestId: claims.sub,
66
+ surface: payload.surface,
67
+ signedSurface: claims.surface,
68
+ });
69
+ return this.respond(builder.json({ error: "Invalid control-plane signature" }, 401));
70
+ }
71
+ const response = await listRuntimeAgents(ctx, this.deps);
72
+ return this.respond(builder.json(response, 200));
73
+ } catch (error) {
74
+ if (error instanceof InternalAgentRequestBodyTooLargeError) {
75
+ return this.respond(builder.json({ error: error.message }, error.status));
76
+ }
77
+
78
+ if (error instanceof ControlPlaneRequestError) {
79
+ this.logWarn("Internal agents list signature verification failed", {
80
+ error: error.message,
81
+ projectSlug: ctx.projectSlug,
82
+ projectId: ctx.projectId,
83
+ });
84
+ return this.respond(builder.json({ error: error.message }, error.status));
85
+ }
86
+
87
+ if (error instanceof SyntaxError || error instanceof ZodError) {
88
+ this.logWarn("Internal agents list request validation failed", {
89
+ error: error instanceof Error ? error.message : String(error),
90
+ projectSlug: ctx.projectSlug,
91
+ projectId: ctx.projectId,
92
+ });
93
+ return this.respond(builder.json({ error: "Invalid internal agents request" }, 400));
94
+ }
95
+
96
+ throw error;
97
+ }
98
+ });
99
+ }
100
+ }
@@ -53,6 +53,10 @@ import { HMRHandler } from "../handlers/preview/hmr.handler.js";
53
53
  import { MarkdownPreviewHandler } from "../handlers/preview/markdown-preview.handler.js";
54
54
  import { OpenAPIHandler } from "../handlers/request/openapi.handler.js";
55
55
  import { OpenAPIDocsHandler } from "../handlers/request/openapi-docs.handler.js";
56
+ import { InternalAgentsListHandler } from "../handlers/request/internal-agents-list.handler.js";
57
+ import { AgentStreamHandler } from "../handlers/request/agent-stream.handler.js";
58
+ import { AgentRunResumeHandler } from "../handlers/request/agent-run-resume.handler.js";
59
+ import { AgentRunCancelHandler } from "../handlers/request/agent-run-cancel.handler.js";
56
60
  import { ChannelInvokeHandler } from "../handlers/request/channel-invoke.handler.js";
57
61
  import { DevDashboardHandler } from "../handlers/dev/dashboard/index.js";
58
62
  import { ProjectsHandler } from "../handlers/dev/projects/index.js";
@@ -205,6 +209,10 @@ export function createVeryfrontHandler(
205
209
  new DebugContextHandler(),
206
210
  new OpenAPIHandler(),
207
211
  new OpenAPIDocsHandler(),
212
+ new InternalAgentsListHandler(),
213
+ new AgentStreamHandler(),
214
+ new AgentRunResumeHandler(),
215
+ new AgentRunCancelHandler(),
208
216
  new ChannelInvokeHandler(),
209
217
  new DevDashboardHandler(),
210
218
  new ProjectsHandler(),