@agent-native/core 0.54.0 → 0.55.0

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 (141) hide show
  1. package/README.md +16 -1
  2. package/dist/agent/production-agent.d.ts.map +1 -1
  3. package/dist/agent/production-agent.js +4 -0
  4. package/dist/agent/production-agent.js.map +1 -1
  5. package/dist/cli/connect.d.ts +3 -1
  6. package/dist/cli/connect.d.ts.map +1 -1
  7. package/dist/cli/connect.js +7 -1
  8. package/dist/cli/connect.js.map +1 -1
  9. package/dist/cli/gateway-helpers.d.ts +15 -0
  10. package/dist/cli/gateway-helpers.d.ts.map +1 -0
  11. package/dist/cli/gateway-helpers.js +51 -0
  12. package/dist/cli/gateway-helpers.js.map +1 -0
  13. package/dist/cli/index.js +1 -1
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/plan-local.d.ts +40 -0
  16. package/dist/cli/plan-local.d.ts.map +1 -1
  17. package/dist/cli/plan-local.js +495 -9
  18. package/dist/cli/plan-local.js.map +1 -1
  19. package/dist/cli/skills.d.ts +17 -2
  20. package/dist/cli/skills.d.ts.map +1 -1
  21. package/dist/cli/skills.js +135 -36
  22. package/dist/cli/skills.js.map +1 -1
  23. package/dist/cli/workspace-dev.d.ts.map +1 -1
  24. package/dist/cli/workspace-dev.js +9 -27
  25. package/dist/cli/workspace-dev.js.map +1 -1
  26. package/dist/client/AgentChatHome.d.ts +23 -0
  27. package/dist/client/AgentChatHome.d.ts.map +1 -0
  28. package/dist/client/AgentChatHome.js +13 -0
  29. package/dist/client/AgentChatHome.js.map +1 -0
  30. package/dist/client/AgentPanel.d.ts +29 -2
  31. package/dist/client/AgentPanel.d.ts.map +1 -1
  32. package/dist/client/AgentPanel.js +116 -68
  33. package/dist/client/AgentPanel.js.map +1 -1
  34. package/dist/client/AssistantChat.d.ts.map +1 -1
  35. package/dist/client/AssistantChat.js +140 -18
  36. package/dist/client/AssistantChat.js.map +1 -1
  37. package/dist/client/FeedbackButton.d.ts +7 -1
  38. package/dist/client/FeedbackButton.d.ts.map +1 -1
  39. package/dist/client/FeedbackButton.js +13 -3
  40. package/dist/client/FeedbackButton.js.map +1 -1
  41. package/dist/client/MultiTabAssistantChat.d.ts +1 -2
  42. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  43. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  44. package/dist/client/agent-sidebar-state.d.ts +2 -0
  45. package/dist/client/agent-sidebar-state.d.ts.map +1 -1
  46. package/dist/client/agent-sidebar-state.js +15 -4
  47. package/dist/client/agent-sidebar-state.js.map +1 -1
  48. package/dist/client/chat/index.d.ts +5 -0
  49. package/dist/client/chat/index.d.ts.map +1 -1
  50. package/dist/client/chat/index.js +5 -0
  51. package/dist/client/chat/index.js.map +1 -1
  52. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  53. package/dist/client/chat/run-recovery.js +4 -6
  54. package/dist/client/chat/run-recovery.js.map +1 -1
  55. package/dist/client/chat/tool-call-display.d.ts +1 -0
  56. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  57. package/dist/client/chat/tool-call-display.js +16 -0
  58. package/dist/client/chat/tool-call-display.js.map +1 -1
  59. package/dist/client/chat/tool-render-registry.d.ts +24 -0
  60. package/dist/client/chat/tool-render-registry.d.ts.map +1 -0
  61. package/dist/client/chat/tool-render-registry.js +37 -0
  62. package/dist/client/chat/tool-render-registry.js.map +1 -0
  63. package/dist/client/chat/widgets/DataChartRenderer.d.ts +5 -0
  64. package/dist/client/chat/widgets/DataChartRenderer.d.ts.map +1 -0
  65. package/dist/client/chat/widgets/DataChartRenderer.js +33 -0
  66. package/dist/client/chat/widgets/DataChartRenderer.js.map +1 -0
  67. package/dist/client/chat/widgets/DataChartWidget.d.ts +5 -0
  68. package/dist/client/chat/widgets/DataChartWidget.d.ts.map +1 -0
  69. package/dist/client/chat/widgets/DataChartWidget.js +15 -0
  70. package/dist/client/chat/widgets/DataChartWidget.js.map +1 -0
  71. package/dist/client/chat/widgets/DataInsightsWidget.d.ts +5 -0
  72. package/dist/client/chat/widgets/DataInsightsWidget.d.ts.map +1 -0
  73. package/dist/client/chat/widgets/DataInsightsWidget.js +18 -0
  74. package/dist/client/chat/widgets/DataInsightsWidget.js.map +1 -0
  75. package/dist/client/chat/widgets/DataTableWidget.d.ts +9 -0
  76. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -0
  77. package/dist/client/chat/widgets/DataTableWidget.js +95 -0
  78. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -0
  79. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts +2 -0
  80. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -0
  81. package/dist/client/chat/widgets/builtin-tool-renderers.js +27 -0
  82. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -0
  83. package/dist/client/chat/widgets/data-widget-types.d.ts +52 -0
  84. package/dist/client/chat/widgets/data-widget-types.d.ts.map +1 -0
  85. package/dist/client/chat/widgets/data-widget-types.js +93 -0
  86. package/dist/client/chat/widgets/data-widget-types.js.map +1 -0
  87. package/dist/client/chat-view-transition.d.ts +23 -0
  88. package/dist/client/chat-view-transition.d.ts.map +1 -0
  89. package/dist/client/chat-view-transition.js +50 -0
  90. package/dist/client/chat-view-transition.js.map +1 -0
  91. package/dist/client/composer/PromptComposer.d.ts +1 -1
  92. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  93. package/dist/client/composer/PromptComposer.js +2 -2
  94. package/dist/client/composer/PromptComposer.js.map +1 -1
  95. package/dist/client/composer/TiptapComposer.d.ts +2 -1
  96. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  97. package/dist/client/composer/TiptapComposer.js +2 -1
  98. package/dist/client/composer/TiptapComposer.js.map +1 -1
  99. package/dist/client/index.d.ts +5 -1
  100. package/dist/client/index.d.ts.map +1 -1
  101. package/dist/client/index.js +5 -1
  102. package/dist/client/index.js.map +1 -1
  103. package/dist/client/route-state.d.ts +6 -0
  104. package/dist/client/route-state.d.ts.map +1 -1
  105. package/dist/client/route-state.js +29 -1
  106. package/dist/client/route-state.js.map +1 -1
  107. package/dist/client/use-chat-threads.d.ts.map +1 -1
  108. package/dist/client/use-chat-threads.js +19 -4
  109. package/dist/client/use-chat-threads.js.map +1 -1
  110. package/dist/scripts/dev/index.d.ts +1 -0
  111. package/dist/scripts/dev/index.d.ts.map +1 -1
  112. package/dist/scripts/dev/index.js +129 -127
  113. package/dist/scripts/dev/index.js.map +1 -1
  114. package/dist/server/agent-chat-plugin.d.ts +8 -0
  115. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  116. package/dist/server/agent-chat-plugin.js +29 -21
  117. package/dist/server/agent-chat-plugin.js.map +1 -1
  118. package/dist/server/prompts/framework-core-compact.d.ts +4 -1
  119. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  120. package/dist/server/prompts/framework-core-compact.js +11 -4
  121. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  122. package/dist/server/prompts/framework-core.d.ts +4 -1
  123. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  124. package/dist/server/prompts/framework-core.js +15 -5
  125. package/dist/server/prompts/framework-core.js.map +1 -1
  126. package/dist/server/prompts/shared-rules.d.ts +4 -1
  127. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  128. package/dist/server/prompts/shared-rules.js +4 -1
  129. package/dist/server/prompts/shared-rules.js.map +1 -1
  130. package/dist/styles/agent-native.css +55 -0
  131. package/dist/vite/client.d.ts.map +1 -1
  132. package/dist/vite/client.js +4 -0
  133. package/dist/vite/client.js.map +1 -1
  134. package/docs/content/external-agents.md +14 -4
  135. package/docs/content/getting-started.md +1 -0
  136. package/docs/content/key-concepts.md +34 -15
  137. package/docs/content/mcp-apps.md +2 -0
  138. package/docs/content/mcp-protocol.md +2 -2
  139. package/docs/content/template-plan.md +16 -1
  140. package/docs/content/what-is-agent-native.md +10 -2
  141. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-dev.d.ts","sourceRoot":"","sources":["../../src/cli/workspace-dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-dev.d.ts","sourceRoot":"","sources":["../../src/cli/workspace-dev.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import path from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import * as Sentry from "@sentry/node";
9
9
  import { extractOAuthStateAppId } from "../shared/oauth-state.js";
10
+ import { normalizeOrigin, rewriteRedirectLocation, escapeHtml, } from "./gateway-helpers.js";
10
11
  import { DEFAULT_WORKSPACE_APP_AUDIENCE, workspaceAppAudienceFromPackageJson, workspaceAppRouteAccessFromPackageJson, } from "../shared/workspace-app-audience.js";
11
12
  const DEFAULT_GATEWAY_HOST = "127.0.0.1";
12
13
  const DEFAULT_GATEWAY_PORT = 8080;
@@ -23,16 +24,6 @@ const STARTING_APP_RESPONSE_HEADERS = {
23
24
  pragma: "no-cache",
24
25
  expires: "0",
25
26
  };
