@agent-native/core 0.26.2 → 0.26.3
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.
- package/dist/deploy/build.d.ts +6 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +48 -3
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/immutable-assets.d.ts +11 -0
- package/dist/deploy/immutable-assets.d.ts.map +1 -0
- package/dist/deploy/immutable-assets.js +49 -0
- package/dist/deploy/immutable-assets.js.map +1 -0
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +37 -1
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/package.json +1 -1
package/dist/deploy/build.d.ts
CHANGED
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { type DiscoveredRoute, type DiscoveredAction } from "./route-discovery.js";
|
|
16
16
|
import { type WorkspaceCoreExports } from "./workspace-core.js";
|
|
17
|
+
type RouteRules = Record<string, {
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function addImmutableAssetRouteRulesForClientBuild(routeRules: RouteRules, clientDir: string, appBasePath?: string): void;
|
|
17
21
|
/**
|
|
18
22
|
* Generate the worker entry source code that wires up H3 + React Router SSR.
|
|
19
23
|
*
|
|
@@ -23,7 +27,7 @@ import { type WorkspaceCoreExports } from "./workspace-core.js";
|
|
|
23
27
|
* `@agent-native/core/server`. This is the middle layer of the three-layer
|
|
24
28
|
* inheritance model: app local > workspace core > framework default.
|
|
25
29
|
*/
|
|
26
|
-
export declare function generateWorkerEntry(routes: DiscoveredRoute[], pluginPaths: string[], defaultPluginStems?: string[], actions?: DiscoveredAction[], workspaceCore?: WorkspaceCoreExports | null): string;
|
|
30
|
+
export declare function generateWorkerEntry(routes: DiscoveredRoute[], pluginPaths: string[], defaultPluginStems?: string[], actions?: DiscoveredAction[], workspaceCore?: WorkspaceCoreExports | null, immutableAssetPaths?: string[]): string;
|
|
27
31
|
export declare function getNodeBuiltinNames(): string[];
|
|
28
32
|
/**
|
|
29
33
|
* Build for any non-Cloudflare preset using Nitro's programmatic build API.
|
|
@@ -55,4 +59,5 @@ export interface NitroBuildPipelineOptions {
|
|
|
55
59
|
* anything with a file extension.
|
|
56
60
|
*/
|
|
57
61
|
export declare function runNitroBuildPipeline(opts: NitroBuildPipelineOptions): Promise<void>;
|
|
62
|
+
export {};
|
|
58
63
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAwC7B,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAgBvE,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,SAAK,GACf,IAAI,CAQN;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EAAE,EACzB,WAAW,EAAE,MAAM,EAAE,EACrB,kBAAkB,GAAE,MAAM,EAAO,EACjC,OAAO,GAAE,gBAAgB,EAAO,EAChC,aAAa,GAAE,oBAAoB,GAAG,IAAW,EACjD,mBAAmB,GAAE,MAAM,EAAO,GACjC,MAAM,CA4cR;AA4VD,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAmVD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
package/dist/deploy/build.js
CHANGED
|
@@ -22,6 +22,7 @@ import { getWorkspaceCoreExports, } from "./workspace-core.js";
|
|
|
22
22
|
import { generateActionRegistryForProject } from "../vite/action-types-plugin.js";
|
|
23
23
|
import { mcpEmbedStaticAssetRouteRules } from "../shared/mcp-embed-headers.js";
|
|
24
24
|
import { AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE } from "../shared/social-meta.js";
|
|
25
|
+
import { collectImmutableAssetPaths, IMMUTABLE_ASSET_CACHE_CONTROL, IMMUTABLE_ASSET_CACHE_HEADERS, prefixAssetPath, } from "./immutable-assets.js";
|
|
25
26
|
const cwd = process.cwd();
|
|
26
27
|
const preset = process.env.NITRO_PRESET || "node";
|
|
27
28
|
const DEFAULT_SSR_CACHE_CONTROL = "public, max-age=5, stale-while-revalidate=604800, stale-if-error=3600";
|
|
@@ -48,6 +49,25 @@ function isNodeOnlyPlugin(filePath) {
|
|
|
48
49
|
const basename = path.basename(filePath, path.extname(filePath));
|
|
49
50
|
return NODE_ONLY_PLUGINS.has(basename);
|
|
50
51
|
}
|
|
52
|
+
function addImmutableAssetRouteRule(routeRules, pathname) {
|
|
53
|
+
const existing = routeRules[pathname] ?? {};
|
|
54
|
+
routeRules[pathname] = {
|
|
55
|
+
...existing,
|
|
56
|
+
headers: {
|
|
57
|
+
...(existing.headers ?? {}),
|
|
58
|
+
...IMMUTABLE_ASSET_CACHE_HEADERS,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function addImmutableAssetRouteRulesForClientBuild(routeRules, clientDir, appBasePath = "") {
|
|
63
|
+
for (const assetPath of collectImmutableAssetPaths(clientDir)) {
|
|
64
|
+
addImmutableAssetRouteRule(routeRules, assetPath);
|
|
65
|
+
const mountedPath = prefixAssetPath(assetPath, appBasePath);
|
|
66
|
+
if (mountedPath !== assetPath) {
|
|
67
|
+
addImmutableAssetRouteRule(routeRules, mountedPath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
51
71
|
/**
|
|
52
72
|
* Generate the worker entry source code that wires up H3 + React Router SSR.
|
|
53
73
|
*
|
|
@@ -57,7 +77,7 @@ function isNodeOnlyPlugin(filePath) {
|
|
|
57
77
|
* `@agent-native/core/server`. This is the middle layer of the three-layer
|
|
58
78
|
* inheritance model: app local > workspace core > framework default.
|
|
59
79
|
*/
|
|
60
|
-
export function generateWorkerEntry(routes, pluginPaths, defaultPluginStems = [], actions = [], workspaceCore = null) {
|
|
80
|
+
export function generateWorkerEntry(routes, pluginPaths, defaultPluginStems = [], actions = [], workspaceCore = null, immutableAssetPaths = []) {
|
|
61
81
|
const routeImports = [];
|
|
62
82
|
const routeRegistrations = [];
|
|
63
83
|
for (let i = 0; i < routes.length; i++) {
|
|
@@ -263,6 +283,8 @@ function injectHeadScript(html, script) {
|
|
|
263
283
|
}
|
|
264
284
|
|
|
265
285
|
const DEFAULT_SSR_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_CACHE_CONTROL)};
|
|
286
|
+
const IMMUTABLE_ASSET_CACHE_CONTROL = ${JSON.stringify(IMMUTABLE_ASSET_CACHE_CONTROL)};
|
|
287
|
+
const IMMUTABLE_ASSET_PATHS = new Set(${JSON.stringify([...new Set(immutableAssetPaths)].sort())});
|
|
266
288
|
const AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE = ${JSON.stringify(AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE)};
|
|
267
289
|
const OG_IMAGE_META_RE = /<meta\\b(?=[^>]*\\bproperty=(["'])og:image\\1)[^>]*>/i;
|
|
268
290
|
const TWITTER_CARD_META_RE = /<meta\\b(?=[^>]*\\bname=(["'])twitter:card\\1)[^>]*>/i;
|
|
@@ -300,6 +322,26 @@ function applyDefaultSsrCacheHeader(headers, status) {
|
|
|
300
322
|
headers.set("cache-control", DEFAULT_SSR_CACHE_CONTROL);
|
|
301
323
|
}
|
|
302
324
|
|
|
325
|
+
function isImmutableAssetRequest(request) {
|
|
326
|
+
const pathname = stripAppBasePath(new URL(request.url).pathname);
|
|
327
|
+
return IMMUTABLE_ASSET_PATHS.has(pathname);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function applyImmutableAssetCacheHeaders(response, request) {
|
|
331
|
+
if (!isImmutableAssetRequest(request)) return response;
|
|
332
|
+
if (!((response.status >= 200 && response.status < 300) || response.status === 304)) {
|
|
333
|
+
return response;
|
|
334
|
+
}
|
|
335
|
+
const headers = new Headers(response.headers);
|
|
336
|
+
headers.set("Cache-Control", IMMUTABLE_ASSET_CACHE_CONTROL);
|
|
337
|
+
headers.set("CDN-Cache-Control", IMMUTABLE_ASSET_CACHE_CONTROL);
|
|
338
|
+
return new Response(response.body, {
|
|
339
|
+
status: response.status,
|
|
340
|
+
statusText: response.statusText,
|
|
341
|
+
headers,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
|
|
303
345
|
async function rewriteMountedResponse(response, basePath) {
|
|
304
346
|
const sentryClientConfigScript = getSentryClientConfigScript();
|
|
305
347
|
const headers = new Headers(response.headers);
|
|
@@ -458,7 +500,7 @@ export default {
|
|
|
458
500
|
try {
|
|
459
501
|
const assetResponse = await env.ASSETS.fetch(request);
|
|
460
502
|
if (assetResponse.status !== 404) {
|
|
461
|
-
return assetResponse;
|
|
503
|
+
return applyImmutableAssetCacheHeaders(assetResponse, request);
|
|
462
504
|
}
|
|
463
505
|
} catch {
|
|
464
506
|
// Asset fetch failed — fall through to SSR
|
|
@@ -517,7 +559,8 @@ async function buildCloudflarePages() {
|
|
|
517
559
|
: 0;
|
|
518
560
|
console.log(`[deploy] ${routes.length} API routes, ${actions.length} actions, ${plugins.length} plugins (${plugins.filter((p) => isNodeOnlyPlugin(p)).length} skipped as Node-only), ${missingDefaults.length} auto-mounted defaults${workspaceCore ? `, workspace-core ${workspaceCore.packageName} (${workspaceSlotCount} plugin slots)` : ""}`);
|
|
519
561
|
// Generate the worker entry
|
|
520
|
-
const
|
|
562
|
+
const immutableAssetPaths = collectImmutableAssetPaths(clientDir);
|
|
563
|
+
const entrySource = generateWorkerEntry(routes, plugins, missingDefaults, actions, workspaceCore, immutableAssetPaths);
|
|
521
564
|
// Create _worker.js output directory
|
|
522
565
|
const workerOutDir = path.join(distDir, "_worker.js");
|
|
523
566
|
fs.mkdirSync(workerOutDir, { recursive: true });
|
|
@@ -1064,6 +1107,8 @@ export async function runNitroBuildPipeline(opts) {
|
|
|
1064
1107
|
if (appBasePath) {
|
|
1065
1108
|
copyDir(clientDir, path.join(publicOutputDir, appBasePath.slice(1)));
|
|
1066
1109
|
}
|
|
1110
|
+
nitro.options.routeRules ??= {};
|
|
1111
|
+
addImmutableAssetRouteRulesForClientBuild(nitro.options.routeRules, clientDir, appBasePath);
|
|
1067
1112
|
console.log(`[deploy] Copied client assets to ${path.relative(cwd, publicOutputDir)}`);
|
|
1068
1113
|
}
|
|
1069
1114
|
await hooks.nitroBuild(nitro);
|
package/dist/deploy/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n/**\n * Post-build step for deploying agent-native apps to edge/serverless targets.\n *\n * When NITRO_PRESET is set, this script:\n * 1. Takes the React Router build output (build/client/ + build/server/)\n * 2. Generates a platform-specific server entry point\n * 3. Bundles everything with esbuild into the target format\n *\n * Supported presets:\n * - cloudflare_pages: Outputs dist/ with _worker.js for Cloudflare Pages\n *\n * Usage: node deploy/build.js (called automatically by `agent-native build`)\n */\n\nimport path from \"path\";\nimport fs from \"fs\";\nimport { execFileSync } from \"child_process\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\nimport {\n discoverApiRoutes,\n discoverPlugins,\n discoverActionFiles,\n getMissingDefaultPlugins,\n DEFAULT_PLUGIN_REGISTRY,\n type DiscoveredRoute,\n type DiscoveredAction,\n} from \"./route-discovery.js\";\nimport {\n getWorkspaceCoreExports,\n type WorkspaceCoreExports,\n} from \"./workspace-core.js\";\nimport { generateActionRegistryForProject } from \"../vite/action-types-plugin.js\";\nimport { mcpEmbedStaticAssetRouteRules } from \"../shared/mcp-embed-headers.js\";\nimport { AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE } from \"../shared/social-meta.js\";\n\nconst cwd = process.cwd();\nconst preset = process.env.NITRO_PRESET || \"node\";\nconst DEFAULT_SSR_CACHE_CONTROL =\n \"public, max-age=5, stale-while-revalidate=604800, stale-if-error=3600\";\n\nfunction normalizeConfiguredAppBasePath(): string {\n const raw = process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH;\n if (!raw || raw === \"/\") return \"\";\n const trimmed = String(raw).trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n const normalized = trimmed.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n return normalized ? `/${normalized}` : \"\";\n}\n\n/** Plugins that require Node.js runtime and cannot run on edge/serverless */\nconst NODE_ONLY_PLUGINS = new Set([\n \"terminal\", // PTY requires child_process\n // @sentry/node ships node:fs / node:async_hooks bindings that don't load\n // on workerd / Cloudflare Workers. Templates running on edge presets can\n // mount their own edge-compatible Sentry wrapper if they want server\n // observability there; the framework default is the Node SDK.\n \"sentry\",\n]);\n\nfunction isNodeOnlyPlugin(filePath: string): boolean {\n const basename = path.basename(filePath, path.extname(filePath));\n return NODE_ONLY_PLUGINS.has(basename);\n}\n\n/**\n * Generate the worker entry source code that wires up H3 + React Router SSR.\n *\n * If a workspace core is present (monorepo with `agent-native.workspaceCore`\n * configured and the named package resolves), any plugin slot that the\n * workspace core exports is imported from there instead of from\n * `@agent-native/core/server`. This is the middle layer of the three-layer\n * inheritance model: app local > workspace core > framework default.\n */\nexport function generateWorkerEntry(\n routes: DiscoveredRoute[],\n pluginPaths: string[],\n defaultPluginStems: string[] = [],\n actions: DiscoveredAction[] = [],\n workspaceCore: WorkspaceCoreExports | null = null,\n): string {\n const routeImports: string[] = [];\n const routeRegistrations: string[] = [];\n\n for (let i = 0; i < routes.length; i++) {\n const r = routes[i];\n const varName = `route_${i}`;\n routeImports.push(`import ${varName} from ${JSON.stringify(r.absPath)};`);\n routeRegistrations.push(\n ` app.on(${JSON.stringify(r.method.toUpperCase())}, ${JSON.stringify(r.route)}, ${varName});`,\n );\n if (r.method.toLowerCase() === \"get\") {\n routeRegistrations.push(\n ` app.on(\"HEAD\", ${JSON.stringify(r.route)}, defineEventHandler(async (event) => {\n const originalReq = event.req;\n event.req = requestWithMethod(event.req, \"GET\");\n try {\n const result = await ${varName}(event);\n const response = result instanceof Response ? result : toResponse(result, event);\n return new Response(null, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } finally {\n event.req = originalReq;\n }\n }));`,\n );\n }\n }\n\n // Action route imports and registrations\n const actionImports: string[] = [];\n const actionRegistrations: string[] = [];\n for (let i = 0; i < actions.length; i++) {\n const a = actions[i];\n const varName = `action_${i}`;\n actionImports.push(`import ${varName} from ${JSON.stringify(a.absPath)};`);\n const routePath = `/_agent-native/actions/${a.name}`;\n actionRegistrations.push(\n ` app.on(${JSON.stringify(a.method.toUpperCase())}, ${JSON.stringify(routePath)}, defineEventHandler(async (event) => {\n const params = ${a.method === \"get\" ? \"Object.fromEntries(event.url.searchParams)\" : \"(await readBody(event)) ?? {}\"};\n try {\n const result = await ${varName}.run(params);\n if (typeof result === \"string\") { try { return JSON.parse(result); } catch { return result; } }\n return result;\n } catch (err) {\n return new Response(JSON.stringify({ error: err?.message || \"Action failed\" }), { status: err?.message?.startsWith(\"Invalid action parameters\") ? 400 : 500, headers: { \"Content-Type\": \"application/json\" } });\n }\n }));`,\n );\n }\n\n // Filter out Node-only plugins\n const edgePlugins = pluginPaths.filter((p) => !isNodeOnlyPlugin(p));\n const pluginImports: string[] = [];\n const pluginCalls: string[] = [];\n\n for (let i = 0; i < edgePlugins.length; i++) {\n const varName = `plugin_${i}`;\n pluginImports.push(\n `import ${varName} from ${JSON.stringify(edgePlugins[i])};`,\n );\n pluginCalls.push(` if (typeof ${varName} === \"function\") {\n await ${varName}(nitroApp);\n }`);\n }\n\n // Auto-mounted default plugins (for slots the template doesn't override\n // locally). For each slot, prefer a workspace-core export over the\n // @agent-native/core default, if the workspace core provides one.\n const edgeDefaultStems = defaultPluginStems.filter(\n (stem) => !NODE_ONLY_PLUGINS.has(stem),\n );\n for (let i = 0; i < edgeDefaultStems.length; i++) {\n const stem = edgeDefaultStems[i];\n const varName = `defaultPlugin_${i}`;\n\n const workspaceExportName = workspaceCore?.plugins?.[stem as never];\n if (workspaceCore && workspaceExportName) {\n // Workspace-core layer wins over the framework default.\n pluginImports.push(\n `import { ${workspaceExportName} as ${varName} } from ${JSON.stringify(\n `${workspaceCore.packageName}/server`,\n )};`,\n );\n } else {\n // Fall back to the framework default from @agent-native/core.\n const defaultExportName = DEFAULT_PLUGIN_REGISTRY[stem];\n if (!defaultExportName) continue;\n pluginImports.push(\n `import { ${defaultExportName} as ${varName} } from \"@agent-native/core/server\";`,\n );\n }\n pluginCalls.push(` if (typeof ${varName} === \"function\") {\n await ${varName}(nitroApp);\n }`);\n }\n\n return `\n// Auto-generated worker entry point for ${preset}\nimport { H3, defineEventHandler, readBody, toResponse } from \"h3\";\nimport { createRequestHandler } from \"react-router\";\nimport * as serverBuild from \"./server-build.js\";\n\nfunction normalizeAppBasePath(value) {\n if (!value || value === \"/\") return \"\";\n const trimmed = String(value).trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n return \"/\" + trimmed.replace(/^\\\\/+/, \"\").replace(/\\\\/+$/, \"\");\n}\n\nfunction getAppBasePath() {\n return normalizeAppBasePath(\n globalThis.process?.env?.VITE_APP_BASE_PATH ||\n globalThis.process?.env?.APP_BASE_PATH,\n );\n}\n\nfunction stripAppBasePath(pathname) {\n const basePath = getAppBasePath();\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(basePath + \"/\")) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nfunction isApiPath(pathname) {\n return pathname === \"/api\" || pathname.startsWith(\"/api/\");\n}\n\nfunction isFrameworkPath(pathname) {\n return (\n pathname === \"/_agent-native\" || pathname.startsWith(\"/_agent-native/\")\n );\n}\n\nfunction requestWithMountedApiPrefixStripped(request) {\n const basePath = getAppBasePath();\n if (!basePath) return request;\n const url = new URL(request.url);\n const strippedPathname = stripAppBasePath(url.pathname);\n if (strippedPathname === url.pathname) {\n return request;\n }\n if (!isApiPath(strippedPathname) && !isFrameworkPath(strippedPathname)) {\n return request;\n }\n url.pathname = strippedPathname;\n return new Request(url, request);\n}\n\nfunction prefixMountedPath(path, basePath) {\n if (!basePath || !path.startsWith(\"/\") || path.startsWith(\"//\")) return path;\n if (path === basePath || path.startsWith(basePath + \"/\")) return path;\n return basePath + path;\n}\n\nfunction prefixMountedHtml(html, basePath) {\n if (!basePath) return html;\n return html\n .replace(\n /\\\\b(href|src|action|formaction|poster)=([\"'])(\\\\/(?!\\\\/)[^\"']*)\\\\2/g,\n (_match, attr, quote, path) =>\n attr + \"=\" + quote + prefixMountedPath(path, basePath) + quote,\n )\n .replace(/url\\\\(([\"']?)(\\\\/(?!\\\\/)[^)'\" ]+)\\\\1\\\\)/g, (_match, quote, path) => {\n const q = quote || \"\";\n return \"url(\" + q + prefixMountedPath(path, basePath) + q + \")\";\n });\n}\n\nfunction firstNonEmpty() {\n for (const value of arguments) {\n const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n if (trimmed) return trimmed;\n }\n}\n\nfunction getSentryClientConfigScript() {\n const env = globalThis.process?.env || {};\n const key = firstNonEmpty(env.SENTRY_CLIENT_KEY, env.VITE_SENTRY_CLIENT_KEY);\n const projectId = firstNonEmpty(\n env.SENTRY_PROJECT_ID,\n env.VITE_SENTRY_PROJECT_ID,\n );\n const host = firstNonEmpty(\n env.SENTRY_INGEST_HOST,\n env.VITE_SENTRY_INGEST_HOST,\n );\n const dsn =\n firstNonEmpty(\n env.SENTRY_CLIENT_DSN,\n env.VITE_SENTRY_CLIENT_DSN,\n env.VITE_SENTRY_DSN,\n env.SENTRY_DSN,\n ) || (key && projectId && host ? \"https://\" + key + \"@\" + host + \"/\" + projectId : undefined);\n if (!dsn) return null;\n const config = {\n sentryDsn: dsn,\n sentryEnvironment:\n firstNonEmpty(\n env.SENTRY_ENVIRONMENT,\n env.NETLIFY_CONTEXT,\n env.VERCEL_ENV,\n env.NODE_ENV,\n ) || \"production\",\n };\n return (\n '<script data-agent-native-sentry-config>' +\n 'window.__AGENT_NATIVE_CONFIG__=Object.assign({},window.__AGENT_NATIVE_CONFIG__,' +\n JSON.stringify(config) +\n \");</script>\"\n );\n}\n\nfunction injectHeadScript(html, script) {\n if (!script) return html;\n const headCloseIdx = html.indexOf(\"</head>\");\n if (headCloseIdx === -1) return html;\n return html.slice(0, headCloseIdx) + script + html.slice(headCloseIdx);\n}\n\nconst DEFAULT_SSR_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_CACHE_CONTROL)};\nconst AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE = ${JSON.stringify(\n AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE,\n )};\nconst OG_IMAGE_META_RE = /<meta\\\\b(?=[^>]*\\\\bproperty=([\"'])og:image\\\\1)[^>]*>/i;\nconst TWITTER_CARD_META_RE = /<meta\\\\b(?=[^>]*\\\\bname=([\"'])twitter:card\\\\1)[^>]*>/i;\nconst TWITTER_IMAGE_META_RE = /<meta\\\\b(?=[^>]*\\\\bname=([\"'])twitter:image\\\\1)[^>]*>/i;\n\nfunction injectDefaultSocialImageMeta(html) {\n const headCloseIdx = html.indexOf(\"</head>\");\n if (headCloseIdx === -1) return html;\n\n const hasAnySocialImage =\n OG_IMAGE_META_RE.test(html) || TWITTER_IMAGE_META_RE.test(html);\n const tags = [];\n\n if (!hasAnySocialImage) {\n tags.push('<meta property=\"og:image\" content=\"' + AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE + '\">');\n }\n if (!TWITTER_CARD_META_RE.test(html)) {\n tags.push('<meta name=\"twitter:card\" content=\"summary_large_image\">');\n }\n if (!hasAnySocialImage) {\n tags.push('<meta name=\"twitter:image\" content=\"' + AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE + '\">');\n }\n\n if (tags.length === 0) return html;\n return html.slice(0, headCloseIdx) + tags.join(\"\") + html.slice(headCloseIdx);\n}\n\nfunction applyDefaultSsrCacheHeader(headers, status) {\n if (headers.has(\"cache-control\")) return;\n if (status < 200 || status >= 400) return;\n\n const contentType = (headers.get(\"content-type\") || \"\").toLowerCase();\n if (!contentType.includes(\"text/html\")) return;\n\n headers.set(\"cache-control\", DEFAULT_SSR_CACHE_CONTROL);\n}\n\nasync function rewriteMountedResponse(response, basePath) {\n const sentryClientConfigScript = getSentryClientConfigScript();\n const headers = new Headers(response.headers);\n applyDefaultSsrCacheHeader(headers, response.status);\n\n const location = headers.get(\"location\");\n if (location?.startsWith(\"/\") && !location.startsWith(\"//\")) {\n headers.set(\"location\", prefixMountedPath(location, basePath));\n }\n\n const contentType = headers.get(\"content-type\") || \"\";\n if (!contentType.toLowerCase().includes(\"text/html\") || !response.body) {\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n }\n\n const html = await response.text();\n headers.delete(\"content-length\");\n return new Response(\n injectHeadScript(\n injectDefaultSocialImageMeta(prefixMountedHtml(html, basePath)),\n sentryClientConfigScript,\n ),\n {\n status: response.status,\n statusText: response.statusText,\n headers,\n },\n );\n}\n\nfunction requestWithMethod(request, method) {\n return new Request(request.url, {\n method,\n headers: request.headers,\n signal: request.signal,\n });\n}\n\nfunction requestWithPathname(request, pathname) {\n const url = new URL(request.url);\n if (url.pathname === pathname) return request;\n url.pathname = pathname;\n return new Request(url, request);\n}\n\n// API route handlers\n${routeImports.join(\"\\n\")}\n\n// Action handlers (auto-discovered from actions/)\n${actionImports.join(\"\\n\")}\n\n// Server plugins\n${pluginImports.join(\"\\n\")}\n\nlet _handler;\n\nasync function getHandler() {\n if (_handler) return _handler;\n\n const app = new H3();\n\n // Build a fake nitroApp surface so framework plugins (which expect\n // \\`nitroApp.h3[\"~middleware\"]\\`) can register routes via getH3App().\n const noop = () => {};\n const nitroApp = {\n h3: app,\n hooks: { hook: noop, callHook: noop, hookOnce: noop },\n captureError: noop,\n };\n\n // CORS — applied as global middleware via .use(handler)\n app.use(defineEventHandler((event) => {\n if (event.req.method === \"OPTIONS\") {\n return new Response(null, {\n status: 204,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF,X-Agent-Native-Embed-Target\",\n },\n });\n }\n }));\n\n // Run plugins — they call getH3App(nitroApp).use(path, handler) which\n // pushes path-prefix middleware onto app[\"~middleware\"].\n${pluginCalls.join(\"\\n\")}\n\n // Register API routes\n${routeRegistrations.join(\"\\n\")}\n\n // Register action routes (/_agent-native/actions/*)\n${actionRegistrations.join(\"\\n\")}\n\n // SSR catch-all for React Router\n const rrHandler = createRequestHandler(() => serverBuild);\n app.all(\"/**\", defineEventHandler(async (event) => {\n const basePath = getAppBasePath();\n const p = stripAppBasePath(new URL(event.req.url).pathname);\n if (\n p.startsWith(\"/.well-known/\") ||\n p.startsWith(\"/_agent-native/\") ||\n isApiPath(p) ||\n p === \"/favicon.ico\" ||\n p === \"/favicon.png\" ||\n (/\\\\.\\\\w+$/.test(p) && !p.endsWith(\".data\"))\n ) {\n return new Response(null, { status: 404 });\n }\n const request = requestWithPathname(event.req, p);\n if (event.req.method === \"HEAD\") {\n const getRequest = requestWithMethod(request, \"GET\");\n const response = await rrHandler(getRequest);\n return rewriteMountedResponse(\n new Response(null, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }),\n basePath,\n );\n }\n return rewriteMountedResponse(await rrHandler(request), basePath);\n }));\n\n _handler = app.fetch.bind(app);\n return _handler;\n}\n\nexport default {\n async fetch(request, env, ctx) {\n // Expose env and ctx bindings globally for compatibility\n if (ctx) globalThis.__cf_ctx = ctx;\n if (env) {\n globalThis.process = globalThis.process || { env: {} };\n globalThis.process.env = globalThis.process.env || {};\n // Expose D1/KV/R2 bindings on globalThis.__cf_env for the db layer\n globalThis.__cf_env = env;\n for (const [key, value] of Object.entries(env)) {\n if (typeof value === \"string\") {\n globalThis.process.env[key] = value;\n }\n }\n }\n\n // Try serving static assets first (CF Pages advanced mode).\n // Only attempt this for GET/HEAD — the ASSETS binding is a static file\n // server and returns 405 for any other method, which would short-circuit\n // API calls (PUT/POST/DELETE to /_agent-native/*) before they reach our\n // h3 middleware.\n if (env?.ASSETS && (request.method === \"GET\" || request.method === \"HEAD\")) {\n try {\n const assetResponse = await env.ASSETS.fetch(request);\n if (assetResponse.status !== 404) {\n return assetResponse;\n }\n } catch {\n // Asset fetch failed — fall through to SSR\n }\n }\n\n const handler = await getHandler();\n return handler(requestWithMountedApiPrefixStripped(request));\n }\n};\n`;\n}\n\n/**\n * Build for Cloudflare Pages.\n * Output structure:\n * dist/\n * _worker.js (bundled worker entry)\n * assets/ (static client assets)\n */\nasync function buildCloudflarePages() {\n generateActionRegistryForProject(cwd);\n\n const buildDir = path.join(cwd, \"build\");\n const clientDir = path.join(buildDir, \"client\");\n const serverDir = path.join(buildDir, \"server\");\n const distDir = path.join(cwd, \"dist\");\n\n // Verify build output exists\n if (!fs.existsSync(clientDir) || !fs.existsSync(serverDir)) {\n console.error(\n \"Build output not found at build/client/ and build/server/. Run react-router build first.\",\n );\n process.exit(1);\n }\n\n // Clean dist\n if (fs.existsSync(distDir)) {\n fs.rmSync(distDir, { recursive: true });\n }\n fs.mkdirSync(distDir, { recursive: true });\n\n // Copy client assets to dist/\n copyDir(clientDir, distDir);\n\n // Exclude _worker.js from being served as a public asset\n fs.writeFileSync(path.join(distDir, \".assetsignore\"), \"_worker.js\\n\");\n\n // Write a package.json inside _worker.js/ to tell wrangler this is a\n // pre-bundled ES module worker — skip re-bundling our esbuild output.\n fs.mkdirSync(path.join(distDir, \"_worker.js\"), { recursive: true });\n fs.writeFileSync(\n path.join(distDir, \"_worker.js\", \"package.json\"),\n JSON.stringify({ main: \"index.js\", type: \"module\" }),\n );\n\n // Create empty stub for native modules that wrangler's bundler needs to resolve\n const stubsDir = path.join(distDir, \"_worker.js\", \"stubs\");\n fs.mkdirSync(stubsDir, { recursive: true });\n fs.writeFileSync(\n path.join(stubsDir, \"empty.js\"),\n \"export default {}; export const watch = () => ({ close() {} }); export const Database = class {};\\n\",\n );\n\n // Discover routes, plugins, actions, and the workspace core (if any).\n const routes = await discoverApiRoutes(cwd);\n const plugins = await discoverPlugins(cwd);\n const actions = await discoverActionFiles(cwd);\n const missingDefaults = await getMissingDefaultPlugins(cwd);\n const workspaceCore = await getWorkspaceCoreExports(cwd);\n\n const workspaceSlotCount = workspaceCore\n ? Object.keys(workspaceCore.plugins).length\n : 0;\n console.log(\n `[deploy] ${routes.length} API routes, ${actions.length} actions, ${plugins.length} plugins (${plugins.filter((p) => isNodeOnlyPlugin(p)).length} skipped as Node-only), ${missingDefaults.length} auto-mounted defaults${workspaceCore ? `, workspace-core ${workspaceCore.packageName} (${workspaceSlotCount} plugin slots)` : \"\"}`,\n );\n\n // Generate the worker entry\n const entrySource = generateWorkerEntry(\n routes,\n plugins,\n missingDefaults,\n actions,\n workspaceCore,\n );\n\n // Create _worker.js output directory\n const workerOutDir = path.join(distDir, \"_worker.js\");\n fs.mkdirSync(workerOutDir, { recursive: true });\n\n // Write the worker entry\n const entryFile = path.join(workerOutDir, \"index.js\");\n\n // Rewrite the server-build import to point at the copied files\n const adjustedEntry = entrySource.replace(\n `import * as serverBuild from \"./server-build.js\";`,\n `import * as serverBuild from \"./server/index.js\";`,\n );\n\n // Write a temp file for esbuild to bundle everything into a single worker entry.\n // The server build (React Router SSR) is copied to tmp so esbuild can resolve it.\n const tmpDir = path.join(cwd, \".deploy-tmp\");\n fs.mkdirSync(tmpDir, { recursive: true });\n // Name the entry \"index.js\" so esbuild outputs index.js in the outdir,\n // matching the _worker.js/index.js entry point that Cloudflare Pages expects.\n const tmpEntry = path.join(tmpDir, \"index.js\");\n fs.writeFileSync(tmpEntry, adjustedEntry);\n\n // Copy server build files so esbuild can resolve the import\n copyDir(serverDir, path.join(tmpDir, \"server\"));\n\n // Create a require shim so CJS require(\"fs\") calls resolve via ESM imports.\n // This is injected via esbuild --inject to replace its broken __require shim.\n fs.writeFileSync(\n path.join(tmpDir, \"_require-shim.js\"),\n generateRequireShim(),\n );\n\n // Create stub modules for native/Node-only deps that can't run on Workers.\n // These get resolved by esbuild instead of the real modules, avoiding bundling\n // native code that would fail on the Workers runtime.\n const stubModules = [\n \"better-sqlite3\",\n \"node-pty\",\n \"chokidar\",\n \"fsevents\",\n \"dotenv\",\n \"@anthropic-ai/sdk\",\n ];\n const stubDir = path.join(tmpDir, \"node_modules\");\n for (const mod of stubModules) {\n const modDir = path.join(stubDir, mod);\n fs.mkdirSync(modDir, { recursive: true });\n fs.writeFileSync(\n path.join(modDir, \"index.js\"),\n `export default {}; export const watch = () => ({ close() {} });`,\n );\n fs.writeFileSync(\n path.join(modDir, \"package.json\"),\n JSON.stringify({ name: mod, main: \"index.js\", type: \"module\" }),\n );\n }\n\n const esbuildBin = findEsbuild();\n\n // Externalize node builtins (both bare and node: prefixed) — the require\n // shim handles bare ones. Also alias every `node:*` specifier to its bare\n // name so esbuild emits `import from \"fs\"` everywhere, never\n // `import from \"node:fs\"`. CF Pages Functions (wrangler 3.x, nodejs_compat\n // v1) rejects the `node:` prefix in chunks with:\n // No such module \"node:fs\" imported from chunks/...\n // The alias is the authoritative fix; the post-build strip stays as belt\n // & suspenders in case esbuild emits a node: string via some other path.\n const builtinNames = getNodeBuiltinNames();\n // Only externalize bare names. node:* externals would otherwise pin\n // the prefix in output; instead we alias node:* → bare so anything that\n // resolves past alias land as bare externals.\n const nodeExternals = builtinNames.map((n) => `--external:${n}`);\n const nodeAliases = builtinNames.map((n) => `--alias:node:${n}=${n}`);\n\n // Hard externalize large client-only / node-only libraries so they don't\n // bloat the edge worker. These are never executed in the CF Pages runtime\n // — mermaid/excalidraw render in the browser, pdf-parse and @google/genai\n // run from node-only action scripts. Without this, slides' bundle hits\n // the 25 MiB Pages Functions limit.\n const heavyClientExternals = [\n \"mermaid\",\n \"@excalidraw/excalidraw\",\n \"@excalidraw/mermaid-to-excalidraw\",\n \"pdf-parse\",\n \"pdfjs-dist\",\n \"@google/genai\",\n \"chartjs-node-canvas\",\n \"@napi-rs/canvas\",\n ].map((p) => `--external:${p}`);\n\n execFileSync(\n esbuildBin,\n [\n tmpEntry,\n \"--bundle\",\n \"--format=esm\",\n \"--target=es2022\",\n // browser platform for npm resolution; node builtins externalized separately\n \"--platform=browser\",\n \"--minify\",\n // Single-file bundle (no --splitting). CF Pages Functions' deploy\n // validator fails to load chunked _worker.js/ bundles even when the\n // chunks contain only bare node-builtin imports (wrangler 3.101.0\n // + nodejs_compat v2). Matches main's working config.\n `--outdir=${workerOutDir}`,\n \"--conditions=workerd,worker,import\",\n // The ssr-handler imports a virtual module that only exists at dev time\n \"--external:virtual:react-router/server-build\",\n // Banner: override the __require shim that esbuild generates for CJS modules.\n // This provides a real require() backed by ESM imports of node builtins.\n // Without this, CF Workers rejects the bundle because esbuild's default\n // __require shim throws \"Dynamic require of X is not supported\".\n `--banner:js=${generateRequireShim()}`,\n // Externalize node: builtins — CF Workers runtime provides them\n ...nodeExternals,\n ...heavyClientExternals,\n // Rewrite node:* -> bare names so chunks never contain node: imports\n ...nodeAliases,\n ],\n { stdio: \"inherit\", cwd },\n );\n\n // Clean up tmp\n fs.rmSync(tmpDir, { recursive: true });\n\n // Rewrite the external virtual import to a local stub.\n // esbuild externalizes \"virtual:react-router/server-build\" (used by ssr-handler),\n // but wrangler re-bundles and chokes on it. Replace the import with a no-op stub.\n const virtualStub = path.join(workerOutDir, \"chunks\", \"_virtual-stub.js\");\n fs.mkdirSync(path.dirname(virtualStub), { recursive: true });\n fs.writeFileSync(virtualStub, \"export default {};\\n\");\n\n // Post-build patches — apply to ALL .js files in the worker output directory\n // (entry + chunks) since code can land in any chunk after splitting.\n const allJsFiles = getAllJsFiles(workerOutDir);\n for (const jsFile of allJsFiles) {\n let code = fs.readFileSync(jsFile, \"utf-8\");\n const isEntry = path.basename(jsFile) === \"index.js\";\n\n // Strip \"node:\" prefix from all imports/requires. Cloudflare Pages\n // Functions runs under nodejs_compat v1, which exposes builtins as\n // bare names (\"fs\") and rejects \"node:fs\" at worker init:\n // No such module \"node:fs\" imported from chunks/...\n // (Workers-on-the-edge use v2 and require the prefix; Pages lags.)\n // Preserve the original quote char (single vs double) when rewriting —\n // esbuild's minifier sometimes places `import('node:buffer')` inside a\n // double-quoted string literal; swapping to double quotes breaks the\n // outer literal and produces `Unexpected identifier 'buffer'`.\n code = code.replace(\n /\\bfrom(\\s*)([\"'])node:([^\"']+)\\2/g,\n (_, ws, q, mod) => `from${ws}${q}${mod}${q}`,\n );\n code = code.replace(\n /\\bimport(\\s*)([\"'])node:([^\"']+)\\2/g,\n (_, ws, q, mod) => `import${ws}${q}${mod}${q}`,\n );\n // Strip `node:` prefix from any string literal that names a node\n // builtin. Covers dynamic imports, require(), getBuiltinModule(),\n // and minified wrappers like `Ut(\"node:fs\")` that Nitro/h3 emit.\n // Pages' loader scans chunks for `\"node:*\"` literals and fails with\n // 'No such module \"node:fs\"' whether or not the string is reached\n // at runtime. Scoping to known builtins avoids touching user data.\n // Sorted longest-first so `fs/promises` matches before `fs`.\n const builtinsPattern = [...NODE_BUILTINS]\n .sort((a, b) => b.length - a.length)\n .join(\"|\");\n const builtinRe = new RegExp(`([\"'])node:(${builtinsPattern})\\\\1`, \"g\");\n code = code.replace(\n builtinRe,\n (_, q: string, mod: string) => `${q}${mod}${q}`,\n );\n\n // Rewrite virtual:react-router/server-build imports to the local stub.\n // The generated entry handles SSR directly; this import is dead code from ssr-handler.\n const relStub = path\n .relative(path.dirname(jsFile), virtualStub)\n .replace(/\\\\/g, \"/\");\n code = code.replace(\n /[\"']virtual:react-router\\/server-build[\"']/g,\n `\"./${relStub}\"`,\n );\n\n // Patch createRequire(import.meta.url) — import.meta.url is undefined in CF Workers.\n // Matches both `from \"module\"` and `from \"node:module\"` — with the node:\n // prefix preserved (for nodejs_compat_v2), the latter is what esbuild now emits.\n code = code.replace(\n /\\bimport\\s*\\{\\s*createRequire\\s+as\\s+([\\w$]+)\\s*\\}\\s*from\\s*[\"'](?:node:)?module[\"']\\s*;/g,\n \"var $1 = function() { return typeof require !== 'undefined' ? require : function(m) { throw new Error('require not supported: ' + m); }; };\",\n );\n\n // Patch setInterval/setTimeout at module scope — CF Workers disallows timers in global scope.\n // Some dependencies (e.g. Anthropic SDK rate limiter) call setInterval at module init.\n // With code splitting, chunks evaluate before the entry, so the shim must be in every file.\n // The restore only happens in the entry's fetch() handler.\n if (!code.includes(\"__origSetInterval\")) {\n const timerShim = [\n \"var __origSetInterval=globalThis.setInterval;\",\n \"globalThis.setInterval=function(){return{unref(){},ref(){},close(){}}};\",\n ].join(\"\");\n code = timerShim + code;\n }\n if (isEntry) {\n const timerRestore =\n \"if(__origSetInterval)globalThis.setInterval=__origSetInterval;\";\n code = code.replace(\n /async fetch\\(request,\\s*env,\\s*ctx\\)\\s*\\{/,\n (match) => match + timerRestore,\n );\n }\n\n fs.writeFileSync(jsFile, code);\n }\n\n // Report size\n const entrySize = fs.statSync(entryFile).size;\n const totalSize = getDirSize(workerOutDir);\n const chunkCount = allJsFiles.length - 1; // exclude entry\n console.log(\n `[deploy] Cloudflare Pages output written to dist/ (entry: ${(entrySize / 1024).toFixed(0)}KB, ${chunkCount} chunks, total: ${(totalSize / 1024 / 1024).toFixed(1)}MB)`,\n );\n}\n\nconst NODE_BUILTINS = [\n \"assert\",\n \"async_hooks\",\n \"buffer\",\n \"child_process\",\n \"cluster\",\n \"console\",\n \"constants\",\n \"crypto\",\n \"dgram\",\n \"diagnostics_channel\",\n \"dns\",\n \"domain\",\n \"events\",\n \"fs\",\n \"fs/promises\",\n \"http\",\n \"http2\",\n \"https\",\n \"inspector\",\n \"module\",\n \"net\",\n \"os\",\n \"path\",\n \"perf_hooks\",\n \"process\",\n \"punycode\",\n \"querystring\",\n \"readline\",\n \"repl\",\n \"sqlite\",\n \"stream\",\n \"stream/web\",\n \"string_decoder\",\n \"sys\",\n \"timers\",\n \"tls\",\n \"trace_events\",\n \"tty\",\n \"url\",\n \"util\",\n \"v8\",\n \"vm\",\n \"wasi\",\n \"worker_threads\",\n \"zlib\",\n];\n\nexport function getNodeBuiltinNames(): string[] {\n return NODE_BUILTINS;\n}\n\n/**\n * Generate a require() shim that bridges CJS require(\"fs\") calls to ESM imports.\n * Injected via esbuild --inject so CJS deps work on Workers runtime.\n */\nfunction generateRequireShim(): string {\n // Shim the full set of node builtins so any CJS `require(\"X\")` from a\n // transitive dep resolves to the imported ESM module. Anything less is\n // whack-a-mole: terminal helpers pull in `tty`, transformer libs pull in\n // `worker_threads`, etc. — every miss fails deploy with a generic\n // \"Cannot require: <name>\" thrown by this shim itself.\n //\n // Some builtins exist only as runtime polyfills under nodejs_compat\n // (some are no-op stubs). That's fine — the `import` returns whatever\n // the runtime provides; failures only surface when callers actually USE\n // the unsupported APIs at request time, which is the same as if the\n // shim wasn't there.\n //\n // `sqlite` is excluded because it's Node 22+ only and Workers'\n // nodejs_compat doesn't expose it yet — importing it makes the whole\n // bundle fail to load.\n const shimmed = NODE_BUILTINS.filter((name) => name !== \"sqlite\");\n\n // Bare module names — CF Pages Functions runs under nodejs_compat v1,\n // which rejects \"node:fs\" and only accepts \"fs\". The post-build pass in\n // buildCloudflarePages() also strips any `node:` prefix that esbuild or\n // dependencies emit elsewhere.\n const imports = shimmed\n .map((m) => `import __${m.replace(\"/\", \"_\")} from \"${m}\";`)\n .join(\"\");\n // Only bare-name keys. Pages' Functions loader appears to scan chunks\n // for \"node:*\" string literals and pre-resolves them as module specs —\n // so keeping \"node:fs\" as an object key caused deploy to fail with\n // 'No such module \"node:fs\"' even though nothing imported it. The\n // post-build strip turns every runtime `require(\"node:fs\")` into\n // `require(\"fs\")` so bare keys are sufficient.\n const entries = shimmed\n .map((m) => `\"${m}\":__${m.replace(\"/\", \"_\")}`)\n .join(\",\");\n\n const messageChannelPolyfill = `if(typeof MessageChannel===\"undefined\"){globalThis.MessageChannel=class{constructor(){const a={onmessage:null},b={onmessage:null};a.postMessage=d=>{if(b.onmessage)setTimeout(()=>b.onmessage({data:d}),0)};b.postMessage=d=>{if(a.onmessage)setTimeout(()=>a.onmessage({data:d}),0)};this.port1=a;this.port2=b}}}`;\n return `${imports}\\n${messageChannelPolyfill}\\nconst __mods={${entries}};export var require=globalThis.require||function(m){const r=__mods[m];if(r!==undefined)return r;throw new Error(\"Cannot require: \"+m)};\\n`;\n}\n\nfunction findEsbuild(): string {\n // Try to resolve esbuild's binary via Node module resolution\n // This works regardless of hoisting or .bin symlink creation\n try {\n const _require = createRequire(cwd + \"/\");\n const esbuildPkg = path.dirname(_require.resolve(\"esbuild/package.json\"));\n const bin = path.join(esbuildPkg, \"bin\", \"esbuild\");\n if (fs.existsSync(bin)) return bin;\n } catch {}\n\n // Fallback: check local and workspace .bin\n const localBin = path.resolve(cwd, \"node_modules/.bin/esbuild\");\n if (fs.existsSync(localBin)) return localBin;\n\n const workspaceRoot = findWorkspaceRoot(cwd);\n if (workspaceRoot) {\n const workspaceBin = path.resolve(\n workspaceRoot,\n \"node_modules/.bin/esbuild\",\n );\n if (fs.existsSync(workspaceBin)) return workspaceBin;\n }\n\n return \"esbuild\";\n}\n\nfunction findWorkspaceRoot(dir: string): string | null {\n let current = dir;\n while (current !== path.dirname(current)) {\n if (\n fs.existsSync(path.join(current, \"pnpm-workspace.yaml\")) ||\n fs.existsSync(path.join(current, \"pnpm-lock.yaml\"))\n ) {\n return current;\n }\n current = path.dirname(current);\n }\n return null;\n}\n\n/** Recursively collect all .js files in a directory. */\nfunction getAllJsFiles(dir: string): string[] {\n const results: string[] = [];\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n results.push(...getAllJsFiles(fullPath));\n } else if (entry.name.endsWith(\".js\")) {\n results.push(fullPath);\n }\n }\n return results;\n}\n\nfunction getDirSize(dir: string): number {\n let size = 0;\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n size += getDirSize(fullPath);\n } else {\n size += fs.statSync(fullPath).size;\n }\n }\n return size;\n}\n\nfunction copyDir(src: string, dest: string) {\n fs.mkdirSync(dest, { recursive: true });\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\nconst LIBSQL_NATIVE_PACKAGE_NAMES = [\n \"darwin-arm64\",\n \"darwin-x64\",\n \"linux-arm-gnueabihf\",\n \"linux-arm-musleabihf\",\n \"linux-arm64-gnu\",\n \"linux-arm64-musl\",\n \"linux-x64-gnu\",\n \"linux-x64-musl\",\n \"win32-x64-msvc\",\n];\n\nfunction nodeModulesAncestors(startDir: string): string[] {\n const dirs: string[] = [];\n let current = path.resolve(startDir);\n while (true) {\n const candidate = path.join(current, \"node_modules\");\n if (fs.existsSync(candidate)) dirs.push(candidate);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return dirs;\n}\n\nfunction findInstalledLibsqlNativePackage(\n nodeModulesRoots: string[],\n packageName: string,\n): string | null {\n for (const root of nodeModulesRoots) {\n const direct = path.join(root, \"@libsql\", packageName);\n if (fs.existsSync(path.join(direct, \"index.node\"))) return direct;\n\n const pnpmRoot = path.join(root, \".pnpm\");\n if (!fs.existsSync(pnpmRoot)) continue;\n const pnpmPrefix = `@libsql+${packageName}@`;\n for (const entry of fs.readdirSync(pnpmRoot)) {\n if (!entry.startsWith(pnpmPrefix)) continue;\n const nested = path.join(\n pnpmRoot,\n entry,\n \"node_modules\",\n \"@libsql\",\n packageName,\n );\n if (fs.existsSync(path.join(nested, \"index.node\"))) return nested;\n }\n }\n return null;\n}\n\nfunction copyInstalledLibsqlNativePackages(serverDir: string | undefined) {\n if (!serverDir || !fs.existsSync(serverDir)) return;\n const nodeModulesRoots = nodeModulesAncestors(cwd);\n const destScopeDir = path.join(serverDir, \"node_modules\", \"@libsql\");\n let copied = 0;\n\n for (const packageName of LIBSQL_NATIVE_PACKAGE_NAMES) {\n const src = findInstalledLibsqlNativePackage(nodeModulesRoots, packageName);\n if (!src) continue;\n\n copyDir(src, path.join(destScopeDir, packageName));\n copied += 1;\n }\n\n if (copied > 0) {\n console.log(\n `[deploy] Copied ${copied} installed libsql native package(s) into the server bundle.`,\n );\n }\n}\n\n/**\n * Create stub directories for dangling platform-specific optional dependency\n * symlinks in the pnpm store.\n *\n * pnpm's store at `node_modules/.pnpm/<pkg>@<ver>/node_modules/<pkg>/<dep>`\n * contains symlinks for ALL optional deps declared by a package, but only\n * installs the ones matching the current OS/CPU as real packages. The other\n * symlinks dangle — their targets at `.pnpm/<scope>+<pkg>@<ver>/node_modules/...`\n * don't exist.\n *\n * Nitro's `nitro:externals` plugin (via nf3 / @vercel/nft) walks\n * optionalDependencies when tracing files and calls `realpath` on them, which\n * throws ENOENT on dangling targets. This blocks builds with presets like\n * netlify / vercel / aws-lambda on macOS when packages like `libsql` declare\n * Linux-only platform variants as optional deps.\n *\n * Fix: walk `node_modules/.pnpm/` and for every dangling symlink under\n * `<pkg>/node_modules/<scope>/<dep>`, create the symlink's target as a tiny\n * stub directory containing just a valid `package.json`. The tracer can now\n * `realpath` and read the package.json without throwing — the stub is empty\n * so no binary is bundled (which is what we want: we're building from macOS,\n * the target deploy platform will install its own native binary).\n */\nfunction createDanglingOptionalDepStubs() {\n // In pnpm monorepos, the store may live at the workspace root rather than\n // in the template dir. Walk up from `cwd` to find every `.pnpm` directory.\n const pnpmRoots: string[] = [];\n let dir = cwd;\n while (true) {\n const candidate = path.join(dir, \"node_modules\", \".pnpm\");\n if (fs.existsSync(candidate)) pnpmRoots.push(candidate);\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n if (pnpmRoots.length === 0) return;\n\n let stubsCreated = 0;\n\n for (const pnpmRoot of pnpmRoots) {\n let pkgDirs: string[];\n try {\n pkgDirs = fs.readdirSync(pnpmRoot);\n } catch {\n continue;\n }\n\n for (const pkgDir of pkgDirs) {\n // e.g. `libsql@0.5.29`, `@libsql+client@0.15.15`\n const innerNm = path.join(pnpmRoot, pkgDir, \"node_modules\");\n if (!fs.existsSync(innerNm)) continue;\n\n let innerEntries: fs.Dirent[];\n try {\n innerEntries = fs.readdirSync(innerNm, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of innerEntries) {\n // Top-level entry: either `foo` (unscoped) or `@scope` (scoped)\n const entryPath = path.join(innerNm, entry.name);\n const candidates: { symlinkPath: string; pkgName: string }[] = [];\n if (entry.name.startsWith(\"@\")) {\n // Scoped — iterate children\n let scopedChildren: fs.Dirent[];\n try {\n scopedChildren = fs.readdirSync(entryPath, {\n withFileTypes: true,\n });\n } catch {\n continue;\n }\n for (const child of scopedChildren) {\n candidates.push({\n symlinkPath: path.join(entryPath, child.name),\n pkgName: `${entry.name}/${child.name}`,\n });\n }\n } else {\n candidates.push({ symlinkPath: entryPath, pkgName: entry.name });\n }\n\n for (const { symlinkPath, pkgName } of candidates) {\n let isSymlink = false;\n try {\n isSymlink = fs.lstatSync(symlinkPath).isSymbolicLink();\n } catch {\n continue;\n }\n if (!isSymlink) continue;\n\n // Check if the symlink target exists\n try {\n fs.statSync(symlinkPath);\n continue; // Target exists — nothing to do\n } catch {\n // Dangling symlink — create a stub at the target\n }\n\n let linkTarget: string;\n try {\n linkTarget = fs.readlinkSync(symlinkPath);\n } catch {\n continue;\n }\n const resolvedTarget = path.resolve(\n path.dirname(symlinkPath),\n linkTarget,\n );\n\n try {\n fs.mkdirSync(resolvedTarget, { recursive: true });\n const stubPkgJson = {\n name: pkgName,\n version: \"0.0.0-stub\",\n description:\n \"Empty stub created by @agent-native/core deploy build to satisfy nitro's file tracer on platforms where this optional dep is not installed.\",\n };\n fs.writeFileSync(\n path.join(resolvedTarget, \"package.json\"),\n JSON.stringify(stubPkgJson, null, 2),\n );\n stubsCreated++;\n } catch {\n // Best-effort — ignore failures\n }\n }\n }\n }\n }\n\n if (stubsCreated > 0) {\n console.log(\n `[deploy] Created ${stubsCreated} stub package dir(s) for dangling optional deps (platform-specific binaries not installed on this host).`,\n );\n }\n}\n\n/**\n * Build for any non-Cloudflare preset using Nitro's programmatic build API.\n * Handles netlify, vercel, deno_deploy, aws-lambda, and all other targets.\n */\nexport interface NitroBuildHooks {\n prepare: (nitro: any) => Promise<void>;\n copyPublicAssets: (nitro: any) => Promise<void>;\n nitroBuild: (nitro: any) => Promise<void>;\n}\n\nexport interface NitroBuildPipelineOptions {\n nitro: any;\n hooks: NitroBuildHooks;\n clientDir: string;\n publicOutputDir: string | undefined;\n appBasePath: string;\n cwd: string;\n}\n\n/**\n * Run Nitro's lifecycle in the order required to ship a working React Router\n * framework-mode build.\n *\n * The critical ordering constraint is that the React Router client build must\n * be copied into `publicOutputDir` *before* `nitroBuild` runs. Nitro generates\n * the static-asset manifest baked into the server bundle by globbing\n * `publicDir` during the server build; files copied in after that point exist\n * on disk but are invisible to the runtime `serveStatic` handler. Every\n * /assets/* request then falls through to the SSR catch-all, which 404s\n * anything with a file extension.\n */\nexport async function runNitroBuildPipeline(\n opts: NitroBuildPipelineOptions,\n): Promise<void> {\n const { nitro, hooks, clientDir, publicOutputDir, appBasePath, cwd } = opts;\n\n await hooks.prepare(nitro);\n await hooks.copyPublicAssets(nitro);\n\n if (fs.existsSync(clientDir) && publicOutputDir) {\n copyDir(clientDir, publicOutputDir);\n if (appBasePath) {\n copyDir(clientDir, path.join(publicOutputDir, appBasePath.slice(1)));\n }\n console.log(\n `[deploy] Copied client assets to ${path.relative(cwd, publicOutputDir)}`,\n );\n }\n\n await hooks.nitroBuild(nitro);\n}\n\nasync function buildWithNitro() {\n console.log(`[deploy] Building for preset \"${preset}\" via Nitro...`);\n const appBasePath = normalizeConfiguredAppBasePath();\n\n // Nitro runs its own server build after the React Router/Vite build. The\n // template's agent-chat plugin imports .generated/actions-registry.ts so the\n // serverless bundle has static imports for every domain action. Regenerate\n // here as well so deploy builds are not coupled to a previous Vite run or to\n // ignored local .generated files being present.\n generateActionRegistryForProject(cwd);\n\n // Work around pnpm + nitro:externals (nf3) bug where dangling symlinks for\n // platform-specific optional deps cause realpath ENOENT during file tracing.\n createDanglingOptionalDepStubs();\n\n const {\n createNitro,\n prepare,\n copyPublicAssets,\n build: nitroBuild,\n } = await import(\"nitro/builder\");\n\n // Resolve the React Router server build so the SSR catch-all route\n // can import \"virtual:react-router/server-build\" in production.\n const rrServerBuild = path.join(cwd, \"build\", \"server\", \"index.js\");\n\n // Inline the template's AGENTS.md + .agents/skills/ content into the Nitro\n // bundle via the `virtual` config option. Nitro's internal `nitro:virtual`\n // Rollup plugin picks this up and resolves `virtual:agents-bundle` to the\n // generated ES module source. Without this, Nitro's Rolldown build (used for\n // netlify, vercel, aws-lambda, node presets) can't resolve the virtual\n // module that `server/agents-bundle.ts` imports — it silently falls through\n // to an empty bundle and the agent gets no instructions/skills at runtime.\n //\n // The Vite plugin at `vite/agents-bundle-plugin.ts` handles this for the\n // React Router client/server build (and cloudflare via esbuild rebundle),\n // but Nitro runs its OWN build from ./server/ without Vite, so it needs its\n // own virtual module registration. Both paths reuse `readAgentsBundleFromFs`\n // from `server/agents-bundle.ts` to guarantee identical content.\n const { readAgentsBundleFromFs } = await import(\"../server/agents-bundle.js\");\n // Resolve the workspace core (if present) up front so the bundle embeds\n // enterprise-wide AGENTS.md + skills alongside the template's.\n const nitroWorkspaceCore = await getWorkspaceCoreExports(cwd);\n const nitroWorkspaceSource = nitroWorkspaceCore\n ? {\n skillsDir: nitroWorkspaceCore.skillsDir,\n agentsMdPath: nitroWorkspaceCore.agentsMdPath,\n rootDir: nitroWorkspaceCore.packageDir,\n }\n : null;\n const agentsBundleModuleSource = () => {\n const bundle = readAgentsBundleFromFs(cwd, nitroWorkspaceSource);\n return `// AUTO-GENERATED by @agent-native/core deploy build (Nitro virtual)\n// Contains the inlined AGENTS.md + .agents/skills/ content from the template,\n// merged with the workspace core's AGENTS.md + skills/ when present.\nconst bundle = ${JSON.stringify(bundle)};\nexport default bundle;\n`;\n };\n\n // Path aliases used by templates (mirrors tsconfig + Vite config). Nitro\n // bundles server/ and actions/ with its own Rolldown pipeline that doesn't\n // see Vite's resolve.alias — so without this, action files that import\n // `@/foo` (= `app/foo`) end up with the literal `@/foo` specifier in the\n // serverless function output and crash at runtime with\n // \"Cannot find package '@/foo' imported from /var/task/main.mjs\".\n const appDir = path.join(cwd, \"app\");\n const sharedDir = path.join(cwd, \"shared\");\n const pathAliases: Record<string, string> = {};\n if (fs.existsSync(appDir)) pathAliases[\"@\"] = appDir;\n if (fs.existsSync(sharedDir)) pathAliases[\"@shared\"] = sharedDir;\n\n const nitro = await createNitro({\n rootDir: cwd,\n dev: false,\n preset,\n baseURL: appBasePath || \"/\",\n minify: true,\n serverDir: \"./server\",\n alias: {\n ...pathAliases,\n ...(fs.existsSync(rrServerBuild)\n ? { \"virtual:react-router/server-build\": rrServerBuild }\n : {}),\n },\n virtual: {\n \"virtual:agents-bundle\": agentsBundleModuleSource,\n },\n routeRules: mcpEmbedStaticAssetRouteRules(appBasePath),\n // For edge presets (cloudflare, deno), bundle all deps — node_modules\n // aren't available at runtime. Netlify/Vercel/Node have node_modules.\n ...(preset.startsWith(\"cloudflare\") || preset.startsWith(\"deno\")\n ? { noExternals: true }\n : {}),\n } as any);\n\n await runNitroBuildPipeline({\n nitro,\n hooks: { prepare, copyPublicAssets, nitroBuild },\n clientDir: path.join(cwd, \"build\", \"client\"),\n publicOutputDir: nitro.options.output.publicDir,\n appBasePath,\n cwd,\n });\n\n if (preset === \"netlify\" || preset === \"vercel\" || preset === \"aws-lambda\") {\n copyInstalledLibsqlNativePackages(nitro.options.output.serverDir);\n }\n\n // Resolve remaining bare npm imports by bundling them into _libs/.\n // Nitro sometimes leaves small packages as externals even with noExternals.\n if (preset.startsWith(\"cloudflare\") || preset.startsWith(\"deno\")) {\n const { execFileSync } = await import(\"child_process\");\n const { createRequire } = await import(\"module\");\n const esbuildBin = (() => {\n try {\n const _req = createRequire(cwd + \"/\");\n const pkg = path.dirname(_req.resolve(\"esbuild/package.json\"));\n const bin = path.join(pkg, \"bin\", \"esbuild\");\n if (fs.existsSync(bin)) return bin;\n } catch {}\n return \"esbuild\";\n })();\n\n // Scan all output files for bare npm imports\n const outputDir =\n nitro.options.output.serverDir || path.join(cwd, \"dist\", \"_worker.js\");\n const bareImports = new Set<string>();\n function scanForBareImports(dir: string) {\n if (!fs.existsSync(dir)) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n scanForBareImports(p);\n continue;\n }\n if (!entry.name.endsWith(\".mjs\") && !entry.name.endsWith(\".js\"))\n continue;\n const code = fs.readFileSync(p, \"utf-8\");\n const matches = code.matchAll(/from\\s*[\"']([a-z@][a-z0-9._\\-/]*)[\"']/g);\n for (const m of matches) {\n const mod = m[1];\n if (mod.startsWith(\"node:\")) continue;\n // Skip Node builtins that are available via nodejs_compat\n const builtins = new Set([\n \"fs\",\n \"path\",\n \"os\",\n \"crypto\",\n \"http\",\n \"https\",\n \"stream\",\n \"url\",\n \"util\",\n \"events\",\n \"buffer\",\n \"net\",\n \"tls\",\n \"assert\",\n \"timers\",\n \"child_process\",\n \"module\",\n \"process\",\n \"sqlite\",\n \"worker_threads\",\n \"querystring\",\n \"zlib\",\n \"vm\",\n \"string_decoder\",\n \"diagnostics_channel\",\n \"async_hooks\",\n \"perf_hooks\",\n \"inspector\",\n ]);\n if (builtins.has(mod)) continue;\n bareImports.add(mod);\n }\n }\n }\n scanForBareImports(outputDir);\n\n // For each bare import, try to bundle it as a standalone module\n if (bareImports.size > 0) {\n const libsDir = path.join(outputDir, \"_libs\");\n fs.mkdirSync(libsDir, { recursive: true });\n for (const mod of bareImports) {\n const outFile = path.join(libsDir, `${mod.replace(/[/@]/g, \"_\")}.mjs`);\n try {\n // Try resolving from both template dir and workspace root\n const nodePaths = [\n path.join(cwd, \"node_modules\"),\n path.resolve(cwd, \"../../node_modules\"),\n ].filter((p) => fs.existsSync(p));\n // Resolve the module — check workspace node_modules and pnpm store\n let resolvedMod = mod;\n const _require = createRequire(cwd + \"/\");\n try {\n const resolved = _require.resolve(mod);\n resolvedMod = resolved;\n } catch {\n // Try from workspace root\n try {\n const wsRequire = createRequire(\n path.resolve(cwd, \"../../package.json\"),\n );\n resolvedMod = wsRequire.resolve(mod);\n } catch {\n // Will fail at esbuild\n }\n }\n // Scan what named imports the consumer expects, then generate\n // explicit re-exports to handle CJS modules properly.\n const neededExports = new Set<string>();\n function findNeededExports(dir: string) {\n if (!fs.existsSync(dir)) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n findNeededExports(p);\n continue;\n }\n if (!entry.name.endsWith(\".mjs\") && !entry.name.endsWith(\".js\"))\n continue;\n const code = fs.readFileSync(p, \"utf-8\");\n // Match: import{foo as bar,baz}from\"<mod>\"\n const escaped = mod.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const re = new RegExp(\n `import\\\\{([^}]+)\\\\}from[\"']${escaped}[\"']`,\n \"g\",\n );\n for (const m2 of code.matchAll(re)) {\n for (const part of m2[1].split(\",\")) {\n const name = part\n .trim()\n .split(/\\s+as\\s+/)[0]\n .trim();\n if (name && /^[a-zA-Z_$]/.test(name)) neededExports.add(name);\n }\n }\n }\n }\n findNeededExports(outputDir);\n\n const entryCode =\n neededExports.size > 0\n ? [\n `import _mod from \"${resolvedMod}\";`,\n `export default _mod;`,\n ...Array.from(neededExports).map(\n (n) =>\n `export const ${n} = _mod.${n} ?? _mod?.default?.${n};`,\n ),\n ].join(\"\\n\")\n : `export * from \"${resolvedMod}\"; export { default } from \"${resolvedMod}\";`;\n\n execFileSync(\n esbuildBin,\n [\n \"--bundle\",\n `--outfile=${outFile}`,\n \"--format=esm\",\n \"--platform=neutral\",\n \"--target=es2022\",\n \"--external:node:*\",\n ],\n {\n input: entryCode,\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n },\n );\n // Rewrite imports in all files to point to the bundled module\n function rewriteImports(dir: string) {\n if (!fs.existsSync(dir)) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n rewriteImports(p);\n continue;\n }\n if (!entry.name.endsWith(\".mjs\") && !entry.name.endsWith(\".js\"))\n continue;\n let code = fs.readFileSync(p, \"utf-8\");\n const relPath = path\n .relative(path.dirname(p), outFile)\n .replace(/\\\\/g, \"/\");\n const importPath = relPath.startsWith(\".\")\n ? relPath\n : \"./\" + relPath;\n const re = new RegExp(\n `from[\"']${mod.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}[\"']`,\n \"g\",\n );\n if (re.test(code)) {\n code = code.replace(re, `from\"${importPath}\"`);\n fs.writeFileSync(p, code);\n }\n }\n }\n rewriteImports(outputDir);\n console.log(`[deploy] Bundled external: ${mod}`);\n } catch {\n console.warn(\n `[deploy] Could not bundle: ${mod} (may not be needed at runtime)`,\n );\n }\n }\n }\n }\n\n // Cloudflare-specific post-build patches\n if (preset.startsWith(\"cloudflare\")) {\n const serverDir2 = nitro.options.output.serverDir;\n const scanDirs = [serverDir2];\n if (serverDir2) {\n const chunksDir = path.join(serverDir2, \"_chunks\");\n const libsDir = path.join(serverDir2, \"_libs\");\n if (fs.existsSync(chunksDir)) scanDirs.push(chunksDir);\n if (fs.existsSync(libsDir)) scanDirs.push(libsDir);\n }\n\n for (const scanDir of scanDirs) {\n if (!scanDir || !fs.existsSync(scanDir)) continue;\n for (const file of fs.readdirSync(scanDir)) {\n if (!file.endsWith(\".mjs\") && !file.endsWith(\".js\")) continue;\n const filePath = path.join(scanDir, file);\n let code = fs.readFileSync(filePath, \"utf-8\");\n let changed = false;\n\n // 1. Rewrite bare Node.js imports to node: prefixed.\n // CF Workers requires the node: prefix for built-in modules.\n const NODE_BUILTINS = [\n \"fs\",\n \"path\",\n \"os\",\n \"crypto\",\n \"http\",\n \"https\",\n \"stream\",\n \"url\",\n \"util\",\n \"events\",\n \"buffer\",\n \"querystring\",\n \"zlib\",\n \"net\",\n \"tls\",\n \"assert\",\n \"timers\",\n \"child_process\",\n \"module\",\n \"process\",\n \"sqlite\",\n \"worker_threads\",\n \"string_decoder\",\n \"diagnostics_channel\",\n \"async_hooks\",\n \"perf_hooks\",\n \"inspector\",\n \"vm\",\n ];\n for (const mod of NODE_BUILTINS) {\n // Match: from\"fs\" or from \"fs\" (but not from\"node:fs\")\n const re = new RegExp(`from\\\\s*[\"']${mod}[\"']`, \"g\");\n if (re.test(code)) {\n code = code.replace(re, `from\"node:${mod}\"`);\n changed = true;\n }\n }\n\n // 2. Patch import.meta.url for createRequire().\n // React Router's server build uses createRequire(import.meta.url)\n // but import.meta.url is undefined on CF Workers.\n if (code.includes(\"import.meta.url\")) {\n code = code.replace(/import\\.meta\\.url/g, '\"file:///worker.mjs\"');\n changed = true;\n }\n\n // 3. Patch setInterval/setTimeout at global scope.\n // CF Workers disallows timers in global scope.\n if (code.includes(\"setInterval\") && !code.includes(\"__timer_shim__\")) {\n const shim =\n \"/* __timer_shim__ */\" +\n \"var __origSetInterval=globalThis.setInterval;\" +\n \"globalThis.setInterval=function(){return{unref(){},ref(){},close(){}}};\";\n const restore =\n \";(function(){if(typeof __origSetInterval!=='undefined')globalThis.setInterval=__origSetInterval})();\";\n code = shim + code + \"\\n\" + restore;\n changed = true;\n }\n\n if (changed) fs.writeFileSync(filePath, code);\n }\n }\n // 3. Create stub modules in _libs/ for native deps that Nitro's rolldown\n // bundler references but can't resolve on CF Workers, and rewrite\n // bare imports to point to the stub files.\n const libsDir2 = path.join(\n serverDir2 || path.join(cwd, \"dist\", \"_worker.js\"),\n \"_libs\",\n );\n if (fs.existsSync(libsDir2)) {\n const NATIVE_STUBS = [\"better-sqlite3\", \"node-pty\", \"cron-parser\"];\n for (const mod of NATIVE_STUBS) {\n const libFiles = fs\n .readdirSync(libsDir2)\n .filter((f) => f.endsWith(\".mjs\"));\n const referencingFiles: string[] = [];\n for (const f of libFiles) {\n const filePath = path.join(libsDir2, f);\n const content = fs.readFileSync(filePath, \"utf-8\");\n if (content.includes(`\"${mod}\"`) || content.includes(`'${mod}'`)) {\n referencingFiles.push(filePath);\n }\n }\n if (referencingFiles.length === 0) continue;\n\n // Create a stub _libs/<mod>.mjs that exports empty defaults\n const stubName = mod.replace(/[/@]/g, \"__\") + \".mjs\";\n const stubPath = path.join(libsDir2, stubName);\n if (!fs.existsSync(stubPath)) {\n fs.writeFileSync(\n stubPath,\n `export default {}; export const watch = () => ({ close() {} });\\n`,\n );\n console.log(`[deploy] Created stub for _libs/${stubName}`);\n }\n\n // Rewrite bare imports in _libs/ and _chunks/ to use the stub\n const escaped = mod.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const importRe = new RegExp(`(from\\\\s*[\"'])${escaped}([\"'])`, \"g\");\n // Scan _libs/ files\n for (const filePath of referencingFiles) {\n let code = fs.readFileSync(filePath, \"utf-8\");\n if (importRe.test(code)) {\n code = code.replace(importRe, `$1./${stubName}$2`);\n fs.writeFileSync(filePath, code);\n console.log(\n `[deploy] Rewrote ${mod} imports in _libs/${path.basename(filePath)}`,\n );\n }\n }\n // Also scan _chunks/ files (they import native deps too)\n const chunksDir2 = path.join(\n serverDir2 || path.join(cwd, \"dist\", \"_worker.js\"),\n \"_chunks\",\n );\n if (fs.existsSync(chunksDir2)) {\n for (const f of fs\n .readdirSync(chunksDir2)\n .filter((f) => f.endsWith(\".mjs\") || f.endsWith(\".js\"))) {\n const filePath = path.join(chunksDir2, f);\n let code = fs.readFileSync(filePath, \"utf-8\");\n if (importRe.test(code)) {\n // From _chunks/, the stub is at ../_libs/<stubName>\n code = code.replace(importRe, `$1../_libs/${stubName}$2`);\n fs.writeFileSync(filePath, code);\n console.log(`[deploy] Rewrote ${mod} imports in _chunks/${f}`);\n }\n }\n }\n }\n }\n\n console.log(\n \"[deploy] Patched bare Node imports, timer calls, and route finder for CF Workers\",\n );\n }\n\n await nitro.close();\n console.log(`[deploy] Nitro build complete for preset \"${preset}\".`);\n}\n\nasync function main() {\n console.log(`[deploy] Building for ${preset}...`);\n\n switch (preset) {\n case \"cloudflare_pages\":\n case \"cloudflare-pages\":\n // Cloudflare Workers require a single-file bundle that wrangler can deploy.\n // Nitro's native presets produce split chunks that wrangler can't upload\n // as multi-module Workers. Use the custom esbuild-based bundler.\n await buildCloudflarePages();\n break;\n default:\n // All other presets (netlify, vercel, deno_deploy, aws-lambda, etc.)\n // are handled natively by Nitro's build API.\n await buildWithNitro();\n break;\n }\n}\n\nif (\n process.argv[1] &&\n path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url))\n) {\n await main();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n/**\n * Post-build step for deploying agent-native apps to edge/serverless targets.\n *\n * When NITRO_PRESET is set, this script:\n * 1. Takes the React Router build output (build/client/ + build/server/)\n * 2. Generates a platform-specific server entry point\n * 3. Bundles everything with esbuild into the target format\n *\n * Supported presets:\n * - cloudflare_pages: Outputs dist/ with _worker.js for Cloudflare Pages\n *\n * Usage: node deploy/build.js (called automatically by `agent-native build`)\n */\n\nimport path from \"path\";\nimport fs from \"fs\";\nimport { execFileSync } from \"child_process\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\nimport {\n discoverApiRoutes,\n discoverPlugins,\n discoverActionFiles,\n getMissingDefaultPlugins,\n DEFAULT_PLUGIN_REGISTRY,\n type DiscoveredRoute,\n type DiscoveredAction,\n} from \"./route-discovery.js\";\nimport {\n getWorkspaceCoreExports,\n type WorkspaceCoreExports,\n} from \"./workspace-core.js\";\nimport { generateActionRegistryForProject } from \"../vite/action-types-plugin.js\";\nimport { mcpEmbedStaticAssetRouteRules } from \"../shared/mcp-embed-headers.js\";\nimport { AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE } from \"../shared/social-meta.js\";\nimport {\n collectImmutableAssetPaths,\n IMMUTABLE_ASSET_CACHE_CONTROL,\n IMMUTABLE_ASSET_CACHE_HEADERS,\n prefixAssetPath,\n} from \"./immutable-assets.js\";\n\nconst cwd = process.cwd();\nconst preset = process.env.NITRO_PRESET || \"node\";\nconst DEFAULT_SSR_CACHE_CONTROL =\n \"public, max-age=5, stale-while-revalidate=604800, stale-if-error=3600\";\n\nfunction normalizeConfiguredAppBasePath(): string {\n const raw = process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH;\n if (!raw || raw === \"/\") return \"\";\n const trimmed = String(raw).trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n const normalized = trimmed.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n return normalized ? `/${normalized}` : \"\";\n}\n\n/** Plugins that require Node.js runtime and cannot run on edge/serverless */\nconst NODE_ONLY_PLUGINS = new Set([\n \"terminal\", // PTY requires child_process\n // @sentry/node ships node:fs / node:async_hooks bindings that don't load\n // on workerd / Cloudflare Workers. Templates running on edge presets can\n // mount their own edge-compatible Sentry wrapper if they want server\n // observability there; the framework default is the Node SDK.\n \"sentry\",\n]);\n\nfunction isNodeOnlyPlugin(filePath: string): boolean {\n const basename = path.basename(filePath, path.extname(filePath));\n return NODE_ONLY_PLUGINS.has(basename);\n}\n\ntype RouteRules = Record<string, { headers?: Record<string, string> }>;\n\nfunction addImmutableAssetRouteRule(\n routeRules: RouteRules,\n pathname: string,\n): void {\n const existing = routeRules[pathname] ?? {};\n routeRules[pathname] = {\n ...existing,\n headers: {\n ...(existing.headers ?? {}),\n ...IMMUTABLE_ASSET_CACHE_HEADERS,\n },\n };\n}\n\nexport function addImmutableAssetRouteRulesForClientBuild(\n routeRules: RouteRules,\n clientDir: string,\n appBasePath = \"\",\n): void {\n for (const assetPath of collectImmutableAssetPaths(clientDir)) {\n addImmutableAssetRouteRule(routeRules, assetPath);\n const mountedPath = prefixAssetPath(assetPath, appBasePath);\n if (mountedPath !== assetPath) {\n addImmutableAssetRouteRule(routeRules, mountedPath);\n }\n }\n}\n\n/**\n * Generate the worker entry source code that wires up H3 + React Router SSR.\n *\n * If a workspace core is present (monorepo with `agent-native.workspaceCore`\n * configured and the named package resolves), any plugin slot that the\n * workspace core exports is imported from there instead of from\n * `@agent-native/core/server`. This is the middle layer of the three-layer\n * inheritance model: app local > workspace core > framework default.\n */\nexport function generateWorkerEntry(\n routes: DiscoveredRoute[],\n pluginPaths: string[],\n defaultPluginStems: string[] = [],\n actions: DiscoveredAction[] = [],\n workspaceCore: WorkspaceCoreExports | null = null,\n immutableAssetPaths: string[] = [],\n): string {\n const routeImports: string[] = [];\n const routeRegistrations: string[] = [];\n\n for (let i = 0; i < routes.length; i++) {\n const r = routes[i];\n const varName = `route_${i}`;\n routeImports.push(`import ${varName} from ${JSON.stringify(r.absPath)};`);\n routeRegistrations.push(\n ` app.on(${JSON.stringify(r.method.toUpperCase())}, ${JSON.stringify(r.route)}, ${varName});`,\n );\n if (r.method.toLowerCase() === \"get\") {\n routeRegistrations.push(\n ` app.on(\"HEAD\", ${JSON.stringify(r.route)}, defineEventHandler(async (event) => {\n const originalReq = event.req;\n event.req = requestWithMethod(event.req, \"GET\");\n try {\n const result = await ${varName}(event);\n const response = result instanceof Response ? result : toResponse(result, event);\n return new Response(null, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } finally {\n event.req = originalReq;\n }\n }));`,\n );\n }\n }\n\n // Action route imports and registrations\n const actionImports: string[] = [];\n const actionRegistrations: string[] = [];\n for (let i = 0; i < actions.length; i++) {\n const a = actions[i];\n const varName = `action_${i}`;\n actionImports.push(`import ${varName} from ${JSON.stringify(a.absPath)};`);\n const routePath = `/_agent-native/actions/${a.name}`;\n actionRegistrations.push(\n ` app.on(${JSON.stringify(a.method.toUpperCase())}, ${JSON.stringify(routePath)}, defineEventHandler(async (event) => {\n const params = ${a.method === \"get\" ? \"Object.fromEntries(event.url.searchParams)\" : \"(await readBody(event)) ?? {}\"};\n try {\n const result = await ${varName}.run(params);\n if (typeof result === \"string\") { try { return JSON.parse(result); } catch { return result; } }\n return result;\n } catch (err) {\n return new Response(JSON.stringify({ error: err?.message || \"Action failed\" }), { status: err?.message?.startsWith(\"Invalid action parameters\") ? 400 : 500, headers: { \"Content-Type\": \"application/json\" } });\n }\n }));`,\n );\n }\n\n // Filter out Node-only plugins\n const edgePlugins = pluginPaths.filter((p) => !isNodeOnlyPlugin(p));\n const pluginImports: string[] = [];\n const pluginCalls: string[] = [];\n\n for (let i = 0; i < edgePlugins.length; i++) {\n const varName = `plugin_${i}`;\n pluginImports.push(\n `import ${varName} from ${JSON.stringify(edgePlugins[i])};`,\n );\n pluginCalls.push(` if (typeof ${varName} === \"function\") {\n await ${varName}(nitroApp);\n }`);\n }\n\n // Auto-mounted default plugins (for slots the template doesn't override\n // locally). For each slot, prefer a workspace-core export over the\n // @agent-native/core default, if the workspace core provides one.\n const edgeDefaultStems = defaultPluginStems.filter(\n (stem) => !NODE_ONLY_PLUGINS.has(stem),\n );\n for (let i = 0; i < edgeDefaultStems.length; i++) {\n const stem = edgeDefaultStems[i];\n const varName = `defaultPlugin_${i}`;\n\n const workspaceExportName = workspaceCore?.plugins?.[stem as never];\n if (workspaceCore && workspaceExportName) {\n // Workspace-core layer wins over the framework default.\n pluginImports.push(\n `import { ${workspaceExportName} as ${varName} } from ${JSON.stringify(\n `${workspaceCore.packageName}/server`,\n )};`,\n );\n } else {\n // Fall back to the framework default from @agent-native/core.\n const defaultExportName = DEFAULT_PLUGIN_REGISTRY[stem];\n if (!defaultExportName) continue;\n pluginImports.push(\n `import { ${defaultExportName} as ${varName} } from \"@agent-native/core/server\";`,\n );\n }\n pluginCalls.push(` if (typeof ${varName} === \"function\") {\n await ${varName}(nitroApp);\n }`);\n }\n\n return `\n// Auto-generated worker entry point for ${preset}\nimport { H3, defineEventHandler, readBody, toResponse } from \"h3\";\nimport { createRequestHandler } from \"react-router\";\nimport * as serverBuild from \"./server-build.js\";\n\nfunction normalizeAppBasePath(value) {\n if (!value || value === \"/\") return \"\";\n const trimmed = String(value).trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n return \"/\" + trimmed.replace(/^\\\\/+/, \"\").replace(/\\\\/+$/, \"\");\n}\n\nfunction getAppBasePath() {\n return normalizeAppBasePath(\n globalThis.process?.env?.VITE_APP_BASE_PATH ||\n globalThis.process?.env?.APP_BASE_PATH,\n );\n}\n\nfunction stripAppBasePath(pathname) {\n const basePath = getAppBasePath();\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(basePath + \"/\")) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nfunction isApiPath(pathname) {\n return pathname === \"/api\" || pathname.startsWith(\"/api/\");\n}\n\nfunction isFrameworkPath(pathname) {\n return (\n pathname === \"/_agent-native\" || pathname.startsWith(\"/_agent-native/\")\n );\n}\n\nfunction requestWithMountedApiPrefixStripped(request) {\n const basePath = getAppBasePath();\n if (!basePath) return request;\n const url = new URL(request.url);\n const strippedPathname = stripAppBasePath(url.pathname);\n if (strippedPathname === url.pathname) {\n return request;\n }\n if (!isApiPath(strippedPathname) && !isFrameworkPath(strippedPathname)) {\n return request;\n }\n url.pathname = strippedPathname;\n return new Request(url, request);\n}\n\nfunction prefixMountedPath(path, basePath) {\n if (!basePath || !path.startsWith(\"/\") || path.startsWith(\"//\")) return path;\n if (path === basePath || path.startsWith(basePath + \"/\")) return path;\n return basePath + path;\n}\n\nfunction prefixMountedHtml(html, basePath) {\n if (!basePath) return html;\n return html\n .replace(\n /\\\\b(href|src|action|formaction|poster)=([\"'])(\\\\/(?!\\\\/)[^\"']*)\\\\2/g,\n (_match, attr, quote, path) =>\n attr + \"=\" + quote + prefixMountedPath(path, basePath) + quote,\n )\n .replace(/url\\\\(([\"']?)(\\\\/(?!\\\\/)[^)'\" ]+)\\\\1\\\\)/g, (_match, quote, path) => {\n const q = quote || \"\";\n return \"url(\" + q + prefixMountedPath(path, basePath) + q + \")\";\n });\n}\n\nfunction firstNonEmpty() {\n for (const value of arguments) {\n const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n if (trimmed) return trimmed;\n }\n}\n\nfunction getSentryClientConfigScript() {\n const env = globalThis.process?.env || {};\n const key = firstNonEmpty(env.SENTRY_CLIENT_KEY, env.VITE_SENTRY_CLIENT_KEY);\n const projectId = firstNonEmpty(\n env.SENTRY_PROJECT_ID,\n env.VITE_SENTRY_PROJECT_ID,\n );\n const host = firstNonEmpty(\n env.SENTRY_INGEST_HOST,\n env.VITE_SENTRY_INGEST_HOST,\n );\n const dsn =\n firstNonEmpty(\n env.SENTRY_CLIENT_DSN,\n env.VITE_SENTRY_CLIENT_DSN,\n env.VITE_SENTRY_DSN,\n env.SENTRY_DSN,\n ) || (key && projectId && host ? \"https://\" + key + \"@\" + host + \"/\" + projectId : undefined);\n if (!dsn) return null;\n const config = {\n sentryDsn: dsn,\n sentryEnvironment:\n firstNonEmpty(\n env.SENTRY_ENVIRONMENT,\n env.NETLIFY_CONTEXT,\n env.VERCEL_ENV,\n env.NODE_ENV,\n ) || \"production\",\n };\n return (\n '<script data-agent-native-sentry-config>' +\n 'window.__AGENT_NATIVE_CONFIG__=Object.assign({},window.__AGENT_NATIVE_CONFIG__,' +\n JSON.stringify(config) +\n \");</script>\"\n );\n}\n\nfunction injectHeadScript(html, script) {\n if (!script) return html;\n const headCloseIdx = html.indexOf(\"</head>\");\n if (headCloseIdx === -1) return html;\n return html.slice(0, headCloseIdx) + script + html.slice(headCloseIdx);\n}\n\nconst DEFAULT_SSR_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_CACHE_CONTROL)};\nconst IMMUTABLE_ASSET_CACHE_CONTROL = ${JSON.stringify(IMMUTABLE_ASSET_CACHE_CONTROL)};\nconst IMMUTABLE_ASSET_PATHS = new Set(${JSON.stringify(\n [...new Set(immutableAssetPaths)].sort(),\n )});\nconst AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE = ${JSON.stringify(\n AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE,\n )};\nconst OG_IMAGE_META_RE = /<meta\\\\b(?=[^>]*\\\\bproperty=([\"'])og:image\\\\1)[^>]*>/i;\nconst TWITTER_CARD_META_RE = /<meta\\\\b(?=[^>]*\\\\bname=([\"'])twitter:card\\\\1)[^>]*>/i;\nconst TWITTER_IMAGE_META_RE = /<meta\\\\b(?=[^>]*\\\\bname=([\"'])twitter:image\\\\1)[^>]*>/i;\n\nfunction injectDefaultSocialImageMeta(html) {\n const headCloseIdx = html.indexOf(\"</head>\");\n if (headCloseIdx === -1) return html;\n\n const hasAnySocialImage =\n OG_IMAGE_META_RE.test(html) || TWITTER_IMAGE_META_RE.test(html);\n const tags = [];\n\n if (!hasAnySocialImage) {\n tags.push('<meta property=\"og:image\" content=\"' + AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE + '\">');\n }\n if (!TWITTER_CARD_META_RE.test(html)) {\n tags.push('<meta name=\"twitter:card\" content=\"summary_large_image\">');\n }\n if (!hasAnySocialImage) {\n tags.push('<meta name=\"twitter:image\" content=\"' + AGENT_NATIVE_DEFAULT_SOCIAL_IMAGE + '\">');\n }\n\n if (tags.length === 0) return html;\n return html.slice(0, headCloseIdx) + tags.join(\"\") + html.slice(headCloseIdx);\n}\n\nfunction applyDefaultSsrCacheHeader(headers, status) {\n if (headers.has(\"cache-control\")) return;\n if (status < 200 || status >= 400) return;\n\n const contentType = (headers.get(\"content-type\") || \"\").toLowerCase();\n if (!contentType.includes(\"text/html\")) return;\n\n headers.set(\"cache-control\", DEFAULT_SSR_CACHE_CONTROL);\n}\n\nfunction isImmutableAssetRequest(request) {\n const pathname = stripAppBasePath(new URL(request.url).pathname);\n return IMMUTABLE_ASSET_PATHS.has(pathname);\n}\n\nfunction applyImmutableAssetCacheHeaders(response, request) {\n if (!isImmutableAssetRequest(request)) return response;\n if (!((response.status >= 200 && response.status < 300) || response.status === 304)) {\n return response;\n }\n const headers = new Headers(response.headers);\n headers.set(\"Cache-Control\", IMMUTABLE_ASSET_CACHE_CONTROL);\n headers.set(\"CDN-Cache-Control\", IMMUTABLE_ASSET_CACHE_CONTROL);\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n}\n\nasync function rewriteMountedResponse(response, basePath) {\n const sentryClientConfigScript = getSentryClientConfigScript();\n const headers = new Headers(response.headers);\n applyDefaultSsrCacheHeader(headers, response.status);\n\n const location = headers.get(\"location\");\n if (location?.startsWith(\"/\") && !location.startsWith(\"//\")) {\n headers.set(\"location\", prefixMountedPath(location, basePath));\n }\n\n const contentType = headers.get(\"content-type\") || \"\";\n if (!contentType.toLowerCase().includes(\"text/html\") || !response.body) {\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n }\n\n const html = await response.text();\n headers.delete(\"content-length\");\n return new Response(\n injectHeadScript(\n injectDefaultSocialImageMeta(prefixMountedHtml(html, basePath)),\n sentryClientConfigScript,\n ),\n {\n status: response.status,\n statusText: response.statusText,\n headers,\n },\n );\n}\n\nfunction requestWithMethod(request, method) {\n return new Request(request.url, {\n method,\n headers: request.headers,\n signal: request.signal,\n });\n}\n\nfunction requestWithPathname(request, pathname) {\n const url = new URL(request.url);\n if (url.pathname === pathname) return request;\n url.pathname = pathname;\n return new Request(url, request);\n}\n\n// API route handlers\n${routeImports.join(\"\\n\")}\n\n// Action handlers (auto-discovered from actions/)\n${actionImports.join(\"\\n\")}\n\n// Server plugins\n${pluginImports.join(\"\\n\")}\n\nlet _handler;\n\nasync function getHandler() {\n if (_handler) return _handler;\n\n const app = new H3();\n\n // Build a fake nitroApp surface so framework plugins (which expect\n // \\`nitroApp.h3[\"~middleware\"]\\`) can register routes via getH3App().\n const noop = () => {};\n const nitroApp = {\n h3: app,\n hooks: { hook: noop, callHook: noop, hookOnce: noop },\n captureError: noop,\n };\n\n // CORS — applied as global middleware via .use(handler)\n app.use(defineEventHandler((event) => {\n if (event.req.method === \"OPTIONS\") {\n return new Response(null, {\n status: 204,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF,X-Agent-Native-Embed-Target\",\n },\n });\n }\n }));\n\n // Run plugins — they call getH3App(nitroApp).use(path, handler) which\n // pushes path-prefix middleware onto app[\"~middleware\"].\n${pluginCalls.join(\"\\n\")}\n\n // Register API routes\n${routeRegistrations.join(\"\\n\")}\n\n // Register action routes (/_agent-native/actions/*)\n${actionRegistrations.join(\"\\n\")}\n\n // SSR catch-all for React Router\n const rrHandler = createRequestHandler(() => serverBuild);\n app.all(\"/**\", defineEventHandler(async (event) => {\n const basePath = getAppBasePath();\n const p = stripAppBasePath(new URL(event.req.url).pathname);\n if (\n p.startsWith(\"/.well-known/\") ||\n p.startsWith(\"/_agent-native/\") ||\n isApiPath(p) ||\n p === \"/favicon.ico\" ||\n p === \"/favicon.png\" ||\n (/\\\\.\\\\w+$/.test(p) && !p.endsWith(\".data\"))\n ) {\n return new Response(null, { status: 404 });\n }\n const request = requestWithPathname(event.req, p);\n if (event.req.method === \"HEAD\") {\n const getRequest = requestWithMethod(request, \"GET\");\n const response = await rrHandler(getRequest);\n return rewriteMountedResponse(\n new Response(null, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }),\n basePath,\n );\n }\n return rewriteMountedResponse(await rrHandler(request), basePath);\n }));\n\n _handler = app.fetch.bind(app);\n return _handler;\n}\n\nexport default {\n async fetch(request, env, ctx) {\n // Expose env and ctx bindings globally for compatibility\n if (ctx) globalThis.__cf_ctx = ctx;\n if (env) {\n globalThis.process = globalThis.process || { env: {} };\n globalThis.process.env = globalThis.process.env || {};\n // Expose D1/KV/R2 bindings on globalThis.__cf_env for the db layer\n globalThis.__cf_env = env;\n for (const [key, value] of Object.entries(env)) {\n if (typeof value === \"string\") {\n globalThis.process.env[key] = value;\n }\n }\n }\n\n // Try serving static assets first (CF Pages advanced mode).\n // Only attempt this for GET/HEAD — the ASSETS binding is a static file\n // server and returns 405 for any other method, which would short-circuit\n // API calls (PUT/POST/DELETE to /_agent-native/*) before they reach our\n // h3 middleware.\n if (env?.ASSETS && (request.method === \"GET\" || request.method === \"HEAD\")) {\n try {\n const assetResponse = await env.ASSETS.fetch(request);\n if (assetResponse.status !== 404) {\n return applyImmutableAssetCacheHeaders(assetResponse, request);\n }\n } catch {\n // Asset fetch failed — fall through to SSR\n }\n }\n\n const handler = await getHandler();\n return handler(requestWithMountedApiPrefixStripped(request));\n }\n};\n`;\n}\n\n/**\n * Build for Cloudflare Pages.\n * Output structure:\n * dist/\n * _worker.js (bundled worker entry)\n * assets/ (static client assets)\n */\nasync function buildCloudflarePages() {\n generateActionRegistryForProject(cwd);\n\n const buildDir = path.join(cwd, \"build\");\n const clientDir = path.join(buildDir, \"client\");\n const serverDir = path.join(buildDir, \"server\");\n const distDir = path.join(cwd, \"dist\");\n\n // Verify build output exists\n if (!fs.existsSync(clientDir) || !fs.existsSync(serverDir)) {\n console.error(\n \"Build output not found at build/client/ and build/server/. Run react-router build first.\",\n );\n process.exit(1);\n }\n\n // Clean dist\n if (fs.existsSync(distDir)) {\n fs.rmSync(distDir, { recursive: true });\n }\n fs.mkdirSync(distDir, { recursive: true });\n\n // Copy client assets to dist/\n copyDir(clientDir, distDir);\n\n // Exclude _worker.js from being served as a public asset\n fs.writeFileSync(path.join(distDir, \".assetsignore\"), \"_worker.js\\n\");\n\n // Write a package.json inside _worker.js/ to tell wrangler this is a\n // pre-bundled ES module worker — skip re-bundling our esbuild output.\n fs.mkdirSync(path.join(distDir, \"_worker.js\"), { recursive: true });\n fs.writeFileSync(\n path.join(distDir, \"_worker.js\", \"package.json\"),\n JSON.stringify({ main: \"index.js\", type: \"module\" }),\n );\n\n // Create empty stub for native modules that wrangler's bundler needs to resolve\n const stubsDir = path.join(distDir, \"_worker.js\", \"stubs\");\n fs.mkdirSync(stubsDir, { recursive: true });\n fs.writeFileSync(\n path.join(stubsDir, \"empty.js\"),\n \"export default {}; export const watch = () => ({ close() {} }); export const Database = class {};\\n\",\n );\n\n // Discover routes, plugins, actions, and the workspace core (if any).\n const routes = await discoverApiRoutes(cwd);\n const plugins = await discoverPlugins(cwd);\n const actions = await discoverActionFiles(cwd);\n const missingDefaults = await getMissingDefaultPlugins(cwd);\n const workspaceCore = await getWorkspaceCoreExports(cwd);\n\n const workspaceSlotCount = workspaceCore\n ? Object.keys(workspaceCore.plugins).length\n : 0;\n console.log(\n `[deploy] ${routes.length} API routes, ${actions.length} actions, ${plugins.length} plugins (${plugins.filter((p) => isNodeOnlyPlugin(p)).length} skipped as Node-only), ${missingDefaults.length} auto-mounted defaults${workspaceCore ? `, workspace-core ${workspaceCore.packageName} (${workspaceSlotCount} plugin slots)` : \"\"}`,\n );\n\n // Generate the worker entry\n const immutableAssetPaths = collectImmutableAssetPaths(clientDir);\n const entrySource = generateWorkerEntry(\n routes,\n plugins,\n missingDefaults,\n actions,\n workspaceCore,\n immutableAssetPaths,\n );\n\n // Create _worker.js output directory\n const workerOutDir = path.join(distDir, \"_worker.js\");\n fs.mkdirSync(workerOutDir, { recursive: true });\n\n // Write the worker entry\n const entryFile = path.join(workerOutDir, \"index.js\");\n\n // Rewrite the server-build import to point at the copied files\n const adjustedEntry = entrySource.replace(\n `import * as serverBuild from \"./server-build.js\";`,\n `import * as serverBuild from \"./server/index.js\";`,\n );\n\n // Write a temp file for esbuild to bundle everything into a single worker entry.\n // The server build (React Router SSR) is copied to tmp so esbuild can resolve it.\n const tmpDir = path.join(cwd, \".deploy-tmp\");\n fs.mkdirSync(tmpDir, { recursive: true });\n // Name the entry \"index.js\" so esbuild outputs index.js in the outdir,\n // matching the _worker.js/index.js entry point that Cloudflare Pages expects.\n const tmpEntry = path.join(tmpDir, \"index.js\");\n fs.writeFileSync(tmpEntry, adjustedEntry);\n\n // Copy server build files so esbuild can resolve the import\n copyDir(serverDir, path.join(tmpDir, \"server\"));\n\n // Create a require shim so CJS require(\"fs\") calls resolve via ESM imports.\n // This is injected via esbuild --inject to replace its broken __require shim.\n fs.writeFileSync(\n path.join(tmpDir, \"_require-shim.js\"),\n generateRequireShim(),\n );\n\n // Create stub modules for native/Node-only deps that can't run on Workers.\n // These get resolved by esbuild instead of the real modules, avoiding bundling\n // native code that would fail on the Workers runtime.\n const stubModules = [\n \"better-sqlite3\",\n \"node-pty\",\n \"chokidar\",\n \"fsevents\",\n \"dotenv\",\n \"@anthropic-ai/sdk\",\n ];\n const stubDir = path.join(tmpDir, \"node_modules\");\n for (const mod of stubModules) {\n const modDir = path.join(stubDir, mod);\n fs.mkdirSync(modDir, { recursive: true });\n fs.writeFileSync(\n path.join(modDir, \"index.js\"),\n `export default {}; export const watch = () => ({ close() {} });`,\n );\n fs.writeFileSync(\n path.join(modDir, \"package.json\"),\n JSON.stringify({ name: mod, main: \"index.js\", type: \"module\" }),\n );\n }\n\n const esbuildBin = findEsbuild();\n\n // Externalize node builtins (both bare and node: prefixed) — the require\n // shim handles bare ones. Also alias every `node:*` specifier to its bare\n // name so esbuild emits `import from \"fs\"` everywhere, never\n // `import from \"node:fs\"`. CF Pages Functions (wrangler 3.x, nodejs_compat\n // v1) rejects the `node:` prefix in chunks with:\n // No such module \"node:fs\" imported from chunks/...\n // The alias is the authoritative fix; the post-build strip stays as belt\n // & suspenders in case esbuild emits a node: string via some other path.\n const builtinNames = getNodeBuiltinNames();\n // Only externalize bare names. node:* externals would otherwise pin\n // the prefix in output; instead we alias node:* → bare so anything that\n // resolves past alias land as bare externals.\n const nodeExternals = builtinNames.map((n) => `--external:${n}`);\n const nodeAliases = builtinNames.map((n) => `--alias:node:${n}=${n}`);\n\n // Hard externalize large client-only / node-only libraries so they don't\n // bloat the edge worker. These are never executed in the CF Pages runtime\n // — mermaid/excalidraw render in the browser, pdf-parse and @google/genai\n // run from node-only action scripts. Without this, slides' bundle hits\n // the 25 MiB Pages Functions limit.\n const heavyClientExternals = [\n \"mermaid\",\n \"@excalidraw/excalidraw\",\n \"@excalidraw/mermaid-to-excalidraw\",\n \"pdf-parse\",\n \"pdfjs-dist\",\n \"@google/genai\",\n \"chartjs-node-canvas\",\n \"@napi-rs/canvas\",\n ].map((p) => `--external:${p}`);\n\n execFileSync(\n esbuildBin,\n [\n tmpEntry,\n \"--bundle\",\n \"--format=esm\",\n \"--target=es2022\",\n // browser platform for npm resolution; node builtins externalized separately\n \"--platform=browser\",\n \"--minify\",\n // Single-file bundle (no --splitting). CF Pages Functions' deploy\n // validator fails to load chunked _worker.js/ bundles even when the\n // chunks contain only bare node-builtin imports (wrangler 3.101.0\n // + nodejs_compat v2). Matches main's working config.\n `--outdir=${workerOutDir}`,\n \"--conditions=workerd,worker,import\",\n // The ssr-handler imports a virtual module that only exists at dev time\n \"--external:virtual:react-router/server-build\",\n // Banner: override the __require shim that esbuild generates for CJS modules.\n // This provides a real require() backed by ESM imports of node builtins.\n // Without this, CF Workers rejects the bundle because esbuild's default\n // __require shim throws \"Dynamic require of X is not supported\".\n `--banner:js=${generateRequireShim()}`,\n // Externalize node: builtins — CF Workers runtime provides them\n ...nodeExternals,\n ...heavyClientExternals,\n // Rewrite node:* -> bare names so chunks never contain node: imports\n ...nodeAliases,\n ],\n { stdio: \"inherit\", cwd },\n );\n\n // Clean up tmp\n fs.rmSync(tmpDir, { recursive: true });\n\n // Rewrite the external virtual import to a local stub.\n // esbuild externalizes \"virtual:react-router/server-build\" (used by ssr-handler),\n // but wrangler re-bundles and chokes on it. Replace the import with a no-op stub.\n const virtualStub = path.join(workerOutDir, \"chunks\", \"_virtual-stub.js\");\n fs.mkdirSync(path.dirname(virtualStub), { recursive: true });\n fs.writeFileSync(virtualStub, \"export default {};\\n\");\n\n // Post-build patches — apply to ALL .js files in the worker output directory\n // (entry + chunks) since code can land in any chunk after splitting.\n const allJsFiles = getAllJsFiles(workerOutDir);\n for (const jsFile of allJsFiles) {\n let code = fs.readFileSync(jsFile, \"utf-8\");\n const isEntry = path.basename(jsFile) === \"index.js\";\n\n // Strip \"node:\" prefix from all imports/requires. Cloudflare Pages\n // Functions runs under nodejs_compat v1, which exposes builtins as\n // bare names (\"fs\") and rejects \"node:fs\" at worker init:\n // No such module \"node:fs\" imported from chunks/...\n // (Workers-on-the-edge use v2 and require the prefix; Pages lags.)\n // Preserve the original quote char (single vs double) when rewriting —\n // esbuild's minifier sometimes places `import('node:buffer')` inside a\n // double-quoted string literal; swapping to double quotes breaks the\n // outer literal and produces `Unexpected identifier 'buffer'`.\n code = code.replace(\n /\\bfrom(\\s*)([\"'])node:([^\"']+)\\2/g,\n (_, ws, q, mod) => `from${ws}${q}${mod}${q}`,\n );\n code = code.replace(\n /\\bimport(\\s*)([\"'])node:([^\"']+)\\2/g,\n (_, ws, q, mod) => `import${ws}${q}${mod}${q}`,\n );\n // Strip `node:` prefix from any string literal that names a node\n // builtin. Covers dynamic imports, require(), getBuiltinModule(),\n // and minified wrappers like `Ut(\"node:fs\")` that Nitro/h3 emit.\n // Pages' loader scans chunks for `\"node:*\"` literals and fails with\n // 'No such module \"node:fs\"' whether or not the string is reached\n // at runtime. Scoping to known builtins avoids touching user data.\n // Sorted longest-first so `fs/promises` matches before `fs`.\n const builtinsPattern = [...NODE_BUILTINS]\n .sort((a, b) => b.length - a.length)\n .join(\"|\");\n const builtinRe = new RegExp(`([\"'])node:(${builtinsPattern})\\\\1`, \"g\");\n code = code.replace(\n builtinRe,\n (_, q: string, mod: string) => `${q}${mod}${q}`,\n );\n\n // Rewrite virtual:react-router/server-build imports to the local stub.\n // The generated entry handles SSR directly; this import is dead code from ssr-handler.\n const relStub = path\n .relative(path.dirname(jsFile), virtualStub)\n .replace(/\\\\/g, \"/\");\n code = code.replace(\n /[\"']virtual:react-router\\/server-build[\"']/g,\n `\"./${relStub}\"`,\n );\n\n // Patch createRequire(import.meta.url) — import.meta.url is undefined in CF Workers.\n // Matches both `from \"module\"` and `from \"node:module\"` — with the node:\n // prefix preserved (for nodejs_compat_v2), the latter is what esbuild now emits.\n code = code.replace(\n /\\bimport\\s*\\{\\s*createRequire\\s+as\\s+([\\w$]+)\\s*\\}\\s*from\\s*[\"'](?:node:)?module[\"']\\s*;/g,\n \"var $1 = function() { return typeof require !== 'undefined' ? require : function(m) { throw new Error('require not supported: ' + m); }; };\",\n );\n\n // Patch setInterval/setTimeout at module scope — CF Workers disallows timers in global scope.\n // Some dependencies (e.g. Anthropic SDK rate limiter) call setInterval at module init.\n // With code splitting, chunks evaluate before the entry, so the shim must be in every file.\n // The restore only happens in the entry's fetch() handler.\n if (!code.includes(\"__origSetInterval\")) {\n const timerShim = [\n \"var __origSetInterval=globalThis.setInterval;\",\n \"globalThis.setInterval=function(){return{unref(){},ref(){},close(){}}};\",\n ].join(\"\");\n code = timerShim + code;\n }\n if (isEntry) {\n const timerRestore =\n \"if(__origSetInterval)globalThis.setInterval=__origSetInterval;\";\n code = code.replace(\n /async fetch\\(request,\\s*env,\\s*ctx\\)\\s*\\{/,\n (match) => match + timerRestore,\n );\n }\n\n fs.writeFileSync(jsFile, code);\n }\n\n // Report size\n const entrySize = fs.statSync(entryFile).size;\n const totalSize = getDirSize(workerOutDir);\n const chunkCount = allJsFiles.length - 1; // exclude entry\n console.log(\n `[deploy] Cloudflare Pages output written to dist/ (entry: ${(entrySize / 1024).toFixed(0)}KB, ${chunkCount} chunks, total: ${(totalSize / 1024 / 1024).toFixed(1)}MB)`,\n );\n}\n\nconst NODE_BUILTINS = [\n \"assert\",\n \"async_hooks\",\n \"buffer\",\n \"child_process\",\n \"cluster\",\n \"console\",\n \"constants\",\n \"crypto\",\n \"dgram\",\n \"diagnostics_channel\",\n \"dns\",\n \"domain\",\n \"events\",\n \"fs\",\n \"fs/promises\",\n \"http\",\n \"http2\",\n \"https\",\n \"inspector\",\n \"module\",\n \"net\",\n \"os\",\n \"path\",\n \"perf_hooks\",\n \"process\",\n \"punycode\",\n \"querystring\",\n \"readline\",\n \"repl\",\n \"sqlite\",\n \"stream\",\n \"stream/web\",\n \"string_decoder\",\n \"sys\",\n \"timers\",\n \"tls\",\n \"trace_events\",\n \"tty\",\n \"url\",\n \"util\",\n \"v8\",\n \"vm\",\n \"wasi\",\n \"worker_threads\",\n \"zlib\",\n];\n\nexport function getNodeBuiltinNames(): string[] {\n return NODE_BUILTINS;\n}\n\n/**\n * Generate a require() shim that bridges CJS require(\"fs\") calls to ESM imports.\n * Injected via esbuild --inject so CJS deps work on Workers runtime.\n */\nfunction generateRequireShim(): string {\n // Shim the full set of node builtins so any CJS `require(\"X\")` from a\n // transitive dep resolves to the imported ESM module. Anything less is\n // whack-a-mole: terminal helpers pull in `tty`, transformer libs pull in\n // `worker_threads`, etc. — every miss fails deploy with a generic\n // \"Cannot require: <name>\" thrown by this shim itself.\n //\n // Some builtins exist only as runtime polyfills under nodejs_compat\n // (some are no-op stubs). That's fine — the `import` returns whatever\n // the runtime provides; failures only surface when callers actually USE\n // the unsupported APIs at request time, which is the same as if the\n // shim wasn't there.\n //\n // `sqlite` is excluded because it's Node 22+ only and Workers'\n // nodejs_compat doesn't expose it yet — importing it makes the whole\n // bundle fail to load.\n const shimmed = NODE_BUILTINS.filter((name) => name !== \"sqlite\");\n\n // Bare module names — CF Pages Functions runs under nodejs_compat v1,\n // which rejects \"node:fs\" and only accepts \"fs\". The post-build pass in\n // buildCloudflarePages() also strips any `node:` prefix that esbuild or\n // dependencies emit elsewhere.\n const imports = shimmed\n .map((m) => `import __${m.replace(\"/\", \"_\")} from \"${m}\";`)\n .join(\"\");\n // Only bare-name keys. Pages' Functions loader appears to scan chunks\n // for \"node:*\" string literals and pre-resolves them as module specs —\n // so keeping \"node:fs\" as an object key caused deploy to fail with\n // 'No such module \"node:fs\"' even though nothing imported it. The\n // post-build strip turns every runtime `require(\"node:fs\")` into\n // `require(\"fs\")` so bare keys are sufficient.\n const entries = shimmed\n .map((m) => `\"${m}\":__${m.replace(\"/\", \"_\")}`)\n .join(\",\");\n\n const messageChannelPolyfill = `if(typeof MessageChannel===\"undefined\"){globalThis.MessageChannel=class{constructor(){const a={onmessage:null},b={onmessage:null};a.postMessage=d=>{if(b.onmessage)setTimeout(()=>b.onmessage({data:d}),0)};b.postMessage=d=>{if(a.onmessage)setTimeout(()=>a.onmessage({data:d}),0)};this.port1=a;this.port2=b}}}`;\n return `${imports}\\n${messageChannelPolyfill}\\nconst __mods={${entries}};export var require=globalThis.require||function(m){const r=__mods[m];if(r!==undefined)return r;throw new Error(\"Cannot require: \"+m)};\\n`;\n}\n\nfunction findEsbuild(): string {\n // Try to resolve esbuild's binary via Node module resolution\n // This works regardless of hoisting or .bin symlink creation\n try {\n const _require = createRequire(cwd + \"/\");\n const esbuildPkg = path.dirname(_require.resolve(\"esbuild/package.json\"));\n const bin = path.join(esbuildPkg, \"bin\", \"esbuild\");\n if (fs.existsSync(bin)) return bin;\n } catch {}\n\n // Fallback: check local and workspace .bin\n const localBin = path.resolve(cwd, \"node_modules/.bin/esbuild\");\n if (fs.existsSync(localBin)) return localBin;\n\n const workspaceRoot = findWorkspaceRoot(cwd);\n if (workspaceRoot) {\n const workspaceBin = path.resolve(\n workspaceRoot,\n \"node_modules/.bin/esbuild\",\n );\n if (fs.existsSync(workspaceBin)) return workspaceBin;\n }\n\n return \"esbuild\";\n}\n\nfunction findWorkspaceRoot(dir: string): string | null {\n let current = dir;\n while (current !== path.dirname(current)) {\n if (\n fs.existsSync(path.join(current, \"pnpm-workspace.yaml\")) ||\n fs.existsSync(path.join(current, \"pnpm-lock.yaml\"))\n ) {\n return current;\n }\n current = path.dirname(current);\n }\n return null;\n}\n\n/** Recursively collect all .js files in a directory. */\nfunction getAllJsFiles(dir: string): string[] {\n const results: string[] = [];\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n results.push(...getAllJsFiles(fullPath));\n } else if (entry.name.endsWith(\".js\")) {\n results.push(fullPath);\n }\n }\n return results;\n}\n\nfunction getDirSize(dir: string): number {\n let size = 0;\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n size += getDirSize(fullPath);\n } else {\n size += fs.statSync(fullPath).size;\n }\n }\n return size;\n}\n\nfunction copyDir(src: string, dest: string) {\n fs.mkdirSync(dest, { recursive: true });\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\nconst LIBSQL_NATIVE_PACKAGE_NAMES = [\n \"darwin-arm64\",\n \"darwin-x64\",\n \"linux-arm-gnueabihf\",\n \"linux-arm-musleabihf\",\n \"linux-arm64-gnu\",\n \"linux-arm64-musl\",\n \"linux-x64-gnu\",\n \"linux-x64-musl\",\n \"win32-x64-msvc\",\n];\n\nfunction nodeModulesAncestors(startDir: string): string[] {\n const dirs: string[] = [];\n let current = path.resolve(startDir);\n while (true) {\n const candidate = path.join(current, \"node_modules\");\n if (fs.existsSync(candidate)) dirs.push(candidate);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return dirs;\n}\n\nfunction findInstalledLibsqlNativePackage(\n nodeModulesRoots: string[],\n packageName: string,\n): string | null {\n for (const root of nodeModulesRoots) {\n const direct = path.join(root, \"@libsql\", packageName);\n if (fs.existsSync(path.join(direct, \"index.node\"))) return direct;\n\n const pnpmRoot = path.join(root, \".pnpm\");\n if (!fs.existsSync(pnpmRoot)) continue;\n const pnpmPrefix = `@libsql+${packageName}@`;\n for (const entry of fs.readdirSync(pnpmRoot)) {\n if (!entry.startsWith(pnpmPrefix)) continue;\n const nested = path.join(\n pnpmRoot,\n entry,\n \"node_modules\",\n \"@libsql\",\n packageName,\n );\n if (fs.existsSync(path.join(nested, \"index.node\"))) return nested;\n }\n }\n return null;\n}\n\nfunction copyInstalledLibsqlNativePackages(serverDir: string | undefined) {\n if (!serverDir || !fs.existsSync(serverDir)) return;\n const nodeModulesRoots = nodeModulesAncestors(cwd);\n const destScopeDir = path.join(serverDir, \"node_modules\", \"@libsql\");\n let copied = 0;\n\n for (const packageName of LIBSQL_NATIVE_PACKAGE_NAMES) {\n const src = findInstalledLibsqlNativePackage(nodeModulesRoots, packageName);\n if (!src) continue;\n\n copyDir(src, path.join(destScopeDir, packageName));\n copied += 1;\n }\n\n if (copied > 0) {\n console.log(\n `[deploy] Copied ${copied} installed libsql native package(s) into the server bundle.`,\n );\n }\n}\n\n/**\n * Create stub directories for dangling platform-specific optional dependency\n * symlinks in the pnpm store.\n *\n * pnpm's store at `node_modules/.pnpm/<pkg>@<ver>/node_modules/<pkg>/<dep>`\n * contains symlinks for ALL optional deps declared by a package, but only\n * installs the ones matching the current OS/CPU as real packages. The other\n * symlinks dangle — their targets at `.pnpm/<scope>+<pkg>@<ver>/node_modules/...`\n * don't exist.\n *\n * Nitro's `nitro:externals` plugin (via nf3 / @vercel/nft) walks\n * optionalDependencies when tracing files and calls `realpath` on them, which\n * throws ENOENT on dangling targets. This blocks builds with presets like\n * netlify / vercel / aws-lambda on macOS when packages like `libsql` declare\n * Linux-only platform variants as optional deps.\n *\n * Fix: walk `node_modules/.pnpm/` and for every dangling symlink under\n * `<pkg>/node_modules/<scope>/<dep>`, create the symlink's target as a tiny\n * stub directory containing just a valid `package.json`. The tracer can now\n * `realpath` and read the package.json without throwing — the stub is empty\n * so no binary is bundled (which is what we want: we're building from macOS,\n * the target deploy platform will install its own native binary).\n */\nfunction createDanglingOptionalDepStubs() {\n // In pnpm monorepos, the store may live at the workspace root rather than\n // in the template dir. Walk up from `cwd` to find every `.pnpm` directory.\n const pnpmRoots: string[] = [];\n let dir = cwd;\n while (true) {\n const candidate = path.join(dir, \"node_modules\", \".pnpm\");\n if (fs.existsSync(candidate)) pnpmRoots.push(candidate);\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n if (pnpmRoots.length === 0) return;\n\n let stubsCreated = 0;\n\n for (const pnpmRoot of pnpmRoots) {\n let pkgDirs: string[];\n try {\n pkgDirs = fs.readdirSync(pnpmRoot);\n } catch {\n continue;\n }\n\n for (const pkgDir of pkgDirs) {\n // e.g. `libsql@0.5.29`, `@libsql+client@0.15.15`\n const innerNm = path.join(pnpmRoot, pkgDir, \"node_modules\");\n if (!fs.existsSync(innerNm)) continue;\n\n let innerEntries: fs.Dirent[];\n try {\n innerEntries = fs.readdirSync(innerNm, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of innerEntries) {\n // Top-level entry: either `foo` (unscoped) or `@scope` (scoped)\n const entryPath = path.join(innerNm, entry.name);\n const candidates: { symlinkPath: string; pkgName: string }[] = [];\n if (entry.name.startsWith(\"@\")) {\n // Scoped — iterate children\n let scopedChildren: fs.Dirent[];\n try {\n scopedChildren = fs.readdirSync(entryPath, {\n withFileTypes: true,\n });\n } catch {\n continue;\n }\n for (const child of scopedChildren) {\n candidates.push({\n symlinkPath: path.join(entryPath, child.name),\n pkgName: `${entry.name}/${child.name}`,\n });\n }\n } else {\n candidates.push({ symlinkPath: entryPath, pkgName: entry.name });\n }\n\n for (const { symlinkPath, pkgName } of candidates) {\n let isSymlink = false;\n try {\n isSymlink = fs.lstatSync(symlinkPath).isSymbolicLink();\n } catch {\n continue;\n }\n if (!isSymlink) continue;\n\n // Check if the symlink target exists\n try {\n fs.statSync(symlinkPath);\n continue; // Target exists — nothing to do\n } catch {\n // Dangling symlink — create a stub at the target\n }\n\n let linkTarget: string;\n try {\n linkTarget = fs.readlinkSync(symlinkPath);\n } catch {\n continue;\n }\n const resolvedTarget = path.resolve(\n path.dirname(symlinkPath),\n linkTarget,\n );\n\n try {\n fs.mkdirSync(resolvedTarget, { recursive: true });\n const stubPkgJson = {\n name: pkgName,\n version: \"0.0.0-stub\",\n description:\n \"Empty stub created by @agent-native/core deploy build to satisfy nitro's file tracer on platforms where this optional dep is not installed.\",\n };\n fs.writeFileSync(\n path.join(resolvedTarget, \"package.json\"),\n JSON.stringify(stubPkgJson, null, 2),\n );\n stubsCreated++;\n } catch {\n // Best-effort — ignore failures\n }\n }\n }\n }\n }\n\n if (stubsCreated > 0) {\n console.log(\n `[deploy] Created ${stubsCreated} stub package dir(s) for dangling optional deps (platform-specific binaries not installed on this host).`,\n );\n }\n}\n\n/**\n * Build for any non-Cloudflare preset using Nitro's programmatic build API.\n * Handles netlify, vercel, deno_deploy, aws-lambda, and all other targets.\n */\nexport interface NitroBuildHooks {\n prepare: (nitro: any) => Promise<void>;\n copyPublicAssets: (nitro: any) => Promise<void>;\n nitroBuild: (nitro: any) => Promise<void>;\n}\n\nexport interface NitroBuildPipelineOptions {\n nitro: any;\n hooks: NitroBuildHooks;\n clientDir: string;\n publicOutputDir: string | undefined;\n appBasePath: string;\n cwd: string;\n}\n\n/**\n * Run Nitro's lifecycle in the order required to ship a working React Router\n * framework-mode build.\n *\n * The critical ordering constraint is that the React Router client build must\n * be copied into `publicOutputDir` *before* `nitroBuild` runs. Nitro generates\n * the static-asset manifest baked into the server bundle by globbing\n * `publicDir` during the server build; files copied in after that point exist\n * on disk but are invisible to the runtime `serveStatic` handler. Every\n * /assets/* request then falls through to the SSR catch-all, which 404s\n * anything with a file extension.\n */\nexport async function runNitroBuildPipeline(\n opts: NitroBuildPipelineOptions,\n): Promise<void> {\n const { nitro, hooks, clientDir, publicOutputDir, appBasePath, cwd } = opts;\n\n await hooks.prepare(nitro);\n await hooks.copyPublicAssets(nitro);\n\n if (fs.existsSync(clientDir) && publicOutputDir) {\n copyDir(clientDir, publicOutputDir);\n if (appBasePath) {\n copyDir(clientDir, path.join(publicOutputDir, appBasePath.slice(1)));\n }\n nitro.options.routeRules ??= {};\n addImmutableAssetRouteRulesForClientBuild(\n nitro.options.routeRules,\n clientDir,\n appBasePath,\n );\n console.log(\n `[deploy] Copied client assets to ${path.relative(cwd, publicOutputDir)}`,\n );\n }\n\n await hooks.nitroBuild(nitro);\n}\n\nasync function buildWithNitro() {\n console.log(`[deploy] Building for preset \"${preset}\" via Nitro...`);\n const appBasePath = normalizeConfiguredAppBasePath();\n\n // Nitro runs its own server build after the React Router/Vite build. The\n // template's agent-chat plugin imports .generated/actions-registry.ts so the\n // serverless bundle has static imports for every domain action. Regenerate\n // here as well so deploy builds are not coupled to a previous Vite run or to\n // ignored local .generated files being present.\n generateActionRegistryForProject(cwd);\n\n // Work around pnpm + nitro:externals (nf3) bug where dangling symlinks for\n // platform-specific optional deps cause realpath ENOENT during file tracing.\n createDanglingOptionalDepStubs();\n\n const {\n createNitro,\n prepare,\n copyPublicAssets,\n build: nitroBuild,\n } = await import(\"nitro/builder\");\n\n // Resolve the React Router server build so the SSR catch-all route\n // can import \"virtual:react-router/server-build\" in production.\n const rrServerBuild = path.join(cwd, \"build\", \"server\", \"index.js\");\n\n // Inline the template's AGENTS.md + .agents/skills/ content into the Nitro\n // bundle via the `virtual` config option. Nitro's internal `nitro:virtual`\n // Rollup plugin picks this up and resolves `virtual:agents-bundle` to the\n // generated ES module source. Without this, Nitro's Rolldown build (used for\n // netlify, vercel, aws-lambda, node presets) can't resolve the virtual\n // module that `server/agents-bundle.ts` imports — it silently falls through\n // to an empty bundle and the agent gets no instructions/skills at runtime.\n //\n // The Vite plugin at `vite/agents-bundle-plugin.ts` handles this for the\n // React Router client/server build (and cloudflare via esbuild rebundle),\n // but Nitro runs its OWN build from ./server/ without Vite, so it needs its\n // own virtual module registration. Both paths reuse `readAgentsBundleFromFs`\n // from `server/agents-bundle.ts` to guarantee identical content.\n const { readAgentsBundleFromFs } = await import(\"../server/agents-bundle.js\");\n // Resolve the workspace core (if present) up front so the bundle embeds\n // enterprise-wide AGENTS.md + skills alongside the template's.\n const nitroWorkspaceCore = await getWorkspaceCoreExports(cwd);\n const nitroWorkspaceSource = nitroWorkspaceCore\n ? {\n skillsDir: nitroWorkspaceCore.skillsDir,\n agentsMdPath: nitroWorkspaceCore.agentsMdPath,\n rootDir: nitroWorkspaceCore.packageDir,\n }\n : null;\n const agentsBundleModuleSource = () => {\n const bundle = readAgentsBundleFromFs(cwd, nitroWorkspaceSource);\n return `// AUTO-GENERATED by @agent-native/core deploy build (Nitro virtual)\n// Contains the inlined AGENTS.md + .agents/skills/ content from the template,\n// merged with the workspace core's AGENTS.md + skills/ when present.\nconst bundle = ${JSON.stringify(bundle)};\nexport default bundle;\n`;\n };\n\n // Path aliases used by templates (mirrors tsconfig + Vite config). Nitro\n // bundles server/ and actions/ with its own Rolldown pipeline that doesn't\n // see Vite's resolve.alias — so without this, action files that import\n // `@/foo` (= `app/foo`) end up with the literal `@/foo` specifier in the\n // serverless function output and crash at runtime with\n // \"Cannot find package '@/foo' imported from /var/task/main.mjs\".\n const appDir = path.join(cwd, \"app\");\n const sharedDir = path.join(cwd, \"shared\");\n const pathAliases: Record<string, string> = {};\n if (fs.existsSync(appDir)) pathAliases[\"@\"] = appDir;\n if (fs.existsSync(sharedDir)) pathAliases[\"@shared\"] = sharedDir;\n\n const nitro = await createNitro({\n rootDir: cwd,\n dev: false,\n preset,\n baseURL: appBasePath || \"/\",\n minify: true,\n serverDir: \"./server\",\n alias: {\n ...pathAliases,\n ...(fs.existsSync(rrServerBuild)\n ? { \"virtual:react-router/server-build\": rrServerBuild }\n : {}),\n },\n virtual: {\n \"virtual:agents-bundle\": agentsBundleModuleSource,\n },\n routeRules: mcpEmbedStaticAssetRouteRules(appBasePath),\n // For edge presets (cloudflare, deno), bundle all deps — node_modules\n // aren't available at runtime. Netlify/Vercel/Node have node_modules.\n ...(preset.startsWith(\"cloudflare\") || preset.startsWith(\"deno\")\n ? { noExternals: true }\n : {}),\n } as any);\n\n await runNitroBuildPipeline({\n nitro,\n hooks: { prepare, copyPublicAssets, nitroBuild },\n clientDir: path.join(cwd, \"build\", \"client\"),\n publicOutputDir: nitro.options.output.publicDir,\n appBasePath,\n cwd,\n });\n\n if (preset === \"netlify\" || preset === \"vercel\" || preset === \"aws-lambda\") {\n copyInstalledLibsqlNativePackages(nitro.options.output.serverDir);\n }\n\n // Resolve remaining bare npm imports by bundling them into _libs/.\n // Nitro sometimes leaves small packages as externals even with noExternals.\n if (preset.startsWith(\"cloudflare\") || preset.startsWith(\"deno\")) {\n const { execFileSync } = await import(\"child_process\");\n const { createRequire } = await import(\"module\");\n const esbuildBin = (() => {\n try {\n const _req = createRequire(cwd + \"/\");\n const pkg = path.dirname(_req.resolve(\"esbuild/package.json\"));\n const bin = path.join(pkg, \"bin\", \"esbuild\");\n if (fs.existsSync(bin)) return bin;\n } catch {}\n return \"esbuild\";\n })();\n\n // Scan all output files for bare npm imports\n const outputDir =\n nitro.options.output.serverDir || path.join(cwd, \"dist\", \"_worker.js\");\n const bareImports = new Set<string>();\n function scanForBareImports(dir: string) {\n if (!fs.existsSync(dir)) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n scanForBareImports(p);\n continue;\n }\n if (!entry.name.endsWith(\".mjs\") && !entry.name.endsWith(\".js\"))\n continue;\n const code = fs.readFileSync(p, \"utf-8\");\n const matches = code.matchAll(/from\\s*[\"']([a-z@][a-z0-9._\\-/]*)[\"']/g);\n for (const m of matches) {\n const mod = m[1];\n if (mod.startsWith(\"node:\")) continue;\n // Skip Node builtins that are available via nodejs_compat\n const builtins = new Set([\n \"fs\",\n \"path\",\n \"os\",\n \"crypto\",\n \"http\",\n \"https\",\n \"stream\",\n \"url\",\n \"util\",\n \"events\",\n \"buffer\",\n \"net\",\n \"tls\",\n \"assert\",\n \"timers\",\n \"child_process\",\n \"module\",\n \"process\",\n \"sqlite\",\n \"worker_threads\",\n \"querystring\",\n \"zlib\",\n \"vm\",\n \"string_decoder\",\n \"diagnostics_channel\",\n \"async_hooks\",\n \"perf_hooks\",\n \"inspector\",\n ]);\n if (builtins.has(mod)) continue;\n bareImports.add(mod);\n }\n }\n }\n scanForBareImports(outputDir);\n\n // For each bare import, try to bundle it as a standalone module\n if (bareImports.size > 0) {\n const libsDir = path.join(outputDir, \"_libs\");\n fs.mkdirSync(libsDir, { recursive: true });\n for (const mod of bareImports) {\n const outFile = path.join(libsDir, `${mod.replace(/[/@]/g, \"_\")}.mjs`);\n try {\n // Try resolving from both template dir and workspace root\n const nodePaths = [\n path.join(cwd, \"node_modules\"),\n path.resolve(cwd, \"../../node_modules\"),\n ].filter((p) => fs.existsSync(p));\n // Resolve the module — check workspace node_modules and pnpm store\n let resolvedMod = mod;\n const _require = createRequire(cwd + \"/\");\n try {\n const resolved = _require.resolve(mod);\n resolvedMod = resolved;\n } catch {\n // Try from workspace root\n try {\n const wsRequire = createRequire(\n path.resolve(cwd, \"../../package.json\"),\n );\n resolvedMod = wsRequire.resolve(mod);\n } catch {\n // Will fail at esbuild\n }\n }\n // Scan what named imports the consumer expects, then generate\n // explicit re-exports to handle CJS modules properly.\n const neededExports = new Set<string>();\n function findNeededExports(dir: string) {\n if (!fs.existsSync(dir)) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n findNeededExports(p);\n continue;\n }\n if (!entry.name.endsWith(\".mjs\") && !entry.name.endsWith(\".js\"))\n continue;\n const code = fs.readFileSync(p, \"utf-8\");\n // Match: import{foo as bar,baz}from\"<mod>\"\n const escaped = mod.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const re = new RegExp(\n `import\\\\{([^}]+)\\\\}from[\"']${escaped}[\"']`,\n \"g\",\n );\n for (const m2 of code.matchAll(re)) {\n for (const part of m2[1].split(\",\")) {\n const name = part\n .trim()\n .split(/\\s+as\\s+/)[0]\n .trim();\n if (name && /^[a-zA-Z_$]/.test(name)) neededExports.add(name);\n }\n }\n }\n }\n findNeededExports(outputDir);\n\n const entryCode =\n neededExports.size > 0\n ? [\n `import _mod from \"${resolvedMod}\";`,\n `export default _mod;`,\n ...Array.from(neededExports).map(\n (n) =>\n `export const ${n} = _mod.${n} ?? _mod?.default?.${n};`,\n ),\n ].join(\"\\n\")\n : `export * from \"${resolvedMod}\"; export { default } from \"${resolvedMod}\";`;\n\n execFileSync(\n esbuildBin,\n [\n \"--bundle\",\n `--outfile=${outFile}`,\n \"--format=esm\",\n \"--platform=neutral\",\n \"--target=es2022\",\n \"--external:node:*\",\n ],\n {\n input: entryCode,\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n },\n );\n // Rewrite imports in all files to point to the bundled module\n function rewriteImports(dir: string) {\n if (!fs.existsSync(dir)) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n rewriteImports(p);\n continue;\n }\n if (!entry.name.endsWith(\".mjs\") && !entry.name.endsWith(\".js\"))\n continue;\n let code = fs.readFileSync(p, \"utf-8\");\n const relPath = path\n .relative(path.dirname(p), outFile)\n .replace(/\\\\/g, \"/\");\n const importPath = relPath.startsWith(\".\")\n ? relPath\n : \"./\" + relPath;\n const re = new RegExp(\n `from[\"']${mod.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}[\"']`,\n \"g\",\n );\n if (re.test(code)) {\n code = code.replace(re, `from\"${importPath}\"`);\n fs.writeFileSync(p, code);\n }\n }\n }\n rewriteImports(outputDir);\n console.log(`[deploy] Bundled external: ${mod}`);\n } catch {\n console.warn(\n `[deploy] Could not bundle: ${mod} (may not be needed at runtime)`,\n );\n }\n }\n }\n }\n\n // Cloudflare-specific post-build patches\n if (preset.startsWith(\"cloudflare\")) {\n const serverDir2 = nitro.options.output.serverDir;\n const scanDirs = [serverDir2];\n if (serverDir2) {\n const chunksDir = path.join(serverDir2, \"_chunks\");\n const libsDir = path.join(serverDir2, \"_libs\");\n if (fs.existsSync(chunksDir)) scanDirs.push(chunksDir);\n if (fs.existsSync(libsDir)) scanDirs.push(libsDir);\n }\n\n for (const scanDir of scanDirs) {\n if (!scanDir || !fs.existsSync(scanDir)) continue;\n for (const file of fs.readdirSync(scanDir)) {\n if (!file.endsWith(\".mjs\") && !file.endsWith(\".js\")) continue;\n const filePath = path.join(scanDir, file);\n let code = fs.readFileSync(filePath, \"utf-8\");\n let changed = false;\n\n // 1. Rewrite bare Node.js imports to node: prefixed.\n // CF Workers requires the node: prefix for built-in modules.\n const NODE_BUILTINS = [\n \"fs\",\n \"path\",\n \"os\",\n \"crypto\",\n \"http\",\n \"https\",\n \"stream\",\n \"url\",\n \"util\",\n \"events\",\n \"buffer\",\n \"querystring\",\n \"zlib\",\n \"net\",\n \"tls\",\n \"assert\",\n \"timers\",\n \"child_process\",\n \"module\",\n \"process\",\n \"sqlite\",\n \"worker_threads\",\n \"string_decoder\",\n \"diagnostics_channel\",\n \"async_hooks\",\n \"perf_hooks\",\n \"inspector\",\n \"vm\",\n ];\n for (const mod of NODE_BUILTINS) {\n // Match: from\"fs\" or from \"fs\" (but not from\"node:fs\")\n const re = new RegExp(`from\\\\s*[\"']${mod}[\"']`, \"g\");\n if (re.test(code)) {\n code = code.replace(re, `from\"node:${mod}\"`);\n changed = true;\n }\n }\n\n // 2. Patch import.meta.url for createRequire().\n // React Router's server build uses createRequire(import.meta.url)\n // but import.meta.url is undefined on CF Workers.\n if (code.includes(\"import.meta.url\")) {\n code = code.replace(/import\\.meta\\.url/g, '\"file:///worker.mjs\"');\n changed = true;\n }\n\n // 3. Patch setInterval/setTimeout at global scope.\n // CF Workers disallows timers in global scope.\n if (code.includes(\"setInterval\") && !code.includes(\"__timer_shim__\")) {\n const shim =\n \"/* __timer_shim__ */\" +\n \"var __origSetInterval=globalThis.setInterval;\" +\n \"globalThis.setInterval=function(){return{unref(){},ref(){},close(){}}};\";\n const restore =\n \";(function(){if(typeof __origSetInterval!=='undefined')globalThis.setInterval=__origSetInterval})();\";\n code = shim + code + \"\\n\" + restore;\n changed = true;\n }\n\n if (changed) fs.writeFileSync(filePath, code);\n }\n }\n // 3. Create stub modules in _libs/ for native deps that Nitro's rolldown\n // bundler references but can't resolve on CF Workers, and rewrite\n // bare imports to point to the stub files.\n const libsDir2 = path.join(\n serverDir2 || path.join(cwd, \"dist\", \"_worker.js\"),\n \"_libs\",\n );\n if (fs.existsSync(libsDir2)) {\n const NATIVE_STUBS = [\"better-sqlite3\", \"node-pty\", \"cron-parser\"];\n for (const mod of NATIVE_STUBS) {\n const libFiles = fs\n .readdirSync(libsDir2)\n .filter((f) => f.endsWith(\".mjs\"));\n const referencingFiles: string[] = [];\n for (const f of libFiles) {\n const filePath = path.join(libsDir2, f);\n const content = fs.readFileSync(filePath, \"utf-8\");\n if (content.includes(`\"${mod}\"`) || content.includes(`'${mod}'`)) {\n referencingFiles.push(filePath);\n }\n }\n if (referencingFiles.length === 0) continue;\n\n // Create a stub _libs/<mod>.mjs that exports empty defaults\n const stubName = mod.replace(/[/@]/g, \"__\") + \".mjs\";\n const stubPath = path.join(libsDir2, stubName);\n if (!fs.existsSync(stubPath)) {\n fs.writeFileSync(\n stubPath,\n `export default {}; export const watch = () => ({ close() {} });\\n`,\n );\n console.log(`[deploy] Created stub for _libs/${stubName}`);\n }\n\n // Rewrite bare imports in _libs/ and _chunks/ to use the stub\n const escaped = mod.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const importRe = new RegExp(`(from\\\\s*[\"'])${escaped}([\"'])`, \"g\");\n // Scan _libs/ files\n for (const filePath of referencingFiles) {\n let code = fs.readFileSync(filePath, \"utf-8\");\n if (importRe.test(code)) {\n code = code.replace(importRe, `$1./${stubName}$2`);\n fs.writeFileSync(filePath, code);\n console.log(\n `[deploy] Rewrote ${mod} imports in _libs/${path.basename(filePath)}`,\n );\n }\n }\n // Also scan _chunks/ files (they import native deps too)\n const chunksDir2 = path.join(\n serverDir2 || path.join(cwd, \"dist\", \"_worker.js\"),\n \"_chunks\",\n );\n if (fs.existsSync(chunksDir2)) {\n for (const f of fs\n .readdirSync(chunksDir2)\n .filter((f) => f.endsWith(\".mjs\") || f.endsWith(\".js\"))) {\n const filePath = path.join(chunksDir2, f);\n let code = fs.readFileSync(filePath, \"utf-8\");\n if (importRe.test(code)) {\n // From _chunks/, the stub is at ../_libs/<stubName>\n code = code.replace(importRe, `$1../_libs/${stubName}$2`);\n fs.writeFileSync(filePath, code);\n console.log(`[deploy] Rewrote ${mod} imports in _chunks/${f}`);\n }\n }\n }\n }\n }\n\n console.log(\n \"[deploy] Patched bare Node imports, timer calls, and route finder for CF Workers\",\n );\n }\n\n await nitro.close();\n console.log(`[deploy] Nitro build complete for preset \"${preset}\".`);\n}\n\nasync function main() {\n console.log(`[deploy] Building for ${preset}...`);\n\n switch (preset) {\n case \"cloudflare_pages\":\n case \"cloudflare-pages\":\n // Cloudflare Workers require a single-file bundle that wrangler can deploy.\n // Nitro's native presets produce split chunks that wrangler can't upload\n // as multi-module Workers. Use the custom esbuild-based bundler.\n await buildCloudflarePages();\n break;\n default:\n // All other presets (netlify, vercel, deno_deploy, aws-lambda, etc.)\n // are handled natively by Nitro's build API.\n await buildWithNitro();\n break;\n }\n}\n\nif (\n process.argv[1] &&\n path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url))\n) {\n await main();\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const IMMUTABLE_ASSET_CACHE_CONTROL = "public, max-age=31536000, immutable";
|
|
2
|
+
export declare const IMMUTABLE_ASSET_CACHE_HEADERS: {
|
|
3
|
+
readonly "cache-control": "public, max-age=31536000, immutable";
|
|
4
|
+
readonly "cdn-cache-control": "public, max-age=31536000, immutable";
|
|
5
|
+
};
|
|
6
|
+
export declare const IMMUTABLE_ASSET_PATH_PATTERN = "^/assets/[^/]+-[A-Za-z0-9_-]{8}\\.[a-z0-9]+$";
|
|
7
|
+
export declare function isImmutableAssetPath(pathname: string): boolean;
|
|
8
|
+
export declare function normalizeBasePath(basePath: string | undefined): string;
|
|
9
|
+
export declare function prefixAssetPath(pathname: string, basePath: string | undefined): string;
|
|
10
|
+
export declare function collectImmutableAssetPaths(rootDir: string): string[];
|
|
11
|
+
//# sourceMappingURL=immutable-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immutable-assets.d.ts","sourceRoot":"","sources":["../../src/deploy/immutable-assets.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAExC,eAAO,MAAM,6BAA6B;;;CAGhC,CAAC;AAEX,eAAO,MAAM,4BAA4B,iDACO,CAAC;AAIjD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKtE;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAIR;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBpE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
export const IMMUTABLE_ASSET_CACHE_CONTROL = "public, max-age=31536000, immutable";
|
|
4
|
+
export const IMMUTABLE_ASSET_CACHE_HEADERS = {
|
|
5
|
+
"cache-control": IMMUTABLE_ASSET_CACHE_CONTROL,
|
|
6
|
+
"cdn-cache-control": IMMUTABLE_ASSET_CACHE_CONTROL,
|
|
7
|
+
};
|
|
8
|
+
export const IMMUTABLE_ASSET_PATH_PATTERN = "^/assets/[^/]+-[A-Za-z0-9_-]{8}\\.[a-z0-9]+$";
|
|
9
|
+
const IMMUTABLE_ASSET_PATH_RE = new RegExp(IMMUTABLE_ASSET_PATH_PATTERN);
|
|
10
|
+
export function isImmutableAssetPath(pathname) {
|
|
11
|
+
return IMMUTABLE_ASSET_PATH_RE.test(pathname);
|
|
12
|
+
}
|
|
13
|
+
export function normalizeBasePath(basePath) {
|
|
14
|
+
const raw = String(basePath ?? "").trim();
|
|
15
|
+
if (!raw || raw === "/")
|
|
16
|
+
return "";
|
|
17
|
+
const normalized = raw.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
18
|
+
return normalized ? `/${normalized}` : "";
|
|
19
|
+
}
|
|
20
|
+
export function prefixAssetPath(pathname, basePath) {
|
|
21
|
+
const base = normalizeBasePath(basePath);
|
|
22
|
+
if (!base)
|
|
23
|
+
return pathname;
|
|
24
|
+
return `${base}${pathname}`;
|
|
25
|
+
}
|
|
26
|
+
export function collectImmutableAssetPaths(rootDir) {
|
|
27
|
+
const assetsDir = path.join(rootDir, "assets");
|
|
28
|
+
if (!fs.existsSync(assetsDir))
|
|
29
|
+
return [];
|
|
30
|
+
const paths = [];
|
|
31
|
+
const scan = (dir, relDir = "") => {
|
|
32
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
33
|
+
const relPath = relDir ? `${relDir}/${entry.name}` : entry.name;
|
|
34
|
+
const absPath = path.join(dir, entry.name);
|
|
35
|
+
if (entry.isDirectory()) {
|
|
36
|
+
scan(absPath, relPath);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (!entry.isFile())
|
|
40
|
+
continue;
|
|
41
|
+
const assetPath = `/assets/${relPath}`;
|
|
42
|
+
if (isImmutableAssetPath(assetPath))
|
|
43
|
+
paths.push(assetPath);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
scan(assetsDir);
|
|
47
|
+
return paths.sort();
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=immutable-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immutable-assets.js","sourceRoot":"","sources":["../../src/deploy/immutable-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,6BAA6B,GACxC,qCAAqC,CAAC;AAExC,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,eAAe,EAAE,6BAA6B;IAC9C,mBAAmB,EAAE,6BAA6B;CAC1C,CAAC;AAEX,MAAM,CAAC,MAAM,4BAA4B,GACvC,8CAA8C,CAAC;AAEjD,MAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAEzE,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA4B;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,QAA4B;IAE5B,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,OAAO,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;QACxC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAAE,SAAS;YAE9B,MAAM,SAAS,GAAG,WAAW,OAAO,EAAE,CAAC;YACvC,IAAI,oBAAoB,CAAC,SAAS,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\n\nexport const IMMUTABLE_ASSET_CACHE_CONTROL =\n \"public, max-age=31536000, immutable\";\n\nexport const IMMUTABLE_ASSET_CACHE_HEADERS = {\n \"cache-control\": IMMUTABLE_ASSET_CACHE_CONTROL,\n \"cdn-cache-control\": IMMUTABLE_ASSET_CACHE_CONTROL,\n} as const;\n\nexport const IMMUTABLE_ASSET_PATH_PATTERN =\n \"^/assets/[^/]+-[A-Za-z0-9_-]{8}\\\\.[a-z0-9]+$\";\n\nconst IMMUTABLE_ASSET_PATH_RE = new RegExp(IMMUTABLE_ASSET_PATH_PATTERN);\n\nexport function isImmutableAssetPath(pathname: string): boolean {\n return IMMUTABLE_ASSET_PATH_RE.test(pathname);\n}\n\nexport function normalizeBasePath(basePath: string | undefined): string {\n const raw = String(basePath ?? \"\").trim();\n if (!raw || raw === \"/\") return \"\";\n const normalized = raw.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n return normalized ? `/${normalized}` : \"\";\n}\n\nexport function prefixAssetPath(\n pathname: string,\n basePath: string | undefined,\n): string {\n const base = normalizeBasePath(basePath);\n if (!base) return pathname;\n return `${base}${pathname}`;\n}\n\nexport function collectImmutableAssetPaths(rootDir: string): string[] {\n const assetsDir = path.join(rootDir, \"assets\");\n if (!fs.existsSync(assetsDir)) return [];\n\n const paths: string[] = [];\n const scan = (dir: string, relDir = \"\") => {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const relPath = relDir ? `${relDir}/${entry.name}` : entry.name;\n const absPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n scan(absPath, relPath);\n continue;\n }\n if (!entry.isFile()) continue;\n\n const assetPath = `/assets/${relPath}`;\n if (isImmutableAssetPath(assetPath)) paths.push(assetPath);\n }\n };\n\n scan(assetsDir);\n return paths.sort();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/workspace-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/workspace-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAmB7C,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAiD9E,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,YAAY,CAAC;CAChC;AAED,wBAAsB,kBAAkB,CACtC,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAyGf"}
|
|
@@ -20,6 +20,7 @@ import path from "path";
|
|
|
20
20
|
import { findWorkspaceRoot } from "../scripts/utils.js";
|
|
21
21
|
import { DISPATCH_WORKSPACE_ROOT_REDIRECTS } from "../shared/workspace-app-id.js";
|
|
22
22
|
import { DEFAULT_WORKSPACE_APP_AUDIENCE, normalizeWorkspaceAppAudience, normalizeWorkspaceAppPathList, workspaceAppAudienceFromPackageJson, workspaceAppRouteAccessFromPackageJson, } from "../shared/workspace-app-audience.js";
|
|
23
|
+
import { collectImmutableAssetPaths, IMMUTABLE_ASSET_CACHE_HEADERS, } from "./immutable-assets.js";
|
|
23
24
|
const NETLIFY_WORKSPACE_STATIC_DIR = "_workspace_static";
|
|
24
25
|
const NETLIFY_PUBLIC_ASSET_EXTENSIONS = new Set([
|
|
25
26
|
"avif",
|
|
@@ -95,6 +96,7 @@ export async function runWorkspaceDeploy(opts = {}) {
|
|
|
95
96
|
writeWorkspaceAppManifests(workspaceRoot, distDir, apps, workspaceApps, preset);
|
|
96
97
|
if (preset === "netlify") {
|
|
97
98
|
writeNetlifyRedirects(distDir, apps);
|
|
99
|
+
writeNetlifyHeaders(distDir, apps);
|
|
98
100
|
}
|
|
99
101
|
else if (preset === "vercel") {
|
|
100
102
|
writeVercelBuildConfig(vercelOutputDir, apps);
|
|
@@ -329,8 +331,29 @@ function writeNetlifyRedirects(distDir, apps) {
|
|
|
329
331
|
}
|
|
330
332
|
fs.writeFileSync(path.join(distDir, "_redirects"), lines.join("\n") + "\n");
|
|
331
333
|
}
|
|
334
|
+
function writeNetlifyHeaders(distDir, apps) {
|
|
335
|
+
const blocks = apps.flatMap((app) => {
|
|
336
|
+
const staticDir = path.join(distDir, NETLIFY_WORKSPACE_STATIC_DIR, app);
|
|
337
|
+
return collectImmutableAssetPaths(staticDir).flatMap((assetPath) => [
|
|
338
|
+
netlifyHeaderBlock(`/${app}${assetPath}`),
|
|
339
|
+
netlifyHeaderBlock(`/${NETLIFY_WORKSPACE_STATIC_DIR}/${app}${assetPath}`),
|
|
340
|
+
]);
|
|
341
|
+
});
|
|
342
|
+
if (blocks.length === 0)
|
|
343
|
+
return;
|
|
344
|
+
fs.writeFileSync(path.join(distDir, "_headers"), blocks.join("\n\n") + "\n");
|
|
345
|
+
}
|
|
346
|
+
function netlifyHeaderBlock(pathname) {
|
|
347
|
+
return [
|
|
348
|
+
pathname,
|
|
349
|
+
...Object.entries(IMMUTABLE_ASSET_CACHE_HEADERS).map(([name, value]) => ` ${name}: ${value}`),
|
|
350
|
+
].join("\n");
|
|
351
|
+
}
|
|
332
352
|
function writeVercelBuildConfig(outputDir, apps) {
|
|
333
|
-
const routes = [
|
|
353
|
+
const routes = [
|
|
354
|
+
...vercelImmutableAssetHeaderRoutes(outputDir, apps),
|
|
355
|
+
{ handle: "filesystem" },
|
|
356
|
+
];
|
|
334
357
|
if (apps.includes("dispatch")) {
|
|
335
358
|
routes.push({ src: "/_agent-native", dest: "/dispatch-server" }, { src: "/_agent-native/(.*)", dest: "/dispatch-server" }, { src: "/\\.well-known", dest: "/dispatch-server" }, { src: "/\\.well-known/(.*)", dest: "/dispatch-server" });
|
|
336
359
|
const faviconAsset = dispatchRootFaviconAsset(path.join(outputDir, "static"));
|
|
@@ -358,6 +381,19 @@ function writeVercelBuildConfig(outputDir, apps) {
|
|
|
358
381
|
};
|
|
359
382
|
fs.writeFileSync(path.join(outputDir, "config.json"), JSON.stringify(config, null, 2) + "\n");
|
|
360
383
|
}
|
|
384
|
+
function vercelImmutableAssetHeaderRoutes(outputDir, apps) {
|
|
385
|
+
return apps.flatMap((app) => {
|
|
386
|
+
const staticDir = path.join(outputDir, "static", app);
|
|
387
|
+
return collectImmutableAssetPaths(staticDir).map((assetPath) => ({
|
|
388
|
+
src: vercelRouteSrc(`/${app}${assetPath}`),
|
|
389
|
+
headers: IMMUTABLE_ASSET_CACHE_HEADERS,
|
|
390
|
+
continue: true,
|
|
391
|
+
}));
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
function vercelRouteSrc(pathname) {
|
|
395
|
+
return pathname.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
396
|
+
}
|
|
361
397
|
function vercelRedirect(src, location) {
|
|
362
398
|
return {
|
|
363
399
|
src,
|
|
@@ -1 +1 @@
|
|
|
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\";\nimport { findWorkspaceRoot } from \"../scripts/utils.js\";\nimport { DISPATCH_WORKSPACE_ROOT_REDIRECTS } from \"../shared/workspace-app-id.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\";\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 } 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 /<app>/* as include so every app's worker handles its\n // subtree.\n const include = apps.map((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(request, 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\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 writeVercelBuildConfig(outputDir: string, apps: string[]): void {\n const routes: Array<Record<string, any>> = [{ handle: \"filesystem\" }];\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 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\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 for (const name of [\"dist\", \".output\", \"build\"]) {\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\n .map((entry) => {\n if (!entry || typeof entry !== \"object\") return null;\n const id = typeof entry.id === \"string\" ? entry.id.trim() : \"\";\n if (!id) return null;\n const url = normalizeWorkspaceAppUrl(entry.url);\n const audience =\n entry.audience === undefined\n ? undefined\n : normalizeWorkspaceAppAudience(entry.audience);\n const publicPaths = normalizeWorkspaceAppPathList(entry.publicPaths);\n const protectedPaths = normalizeWorkspaceAppPathList(\n entry.protectedPaths,\n );\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"]}
|
|
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\";\nimport { findWorkspaceRoot } from \"../scripts/utils.js\";\nimport { DISPATCH_WORKSPACE_ROOT_REDIRECTS } from \"../shared/workspace-app-id.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 {\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 /<app>/* as include so every app's worker handles its\n // subtree.\n const include = apps.map((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(request, 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\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\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 for (const name of [\"dist\", \".output\", \"build\"]) {\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\n .map((entry) => {\n if (!entry || typeof entry !== \"object\") return null;\n const id = typeof entry.id === \"string\" ? entry.id.trim() : \"\";\n if (!id) return null;\n const url = normalizeWorkspaceAppUrl(entry.url);\n const audience =\n entry.audience === undefined\n ? undefined\n : normalizeWorkspaceAppAudience(entry.audience);\n const publicPaths = normalizeWorkspaceAppPathList(entry.publicPaths);\n const protectedPaths = normalizeWorkspaceAppPathList(\n entry.protectedPaths,\n );\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"]}
|