@jami-studio/core 0.92.13 → 0.92.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-deploy.js","sourceRoot":"","sources":["../../src/deploy/workspace-deploy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * `agent-native deploy` — build and deploy every app in a workspace to a\r\n * single origin. Each app is served from `/<app-name>/*`, so:\r\n *\r\n * https://your-agents.com/mail/* → apps/mail\r\n * https://your-agents.com/calendar/* → apps/calendar\r\n *\r\n * Benefits of same-origin deploy:\r\n * - Shared auth cookie → log in once, every app is signed in\r\n * - Cross-app A2A is a same-origin fetch (no CORS, no JWT for siblings)\r\n * - One DNS record, one TLS cert, one CDN cache\r\n *\r\n * Per-app independent deploy is still supported — just cd into the app and\r\n * run `agent-native build` as before. This orchestrator is for teams that\r\n * want the whole workspace behind one domain.\r\n */\r\nimport { execFileSync } from \"child_process\";\r\nimport fs from \"fs\";\r\nimport path from \"path\";\r\n\r\nimport { AGENT_CHAT_PROCESS_RUN_PATH } from \"../agent/durable-background.js\";\r\nimport { findWorkspaceRoot } from \"../scripts/utils.js\";\r\nimport {\r\n DEFAULT_WORKSPACE_APP_AUDIENCE,\r\n normalizeWorkspaceAppAudience,\r\n normalizeWorkspaceAppPathList,\r\n workspaceAppAudienceFromPackageJson,\r\n workspaceAppRouteAccessFromPackageJson,\r\n type WorkspaceAppRouteAccess,\r\n type WorkspaceAppAudience,\r\n} from \"../shared/workspace-app-audience.js\";\r\nimport { DISPATCH_WORKSPACE_ROOT_REDIRECTS } from \"../shared/workspace-app-id.js\";\r\nimport {\r\n collectImmutableAssetPaths,\r\n IMMUTABLE_ASSET_CACHE_HEADERS,\r\n} from \"./immutable-assets.js\";\r\n\r\nexport type WorkspaceDeployPreset = \"cloudflare_pages\" | \"netlify\" | \"vercel\";\r\n\r\nconst NETLIFY_WORKSPACE_STATIC_DIR = \"_workspace_static\";\r\nconst NETLIFY_PUBLIC_ASSET_EXTENSIONS = new Set([\r\n \"avif\",\r\n \"css\",\r\n \"gif\",\r\n \"ico\",\r\n \"jpeg\",\r\n \"jpg\",\r\n \"js\",\r\n \"json\",\r\n \"map\",\r\n \"mp4\",\r\n \"pdf\",\r\n \"png\",\r\n \"svg\",\r\n \"txt\",\r\n \"wasm\",\r\n \"webm\",\r\n \"webmanifest\",\r\n \"webp\",\r\n \"xml\",\r\n]);\r\nconst WORKSPACE_APPS_ENV_KEY = \"AGENT_NATIVE_WORKSPACE_APPS_JSON\";\r\nconst WORKSPACE_APPS_MANIFEST_DIR = \".agent-native\";\r\nconst WORKSPACE_APPS_MANIFEST_FILE = \"workspace-apps.json\";\r\nconst VERCEL_OUTPUT_DIR = \".vercel/output\";\r\n\r\ninterface WorkspaceAppManifestEntry {\r\n id: string;\r\n name: string;\r\n description: string;\r\n path: string;\r\n url?: string;\r\n isDispatch: boolean;\r\n audience: WorkspaceAppAudience;\r\n publicPaths: string[];\r\n protectedPaths: string[];\r\n}\r\n\r\ninterface WorkspaceAppManifestOverride {\r\n id: string;\r\n url?: string;\r\n audience?: WorkspaceAppAudience;\r\n publicPaths?: string[];\r\n protectedPaths?: string[];\r\n}\r\n\r\nexport interface WorkspaceDeployOptions {\r\n args?: string[];\r\n /** Override the workspace root (defaults to walking up from cwd). */\r\n workspaceRoot?: string;\r\n /** Only build — don't invoke the deploy platform CLI. */\r\n buildOnly?: boolean;\r\n /** Target preset. Defaults to `cloudflare_pages`. */\r\n preset?: WorkspaceDeployPreset;\r\n /** @internal Override process execution in tests. */\r\n execFile?: typeof execFileSync;\r\n}\r\n\r\nexport async function runWorkspaceDeploy(\r\n opts: WorkspaceDeployOptions = {},\r\n): Promise<void> {\r\n const workspaceRoot =\r\n opts.workspaceRoot ?? findWorkspaceRoot(process.cwd()) ?? process.cwd();\r\n const appsDir = path.join(workspaceRoot, \"apps\");\r\n if (!fs.existsSync(appsDir)) {\r\n throw new Error(\r\n `No apps/ directory found at ${workspaceRoot}. Run this inside an agent-native workspace.`,\r\n );\r\n }\r\n\r\n const rawArgs = opts.args ?? [];\r\n const args = new Set(rawArgs);\r\n const buildOnly = opts.buildOnly ?? args.has(\"--build-only\");\r\n\r\n const apps = fs\r\n .readdirSync(appsDir, { withFileTypes: true })\r\n .filter((e) => e.isDirectory())\r\n .map((e) => e.name)\r\n .filter((n) => fs.existsSync(path.join(appsDir, n, \"package.json\")))\r\n .sort(compareWorkspaceAppIds);\r\n\r\n if (apps.length === 0) {\r\n throw new Error(\r\n `Workspace has no apps. Run \\`agent-native add-app\\` to add one.`,\r\n );\r\n }\r\n assertNoReservedWorkspaceAppIds(apps);\r\n const workspaceApps = readWorkspaceAppManifest(workspaceRoot, apps);\r\n\r\n const preset = resolvePreset(opts.preset, rawArgs);\r\n assertWorkspaceDeployProductionEnv({ buildOnly, preset });\r\n const distDir = path.join(workspaceRoot, \"dist\");\r\n const vercelOutputDir = path.join(workspaceRoot, VERCEL_OUTPUT_DIR);\r\n if (preset === \"vercel\") {\r\n fs.rmSync(vercelOutputDir, { recursive: true, force: true });\r\n fs.mkdirSync(path.join(vercelOutputDir, \"static\"), { recursive: true });\r\n fs.mkdirSync(path.join(vercelOutputDir, \"functions\"), {\r\n recursive: true,\r\n });\r\n } else {\r\n fs.rmSync(distDir, { recursive: true, force: true });\r\n fs.mkdirSync(distDir, { recursive: true });\r\n }\r\n\r\n if (preset === \"netlify\") {\r\n const functionsDir = netlifyFunctionsDir(workspaceRoot);\r\n fs.rmSync(functionsDir, { recursive: true, force: true });\r\n fs.mkdirSync(functionsDir, { recursive: true });\r\n }\r\n\r\n console.log(\r\n `[workspace-deploy] Building ${apps.length} app(s) for preset=${preset}`,\r\n );\r\n\r\n const execFile = opts.execFile ?? execFileSync;\r\n for (const app of apps) {\r\n buildOneApp(workspaceRoot, app, preset, execFile, workspaceApps);\r\n moveAppBuildIntoWorkspaceOutput(\r\n workspaceRoot,\r\n app,\r\n preset,\r\n distDir,\r\n vercelOutputDir,\r\n workspaceApps,\r\n );\r\n }\r\n writeWorkspaceAppManifests(\r\n workspaceRoot,\r\n distDir,\r\n apps,\r\n workspaceApps,\r\n preset,\r\n );\r\n\r\n if (preset === \"netlify\") {\r\n writeNetlifyRedirects(distDir, apps);\r\n writeNetlifyHeaders(distDir, apps);\r\n } else if (preset === \"vercel\") {\r\n writeVercelBuildConfig(vercelOutputDir, apps);\r\n } else {\r\n writeCloudflareRoutingManifest(distDir, apps);\r\n }\r\n\r\n if (buildOnly) {\r\n const outputDir = preset === \"vercel\" ? vercelOutputDir : distDir;\r\n console.log(\r\n `\\n[workspace-deploy] Build complete at ${outputDir}. Skipping publish (--build-only).`,\r\n );\r\n return;\r\n }\r\n\r\n console.log(`\\n[workspace-deploy] Build complete. Publish with:\\n`);\r\n console.log(` cd ${path.relative(process.cwd(), workspaceRoot) || \".\"}`);\r\n if (preset === \"netlify\") {\r\n console.log(\r\n ` netlify deploy --prod --dir=dist --functions=.netlify/functions-internal\\n`,\r\n );\r\n } else if (preset === \"vercel\") {\r\n console.log(` vercel deploy --prebuilt\\n`);\r\n } else {\r\n console.log(` wrangler pages deploy dist\\n`);\r\n }\r\n console.log(\r\n `All apps live at https://<origin>/<app-name>/*. Log in once on any app\\nand the session is shared across the workspace.`,\r\n );\r\n}\r\n\r\nfunction buildOneApp(\r\n workspaceRoot: string,\r\n app: string,\r\n preset: WorkspaceDeployPreset,\r\n execFile: typeof execFileSync,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n): void {\r\n const appDir = path.join(workspaceRoot, \"apps\", app);\r\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\r\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\r\n workspaceApps,\r\n app,\r\n );\r\n const workspaceGatewayUrl =\r\n process.env.VITE_WORKSPACE_GATEWAY_URL || workspaceBaseUrl();\r\n const workspaceOAuthUrl = workspaceOAuthOrigin(workspaceGatewayUrl);\r\n const env: NodeJS.ProcessEnv = {\r\n ...process.env,\r\n NITRO_PRESET: preset,\r\n AGENT_NATIVE_WORKSPACE: \"1\",\r\n AGENT_NATIVE_WORKSPACE_APP_ID: app,\r\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: app,\r\n APP_BASE_PATH: `/${app}`,\r\n VITE_APP_BASE_PATH: `/${app}`,\r\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: workspaceAppAudience,\r\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\r\n workspaceAppRouteAccess.publicPaths,\r\n ),\r\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\r\n workspaceAppRouteAccess.protectedPaths,\r\n ),\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: workspaceAppAudience,\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\r\n workspaceAppRouteAccess.publicPaths,\r\n ),\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\r\n workspaceAppRouteAccess.protectedPaths,\r\n ),\r\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: JSON.stringify(workspaceApps),\r\n ...(workspaceGatewayUrl\r\n ? {\r\n WORKSPACE_GATEWAY_URL:\r\n process.env.WORKSPACE_GATEWAY_URL || workspaceGatewayUrl,\r\n VITE_WORKSPACE_GATEWAY_URL: workspaceGatewayUrl,\r\n ...(workspaceOAuthUrl\r\n ? { VITE_WORKSPACE_OAUTH_ORIGIN: workspaceOAuthUrl }\r\n : {}),\r\n }\r\n : {}),\r\n [WORKSPACE_APPS_ENV_KEY]: JSON.stringify(workspaceApps),\r\n };\r\n\r\n if (preset === \"netlify\" && appUsesNetlifyUnpooledDatabaseUrl(appDir)) {\r\n env.DATABASE_URL =\r\n process.env.NETLIFY_DATABASE_URL_UNPOOLED ??\r\n process.env.DATABASE_URL ??\r\n env.DATABASE_URL;\r\n }\r\n\r\n console.log(\r\n `[workspace-deploy] Building ${app} (base=/${app}, preset=${preset})`,\r\n );\r\n\r\n cleanAppBuildOutputs(appDir);\r\n\r\n execFile(\"pnpm\", [\"--filter\", app, \"build\"], {\r\n cwd: workspaceRoot,\r\n env,\r\n stdio: \"inherit\",\r\n });\r\n}\r\n\r\nfunction moveAppBuildIntoWorkspaceOutput(\r\n workspaceRoot: string,\r\n app: string,\r\n preset: WorkspaceDeployPreset,\r\n distDir: string,\r\n vercelOutputDir: string,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n): void {\r\n const appDir = path.join(workspaceRoot, \"apps\", app);\r\n if (preset === \"vercel\") {\r\n copyVercelAppBuildIntoWorkspace(\r\n workspaceRoot,\r\n app,\r\n vercelOutputDir,\r\n workspaceApps,\r\n );\r\n return;\r\n }\r\n\r\n // Resolve the per-app build output: prefer dist/ (standard), fall back to\r\n // .output/ (Nitro's default). The Cloudflare preset emits into dist/\r\n // containing the worker + assets.\r\n const candidates = [\"dist\", \".output\"];\r\n const src = candidates\r\n .map((c) => path.join(appDir, c))\r\n .find((p) => fs.existsSync(p));\r\n if (!src) {\r\n throw new Error(\r\n `Expected ${candidates.join(\" or \")} under ${appDir} but none existed. Check the app's build script.`,\r\n );\r\n }\r\n if (preset === \"netlify\") {\r\n const mountedSrc = path.join(src, app);\r\n const staticSrc = fs.existsSync(mountedSrc) ? mountedSrc : src;\r\n const target = path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app);\r\n fs.mkdirSync(target, { recursive: true });\r\n copyDir(staticSrc, target);\r\n // Nitro/Vite mounted builds can contain a nested copy of public assets at\r\n // dist/<app>/<app>/...; the workspace root already supplies the outer\r\n // mount path, so keeping it would publish duplicate /<app>/<app> URLs.\r\n fs.rmSync(path.join(target, app), { recursive: true, force: true });\r\n copyNetlifyFunctionIntoWorkspace(workspaceRoot, app, workspaceApps, target);\r\n } else {\r\n const target = path.join(distDir, app);\r\n fs.mkdirSync(target, { recursive: true });\r\n copyDir(src, target);\r\n }\r\n}\r\n\r\nfunction copyVercelAppBuildIntoWorkspace(\r\n workspaceRoot: string,\r\n app: string,\r\n vercelOutputDir: string,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n): void {\r\n const appDir = path.join(workspaceRoot, \"apps\", app);\r\n const src = path.join(appDir, VERCEL_OUTPUT_DIR);\r\n if (!fs.existsSync(src)) {\r\n throw new Error(\r\n `Expected Vercel output at ${src} after building ${app}. Check the app's build script and NITRO_PRESET.`,\r\n );\r\n }\r\n\r\n const staticSrc = path.join(src, \"static\");\r\n const staticDest = path.join(vercelOutputDir, \"static\");\r\n if (fs.existsSync(staticSrc)) {\r\n copyDir(staticSrc, staticDest);\r\n // Nitro's Vercel preset already nests assets under baseURL. The shared\r\n // deploy build also mirrors client assets under baseURL for other Nitro\r\n // presets, so mounted apps can contain a duplicate /<app>/<app> copy.\r\n fs.rmSync(path.join(staticDest, app, app), {\r\n recursive: true,\r\n force: true,\r\n });\r\n }\r\n\r\n const functionSrc = path.join(src, \"functions\", \"__server.func\");\r\n if (!fs.existsSync(functionSrc)) {\r\n throw new Error(\r\n `Expected Vercel function at ${functionSrc} after building ${app}. Check the app's build script and NITRO_PRESET.`,\r\n );\r\n }\r\n\r\n const functionDest = path.join(\r\n vercelOutputDir,\r\n \"functions\",\r\n `${app}-server.func`,\r\n );\r\n fs.rmSync(functionDest, { recursive: true, force: true });\r\n copyDir(functionSrc, functionDest);\r\n patchVercelFunctionEntry(functionDest, app, workspaceApps);\r\n}\r\n\r\n/**\r\n * Write the Cloudflare Pages `_routes.json` and a dispatcher `_worker.js` at\r\n * the workspace dist root so each app is reachable under /<app>/*.\r\n */\r\nfunction writeCloudflareRoutingManifest(distDir: string, apps: string[]): void {\r\n const dispatchFaviconAsset = apps.includes(\"dispatch\")\r\n ? dispatchRootFaviconAsset(distDir)\r\n : null;\r\n // _routes.json tells Cloudflare which paths are dynamic (Functions) vs\r\n // static. Mark both /<app> and /<app>/* as include so every app's worker\r\n // handles its root and subtree.\r\n const include = apps.flatMap((a) => [`/${a}`, `/${a}/*`]).concat([\"/\"]);\r\n if (apps.includes(\"dispatch\")) {\r\n include.push(\"/_agent-native/*\");\r\n include.push(\"/.well-known/*\");\r\n include.push(\r\n ...DISPATCH_WORKSPACE_ROOT_REDIRECTS.map(([from]) => `/${from}`),\r\n );\r\n include.push(\"/apps/*\");\r\n if (dispatchFaviconAsset) include.push(\"/favicon.ico\");\r\n }\r\n const routes = {\r\n version: 1,\r\n include,\r\n exclude: [],\r\n };\r\n fs.writeFileSync(\r\n path.join(distDir, \"_routes.json\"),\r\n JSON.stringify(routes, null, 2) + \"\\n\",\r\n );\r\n\r\n // Dispatcher worker: inspects the path and forwards to the matching\r\n // per-app worker.\r\n const imports = apps\r\n .map((a) => `import ${moduleIdent(a)} from \"./${a}/_worker.js\";`)\r\n .join(\"\\n\");\r\n const dispatch = apps\r\n .map(\r\n (a) =>\r\n ` if (pathname === \"/${a}\" || pathname.startsWith(\"/${a}/\")) return ${moduleIdent(a)}.fetch(requestForMountedApp(request, \"/${a}\"), env, ctx);`,\r\n )\r\n .join(\"\\n\");\r\n const dispatchRootFrameworkRoutes = apps.includes(\"dispatch\")\r\n ? ` if (pathname === \"/_agent-native\" || pathname.startsWith(\"/_agent-native/\") || pathname === \"/.well-known\" || pathname.startsWith(\"/.well-known/\")) return ${moduleIdent(\"dispatch\")}.fetch(request, env, ctx);\r\n`\r\n : \"\";\r\n const dispatchRootFaviconRoute = dispatchFaviconAsset\r\n ? ` if (pathname === \"/favicon.ico\") return Response.redirect(new URL(\"/dispatch/${dispatchFaviconAsset}\", request.url).toString(), 302);\r\n`\r\n : \"\";\r\n const dispatchRootAliasRoutes = apps.includes(\"dispatch\")\r\n ? DISPATCH_WORKSPACE_ROOT_REDIRECTS.map(\r\n ([from, to]) =>\r\n ` if (pathname === \"/${from}\") return Response.redirect(new URL(\"/dispatch/${to}\" + search, request.url).toString(), 302);`,\r\n ).join(\"\\n\") + \"\\n\"\r\n : \"\";\r\n const dispatchRootDynamicAliasRoutes = apps.includes(\"dispatch\")\r\n ? ` if (pathname.startsWith(\"/apps/\")) return Response.redirect(new URL(\"/dispatch\" + pathname + search, request.url).toString(), 302);\r\n`\r\n : \"\";\r\n const dispatchMountedRootRedirect = apps.includes(\"dispatch\")\r\n ? ` if (pathname === \"/dispatch\" || pathname === \"/dispatch/\") return Response.redirect(new URL(\"/dispatch/overview\" + search, request.url).toString(), 302);\r\n`\r\n : \"\";\r\n\r\n const worker = `${imports}\r\n\r\nfunction requestForMountedApp(request, basePath) {\r\n const url = new URL(request.url);\r\n if (url.pathname !== basePath && url.pathname !== \\`\\${basePath}/\\`) {\r\n return request;\r\n }\r\n url.pathname = \\`\\${basePath}//\\`;\r\n return new Request(url, request);\r\n}\r\n\r\nexport default {\r\n async fetch(request, env, ctx) {\r\n const { pathname, search } = new URL(request.url);\r\n${dispatchRootFrameworkRoutes}${dispatchRootFaviconRoute}${dispatchRootAliasRoutes}${dispatchRootDynamicAliasRoutes}${dispatchMountedRootRedirect}${dispatch}\r\n if (pathname === \"/\") {\r\n return Response.redirect(new URL(\"${cloudflareRootRedirectPath(apps)}\", request.url).toString(), 302);\r\n }\r\n return new Response(\"Not found\", { status: 404 });\r\n },\r\n};\r\n`;\r\n fs.writeFileSync(path.join(distDir, \"_worker.js\"), worker);\r\n}\r\n\r\nfunction cloudflareRootRedirectPath(apps: string[]): string {\r\n return apps.includes(\"dispatch\") ? \"/dispatch/overview\" : `/${apps[0]}/`;\r\n}\r\n\r\nfunction writeNetlifyRedirects(distDir: string, apps: string[]): void {\r\n const lines: string[] = [\r\n \"# Generated by agent-native deploy --preset netlify\",\r\n \"# Static app assets are stored under a safe namespace; dynamic app routes are handled by function route config.\",\r\n ];\r\n\r\n if (apps.includes(\"dispatch\")) {\r\n lines.push(\"/_agent-native/* /.netlify/functions/dispatch-server 200\");\r\n lines.push(\"/.well-known/* /.netlify/functions/dispatch-server 200\");\r\n const faviconAsset = dispatchRootFaviconAsset(distDir);\r\n if (faviconAsset) {\r\n lines.push(`/favicon.ico /dispatch/${faviconAsset} 302`);\r\n }\r\n }\r\n\r\n for (const app of apps) {\r\n lines.push(...netlifyAssetRedirectsFor(app, distDir));\r\n }\r\n\r\n if (apps.includes(\"dispatch\")) {\r\n lines.push(\"/ /dispatch/overview 302\");\r\n lines.push(\"/dispatch /dispatch/overview 302\");\r\n lines.push(\"/dispatch/ /dispatch/overview 302\");\r\n for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {\r\n lines.push(`/${from} /dispatch/${to} 302`);\r\n }\r\n lines.push(\"/apps/* /dispatch/apps/:splat 302\");\r\n } else {\r\n lines.push(`/ /${apps[0]}/ 302`);\r\n }\r\n\r\n fs.writeFileSync(path.join(distDir, \"_redirects\"), lines.join(\"\\n\") + \"\\n\");\r\n}\r\n\r\nfunction writeNetlifyHeaders(distDir: string, apps: string[]): void {\r\n const blocks = apps.flatMap((app) => {\r\n const staticDir = path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app);\r\n return collectImmutableAssetPaths(staticDir).flatMap((assetPath) => [\r\n netlifyHeaderBlock(`/${app}${assetPath}`),\r\n netlifyHeaderBlock(`/${NETLIFY_WORKSPACE_STATIC_DIR}/${app}${assetPath}`),\r\n ]);\r\n });\r\n\r\n if (blocks.length === 0) return;\r\n fs.writeFileSync(path.join(distDir, \"_headers\"), blocks.join(\"\\n\\n\") + \"\\n\");\r\n}\r\n\r\nfunction netlifyHeaderBlock(pathname: string): string {\r\n return [\r\n pathname,\r\n ...Object.entries(IMMUTABLE_ASSET_CACHE_HEADERS).map(\r\n ([name, value]) => ` ${name}: ${value}`,\r\n ),\r\n ].join(\"\\n\");\r\n}\r\n\r\nfunction writeVercelBuildConfig(outputDir: string, apps: string[]): void {\r\n const routes: Array<Record<string, any>> = [\r\n ...vercelImmutableAssetHeaderRoutes(outputDir, apps),\r\n { handle: \"filesystem\" },\r\n ];\r\n\r\n if (apps.includes(\"dispatch\")) {\r\n routes.push(\r\n { src: \"/_agent-native\", dest: \"/dispatch-server\" },\r\n { src: \"/_agent-native/(.*)\", dest: \"/dispatch-server\" },\r\n { src: \"/\\\\.well-known\", dest: \"/dispatch-server\" },\r\n { src: \"/\\\\.well-known/(.*)\", dest: \"/dispatch-server\" },\r\n );\r\n\r\n const faviconAsset = dispatchRootFaviconAsset(\r\n path.join(outputDir, \"static\"),\r\n );\r\n if (faviconAsset) {\r\n routes.push(vercelRedirect(\"/favicon.ico\", `/dispatch/${faviconAsset}`));\r\n }\r\n\r\n routes.push(\r\n vercelRedirect(\"/\", \"/dispatch/overview\"),\r\n vercelRedirect(\"/dispatch\", \"/dispatch/overview\"),\r\n vercelRedirect(\"/dispatch/\", \"/dispatch/overview\"),\r\n );\r\n for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {\r\n routes.push(vercelRedirect(`/${from}`, `/dispatch/${to}`));\r\n }\r\n routes.push(vercelRedirect(\"/apps/(.*)\", \"/dispatch/apps/$1\"));\r\n } else {\r\n routes.push(vercelRedirect(\"/\", `/${apps[0]}/`));\r\n }\r\n\r\n for (const app of apps) {\r\n if (app !== \"dispatch\") {\r\n routes.push({ src: `/${app}`, dest: `/${app}-server` });\r\n }\r\n routes.push({ src: `/${app}/(.*)`, dest: `/${app}-server` });\r\n }\r\n\r\n const config = {\r\n version: 3,\r\n routes,\r\n };\r\n fs.writeFileSync(\r\n path.join(outputDir, \"config.json\"),\r\n JSON.stringify(config, null, 2) + \"\\n\",\r\n );\r\n}\r\n\r\nfunction vercelImmutableAssetHeaderRoutes(\r\n outputDir: string,\r\n apps: string[],\r\n): Array<Record<string, any>> {\r\n return apps.flatMap((app) => {\r\n const staticDir = path.join(outputDir, \"static\", app);\r\n return collectImmutableAssetPaths(staticDir).map((assetPath) => ({\r\n src: vercelRouteSrc(`/${app}${assetPath}`),\r\n headers: IMMUTABLE_ASSET_CACHE_HEADERS,\r\n continue: true,\r\n }));\r\n });\r\n}\r\n\r\nfunction vercelRouteSrc(pathname: string): string {\r\n return pathname.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n\r\nfunction vercelRedirect(src: string, location: string): Record<string, any> {\r\n return {\r\n src,\r\n status: 302,\r\n headers: { Location: location },\r\n };\r\n}\r\n\r\nfunction netlifyAssetRedirectsFor(app: string, distDir: string): string[] {\r\n const from = `/${app}`;\r\n const to = `/${NETLIFY_WORKSPACE_STATIC_DIR}/${app}`;\r\n return [\r\n `${from}/assets/* ${to}/assets/:splat 200`,\r\n ...netlifyPublicRootAssetPaths(\r\n app,\r\n path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app),\r\n ).map((assetPath) => {\r\n const assetName = assetPath.slice(from.length + 1);\r\n return `${assetPath} ${to}/${assetName} 200`;\r\n }),\r\n ];\r\n}\r\n\r\nfunction dispatchRootFaviconAsset(distDir: string): string | null {\r\n for (const asset of [\"favicon.ico\", \"favicon.svg\", \"favicon.png\"]) {\r\n if (workspaceAppAssetExists(distDir, \"dispatch\", asset)) return asset;\r\n }\r\n return null;\r\n}\r\n\r\nfunction workspaceAppAssetExists(\r\n distDir: string,\r\n app: string,\r\n asset: string,\r\n): boolean {\r\n return [\r\n path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app, asset),\r\n path.join(distDir, app, app, asset),\r\n path.join(distDir, app, asset),\r\n ].some((candidate) => fs.existsSync(candidate));\r\n}\r\n\r\nconst RESERVED_WORKSPACE_APP_IDS = new Set([\r\n \"_agent-native\",\r\n \"_workspace_static\",\r\n \"netlify\",\r\n ...DISPATCH_WORKSPACE_ROOT_REDIRECTS.map(([from]) => from),\r\n]);\r\n\r\nfunction assertNoReservedWorkspaceAppIds(apps: string[]): void {\r\n const conflicts = apps.filter(\r\n (app) => app !== \"dispatch\" && RESERVED_WORKSPACE_APP_IDS.has(app),\r\n );\r\n if (conflicts.length === 0) return;\r\n throw new Error(\r\n `Workspace app id ${conflicts.map((id) => `\"${id}\"`).join(\", \")} conflicts with reserved workspace routes. Choose a different app id.`,\r\n );\r\n}\r\n\r\nfunction copyNetlifyFunctionIntoWorkspace(\r\n workspaceRoot: string,\r\n app: string,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n staticDir: string,\r\n): void {\r\n const appDir = path.join(workspaceRoot, \"apps\", app);\r\n const src = path.join(appDir, \".netlify\", \"functions-internal\", \"server\");\r\n if (!fs.existsSync(src)) {\r\n throw new Error(\r\n `Expected Netlify function at ${src} after building ${app}. Check the app's build script and NITRO_PRESET.`,\r\n );\r\n }\r\n\r\n const dest = path.join(netlifyFunctionsDir(workspaceRoot), `${app}-server`);\r\n fs.rmSync(dest, { recursive: true, force: true });\r\n copyDir(src, dest);\r\n patchNetlifyFunctionEntry(dest, app, workspaceApps, staticDir);\r\n\r\n // Durable background agent runs (default-ON; opt out with a falsy\r\n // AGENT_CHAT_DURABLE_BACKGROUND). Additive ONLY: when explicitly opted out\r\n // this emits nothing and the single-function deploy is unchanged.\r\n if (isDurableBackgroundDeployEnabled()) {\r\n emitNetlifyBackgroundFunction(workspaceRoot, app, src, workspaceApps);\r\n }\r\n}\r\n\r\n/**\r\n * Deploy-time gate for emitting the second `-background` Netlify function. Reads\r\n * the same env flag the runtime gate uses (`AGENT_CHAT_DURABLE_BACKGROUND`).\r\n *\r\n * DEFAULT-ON, matching the runtime gate (`isFlagEnabled` in\r\n * durable-background.ts) and the single-template gate\r\n * (`isDurableBackgroundDeployEnabled` in deploy/build.ts): unset/empty/unknown\r\n * means enabled; an app opts OUT only with an explicit falsy value\r\n * (`false`/`0`/`no`/`off`). This emits the per-app 15-min `-background` function\r\n * so the chat `_process-run` dispatch lands on it with the real long budget.\r\n */\r\nfunction isDurableBackgroundDeployEnabled(): boolean {\r\n const raw = process.env.AGENT_CHAT_DURABLE_BACKGROUND;\r\n if (raw == null) return true;\r\n const v = raw.trim().toLowerCase();\r\n return !(v === \"0\" || v === \"false\" || v === \"no\" || v === \"off\");\r\n}\r\n\r\n/**\r\n * Emit a SECOND Netlify function for `app` whose name ends in `-background`,\r\n * re-exporting the SAME `main.mjs` handler bundle. Netlify invokes any function\r\n * with `config.background: true` asynchronously (202 immediately, up to 15-min\r\n * budget), which is exactly what the durable-background chat dispatch\r\n * (`fireInternalDispatch` → the function's default url) needs.\r\n *\r\n * DOC-CORRECT DEFAULT-URL APPROACH (mirrors the single-template emit in\r\n * deploy/build.ts): the function declares NO custom `config.path`, so it keeps\r\n * its DEFAULT url `/.netlify/functions/<app>-agent-background`. The `<app>-server`\r\n * function's catch-all already excludes `/.netlify/*`, so that default-url\r\n * namespace is NEVER shadowed by the synchronous function — no overlapping\r\n * `config.path` and no catch-all patch are needed. The foreground dispatches to\r\n * that default url (`resolveAgentChatProcessRunDispatchPath` resolves the per-app\r\n * name from `AGENT_NATIVE_WORKSPACE_APP_ID`); `fireInternalDispatch` strips the\r\n * app base path for `/.netlify/*` targets so the request reaches the host-root\r\n * function url. The entry then REWRITES the incoming pathname to the\r\n * base-path-prefixed `_process-run` route before delegating to the Nitro router.\r\n *\r\n * It shares the same bundle (`includedFiles: [\"**\"]`) so `A2A_SECRET`, the DB\r\n * URL, and the rest of the env/bundle are present. A prior attempt gave the\r\n * function a custom `config.path` (the framework route) that overlapped the\r\n * synchronous `<app>-server` catch-all; that path was not honored as a route in\r\n * prod (probe → 404). The default url is the doc-correct fix.\r\n *\r\n * Safety net: if the dispatch fast-fails the foreground degrades to an inline\r\n * 40s synchronous run (see production-agent.ts).\r\n */\r\nfunction emitNetlifyBackgroundFunction(\r\n workspaceRoot: string,\r\n app: string,\r\n srcServerDir: string,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n): void {\r\n // Name MUST end in `-background` (Netlify async convention + the runtime guard\r\n // reads the -background Lambda-name suffix as a fallback). It is reached at its\r\n // DEFAULT url /.netlify/functions/<app>-agent-background.\r\n const backgroundName = `${app}-agent-background`;\r\n const dest = path.join(netlifyFunctionsDir(workspaceRoot), backgroundName);\r\n fs.rmSync(dest, { recursive: true, force: true });\r\n copyDir(srcServerDir, dest);\r\n\r\n const basePath = `/${app}`;\r\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\r\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\r\n workspaceApps,\r\n app,\r\n );\r\n // The Nitro router for this app expects the base-path-prefixed framework route.\r\n // The function is reached at its default url, so the entry rewrites the\r\n // incoming pathname to `/<app>/_agent-native/agent-chat/_process-run`.\r\n const processRunPath = `${basePath}${AGENT_CHAT_PROCESS_RUN_PATH}`;\r\n const server = `// Mark this isolate as the durable background runtime BEFORE the handler bundle\r\n// is imported, so isInBackgroundFunctionRuntime() reliably returns true in this\r\n// function (the deployed Lambda name is not guaranteed to end in -background). A\r\n// globalThis flag (NOT process.env) avoids the no-env-mutation guard and carries\r\n// no cross-request state.\r\nglobalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;\r\n\r\nconst basePath = ${JSON.stringify(basePath)};\r\n// The base-path-prefixed framework route the Nitro router dispatches to.\r\nconst PROCESS_RUN_PATH = ${JSON.stringify(processRunPath)};\r\n\r\nfunction setBasePathEnv() {\r\n const processRef = globalThis.process ??= { env: {} };\r\n processRef.env ??= {};\r\n Object.assign(processRef.env, {\r\n AGENT_NATIVE_WORKSPACE: \"1\",\r\n AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\r\n APP_BASE_PATH: basePath,\r\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\r\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\r\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\r\n VITE_APP_BASE_PATH: basePath,\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},\r\n ${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},\r\n });\r\n}\r\n\r\nsetBasePathEnv();\r\n\r\nlet cachedHandler;\r\n\r\n// Reached at the DEFAULT url /.netlify/functions/${backgroundName}; REWRITE the\r\n// incoming pathname to the base-path-prefixed _process-run route so the Nitro\r\n// router runs the plugin. Method, ALL headers (the HMAC Authorization: Bearer\r\n// MUST survive) and the body are preserved.\r\nexport default async function handler(request) {\r\n setBasePathEnv();\r\n cachedHandler ??= (await import(\"./main.mjs\")).default;\r\n const url = new URL(request.url);\r\n url.pathname = PROCESS_RUN_PATH;\r\n const method = request.method || \"POST\";\r\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\r\n const body = hasBody ? await request.text() : undefined;\r\n const rewritten = new Request(url.toString(), {\r\n method,\r\n headers: request.headers,\r\n body,\r\n });\r\n return cachedHandler(rewritten);\r\n}\r\n\r\nexport const config = {\r\n name: ${JSON.stringify(`${app} agent background handler`)},\r\n generator: \"agent-native workspace deploy\",\r\n // background: true → async invoke (202, 15-min budget). NO custom path: the\r\n // function keeps its default url /.netlify/functions/${backgroundName}, which\r\n // the <app>-server catch-all never shadows (it excludes /.netlify/*).\r\n background: true,\r\n nodeBundler: \"none\",\r\n includedFiles: [\"**\"],\r\n preferStatic: false,\r\n};\r\n`;\r\n // Remove the original Nitro entry (server.mjs) so only our background entry\r\n // is the function entrypoint, mirroring patchNetlifyFunctionEntry.\r\n fs.rmSync(path.join(dest, \"server.mjs\"), { force: true });\r\n fs.writeFileSync(path.join(dest, `${backgroundName}.mjs`), server);\r\n console.log(\r\n `[workspace-deploy] Emitted durable-background function \"${backgroundName}\" ` +\r\n `for app \"${app}\" with config { background:true } and NO custom path — ` +\r\n `reachable at its default url /.netlify/functions/${backgroundName} ` +\r\n `(rewrites to ${processRunPath}). REQUIRES real-deploy verification of ` +\r\n `Netlify async (202) invocation — see docs/design/durable-agent-runs.md.`,\r\n );\r\n}\r\n\r\nfunction patchNetlifyFunctionEntry(\r\n functionDir: string,\r\n app: string,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n staticDir: string,\r\n): void {\r\n const serverPath = path.join(functionDir, \"server.mjs\");\r\n if (!fs.existsSync(serverPath)) return;\r\n\r\n const basePath = `/${app}`;\r\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\r\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\r\n workspaceApps,\r\n app,\r\n );\r\n const pathConfig =\r\n app === \"dispatch\"\r\n ? [\"/_agent-native/*\", \"/.well-known/*\", `${basePath}/*`]\r\n : [basePath, `${basePath}/*`];\r\n const normalizeBasePathHelper =\r\n app === \"dispatch\"\r\n ? \"\"\r\n : `\r\nfunction normalizeBasePathArgs(args) {\r\n const request = args[0];\r\n if (!request || typeof request.url !== \"string\" || typeof Request !== \"function\") {\r\n return args;\r\n }\r\n const url = new URL(request.url);\r\n if (url.pathname === basePath || url.pathname === \\`\\${basePath}/\\`) {\r\n url.pathname = \\`\\${basePath}//\\`;\r\n return [new Request(url, request), ...args.slice(1)];\r\n }\r\n return args;\r\n}\r\n`;\r\n const handlerArgs =\r\n app === \"dispatch\" ? \"...args\" : \"...normalizeBasePathArgs(args)\";\r\n const server = `const basePath = ${JSON.stringify(basePath)};\r\n\r\nfunction setBasePathEnv() {\r\n const processRef = globalThis.process ??= { env: {} };\r\n processRef.env ??= {};\r\n Object.assign(processRef.env, {\r\n AGENT_NATIVE_WORKSPACE: \"1\",\r\n AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\r\n APP_BASE_PATH: basePath,\r\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\r\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\r\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\r\n VITE_APP_BASE_PATH: basePath,\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},\r\n ${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},\r\n });\r\n}\r\n\r\nsetBasePathEnv();\r\n${normalizeBasePathHelper}\r\n\r\nlet cachedHandler;\r\n\r\nexport default async function handler(...args) {\r\n setBasePathEnv();\r\n cachedHandler ??= (await import(\"./main.mjs\")).default;\r\n return cachedHandler(${handlerArgs});\r\n}\r\n\r\nexport const config = {\r\n name: ${JSON.stringify(`${app} server handler`)},\r\n generator: \"agent-native workspace deploy\",\r\n path: ${JSON.stringify(pathConfig)},\r\n nodeBundler: \"none\",\r\n includedFiles: [\"**\"],\r\n excludedPath: ${JSON.stringify(\r\n netlifyFunctionExcludedPaths(app, staticDir),\r\n null,\r\n 2,\r\n )\r\n .split(\"\\n\")\r\n .join(\"\\n \")},\r\n preferStatic: false,\r\n};\r\n`;\r\n fs.rmSync(serverPath, { force: true });\r\n fs.writeFileSync(path.join(functionDir, `${app}-server.mjs`), server);\r\n}\r\n\r\nfunction patchVercelFunctionEntry(\r\n functionDir: string,\r\n app: string,\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n): void {\r\n const entryPath = path.join(functionDir, \"index.mjs\");\r\n if (!fs.existsSync(entryPath)) return;\r\n\r\n const mainPath = path.join(functionDir, \"main.mjs\");\r\n fs.rmSync(mainPath, { force: true });\r\n fs.renameSync(entryPath, mainPath);\r\n\r\n const basePath = `/${app}`;\r\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\r\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\r\n workspaceApps,\r\n app,\r\n );\r\n const entry = `const basePath = ${JSON.stringify(basePath)};\r\n\r\nfunction setBasePathEnv() {\r\n const processRef = globalThis.process ??= { env: {} };\r\n processRef.env ??= {};\r\n Object.assign(processRef.env, {\r\n AGENT_NATIVE_WORKSPACE: \"1\",\r\n AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\r\n APP_BASE_PATH: basePath,\r\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\r\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\r\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\r\n VITE_APP_BASE_PATH: basePath,\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\r\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},\r\n ${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},\r\n });\r\n}\r\n\r\nfunction normalizeBasePathArgs(args) {\r\n const request = args[0];\r\n if (!request) return args;\r\n\r\n if (typeof Request === \"function\" && request instanceof Request) {\r\n const url = new URL(request.url);\r\n if (url.pathname === basePath || url.pathname === \\`\\${basePath}/\\`) {\r\n url.pathname = \\`\\${basePath}//\\`;\r\n return [new Request(url, request), ...args.slice(1)];\r\n }\r\n return args;\r\n }\r\n\r\n if (typeof request.url !== \"string\") return args;\r\n const url = new URL(request.url, \"http://agent-native.local\");\r\n if (url.pathname === basePath || url.pathname === \\`\\${basePath}/\\`) {\r\n request.url = \\`\\${basePath}//\\${url.search}\\`;\r\n }\r\n return args;\r\n}\r\n\r\nsetBasePathEnv();\r\n\r\nlet cachedHandler;\r\n\r\nexport default async function handler(...args) {\r\n setBasePathEnv();\r\n cachedHandler ??= (await import(\"./main.mjs\")).default;\r\n return cachedHandler(...normalizeBasePathArgs(args));\r\n}\r\n`;\r\n fs.writeFileSync(entryPath, entry);\r\n}\r\n\r\nfunction netlifyFunctionExcludedPaths(\r\n app: string,\r\n staticDir: string,\r\n): string[] {\r\n return [\r\n \"/.netlify/*\",\r\n `/${app}/assets/*`,\r\n ...netlifyPublicRootAssetPaths(app, staticDir),\r\n ];\r\n}\r\n\r\nfunction netlifyPublicRootAssetPaths(app: string, staticDir: string): string[] {\r\n if (!fs.existsSync(staticDir)) return [];\r\n return fs\r\n .readdirSync(staticDir, { withFileTypes: true })\r\n .filter((entry) => entry.isFile())\r\n .map((entry) => entry.name)\r\n .filter((name) => {\r\n const ext = path.extname(name).slice(1).toLowerCase();\r\n return NETLIFY_PUBLIC_ASSET_EXTENSIONS.has(ext);\r\n })\r\n .sort()\r\n .map((name) => `/${app}/${encodeURI(name)}`);\r\n}\r\n\r\nfunction netlifyFunctionsDir(workspaceRoot: string): string {\r\n return path.join(workspaceRoot, \".netlify\", \"functions-internal\");\r\n}\r\n\r\nfunction cleanAppBuildOutputs(appDir: string): void {\r\n for (const name of [\"dist\", \".output\", \"build\"]) {\r\n fs.rmSync(path.join(appDir, name), { recursive: true, force: true });\r\n }\r\n fs.rmSync(path.join(appDir, \".netlify\", \"functions-internal\"), {\r\n recursive: true,\r\n force: true,\r\n });\r\n fs.rmSync(path.join(appDir, \".vercel\", \"output\"), {\r\n recursive: true,\r\n force: true,\r\n });\r\n}\r\n\r\nfunction appUsesNetlifyUnpooledDatabaseUrl(appDir: string): boolean {\r\n const netlifyPath = path.join(appDir, \"netlify.toml\");\r\n if (!fs.existsSync(netlifyPath)) return false;\r\n try {\r\n return fs\r\n .readFileSync(netlifyPath, \"utf-8\")\r\n .includes(\"NETLIFY_DATABASE_URL_UNPOOLED\");\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nfunction writeWorkspaceAppManifests(\r\n workspaceRoot: string,\r\n distDir: string,\r\n apps: string[],\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n preset: WorkspaceDeployPreset,\r\n): void {\r\n const manifest = JSON.stringify(\r\n {\r\n version: 1,\r\n apps: workspaceApps,\r\n },\r\n null,\r\n 2,\r\n );\r\n\r\n const targets =\r\n preset === \"netlify\"\r\n ? apps.map((app) =>\r\n path.join(\r\n netlifyFunctionsDir(workspaceRoot),\r\n `${app}-server`,\r\n WORKSPACE_APPS_MANIFEST_DIR,\r\n WORKSPACE_APPS_MANIFEST_FILE,\r\n ),\r\n )\r\n : preset === \"vercel\"\r\n ? apps.map((app) =>\r\n path.join(\r\n workspaceRoot,\r\n VERCEL_OUTPUT_DIR,\r\n \"functions\",\r\n `${app}-server.func`,\r\n WORKSPACE_APPS_MANIFEST_DIR,\r\n WORKSPACE_APPS_MANIFEST_FILE,\r\n ),\r\n )\r\n : apps.map((app) =>\r\n path.join(\r\n distDir,\r\n app,\r\n WORKSPACE_APPS_MANIFEST_DIR,\r\n WORKSPACE_APPS_MANIFEST_FILE,\r\n ),\r\n );\r\n\r\n for (const target of targets) {\r\n fs.mkdirSync(path.dirname(target), { recursive: true });\r\n fs.writeFileSync(target, `${manifest}\\n`);\r\n }\r\n}\r\n\r\nfunction readWorkspaceAppManifest(\r\n workspaceRoot: string,\r\n apps: string[],\r\n): WorkspaceAppManifestEntry[] {\r\n const explicitApps = readExistingWorkspaceAppManifest(workspaceRoot);\r\n\r\n return apps\r\n .map((app) => {\r\n const appDir = path.join(workspaceRoot, \"apps\", app);\r\n const pkg = readPackageJson(path.join(appDir, \"package.json\"));\r\n const appPath = `/${app}`;\r\n const explicit = explicitApps.get(app);\r\n const url =\r\n normalizeWorkspaceAppUrl(explicit?.url) ?? workspaceAppUrl(appPath);\r\n const audience =\r\n workspaceAppAudienceFromPackageJson(pkg) ??\r\n explicit?.audience ??\r\n DEFAULT_WORKSPACE_APP_AUDIENCE;\r\n const packageRouteAccess = workspaceAppRouteAccessFromPackageJson(pkg);\r\n // Prefer the package.json value whenever the field was set — including\r\n // an explicit empty array, which is how a per-app package.json signals\r\n // \"clear any previously-published manifest override.\" Falling back on\r\n // length > 0 would silently keep the explicit override even after the\r\n // app owner blanked their list.\r\n const publicPaths =\r\n packageRouteAccess.publicPaths ?? explicit?.publicPaths ?? [];\r\n const protectedPaths =\r\n packageRouteAccess.protectedPaths ?? explicit?.protectedPaths ?? [];\r\n return {\r\n id: app,\r\n name: pkg?.displayName || titleCase(app),\r\n description: pkg?.description || \"\",\r\n path: appPath,\r\n ...(url ? { url } : {}),\r\n isDispatch: app === \"dispatch\",\r\n audience,\r\n publicPaths,\r\n protectedPaths,\r\n };\r\n })\r\n .sort((a, b) => {\r\n if (a.id === \"dispatch\") return -1;\r\n if (b.id === \"dispatch\") return 1;\r\n return a.name.localeCompare(b.name);\r\n });\r\n}\r\n\r\nfunction readExistingWorkspaceAppManifest(\r\n workspaceRoot: string,\r\n): Map<string, WorkspaceAppManifestOverride> {\r\n const fromEnv = parseWorkspaceAppsJson(process.env[WORKSPACE_APPS_ENV_KEY]);\r\n const fromFile =\r\n readWorkspaceAppsFromFile(\r\n path.join(\r\n workspaceRoot,\r\n WORKSPACE_APPS_MANIFEST_DIR,\r\n WORKSPACE_APPS_MANIFEST_FILE,\r\n ),\r\n ) ??\r\n readWorkspaceAppsFromFile(\r\n path.join(workspaceRoot, WORKSPACE_APPS_MANIFEST_FILE),\r\n );\r\n const apps = fromEnv ?? fromFile ?? [];\r\n return new Map(apps.map((app) => [app.id, app]));\r\n}\r\n\r\nfunction parseWorkspaceAppsJson(\r\n raw: string | undefined,\r\n): WorkspaceAppManifestOverride[] | null {\r\n if (!raw) return null;\r\n try {\r\n return parseWorkspaceAppsManifest(JSON.parse(raw));\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction readWorkspaceAppsFromFile(\r\n file: string,\r\n): WorkspaceAppManifestOverride[] | null {\r\n if (!fs.existsSync(file)) return null;\r\n return parseWorkspaceAppsManifest(readPackageJson(file));\r\n}\r\n\r\nfunction parseWorkspaceAppsManifest(\r\n parsed: any,\r\n): WorkspaceAppManifestOverride[] | null {\r\n const rawApps = Array.isArray(parsed?.apps)\r\n ? parsed.apps\r\n : Array.isArray(parsed)\r\n ? parsed\r\n : null;\r\n if (!rawApps) return null;\r\n\r\n const apps = (rawApps as unknown[])\r\n .map((entry) => {\r\n if (!entry || typeof entry !== \"object\") return null;\r\n const e = entry as Record<string, unknown>;\r\n const id = typeof e.id === \"string\" ? e.id.trim() : \"\";\r\n if (!id) return null;\r\n const url = normalizeWorkspaceAppUrl(e.url);\r\n const audience =\r\n e.audience === undefined\r\n ? undefined\r\n : normalizeWorkspaceAppAudience(e.audience);\r\n const publicPaths = normalizeWorkspaceAppPathList(e.publicPaths);\r\n const protectedPaths = normalizeWorkspaceAppPathList(e.protectedPaths);\r\n return {\r\n id,\r\n ...(url ? { url } : {}),\r\n ...(audience ? { audience } : {}),\r\n ...(publicPaths.length > 0 ? { publicPaths } : {}),\r\n ...(protectedPaths.length > 0 ? { protectedPaths } : {}),\r\n };\r\n })\r\n .filter((app): app is NonNullable<typeof app> => !!app);\r\n\r\n return apps.length ? apps : null;\r\n}\r\n\r\nfunction workspaceBaseUrl(): string | null {\r\n const gatewayOrigin =\r\n process.env.WORKSPACE_GATEWAY_URL || process.env.VITE_WORKSPACE_GATEWAY_URL;\r\n const publicGatewayOrigin = normalizeOrigin(gatewayOrigin);\r\n const gatewayFallback =\r\n publicGatewayOrigin && !isLoopbackOrigin(publicGatewayOrigin)\r\n ? gatewayOrigin\r\n : null;\r\n return (\r\n process.env.APP_URL ||\r\n process.env.WORKSPACE_OAUTH_ORIGIN ||\r\n process.env.VITE_WORKSPACE_OAUTH_ORIGIN ||\r\n process.env.URL ||\r\n process.env.DEPLOY_URL ||\r\n process.env.BETTER_AUTH_URL ||\r\n gatewayFallback ||\r\n gatewayOrigin ||\r\n null\r\n );\r\n}\r\n\r\nfunction normalizeOrigin(value: string | null | undefined): string | undefined {\r\n if (!value) return undefined;\r\n try {\r\n return new URL(value).origin;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction isLoopbackOrigin(origin: string | undefined): boolean {\r\n if (!origin) return false;\r\n try {\r\n const host = new URL(origin).hostname.toLowerCase();\r\n return (\r\n host === \"localhost\" ||\r\n host === \"127.0.0.1\" ||\r\n host === \"[::1]\" ||\r\n host === \"::1\"\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nfunction workspaceOAuthOrigin(\r\n workspaceGatewayUrl: string | null,\r\n): string | undefined {\r\n // Explicit overrides (env vars set by the operator) win even if they happen\r\n // to be loopback — that's a deliberate dev-against-prod choice.\r\n // The gateway-URL fallback, however, is auto-resolved and would silently\r\n // send users to localhost if the configured gateway is loopback in a\r\n // production deploy. Strip loopback there so OAuth fails loudly instead.\r\n const gatewayFallback = normalizeOrigin(workspaceGatewayUrl);\r\n return (\r\n normalizeOrigin(process.env.VITE_WORKSPACE_OAUTH_ORIGIN) ||\r\n normalizeOrigin(process.env.WORKSPACE_OAUTH_ORIGIN) ||\r\n normalizeOrigin(process.env.APP_URL) ||\r\n normalizeOrigin(process.env.BETTER_AUTH_URL) ||\r\n normalizeOrigin(process.env.URL) ||\r\n normalizeOrigin(process.env.DEPLOY_URL) ||\r\n (isLoopbackOrigin(gatewayFallback) ? undefined : gatewayFallback)\r\n );\r\n}\r\n\r\nfunction workspaceAppUrl(appPath: string): string | undefined {\r\n const base = workspaceBaseUrl();\r\n if (!base) return undefined;\r\n try {\r\n return new URL(appPath, `${base.replace(/\\/$/, \"\")}/`).toString();\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction normalizeWorkspaceAppUrl(value: unknown): string | undefined {\r\n if (typeof value !== \"string\" || !value.trim()) return undefined;\r\n try {\r\n return new URL(value.trim()).toString().replace(/\\/$/, \"\");\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction readPackageJson(file: string): Record<string, any> | null {\r\n try {\r\n return JSON.parse(fs.readFileSync(file, \"utf8\"));\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction titleCase(value: string): string {\r\n return value\r\n .split(/[-_\\s]+/)\r\n .filter(Boolean)\r\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join(\" \");\r\n}\r\n\r\nfunction parsePresetArg(args: string[]): WorkspaceDeployPreset | null {\r\n for (let i = 0; i < args.length; i++) {\r\n const arg = args[i];\r\n if (arg === \"--preset\" && args[i + 1]) {\r\n return normalizePreset(args[i + 1]);\r\n }\r\n if (arg.startsWith(\"--preset=\")) {\r\n return normalizePreset(arg.slice(\"--preset=\".length));\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction resolvePreset(\r\n optionPreset: WorkspaceDeployPreset | undefined,\r\n args: string[],\r\n): WorkspaceDeployPreset {\r\n return (\r\n optionPreset ??\r\n parsePresetArg(args) ??\r\n normalizePreset(process.env.NITRO_PRESET) ??\r\n \"cloudflare_pages\"\r\n );\r\n}\r\n\r\nfunction assertWorkspaceDeployProductionEnv(opts: {\r\n buildOnly: boolean;\r\n preset: WorkspaceDeployPreset;\r\n}): void {\r\n if (!isProductionWorkspaceDeploy(opts)) return;\r\n if (process.env.A2A_SECRET?.trim()) return;\r\n const providerHint =\r\n opts.preset === \"netlify\"\r\n ? ' For Netlify, one option is: netlify env:set A2A_SECRET \"$(openssl rand -hex 32)\".'\r\n : \"\";\r\n throw new Error(\r\n [\r\n \"A2A_SECRET is required for production workspace deploys.\",\r\n \"Workspace Slack, webhook, and cross-app A2A work resumes through signed background processors; without A2A_SECRET those production routes return 503.\",\r\n `Set A2A_SECRET in your deploy provider and redeploy.${providerHint}`,\r\n \"For local artifact checks, run agent-native deploy --build-only outside the deploy provider environment.\",\r\n ].join(\" \"),\r\n );\r\n}\r\n\r\nfunction isProductionWorkspaceDeploy(opts: {\r\n buildOnly: boolean;\r\n preset: WorkspaceDeployPreset;\r\n}): boolean {\r\n if (!opts.buildOnly) return true;\r\n if (\r\n opts.preset === \"netlify\" &&\r\n process.env.NETLIFY === \"true\" &&\r\n process.env.NETLIFY_LOCAL !== \"true\"\r\n ) {\r\n return true;\r\n }\r\n if (opts.preset === \"cloudflare_pages\" && process.env.CF_PAGES === \"1\") {\r\n return true;\r\n }\r\n if (opts.preset === \"vercel\" && process.env.VERCEL === \"1\") {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction normalizePreset(\r\n value: string | undefined,\r\n): WorkspaceDeployPreset | null {\r\n if (!value) return null;\r\n if (value === \"cloudflare_pages\" || value === \"cloudflare-pages\") {\r\n return \"cloudflare_pages\";\r\n }\r\n if (value === \"netlify\") return \"netlify\";\r\n if (value === \"vercel\") return \"vercel\";\r\n throw new Error(\r\n `Unsupported workspace deploy preset \"${value}\". Supported presets: cloudflare_pages, netlify, vercel.`,\r\n );\r\n}\r\n\r\nfunction moduleIdent(app: string): string {\r\n return \"app_\" + app.replace(/[^a-zA-Z0-9_]/g, \"_\");\r\n}\r\n\r\nfunction workspaceAppAudienceForApp(\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n app: string,\r\n): WorkspaceAppAudience {\r\n return (\r\n workspaceApps.find((entry) => entry.id === app)?.audience ??\r\n DEFAULT_WORKSPACE_APP_AUDIENCE\r\n );\r\n}\r\n\r\nfunction workspaceAppRouteAccessForApp(\r\n workspaceApps: WorkspaceAppManifestEntry[],\r\n app: string,\r\n): WorkspaceAppRouteAccess {\r\n const entry = workspaceApps.find((candidate) => candidate.id === app);\r\n return {\r\n publicPaths: entry?.publicPaths ?? [],\r\n protectedPaths: entry?.protectedPaths ?? [],\r\n };\r\n}\r\n\r\nfunction compareWorkspaceAppIds(a: string, b: string): number {\r\n if (a === \"dispatch\") return -1;\r\n if (b === \"dispatch\") return 1;\r\n return a.localeCompare(b);\r\n}\r\n\r\nfunction copyDir(src: string, dest: string): void {\r\n fs.mkdirSync(dest, { recursive: true });\r\n for (const entry of fs.readdirSync(src, { withFileTypes: true })) {\r\n const s = path.join(src, entry.name);\r\n const d = path.join(dest, entry.name);\r\n if (entry.isSymbolicLink()) {\r\n try {\r\n const target = fs.readlinkSync(s);\r\n fs.symlinkSync(target, d);\r\n } catch {\r\n fs.copyFileSync(s, d);\r\n }\r\n } else if (entry.isDirectory()) {\r\n copyDir(s, d);\r\n } else {\r\n fs.copyFileSync(s, d);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"workspace-deploy.js","sourceRoot":"","sources":["../../src/deploy/workspace-deploy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native deploy` — build and deploy every app in a workspace to a\n * single origin. Each app is served from `/<app-name>/*`, so:\n *\n * https://your-agents.com/mail/* → apps/mail\n * https://your-agents.com/calendar/* → apps/calendar\n *\n * Benefits of same-origin deploy:\n * - Shared auth cookie → log in once, every app is signed in\n * - Cross-app A2A is a same-origin fetch (no CORS, no JWT for siblings)\n * - One DNS record, one TLS cert, one CDN cache\n *\n * Per-app independent deploy is still supported — just cd into the app and\n * run `agent-native build` as before. This orchestrator is for teams that\n * want the whole workspace behind one domain.\n */\nimport { execFileSync } from \"child_process\";\nimport fs from \"fs\";\nimport path from \"path\";\n\nimport { AGENT_CHAT_PROCESS_RUN_PATH } from \"../agent/durable-background.js\";\nimport { findWorkspaceRoot } from \"../scripts/utils.js\";\nimport {\n DEFAULT_WORKSPACE_APP_AUDIENCE,\n normalizeWorkspaceAppAudience,\n normalizeWorkspaceAppPathList,\n workspaceAppAudienceFromPackageJson,\n workspaceAppRouteAccessFromPackageJson,\n type WorkspaceAppRouteAccess,\n type WorkspaceAppAudience,\n} from \"../shared/workspace-app-audience.js\";\nimport { DISPATCH_WORKSPACE_ROOT_REDIRECTS } from \"../shared/workspace-app-id.js\";\nimport {\n collectImmutableAssetPaths,\n IMMUTABLE_ASSET_CACHE_HEADERS,\n} from \"./immutable-assets.js\";\n\nexport type WorkspaceDeployPreset = \"cloudflare_pages\" | \"netlify\" | \"vercel\";\n\nconst NETLIFY_WORKSPACE_STATIC_DIR = \"_workspace_static\";\nconst NETLIFY_PUBLIC_ASSET_EXTENSIONS = new Set([\n \"avif\",\n \"css\",\n \"gif\",\n \"ico\",\n \"jpeg\",\n \"jpg\",\n \"js\",\n \"json\",\n \"map\",\n \"mp4\",\n \"pdf\",\n \"png\",\n \"svg\",\n \"txt\",\n \"wasm\",\n \"webm\",\n \"webmanifest\",\n \"webp\",\n \"xml\",\n]);\nconst WORKSPACE_APPS_ENV_KEY = \"AGENT_NATIVE_WORKSPACE_APPS_JSON\";\nconst WORKSPACE_APPS_MANIFEST_DIR = \".agent-native\";\nconst WORKSPACE_APPS_MANIFEST_FILE = \"workspace-apps.json\";\nconst VERCEL_OUTPUT_DIR = \".vercel/output\";\n\ninterface WorkspaceAppManifestEntry {\n id: string;\n name: string;\n description: string;\n path: string;\n url?: string;\n isDispatch: boolean;\n audience: WorkspaceAppAudience;\n publicPaths: string[];\n protectedPaths: string[];\n}\n\ninterface WorkspaceAppManifestOverride {\n id: string;\n url?: string;\n audience?: WorkspaceAppAudience;\n publicPaths?: string[];\n protectedPaths?: string[];\n}\n\nexport interface WorkspaceDeployOptions {\n args?: string[];\n /** Override the workspace root (defaults to walking up from cwd). */\n workspaceRoot?: string;\n /** Only build — don't invoke the deploy platform CLI. */\n buildOnly?: boolean;\n /** Target preset. Defaults to `cloudflare_pages`. */\n preset?: WorkspaceDeployPreset;\n /** @internal Override process execution in tests. */\n execFile?: typeof execFileSync;\n}\n\nexport async function runWorkspaceDeploy(\n opts: WorkspaceDeployOptions = {},\n): Promise<void> {\n const workspaceRoot =\n opts.workspaceRoot ?? findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const appsDir = path.join(workspaceRoot, \"apps\");\n if (!fs.existsSync(appsDir)) {\n throw new Error(\n `No apps/ directory found at ${workspaceRoot}. Run this inside an agent-native workspace.`,\n );\n }\n\n const rawArgs = opts.args ?? [];\n const args = new Set(rawArgs);\n const buildOnly = opts.buildOnly ?? args.has(\"--build-only\");\n\n const apps = fs\n .readdirSync(appsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .filter((n) => fs.existsSync(path.join(appsDir, n, \"package.json\")))\n .sort(compareWorkspaceAppIds);\n\n if (apps.length === 0) {\n throw new Error(\n `Workspace has no apps. Run \\`agent-native add-app\\` to add one.`,\n );\n }\n assertNoReservedWorkspaceAppIds(apps);\n const workspaceApps = readWorkspaceAppManifest(workspaceRoot, apps);\n\n const preset = resolvePreset(opts.preset, rawArgs);\n assertWorkspaceDeployProductionEnv({ buildOnly, preset });\n const distDir = path.join(workspaceRoot, \"dist\");\n const vercelOutputDir = path.join(workspaceRoot, VERCEL_OUTPUT_DIR);\n if (preset === \"vercel\") {\n fs.rmSync(vercelOutputDir, { recursive: true, force: true });\n fs.mkdirSync(path.join(vercelOutputDir, \"static\"), { recursive: true });\n fs.mkdirSync(path.join(vercelOutputDir, \"functions\"), {\n recursive: true,\n });\n } else {\n fs.rmSync(distDir, { recursive: true, force: true });\n fs.mkdirSync(distDir, { recursive: true });\n }\n\n if (preset === \"netlify\") {\n const functionsDir = netlifyFunctionsDir(workspaceRoot);\n fs.rmSync(functionsDir, { recursive: true, force: true });\n fs.mkdirSync(functionsDir, { recursive: true });\n }\n\n console.log(\n `[workspace-deploy] Building ${apps.length} app(s) for preset=${preset}`,\n );\n\n const execFile = opts.execFile ?? execFileSync;\n for (const app of apps) {\n buildOneApp(workspaceRoot, app, preset, execFile, workspaceApps);\n moveAppBuildIntoWorkspaceOutput(\n workspaceRoot,\n app,\n preset,\n distDir,\n vercelOutputDir,\n workspaceApps,\n );\n }\n writeWorkspaceAppManifests(\n workspaceRoot,\n distDir,\n apps,\n workspaceApps,\n preset,\n );\n\n if (preset === \"netlify\") {\n writeNetlifyRedirects(distDir, apps);\n writeNetlifyHeaders(distDir, apps);\n } else if (preset === \"vercel\") {\n writeVercelBuildConfig(vercelOutputDir, apps);\n } else {\n writeCloudflareRoutingManifest(distDir, apps);\n }\n\n if (buildOnly) {\n const outputDir = preset === \"vercel\" ? vercelOutputDir : distDir;\n console.log(\n `\\n[workspace-deploy] Build complete at ${outputDir}. Skipping publish (--build-only).`,\n );\n return;\n }\n\n console.log(`\\n[workspace-deploy] Build complete. Publish with:\\n`);\n console.log(` cd ${path.relative(process.cwd(), workspaceRoot) || \".\"}`);\n if (preset === \"netlify\") {\n console.log(\n ` netlify deploy --prod --dir=dist --functions=.netlify/functions-internal\\n`,\n );\n } else if (preset === \"vercel\") {\n console.log(` vercel deploy --prebuilt\\n`);\n } else {\n console.log(` wrangler pages deploy dist\\n`);\n }\n console.log(\n `All apps live at https://<origin>/<app-name>/*. Log in once on any app\\nand the session is shared across the workspace.`,\n );\n}\n\nfunction buildOneApp(\n workspaceRoot: string,\n app: string,\n preset: WorkspaceDeployPreset,\n execFile: typeof execFileSync,\n workspaceApps: WorkspaceAppManifestEntry[],\n): void {\n const appDir = path.join(workspaceRoot, \"apps\", app);\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\n workspaceApps,\n app,\n );\n const workspaceGatewayUrl =\n process.env.VITE_WORKSPACE_GATEWAY_URL || workspaceBaseUrl();\n const workspaceOAuthUrl = workspaceOAuthOrigin(workspaceGatewayUrl);\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n NITRO_PRESET: preset,\n AGENT_NATIVE_WORKSPACE: \"1\",\n AGENT_NATIVE_WORKSPACE_APP_ID: app,\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: app,\n APP_BASE_PATH: `/${app}`,\n VITE_APP_BASE_PATH: `/${app}`,\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: workspaceAppAudience,\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\n workspaceAppRouteAccess.publicPaths,\n ),\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\n workspaceAppRouteAccess.protectedPaths,\n ),\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: workspaceAppAudience,\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(\n workspaceAppRouteAccess.publicPaths,\n ),\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(\n workspaceAppRouteAccess.protectedPaths,\n ),\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: JSON.stringify(workspaceApps),\n ...(workspaceGatewayUrl\n ? {\n WORKSPACE_GATEWAY_URL:\n process.env.WORKSPACE_GATEWAY_URL || workspaceGatewayUrl,\n VITE_WORKSPACE_GATEWAY_URL: workspaceGatewayUrl,\n ...(workspaceOAuthUrl\n ? { VITE_WORKSPACE_OAUTH_ORIGIN: workspaceOAuthUrl }\n : {}),\n }\n : {}),\n [WORKSPACE_APPS_ENV_KEY]: JSON.stringify(workspaceApps),\n };\n\n if (preset === \"netlify\" && appUsesNetlifyUnpooledDatabaseUrl(appDir)) {\n env.DATABASE_URL =\n process.env.NETLIFY_DATABASE_URL_UNPOOLED ??\n process.env.DATABASE_URL ??\n env.DATABASE_URL;\n }\n\n console.log(\n `[workspace-deploy] Building ${app} (base=/${app}, preset=${preset})`,\n );\n\n cleanAppBuildOutputs(appDir);\n\n execFile(\"pnpm\", [\"--filter\", app, \"build\"], {\n cwd: workspaceRoot,\n env,\n stdio: \"inherit\",\n });\n}\n\nfunction moveAppBuildIntoWorkspaceOutput(\n workspaceRoot: string,\n app: string,\n preset: WorkspaceDeployPreset,\n distDir: string,\n vercelOutputDir: string,\n workspaceApps: WorkspaceAppManifestEntry[],\n): void {\n const appDir = path.join(workspaceRoot, \"apps\", app);\n if (preset === \"vercel\") {\n copyVercelAppBuildIntoWorkspace(\n workspaceRoot,\n app,\n vercelOutputDir,\n workspaceApps,\n );\n return;\n }\n\n // Resolve the per-app build output: prefer dist/ (standard), fall back to\n // .output/ (Nitro's default). The Cloudflare preset emits into dist/\n // containing the worker + assets.\n const candidates = [\"dist\", \".output\"];\n const src = candidates\n .map((c) => path.join(appDir, c))\n .find((p) => fs.existsSync(p));\n if (!src) {\n throw new Error(\n `Expected ${candidates.join(\" or \")} under ${appDir} but none existed. Check the app's build script.`,\n );\n }\n if (preset === \"netlify\") {\n const mountedSrc = path.join(src, app);\n const staticSrc = fs.existsSync(mountedSrc) ? mountedSrc : src;\n const target = path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app);\n fs.mkdirSync(target, { recursive: true });\n copyDir(staticSrc, target);\n // Nitro/Vite mounted builds can contain a nested copy of public assets at\n // dist/<app>/<app>/...; the workspace root already supplies the outer\n // mount path, so keeping it would publish duplicate /<app>/<app> URLs.\n fs.rmSync(path.join(target, app), { recursive: true, force: true });\n copyNetlifyFunctionIntoWorkspace(workspaceRoot, app, workspaceApps, target);\n } else {\n const target = path.join(distDir, app);\n fs.mkdirSync(target, { recursive: true });\n copyDir(src, target);\n }\n}\n\nfunction copyVercelAppBuildIntoWorkspace(\n workspaceRoot: string,\n app: string,\n vercelOutputDir: string,\n workspaceApps: WorkspaceAppManifestEntry[],\n): void {\n const appDir = path.join(workspaceRoot, \"apps\", app);\n const src = path.join(appDir, VERCEL_OUTPUT_DIR);\n if (!fs.existsSync(src)) {\n throw new Error(\n `Expected Vercel output at ${src} after building ${app}. Check the app's build script and NITRO_PRESET.`,\n );\n }\n\n const staticSrc = path.join(src, \"static\");\n const staticDest = path.join(vercelOutputDir, \"static\");\n if (fs.existsSync(staticSrc)) {\n copyDir(staticSrc, staticDest);\n // Nitro's Vercel preset already nests assets under baseURL. The shared\n // deploy build also mirrors client assets under baseURL for other Nitro\n // presets, so mounted apps can contain a duplicate /<app>/<app> copy.\n fs.rmSync(path.join(staticDest, app, app), {\n recursive: true,\n force: true,\n });\n }\n\n const functionSrc = path.join(src, \"functions\", \"__server.func\");\n if (!fs.existsSync(functionSrc)) {\n throw new Error(\n `Expected Vercel function at ${functionSrc} after building ${app}. Check the app's build script and NITRO_PRESET.`,\n );\n }\n\n const functionDest = path.join(\n vercelOutputDir,\n \"functions\",\n `${app}-server.func`,\n );\n fs.rmSync(functionDest, { recursive: true, force: true });\n copyDir(functionSrc, functionDest);\n patchVercelFunctionEntry(functionDest, app, workspaceApps);\n}\n\n/**\n * Write the Cloudflare Pages `_routes.json` and a dispatcher `_worker.js` at\n * the workspace dist root so each app is reachable under /<app>/*.\n */\nfunction writeCloudflareRoutingManifest(distDir: string, apps: string[]): void {\n const dispatchFaviconAsset = apps.includes(\"dispatch\")\n ? dispatchRootFaviconAsset(distDir)\n : null;\n // _routes.json tells Cloudflare which paths are dynamic (Functions) vs\n // static. Mark both /<app> and /<app>/* as include so every app's worker\n // handles its root and subtree.\n const include = apps.flatMap((a) => [`/${a}`, `/${a}/*`]).concat([\"/\"]);\n if (apps.includes(\"dispatch\")) {\n include.push(\"/_agent-native/*\");\n include.push(\"/.well-known/*\");\n include.push(\n ...DISPATCH_WORKSPACE_ROOT_REDIRECTS.map(([from]) => `/${from}`),\n );\n include.push(\"/apps/*\");\n if (dispatchFaviconAsset) include.push(\"/favicon.ico\");\n }\n const routes = {\n version: 1,\n include,\n exclude: [],\n };\n fs.writeFileSync(\n path.join(distDir, \"_routes.json\"),\n JSON.stringify(routes, null, 2) + \"\\n\",\n );\n\n // Dispatcher worker: inspects the path and forwards to the matching\n // per-app worker.\n const imports = apps\n .map((a) => `import ${moduleIdent(a)} from \"./${a}/_worker.js\";`)\n .join(\"\\n\");\n const dispatch = apps\n .map(\n (a) =>\n ` if (pathname === \"/${a}\" || pathname.startsWith(\"/${a}/\")) return ${moduleIdent(a)}.fetch(requestForMountedApp(request, \"/${a}\"), env, ctx);`,\n )\n .join(\"\\n\");\n const dispatchRootFrameworkRoutes = apps.includes(\"dispatch\")\n ? ` if (pathname === \"/_agent-native\" || pathname.startsWith(\"/_agent-native/\") || pathname === \"/.well-known\" || pathname.startsWith(\"/.well-known/\")) return ${moduleIdent(\"dispatch\")}.fetch(request, env, ctx);\n`\n : \"\";\n const dispatchRootFaviconRoute = dispatchFaviconAsset\n ? ` if (pathname === \"/favicon.ico\") return Response.redirect(new URL(\"/dispatch/${dispatchFaviconAsset}\", request.url).toString(), 302);\n`\n : \"\";\n const dispatchRootAliasRoutes = apps.includes(\"dispatch\")\n ? DISPATCH_WORKSPACE_ROOT_REDIRECTS.map(\n ([from, to]) =>\n ` if (pathname === \"/${from}\") return Response.redirect(new URL(\"/dispatch/${to}\" + search, request.url).toString(), 302);`,\n ).join(\"\\n\") + \"\\n\"\n : \"\";\n const dispatchRootDynamicAliasRoutes = apps.includes(\"dispatch\")\n ? ` if (pathname.startsWith(\"/apps/\")) return Response.redirect(new URL(\"/dispatch\" + pathname + search, request.url).toString(), 302);\n`\n : \"\";\n const dispatchMountedRootRedirect = apps.includes(\"dispatch\")\n ? ` if (pathname === \"/dispatch\" || pathname === \"/dispatch/\") return Response.redirect(new URL(\"/dispatch/overview\" + search, request.url).toString(), 302);\n`\n : \"\";\n\n const worker = `${imports}\n\nfunction requestForMountedApp(request, basePath) {\n const url = new URL(request.url);\n if (url.pathname !== basePath && url.pathname !== \\`\\${basePath}/\\`) {\n return request;\n }\n url.pathname = \\`\\${basePath}//\\`;\n return new Request(url, request);\n}\n\nexport default {\n async fetch(request, env, ctx) {\n const { pathname, search } = new URL(request.url);\n${dispatchRootFrameworkRoutes}${dispatchRootFaviconRoute}${dispatchRootAliasRoutes}${dispatchRootDynamicAliasRoutes}${dispatchMountedRootRedirect}${dispatch}\n if (pathname === \"/\") {\n return Response.redirect(new URL(\"${cloudflareRootRedirectPath(apps)}\", request.url).toString(), 302);\n }\n return new Response(\"Not found\", { status: 404 });\n },\n};\n`;\n fs.writeFileSync(path.join(distDir, \"_worker.js\"), worker);\n}\n\nfunction cloudflareRootRedirectPath(apps: string[]): string {\n return apps.includes(\"dispatch\") ? \"/dispatch/overview\" : `/${apps[0]}/`;\n}\n\nfunction writeNetlifyRedirects(distDir: string, apps: string[]): void {\n const lines: string[] = [\n \"# Generated by agent-native deploy --preset netlify\",\n \"# Static app assets are stored under a safe namespace; dynamic app routes are handled by function route config.\",\n ];\n\n if (apps.includes(\"dispatch\")) {\n lines.push(\"/_agent-native/* /.netlify/functions/dispatch-server 200\");\n lines.push(\"/.well-known/* /.netlify/functions/dispatch-server 200\");\n const faviconAsset = dispatchRootFaviconAsset(distDir);\n if (faviconAsset) {\n lines.push(`/favicon.ico /dispatch/${faviconAsset} 302`);\n }\n }\n\n for (const app of apps) {\n lines.push(...netlifyAssetRedirectsFor(app, distDir));\n }\n\n if (apps.includes(\"dispatch\")) {\n lines.push(\"/ /dispatch/overview 302\");\n lines.push(\"/dispatch /dispatch/overview 302\");\n lines.push(\"/dispatch/ /dispatch/overview 302\");\n for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {\n lines.push(`/${from} /dispatch/${to} 302`);\n }\n lines.push(\"/apps/* /dispatch/apps/:splat 302\");\n } else {\n lines.push(`/ /${apps[0]}/ 302`);\n }\n\n fs.writeFileSync(path.join(distDir, \"_redirects\"), lines.join(\"\\n\") + \"\\n\");\n}\n\nfunction writeNetlifyHeaders(distDir: string, apps: string[]): void {\n const blocks = apps.flatMap((app) => {\n const staticDir = path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app);\n return collectImmutableAssetPaths(staticDir).flatMap((assetPath) => [\n netlifyHeaderBlock(`/${app}${assetPath}`),\n netlifyHeaderBlock(`/${NETLIFY_WORKSPACE_STATIC_DIR}/${app}${assetPath}`),\n ]);\n });\n\n if (blocks.length === 0) return;\n fs.writeFileSync(path.join(distDir, \"_headers\"), blocks.join(\"\\n\\n\") + \"\\n\");\n}\n\nfunction netlifyHeaderBlock(pathname: string): string {\n return [\n pathname,\n ...Object.entries(IMMUTABLE_ASSET_CACHE_HEADERS).map(\n ([name, value]) => ` ${name}: ${value}`,\n ),\n ].join(\"\\n\");\n}\n\nfunction writeVercelBuildConfig(outputDir: string, apps: string[]): void {\n const routes: Array<Record<string, any>> = [\n ...vercelImmutableAssetHeaderRoutes(outputDir, apps),\n { handle: \"filesystem\" },\n ];\n\n if (apps.includes(\"dispatch\")) {\n routes.push(\n { src: \"/_agent-native\", dest: \"/dispatch-server\" },\n { src: \"/_agent-native/(.*)\", dest: \"/dispatch-server\" },\n { src: \"/\\\\.well-known\", dest: \"/dispatch-server\" },\n { src: \"/\\\\.well-known/(.*)\", dest: \"/dispatch-server\" },\n );\n\n const faviconAsset = dispatchRootFaviconAsset(\n path.join(outputDir, \"static\"),\n );\n if (faviconAsset) {\n routes.push(vercelRedirect(\"/favicon.ico\", `/dispatch/${faviconAsset}`));\n }\n\n routes.push(\n vercelRedirect(\"/\", \"/dispatch/overview\"),\n vercelRedirect(\"/dispatch\", \"/dispatch/overview\"),\n vercelRedirect(\"/dispatch/\", \"/dispatch/overview\"),\n );\n for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {\n routes.push(vercelRedirect(`/${from}`, `/dispatch/${to}`));\n }\n routes.push(vercelRedirect(\"/apps/(.*)\", \"/dispatch/apps/$1\"));\n } else {\n routes.push(vercelRedirect(\"/\", `/${apps[0]}/`));\n }\n\n for (const app of apps) {\n if (app !== \"dispatch\") {\n routes.push({ src: `/${app}`, dest: `/${app}-server` });\n }\n routes.push({ src: `/${app}/(.*)`, dest: `/${app}-server` });\n }\n\n const config = {\n version: 3,\n routes,\n };\n fs.writeFileSync(\n path.join(outputDir, \"config.json\"),\n JSON.stringify(config, null, 2) + \"\\n\",\n );\n}\n\nfunction vercelImmutableAssetHeaderRoutes(\n outputDir: string,\n apps: string[],\n): Array<Record<string, any>> {\n return apps.flatMap((app) => {\n const staticDir = path.join(outputDir, \"static\", app);\n return collectImmutableAssetPaths(staticDir).map((assetPath) => ({\n src: vercelRouteSrc(`/${app}${assetPath}`),\n headers: IMMUTABLE_ASSET_CACHE_HEADERS,\n continue: true,\n }));\n });\n}\n\nfunction vercelRouteSrc(pathname: string): string {\n return pathname.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction vercelRedirect(src: string, location: string): Record<string, any> {\n return {\n src,\n status: 302,\n headers: { Location: location },\n };\n}\n\nfunction netlifyAssetRedirectsFor(app: string, distDir: string): string[] {\n const from = `/${app}`;\n const to = `/${NETLIFY_WORKSPACE_STATIC_DIR}/${app}`;\n return [\n `${from}/assets/* ${to}/assets/:splat 200`,\n ...netlifyPublicRootAssetPaths(\n app,\n path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app),\n ).map((assetPath) => {\n const assetName = assetPath.slice(from.length + 1);\n return `${assetPath} ${to}/${assetName} 200`;\n }),\n ];\n}\n\nfunction dispatchRootFaviconAsset(distDir: string): string | null {\n for (const asset of [\"favicon.ico\", \"favicon.svg\", \"favicon.png\"]) {\n if (workspaceAppAssetExists(distDir, \"dispatch\", asset)) return asset;\n }\n return null;\n}\n\nfunction workspaceAppAssetExists(\n distDir: string,\n app: string,\n asset: string,\n): boolean {\n return [\n path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app, asset),\n path.join(distDir, app, app, asset),\n path.join(distDir, app, asset),\n ].some((candidate) => fs.existsSync(candidate));\n}\n\nconst RESERVED_WORKSPACE_APP_IDS = new Set([\n \"_agent-native\",\n \"_workspace_static\",\n \"netlify\",\n ...DISPATCH_WORKSPACE_ROOT_REDIRECTS.map(([from]) => from),\n]);\n\nfunction assertNoReservedWorkspaceAppIds(apps: string[]): void {\n const conflicts = apps.filter(\n (app) => app !== \"dispatch\" && RESERVED_WORKSPACE_APP_IDS.has(app),\n );\n if (conflicts.length === 0) return;\n throw new Error(\n `Workspace app id ${conflicts.map((id) => `\"${id}\"`).join(\", \")} conflicts with reserved workspace routes. Choose a different app id.`,\n );\n}\n\nfunction copyNetlifyFunctionIntoWorkspace(\n workspaceRoot: string,\n app: string,\n workspaceApps: WorkspaceAppManifestEntry[],\n staticDir: string,\n): void {\n const appDir = path.join(workspaceRoot, \"apps\", app);\n const src = path.join(appDir, \".netlify\", \"functions-internal\", \"server\");\n if (!fs.existsSync(src)) {\n throw new Error(\n `Expected Netlify function at ${src} after building ${app}. Check the app's build script and NITRO_PRESET.`,\n );\n }\n\n const dest = path.join(netlifyFunctionsDir(workspaceRoot), `${app}-server`);\n fs.rmSync(dest, { recursive: true, force: true });\n copyDir(src, dest);\n patchNetlifyFunctionEntry(dest, app, workspaceApps, staticDir);\n\n // Durable background agent runs (default-ON; opt out with a falsy\n // AGENT_CHAT_DURABLE_BACKGROUND). Additive ONLY: when explicitly opted out\n // this emits nothing and the single-function deploy is unchanged.\n if (isDurableBackgroundDeployEnabled()) {\n emitNetlifyBackgroundFunction(workspaceRoot, app, src, workspaceApps);\n }\n}\n\n/**\n * Deploy-time gate for emitting the second `-background` Netlify function. Reads\n * the same env flag the runtime gate uses (`AGENT_CHAT_DURABLE_BACKGROUND`).\n *\n * DEFAULT-ON, matching the runtime gate (`isFlagEnabled` in\n * durable-background.ts) and the single-template gate\n * (`isDurableBackgroundDeployEnabled` in deploy/build.ts): unset/empty/unknown\n * means enabled; an app opts OUT only with an explicit falsy value\n * (`false`/`0`/`no`/`off`). This emits the per-app 15-min `-background` function\n * so the chat `_process-run` dispatch lands on it with the real long budget.\n */\nfunction isDurableBackgroundDeployEnabled(): boolean {\n const raw = process.env.AGENT_CHAT_DURABLE_BACKGROUND;\n if (raw == null) return true;\n const v = raw.trim().toLowerCase();\n return !(v === \"0\" || v === \"false\" || v === \"no\" || v === \"off\");\n}\n\n/**\n * Emit a SECOND Netlify function for `app` whose name ends in `-background`,\n * re-exporting the SAME `main.mjs` handler bundle. Netlify invokes any function\n * with `config.background: true` asynchronously (202 immediately, up to 15-min\n * budget), which is exactly what the durable-background chat dispatch\n * (`fireInternalDispatch` → the function's default url) needs.\n *\n * DOC-CORRECT DEFAULT-URL APPROACH (mirrors the single-template emit in\n * deploy/build.ts): the function declares NO custom `config.path`, so it keeps\n * its DEFAULT url `/.netlify/functions/<app>-agent-background`. The `<app>-server`\n * function's catch-all already excludes `/.netlify/*`, so that default-url\n * namespace is NEVER shadowed by the synchronous function — no overlapping\n * `config.path` and no catch-all patch are needed. The foreground dispatches to\n * that default url (`resolveAgentChatProcessRunDispatchPath` resolves the per-app\n * name from `AGENT_NATIVE_WORKSPACE_APP_ID`); `fireInternalDispatch` strips the\n * app base path for `/.netlify/*` targets so the request reaches the host-root\n * function url. The entry then REWRITES the incoming pathname to the\n * base-path-prefixed `_process-run` route before delegating to the Nitro router.\n *\n * It shares the same bundle (`includedFiles: [\"**\"]`) so `A2A_SECRET`, the DB\n * URL, and the rest of the env/bundle are present. A prior attempt gave the\n * function a custom `config.path` (the framework route) that overlapped the\n * synchronous `<app>-server` catch-all; that path was not honored as a route in\n * prod (probe → 404). The default url is the doc-correct fix.\n *\n * Safety net: if the dispatch fast-fails the foreground degrades to an inline\n * 40s synchronous run (see production-agent.ts).\n */\nfunction emitNetlifyBackgroundFunction(\n workspaceRoot: string,\n app: string,\n srcServerDir: string,\n workspaceApps: WorkspaceAppManifestEntry[],\n): void {\n // Name MUST end in `-background` (Netlify async convention + the runtime guard\n // reads the -background Lambda-name suffix as a fallback). It is reached at its\n // DEFAULT url /.netlify/functions/<app>-agent-background.\n const backgroundName = `${app}-agent-background`;\n const dest = path.join(netlifyFunctionsDir(workspaceRoot), backgroundName);\n fs.rmSync(dest, { recursive: true, force: true });\n copyDir(srcServerDir, dest);\n\n const basePath = `/${app}`;\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\n workspaceApps,\n app,\n );\n // The Nitro router for this app expects the base-path-prefixed framework route.\n // The function is reached at its default url, so the entry rewrites the\n // incoming pathname to `/<app>/_agent-native/agent-chat/_process-run`.\n const processRunPath = `${basePath}${AGENT_CHAT_PROCESS_RUN_PATH}`;\n const server = `// Mark this isolate as the durable background runtime BEFORE the handler bundle\n// is imported, so isInBackgroundFunctionRuntime() reliably returns true in this\n// function (the deployed Lambda name is not guaranteed to end in -background). A\n// globalThis flag (NOT process.env) avoids the no-env-mutation guard and carries\n// no cross-request state.\nglobalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;\n\nconst basePath = ${JSON.stringify(basePath)};\n// The base-path-prefixed framework route the Nitro router dispatches to.\nconst PROCESS_RUN_PATH = ${JSON.stringify(processRunPath)};\n\nfunction setBasePathEnv() {\n const processRef = globalThis.process ??= { env: {} };\n processRef.env ??= {};\n Object.assign(processRef.env, {\n AGENT_NATIVE_WORKSPACE: \"1\",\n AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\n APP_BASE_PATH: basePath,\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\n VITE_APP_BASE_PATH: basePath,\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},\n ${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},\n });\n}\n\nsetBasePathEnv();\n\nlet cachedHandler;\n\n// Reached at the DEFAULT url /.netlify/functions/${backgroundName}; REWRITE the\n// incoming pathname to the base-path-prefixed _process-run route so the Nitro\n// router runs the plugin. Method, ALL headers (the HMAC Authorization: Bearer\n// MUST survive) and the body are preserved.\nexport default async function handler(request) {\n setBasePathEnv();\n cachedHandler ??= (await import(\"./main.mjs\")).default;\n const url = new URL(request.url);\n url.pathname = PROCESS_RUN_PATH;\n const method = request.method || \"POST\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const body = hasBody ? await request.text() : undefined;\n const rewritten = new Request(url.toString(), {\n method,\n headers: request.headers,\n body,\n });\n return cachedHandler(rewritten);\n}\n\nexport const config = {\n name: ${JSON.stringify(`${app} agent background handler`)},\n generator: \"agent-native workspace deploy\",\n // background: true → async invoke (202, 15-min budget). NO custom path: the\n // function keeps its default url /.netlify/functions/${backgroundName}, which\n // the <app>-server catch-all never shadows (it excludes /.netlify/*).\n background: true,\n nodeBundler: \"none\",\n includedFiles: [\"**\"],\n preferStatic: false,\n};\n`;\n // Remove the original Nitro entry (server.mjs) so only our background entry\n // is the function entrypoint, mirroring patchNetlifyFunctionEntry.\n fs.rmSync(path.join(dest, \"server.mjs\"), { force: true });\n fs.writeFileSync(path.join(dest, `${backgroundName}.mjs`), server);\n console.log(\n `[workspace-deploy] Emitted durable-background function \"${backgroundName}\" ` +\n `for app \"${app}\" with config { background:true } and NO custom path — ` +\n `reachable at its default url /.netlify/functions/${backgroundName} ` +\n `(rewrites to ${processRunPath}). REQUIRES real-deploy verification of ` +\n `Netlify async (202) invocation — see docs/design/durable-agent-runs.md.`,\n );\n}\n\nfunction patchNetlifyFunctionEntry(\n functionDir: string,\n app: string,\n workspaceApps: WorkspaceAppManifestEntry[],\n staticDir: string,\n): void {\n const serverPath = path.join(functionDir, \"server.mjs\");\n if (!fs.existsSync(serverPath)) return;\n\n const basePath = `/${app}`;\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\n workspaceApps,\n app,\n );\n const pathConfig =\n app === \"dispatch\"\n ? [\"/_agent-native/*\", \"/.well-known/*\", `${basePath}/*`]\n : [basePath, `${basePath}/*`];\n const normalizeBasePathHelper =\n app === \"dispatch\"\n ? \"\"\n : `\nfunction normalizeBasePathArgs(args) {\n const request = args[0];\n if (!request || typeof request.url !== \"string\" || typeof Request !== \"function\") {\n return args;\n }\n const url = new URL(request.url);\n if (url.pathname === basePath || url.pathname === \\`\\${basePath}/\\`) {\n url.pathname = \\`\\${basePath}//\\`;\n return [new Request(url, request), ...args.slice(1)];\n }\n return args;\n}\n`;\n const handlerArgs =\n app === \"dispatch\" ? \"...args\" : \"...normalizeBasePathArgs(args)\";\n const server = `const basePath = ${JSON.stringify(basePath)};\n\nfunction setBasePathEnv() {\n const processRef = globalThis.process ??= { env: {} };\n processRef.env ??= {};\n Object.assign(processRef.env, {\n AGENT_NATIVE_WORKSPACE: \"1\",\n AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\n APP_BASE_PATH: basePath,\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\n VITE_APP_BASE_PATH: basePath,\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},\n ${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},\n });\n}\n\nsetBasePathEnv();\n${normalizeBasePathHelper}\n\nlet cachedHandler;\n\nexport default async function handler(...args) {\n setBasePathEnv();\n cachedHandler ??= (await import(\"./main.mjs\")).default;\n return cachedHandler(${handlerArgs});\n}\n\nexport const config = {\n name: ${JSON.stringify(`${app} server handler`)},\n generator: \"agent-native workspace deploy\",\n path: ${JSON.stringify(pathConfig)},\n nodeBundler: \"none\",\n includedFiles: [\"**\"],\n excludedPath: ${JSON.stringify(\n netlifyFunctionExcludedPaths(app, staticDir),\n null,\n 2,\n )\n .split(\"\\n\")\n .join(\"\\n \")},\n preferStatic: false,\n};\n`;\n fs.rmSync(serverPath, { force: true });\n fs.writeFileSync(path.join(functionDir, `${app}-server.mjs`), server);\n}\n\nfunction patchVercelFunctionEntry(\n functionDir: string,\n app: string,\n workspaceApps: WorkspaceAppManifestEntry[],\n): void {\n const entryPath = path.join(functionDir, \"index.mjs\");\n if (!fs.existsSync(entryPath)) return;\n\n const mainPath = path.join(functionDir, \"main.mjs\");\n fs.rmSync(mainPath, { force: true });\n fs.renameSync(entryPath, mainPath);\n\n const basePath = `/${app}`;\n const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);\n const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(\n workspaceApps,\n app,\n );\n const entry = `const basePath = ${JSON.stringify(basePath)};\n\nfunction setBasePathEnv() {\n const processRef = globalThis.process ??= { env: {} };\n processRef.env ??= {};\n Object.assign(processRef.env, {\n AGENT_NATIVE_WORKSPACE: \"1\",\n AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\n APP_BASE_PATH: basePath,\n AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\n AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\n AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\n VITE_AGENT_NATIVE_WORKSPACE: \"1\",\n VITE_AGENT_NATIVE_WORKSPACE_APP_ID: ${JSON.stringify(app)},\n VITE_APP_BASE_PATH: basePath,\n VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},\n VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},\n VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},\n VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},\n ${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},\n });\n}\n\nfunction normalizeBasePathArgs(args) {\n const request = args[0];\n if (!request) return args;\n\n if (typeof Request === \"function\" && request instanceof Request) {\n const url = new URL(request.url);\n if (url.pathname === basePath || url.pathname === \\`\\${basePath}/\\`) {\n url.pathname = \\`\\${basePath}//\\`;\n return [new Request(url, request), ...args.slice(1)];\n }\n return args;\n }\n\n if (typeof request.url !== \"string\") return args;\n const url = new URL(request.url, \"http://agent-native.local\");\n if (url.pathname === basePath || url.pathname === \\`\\${basePath}/\\`) {\n request.url = \\`\\${basePath}//\\${url.search}\\`;\n }\n return args;\n}\n\nsetBasePathEnv();\n\nlet cachedHandler;\n\nexport default async function handler(...args) {\n setBasePathEnv();\n cachedHandler ??= (await import(\"./main.mjs\")).default;\n return cachedHandler(...normalizeBasePathArgs(args));\n}\n`;\n fs.writeFileSync(entryPath, entry);\n}\n\nfunction netlifyFunctionExcludedPaths(\n app: string,\n staticDir: string,\n): string[] {\n return [\n \"/.netlify/*\",\n `/${app}/assets/*`,\n ...netlifyPublicRootAssetPaths(app, staticDir),\n ];\n}\n\nfunction netlifyPublicRootAssetPaths(app: string, staticDir: string): string[] {\n if (!fs.existsSync(staticDir)) return [];\n return fs\n .readdirSync(staticDir, { withFileTypes: true })\n .filter((entry) => entry.isFile())\n .map((entry) => entry.name)\n .filter((name) => {\n const ext = path.extname(name).slice(1).toLowerCase();\n return NETLIFY_PUBLIC_ASSET_EXTENSIONS.has(ext);\n })\n .sort()\n .map((name) => `/${app}/${encodeURI(name)}`);\n}\n\nfunction netlifyFunctionsDir(workspaceRoot: string): string {\n return path.join(workspaceRoot, \".netlify\", \"functions-internal\");\n}\n\nfunction cleanAppBuildOutputs(appDir: string): void {\n // .deploy-tmp: a crashed prior per-app build leaves partial artifacts that\n // silently poison the next build for that app (observed on Windows: stale\n // state made a cloudflare_pages build die after the vite phases with no\n // error output). The deploy post-build also sweeps it, but clean here too\n // so the unified build never depends on the child's hygiene.\n for (const name of [\"dist\", \".output\", \"build\", \".deploy-tmp\"]) {\n fs.rmSync(path.join(appDir, name), { recursive: true, force: true });\n }\n fs.rmSync(path.join(appDir, \".netlify\", \"functions-internal\"), {\n recursive: true,\n force: true,\n });\n fs.rmSync(path.join(appDir, \".vercel\", \"output\"), {\n recursive: true,\n force: true,\n });\n}\n\nfunction appUsesNetlifyUnpooledDatabaseUrl(appDir: string): boolean {\n const netlifyPath = path.join(appDir, \"netlify.toml\");\n if (!fs.existsSync(netlifyPath)) return false;\n try {\n return fs\n .readFileSync(netlifyPath, \"utf-8\")\n .includes(\"NETLIFY_DATABASE_URL_UNPOOLED\");\n } catch {\n return false;\n }\n}\n\nfunction writeWorkspaceAppManifests(\n workspaceRoot: string,\n distDir: string,\n apps: string[],\n workspaceApps: WorkspaceAppManifestEntry[],\n preset: WorkspaceDeployPreset,\n): void {\n const manifest = JSON.stringify(\n {\n version: 1,\n apps: workspaceApps,\n },\n null,\n 2,\n );\n\n const targets =\n preset === \"netlify\"\n ? apps.map((app) =>\n path.join(\n netlifyFunctionsDir(workspaceRoot),\n `${app}-server`,\n WORKSPACE_APPS_MANIFEST_DIR,\n WORKSPACE_APPS_MANIFEST_FILE,\n ),\n )\n : preset === \"vercel\"\n ? apps.map((app) =>\n path.join(\n workspaceRoot,\n VERCEL_OUTPUT_DIR,\n \"functions\",\n `${app}-server.func`,\n WORKSPACE_APPS_MANIFEST_DIR,\n WORKSPACE_APPS_MANIFEST_FILE,\n ),\n )\n : apps.map((app) =>\n path.join(\n distDir,\n app,\n WORKSPACE_APPS_MANIFEST_DIR,\n WORKSPACE_APPS_MANIFEST_FILE,\n ),\n );\n\n for (const target of targets) {\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, `${manifest}\\n`);\n }\n}\n\nfunction readWorkspaceAppManifest(\n workspaceRoot: string,\n apps: string[],\n): WorkspaceAppManifestEntry[] {\n const explicitApps = readExistingWorkspaceAppManifest(workspaceRoot);\n\n return apps\n .map((app) => {\n const appDir = path.join(workspaceRoot, \"apps\", app);\n const pkg = readPackageJson(path.join(appDir, \"package.json\"));\n const appPath = `/${app}`;\n const explicit = explicitApps.get(app);\n const url =\n normalizeWorkspaceAppUrl(explicit?.url) ?? workspaceAppUrl(appPath);\n const audience =\n workspaceAppAudienceFromPackageJson(pkg) ??\n explicit?.audience ??\n DEFAULT_WORKSPACE_APP_AUDIENCE;\n const packageRouteAccess = workspaceAppRouteAccessFromPackageJson(pkg);\n // Prefer the package.json value whenever the field was set — including\n // an explicit empty array, which is how a per-app package.json signals\n // \"clear any previously-published manifest override.\" Falling back on\n // length > 0 would silently keep the explicit override even after the\n // app owner blanked their list.\n const publicPaths =\n packageRouteAccess.publicPaths ?? explicit?.publicPaths ?? [];\n const protectedPaths =\n packageRouteAccess.protectedPaths ?? explicit?.protectedPaths ?? [];\n return {\n id: app,\n name: pkg?.displayName || titleCase(app),\n description: pkg?.description || \"\",\n path: appPath,\n ...(url ? { url } : {}),\n isDispatch: app === \"dispatch\",\n audience,\n publicPaths,\n protectedPaths,\n };\n })\n .sort((a, b) => {\n if (a.id === \"dispatch\") return -1;\n if (b.id === \"dispatch\") return 1;\n return a.name.localeCompare(b.name);\n });\n}\n\nfunction readExistingWorkspaceAppManifest(\n workspaceRoot: string,\n): Map<string, WorkspaceAppManifestOverride> {\n const fromEnv = parseWorkspaceAppsJson(process.env[WORKSPACE_APPS_ENV_KEY]);\n const fromFile =\n readWorkspaceAppsFromFile(\n path.join(\n workspaceRoot,\n WORKSPACE_APPS_MANIFEST_DIR,\n WORKSPACE_APPS_MANIFEST_FILE,\n ),\n ) ??\n readWorkspaceAppsFromFile(\n path.join(workspaceRoot, WORKSPACE_APPS_MANIFEST_FILE),\n );\n const apps = fromEnv ?? fromFile ?? [];\n return new Map(apps.map((app) => [app.id, app]));\n}\n\nfunction parseWorkspaceAppsJson(\n raw: string | undefined,\n): WorkspaceAppManifestOverride[] | null {\n if (!raw) return null;\n try {\n return parseWorkspaceAppsManifest(JSON.parse(raw));\n } catch {\n return null;\n }\n}\n\nfunction readWorkspaceAppsFromFile(\n file: string,\n): WorkspaceAppManifestOverride[] | null {\n if (!fs.existsSync(file)) return null;\n return parseWorkspaceAppsManifest(readPackageJson(file));\n}\n\nfunction parseWorkspaceAppsManifest(\n parsed: any,\n): WorkspaceAppManifestOverride[] | null {\n const rawApps = Array.isArray(parsed?.apps)\n ? parsed.apps\n : Array.isArray(parsed)\n ? parsed\n : null;\n if (!rawApps) return null;\n\n const apps = (rawApps as unknown[])\n .map((entry) => {\n if (!entry || typeof entry !== \"object\") return null;\n const e = entry as Record<string, unknown>;\n const id = typeof e.id === \"string\" ? e.id.trim() : \"\";\n if (!id) return null;\n const url = normalizeWorkspaceAppUrl(e.url);\n const audience =\n e.audience === undefined\n ? undefined\n : normalizeWorkspaceAppAudience(e.audience);\n const publicPaths = normalizeWorkspaceAppPathList(e.publicPaths);\n const protectedPaths = normalizeWorkspaceAppPathList(e.protectedPaths);\n return {\n id,\n ...(url ? { url } : {}),\n ...(audience ? { audience } : {}),\n ...(publicPaths.length > 0 ? { publicPaths } : {}),\n ...(protectedPaths.length > 0 ? { protectedPaths } : {}),\n };\n })\n .filter((app): app is NonNullable<typeof app> => !!app);\n\n return apps.length ? apps : null;\n}\n\nfunction workspaceBaseUrl(): string | null {\n const gatewayOrigin =\n process.env.WORKSPACE_GATEWAY_URL || process.env.VITE_WORKSPACE_GATEWAY_URL;\n const publicGatewayOrigin = normalizeOrigin(gatewayOrigin);\n const gatewayFallback =\n publicGatewayOrigin && !isLoopbackOrigin(publicGatewayOrigin)\n ? gatewayOrigin\n : null;\n return (\n process.env.APP_URL ||\n process.env.WORKSPACE_OAUTH_ORIGIN ||\n process.env.VITE_WORKSPACE_OAUTH_ORIGIN ||\n process.env.URL ||\n process.env.DEPLOY_URL ||\n process.env.BETTER_AUTH_URL ||\n gatewayFallback ||\n gatewayOrigin ||\n null\n );\n}\n\nfunction normalizeOrigin(value: string | null | 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 isLoopbackOrigin(origin: string | undefined): boolean {\n if (!origin) return false;\n try {\n const host = new URL(origin).hostname.toLowerCase();\n return (\n host === \"localhost\" ||\n host === \"127.0.0.1\" ||\n host === \"[::1]\" ||\n host === \"::1\"\n );\n } catch {\n return false;\n }\n}\n\nfunction workspaceOAuthOrigin(\n workspaceGatewayUrl: string | null,\n): string | undefined {\n // Explicit overrides (env vars set by the operator) win even if they happen\n // to be loopback — that's a deliberate dev-against-prod choice.\n // The gateway-URL fallback, however, is auto-resolved and would silently\n // send users to localhost if the configured gateway is loopback in a\n // production deploy. Strip loopback there so OAuth fails loudly instead.\n const gatewayFallback = normalizeOrigin(workspaceGatewayUrl);\n return (\n normalizeOrigin(process.env.VITE_WORKSPACE_OAUTH_ORIGIN) ||\n normalizeOrigin(process.env.WORKSPACE_OAUTH_ORIGIN) ||\n normalizeOrigin(process.env.APP_URL) ||\n normalizeOrigin(process.env.BETTER_AUTH_URL) ||\n normalizeOrigin(process.env.URL) ||\n normalizeOrigin(process.env.DEPLOY_URL) ||\n (isLoopbackOrigin(gatewayFallback) ? undefined : gatewayFallback)\n );\n}\n\nfunction workspaceAppUrl(appPath: string): string | undefined {\n const base = workspaceBaseUrl();\n if (!base) return undefined;\n try {\n return new URL(appPath, `${base.replace(/\\/$/, \"\")}/`).toString();\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeWorkspaceAppUrl(value: unknown): string | undefined {\n if (typeof value !== \"string\" || !value.trim()) return undefined;\n try {\n return new URL(value.trim()).toString().replace(/\\/$/, \"\");\n } catch {\n return undefined;\n }\n}\n\nfunction readPackageJson(file: string): Record<string, any> | null {\n try {\n return JSON.parse(fs.readFileSync(file, \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction parsePresetArg(args: string[]): WorkspaceDeployPreset | null {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--preset\" && args[i + 1]) {\n return normalizePreset(args[i + 1]);\n }\n if (arg.startsWith(\"--preset=\")) {\n return normalizePreset(arg.slice(\"--preset=\".length));\n }\n }\n return null;\n}\n\nfunction resolvePreset(\n optionPreset: WorkspaceDeployPreset | undefined,\n args: string[],\n): WorkspaceDeployPreset {\n return (\n optionPreset ??\n parsePresetArg(args) ??\n normalizePreset(process.env.NITRO_PRESET) ??\n \"cloudflare_pages\"\n );\n}\n\nfunction assertWorkspaceDeployProductionEnv(opts: {\n buildOnly: boolean;\n preset: WorkspaceDeployPreset;\n}): void {\n if (!isProductionWorkspaceDeploy(opts)) return;\n if (process.env.A2A_SECRET?.trim()) return;\n const providerHint =\n opts.preset === \"netlify\"\n ? ' For Netlify, one option is: netlify env:set A2A_SECRET \"$(openssl rand -hex 32)\".'\n : \"\";\n throw new Error(\n [\n \"A2A_SECRET is required for production workspace deploys.\",\n \"Workspace Slack, webhook, and cross-app A2A work resumes through signed background processors; without A2A_SECRET those production routes return 503.\",\n `Set A2A_SECRET in your deploy provider and redeploy.${providerHint}`,\n \"For local artifact checks, run agent-native deploy --build-only outside the deploy provider environment.\",\n ].join(\" \"),\n );\n}\n\nfunction isProductionWorkspaceDeploy(opts: {\n buildOnly: boolean;\n preset: WorkspaceDeployPreset;\n}): boolean {\n if (!opts.buildOnly) return true;\n if (\n opts.preset === \"netlify\" &&\n process.env.NETLIFY === \"true\" &&\n process.env.NETLIFY_LOCAL !== \"true\"\n ) {\n return true;\n }\n if (opts.preset === \"cloudflare_pages\" && process.env.CF_PAGES === \"1\") {\n return true;\n }\n if (opts.preset === \"vercel\" && process.env.VERCEL === \"1\") {\n return true;\n }\n return false;\n}\n\nfunction normalizePreset(\n value: string | undefined,\n): WorkspaceDeployPreset | null {\n if (!value) return null;\n if (value === \"cloudflare_pages\" || value === \"cloudflare-pages\") {\n return \"cloudflare_pages\";\n }\n if (value === \"netlify\") return \"netlify\";\n if (value === \"vercel\") return \"vercel\";\n throw new Error(\n `Unsupported workspace deploy preset \"${value}\". Supported presets: cloudflare_pages, netlify, vercel.`,\n );\n}\n\nfunction moduleIdent(app: string): string {\n return \"app_\" + app.replace(/[^a-zA-Z0-9_]/g, \"_\");\n}\n\nfunction workspaceAppAudienceForApp(\n workspaceApps: WorkspaceAppManifestEntry[],\n app: string,\n): WorkspaceAppAudience {\n return (\n workspaceApps.find((entry) => entry.id === app)?.audience ??\n DEFAULT_WORKSPACE_APP_AUDIENCE\n );\n}\n\nfunction workspaceAppRouteAccessForApp(\n workspaceApps: WorkspaceAppManifestEntry[],\n app: string,\n): WorkspaceAppRouteAccess {\n const entry = workspaceApps.find((candidate) => candidate.id === app);\n return {\n publicPaths: entry?.publicPaths ?? [],\n protectedPaths: entry?.protectedPaths ?? [],\n };\n}\n\nfunction compareWorkspaceAppIds(a: string, b: string): number {\n if (a === \"dispatch\") return -1;\n if (b === \"dispatch\") return 1;\n return a.localeCompare(b);\n}\n\nfunction copyDir(src: string, dest: string): void {\n fs.mkdirSync(dest, { recursive: true });\n for (const entry of fs.readdirSync(src, { withFileTypes: true })) {\n const s = path.join(src, entry.name);\n const d = path.join(dest, entry.name);\n if (entry.isSymbolicLink()) {\n try {\n const target = fs.readlinkSync(s);\n fs.symlinkSync(target, d);\n } catch {\n fs.copyFileSync(s, d);\n }\n } else if (entry.isDirectory()) {\n copyDir(s, d);\n } else {\n fs.copyFileSync(s, d);\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jami-studio/core",
3
- "version": "0.92.13",
3
+ "version": "0.92.14",
4
4
  "description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
5
5
  "homepage": "https://github.com/studio-jami/jami-studio#readme",
6
6
  "bugs": {