26
- function normalizeOrigin(value) {
27
- if (!value)
28
- return undefined;
29
- try {
30
- return new URL(value).origin;
31
- }
32
- catch {
33
- return undefined;
34
- }
35
- }
36
27
  function workspaceOAuthOrigin(env, gatewayUrl) {
37
28
  return (normalizeOrigin(env.VITE_WORKSPACE_OAUTH_ORIGIN) ||
38
29
  normalizeOrigin(env.WORKSPACE_OAUTH_ORIGIN) ||
@@ -405,22 +396,6 @@ function renderStartingApp(app) {
405
396
  </body>
406
397
  </html>`;
407
398
  }
408
- function escapeHtml(value) {
409
- return value.replace(/[&<>"']/g, (char) => {
410
- switch (char) {
411
- case "&":
412
- return "&amp;";
413
- case "<":
414
- return "&lt;";
415
- case ">":
416
- return "&gt;";
417
- case '"':
418
- return "&quot;";
419
- default:
420
- return "&#39;";
421
- }
422
- });
423
- }
424
399
  function renderIndex(apps) {
425
400
  return `<!doctype html>
426
401
  <html>
@@ -827,7 +802,14 @@ export async function runWorkspaceDev(options = {}) {
827
802
  settled = true;
828
803
  clearTimeout(responseTimer);
829
804
  app.ready = true;
830
- res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);
805
+ const statusCode = proxyRes.statusCode ?? 502;
806
+ const responseHeaders = { ...proxyRes.headers };
807
+ if (statusCode >= 300 && statusCode < 400) {
808
+ const rewritten = rewriteRedirectLocation(app, firstHeaderValue(responseHeaders.location));
809
+ if (rewritten)
810
+ responseHeaders.location = rewritten;
811
+ }
812
+ res.writeHead(statusCode, responseHeaders);
831
813
  proxyRes.pipe(res);
832
814
  });
833
815
  responseTimer = setTimeout(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-dev.js","sourceRoot":"","sources":["../../src/cli/workspace-dev.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env tsx\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport http from \"node:http\";\nimport net from \"node:net\";\nimport path from \"node:path\";\nimport type { Duplex } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport * as Sentry from \"@sentry/node\";\nimport { extractOAuthStateAppId } from \"../shared/oauth-state.js\";\nimport {\n DEFAULT_WORKSPACE_APP_AUDIENCE,\n workspaceAppAudienceFromPackageJson,\n workspaceAppRouteAccessFromPackageJson,\n type WorkspaceAppAudience,\n} from \"../shared/workspace-app-audience.js\";\n\nexport interface WorkspaceApp {\n id: string;\n name: string;\n description: string;\n audience: WorkspaceAppAudience;\n publicPaths: string[];\n protectedPaths: string[];\n dir: string;\n port: number;\n process?: ChildProcess;\n restartTimer?: NodeJS.Timeout;\n restartAttempts?: number;\n lastFailure?: {\n code: number | null;\n signal: NodeJS.Signals | null;\n at: number;\n installing: boolean;\n output: string;\n nextRetryAt: number;\n };\n outputTail?: string;\n installing?: boolean;\n installAttempted?: boolean;\n /**\n * Set true once we've successfully connected to the upstream. After that we\n * skip the readiness probe on every request; the child server stays\n * listening for the rest of the dev session.\n */\n ready?: boolean;\n readinessProbe?: Promise<void>;\n}\n\nexport interface WorkspaceDevOptions {\n args?: string[];\n env?: NodeJS.ProcessEnv;\n root?: string;\n spawnProcess?: typeof spawn;\n openBrowser?: boolean;\n stdout?: Pick<NodeJS.WriteStream, \"write\">;\n stderr?: Pick<NodeJS.WriteStream, \"write\">;\n}\n\nexport interface WorkspaceDevHandle {\n apps: WorkspaceApp[];\n defaultApp: string;\n gatewayUrl: () => string;\n ready: Promise<{ port: number; url: string }>;\n server: http.Server;\n shutdown: () => void;\n}\n\nconst DEFAULT_GATEWAY_HOST = \"127.0.0.1\";\nconst DEFAULT_GATEWAY_PORT = 8080;\nconst DEFAULT_APP_PORT_START = 8100;\nconst PROXY_READY_RETRY_DELAY_MS = 250;\nconst APP_RESTART_MAX_DELAY_MS = 10_000;\nconst DEFAULT_PROXY_RESPONSE_TIMEOUT_MS = 5_000;\nconst DEFAULT_PROXY_NON_HTML_RESPONSE_TIMEOUT_MS = 120_000;\nconst APP_OUTPUT_TAIL_BYTES = 8_000;\nconst POLLING_WATCH_INTERVAL_MS = \"1000\";\nconst STARTING_APP_RESPONSE_HEADERS: http.OutgoingHttpHeaders = {\n \"content-type\": \"text/html; charset=utf-8\",\n \"cache-control\": \"no-store, no-cache, max-age=0, must-revalidate\",\n pragma: \"no-cache\",\n expires: \"0\",\n};\n\nfunction normalizeOrigin(value: string | undefined): string | undefined {\n if (!value) return undefined;\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction workspaceOAuthOrigin(\n env: NodeJS.ProcessEnv,\n gatewayUrl: string,\n): string | undefined {\n return (\n normalizeOrigin(env.VITE_WORKSPACE_OAUTH_ORIGIN) ||\n normalizeOrigin(env.WORKSPACE_OAUTH_ORIGIN) ||\n normalizeOrigin(env.APP_URL) ||\n normalizeOrigin(env.BETTER_AUTH_URL) ||\n normalizeOrigin(gatewayUrl)\n );\n}\n\nexport function isWorkspaceWatcherLimitError(\n err: Pick<NodeJS.ErrnoException, \"code\">,\n): boolean {\n return err.code === \"ENOSPC\" || err.code === \"EMFILE\";\n}\n\nexport function shouldEagerStartWorkspaceApps(\n args: string[] = [],\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n return (\n args.includes(\"--eager\") ||\n env.WORKSPACE_EAGER === \"1\" ||\n env.WORKSPACE_EAGER === \"true\"\n );\n}\n\n/**\n * Whether the gateway should spawn the rest of the apps in the background\n * after the default app boots. Lazy spawn already covers correctness — this\n * is purely a UX optimization so the second/third/Nth app the user clicks\n * into is already warm instead of paying the Vite + esbuild prebundle cost\n * on demand.\n *\n * Defaults to ON in lazy mode. Off when the user passed --no-prewarm /\n * WORKSPACE_NO_PREWARM=1, or when eager mode is already starting every app\n * up front (in which case prewarm would be redundant).\n */\nexport function shouldPrewarmWorkspaceApps(\n args: string[] = [],\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n if (args.includes(\"--no-prewarm\")) return false;\n if (env.WORKSPACE_NO_PREWARM === \"1\" || env.WORKSPACE_NO_PREWARM === \"true\") {\n return false;\n }\n // Eager mode starts every app immediately; prewarm has nothing to do.\n if (shouldEagerStartWorkspaceApps(args, env)) return false;\n return true;\n}\n\n/**\n * How many apps to prewarm in parallel. Each Vite spawn briefly maxes out a\n * CPU core during esbuild prebundling, so booting all 9 templates at once on\n * a 4-core laptop just produces a thundering herd. Default 2 — gentle on\n * laptops, fast enough that all apps finish within a few cold-spawn windows.\n * Override via --prewarm-concurrency=N or WORKSPACE_PREWARM_CONCURRENCY=N.\n */\nexport function workspacePrewarmConcurrency(\n args: string[] = [],\n env: NodeJS.ProcessEnv = process.env,\n): number {\n const flag = args.find((arg) => arg.startsWith(\"--prewarm-concurrency=\"));\n const raw = flag\n ? flag.slice(\"--prewarm-concurrency=\".length)\n : env.WORKSPACE_PREWARM_CONCURRENCY;\n if (!raw) return 2;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 1) return 2;\n return Math.floor(parsed);\n}\n\n/**\n * How long the prewarm queue waits after the gateway is ready before kicking\n * off background spawns. Lets the default app's prebundle get first dibs on\n * CPU. Override via WORKSPACE_PREWARM_DELAY_MS (mostly for tests).\n */\nexport function workspacePrewarmDelayMs(\n env: NodeJS.ProcessEnv = process.env,\n): number {\n const raw = env.WORKSPACE_PREWARM_DELAY_MS;\n if (raw === undefined) return 1_000;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 0) return 1_000;\n return Math.floor(parsed);\n}\n\nfunction readBooleanEnv(value: string | undefined): boolean | undefined {\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if ([\"1\", \"true\", \"yes\", \"on\"].includes(normalized)) return true;\n if ([\"0\", \"false\", \"no\", \"off\"].includes(normalized)) return false;\n return undefined;\n}\n\nexport type PollingFileWatcherMode =\n | \"enable\"\n | \"disable-explicit\"\n | \"disable-default\";\n\n/**\n * Three-way classification of the polling-watcher decision so callers can\n * tell apart \"the user explicitly turned this off\" (where we want to override\n * any inherited chokidar/TSC env vars from the parent shell) from \"we just\n * didn't auto-detect a Builder/Codespaces/Gitpod container\" (where the user's\n * own watcher vars should pass through untouched).\n */\nexport function pollingFileWatcherMode(\n env: NodeJS.ProcessEnv = process.env,\n root = process.cwd(),\n): PollingFileWatcherMode {\n const explicit =\n readBooleanEnv(env.AGENT_NATIVE_DEV_USE_POLLING) ??\n readBooleanEnv(env.WORKSPACE_USE_POLLING_WATCHER);\n if (explicit === true) return \"enable\";\n if (explicit === false) return \"disable-explicit\";\n\n const chokidarExplicit = readBooleanEnv(env.CHOKIDAR_USEPOLLING);\n if (chokidarExplicit === true) return \"enable\";\n if (chokidarExplicit === false) return \"disable-explicit\";\n\n const autoEnable = Boolean(\n env.BUILDER_IO_DEV_SERVER ||\n env.BUILDER_PROJECT_ID ||\n env.BUILDER_WORKSPACE_ID ||\n env.CODESPACES ||\n env.GITPOD_WORKSPACE_ID ||\n env.REMOTE_CONTAINERS ||\n env.DEVCONTAINER ||\n root.startsWith(\"/root/app/\"),\n );\n return autoEnable ? \"enable\" : \"disable-default\";\n}\n\nexport function shouldUsePollingFileWatcher(\n env: NodeJS.ProcessEnv = process.env,\n root = process.cwd(),\n): boolean {\n return pollingFileWatcherMode(env, root) === \"enable\";\n}\n\nfunction devWatcherEnv(\n env: NodeJS.ProcessEnv,\n mode: PollingFileWatcherMode,\n): NodeJS.ProcessEnv {\n if (mode === \"enable\") {\n return {\n ...env,\n CHOKIDAR_USEPOLLING: \"1\",\n CHOKIDAR_INTERVAL: env.CHOKIDAR_INTERVAL ?? POLLING_WATCH_INTERVAL_MS,\n TSC_WATCHFILE: env.TSC_WATCHFILE ?? \"DynamicPriorityPolling\",\n TSC_WATCHDIRECTORY: env.TSC_WATCHDIRECTORY ?? \"DynamicPriorityPolling\",\n };\n }\n if (mode === \"disable-explicit\") {\n // The user explicitly turned polling off (AGENT_NATIVE_DEV_USE_POLLING=0\n // / WORKSPACE_USE_POLLING_WATCHER=0 / CHOKIDAR_USEPOLLING=0). Strip the\n // watcher vars from the child env so an inherited parent-shell\n // CHOKIDAR_USEPOLLING=1 (or stale TSC_WATCH* override) can't silently\n // re-enable polling against the user's explicit wish.\n const {\n CHOKIDAR_USEPOLLING: _polling,\n CHOKIDAR_INTERVAL: _interval,\n TSC_WATCHFILE: _watchFile,\n TSC_WATCHDIRECTORY: _watchDir,\n ...rest\n } = env;\n return rest;\n }\n // mode === \"disable-default\": no explicit signal either way. Pass the env\n // through unchanged so legitimate user overrides like\n // TSC_WATCHFILE=UseFsEventsWithFallbackDynamicPolling survive.\n return env;\n}\n\nexport function initialWorkspaceAppIds(\n apps: Array<Pick<WorkspaceApp, \"id\">>,\n defaultApp: string,\n eager: boolean,\n startDefault = true,\n): string[] {\n if (eager) return apps.map((app) => app.id);\n if (!startDefault) return [];\n return apps.some((app) => app.id === defaultApp) ? [defaultApp] : [];\n}\n\nfunction readJson(file: string): any {\n try {\n return JSON.parse(fs.readFileSync(file, \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction discoverApps(appsDir: string, appPortStart: number): WorkspaceApp[] {\n if (!fs.existsSync(appsDir)) return [];\n // existsSync -> readdirSync is a TOCTOU race. Treat ENOENT as \"no apps\n // right now\" and let the polling sync recover.\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(appsDir, { withFileTypes: true });\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code !== \"ENOENT\") {\n console.warn(\n `[workspace] Could not read ${appsDir} (${code ?? \"unknown\"}): ` +\n `${(err as Error).message}`,\n );\n Sentry.captureException(err, {\n tags: { handled: \"dev-discover-readdir\" },\n level: \"warning\",\n });\n }\n return [];\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => {\n const dir = path.join(appsDir, entry.name);\n const pkg = readJson(path.join(dir, \"package.json\"));\n if (!pkg) return null;\n const routeAccess = workspaceAppRouteAccessFromPackageJson(pkg);\n return {\n id: entry.name,\n name: pkg.displayName || pkg.name || entry.name,\n description: typeof pkg.description === \"string\" ? pkg.description : \"\",\n audience:\n workspaceAppAudienceFromPackageJson(pkg) ??\n DEFAULT_WORKSPACE_APP_AUDIENCE,\n publicPaths: routeAccess.publicPaths ?? [],\n protectedPaths: routeAccess.protectedPaths ?? [],\n dir,\n port: appPortStart,\n } satisfies WorkspaceApp;\n })\n .filter((app): app is WorkspaceApp => !!app)\n .sort(compareApps)\n .map((app, index) => ({ ...app, port: appPortStart + index }));\n}\n\nfunction compareApps(a: Pick<WorkspaceApp, \"id\">, b: Pick<WorkspaceApp, \"id\">) {\n if (a.id === \"dispatch\") return -1;\n if (b.id === \"dispatch\") return 1;\n return a.id.localeCompare(b.id);\n}\n\nfunction isChildDevServerUrlLine(line: string): boolean {\n return /^\\s*->\\s+(?:Local|Network):\\s+https?:\\/\\/(?:localhost|127\\.0\\.0\\.1|\\[::1\\]):\\d+(?:\\/\\S*)?\\s*$/i.test(\n line.replace(/\\u279c/g, \"->\"),\n );\n}\n\nfunction formatAppOutput(chunk: unknown): string {\n const lines = String(chunk)\n .split(/\\r?\\n/)\n .filter(Boolean)\n .filter((line) => !isChildDevServerUrlLine(line));\n return lines.length === 0 ? \"\" : lines.join(\"\\n\") + \"\\n\";\n}\n\nfunction appendAppOutputTail(app: WorkspaceApp, output: string): void {\n if (!output) return;\n const next = `${app.outputTail ?? \"\"}${output}`;\n app.outputTail =\n next.length > APP_OUTPUT_TAIL_BYTES\n ? next.slice(-APP_OUTPUT_TAIL_BYTES)\n : next;\n}\n\nfunction pipeAppOutput(\n prefix: string,\n chunk: unknown,\n write: (value: string) => void,\n): string {\n const output = formatAppOutput(chunk);\n if (!output) return \"\";\n const prefixed = output\n .trimEnd()\n .split(/\\n/)\n .map((line) => `${prefix} ${line}`)\n .join(\"\\n\");\n write(`${prefixed}\\n`);\n return output;\n}\n\nfunction firstPathSegment(url: string | undefined): string | null {\n if (!url) return null;\n try {\n const parsed = new URL(url, \"http://workspace.local\");\n const [segment] = parsed.pathname.split(\"/\").filter(Boolean);\n return segment || null;\n } catch {\n return null;\n }\n}\n\nfunction appRestartDelay(attempts: number): number {\n return Math.min(\n 1_000 * 2 ** Math.max(0, attempts - 1),\n APP_RESTART_MAX_DELAY_MS,\n );\n}\n\nfunction formatProxyReadyTimeout(timeoutMs: number): string {\n const seconds = timeoutMs / 1_000;\n return Number.isInteger(seconds) ? `${seconds}s` : `${timeoutMs}ms`;\n}\n\nfunction probePort(port: number, timeoutMs = 1_000): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = new net.Socket();\n let settled = false;\n const finish = (ok: boolean) => {\n if (settled) return;\n settled = true;\n socket.destroy();\n resolve(ok);\n };\n socket.setTimeout(timeoutMs);\n socket.once(\"connect\", () => finish(true));\n socket.once(\"error\", () => finish(false));\n socket.once(\"timeout\", () => finish(false));\n socket.connect(port, \"127.0.0.1\");\n });\n}\n\nfunction probeHttpReady(\n app: Pick<WorkspaceApp, \"id\" | \"port\">,\n timeoutMs = 1_000,\n): Promise<boolean> {\n return new Promise((resolve) => {\n let settled = false;\n let req: http.ClientRequest;\n const finish = (ok: boolean) => {\n if (settled) return;\n settled = true;\n req.destroy();\n resolve(ok);\n };\n req = http.request(\n {\n hostname: \"127.0.0.1\",\n port: app.port,\n method: \"GET\",\n path: `/${app.id}`,\n headers: {\n accept: \"text/html\",\n host: `127.0.0.1:${app.port}`,\n },\n },\n (res) => {\n res.resume();\n finish(true);\n },\n );\n req.setTimeout(timeoutMs, () => finish(false));\n req.once(\"error\", () => finish(false));\n req.end();\n });\n}\n\nfunction firstHeaderValue(\n value: string | string[] | number | undefined,\n): string | undefined {\n if (Array.isArray(value)) return value[0];\n if (value === undefined) return undefined;\n return String(value);\n}\n\nfunction wantsHtml(req: http.IncomingMessage): boolean {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return false;\n const accept = firstHeaderValue(req.headers.accept);\n if (!accept) return false;\n return accept.includes(\"text/html\");\n}\n\nfunction renderStartingApp(app: WorkspaceApp): string {\n const escapedName = escapeHtml(app.name || app.id);\n const failure = app.lastFailure;\n const retryDelayMs = failure\n ? Math.max(1_000, failure.nextRetryAt - Date.now() + 250)\n : 900;\n const refreshSeconds = failure\n ? Math.max(1, Math.ceil(retryDelayMs / 1_000))\n : 1;\n const refreshScriptDelay = failure ? retryDelayMs : 900;\n const title = failure\n ? `${failure.installing ? \"Install failed\" : \"App failed to start\"}: ${escapedName}`\n : `Starting ${escapedName}`;\n const message = failure\n ? `The workspace gateway will retry in ${Math.max(\n 1,\n Math.ceil((failure.nextRetryAt - Date.now()) / 1_000),\n )}s. Fix the error below or stop the server with Ctrl+C.`\n : app.installing\n ? \"The workspace gateway is installing this app's dependencies before starting it.\"\n : \"The workspace gateway is waking this app's dev server.\";\n const failureOutput = failure?.output.trim();\n return `<!doctype html>\n<html>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"refresh\" content=\"${refreshSeconds}\" />\n <title>${title}</title>\n <meta name=\"color-scheme\" content=\"light dark\" />\n <style>\n :root { --bg: #fafafa; --fg: #171717; --muted: #737373; --bar-bg: #e5e5e5; --bar-fill: #171717; --danger: #dc2626; --code-bg: #171717; --code-fg: #fafafa; }\n @media (prefers-color-scheme: dark) { :root { --bg: #0a0a0a; --fg: #fafafa; --muted: #a3a3a3; --bar-bg: #262626; --bar-fill: #fafafa; --danger: #f87171; --code-bg: #171717; --code-fg: #f5f5f5; } }\n body { min-height: 100vh; margin: 0; display: grid; place-items: center; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; background: var(--bg); color: var(--fg); }\n main { width: min(680px, calc(100vw - 48px)); }\n .bar { height: 3px; overflow: hidden; border-radius: 999px; background: var(--bar-bg); }\n .bar::before { content: \"\"; display: block; height: 100%; width: 42%; border-radius: inherit; background: var(--bar-fill); animation: load 1s ease-in-out infinite; }\n main.failed .bar::before { width: 100%; background: var(--danger); animation: none; }\n p { color: var(--muted); }\n pre { max-height: min(46vh, 360px); overflow: auto; margin-top: 20px; padding: 14px 16px; border-radius: 8px; background: var(--code-bg); color: var(--code-fg); font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace; white-space: pre-wrap; word-break: break-word; }\n @keyframes load { 0% { transform: translateX(-105%); } 100% { transform: translateX(245%); } }\n </style>\n <script>\n (() => {\n const reload = () => window.location.reload();\n setTimeout(reload, ${JSON.stringify(refreshScriptDelay)});\n setInterval(reload, ${JSON.stringify(Math.max(refreshScriptDelay, 3_000))});\n })();\n </script>\n </head>\n <body>\n <main class=\"${failure ? \"failed\" : \"\"}\">\n <div class=\"bar\"></div>\n <h1>${title}</h1>\n <p>${escapeHtml(message)}</p>\n ${failureOutput ? `<pre>${escapeHtml(failureOutput)}</pre>` : \"\"}\n </main>\n </body>\n</html>`;\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&amp;\";\n case \"<\":\n return \"&lt;\";\n case \">\":\n return \"&gt;\";\n case '\"':\n return \"&quot;\";\n default:\n return \"&#39;\";\n }\n });\n}\n\nfunction renderIndex(apps: WorkspaceApp[]): string {\n return `<!doctype html>\n<html>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Agent-Native Workspace</title>\n <meta name=\"color-scheme\" content=\"light dark\" />\n <style>\n :root { --bg: #fafafa; --fg: #171717; --muted: #737373; --card-bg: #ffffff; --card-border: #d4d4d4; }\n @media (prefers-color-scheme: dark) { :root { --bg: #0a0a0a; --fg: #fafafa; --muted: #a3a3a3; --card-bg: #171717; --card-border: #262626; } }\n body { font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; margin: 0; padding: 32px; background: var(--bg); color: var(--fg); }\n main { max-width: 760px; margin: 0 auto; }\n a { color: inherit; text-decoration: none; }\n .grid { display: grid; gap: 12px; margin-top: 20px; }\n .card { display: flex; justify-content: space-between; border: 1px solid var(--card-border); border-radius: 8px; padding: 14px 16px; background: var(--card-bg); }\n .muted { color: var(--muted); }\n </style>\n </head>\n <body>\n <main>\n <h1>Agent-Native Workspace</h1>\n <p class=\"muted\">Open an app below. Dispatch is the workspace control plane when installed.</p>\n <div class=\"grid\">\n ${apps\n .map(\n (app) =>\n `<a class=\"card\" href=\"/${app.id}\"><strong>${escapeHtml(app.name)}</strong><span class=\"muted\">/${escapeHtml(app.id)}</span></a>`,\n )\n .join(\"\")}\n </div>\n </main>\n </body>\n</html>`;\n}\n\nfunction hasLocalBin(dir: string, command: string): boolean {\n const binDir = path.join(dir, \"node_modules\", \".bin\");\n return (\n fs.existsSync(path.join(binDir, command)) ||\n fs.existsSync(path.join(binDir, `${command}.cmd`)) ||\n fs.existsSync(path.join(binDir, `${command}.ps1`))\n );\n}\n\nexport async function runWorkspaceDev(\n options: WorkspaceDevOptions = {},\n): Promise<WorkspaceDevHandle> {\n const args = options.args ?? process.argv.slice(2);\n const env = options.env ?? process.env;\n const root = options.root ?? process.cwd();\n const appsDir = path.join(root, \"apps\");\n const spawnProcess = options.spawnProcess ?? spawn;\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n fs.mkdirSync(path.join(root, \"data\"), { recursive: true });\n const gatewayHost = env.WORKSPACE_HOST || DEFAULT_GATEWAY_HOST;\n const requestedPort = Number(\n env.WORKSPACE_PORT || env.PORT || DEFAULT_GATEWAY_PORT,\n );\n const appPortStart = Number(\n env.WORKSPACE_APP_PORT_START || DEFAULT_APP_PORT_START,\n );\n const forceVite = env.WORKSPACE_VITE_FORCE === \"1\";\n const eager = shouldEagerStartWorkspaceApps(args, env);\n const pollingMode = pollingFileWatcherMode(env, root);\n const usePollingFileWatcher = pollingMode === \"enable\";\n const proxyReadyTimeoutMs = Number(\n env.WORKSPACE_PROXY_READY_TIMEOUT_MS ?? 30_000,\n );\n const proxyResponseTimeoutMs = Number(\n env.WORKSPACE_PROXY_RESPONSE_TIMEOUT_MS ??\n DEFAULT_PROXY_RESPONSE_TIMEOUT_MS,\n );\n const proxyNonHtmlResponseTimeoutMs = Number(\n env.WORKSPACE_PROXY_NON_HTML_RESPONSE_TIMEOUT_MS ??\n env.WORKSPACE_PROXY_RESPONSE_TIMEOUT_MS ??\n DEFAULT_PROXY_NON_HTML_RESPONSE_TIMEOUT_MS,\n );\n let gatewayUrl = `http://${gatewayHost}:${requestedPort}`;\n\n const apps = discoverApps(appsDir, appPortStart);\n if (apps.length === 0) {\n throw new Error(\"[workspace] No apps found under ./apps\");\n }\n\n // Probe each app's proposed port to see if something else on the host\n // already owns it. Vite is spawned with `--strictPort` (so the gateway can\n // route /<appId> to a known port), which fails hard on EADDRINUSE — without\n // this probe a single conflicting process on 8100/8101/... kills the\n // workspace before the dev server prints anything useful.\n function probePortAvailable(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const probe = net.createServer();\n probe.once(\"error\", () => resolve(false));\n probe.once(\"listening\", () => {\n probe.close(() => resolve(true));\n });\n probe.listen(port, gatewayHost);\n });\n }\n\n async function reserveAppPort(\n start: number,\n excluded: Set<number>,\n ): Promise<number> {\n for (let port = start; port < start + 100; port++) {\n if (excluded.has(port)) continue;\n if (port === requestedPort) continue;\n if (await probePortAvailable(port)) return port;\n }\n throw new Error(\n `[workspace] No available port found between ${start} and ${start + 100}`,\n );\n }\n\n const reservedAppPorts = new Set<number>();\n for (const app of apps) {\n const original = app.port;\n const port = await reserveAppPort(original, reservedAppPorts);\n if (port !== original) {\n stdout.write(\n `[workspace] Port ${original} unavailable for /${app.id}, using ${port}\\n`,\n );\n }\n app.port = port;\n reservedAppPorts.add(port);\n }\n\n const appById = new Map(apps.map((app) => [app.id, app]));\n const explicitDefaultApp =\n env.WORKSPACE_DEFAULT_APP && appById.has(env.WORKSPACE_DEFAULT_APP)\n ? env.WORKSPACE_DEFAULT_APP\n : null;\n const hasDispatch = appById.has(\"dispatch\");\n const defaultApp =\n explicitDefaultApp ?? (hasDispatch ? \"dispatch\" : apps[0].id);\n const redirectRootToDefault = Boolean(explicitDefaultApp || hasDispatch);\n\n let syncTimer: NodeJS.Timeout | undefined;\n let shuttingDown = false;\n let workspaceStarted = false;\n\n if (usePollingFileWatcher) {\n stdout.write(\n `[workspace] Using polling file watchers (${POLLING_WATCH_INTERVAL_MS}ms) to avoid remote-container inotify limits.\\n`,\n );\n }\n\n let readyResolve: (value: { port: number; url: string }) => void;\n const ready = new Promise<{ port: number; url: string }>((resolve) => {\n readyResolve = resolve;\n });\n\n function workspaceAppsJson(): string {\n return JSON.stringify(\n apps.map((workspaceApp) => ({\n id: workspaceApp.id,\n name: workspaceApp.name,\n description: workspaceApp.description,\n path: `/${workspaceApp.id}`,\n audience: workspaceApp.audience,\n publicPaths: workspaceApp.publicPaths,\n protectedPaths: workspaceApp.protectedPaths,\n })),\n );\n }\n\n async function syncApps(): Promise<void> {\n const discovered = discoverApps(appsDir, appPortStart);\n for (const app of discovered) {\n const existing = appById.get(app.id);\n if (existing) {\n existing.name = app.name;\n existing.description = app.description;\n existing.audience = app.audience;\n existing.publicPaths = app.publicPaths;\n existing.protectedPaths = app.protectedPaths;\n existing.dir = app.dir;\n continue;\n }\n const usedPorts = new Set(apps.map((existingApp) => existingApp.port));\n const port = await reserveAppPort(appPortStart, usedPorts);\n reservedAppPorts.add(port);\n const next = { ...app, port };\n apps.push(next);\n apps.sort(compareApps);\n appById.set(next.id, next);\n stdout.write(`[workspace] Detected new app: /${next.id}\\n`);\n }\n }\n\n function scheduleSync(): void {\n if (syncTimer) clearTimeout(syncTimer);\n syncTimer = setTimeout(() => {\n void syncApps().catch((err) => {\n stderr.write(\n `[workspace] App sync failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n });\n }, 400);\n }\n\n function appForRequest(req: http.IncomingMessage): WorkspaceApp | null {\n const params = new URL(req.url || \"/\", \"http://workspace.local\")\n .searchParams;\n const explicit = params.get(\"_app\");\n if (explicit && appById.has(explicit)) return appById.get(explicit) ?? null;\n\n const direct = firstPathSegment(req.url);\n if (direct && appById.has(direct)) return appById.get(direct) ?? null;\n\n const fromState = extractOAuthStateAppId(params.get(\"state\"));\n if (fromState && appById.has(fromState)) {\n return appById.get(fromState) ?? null;\n }\n\n const referer = req.headers.referer;\n const fromReferer =\n typeof referer === \"string\" ? firstPathSegment(referer) : null;\n return fromReferer && appById.has(fromReferer)\n ? (appById.get(fromReferer) ?? null)\n : null;\n }\n\n function startApp(app: WorkspaceApp): void {\n if (app.process && !app.process.killed) return;\n if (app.restartTimer) return;\n app.lastFailure = undefined;\n app.outputTail = undefined;\n\n const basePath = `/${app.id}`;\n const shouldInstall =\n !app.installAttempted && !hasLocalBin(app.dir, \"vite\");\n const childArgs = shouldInstall\n ? [\"--dir\", root, \"install\", \"--no-frozen-lockfile\", \"--prefer-offline\"]\n : [\n \"--dir\",\n app.dir,\n \"exec\",\n \"vite\",\n \"--host\",\n \"127.0.0.1\",\n \"--port\",\n String(app.port),\n \"--strictPort\",\n ...(forceVite ? [\"--force\"] : []),\n ];\n\n if (shouldInstall) {\n stdout.write(\n `[workspace] Installing dependencies before starting /${app.id}\\n`,\n );\n }\n\n const child = spawnProcess(\"pnpm\", childArgs, {\n cwd: root,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: devWatcherEnv(\n {\n ...env,\n APP_NAME: app.id,\n AGENT_NATIVE_WORKSPACE: \"1\",\n AGENT_NATIVE_WORKSPACE_APP_ID: app.id,\n AGENT_NATIVE_WORKSPACE_APPS_JSON: workspaceAppsJson(),\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: app.audience,\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\n app.publicPaths,\n ),\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\n app.protectedPaths,\n ),\n APP_BASE_PATH: basePath,\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: app.id,\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: workspaceAppsJson(),\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: app.audience,\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\n app.publicPaths,\n ),\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\n app.protectedPaths,\n ),\n VITE_APP_BASE_PATH: basePath,\n VITE_WORKSPACE_OAUTH_ORIGIN: workspaceOAuthOrigin(env, gatewayUrl),\n VITE_WORKSPACE_GATEWAY_URL: gatewayUrl,\n PORT: String(app.port),\n WORKSPACE_GATEWAY_URL: gatewayUrl,\n },\n pollingMode,\n ),\n });\n app.process = child;\n app.installing = shouldInstall;\n\n const prefix = `[${app.id}]`;\n const stableTimer = setTimeout(() => {\n app.restartAttempts = 0;\n }, 5_000);\n stableTimer.unref();\n\n child.stdout?.on(\"data\", (chunk) => {\n appendAppOutputTail(\n app,\n pipeAppOutput(prefix, chunk, (value) => stdout.write(value)),\n );\n });\n child.stderr?.on(\"data\", (chunk) => {\n appendAppOutputTail(\n app,\n pipeAppOutput(prefix, chunk, (value) => stderr.write(value)),\n );\n });\n child.on(\"exit\", (code, signal) => {\n clearTimeout(stableTimer);\n const wasInstalling = app.installing;\n app.process = undefined;\n app.installing = false;\n app.ready = false;\n app.readinessProbe = undefined;\n if (app.restartTimer) return;\n if (code === 0 || shuttingDown) {\n if (wasInstalling && code === 0 && !shuttingDown) {\n app.installAttempted = true;\n startApp(app);\n }\n return;\n }\n if (wasInstalling) app.installAttempted = false;\n scheduleAppRestart(app, {\n code,\n signal,\n installing: wasInstalling,\n output: app.outputTail ?? \"\",\n logMessage: `exited with code ${code}`,\n });\n });\n }\n\n function scheduleAppRestart(\n app: WorkspaceApp,\n input: {\n code: number | null;\n signal: NodeJS.Signals | null;\n installing: boolean;\n output: string;\n logMessage: string;\n },\n ): void {\n if (shuttingDown || app.restartTimer) return;\n if (input.installing) app.installAttempted = false;\n app.restartAttempts = (app.restartAttempts ?? 0) + 1;\n const delay = appRestartDelay(app.restartAttempts);\n const nextRetryAt = Date.now() + delay;\n app.lastFailure = {\n code: input.code,\n signal: input.signal,\n at: Date.now(),\n installing: input.installing,\n output: input.output,\n nextRetryAt,\n };\n stderr.write(\n `[${app.id}] ${input.logMessage}; retrying in ${Math.round(\n delay / 1000,\n )}s\\n`,\n );\n app.restartTimer = setTimeout(() => {\n app.restartTimer = undefined;\n startApp(app);\n }, delay);\n app.restartTimer.unref();\n }\n\n function failAppStartupTimeout(app: WorkspaceApp): void {\n if (app.installing || app.ready || app.restartTimer) return;\n const timeout = formatProxyReadyTimeout(proxyReadyTimeoutMs);\n const message =\n `Timed out waiting ${timeout} for /${app.id} to return ` +\n `an HTTP response on 127.0.0.1:${app.port}.`;\n const output = [message, app.outputTail?.trim()]\n .filter(Boolean)\n .join(\"\\n\\nLast child output:\\n\");\n app.ready = false;\n app.readinessProbe = undefined;\n scheduleAppRestart(app, {\n code: null,\n signal: null,\n installing: false,\n output,\n logMessage: message,\n });\n app.process?.kill(\"SIGTERM\");\n }\n\n function forwardedProto(req: http.IncomingMessage): string {\n return (\n firstHeaderValue(req.headers[\"x-forwarded-proto\"]) ||\n ((req.socket as { encrypted?: boolean }).encrypted ? \"https\" : \"http\")\n );\n }\n\n function forwardedHost(req: http.IncomingMessage): string {\n return (\n firstHeaderValue(req.headers[\"x-forwarded-host\"]) ||\n firstHeaderValue(req.headers.host) ||\n new URL(gatewayUrl).host\n );\n }\n\n function proxyHeaders(\n req: http.IncomingMessage,\n targetHost: string,\n ): http.OutgoingHttpHeaders {\n return {\n ...req.headers,\n \"x-forwarded-host\": forwardedHost(req),\n \"x-forwarded-proto\": forwardedProto(req),\n host: targetHost,\n };\n }\n\n async function waitForPort(port: number, deadline: number): Promise<boolean> {\n while (Date.now() < deadline) {\n if (await probePort(port)) return true;\n await new Promise((r) => setTimeout(r, PROXY_READY_RETRY_DELAY_MS));\n }\n return false;\n }\n\n async function waitForHttpReady(\n app: WorkspaceApp,\n deadline: number,\n ): Promise<boolean> {\n while (Date.now() < deadline) {\n const timeoutMs = Math.min(1_000, Math.max(1, deadline - Date.now()));\n if (await probeHttpReady(app, timeoutMs)) return true;\n await new Promise((r) => setTimeout(r, PROXY_READY_RETRY_DELAY_MS));\n }\n return false;\n }\n\n function ensureReadinessProbe(app: WorkspaceApp): void {\n if (app.ready || app.readinessProbe || app.installing) return;\n app.readinessProbe = waitForHttpReady(app, Date.now() + proxyReadyTimeoutMs)\n .then((ready) => {\n if (ready) {\n app.ready = true;\n return;\n }\n failAppStartupTimeout(app);\n })\n .finally(() => {\n app.readinessProbe = undefined;\n });\n }\n\n function proxyHttp(\n app: WorkspaceApp,\n req: http.IncomingMessage,\n res: http.ServerResponse,\n ): void {\n const cold = !app.process || app.process.killed;\n startApp(app);\n\n if (!app.ready && wantsHtml(req)) {\n ensureReadinessProbe(app);\n res.writeHead(200, STARTING_APP_RESPONSE_HEADERS);\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n res.end(renderStartingApp(app));\n return;\n }\n\n const serveStartingPage = () => {\n res.writeHead(200, STARTING_APP_RESPONSE_HEADERS);\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n res.end(renderStartingApp(app));\n };\n\n const dispatch = () => {\n const headers = proxyHeaders(req, `127.0.0.1:${app.port}`);\n let settled = false;\n let responseTimer: NodeJS.Timeout;\n const responseTimeoutMs = wantsHtml(req)\n ? proxyResponseTimeoutMs\n : proxyNonHtmlResponseTimeoutMs;\n const proxyReq = http.request(\n {\n hostname: \"127.0.0.1\",\n port: app.port,\n method: req.method,\n path: req.url,\n headers,\n },\n (proxyRes) => {\n if (settled) {\n proxyRes.resume();\n return;\n }\n settled = true;\n clearTimeout(responseTimer);\n app.ready = true;\n res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);\n proxyRes.pipe(res);\n },\n );\n responseTimer = setTimeout(() => {\n if (settled) return;\n settled = true;\n app.ready = false;\n proxyReq.destroy();\n ensureReadinessProbe(app);\n if (res.headersSent) {\n res.end();\n return;\n }\n if (wantsHtml(req)) {\n serveStartingPage();\n return;\n }\n res.writeHead(504, { \"content-type\": \"text/plain\" });\n res.end(\n `App \"${app.id}\" did not return response headers within ${formatProxyReadyTimeout(responseTimeoutMs)}.`,\n );\n }, responseTimeoutMs);\n responseTimer.unref();\n\n proxyReq.on(\"error\", (err) => {\n clearTimeout(responseTimer);\n if (settled) return;\n settled = true;\n if (res.headersSent) {\n res.end();\n return;\n }\n res.writeHead(502, { \"content-type\": \"text/plain\" });\n res.end(`App \"${app.id}\" is not ready yet: ${err.message}`);\n });\n\n req.pipe(proxyReq);\n };\n\n // Fast path: the upstream has accepted at least one request before, so\n // it's listening. Skip the probe so steady-state requests stay zero-latency.\n if (app.ready && !cold) {\n dispatch();\n return;\n }\n\n // Cold path: hold non-HTML requests open while the child server boots.\n // Node keeps the request body paused until pipe() attaches.\n void waitForHttpReady(app, Date.now() + proxyReadyTimeoutMs).then(\n (ready) => {\n if (!ready) {\n failAppStartupTimeout(app);\n if (!res.headersSent) {\n res.writeHead(502, { \"content-type\": \"text/plain\" });\n res.end(\n `App \"${app.id}\" is not ready yet: no HTTP response from 127.0.0.1:${app.port}`,\n );\n } else {\n res.end();\n }\n return;\n }\n app.ready = true;\n dispatch();\n },\n );\n }\n\n function proxyUpgrade(\n app: WorkspaceApp,\n req: http.IncomingMessage,\n socket: Duplex,\n head: Buffer,\n ): void {\n startApp(app);\n void waitForPort(app.port, Date.now() + proxyReadyTimeoutMs).then(\n (ready) => {\n if (!ready) {\n failAppStartupTimeout(app);\n socket.destroy();\n return;\n }\n app.ready = true;\n const target = net.connect(app.port, \"127.0.0.1\", () => {\n const headers = Object.entries(\n proxyHeaders(req, `127.0.0.1:${app.port}`),\n )\n .flatMap(([key, value]) =>\n Array.isArray(value)\n ? value.map((item) => `${key}: ${item}`)\n : [`${key}: ${value ?? \"\"}`],\n )\n .join(\"\\r\\n\");\n target.write(\n `${req.method} ${req.url} HTTP/${req.httpVersion}\\r\\n${headers}\\r\\n\\r\\n`,\n );\n if (head.length) target.write(head);\n socket.pipe(target).pipe(socket);\n });\n\n target.on(\"error\", () => socket.destroy());\n },\n );\n }\n\n function handleWatcherError(err: NodeJS.ErrnoException): void {\n if (isWorkspaceWatcherLimitError(err)) {\n stderr.write(\n `[workspace] Recursive file watcher hit the system limit (${err.code}). ` +\n `New apps will still be detected via polling every ~2s. ` +\n (err.code === \"ENOSPC\"\n ? `On Linux you can raise the limit with ` +\n `\\`sudo sysctl fs.inotify.max_user_watches=524288\\` ` +\n `(persist via /etc/sysctl.d/*.conf). `\n : `Try closing other dev servers or raising your open-file limit. `) +\n `On macOS/Windows this usually ` +\n `means too many other watchers are running.\\n`,\n );\n return;\n }\n if (err.code === \"ENOENT\") {\n return;\n }\n stderr.write(\n `[workspace] Recursive file watcher failed (${err.code ?? \"unknown\"}): ${err.message}. ` +\n `Falling back to polling.\\n`,\n );\n Sentry.captureException(err, {\n tags: { handled: \"dev-watch-unknown\" },\n level: \"warning\",\n });\n }\n\n function startWorkspaceProcesses(): void {\n if (workspaceStarted) return;\n workspaceStarted = true;\n for (const id of initialWorkspaceAppIds(\n apps,\n defaultApp,\n eager,\n redirectRootToDefault,\n )) {\n const app = appById.get(id);\n if (app) startApp(app);\n }\n try {\n const watcher = fs.watch(appsDir, { recursive: true }, scheduleSync);\n watcher.on(\"error\", (err) => {\n handleWatcherError(err as NodeJS.ErrnoException);\n });\n } catch (err) {\n handleWatcherError(err as NodeJS.ErrnoException);\n }\n setInterval(() => {\n void syncApps().catch(() => {});\n }, 2_000).unref();\n }\n\n /**\n * Background-spawn every app that wasn't started by `startWorkspaceProcesses`.\n * The lazy proxy still handles correctness (an on-demand request always\n * starts its target app); this is purely so the first navigation into a\n * non-default app doesn't pay the cold Vite + esbuild prebundle cost.\n *\n * Fires after a short delay so the default app's prebundle gets first dibs\n * on CPU. Concurrency-limited to avoid hammering a small dev machine —\n * each Vite spawn briefly maxes out a core during prebundling.\n */\n async function prewarmRemainingApps(): Promise<void> {\n const concurrency = workspacePrewarmConcurrency(args, env);\n const delayMs = workspacePrewarmDelayMs(env);\n\n const queue = apps\n .filter((app) => app.id !== defaultApp)\n .filter((app) => !(app.process && !app.process.killed))\n .map((app) => app.id);\n\n if (queue.length === 0) return;\n\n stdout.write(\n `[workspace] Prewarming ${queue.length} app(s) in the background ` +\n `(concurrency ${concurrency}; pass --no-prewarm to disable)\\n`,\n );\n\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n if (shuttingDown) return;\n\n let next = 0;\n async function worker(): Promise<void> {\n while (!shuttingDown && next < queue.length) {\n const id = queue[next++];\n const app = appById.get(id);\n if (!app) continue;\n // Another path (a real request, a restart, etc.) may have started\n // this app already — skip without consuming a worker slot needlessly.\n if (app.process && !app.process.killed) continue;\n startApp(app);\n ensureReadinessProbe(app);\n // Wait for the upstream to answer HTTP before pulling the next\n // app off the queue. This is what actually limits *concurrent\n // prebundling* (not just concurrent spawning) and keeps CPU pressure\n // sane. proxyReadyTimeoutMs caps any single stuck app.\n await waitForHttpReady(app, Date.now() + proxyReadyTimeoutMs).catch(\n () => false,\n );\n }\n }\n\n const workerCount = Math.max(1, Math.min(concurrency, queue.length));\n await Promise.all(Array.from({ length: workerCount }, () => worker()));\n }\n\n function openBrowser(url: string): void {\n if (options.openBrowser === false || env.WORKSPACE_NO_OPEN === \"1\") return;\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const openArgs =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawnProcess(command, openArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n }\n\n const server = http.createServer(async (req, res) => {\n const parsedUrl = new URL(req.url || \"/\", \"http://workspace.local\");\n const pathname = parsedUrl.pathname;\n\n if (pathname === \"/\" || pathname === \"/index.html\") {\n await syncApps().catch(() => {});\n const currentDefaultApp =\n explicitDefaultApp && appById.has(explicitDefaultApp)\n ? explicitDefaultApp\n : appById.has(\"dispatch\")\n ? \"dispatch\"\n : defaultApp;\n const shouldRedirectRoot =\n Boolean(explicitDefaultApp && appById.has(explicitDefaultApp)) ||\n appById.has(\"dispatch\");\n if (shouldRedirectRoot) {\n res.writeHead(302, {\n location: `/${currentDefaultApp}${parsedUrl.search}`,\n });\n res.end();\n return;\n }\n res.writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" });\n res.end(renderIndex(apps));\n return;\n }\n\n if (pathname === \"/_workspace/apps\") {\n await syncApps().catch(() => {});\n res.writeHead(200, { \"content-type\": \"application/json\" });\n res.end(\n JSON.stringify(\n apps.map((app) => ({\n id: app.id,\n name: app.name,\n description: app.description,\n path: `/${app.id}`,\n audience: app.audience,\n publicPaths: app.publicPaths,\n protectedPaths: app.protectedPaths,\n port: app.port,\n running: Boolean(app.process && !app.process.killed),\n })),\n ),\n );\n return;\n }\n\n let app = appForRequest(req);\n if (!app) {\n await syncApps().catch(() => {});\n app = appForRequest(req);\n }\n if (!app) {\n res.writeHead(404, { \"content-type\": \"text/html; charset=utf-8\" });\n res.end(renderIndex(apps));\n return;\n }\n proxyHttp(app, req, res);\n });\n\n server.on(\"upgrade\", (req, socket, head) => {\n const app = appForRequest(req);\n if (!app) {\n socket.destroy();\n return;\n }\n proxyUpgrade(app, req, socket, head);\n });\n\n function listen(port: number, attempts = 20): void {\n server.once(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\" && attempts > 0) {\n listen(port + 1, attempts - 1);\n return;\n }\n stderr.write(`[workspace] Could not start gateway: ${err.message}\\n`);\n throw err;\n });\n server.listen(port, gatewayHost, () => {\n const address = server.address();\n const actualPort =\n typeof address === \"object\" && address ? address.port : port;\n gatewayUrl = `http://${gatewayHost}:${actualPort}`;\n stdout.write(\n `[workspace] Default: ${redirectRootToDefault ? `${gatewayUrl}/${defaultApp}` : gatewayUrl}\\n`,\n );\n stdout.write(`[workspace] Gateway: ${gatewayUrl}\\n`);\n const prewarming = shouldPrewarmWorkspaceApps(args, env);\n stdout.write(\n `[workspace] Mode: ${\n eager ? \"eager\" : prewarming ? \"lazy+prewarm\" : \"lazy\"\n }\\n`,\n );\n for (const app of apps) {\n stdout.write(\n `[workspace] ${app.id}: /${app.id} -> 127.0.0.1:${app.port}\\n`,\n );\n }\n startWorkspaceProcesses();\n if (prewarming) {\n void prewarmRemainingApps().catch((err) => {\n stderr.write(\n `[workspace] Prewarm error: ${\n err instanceof Error ? err.message : String(err)\n }\\n`,\n );\n });\n }\n openBrowser(\n redirectRootToDefault ? `${gatewayUrl}/${defaultApp}` : gatewayUrl,\n );\n readyResolve({ port: actualPort, url: gatewayUrl });\n });\n }\n\n function shutdown(): void {\n if (shuttingDown) return;\n shuttingDown = true;\n server.close();\n for (const app of apps) {\n app.process?.kill(\"SIGTERM\");\n }\n if (syncTimer) clearTimeout(syncTimer);\n process.off(\"SIGINT\", handleSigint);\n process.off(\"SIGTERM\", handleSigterm);\n }\n\n const handleSigint = () => shutdown();\n const handleSigterm = () => shutdown();\n process.once(\"SIGINT\", handleSigint);\n process.once(\"SIGTERM\", handleSigterm);\n\n listen(requestedPort);\n\n return {\n apps,\n defaultApp,\n gatewayUrl: () => gatewayUrl,\n ready,\n server,\n shutdown,\n };\n}\n\nfunction isDirectRun(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return path.resolve(entry) === fileURLToPath(import.meta.url);\n } catch {\n return false;\n }\n}\n\nif (isDirectRun()) {\n runWorkspaceDev({ args: process.argv.slice(2) }).catch((err) => {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n });\n}\n"]}
