veryfront 0.1.74 → 0.1.76

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 (122) hide show
  1. package/README.md +2 -0
  2. package/esm/cli/commands/files/command.d.ts +3 -3
  3. package/esm/cli/commands/knowledge/command.d.ts +2 -0
  4. package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
  5. package/esm/cli/commands/knowledge/command.js +64 -1
  6. package/esm/deno.d.ts +7 -0
  7. package/esm/deno.js +13 -6
  8. package/esm/src/data/data-fetcher.d.ts +11 -1
  9. package/esm/src/data/data-fetcher.d.ts.map +1 -1
  10. package/esm/src/data/data-fetcher.js +5 -2
  11. package/esm/src/data/index.d.ts +1 -1
  12. package/esm/src/data/index.d.ts.map +1 -1
  13. package/esm/src/data/server-data-fetcher.d.ts +14 -1
  14. package/esm/src/data/server-data-fetcher.d.ts.map +1 -1
  15. package/esm/src/data/server-data-fetcher.js +65 -3
  16. package/esm/src/jobs/index.d.ts +34 -0
  17. package/esm/src/jobs/index.d.ts.map +1 -0
  18. package/esm/src/jobs/index.js +33 -0
  19. package/esm/src/jobs/jobs-client.d.ts +134 -0
  20. package/esm/src/jobs/jobs-client.d.ts.map +1 -0
  21. package/esm/src/jobs/jobs-client.js +218 -0
  22. package/esm/src/jobs/schemas.d.ts +1304 -0
  23. package/esm/src/jobs/schemas.d.ts.map +1 -0
  24. package/esm/src/jobs/schemas.js +159 -0
  25. package/esm/src/platform/adapters/veryfront-api-client/retry-handler.d.ts +4 -0
  26. package/esm/src/platform/adapters/veryfront-api-client/retry-handler.d.ts.map +1 -1
  27. package/esm/src/platform/adapters/veryfront-api-client/retry-handler.js +12 -6
  28. package/esm/src/proxy/handler.d.ts.map +1 -1
  29. package/esm/src/proxy/handler.js +21 -21
  30. package/esm/src/rendering/orchestrator/lifecycle.d.ts +4 -0
  31. package/esm/src/rendering/orchestrator/lifecycle.d.ts.map +1 -1
  32. package/esm/src/rendering/orchestrator/lifecycle.js +8 -0
  33. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  34. package/esm/src/rendering/orchestrator/pipeline.js +6 -1
  35. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts +26 -1
  36. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
  37. package/esm/src/rendering/orchestrator/ssr-orchestrator.js +77 -1
  38. package/esm/src/routing/api/handler.d.ts.map +1 -1
  39. package/esm/src/routing/api/handler.js +6 -2
  40. package/esm/src/routing/api/route-executor.d.ts +8 -2
  41. package/esm/src/routing/api/route-executor.d.ts.map +1 -1
  42. package/esm/src/routing/api/route-executor.js +158 -3
  43. package/esm/src/security/deno-permissions.d.ts +7 -1
  44. package/esm/src/security/deno-permissions.d.ts.map +1 -1
  45. package/esm/src/security/deno-permissions.js +12 -1
  46. package/esm/src/security/sandbox/project-worker.d.ts +61 -0
  47. package/esm/src/security/sandbox/project-worker.d.ts.map +1 -0
  48. package/esm/src/security/sandbox/project-worker.js +318 -0
  49. package/esm/src/security/sandbox/worker-permissions.d.ts +30 -0
  50. package/esm/src/security/sandbox/worker-permissions.d.ts.map +1 -0
  51. package/esm/src/security/sandbox/worker-permissions.js +63 -0
  52. package/esm/src/security/sandbox/worker-pool.d.ts +87 -0
  53. package/esm/src/security/sandbox/worker-pool.d.ts.map +1 -0
  54. package/esm/src/security/sandbox/worker-pool.js +359 -0
  55. package/esm/src/security/sandbox/worker-types.d.ts +167 -0
  56. package/esm/src/security/sandbox/worker-types.d.ts.map +1 -0
  57. package/esm/src/security/sandbox/worker-types.js +19 -0
  58. package/esm/src/server/handlers/request/internal-tasks-list.handler.d.ts +11 -0
  59. package/esm/src/server/handlers/request/internal-tasks-list.handler.d.ts.map +1 -0
  60. package/esm/src/server/handlers/request/internal-tasks-list.handler.js +72 -0
  61. package/esm/src/server/project-env/storage.d.ts +6 -0
  62. package/esm/src/server/project-env/storage.d.ts.map +1 -1
  63. package/esm/src/server/project-env/storage.js +8 -0
  64. package/esm/src/server/runtime-handler/index.d.ts +1 -1
  65. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  66. package/esm/src/server/runtime-handler/index.js +3 -0
  67. package/esm/src/server/runtime-handler/project-isolation.d.ts +5 -0
  68. package/esm/src/server/runtime-handler/project-isolation.d.ts.map +1 -1
  69. package/esm/src/server/runtime-handler/project-isolation.js +44 -0
  70. package/esm/src/server/shared/renderer/memory/pressure.d.ts +7 -0
  71. package/esm/src/server/shared/renderer/memory/pressure.d.ts.map +1 -1
  72. package/esm/src/server/shared/renderer/memory/pressure.js +7 -0
  73. package/esm/src/task/control-plane.d.ts +105 -0
  74. package/esm/src/task/control-plane.d.ts.map +1 -0
  75. package/esm/src/task/control-plane.js +52 -0
  76. package/esm/src/task/types.d.ts +6 -0
  77. package/esm/src/task/types.d.ts.map +1 -1
  78. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.d.ts +4 -4
  79. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.d.ts.map +1 -1
  80. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.js +15 -15
  81. package/esm/src/utils/index.d.ts +10 -1
  82. package/esm/src/utils/index.d.ts.map +1 -1
  83. package/esm/src/utils/index.js +9 -1
  84. package/esm/src/utils/logger/index.d.ts +1 -1
  85. package/esm/src/utils/logger/index.d.ts.map +1 -1
  86. package/esm/src/utils/logger/index.js +1 -1
  87. package/esm/src/utils/logger/logger.d.ts +14 -0
  88. package/esm/src/utils/logger/logger.d.ts.map +1 -1
  89. package/esm/src/utils/logger/logger.js +17 -0
  90. package/esm/src/workflow/claude-code/tool.d.ts +5 -5
  91. package/package.json +8 -1
  92. package/src/cli/commands/knowledge/command.ts +76 -1
  93. package/src/deno.js +13 -6
  94. package/src/src/data/data-fetcher.ts +18 -2
  95. package/src/src/data/index.ts +1 -1
  96. package/src/src/data/server-data-fetcher.ts +106 -3
  97. package/src/src/jobs/index.ts +85 -0
  98. package/src/src/jobs/jobs-client.ts +503 -0
  99. package/src/src/jobs/schemas.ts +202 -0
  100. package/src/src/platform/adapters/veryfront-api-client/retry-handler.ts +15 -6
  101. package/src/src/proxy/handler.ts +27 -19
  102. package/src/src/rendering/orchestrator/lifecycle.ts +11 -0
  103. package/src/src/rendering/orchestrator/pipeline.ts +7 -2
  104. package/src/src/rendering/orchestrator/ssr-orchestrator.ts +119 -0
  105. package/src/src/routing/api/handler.ts +16 -3
  106. package/src/src/routing/api/route-executor.ts +258 -1
  107. package/src/src/security/deno-permissions.ts +13 -1
  108. package/src/src/security/sandbox/project-worker.ts +416 -0
  109. package/src/src/security/sandbox/worker-permissions.ts +77 -0
  110. package/src/src/security/sandbox/worker-pool.ts +459 -0
  111. package/src/src/security/sandbox/worker-types.ts +212 -0
  112. package/src/src/server/handlers/request/internal-tasks-list.handler.ts +103 -0
  113. package/src/src/server/project-env/storage.ts +9 -0
  114. package/src/src/server/runtime-handler/index.ts +3 -0
  115. package/src/src/server/runtime-handler/project-isolation.ts +53 -0
  116. package/src/src/server/shared/renderer/memory/pressure.ts +8 -0
  117. package/src/src/task/control-plane.ts +76 -0
  118. package/src/src/task/types.ts +6 -0
  119. package/src/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.ts +18 -12
  120. package/src/src/utils/index.ts +11 -0
  121. package/src/src/utils/logger/index.ts +1 -0
  122. package/src/src/utils/logger/logger.ts +34 -0
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Worker Isolation Types
3
+ *
4
+ * Shared type definitions for the worker isolation system.
5
+ * Used by both the main process and worker script.
6
+ *
7
+ * @module security/sandbox/worker-types
8
+ */
9
+ /** Maximum request body size for worker isolation (10 MB) */
10
+ export const MAX_WORKER_BODY_BYTES = 10 * 1024 * 1024;
11
+ export const DEFAULT_WORKER_POOL_CONFIG = {
12
+ maxPoolSize: 20,
13
+ idleTimeoutMs: 300_000,
14
+ requestTimeoutMs: 30_000,
15
+ healthCheckIntervalMs: 30_000,
16
+ maxRequestsPerWorker: 1_000,
17
+ maxWorkerAgeMs: 600_000,
18
+ memoryBudgetMb: 64,
19
+ };
@@ -0,0 +1,11 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { type RuntimeTaskDiscoveryDeps } from "../../../task/control-plane.js";
3
+ import { BaseHandler } from "../response/base.js";
4
+ import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
5
+ export declare class InternalTasksListHandler extends BaseHandler {
6
+ private readonly deps;
7
+ metadata: HandlerMetadata;
8
+ constructor(deps?: RuntimeTaskDiscoveryDeps);
9
+ handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
10
+ }
11
+ //# sourceMappingURL=internal-tasks-list.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-tasks-list.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/internal-tasks-list.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,gCAAgC,CAAC;AAUxC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnG,qBAAa,wBAAyB,SAAQ,WAAW;IAQrD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,QAAQ,EAAE,eAAe,CAIvB;gBAGiB,IAAI,GAAE,wBAA0D;IAK7E,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmEhF"}
@@ -0,0 +1,72 @@
1
+ import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
2
+ import { ZodError } from "zod";
3
+ import { ControlPlaneTasksListRequestSchema, defaultRuntimeTaskDiscoveryDeps, listRuntimeTasks, } from "../../../task/control-plane.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 { BaseHandler } from "../response/base.js";
7
+ export class InternalTasksListHandler extends BaseHandler {
8
+ deps;
9
+ metadata = {
10
+ name: "InternalTasksListHandler",
11
+ priority: PRIORITY_MEDIUM_API,
12
+ patterns: [{ pattern: "/internal/tasks/list", exact: true, method: "POST" }],
13
+ };
14
+ constructor(deps = defaultRuntimeTaskDiscoveryDeps) {
15
+ super();
16
+ this.deps = deps;
17
+ }
18
+ async handle(req, ctx) {
19
+ if (!this.shouldHandle(req, ctx)) {
20
+ return this.continue();
21
+ }
22
+ return this.withProxyContext(ctx, async () => {
23
+ const builder = this.createResponseBuilder(ctx)
24
+ .withCORS(req, ctx.securityConfig?.cors)
25
+ .withSecurity(ctx.securityConfig ?? undefined, req);
26
+ try {
27
+ const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
28
+ const payload = ControlPlaneTasksListRequestSchema.parse(JSON.parse(rawBody));
29
+ const claims = await verifyControlPlaneRequest(req, ctx, rawBody, {
30
+ expectedSubject: payload.requestId,
31
+ expectedSurface: payload.surface,
32
+ });
33
+ if (payload.projectId !== claims.project_id ||
34
+ (ctx.projectId !== undefined && payload.projectId !== ctx.projectId)) {
35
+ this.logWarn("Internal tasks list request body did not match signed claims", {
36
+ projectSlug: ctx.projectSlug,
37
+ projectId: ctx.projectId,
38
+ requestId: payload.requestId,
39
+ signedRequestId: claims.sub,
40
+ surface: payload.surface,
41
+ signedSurface: claims.surface,
42
+ });
43
+ return this.respond(builder.json({ error: "Invalid control-plane signature" }, 401));
44
+ }
45
+ const response = await listRuntimeTasks(ctx, this.deps);
46
+ return this.respond(builder.json(response, 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
+ this.logWarn("Internal tasks list signature verification failed", {
54
+ error: error.message,
55
+ projectSlug: ctx.projectSlug,
56
+ projectId: ctx.projectId,
57
+ });
58
+ return this.respond(builder.json({ error: error.message }, error.status));
59
+ }
60
+ if (error instanceof SyntaxError || error instanceof ZodError) {
61
+ this.logWarn("Internal tasks list request validation failed", {
62
+ error: error instanceof Error ? error.message : String(error),
63
+ projectSlug: ctx.projectSlug,
64
+ projectId: ctx.projectId,
65
+ });
66
+ return this.respond(builder.json({ error: "Invalid internal tasks request" }, 400));
67
+ }
68
+ throw error;
69
+ }
70
+ });
71
+ }
72
+ }
@@ -14,4 +14,10 @@ export declare function getProjectEnv(key: string): string | undefined;
14
14
  * to prevent remote projects from reading host-level secrets.
15
15
  */
16
16
  export declare function isProjectEnvActive(): boolean;
17
+ /**
18
+ * Get a snapshot of the current project env overlay.
19
+ * Returns undefined if no overlay is active.
20
+ * Used to forward env vars to isolated workers in proxy mode.
21
+ */
22
+ export declare function getProjectEnvSnapshot(): Record<string, string> | undefined;
17
23
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/src/server/project-env/storage.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/src/server/project-env/storage.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAE1E"}
@@ -31,6 +31,14 @@ export function getProjectEnv(key) {
31
31
  export function isProjectEnvActive() {
32
32
  return projectEnvStorage.getStore() !== undefined;
33
33
  }
34
+ /**
35
+ * Get a snapshot of the current project env overlay.
36
+ * Returns undefined if no overlay is active.
37
+ * Used to forward env vars to isolated workers in proxy mode.
38
+ */
39
+ export function getProjectEnvSnapshot() {
40
+ return projectEnvStorage.getStore();
41
+ }
34
42
  // Register on globalThis so process.ts can access without circular imports.
35
43
  // process.ts is low-level (platform/compat), project-env is high-level (server/).
36
44
  dntShim.dntGlobalThis.__vfProjectEnvGetter = getProjectEnv;
@@ -14,7 +14,7 @@ import type { Handler } from "../../types/index.js";
14
14
  import { ApiHandlerWrapper } from "../handlers/request/api/index.js";
15
15
  export { parseProxyEnvironment, type ProxyEnvironment } from "./proxy-environment.js";
16
16
  /** Handler names in registration order. */
17
- export declare const HANDLER_NAMES: readonly ["AuthHandler", "CsrfHandler", "HMRHandler", "CorsHandler", "HealthHandler", "MetricsHandler", "MemoryDebugHandler", "ClientLogHandler", "DevEndpointsHandler", "StylesCSSHandler", "DebugContextHandler", "OpenAPIHandler", "OpenAPIDocsHandler", "InternalAgentsListHandler", "AgentStreamHandler", "AgentRunResumeHandler", "AgentRunCancelHandler", "ChannelInvokeHandler", "DevDashboardHandler", "ProjectsHandler", "StudioBridgeModulesHandler", "CSSHandler", "DevFileHandler", "SnippetHandler", "StaticHandler", "LibModulesHandler", "RSCHandler", "ModuleHandler", "ApiHandlerWrapper", "MarkdownPreviewHandler", "SSRHandler", "NotFoundHandler"];
17
+ export declare const HANDLER_NAMES: readonly ["AuthHandler", "CsrfHandler", "HMRHandler", "CorsHandler", "HealthHandler", "MetricsHandler", "MemoryDebugHandler", "ClientLogHandler", "DevEndpointsHandler", "StylesCSSHandler", "DebugContextHandler", "OpenAPIHandler", "OpenAPIDocsHandler", "InternalAgentsListHandler", "InternalTasksListHandler", "AgentStreamHandler", "AgentRunResumeHandler", "AgentRunCancelHandler", "ChannelInvokeHandler", "DevDashboardHandler", "ProjectsHandler", "StudioBridgeModulesHandler", "CSSHandler", "DevFileHandler", "SnippetHandler", "StaticHandler", "LibModulesHandler", "RSCHandler", "ModuleHandler", "ApiHandlerWrapper", "MarkdownPreviewHandler", "SSRHandler", "NotFoundHandler"];
18
18
  /** Union of all registered handler names. */
19
19
  export type HandlerName = (typeof HANDLER_NAMES)[number];
20
20
  /**
@@ -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;AAK7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA0BpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA8DrE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAMtF,2CAA2C;AAC3C,eAAO,MAAM,aAAa,yoBAiChB,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAyCD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,mBAAwB,GAC7B;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAuB5D;AAED,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,CAsYnF;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;AAK7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA0BpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA+DrE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAMtF,2CAA2C;AAC3C,eAAO,MAAM,aAAa,qqBAkChB,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0CD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,mBAAwB,GAC7B;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAuB5D;AAED,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,CAsYnF;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC"}
@@ -43,6 +43,7 @@ import { MarkdownPreviewHandler } from "../handlers/preview/markdown-preview.han
43
43
  import { OpenAPIHandler } from "../handlers/request/openapi.handler.js";
44
44
  import { OpenAPIDocsHandler } from "../handlers/request/openapi-docs.handler.js";
45
45
  import { InternalAgentsListHandler } from "../handlers/request/internal-agents-list.handler.js";
46
+ import { InternalTasksListHandler } from "../handlers/request/internal-tasks-list.handler.js";
46
47
  import { AgentStreamHandler } from "../handlers/request/agent-stream.handler.js";
47
48
  import { AgentRunResumeHandler } from "../handlers/request/agent-run-resume.handler.js";
48
49
  import { AgentRunCancelHandler } from "../handlers/request/agent-run-cancel.handler.js";
@@ -83,6 +84,7 @@ export const HANDLER_NAMES = [
83
84
  "OpenAPIHandler",
84
85
  "OpenAPIDocsHandler",
85
86
  "InternalAgentsListHandler",
87
+ "InternalTasksListHandler",
86
88
  "AgentStreamHandler",
87
89
  "AgentRunResumeHandler",
88
90
  "AgentRunCancelHandler",
@@ -118,6 +120,7 @@ const handlerFactories = {
118
120
  OpenAPIHandler: () => new OpenAPIHandler(),
119
121
  OpenAPIDocsHandler: () => new OpenAPIDocsHandler(),
120
122
  InternalAgentsListHandler: () => new InternalAgentsListHandler(),
123
+ InternalTasksListHandler: () => new InternalTasksListHandler(),
121
124
  AgentStreamHandler: () => new AgentStreamHandler(),
122
125
  AgentRunResumeHandler: () => new AgentRunResumeHandler(),
123
126
  AgentRunCancelHandler: () => new AgentRunCancelHandler(),
@@ -19,6 +19,11 @@ export declare class ProjectIsolationManager {
19
19
  checkRequest(projectSlug: string | undefined): IsolationCheckResult;
20
20
  startRequest(projectSlug: string | undefined): void;
21
21
  completeRequest(projectSlug: string | undefined, timedOut: boolean): void;
22
+ /**
23
+ * Record a worker crash for a project. This counts as a failure
24
+ * toward the circuit breaker threshold and evicts the worker.
25
+ */
26
+ recordWorkerCrash(projectSlug: string | undefined): void;
22
27
  getStats(): Record<string, {
23
28
  inFlight: number;
24
29
  recentFailures: number;
@@ -1 +1 @@
1
- {"version":3,"file":"project-isolation.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/project-isolation.ts"],"names":[],"mappings":"AAMA,UAAU,sBAAsB;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAUD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,eAAe,CAAqD;gBAEhE,MAAM,GAAE,OAAO,CAAC,sBAAsB,CAAM;IAKxD,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,gBAAgB;IAgBxB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB;IAsCnE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQnD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IA4BzE,QAAQ,IAAI,MAAM,CAChB,MAAM,EACN;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CACF;IAyBD,QAAQ,IAAI,IAAI;CAIjB;AAED,eAAO,MAAM,gBAAgB,yBAI3B,CAAC"}
1
+ {"version":3,"file":"project-isolation.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/project-isolation.ts"],"names":[],"mappings":"AAUA,UAAU,sBAAsB;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAUD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,eAAe,CAAqD;gBAEhE,MAAM,GAAE,OAAO,CAAC,sBAAsB,CAAM;IAKxD,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,gBAAgB;IAgBxB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB;IAsCnE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQnD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IA4BzE;;;OAGG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAoCxD,QAAQ,IAAI,MAAM,CAChB,MAAM,EACN;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CACF;IAyBD,QAAQ,IAAI,IAAI;CAajB;AAED,eAAO,MAAM,gBAAgB,yBAI3B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import * as dntShim from "../../../_dnt.shims.js";
2
2
  import { serverLogger } from "../../utils/index.js";
3
3
  import { getEnvNumber, unrefTimer } from "../../platform/compat/process.js";
4
+ import { getWorkerPool, isWorkerIsolationEnabled, } from "../../security/sandbox/worker-pool.js";
4
5
  const logger = serverLogger.component("project-isolation");
5
6
  const DEFAULT_CONFIG = {
6
7
  maxConcurrentPerProject: 20,
@@ -106,6 +107,40 @@ export class ProjectIsolationManager {
106
107
  resetAfterMs: this.config.circuitResetTimeMs,
107
108
  });
108
109
  }
110
+ /**
111
+ * Record a worker crash for a project. This counts as a failure
112
+ * toward the circuit breaker threshold and evicts the worker.
113
+ */
114
+ recordWorkerCrash(projectSlug) {
115
+ if (!projectSlug)
116
+ return;
117
+ const state = this.getOrCreateState(projectSlug);
118
+ const now = Date.now();
119
+ state.failures.push(now);
120
+ state.failures = state.failures.filter((t) => now - t < this.config.failureWindowMs);
121
+ logger.warn("Worker crash recorded", {
122
+ projectSlug,
123
+ recentFailures: state.failures.length,
124
+ });
125
+ // Evict the crashed worker from the pool
126
+ if (isWorkerIsolationEnabled()) {
127
+ try {
128
+ getWorkerPool().evictWorker(projectSlug);
129
+ }
130
+ catch {
131
+ // Pool may not be initialized
132
+ }
133
+ }
134
+ if (state.failures.length < this.config.circuitBreakerThreshold)
135
+ return;
136
+ state.circuitOpenedAt = now;
137
+ logger.error("Circuit opened due to worker crashes", {
138
+ projectSlug,
139
+ recentFailures: state.failures.length,
140
+ threshold: this.config.circuitBreakerThreshold,
141
+ resetAfterMs: this.config.circuitResetTimeMs,
142
+ });
143
+ }
109
144
  getStats() {
110
145
  const stats = {};
111
146
  for (const [slug, state] of this.projects.entries()) {
@@ -123,6 +158,15 @@ export class ProjectIsolationManager {
123
158
  if (this.cleanupInterval)
124
159
  clearInterval(this.cleanupInterval);
125
160
  this.projects.clear();
161
+ // Shut down the worker pool if isolation is enabled
162
+ if (isWorkerIsolationEnabled()) {
163
+ try {
164
+ getWorkerPool().shutdown();
165
+ }
166
+ catch {
167
+ // Pool may not be initialized
168
+ }
169
+ }
126
170
  }
127
171
  }
128
172
  export const projectIsolation = new ProjectIsolationManager({
@@ -13,5 +13,12 @@
13
13
  *
14
14
  * @module server/shared/renderer/memory/pressure
15
15
  */
16
+ type MemoryPressureLevel = "normal" | "warning" | "high" | "critical";
16
17
  export declare function shouldRejectDueToMemory(): boolean;
18
+ /**
19
+ * Get current memory pressure level for use by the worker pool
20
+ * to decide whether to evict idle workers.
21
+ */
22
+ export declare function getMemoryPressureLevel(): MemoryPressureLevel;
23
+ export {};
17
24
  //# sourceMappingURL=pressure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pressure.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/shared/renderer/memory/pressure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwCH,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD"}
1
+ {"version":3,"file":"pressure.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/shared/renderer/memory/pressure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,KAAK,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AA+BtE,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D"}
@@ -51,3 +51,10 @@ export function shouldRejectDueToMemory() {
51
51
  rendererLog.warn("Rejecting request - memory critical", { heapUsedPercent });
52
52
  return true;
53
53
  }
54
+ /**
55
+ * Get current memory pressure level for use by the worker pool
56
+ * to decide whether to evict idle workers.
57
+ */
58
+ export function getMemoryPressureLevel() {
59
+ return getMemoryPressure().level;
60
+ }
@@ -0,0 +1,105 @@
1
+ import type { HandlerContext } from "../types/index.js";
2
+ import { z } from "zod";
3
+ import { discoverTasks, type TaskDiscoveryOptions } from "./discovery.js";
4
+ export declare const ControlPlaneTasksListRequestSchema: z.ZodObject<{
5
+ requestId: z.ZodString;
6
+ projectId: z.ZodString;
7
+ surface: z.ZodEnum<["studio", "channels", "a2a", "mcp"]>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ requestId: string;
10
+ projectId: string;
11
+ surface: "mcp" | "studio" | "channels" | "a2a";
12
+ }, {
13
+ requestId: string;
14
+ projectId: string;
15
+ surface: "mcp" | "studio" | "channels" | "a2a";
16
+ }>;
17
+ export declare const RuntimeTaskSchema: z.ZodObject<{
18
+ id: z.ZodString;
19
+ name: z.ZodString;
20
+ description: z.ZodNullable<z.ZodString>;
21
+ target: z.ZodString;
22
+ sourcePath: z.ZodString;
23
+ inputSchema: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ outputSchema: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
25
+ schedulable: z.ZodBoolean;
26
+ }, "strip", z.ZodTypeAny, {
27
+ description: string | null;
28
+ name: string;
29
+ id: string;
30
+ target: string;
31
+ sourcePath: string;
32
+ outputSchema: Record<string, unknown> | null;
33
+ inputSchema: Record<string, unknown> | null;
34
+ schedulable: boolean;
35
+ }, {
36
+ description: string | null;
37
+ name: string;
38
+ id: string;
39
+ target: string;
40
+ sourcePath: string;
41
+ outputSchema: Record<string, unknown> | null;
42
+ inputSchema: Record<string, unknown> | null;
43
+ schedulable: boolean;
44
+ }>;
45
+ export declare const RuntimeTaskListResponseSchema: z.ZodObject<{
46
+ tasks: z.ZodArray<z.ZodObject<{
47
+ id: z.ZodString;
48
+ name: z.ZodString;
49
+ description: z.ZodNullable<z.ZodString>;
50
+ target: z.ZodString;
51
+ sourcePath: z.ZodString;
52
+ inputSchema: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
53
+ outputSchema: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
54
+ schedulable: z.ZodBoolean;
55
+ }, "strip", z.ZodTypeAny, {
56
+ description: string | null;
57
+ name: string;
58
+ id: string;
59
+ target: string;
60
+ sourcePath: string;
61
+ outputSchema: Record<string, unknown> | null;
62
+ inputSchema: Record<string, unknown> | null;
63
+ schedulable: boolean;
64
+ }, {
65
+ description: string | null;
66
+ name: string;
67
+ id: string;
68
+ target: string;
69
+ sourcePath: string;
70
+ outputSchema: Record<string, unknown> | null;
71
+ inputSchema: Record<string, unknown> | null;
72
+ schedulable: boolean;
73
+ }>, "many">;
74
+ }, "strip", z.ZodTypeAny, {
75
+ tasks: {
76
+ description: string | null;
77
+ name: string;
78
+ id: string;
79
+ target: string;
80
+ sourcePath: string;
81
+ outputSchema: Record<string, unknown> | null;
82
+ inputSchema: Record<string, unknown> | null;
83
+ schedulable: boolean;
84
+ }[];
85
+ }, {
86
+ tasks: {
87
+ description: string | null;
88
+ name: string;
89
+ id: string;
90
+ target: string;
91
+ sourcePath: string;
92
+ outputSchema: Record<string, unknown> | null;
93
+ inputSchema: Record<string, unknown> | null;
94
+ schedulable: boolean;
95
+ }[];
96
+ }>;
97
+ export type ControlPlaneTasksListRequest = z.infer<typeof ControlPlaneTasksListRequestSchema>;
98
+ export type RuntimeTask = z.infer<typeof RuntimeTaskSchema>;
99
+ export type RuntimeTaskListResponse = z.infer<typeof RuntimeTaskListResponseSchema>;
100
+ export interface RuntimeTaskDiscoveryDeps {
101
+ discoverTasks: (options: TaskDiscoveryOptions) => ReturnType<typeof discoverTasks>;
102
+ }
103
+ export declare const defaultRuntimeTaskDiscoveryDeps: RuntimeTaskDiscoveryDeps;
104
+ export declare function listRuntimeTasks(ctx: HandlerContext, deps?: RuntimeTaskDiscoveryDeps): Promise<RuntimeTaskListResponse>;
105
+ //# sourceMappingURL=control-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../../../src/src/task/control-plane.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE1E,eAAO,MAAM,kCAAkC;;;;;;;;;;;;EAI7C,CAAC;AAIH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5B,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAExC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;CACpF;AAED,eAAO,MAAM,+BAA+B,EAAE,wBAE7C,CAAC;AAUF,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,cAAc,EACnB,IAAI,GAAE,wBAA0D,GAC/D,OAAO,CAAC,uBAAuB,CAAC,CAwBlC"}
@@ -0,0 +1,52 @@
1
+ import { ControlPlaneSurfaceSchema } from "../channels/control-plane.js";
2
+ import { z } from "zod";
3
+ import { discoverTasks } from "./discovery.js";
4
+ export const ControlPlaneTasksListRequestSchema = z.object({
5
+ requestId: z.string().min(1),
6
+ projectId: z.string().min(1),
7
+ surface: ControlPlaneSurfaceSchema,
8
+ });
9
+ const JsonSchemaRecordSchema = z.record(z.unknown());
10
+ export const RuntimeTaskSchema = z.object({
11
+ id: z.string().min(1),
12
+ name: z.string().min(1),
13
+ description: z.string().nullable(),
14
+ target: z.string().min(1),
15
+ sourcePath: z.string().min(1),
16
+ inputSchema: JsonSchemaRecordSchema.nullable(),
17
+ outputSchema: JsonSchemaRecordSchema.nullable(),
18
+ schedulable: z.boolean(),
19
+ });
20
+ export const RuntimeTaskListResponseSchema = z.object({
21
+ tasks: z.array(RuntimeTaskSchema),
22
+ });
23
+ export const defaultRuntimeTaskDiscoveryDeps = {
24
+ discoverTasks,
25
+ };
26
+ function normalizeJsonSchema(value) {
27
+ if (value == null || typeof value !== "object" || Array.isArray(value)) {
28
+ return null;
29
+ }
30
+ return value;
31
+ }
32
+ export async function listRuntimeTasks(ctx, deps = defaultRuntimeTaskDiscoveryDeps) {
33
+ const discovery = await deps.discoverTasks({
34
+ projectDir: ctx.projectDir,
35
+ adapter: ctx.adapter,
36
+ config: ctx.config,
37
+ debug: ctx.debug ?? false,
38
+ });
39
+ const tasks = discovery.tasks
40
+ .map((task) => RuntimeTaskSchema.parse({
41
+ id: task.id,
42
+ name: task.name,
43
+ description: task.definition.description ?? null,
44
+ target: `task:${task.id}`,
45
+ sourcePath: task.filePath,
46
+ inputSchema: normalizeJsonSchema(task.definition.inputSchema),
47
+ outputSchema: normalizeJsonSchema(task.definition.outputSchema),
48
+ schedulable: task.definition.schedulable ?? true,
49
+ }))
50
+ .sort((left, right) => left.name.localeCompare(right.name));
51
+ return RuntimeTaskListResponseSchema.parse({ tasks });
52
+ }
@@ -24,6 +24,12 @@ export interface TaskDefinition {
24
24
  name?: string;
25
25
  /** Task description */
26
26
  description?: string;
27
+ /** Optional JSON-schema-like input contract surfaced in APIs/UIs */
28
+ inputSchema?: Record<string, unknown>;
29
+ /** Optional JSON-schema-like output contract surfaced in APIs/UIs */
30
+ outputSchema?: Record<string, unknown>;
31
+ /** Whether this task can be scheduled via cron jobs */
32
+ schedulable?: boolean;
27
33
  /** The function to execute */
28
34
  run: (ctx: TaskContext) => Promise<unknown> | unknown;
29
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/task/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAIxE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/task/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAIxE"}
@@ -5,14 +5,14 @@
5
5
  * framework source files on disk.
6
6
  */
7
7
  import { createFileSystem } from "../../../../platform/compat/fs.js";
8
- export declare function tryReadWithExtensions(fs: ReturnType<typeof createFileSystem>, basePath: string): Promise<{
8
+ export declare function tryReadWithExtensions(fs: ReturnType<typeof createFileSystem>, basePath: string, existsFn?: (path: string) => Promise<boolean>): Promise<{
9
9
  sourcePath: string;
10
10
  content: string;
11
11
  } | null>;
12
12
  /**
13
13
  * Resolve a /_vf_modules/ path to the actual framework source file.
14
14
  */
15
- export declare function resolveFrameworkFile(vfModulePath: string, fs: ReturnType<typeof createFileSystem>): Promise<{
15
+ export declare function resolveFrameworkFile(vfModulePath: string, fs: ReturnType<typeof createFileSystem>, existsFn?: (path: string) => Promise<boolean>): Promise<{
16
16
  sourcePath: string;
17
17
  content: string;
18
18
  } | null>;
@@ -24,7 +24,7 @@ export declare function resolveFrameworkFile(vfModulePath: string, fs: ReturnTyp
24
24
  * then falls back to regular src/. This matches resolveFrameworkFile's behavior
25
25
  * and ensures consistent path resolution for cycle detection.
26
26
  */
27
- export declare function resolveVeryfrontSourcePath(specifier: string): Promise<string | null>;
27
+ export declare function resolveVeryfrontSourcePath(specifier: string, existsFn?: (path: string) => Promise<boolean>): Promise<string | null>;
28
28
  /**
29
29
  * Resolve a relative import path to an absolute framework source path.
30
30
  * Given sourcePath=/foo/bar/index.ts and specifier=./Head.tsx, returns /foo/bar/Head.tsx
@@ -32,5 +32,5 @@ export declare function resolveVeryfrontSourcePath(specifier: string): Promise<s
32
32
  * Handles both regular source files (.tsx, .ts) and embedded sources (.tsx.src, .ts.src)
33
33
  * for compiled binaries.
34
34
  */
35
- export declare function resolveRelativeFrameworkImport(specifier: string, fromSourcePath: string, _fs: ReturnType<typeof createFileSystem>): Promise<string | null>;
35
+ export declare function resolveRelativeFrameworkImport(specifier: string, fromSourcePath: string, _fs: ReturnType<typeof createFileSystem>, existsFn?: (path: string) => Promise<boolean>): Promise<string | null>;
36
36
  //# sourceMappingURL=path-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-resolver.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAU,MAAM,mCAAmC,CAAC;AAY7E,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBzD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GACtC,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA6DzD;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkE1F;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiExB"}
1
+ {"version":3,"file":"path-resolver.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAU,MAAM,mCAAmC,CAAC;AAY7E,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAU,GACpD,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBzD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACvC,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAU,GACpD,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA6DzD;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAU,GACpD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkExB;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACxC,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAU,GACpD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiExB"}