1
+ {"version":3,"file":"workspace-dev.js","sourceRoot":"","sources":["../../src/cli/workspace-dev.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env tsx\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport http from \"node:http\";\nimport net from \"node:net\";\nimport path from \"node:path\";\nimport type { Duplex } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport * as Sentry from \"@sentry/node\";\nimport { extractOAuthStateAppId } from \"../shared/oauth-state.js\";\nimport {\n normalizeOrigin,\n rewriteRedirectLocation,\n escapeHtml,\n} from \"./gateway-helpers.js\";\nimport {\n DEFAULT_WORKSPACE_APP_AUDIENCE,\n workspaceAppAudienceFromPackageJson,\n workspaceAppRouteAccessFromPackageJson,\n type WorkspaceAppAudience,\n} from \"../shared/workspace-app-audience.js\";\n\nexport interface WorkspaceApp {\n id: string;\n name: string;\n description: string;\n audience: WorkspaceAppAudience;\n publicPaths: string[];\n protectedPaths: string[];\n dir: string;\n port: number;\n process?: ChildProcess;\n restartTimer?: NodeJS.Timeout;\n restartAttempts?: number;\n lastFailure?: {\n code: number | null;\n signal: NodeJS.Signals | null;\n at: number;\n installing: boolean;\n output: string;\n nextRetryAt: number;\n };\n outputTail?: string;\n installing?: boolean;\n installAttempted?: boolean;\n /**\n * Set true once we've successfully connected to the upstream. After that we\n * skip the readiness probe on every request; the child server stays\n * listening for the rest of the dev session.\n */\n ready?: boolean;\n readinessProbe?: Promise<void>;\n}\n\nexport interface WorkspaceDevOptions {\n args?: string[];\n env?: NodeJS.ProcessEnv;\n root?: string;\n spawnProcess?: typeof spawn;\n openBrowser?: boolean;\n stdout?: Pick<NodeJS.WriteStream, \"write\">;\n stderr?: Pick<NodeJS.WriteStream, \"write\">;\n}\n\nexport interface WorkspaceDevHandle {\n apps: WorkspaceApp[];\n defaultApp: string;\n gatewayUrl: () => string;\n ready: Promise<{ port: number; url: string }>;\n server: http.Server;\n shutdown: () => void;\n}\n\nconst DEFAULT_GATEWAY_HOST = \"127.0.0.1\";\nconst DEFAULT_GATEWAY_PORT = 8080;\nconst DEFAULT_APP_PORT_START = 8100;\nconst PROXY_READY_RETRY_DELAY_MS = 250;\nconst APP_RESTART_MAX_DELAY_MS = 10_000;\nconst DEFAULT_PROXY_RESPONSE_TIMEOUT_MS = 5_000;\nconst DEFAULT_PROXY_NON_HTML_RESPONSE_TIMEOUT_MS = 120_000;\nconst APP_OUTPUT_TAIL_BYTES = 8_000;\nconst POLLING_WATCH_INTERVAL_MS = \"1000\";\nconst STARTING_APP_RESPONSE_HEADERS: http.OutgoingHttpHeaders = {\n \"content-type\": \"text/html; charset=utf-8\",\n \"cache-control\": \"no-store, no-cache, max-age=0, must-revalidate\",\n pragma: \"no-cache\",\n expires: \"0\",\n};\n\nfunction workspaceOAuthOrigin(\n env: NodeJS.ProcessEnv,\n gatewayUrl: string,\n): string | undefined {\n return (\n normalizeOrigin(env.VITE_WORKSPACE_OAUTH_ORIGIN) ||\n normalizeOrigin(env.WORKSPACE_OAUTH_ORIGIN) ||\n normalizeOrigin(env.APP_URL) ||\n normalizeOrigin(env.BETTER_AUTH_URL) ||\n normalizeOrigin(gatewayUrl)\n );\n}\n\nexport function isWorkspaceWatcherLimitError(\n err: Pick<NodeJS.ErrnoException, \"code\">,\n): boolean {\n return err.code === \"ENOSPC\" || err.code === \"EMFILE\";\n}\n\nexport function shouldEagerStartWorkspaceApps(\n args: string[] = [],\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n return (\n args.includes(\"--eager\") ||\n env.WORKSPACE_EAGER === \"1\" ||\n env.WORKSPACE_EAGER === \"true\"\n );\n}\n\n/**\n * Whether the gateway should spawn the rest of the apps in the background\n * after the default app boots. Lazy spawn already covers correctness — this\n * is purely a UX optimization so the second/third/Nth app the user clicks\n * into is already warm instead of paying the Vite + esbuild prebundle cost\n * on demand.\n *\n * Defaults to ON in lazy mode. Off when the user passed --no-prewarm /\n * WORKSPACE_NO_PREWARM=1, or when eager mode is already starting every app\n * up front (in which case prewarm would be redundant).\n */\nexport function shouldPrewarmWorkspaceApps(\n args: string[] = [],\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n if (args.includes(\"--no-prewarm\")) return false;\n if (env.WORKSPACE_NO_PREWARM === \"1\" || env.WORKSPACE_NO_PREWARM === \"true\") {\n return false;\n }\n // Eager mode starts every app immediately; prewarm has nothing to do.\n if (shouldEagerStartWorkspaceApps(args, env)) return false;\n return true;\n}\n\n/**\n * How many apps to prewarm in parallel. Each Vite spawn briefly maxes out a\n * CPU core during esbuild prebundling, so booting all 9 templates at once on\n * a 4-core laptop just produces a thundering herd. Default 2 — gentle on\n * laptops, fast enough that all apps finish within a few cold-spawn windows.\n * Override via --prewarm-concurrency=N or WORKSPACE_PREWARM_CONCURRENCY=N.\n */\nexport function workspacePrewarmConcurrency(\n args: string[] = [],\n env: NodeJS.ProcessEnv = process.env,\n): number {\n const flag = args.find((arg) => arg.startsWith(\"--prewarm-concurrency=\"));\n const raw = flag\n ? flag.slice(\"--prewarm-concurrency=\".length)\n : env.WORKSPACE_PREWARM_CONCURRENCY;\n if (!raw) return 2;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 1) return 2;\n return Math.floor(parsed);\n}\n\n/**\n * How long the prewarm queue waits after the gateway is ready before kicking\n * off background spawns. Lets the default app's prebundle get first dibs on\n * CPU. Override via WORKSPACE_PREWARM_DELAY_MS (mostly for tests).\n */\nexport function workspacePrewarmDelayMs(\n env: NodeJS.ProcessEnv = process.env,\n): number {\n const raw = env.WORKSPACE_PREWARM_DELAY_MS;\n if (raw === undefined) return 1_000;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 0) return 1_000;\n return Math.floor(parsed);\n}\n\nfunction readBooleanEnv(value: string | undefined): boolean | undefined {\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if ([\"1\", \"true\", \"yes\", \"on\"].includes(normalized)) return true;\n if ([\"0\", \"false\", \"no\", \"off\"].includes(normalized)) return false;\n return undefined;\n}\n\nexport type PollingFileWatcherMode =\n | \"enable\"\n | \"disable-explicit\"\n | \"disable-default\";\n\n/**\n * Three-way classification of the polling-watcher decision so callers can\n * tell apart \"the user explicitly turned this off\" (where we want to override\n * any inherited chokidar/TSC env vars from the parent shell) from \"we just\n * didn't auto-detect a Builder/Codespaces/Gitpod container\" (where the user's\n * own watcher vars should pass through untouched).\n */\nexport function pollingFileWatcherMode(\n env: NodeJS.ProcessEnv = process.env,\n root = process.cwd(),\n): PollingFileWatcherMode {\n const explicit =\n readBooleanEnv(env.AGENT_NATIVE_DEV_USE_POLLING) ??\n readBooleanEnv(env.WORKSPACE_USE_POLLING_WATCHER);\n if (explicit === true) return \"enable\";\n if (explicit === false) return \"disable-explicit\";\n\n const chokidarExplicit = readBooleanEnv(env.CHOKIDAR_USEPOLLING);\n if (chokidarExplicit === true) return \"enable\";\n if (chokidarExplicit === false) return \"disable-explicit\";\n\n const autoEnable = Boolean(\n env.BUILDER_IO_DEV_SERVER ||\n env.BUILDER_PROJECT_ID ||\n env.BUILDER_WORKSPACE_ID ||\n env.CODESPACES ||\n env.GITPOD_WORKSPACE_ID ||\n env.REMOTE_CONTAINERS ||\n env.DEVCONTAINER ||\n root.startsWith(\"/root/app/\"),\n );\n return autoEnable ? \"enable\" : \"disable-default\";\n}\n\nexport function shouldUsePollingFileWatcher(\n env: NodeJS.ProcessEnv = process.env,\n root = process.cwd(),\n): boolean {\n return pollingFileWatcherMode(env, root) === \"enable\";\n}\n\nfunction devWatcherEnv(\n env: NodeJS.ProcessEnv,\n mode: PollingFileWatcherMode,\n): NodeJS.ProcessEnv {\n if (mode === \"enable\") {\n return {\n ...env,\n CHOKIDAR_USEPOLLING: \"1\",\n CHOKIDAR_INTERVAL: env.CHOKIDAR_INTERVAL ?? POLLING_WATCH_INTERVAL_MS,\n TSC_WATCHFILE: env.TSC_WATCHFILE ?? \"DynamicPriorityPolling\",\n TSC_WATCHDIRECTORY: env.TSC_WATCHDIRECTORY ?? \"DynamicPriorityPolling\",\n };\n }\n if (mode === \"disable-explicit\") {\n // The user explicitly turned polling off (AGENT_NATIVE_DEV_USE_POLLING=0\n // / WORKSPACE_USE_POLLING_WATCHER=0 / CHOKIDAR_USEPOLLING=0). Strip the\n // watcher vars from the child env so an inherited parent-shell\n // CHOKIDAR_USEPOLLING=1 (or stale TSC_WATCH* override) can't silently\n // re-enable polling against the user's explicit wish.\n const {\n CHOKIDAR_USEPOLLING: _polling,\n CHOKIDAR_INTERVAL: _interval,\n TSC_WATCHFILE: _watchFile,\n TSC_WATCHDIRECTORY: _watchDir,\n ...rest\n } = env;\n return rest;\n }\n // mode === \"disable-default\": no explicit signal either way. Pass the env\n // through unchanged so legitimate user overrides like\n // TSC_WATCHFILE=UseFsEventsWithFallbackDynamicPolling survive.\n return env;\n}\n\nexport function initialWorkspaceAppIds(\n apps: Array<Pick<WorkspaceApp, \"id\">>,\n defaultApp: string,\n eager: boolean,\n startDefault = true,\n): string[] {\n if (eager) return apps.map((app) => app.id);\n if (!startDefault) return [];\n return apps.some((app) => app.id === defaultApp) ? [defaultApp] : [];\n}\n\nfunction readJson(file: string): any {\n try {\n return JSON.parse(fs.readFileSync(file, \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction discoverApps(appsDir: string, appPortStart: number): WorkspaceApp[] {\n if (!fs.existsSync(appsDir)) return [];\n // existsSync -> readdirSync is a TOCTOU race. Treat ENOENT as \"no apps\n // right now\" and let the polling sync recover.\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(appsDir, { withFileTypes: true });\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code !== \"ENOENT\") {\n console.warn(\n `[workspace] Could not read ${appsDir} (${code ?? \"unknown\"}): ` +\n `${(err as Error).message}`,\n );\n Sentry.captureException(err, {\n tags: { handled: \"dev-discover-readdir\" },\n level: \"warning\",\n });\n }\n return [];\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => {\n const dir = path.join(appsDir, entry.name);\n const pkg = readJson(path.join(dir, \"package.json\"));\n if (!pkg) return null;\n const routeAccess = workspaceAppRouteAccessFromPackageJson(pkg);\n return {\n id: entry.name,\n name: pkg.displayName || pkg.name || entry.name,\n description: typeof pkg.description === \"string\" ? pkg.description : \"\",\n audience:\n workspaceAppAudienceFromPackageJson(pkg) ??\n DEFAULT_WORKSPACE_APP_AUDIENCE,\n publicPaths: routeAccess.publicPaths ?? [],\n protectedPaths: routeAccess.protectedPaths ?? [],\n dir,\n port: appPortStart,\n } satisfies WorkspaceApp;\n })\n .filter((app): app is WorkspaceApp => !!app)\n .sort(compareApps)\n .map((app, index) => ({ ...app, port: appPortStart + index }));\n}\n\nfunction compareApps(a: Pick<WorkspaceApp, \"id\">, b: Pick<WorkspaceApp, \"id\">) {\n if (a.id === \"dispatch\") return -1;\n if (b.id === \"dispatch\") return 1;\n return a.id.localeCompare(b.id);\n}\n\nfunction isChildDevServerUrlLine(line: string): boolean {\n return /^\\s*->\\s+(?:Local|Network):\\s+https?:\\/\\/(?:localhost|127\\.0\\.0\\.1|\\[::1\\]):\\d+(?:\\/\\S*)?\\s*$/i.test(\n line.replace(/\\u279c/g, \"->\"),\n );\n}\n\nfunction formatAppOutput(chunk: unknown): string {\n const lines = String(chunk)\n .split(/\\r?\\n/)\n .filter(Boolean)\n .filter((line) => !isChildDevServerUrlLine(line));\n return lines.length === 0 ? \"\" : lines.join(\"\\n\") + \"\\n\";\n}\n\nfunction appendAppOutputTail(app: WorkspaceApp, output: string): void {\n if (!output) return;\n const next = `${app.outputTail ?? \"\"}${output}`;\n app.outputTail =\n next.length > APP_OUTPUT_TAIL_BYTES\n ? next.slice(-APP_OUTPUT_TAIL_BYTES)\n : next;\n}\n\nfunction pipeAppOutput(\n prefix: string,\n chunk: unknown,\n write: (value: string) => void,\n): string {\n const output = formatAppOutput(chunk);\n if (!output) return \"\";\n const prefixed = output\n .trimEnd()\n .split(/\\n/)\n .map((line) => `${prefix} ${line}`)\n .join(\"\\n\");\n write(`${prefixed}\\n`);\n return output;\n}\n\nfunction firstPathSegment(url: string | undefined): string | null {\n if (!url) return null;\n try {\n const parsed = new URL(url, \"http://workspace.local\");\n const [segment] = parsed.pathname.split(\"/\").filter(Boolean);\n return segment || null;\n } catch {\n return null;\n }\n}\n\nfunction appRestartDelay(attempts: number): number {\n return Math.min(\n 1_000 * 2 ** Math.max(0, attempts - 1),\n APP_RESTART_MAX_DELAY_MS,\n );\n}\n\nfunction formatProxyReadyTimeout(timeoutMs: number): string {\n const seconds = timeoutMs / 1_000;\n return Number.isInteger(seconds) ? `${seconds}s` : `${timeoutMs}ms`;\n}\n\nfunction probePort(port: number, timeoutMs = 1_000): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = new net.Socket();\n let settled = false;\n const finish = (ok: boolean) => {\n if (settled) return;\n settled = true;\n socket.destroy();\n resolve(ok);\n };\n socket.setTimeout(timeoutMs);\n socket.once(\"connect\", () => finish(true));\n socket.once(\"error\", () => finish(false));\n socket.once(\"timeout\", () => finish(false));\n socket.connect(port, \"127.0.0.1\");\n });\n}\n\nfunction probeHttpReady(\n app: Pick<WorkspaceApp, \"id\" | \"port\">,\n timeoutMs = 1_000,\n): Promise<boolean> {\n return new Promise((resolve) => {\n let settled = false;\n let req: http.ClientRequest;\n const finish = (ok: boolean) => {\n if (settled) return;\n settled = true;\n req.destroy();\n resolve(ok);\n };\n req = http.request(\n {\n hostname: \"127.0.0.1\",\n port: app.port,\n method: \"GET\",\n path: `/${app.id}`,\n headers: {\n accept: \"text/html\",\n host: `127.0.0.1:${app.port}`,\n },\n },\n (res) => {\n res.resume();\n finish(true);\n },\n );\n req.setTimeout(timeoutMs, () => finish(false));\n req.once(\"error\", () => finish(false));\n req.end();\n });\n}\n\nfunction firstHeaderValue(\n value: string | string[] | number | undefined,\n): string | undefined {\n if (Array.isArray(value)) return value[0];\n if (value === undefined) return undefined;\n return String(value);\n}\n\nfunction wantsHtml(req: http.IncomingMessage): boolean {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") return false;\n const accept = firstHeaderValue(req.headers.accept);\n if (!accept) return false;\n return accept.includes(\"text/html\");\n}\n\nfunction renderStartingApp(app: WorkspaceApp): string {\n const escapedName = escapeHtml(app.name || app.id);\n const failure = app.lastFailure;\n const retryDelayMs = failure\n ? Math.max(1_000, failure.nextRetryAt - Date.now() + 250)\n : 900;\n const refreshSeconds = failure\n ? Math.max(1, Math.ceil(retryDelayMs / 1_000))\n : 1;\n const refreshScriptDelay = failure ? retryDelayMs : 900;\n const title = failure\n ? `${failure.installing ? \"Install failed\" : \"App failed to start\"}: ${escapedName}`\n : `Starting ${escapedName}`;\n const message = failure\n ? `The workspace gateway will retry in ${Math.max(\n 1,\n Math.ceil((failure.nextRetryAt - Date.now()) / 1_000),\n )}s. Fix the error below or stop the server with Ctrl+C.`\n : app.installing\n ? \"The workspace gateway is installing this app's dependencies before starting it.\"\n : \"The workspace gateway is waking this app's dev server.\";\n const failureOutput = failure?.output.trim();\n return `<!doctype html>\n<html>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"refresh\" content=\"${refreshSeconds}\" />\n <title>${title}</title>\n <meta name=\"color-scheme\" content=\"light dark\" />\n <style>\n :root { --bg: #fafafa; --fg: #171717; --muted: #737373; --bar-bg: #e5e5e5; --bar-fill: #171717; --danger: #dc2626; --code-bg: #171717; --code-fg: #fafafa; }\n @media (prefers-color-scheme: dark) { :root { --bg: #0a0a0a; --fg: #fafafa; --muted: #a3a3a3; --bar-bg: #262626; --bar-fill: #fafafa; --danger: #f87171; --code-bg: #171717; --code-fg: #f5f5f5; } }\n body { min-height: 100vh; margin: 0; display: grid; place-items: center; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; background: var(--bg); color: var(--fg); }\n main { width: min(680px, calc(100vw - 48px)); }\n .bar { height: 3px; overflow: hidden; border-radius: 999px; background: var(--bar-bg); }\n .bar::before { content: \"\"; display: block; height: 100%; width: 42%; border-radius: inherit; background: var(--bar-fill); animation: load 1s ease-in-out infinite; }\n main.failed .bar::before { width: 100%; background: var(--danger); animation: none; }\n p { color: var(--muted); }\n pre { max-height: min(46vh, 360px); overflow: auto; margin-top: 20px; padding: 14px 16px; border-radius: 8px; background: var(--code-bg); color: var(--code-fg); font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace; white-space: pre-wrap; word-break: break-word; }\n @keyframes load { 0% { transform: translateX(-105%); } 100% { transform: translateX(245%); } }\n </style>\n <script>\n (() => {\n const reload = () => window.location.reload();\n setTimeout(reload, ${JSON.stringify(refreshScriptDelay)});\n setInterval(reload, ${JSON.stringify(Math.max(refreshScriptDelay, 3_000))});\n })();\n </script>\n </head>\n <body>\n <main class=\"${failure ? \"failed\" : \"\"}\">\n <div class=\"bar\"></div>\n <h1>${title}</h1>\n <p>${escapeHtml(message)}</p>\n ${failureOutput ? `<pre>${escapeHtml(failureOutput)}</pre>` : \"\"}\n </main>\n </body>\n</html>`;\n}\n\nfunction renderIndex(apps: WorkspaceApp[]): string {\n return `<!doctype html>\n<html>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Agent-Native Workspace</title>\n <meta name=\"color-scheme\" content=\"light dark\" />\n <style>\n :root { --bg: #fafafa; --fg: #171717; --muted: #737373; --card-bg: #ffffff; --card-border: #d4d4d4; }\n @media (prefers-color-scheme: dark) { :root { --bg: #0a0a0a; --fg: #fafafa; --muted: #a3a3a3; --card-bg: #171717; --card-border: #262626; } }\n body { font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; margin: 0; padding: 32px; background: var(--bg); color: var(--fg); }\n main { max-width: 760px; margin: 0 auto; }\n a { color: inherit; text-decoration: none; }\n .grid { display: grid; gap: 12px; margin-top: 20px; }\n .card { display: flex; justify-content: space-between; border: 1px solid var(--card-border); border-radius: 8px; padding: 14px 16px; background: var(--card-bg); }\n .muted { color: var(--muted); }\n </style>\n </head>\n <body>\n <main>\n <h1>Agent-Native Workspace</h1>\n <p class=\"muted\">Open an app below. Dispatch is the workspace control plane when installed.</p>\n <div class=\"grid\">\n ${apps\n .map(\n (app) =>\n `<a class=\"card\" href=\"/${app.id}\"><strong>${escapeHtml(app.name)}</strong><span class=\"muted\">/${escapeHtml(app.id)}</span></a>`,\n )\n .join(\"\")}\n </div>\n </main>\n </body>\n</html>`;\n}\n\nfunction hasLocalBin(dir: string, command: string): boolean {\n const binDir = path.join(dir, \"node_modules\", \".bin\");\n return (\n fs.existsSync(path.join(binDir, command)) ||\n fs.existsSync(path.join(binDir, `${command}.cmd`)) ||\n fs.existsSync(path.join(binDir, `${command}.ps1`))\n );\n}\n\nexport async function runWorkspaceDev(\n options: WorkspaceDevOptions = {},\n): Promise<WorkspaceDevHandle> {\n const args = options.args ?? process.argv.slice(2);\n const env = options.env ?? process.env;\n const root = options.root ?? process.cwd();\n const appsDir = path.join(root, \"apps\");\n const spawnProcess = options.spawnProcess ?? spawn;\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n\n fs.mkdirSync(path.join(root, \"data\"), { recursive: true });\n const gatewayHost = env.WORKSPACE_HOST || DEFAULT_GATEWAY_HOST;\n const requestedPort = Number(\n env.WORKSPACE_PORT || env.PORT || DEFAULT_GATEWAY_PORT,\n );\n const appPortStart = Number(\n env.WORKSPACE_APP_PORT_START || DEFAULT_APP_PORT_START,\n );\n const forceVite = env.WORKSPACE_VITE_FORCE === \"1\";\n const eager = shouldEagerStartWorkspaceApps(args, env);\n const pollingMode = pollingFileWatcherMode(env, root);\n const usePollingFileWatcher = pollingMode === \"enable\";\n const proxyReadyTimeoutMs = Number(\n env.WORKSPACE_PROXY_READY_TIMEOUT_MS ?? 30_000,\n );\n const proxyResponseTimeoutMs = Number(\n env.WORKSPACE_PROXY_RESPONSE_TIMEOUT_MS ??\n DEFAULT_PROXY_RESPONSE_TIMEOUT_MS,\n );\n const proxyNonHtmlResponseTimeoutMs = Number(\n env.WORKSPACE_PROXY_NON_HTML_RESPONSE_TIMEOUT_MS ??\n env.WORKSPACE_PROXY_RESPONSE_TIMEOUT_MS ??\n DEFAULT_PROXY_NON_HTML_RESPONSE_TIMEOUT_MS,\n );\n let gatewayUrl = `http://${gatewayHost}:${requestedPort}`;\n\n const apps = discoverApps(appsDir, appPortStart);\n if (apps.length === 0) {\n throw new Error(\"[workspace] No apps found under ./apps\");\n }\n\n // Probe each app's proposed port to see if something else on the host\n // already owns it. Vite is spawned with `--strictPort` (so the gateway can\n // route /<appId> to a known port), which fails hard on EADDRINUSE — without\n // this probe a single conflicting process on 8100/8101/... kills the\n // workspace before the dev server prints anything useful.\n function probePortAvailable(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const probe = net.createServer();\n probe.once(\"error\", () => resolve(false));\n probe.once(\"listening\", () => {\n probe.close(() => resolve(true));\n });\n probe.listen(port, gatewayHost);\n });\n }\n\n async function reserveAppPort(\n start: number,\n excluded: Set<number>,\n ): Promise<number> {\n for (let port = start; port < start + 100; port++) {\n if (excluded.has(port)) continue;\n if (port === requestedPort) continue;\n if (await probePortAvailable(port)) return port;\n }\n throw new Error(\n `[workspace] No available port found between ${start} and ${start + 100}`,\n );\n }\n\n const reservedAppPorts = new Set<number>();\n for (const app of apps) {\n const original = app.port;\n const port = await reserveAppPort(original, reservedAppPorts);\n if (port !== original) {\n stdout.write(\n `[workspace] Port ${original} unavailable for /${app.id}, using ${port}\\n`,\n );\n }\n app.port = port;\n reservedAppPorts.add(port);\n }\n\n const appById = new Map(apps.map((app) => [app.id, app]));\n const explicitDefaultApp =\n env.WORKSPACE_DEFAULT_APP && appById.has(env.WORKSPACE_DEFAULT_APP)\n ? env.WORKSPACE_DEFAULT_APP\n : null;\n const hasDispatch = appById.has(\"dispatch\");\n const defaultApp =\n explicitDefaultApp ?? (hasDispatch ? \"dispatch\" : apps[0].id);\n const redirectRootToDefault = Boolean(explicitDefaultApp || hasDispatch);\n\n let syncTimer: NodeJS.Timeout | undefined;\n let shuttingDown = false;\n let workspaceStarted = false;\n\n if (usePollingFileWatcher) {\n stdout.write(\n `[workspace] Using polling file watchers (${POLLING_WATCH_INTERVAL_MS}ms) to avoid remote-container inotify limits.\\n`,\n );\n }\n\n let readyResolve: (value: { port: number; url: string }) => void;\n const ready = new Promise<{ port: number; url: string }>((resolve) => {\n readyResolve = resolve;\n });\n\n function workspaceAppsJson(): string {\n return JSON.stringify(\n apps.map((workspaceApp) => ({\n id: workspaceApp.id,\n name: workspaceApp.name,\n description: workspaceApp.description,\n path: `/${workspaceApp.id}`,\n audience: workspaceApp.audience,\n publicPaths: workspaceApp.publicPaths,\n protectedPaths: workspaceApp.protectedPaths,\n })),\n );\n }\n\n async function syncApps(): Promise<void> {\n const discovered = discoverApps(appsDir, appPortStart);\n for (const app of discovered) {\n const existing = appById.get(app.id);\n if (existing) {\n existing.name = app.name;\n existing.description = app.description;\n existing.audience = app.audience;\n existing.publicPaths = app.publicPaths;\n existing.protectedPaths = app.protectedPaths;\n existing.dir = app.dir;\n continue;\n }\n const usedPorts = new Set(apps.map((existingApp) => existingApp.port));\n const port = await reserveAppPort(appPortStart, usedPorts);\n reservedAppPorts.add(port);\n const next = { ...app, port };\n apps.push(next);\n apps.sort(compareApps);\n appById.set(next.id, next);\n stdout.write(`[workspace] Detected new app: /${next.id}\\n`);\n }\n }\n\n function scheduleSync(): void {\n if (syncTimer) clearTimeout(syncTimer);\n syncTimer = setTimeout(() => {\n void syncApps().catch((err) => {\n stderr.write(\n `[workspace] App sync failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n });\n }, 400);\n }\n\n function appForRequest(req: http.IncomingMessage): WorkspaceApp | null {\n const params = new URL(req.url || \"/\", \"http://workspace.local\")\n .searchParams;\n const explicit = params.get(\"_app\");\n if (explicit && appById.has(explicit)) return appById.get(explicit) ?? null;\n\n const direct = firstPathSegment(req.url);\n if (direct && appById.has(direct)) return appById.get(direct) ?? null;\n\n const fromState = extractOAuthStateAppId(params.get(\"state\"));\n if (fromState && appById.has(fromState)) {\n return appById.get(fromState) ?? null;\n }\n\n const referer = req.headers.referer;\n const fromReferer =\n typeof referer === \"string\" ? firstPathSegment(referer) : null;\n return fromReferer && appById.has(fromReferer)\n ? (appById.get(fromReferer) ?? null)\n : null;\n }\n\n function startApp(app: WorkspaceApp): void {\n if (app.process && !app.process.killed) return;\n if (app.restartTimer) return;\n app.lastFailure = undefined;\n app.outputTail = undefined;\n\n const basePath = `/${app.id}`;\n const shouldInstall =\n !app.installAttempted && !hasLocalBin(app.dir, \"vite\");\n const childArgs = shouldInstall\n ? [\"--dir\", root, \"install\", \"--no-frozen-lockfile\", \"--prefer-offline\"]\n : [\n \"--dir\",\n app.dir,\n \"exec\",\n \"vite\",\n \"--host\",\n \"127.0.0.1\",\n \"--port\",\n String(app.port),\n \"--strictPort\",\n ...(forceVite ? [\"--force\"] : []),\n ];\n\n if (shouldInstall) {\n stdout.write(\n `[workspace] Installing dependencies before starting /${app.id}\\n`,\n );\n }\n\n const child = spawnProcess(\"pnpm\", childArgs, {\n cwd: root,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: devWatcherEnv(\n {\n ...env,\n APP_NAME: app.id,\n AGENT_NATIVE_WORKSPACE: \"1\",\n AGENT_NATIVE_WORKSPACE_APP_ID: app.id,\n AGENT_NATIVE_WORKSPACE_APPS_JSON: workspaceAppsJson(),\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: app.audience,\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\n app.publicPaths,\n ),\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\n app.protectedPaths,\n ),\n APP_BASE_PATH: basePath,\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: app.id,\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: workspaceAppsJson(),\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: app.audience,\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\n app.publicPaths,\n ),\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\n app.protectedPaths,\n ),\n VITE_APP_BASE_PATH: basePath,\n VITE_WORKSPACE_OAUTH_ORIGIN: workspaceOAuthOrigin(env, gatewayUrl),\n VITE_WORKSPACE_GATEWAY_URL: gatewayUrl,\n PORT: String(app.port),\n WORKSPACE_GATEWAY_URL: gatewayUrl,\n },\n pollingMode,\n ),\n });\n app.process = child;\n app.installing = shouldInstall;\n\n const prefix = `[${app.id}]`;\n const stableTimer = setTimeout(() => {\n app.restartAttempts = 0;\n }, 5_000);\n stableTimer.unref();\n\n child.stdout?.on(\"data\", (chunk) => {\n appendAppOutputTail(\n app,\n pipeAppOutput(prefix, chunk, (value) => stdout.write(value)),\n );\n });\n child.stderr?.on(\"data\", (chunk) => {\n appendAppOutputTail(\n app,\n pipeAppOutput(prefix, chunk, (value) => stderr.write(value)),\n );\n });\n child.on(\"exit\", (code, signal) => {\n clearTimeout(stableTimer);\n const wasInstalling = app.installing;\n app.process = undefined;\n app.installing = false;\n app.ready = false;\n app.readinessProbe = undefined;\n if (app.restartTimer) return;\n if (code === 0 || shuttingDown) {\n if (wasInstalling && code === 0 && !shuttingDown) {\n app.installAttempted = true;\n startApp(app);\n }\n return;\n }\n if (wasInstalling) app.installAttempted = false;\n scheduleAppRestart(app, {\n code,\n signal,\n installing: wasInstalling,\n output: app.outputTail ?? \"\",\n logMessage: `exited with code ${code}`,\n });\n });\n }\n\n function scheduleAppRestart(\n app: WorkspaceApp,\n input: {\n code: number | null;\n signal: NodeJS.Signals | null;\n installing: boolean;\n output: string;\n logMessage: string;\n },\n ): void {\n if (shuttingDown || app.restartTimer) return;\n if (input.installing) app.installAttempted = false;\n app.restartAttempts = (app.restartAttempts ?? 0) + 1;\n const delay = appRestartDelay(app.restartAttempts);\n const nextRetryAt = Date.now() + delay;\n app.lastFailure = {\n code: input.code,\n signal: input.signal,\n at: Date.now(),\n installing: input.installing,\n output: input.output,\n nextRetryAt,\n };\n stderr.write(\n `[${app.id}] ${input.logMessage}; retrying in ${Math.round(\n delay / 1000,\n )}s\\n`,\n );\n app.restartTimer = setTimeout(() => {\n app.restartTimer = undefined;\n startApp(app);\n }, delay);\n app.restartTimer.unref();\n }\n\n function failAppStartupTimeout(app: WorkspaceApp): void {\n if (app.installing || app.ready || app.restartTimer) return;\n const timeout = formatProxyReadyTimeout(proxyReadyTimeoutMs);\n const message =\n `Timed out waiting ${timeout} for /${app.id} to return ` +\n `an HTTP response on 127.0.0.1:${app.port}.`;\n const output = [message, app.outputTail?.trim()]\n .filter(Boolean)\n .join(\"\\n\\nLast child output:\\n\");\n app.ready = false;\n app.readinessProbe = undefined;\n scheduleAppRestart(app, {\n code: null,\n signal: null,\n installing: false,\n output,\n logMessage: message,\n });\n app.process?.kill(\"SIGTERM\");\n }\n\n function forwardedProto(req: http.IncomingMessage): string {\n return (\n firstHeaderValue(req.headers[\"x-forwarded-proto\"]) ||\n ((req.socket as { encrypted?: boolean }).encrypted ? \"https\" : \"http\")\n );\n }\n\n function forwardedHost(req: http.IncomingMessage): string {\n return (\n firstHeaderValue(req.headers[\"x-forwarded-host\"]) ||\n firstHeaderValue(req.headers.host) ||\n new URL(gatewayUrl).host\n );\n }\n\n function proxyHeaders(\n req: http.IncomingMessage,\n targetHost: string,\n ): http.OutgoingHttpHeaders {\n return {\n ...req.headers,\n \"x-forwarded-host\": forwardedHost(req),\n \"x-forwarded-proto\": forwardedProto(req),\n host: targetHost,\n };\n }\n\n async function waitForPort(port: number, deadline: number): Promise<boolean> {\n while (Date.now() < deadline) {\n if (await probePort(port)) return true;\n await new Promise((r) => setTimeout(r, PROXY_READY_RETRY_DELAY_MS));\n }\n return false;\n }\n\n async function waitForHttpReady(\n app: WorkspaceApp,\n deadline: number,\n ): Promise<boolean> {\n while (Date.now() < deadline) {\n const timeoutMs = Math.min(1_000, Math.max(1, deadline - Date.now()));\n if (await probeHttpReady(app, timeoutMs)) return true;\n await new Promise((r) => setTimeout(r, PROXY_READY_RETRY_DELAY_MS));\n }\n return false;\n }\n\n function ensureReadinessProbe(app: WorkspaceApp): void {\n if (app.ready || app.readinessProbe || app.installing) return;\n app.readinessProbe = waitForHttpReady(app, Date.now() + proxyReadyTimeoutMs)\n .then((ready) => {\n if (ready) {\n app.ready = true;\n return;\n }\n failAppStartupTimeout(app);\n })\n .finally(() => {\n app.readinessProbe = undefined;\n });\n }\n\n function proxyHttp(\n app: WorkspaceApp,\n req: http.IncomingMessage,\n res: http.ServerResponse,\n ): void {\n const cold = !app.process || app.process.killed;\n startApp(app);\n\n if (!app.ready && wantsHtml(req)) {\n ensureReadinessProbe(app);\n res.writeHead(200, STARTING_APP_RESPONSE_HEADERS);\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n res.end(renderStartingApp(app));\n return;\n }\n\n const serveStartingPage = () => {\n res.writeHead(200, STARTING_APP_RESPONSE_HEADERS);\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n res.end(renderStartingApp(app));\n };\n\n const dispatch = () => {\n const headers = proxyHeaders(req, `127.0.0.1:${app.port}`);\n let settled = false;\n let responseTimer: NodeJS.Timeout;\n const responseTimeoutMs = wantsHtml(req)\n ? proxyResponseTimeoutMs\n : proxyNonHtmlResponseTimeoutMs;\n const proxyReq = http.request(\n {\n hostname: \"127.0.0.1\",\n port: app.port,\n method: req.method,\n path: req.url,\n headers,\n },\n (proxyRes) => {\n if (settled) {\n proxyRes.resume();\n return;\n }\n settled = true;\n clearTimeout(responseTimer);\n app.ready = true;\n const statusCode = proxyRes.statusCode ?? 502;\n const responseHeaders = { ...proxyRes.headers };\n if (statusCode >= 300 && statusCode < 400) {\n const rewritten = rewriteRedirectLocation(\n app,\n firstHeaderValue(responseHeaders.location),\n );\n if (rewritten) responseHeaders.location = rewritten;\n }\n res.writeHead(statusCode, responseHeaders);\n proxyRes.pipe(res);\n },\n );\n responseTimer = setTimeout(() => {\n if (settled) return;\n settled = true;\n app.ready = false;\n proxyReq.destroy();\n ensureReadinessProbe(app);\n if (res.headersSent) {\n res.end();\n return;\n }\n if (wantsHtml(req)) {\n serveStartingPage();\n return;\n }\n res.writeHead(504, { \"content-type\": \"text/plain\" });\n res.end(\n `App \"${app.id}\" did not return response headers within ${formatProxyReadyTimeout(responseTimeoutMs)}.`,\n );\n }, responseTimeoutMs);\n responseTimer.unref();\n\n proxyReq.on(\"error\", (err) => {\n clearTimeout(responseTimer);\n if (settled) return;\n settled = true;\n if (res.headersSent) {\n res.end();\n return;\n }\n res.writeHead(502, { \"content-type\": \"text/plain\" });\n res.end(`App \"${app.id}\" is not ready yet: ${err.message}`);\n });\n\n req.pipe(proxyReq);\n };\n\n // Fast path: the upstream has accepted at least one request before, so\n // it's listening. Skip the probe so steady-state requests stay zero-latency.\n if (app.ready && !cold) {\n dispatch();\n return;\n }\n\n // Cold path: hold non-HTML requests open while the child server boots.\n // Node keeps the request body paused until pipe() attaches.\n void waitForHttpReady(app, Date.now() + proxyReadyTimeoutMs).then(\n (ready) => {\n if (!ready) {\n failAppStartupTimeout(app);\n if (!res.headersSent) {\n res.writeHead(502, { \"content-type\": \"text/plain\" });\n res.end(\n `App \"${app.id}\" is not ready yet: no HTTP response from 127.0.0.1:${app.port}`,\n );\n } else {\n res.end();\n }\n return;\n }\n app.ready = true;\n dispatch();\n },\n );\n }\n\n function proxyUpgrade(\n app: WorkspaceApp,\n req: http.IncomingMessage,\n socket: Duplex,\n head: Buffer,\n ): void {\n startApp(app);\n void waitForPort(app.port, Date.now() + proxyReadyTimeoutMs).then(\n (ready) => {\n if (!ready) {\n failAppStartupTimeout(app);\n socket.destroy();\n return;\n }\n app.ready = true;\n const target = net.connect(app.port, \"127.0.0.1\", () => {\n const headers = Object.entries(\n proxyHeaders(req, `127.0.0.1:${app.port}`),\n )\n .flatMap(([key, value]) =>\n Array.isArray(value)\n ? value.map((item) => `${key}: ${item}`)\n : [`${key}: ${value ?? \"\"}`],\n )\n .join(\"\\r\\n\");\n target.write(\n `${req.method} ${req.url} HTTP/${req.httpVersion}\\r\\n${headers}\\r\\n\\r\\n`,\n );\n if (head.length) target.write(head);\n socket.pipe(target).pipe(socket);\n });\n\n target.on(\"error\", () => socket.destroy());\n },\n );\n }\n\n function handleWatcherError(err: NodeJS.ErrnoException): void {\n if (isWorkspaceWatcherLimitError(err)) {\n stderr.write(\n `[workspace] Recursive file watcher hit the system limit (${err.code}). ` +\n `New apps will still be detected via polling every ~2s. ` +\n (err.code === \"ENOSPC\"\n ? `On Linux you can raise the limit with ` +\n `\\`sudo sysctl fs.inotify.max_user_watches=524288\\` ` +\n `(persist via /etc/sysctl.d/*.conf). `\n : `Try closing other dev servers or raising your open-file limit. `) +\n `On macOS/Windows this usually ` +\n `means too many other watchers are running.\\n`,\n );\n return;\n }\n if (err.code === \"ENOENT\") {\n return;\n }\n stderr.write(\n `[workspace] Recursive file watcher failed (${err.code ?? \"unknown\"}): ${err.message}. ` +\n `Falling back to polling.\\n`,\n );\n Sentry.captureException(err, {\n tags: { handled: \"dev-watch-unknown\" },\n level: \"warning\",\n });\n }\n\n function startWorkspaceProcesses(): void {\n if (workspaceStarted) return;\n workspaceStarted = true;\n for (const id of initialWorkspaceAppIds(\n apps,\n defaultApp,\n eager,\n redirectRootToDefault,\n )) {\n const app = appById.get(id);\n if (app) startApp(app);\n }\n try {\n const watcher = fs.watch(appsDir, { recursive: true }, scheduleSync);\n watcher.on(\"error\", (err) => {\n handleWatcherError(err as NodeJS.ErrnoException);\n });\n } catch (err) {\n handleWatcherError(err as NodeJS.ErrnoException);\n }\n setInterval(() => {\n void syncApps().catch(() => {});\n }, 2_000).unref();\n }\n\n /**\n * Background-spawn every app that wasn't started by `startWorkspaceProcesses`.\n * The lazy proxy still handles correctness (an on-demand request always\n * starts its target app); this is purely so the first navigation into a\n * non-default app doesn't pay the cold Vite + esbuild prebundle cost.\n *\n * Fires after a short delay so the default app's prebundle gets first dibs\n * on CPU. Concurrency-limited to avoid hammering a small dev machine —\n * each Vite spawn briefly maxes out a core during prebundling.\n */\n async function prewarmRemainingApps(): Promise<void> {\n const concurrency = workspacePrewarmConcurrency(args, env);\n const delayMs = workspacePrewarmDelayMs(env);\n\n const queue = apps\n .filter((app) => app.id !== defaultApp)\n .filter((app) => !(app.process && !app.process.killed))\n .map((app) => app.id);\n\n if (queue.length === 0) return;\n\n stdout.write(\n `[workspace] Prewarming ${queue.length} app(s) in the background ` +\n `(concurrency ${concurrency}; pass --no-prewarm to disable)\\n`,\n );\n\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n if (shuttingDown) return;\n\n let next = 0;\n async function worker(): Promise<void> {\n while (!shuttingDown && next < queue.length) {\n const id = queue[next++];\n const app = appById.get(id);\n if (!app) continue;\n // Another path (a real request, a restart, etc.) may have started\n // this app already — skip without consuming a worker slot needlessly.\n if (app.process && !app.process.killed) continue;\n startApp(app);\n ensureReadinessProbe(app);\n // Wait for the upstream to answer HTTP before pulling the next\n // app off the queue. This is what actually limits *concurrent\n // prebundling* (not just concurrent spawning) and keeps CPU pressure\n // sane. proxyReadyTimeoutMs caps any single stuck app.\n await waitForHttpReady(app, Date.now() + proxyReadyTimeoutMs).catch(\n () => false,\n );\n }\n }\n\n const workerCount = Math.max(1, Math.min(concurrency, queue.length));\n await Promise.all(Array.from({ length: workerCount }, () => worker()));\n }\n\n function openBrowser(url: string): void {\n if (options.openBrowser === false || env.WORKSPACE_NO_OPEN === \"1\") return;\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const openArgs =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawnProcess(command, openArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n }\n\n const server = http.createServer(async (req, res) => {\n const parsedUrl = new URL(req.url || \"/\", \"http://workspace.local\");\n const pathname = parsedUrl.pathname;\n\n if (pathname === \"/\" || pathname === \"/index.html\") {\n await syncApps().catch(() => {});\n const currentDefaultApp =\n explicitDefaultApp && appById.has(explicitDefaultApp)\n ? explicitDefaultApp\n : appById.has(\"dispatch\")\n ? \"dispatch\"\n : defaultApp;\n const shouldRedirectRoot =\n Boolean(explicitDefaultApp && appById.has(explicitDefaultApp)) ||\n appById.has(\"dispatch\");\n if (shouldRedirectRoot) {\n res.writeHead(302, {\n location: `/${currentDefaultApp}${parsedUrl.search}`,\n });\n res.end();\n return;\n }\n res.writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" });\n res.end(renderIndex(apps));\n return;\n }\n\n if (pathname === \"/_workspace/apps\") {\n await syncApps().catch(() => {});\n res.writeHead(200, { \"content-type\": \"application/json\" });\n res.end(\n JSON.stringify(\n apps.map((app) => ({\n id: app.id,\n name: app.name,\n description: app.description,\n path: `/${app.id}`,\n audience: app.audience,\n publicPaths: app.publicPaths,\n protectedPaths: app.protectedPaths,\n port: app.port,\n running: Boolean(app.process && !app.process.killed),\n })),\n ),\n );\n return;\n }\n\n let app = appForRequest(req);\n if (!app) {\n await syncApps().catch(() => {});\n app = appForRequest(req);\n }\n if (!app) {\n res.writeHead(404, { \"content-type\": \"text/html; charset=utf-8\" });\n res.end(renderIndex(apps));\n return;\n }\n proxyHttp(app, req, res);\n });\n\n server.on(\"upgrade\", (req, socket, head) => {\n const app = appForRequest(req);\n if (!app) {\n socket.destroy();\n return;\n }\n proxyUpgrade(app, req, socket, head);\n });\n\n function listen(port: number, attempts = 20): void {\n server.once(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\" && attempts > 0) {\n listen(port + 1, attempts - 1);\n return;\n }\n stderr.write(`[workspace] Could not start gateway: ${err.message}\\n`);\n throw err;\n });\n server.listen(port, gatewayHost, () => {\n const address = server.address();\n const actualPort =\n typeof address === \"object\" && address ? address.port : port;\n gatewayUrl = `http://${gatewayHost}:${actualPort}`;\n stdout.write(\n `[workspace] Default: ${redirectRootToDefault ? `${gatewayUrl}/${defaultApp}` : gatewayUrl}\\n`,\n );\n stdout.write(`[workspace] Gateway: ${gatewayUrl}\\n`);\n const prewarming = shouldPrewarmWorkspaceApps(args, env);\n stdout.write(\n `[workspace] Mode: ${\n eager ? \"eager\" : prewarming ? \"lazy+prewarm\" : \"lazy\"\n }\\n`,\n );\n for (const app of apps) {\n stdout.write(\n `[workspace] ${app.id}: /${app.id} -> 127.0.0.1:${app.port}\\n`,\n );\n }\n startWorkspaceProcesses();\n if (prewarming) {\n void prewarmRemainingApps().catch((err) => {\n stderr.write(\n `[workspace] Prewarm error: ${\n err instanceof Error ? err.message : String(err)\n }\\n`,\n );\n });\n }\n openBrowser(\n redirectRootToDefault ? `${gatewayUrl}/${defaultApp}` : gatewayUrl,\n );\n readyResolve({ port: actualPort, url: gatewayUrl });\n });\n }\n\n function shutdown(): void {\n if (shuttingDown) return;\n shuttingDown = true;\n server.close();\n for (const app of apps) {\n app.process?.kill(\"SIGTERM\");\n }\n if (syncTimer) clearTimeout(syncTimer);\n process.off(\"SIGINT\", handleSigint);\n process.off(\"SIGTERM\", handleSigterm);\n }\n\n const handleSigint = () => shutdown();\n const handleSigterm = () => shutdown();\n process.once(\"SIGINT\", handleSigint);\n process.once(\"SIGTERM\", handleSigterm);\n\n listen(requestedPort);\n\n return {\n apps,\n defaultApp,\n gatewayUrl: () => gatewayUrl,\n ready,\n server,\n shutdown,\n };\n}\n\nfunction isDirectRun(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return path.resolve(entry) === fileURLToPath(import.meta.url);\n } catch {\n return false;\n }\n}\n\nif (isDirectRun()) {\n runWorkspaceDev({ args: process.argv.slice(2) }).catch((err) => {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n });\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { type AgentChatSurfaceProps } from "./AgentPanel.js";
2
+ export interface AgentChatHomeProps extends Omit<AgentChatSurfaceProps, "className" | "isFullscreen" | "mode" | "style"> {
3
+ /** CSS class for the full-page shell around the chat surface. */
4
+ className?: string;
5
+ /** CSS class for the inner width/height rail. */
6
+ contentClassName?: string;
7
+ /** CSS class for the AgentChatSurface itself. */
8
+ surfaceClassName?: string;
9
+ /**
10
+ * Apply the shared chat view-transition name to the surface so it can morph
11
+ * into an AgentSidebar with `chatViewTransition` enabled.
12
+ * Default: true.
13
+ */
14
+ chatViewTransition?: boolean;
15
+ }
16
+ /**
17
+ * Minimal full-page chat route primitive for chat-first apps.
18
+ *
19
+ * It keeps the actual chat runtime in AgentChatSurface while providing a stable
20
+ * first-viewport shell that templates can use for `/`, `/ask`, or `/chat`.
21
+ */
22
+ export declare function AgentChatHome({ className, contentClassName, surfaceClassName, chatViewTransition, defaultMode, ...props }: AgentChatHomeProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=AgentChatHome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentChatHome.d.ts","sourceRoot":"","sources":["../../src/client/AgentChatHome.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAC9C,qBAAqB,EACrB,WAAW,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAChD;IACC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,kBAAyB,EACzB,WAAoB,EACpB,GAAG,KAAK,EACT,EAAE,kBAAkB,2CA2BpB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AgentChatSurface } from "./AgentPanel.js";
3
+ import { cn } from "./utils.js";
4
+ /**
5
+ * Minimal full-page chat route primitive for chat-first apps.
6
+ *
7
+ * It keeps the actual chat runtime in AgentChatSurface while providing a stable
8
+ * first-viewport shell that templates can use for `/`, `/ask`, or `/chat`.
9
+ */
10
+ export function AgentChatHome({ className, contentClassName, surfaceClassName, chatViewTransition = true, defaultMode = "chat", ...props }) {
11
+ return (_jsx("main", { className: cn("flex min-h-screen w-full bg-background px-3 py-3 sm:px-4 sm:py-4", className), children: _jsx("div", { className: cn("mx-auto flex min-h-0 w-full max-w-5xl flex-1 flex-col", contentClassName), children: _jsx(AgentChatSurface, { ...props, mode: "page", defaultMode: defaultMode, chatViewTransition: chatViewTransition, className: cn("min-h-0 flex-1 rounded-lg border border-border shadow-sm", surfaceClassName) }) }) }));
12
+ }
13
+ //# sourceMappingURL=AgentChatHome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentChatHome.js","sourceRoot":"","sources":["../../src/client/AgentChatHome.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAA8B,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAoBhC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GAAG,IAAI,EACzB,WAAW,GAAG,MAAM,EACpB,GAAG,KAAK,EACW;IACnB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,SAAS,CACV,YAED,cACE,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,gBAAgB,CACjB,YAED,KAAC,gBAAgB,OACX,KAAK,EACT,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,EAAE,CACX,0DAA0D,EAC1D,gBAAgB,CACjB,GACD,GACE,GACD,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { AgentChatSurface, type AgentChatSurfaceProps } from \"./AgentPanel.js\";\nimport { cn } from \"./utils.js\";\n\nexport interface AgentChatHomeProps extends Omit<\n AgentChatSurfaceProps,\n \"className\" | \"isFullscreen\" | \"mode\" | \"style\"\n> {\n /** CSS class for the full-page shell around the chat surface. */\n className?: string;\n /** CSS class for the inner width/height rail. */\n contentClassName?: string;\n /** CSS class for the AgentChatSurface itself. */\n surfaceClassName?: string;\n /**\n * Apply the shared chat view-transition name to the surface so it can morph\n * into an AgentSidebar with `chatViewTransition` enabled.\n * Default: true.\n */\n chatViewTransition?: boolean;\n}\n\n/**\n * Minimal full-page chat route primitive for chat-first apps.\n *\n * It keeps the actual chat runtime in AgentChatSurface while providing a stable\n * first-viewport shell that templates can use for `/`, `/ask`, or `/chat`.\n */\nexport function AgentChatHome({\n className,\n contentClassName,\n surfaceClassName,\n chatViewTransition = true,\n defaultMode = \"chat\",\n ...props\n}: AgentChatHomeProps) {\n return (\n <main\n className={cn(\n \"flex min-h-screen w-full bg-background px-3 py-3 sm:px-4 sm:py-4\",\n className,\n )}\n >\n <div\n className={cn(\n \"mx-auto flex min-h-0 w-full max-w-5xl flex-1 flex-col\",\n contentClassName,\n )}\n >\n <AgentChatSurface\n {...props}\n mode=\"page\"\n defaultMode={defaultMode}\n chatViewTransition={chatViewTransition}\n className={cn(\n \"min-h-0 flex-1 rounded-lg border border-border shadow-sm\",\n surfaceClassName,\n )}\n />\n </div>\n </main>\n );\n}\n"]}