@agent-native/core 0.63.0 → 0.63.2
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/agent/harness/ai-sdk-adapter.d.ts +44 -0
- package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.js +120 -1
- package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
- package/dist/agent/harness/index.d.ts +1 -1
- package/dist/agent/harness/index.d.ts.map +1 -1
- package/dist/agent/harness/index.js.map +1 -1
- package/dist/cli/code-agent-executor.js +1 -1
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/create.js +1 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +1 -1
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js +29 -10
- package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
- package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/DiffBlock.js +48 -20
- package/dist/client/blocks/library/DiffBlock.js.map +1 -1
- package/dist/client/blocks/library/diagram.d.ts.map +1 -1
- package/dist/client/blocks/library/diagram.js +14 -3
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/library/wireframe.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe.js +14 -3
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/blocks/types.d.ts +5 -0
- package/dist/client/blocks/types.d.ts.map +1 -1
- package/dist/client/blocks/types.js.map +1 -1
- package/dist/client/chat/index.d.ts +2 -1
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js +2 -1
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/chat-view-transition.d.ts +17 -0
- package/dist/client/chat-view-transition.d.ts.map +1 -1
- package/dist/client/chat-view-transition.js +46 -0
- package/dist/client/chat-view-transition.js.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts +27 -0
- package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -0
- package/dist/client/use-agent-chat-home-handoff.js +120 -0
- package/dist/client/use-agent-chat-home-handoff.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +24 -2
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/deep-link.d.ts +2 -2
- package/dist/server/deep-link.d.ts.map +1 -1
- package/dist/server/deep-link.js +2 -2
- package/dist/server/deep-link.js.map +1 -1
- package/dist/styles/agent-native.css +2 -6
- package/dist/tailwind.preset.d.ts.map +1 -1
- package/dist/tailwind.preset.js +8 -1
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/templates/default/package.json +1 -0
- package/dist/templates/headless/AGENTS.md +3 -0
- package/dist/templates/headless/DEVELOPING.md +4 -0
- package/dist/templates/headless/actions/run.ts +6 -0
- package/dist/templates/workspace-root/README.md +4 -4
- package/docs/content/actions.md +32 -42
- package/docs/content/agent-surfaces.md +105 -84
- package/docs/content/agent-teams.md +2 -14
- package/docs/content/agent-web-surfaces.md +4 -4
- package/docs/content/authentication.md +40 -24
- package/docs/content/automations.md +18 -36
- package/docs/content/blueprint-installer.md +3 -0
- package/docs/content/cli-adapters.md +24 -168
- package/docs/content/client.md +11 -77
- package/docs/content/cloneable-saas.md +1 -1
- package/docs/content/code-agents-ui.md +44 -0
- package/docs/content/components.md +10 -23
- package/docs/content/context-awareness.md +3 -3
- package/docs/content/creating-templates.md +20 -18
- package/docs/content/database.md +1 -1
- package/docs/content/deployment.md +5 -37
- package/docs/content/dispatch.md +17 -28
- package/docs/content/drop-in-agent.md +24 -111
- package/docs/content/durable-resume.md +4 -0
- package/docs/content/embedding-sdk.md +141 -135
- package/docs/content/evals.md +3 -3
- package/docs/content/extensions.md +1 -1
- package/docs/content/external-agents.md +35 -61
- package/docs/content/faq.md +5 -5
- package/docs/content/frames.md +13 -4
- package/docs/content/getting-started.md +96 -142
- package/docs/content/harness-agents.md +53 -9
- package/docs/content/human-approval.md +1 -1
- package/docs/content/key-concepts.md +14 -99
- package/docs/content/local-file-mode.md +2 -2
- package/docs/content/mcp-apps.md +9 -2
- package/docs/content/mcp-clients.md +8 -3
- package/docs/content/mcp-protocol.md +11 -29
- package/docs/content/messaging.md +1 -1
- package/docs/content/migration-workbench.md +14 -175
- package/docs/content/multi-app-workspace.md +1 -1
- package/docs/content/multi-tenancy.md +18 -47
- package/docs/content/native-chat-ui.md +15 -12
- package/docs/content/observability.md +16 -4
- package/docs/content/observational-memory.md +1 -1
- package/docs/content/pure-agent-apps.md +17 -124
- package/docs/content/real-time-collaboration.md +14 -14
- package/docs/content/routing.md +71 -0
- package/docs/content/sandbox-adapters.md +78 -4
- package/docs/content/security.md +59 -39
- package/docs/content/server.md +16 -8
- package/docs/content/sharing.md +1 -6
- package/docs/content/skills-guide.md +3 -1
- package/docs/content/template-analytics.md +1 -1
- package/docs/content/template-assets.md +12 -3
- package/docs/content/template-brain.md +64 -72
- package/docs/content/template-chat.md +32 -4
- package/docs/content/template-clips.md +35 -4
- package/docs/content/template-design.md +19 -3
- package/docs/content/template-dispatch.md +9 -0
- package/docs/content/template-forms.md +15 -10
- package/docs/content/template-plan.md +13 -5
- package/docs/content/template-slides.md +14 -14
- package/docs/content/template-videos.md +10 -12
- package/docs/content/tracking.md +66 -55
- package/docs/content/using-your-agent.md +6 -16
- package/docs/content/what-is-agent-native.md +5 -11
- package/docs/content/workspace-management.md +2 -2
- package/docs/content/workspace.md +20 -160
- package/package.json +6 -2
- package/src/templates/default/package.json +1 -0
- package/src/templates/headless/AGENTS.md +3 -0
- package/src/templates/headless/DEVELOPING.md +4 -0
- package/src/templates/headless/actions/run.ts +6 -0
- package/src/templates/workspace-root/README.md +4 -4
package/dist/cli/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath, pathToFileURL } from \"url\";\nimport { execFileSync } from \"child_process\";\nimport { setupAgentSymlinks } from \"./setup-agents.js\";\nimport { workspacifyApp, parseWorkspaceScope } from \"./workspacify.js\";\nimport {\n DISPATCH_WORKSPACE_ROOT_REDIRECTS,\n getWorkspaceAppIdValidationError,\n} from \"../shared/workspace-app-id.js\";\nimport {\n coreTemplates,\n getTemplate,\n allTemplateNames,\n type TemplateMeta,\n} from \"./templates-meta.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst REPO = \"BuilderIO/agent-native\";\nconst TEMPLATES_DIR = \"templates\";\nconst POSTGRES_DEPENDENCY_VERSION = \"^3.4.9\";\nconst STANDALONE_EXACT_DEPENDENCY_OVERRIDES: Record<string, string> = {\n \"@react-router/dev\": \"7.16.0\",\n \"@react-router/fs-routes\": \"7.16.0\",\n \"react-router\": \"7.16.0\",\n};\nconst FIRST_PARTY_TARBALL_SYMLINK_EXCLUDES = [\n \"*/CLAUDE.md\",\n \"*/.claude/skills\",\n];\n\n/**\n * Tagged error for input that fails CLI-level validation (repo names, app\n * names, etc.). The Sentry `beforeSend` hook in cli/index.ts drops events\n * whose top-level exception type is `ValidationError` so we don't pollute\n * Sentry with expected user-input rejections.\n */\nexport class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Move the primitive-first and chat on-ramps to the top of the list so they\n * line up with clack's default highlight.\n */\nfunction onRampFirst(templates: TemplateMeta[]): TemplateMeta[] {\n return moveTemplatesToFront(templates, [\"headless\", \"chat\"]);\n}\n\nfunction moveTemplatesToFront(\n templates: TemplateMeta[],\n preferredNames: string[],\n): TemplateMeta[] {\n const preferred = preferredNames\n .map((name) => templates.find((t) => t.name === name))\n .filter((template): template is TemplateMeta => Boolean(template));\n if (preferred.length === 0) return templates;\n const preferredSet = new Set(preferred.map((t) => t.name));\n return [...preferred, ...templates.filter((t) => !preferredSet.has(t.name))];\n}\n\n/** Primitive-first scaffold option appended to standalone pickers. */\nconst HEADLESS_OPTION = {\n name: \"headless\",\n label: \"Headless\",\n hint: \"Action-first app with one hello primitive and no UI shell\",\n};\n\nexport interface CreateAppOptions {\n /** Pre-select these templates in the picker. Comma-separated string or array. */\n template?: string;\n /** Scaffold a single standalone app (old behavior). Skips workspace creation. */\n standalone?: boolean;\n /** Internal: skip pnpm install at the end (for tests). */\n noInstall?: boolean;\n}\n\n/**\n * Main entry for `agent-native create [name]`.\n *\n * Default behavior: scaffold a workspace at <name>/ with a multi-select\n * template picker. Use --standalone for the single-app standalone flow.\n *\n * If run *inside* an existing workspace, falls through to the add-app\n * flow that scaffolds one new app under apps/<name>/.\n */\nexport async function createApp(\n name?: string,\n opts?: CreateAppOptions,\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n\n // If we're already inside a workspace, the meaning of `create <name>` is\n // \"add a new app to this workspace\". Delegate to add-app.\n const workspace = detectWorkspace(process.cwd());\n if (workspace) {\n await addAppToWorkspace(name, opts);\n return;\n }\n\n // Standalone escape hatch — behaves like the old single-app flow.\n if (opts?.standalone) {\n await createStandaloneApp(name, opts, clack);\n return;\n }\n\n // When exactly one template is specified explicitly, treat it as a\n // standalone scaffold (script-friendly, matches historic behavior).\n // Use `--template a,b` or pass no --template to opt into the workspace\n // flow with the multi-select picker.\n const parsed = parseTemplateList(opts?.template);\n if (parsed.includes(\"headless\") && parsed.length > 1) {\n clack.cancel(\n \"The headless scaffold is standalone-only. Use `agent-native create my-app --headless`, or use the Chat template when adding a UI app to a workspace.\",\n );\n process.exit(1);\n }\n if (parsed.length === 1) {\n await createStandaloneApp(name, opts, clack);\n return;\n }\n\n // Default: create a workspace.\n await createWorkspaceInteractive(name, opts, clack);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Workspace creation (new default)\n * ───────────────────────────────────────────────────────────────────────── */\n\nasync function createWorkspaceInteractive(\n name: string | undefined,\n opts: CreateAppOptions | undefined,\n clack: typeof import(\"@clack/prompts\"),\n): Promise<void> {\n clack.intro(\"Create a new agent-native workspace\");\n\n name = await promptNameIfMissing(name, clack, \"workspace\", \"my-platform\");\n const preselected = parseTemplateList(opts?.template);\n\n clack.note(\n [\n `You're creating a workspace named \"${name}\". A workspace is a monorepo`,\n \"container — it isn't an app itself. Inside it you pick one or more apps\",\n \"(below), and each app gets its own route, agent, and UI. Apps in the\",\n \"same workspace share auth, database, and the agent chat. Add more apps\",\n \"later with `npx @agent-native/core@latest add-app`. Chat is the UI on-ramp\",\n \"for a minimal chat-first app with the browser shell already wired.\",\n \"Dispatch is always included as the workspace control plane —\",\n \"it owns shared secrets, messaging, approvals, and cross-app routing.\",\n ].join(\"\\n\"),\n \"About workspaces\",\n );\n\n // Dispatch is the workspace control plane (shared secrets, messaging,\n // approvals, cross-app routing) and is always scaffolded — the picker\n // only shows the optional apps. If the user explicitly passed\n // `--template=...`, those entries get unioned with dispatch.\n const optionalPicks =\n preselected.length > 0\n ? preselected.filter((t) => t !== \"dispatch\")\n : await promptTemplatePicker(preselected, clack, {\n defaultTemplates: [\"chat\"],\n preferredFirst: [\"chat\"],\n excludeNames: [\"dispatch\"],\n });\n const templates = [\"dispatch\", ...optionalPicks];\n\n const targetDir = path.resolve(process.cwd(), name);\n if (fs.existsSync(targetDir)) {\n clack.cancel(`Directory \"${name}\" already exists.`);\n process.exit(1);\n }\n\n const s = clack.spinner();\n s.start(`Scaffolding workspace \"${name}\"...`);\n const appNames = new Set<string>();\n const scaffoldedApps: string[] = [];\n\n try {\n await scaffoldWorkspaceRoot(targetDir, name);\n const workspaceCoreName = `@${name}/shared`;\n\n for (let i = 0; i < templates.length; i++) {\n const templateName = templates[i];\n const appName = workspaceAppNameForTemplateSelection(templateName);\n validateWorkspaceAppName(appName, clack, {\n allowDispatch: appName === \"dispatch\" && templateName === \"dispatch\",\n });\n if (appNames.has(appName)) {\n clack.cancel(\n `Workspace app \"${appName}\" is selected more than once. Choose unique app templates or app names.`,\n );\n process.exit(1);\n }\n appNames.add(appName);\n scaffoldedApps.push(appName);\n // Distinguish download vs local copy in the spinner so a multi-second\n // GitHub fetch doesn't look like a frozen \"Scaffolding...\" message.\n // Mirrors the local-vs-remote decision inside scaffoldAppTemplate.\n const willDownload =\n templateName !== \"headless\" && templateName.startsWith(\"github:\")\n ? true\n : !findLocalTemplate(normalizeTemplateName(templateName));\n s.message(\n willDownload\n ? `Downloading ${titleCase(appName)} template (${i + 1}/${templates.length})...`\n : `Scaffolding ${titleCase(appName)} (${i + 1}/${templates.length})...`,\n );\n const appDir = path.join(targetDir, \"apps\", appName);\n await scaffoldAppTemplate(appDir, templateName);\n s.message(\n `Configuring ${titleCase(appName)} (${i + 1}/${templates.length})...`,\n );\n replacePlaceholders(appDir, appName, appTitleForScaffold(appName), name);\n rewriteTrackingAppId(appDir, appName, templateName);\n workspacifyApp({\n appDir,\n appName,\n templateName,\n workspaceRoot: targetDir,\n workspaceCoreName,\n coreDependencyVersion: getCoreDependencyVersion(),\n dispatchDependencyVersion: getDispatchDependencyVersion(),\n });\n fixPackageJsonName(appDir, appName, templateName);\n fixWebManifestName(appDir, appName, templateName);\n rewriteNetlifyToml(appDir, appName, \"workspace\");\n renameGitignore(appDir);\n // Each app owns its own .claude / .agents symlinks.\n setupAgentSymlinks(appDir);\n }\n\n s.message(\"Adding shared packages...\");\n await scaffoldRequiredPackages(templates, targetDir);\n\n s.stop(\n `Workspace scaffolded with ${templates.length} app${templates.length === 1 ? \"\" : \"s\"}.`,\n );\n } catch (err: any) {\n s.stop(\"Failed to scaffold workspace.\");\n // Remove the partially-scaffolded workspace so a retry of `agent-native\n // create <name>` doesn't trip the \"Directory already exists\" guard.\n cleanupOnFailure(targetDir);\n clack.cancel(err?.message ?? String(err));\n process.exit(1);\n }\n\n tryGitInit(targetDir);\n\n // Show the user the tree we just built so the workspace/app distinction is\n // visible, not just described. First-time users routinely expect their\n // workspace name to be the app — seeing apps/<template>/ subdirectories\n // makes the structure concrete.\n const treeLines = [\n ` ${name}/ ← your workspace`,\n ...scaffoldedApps.map(\n (appName, i) =>\n ` ${i === scaffoldedApps.length - 1 ? \"└─\" : \"├─\"} apps/${appName}/`.padEnd(\n 30,\n ) + ` ← app`,\n ),\n ];\n const dispatchNextStep = [\n `Once running, open Dispatch — you'll see \"Workspace: ${titleCase(name)}\"`,\n `at the top, with all your apps listed under it.`,\n ];\n\n const installSteps = hasPnpm()\n ? [\n ` pnpm install`,\n ` pnpm dev # starts Dispatch on http://localhost:8092`,\n ]\n : [\n ` # pnpm is required but wasn't found on your PATH. Install it first:`,\n ` npm install -g pnpm`,\n ``,\n ` pnpm install`,\n ` pnpm dev # starts Dispatch on http://localhost:8092`,\n ];\n\n clack.outro(\n [\n `Created workspace \"${name}\" with ${templates.length} app${templates.length === 1 ? \"\" : \"s\"}:`,\n ``,\n ...treeLines,\n ``,\n `Next steps:`,\n ``,\n ` cd ${name}`,\n ...installSteps,\n ``,\n ...dispatchNextStep,\n ``,\n `Add another app later: npx @agent-native/core@latest add-app`,\n `Deploy the whole workspace: pnpm exec agent-native deploy`,\n ].join(\"\\n\"),\n );\n}\n\nfunction workspaceAppNameForTemplateSelection(templateName: string): string {\n const normalized = normalizeTemplateName(templateName);\n if (!normalized.startsWith(\"github:\")) return templateName;\n const repo = normalized.slice(\"github:\".length).trim();\n const repoName = repo.split(\"/\").filter(Boolean).pop() ?? \"app\";\n let appName = repoName\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (!appName) appName = \"app\";\n if (!/^[a-z]/.test(appName)) appName = `app-${appName}`;\n return appName;\n}\n\n/**\n * Detect whether pnpm is on PATH. End-user machines often have npm/yarn but\n * not pnpm; the workspace scaffold uses pnpm workspaces, so we surface a\n * specific install hint in the outro when it's missing rather than letting\n * the user hit `zsh: command not found: pnpm`.\n */\nfunction hasPnpm(): boolean {\n try {\n execFileSync(\"pnpm\", [\"--version\"], { stdio: \"ignore\" });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function scaffoldWorkspaceRoot(\n targetDir: string,\n name: string,\n): Promise<void> {\n const packageRoot = path.resolve(__dirname, \"../..\");\n const rootTemplate = path.join(packageRoot, \"src/templates/workspace-root\");\n const coreTemplate = path.join(packageRoot, \"src/templates/workspace-core\");\n\n copyDir(rootTemplate, targetDir);\n replacePlaceholders(targetDir, name, titleCase(name));\n rewriteCoreDependencyVersions(targetDir);\n renameGitignore(targetDir);\n\n // Inject the catalog from this repo's pnpm-workspace.yaml so templates'\n // `catalog:` version references resolve in the scaffolded workspace.\n const catalog = loadCatalog();\n if (Object.keys(catalog).length > 0) {\n const wsPath = path.join(targetDir, \"pnpm-workspace.yaml\");\n const existing = fs.existsSync(wsPath)\n ? fs.readFileSync(wsPath, \"utf-8\")\n : \"\";\n if (!existing.includes(\"catalog:\")) {\n const catalogYaml = Object.entries(catalog)\n .map(([k, v]) => ` \"${k}\": \"${v}\"`)\n .join(\"\\n\");\n fs.writeFileSync(\n wsPath,\n existing.trimEnd() + \"\\ncatalog:\\n\" + catalogYaml + \"\\n\",\n );\n }\n }\n\n const corePackageDir = path.join(targetDir, \"packages\", \"shared\");\n fs.mkdirSync(path.join(targetDir, \"packages\"), { recursive: true });\n copyDir(coreTemplate, corePackageDir);\n replacePlaceholders(corePackageDir, name, titleCase(name));\n rewriteCoreDependencyVersions(corePackageDir);\n setupAgentSymlinks(corePackageDir);\n\n // Ensure apps/ exists (even if empty).\n fs.mkdirSync(path.join(targetDir, \"apps\"), { recursive: true });\n\n // Root-level agent instructions apply before an agent descends into an app.\n linkWorkspaceRootSkills(targetDir);\n setupAgentSymlinks(targetDir);\n}\n\nfunction linkWorkspaceRootSkills(targetDir: string): void {\n const sharedSkillsDir = path.join(\n targetDir,\n \"packages\",\n \"shared\",\n \".agents\",\n \"skills\",\n );\n if (!fs.existsSync(sharedSkillsDir)) return;\n\n const agentsDir = path.join(targetDir, \".agents\");\n const linkPath = path.join(agentsDir, \"skills\");\n const target = \"../packages/shared/.agents/skills\";\n\n fs.mkdirSync(agentsDir, { recursive: true });\n\n try {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n if (fs.readlinkSync(linkPath) === target) return;\n fs.unlinkSync(linkPath);\n } else {\n return;\n }\n } catch {\n // Missing link; create below.\n }\n\n try {\n fs.symlinkSync(\n target,\n linkPath,\n process.platform === \"win32\" ? \"junction\" : \"dir\",\n );\n } catch {\n try {\n copyDir(sharedSkillsDir, linkPath);\n } catch {\n // Best-effort fallback for environments that disallow symlinks.\n }\n }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Adding an app into an existing workspace\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Entry for `agent-native add-app [name]`. Called from inside a workspace.\n * Shows the multi-select picker (excluding already-installed apps) and\n * scaffolds each selected template under apps/<name>/.\n *\n * When `name` is provided with `--template foo`, scaffolds exactly one app\n * named <name> using template foo (non-interactive).\n */\nexport async function addAppToWorkspace(\n name?: string,\n opts?: CreateAppOptions,\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n const workspace = detectWorkspace(process.cwd());\n if (!workspace) {\n clack.cancel(\n \"Not inside a workspace. Run `agent-native create` to make one first, or use `--standalone`.\",\n );\n process.exit(1);\n }\n\n clack.intro(\"Add an app to your workspace\");\n\n const installed = listInstalledApps(workspace.workspaceRoot);\n\n // Non-interactive path: name + single --template\n const preselected = parseTemplateList(opts?.template);\n if (preselected.includes(\"headless\")) {\n clack.cancel(\n \"The headless scaffold is standalone-only. Use `agent-native create my-app --headless` outside a workspace, or use the Chat template when adding a UI app to a workspace.\",\n );\n process.exit(1);\n }\n if (name && preselected.length === 1) {\n const tpl = preselected[0];\n await scaffoldOneAppIntoWorkspace(workspace, name, tpl, clack);\n return;\n }\n\n const hasDispatch = installed.includes(\"dispatch\");\n const templates = await promptTemplatePicker(preselected, clack, {\n excludeNames: installed,\n message: \"Which apps do you want to add?\",\n defaultTemplates: hasDispatch ? undefined : [\"dispatch\"],\n preferredFirst: hasDispatch ? [\"chat\"] : [\"dispatch\", \"chat\"],\n recommendedNames: hasDispatch ? [] : [\"dispatch\"],\n });\n if (templates.length === 0) {\n clack.cancel(\"No apps selected. Cancelled.\");\n process.exit(0);\n }\n\n for (const t of templates) {\n await scaffoldOneAppIntoWorkspace(workspace, t, t, clack);\n }\n}\n\nasync function scaffoldOneAppIntoWorkspace(\n workspace: { workspaceRoot: string; workspaceCoreName: string },\n appName: string,\n templateName: string,\n clack: typeof import(\"@clack/prompts\"),\n): Promise<void> {\n // Dispatch is the one reserved-route exception: the canonical workspace\n // control-plane app intentionally owns /dispatch.\n validateWorkspaceAppName(appName, clack, {\n allowDispatch: appName === \"dispatch\" && templateName === \"dispatch\",\n });\n const appsDir = path.join(workspace.workspaceRoot, \"apps\");\n fs.mkdirSync(appsDir, { recursive: true });\n const appDir = path.join(appsDir, appName);\n\n if (fs.existsSync(appDir)) {\n clack.cancel(`Directory \"apps/${appName}\" already exists.`);\n process.exit(1);\n }\n\n const s = clack.spinner();\n s.start(\n `Working... no action needed. Scaffolding apps/${appName} from ${templateName}.`,\n );\n\n try {\n await scaffoldAppTemplate(appDir, templateName);\n replacePlaceholders(\n appDir,\n appName,\n appTitleForScaffold(appName),\n path.basename(workspace.workspaceRoot),\n );\n rewriteTrackingAppId(appDir, appName, templateName);\n workspacifyApp({\n appDir,\n appName,\n templateName,\n workspaceRoot: workspace.workspaceRoot,\n workspaceCoreName: workspace.workspaceCoreName,\n coreDependencyVersion: getCoreDependencyVersion(),\n dispatchDependencyVersion: getDispatchDependencyVersion(),\n });\n fixPackageJsonName(appDir, appName, templateName);\n fixWebManifestName(appDir, appName, templateName);\n rewriteNetlifyToml(appDir, appName, \"workspace\");\n renameGitignore(appDir);\n setupAgentSymlinks(appDir);\n await scaffoldRequiredPackages([templateName], workspace.workspaceRoot);\n s.stop(`Scaffolded apps/${appName}.`);\n } catch (err: any) {\n s.stop(`Failed to scaffold apps/${appName}.`);\n cleanupOnFailure(appDir);\n clack.cancel(err?.message ?? String(err));\n process.exit(1);\n }\n\n clack.outro(\n [\n `Done!`,\n ``,\n ` pnpm install`,\n ` pnpm dev`,\n ``,\n `The workspace gateway will detect apps/${appName} and serve it at /${appName}.`,\n ].join(\"\\n\"),\n );\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Standalone creation (escape hatch)\n * ───────────────────────────────────────────────────────────────────────── */\n\nasync function createStandaloneApp(\n name: string | undefined,\n opts: CreateAppOptions | undefined,\n clack: typeof import(\"@clack/prompts\"),\n): Promise<void> {\n clack.intro(\"Create a new standalone agent-native app\");\n\n name = await promptNameIfMissing(name, clack, \"app\", \"my-app\");\n\n const targetDir = path.resolve(process.cwd(), name);\n if (fs.existsSync(targetDir)) {\n clack.cancel(`Directory \"${name}\" already exists.`);\n process.exit(1);\n }\n\n // Standalone is single-select — pick one template.\n let template =\n opts?.template && !opts.template.includes(\",\") ? opts.template : undefined;\n if (!template) {\n const picked = await clack.select({\n message: \"Which template would you like to use?\",\n options: [\n {\n value: HEADLESS_OPTION.name,\n label: HEADLESS_OPTION.label,\n hint: HEADLESS_OPTION.hint,\n },\n ...onRampFirst(coreTemplates())\n .filter((t) => t.name !== HEADLESS_OPTION.name)\n .map((t) => ({\n value: t.name,\n label: t.label,\n hint: t.hint,\n })),\n ],\n });\n if (clack.isCancel(picked)) {\n clack.cancel(\"Cancelled.\");\n process.exit(0);\n }\n template = picked as string;\n }\n template = normalizeTemplateName(template);\n\n const s = clack.spinner();\n s.start(\n template === \"headless\"\n ? \"Scaffolding the headless action app...\"\n : `Downloading the ${template} template from GitHub...`,\n );\n try {\n await scaffoldAppTemplate(targetDir, template);\n s.message(`Setting up ${name}…`);\n postProcessStandalone(name, targetDir, template);\n s.stop(\"App created!\");\n } catch (err: any) {\n s.stop(\"Failed to create app.\");\n cleanupOnFailure(targetDir);\n clack.cancel(err?.message ?? String(err));\n process.exit(1);\n }\n\n tryGitInit(targetDir);\n\n if (template === \"headless\") {\n clack.outro(\n [\n \"Done! Next steps:\",\n \"\",\n ` cd ${name}`,\n \" pnpm install\",\n \" pnpm action hello --name Builder\",\n ` pnpm agent \"Call hello for Builder\"`,\n \"\",\n \"Add a UI later by starting from the Chat template; `agent-native add` is reserved for integration blueprints.\",\n ].join(\"\\n\"),\n );\n } else {\n clack.outro(\n `Done! Next steps:\\n\\n cd ${name}\\n pnpm install\\n pnpm dev`,\n );\n }\n}\n\n/**\n * Remove a partially-scaffolded target directory after a scaffold failure so a\n * retry doesn't hit the \"Directory already exists\" guard. Best-effort — the\n * underlying failure is what we want surfaced, so we swallow rm errors and\n * skip if the directory is somehow already gone.\n */\nfunction cleanupOnFailure(targetDir: string): void {\n try {\n if (fs.existsSync(targetDir)) {\n fs.rmSync(targetDir, { recursive: true, force: true });\n }\n } catch {\n // Ignore — original error is more useful than a cleanup failure.\n }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Shared scaffolding helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Scaffold a single app template into `targetDir`. Resolves:\n * - \"headless\" / legacy \"blank\" → bundled action-first template\n * - \"github:user/repo\" → download the whole repo\n * - first-party template name → download that subdir from BuilderIO/agent-native\n */\nasync function scaffoldAppTemplate(\n targetDir: string,\n template: string,\n): Promise<void> {\n fs.mkdirSync(path.dirname(targetDir), { recursive: true });\n\n // Normalize legacy / renamed aliases.\n let resolved = normalizeTemplateName(template);\n\n if (resolved === \"headless\") {\n const packageRoot = path.resolve(__dirname, \"../..\");\n const headlessDir = path.join(packageRoot, \"src/templates/headless\");\n if (!fs.existsSync(headlessDir)) {\n throw new Error(\n `Headless template not found at ${headlessDir}. Is the package installed correctly?`,\n );\n }\n copyDir(headlessDir, targetDir);\n return;\n }\n\n if (resolved.startsWith(\"github:\")) {\n const repo = resolved.slice(\"github:\".length);\n await downloadGitHubRepo(repo, targetDir);\n return;\n }\n\n if (!getTemplate(resolved)) {\n throw new Error(\n `Unknown template \"${template}\". Known: ${allTemplateNames().join(\", \")} — or use github:user/repo for community templates.`,\n );\n }\n\n // If running from the framework monorepo with a local templates/ dir, use\n // that. Otherwise download from GitHub. This keeps `agent-native create`\n // fast during framework development.\n const sourceTemplate = templateSourceName(resolved);\n const localTemplate = findLocalTemplate(sourceTemplate);\n if (localTemplate) {\n copyDir(localTemplate, targetDir);\n } else {\n await downloadGitHubSubdir(\n REPO,\n `${TEMPLATES_DIR}/${sourceTemplate}`,\n targetDir,\n );\n }\n}\n\nfunction templateSourceName(name: string): string {\n if (name === \"starter\") return \"chat\";\n return name;\n}\n\n/**\n * When developing the framework itself, prefer the sibling templates/<name>\n * directory. Returns undefined when running as a published package.\n */\nfunction findLocalTemplate(name: string): string | undefined {\n let dir = path.resolve(__dirname);\n for (let i = 0; i < 10; i++) {\n const candidate = path.join(dir, \"templates\", name);\n if (fs.existsSync(path.join(candidate, \"package.json\"))) {\n return candidate;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return undefined;\n}\n\nfunction normalizeTemplateName(template: string): string {\n if (template === \"blank\") return \"headless\";\n if (template === \"video\") return \"videos\";\n if (template === \"image\" || template === \"images\" || template === \"asset\") {\n return \"assets\";\n }\n return template;\n}\n\n/**\n * Find a local packages/<name> directory (for framework development).\n * Returns undefined when running as a published npm package.\n */\nfunction findLocalPackage(name: string): string | undefined {\n let dir = path.resolve(__dirname);\n for (let i = 0; i < 10; i++) {\n const candidate = path.join(dir, \"packages\", name);\n if (fs.existsSync(path.join(candidate, \"package.json\"))) {\n return candidate;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return undefined;\n}\n\n/**\n * Scaffold internal workspace packages required by the selected templates.\n * Deduplicates so each package is only copied once even if multiple\n * templates need it.\n */\nasync function scaffoldRequiredPackages(\n templateNames: string[],\n workspaceRoot: string,\n): Promise<void> {\n const needed = new Set<string>();\n for (const t of templateNames) {\n const meta = getTemplate(t);\n if (meta?.requiredPackages) {\n for (const p of meta.requiredPackages) needed.add(p);\n }\n }\n\n for (const pkgName of needed) {\n const targetDir = path.join(workspaceRoot, \"packages\", pkgName);\n if (fs.existsSync(targetDir)) continue;\n\n fs.mkdirSync(path.join(workspaceRoot, \"packages\"), { recursive: true });\n\n const localPkg = findLocalPackage(pkgName);\n if (localPkg) {\n copyDir(localPkg, targetDir);\n } else {\n await downloadGitHubSubdir(REPO, `packages/${pkgName}`, targetDir);\n }\n\n // The copied package may have @agent-native/core as a workspace:* dep.\n // Convert it to this CLI package's published range since\n // @agent-native/core is an npm package, not a workspace member.\n const pkgJsonPath = path.join(targetDir, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n for (const depType of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n ] as const) {\n const deps = pkg[depType];\n if (!deps) continue;\n for (const [key, val] of Object.entries(deps)) {\n if (\n typeof val === \"string\" &&\n val.startsWith(\"workspace:\") &&\n key === \"@agent-native/core\"\n ) {\n deps[key] = getCoreDependencyVersion();\n }\n }\n }\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n }\n }\n\n // Add a postinstall script to build workspace packages so their dist/\n // directories exist even when downloaded from GitHub (where dist/ is\n // gitignored).\n if (needed.size > 0) {\n const rootPkgPath = path.join(workspaceRoot, \"package.json\");\n if (fs.existsSync(rootPkgPath)) {\n try {\n const rootPkg = JSON.parse(fs.readFileSync(rootPkgPath, \"utf-8\"));\n rootPkg.scripts = rootPkg.scripts ?? {};\n const builds = [...needed]\n .map((n) => `pnpm --filter ./packages/${n} build`)\n .join(\" && \");\n const existing = rootPkg.scripts.postinstall;\n if (existing) {\n if (!existing.includes(builds)) {\n rootPkg.scripts.postinstall = `${existing} && ${builds}`;\n }\n } else {\n rootPkg.scripts.postinstall = builds;\n }\n fs.writeFileSync(rootPkgPath, JSON.stringify(rootPkg, null, 2) + \"\\n\");\n } catch {}\n }\n }\n}\n\n/**\n * Post-process a standalone scaffold: replace placeholders, strip\n * workspace:* deps, set up agent symlinks, etc.\n */\nfunction postProcessStandalone(\n name: string,\n targetDir: string,\n templateName?: string,\n): void {\n const appTitle = appTitleForScaffold(name);\n replacePlaceholders(targetDir, name, appTitle);\n rewriteTrackingAppId(targetDir, name, templateName);\n fixPackageJsonName(targetDir, name, templateName);\n fixWebManifestName(targetDir, name, templateName);\n rewriteNetlifyToml(targetDir, name, \"standalone\");\n\n for (const base of [\"learnings\"]) {\n const defaultsFile = path.join(targetDir, `${base}.defaults.md`);\n const targetFile = path.join(targetDir, `${base}.md`);\n if (fs.existsSync(defaultsFile) && !fs.existsSync(targetFile)) {\n fs.copyFileSync(defaultsFile, targetFile);\n }\n }\n\n renameGitignore(targetDir);\n\n // No monorepo-only files to drop for standalone scaffolds.\n // DEVELOPING.md is intentionally kept: it documents local run commands,\n // DATABASE_URL defaults, and other local-run instructions that are equally\n // valid for standalone apps.\n\n // Resolve workspace:* and catalog: deps for standalone projects.\n // catalog: references only resolve inside a pnpm workspace with a catalog\n // defined in pnpm-workspace.yaml — standalone scaffolds don't have one.\n const catalog = loadCatalog();\n const pkgPath = path.join(targetDir, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n for (const depType of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n ] as const) {\n const deps = pkg[depType];\n if (!deps) continue;\n for (const [key, val] of Object.entries(deps)) {\n const exactOverride = STANDALONE_EXACT_DEPENDENCY_OVERRIDES[key];\n if (exactOverride) {\n deps[key] = exactOverride;\n } else if (key === \"@agent-native/core\") {\n deps[key] = getCoreDependencyVersion();\n } else if (typeof val === \"string\" && val.startsWith(\"workspace:\")) {\n deps[key] = \"latest\";\n } else if (typeof val === \"string\" && val === \"catalog:\") {\n deps[key] = catalog[key] ?? \"latest\";\n }\n }\n }\n // Ensure pnpm.onlyBuiltDependencies is set so native packages\n // (better-sqlite3, esbuild, node-pty) compile their postinstall scripts\n // under pnpm 10+ without prompting for `pnpm approve-builds`.\n pkg.dependencies = pkg.dependencies ?? {};\n pkg.dependencies.postgres ??= POSTGRES_DEPENDENCY_VERSION;\n\n const requiredBuilt = [\"better-sqlite3\", \"esbuild\", \"node-pty\"];\n if (!pkg.pnpm || typeof pkg.pnpm !== \"object\") {\n pkg.pnpm = {};\n }\n const existing = Array.isArray(pkg.pnpm.onlyBuiltDependencies)\n ? pkg.pnpm.onlyBuiltDependencies\n : [];\n pkg.pnpm.onlyBuiltDependencies = Array.from(\n new Set([...existing, ...requiredBuilt]),\n );\n fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n }\n\n // Write pnpm-workspace.yaml for pnpm v11 compatibility. pnpm v11 no longer\n // reads the pnpm field in package.json, so allowBuilds and overrides must\n // live here. Merge into any existing file (e.g. from the default template)\n // without creating duplicate section headers.\n const wsPath = path.join(targetDir, \"pnpm-workspace.yaml\");\n try {\n const existing = fs.existsSync(wsPath)\n ? fs.readFileSync(wsPath, \"utf-8\")\n : \"\";\n const sections: Record<string, Record<string, string>> = {\n allowBuilds: {\n \"better-sqlite3\": \"true\",\n esbuild: \"true\",\n \"node-pty\": \"true\",\n },\n };\n if (templateName !== \"headless\") {\n sections.overrides = {\n '\"@assistant-ui/store\"': '\">=0.2.9 <0.2.14\"',\n '\"@assistant-ui/tap\"': '\"^0.5.14\"',\n };\n }\n const updated = mergeWorkspaceYamlSections(existing, sections);\n if (updated !== existing) {\n fs.writeFileSync(wsPath, updated);\n }\n } catch {}\n\n setupAgentSymlinks(targetDir);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Prompting helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\nasync function promptNameIfMissing(\n name: string | undefined,\n clack: typeof import(\"@clack/prompts\"),\n kind: \"workspace\" | \"app\",\n placeholder: string,\n): Promise<string> {\n if (name) {\n if (!/^[a-z][a-z0-9-]*$/.test(name)) {\n clack.cancel(\n `Invalid ${kind} name \"${name}\". Use lowercase letters, numbers, and hyphens.`,\n );\n process.exit(1);\n }\n return name;\n }\n const result = await clack.text({\n message: `What is your ${kind} name?`,\n placeholder,\n validate(value) {\n if (!value)\n return `${kind[0].toUpperCase() + kind.slice(1)} name is required`;\n if (!/^[a-z][a-z0-9-]*$/.test(value)) {\n return \"Use lowercase letters, numbers, and hyphens (must start with a letter)\";\n }\n if (fs.existsSync(path.resolve(process.cwd(), value))) {\n return `Directory \"${value}\" already exists`;\n }\n },\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n process.exit(0);\n }\n return result as string;\n}\n\nasync function promptTemplatePicker(\n preselected: string[],\n clack: typeof import(\"@clack/prompts\"),\n opts?: {\n defaultTemplates?: string[];\n excludeNames?: string[];\n message?: string;\n preferredFirst?: string[];\n recommendedNames?: string[];\n },\n): Promise<string[]> {\n const excluded = new Set(opts?.excludeNames ?? []);\n const orderedTemplates = opts?.preferredFirst\n ? moveTemplatesToFront(coreTemplates(), opts.preferredFirst)\n : onRampFirst(coreTemplates());\n const recommendedNames = new Set(opts?.recommendedNames ?? []);\n const options = orderedTemplates\n .filter((t) => !excluded.has(t.name))\n .map((t) => ({\n value: t.name,\n label: recommendedNames.has(t.name)\n ? `${t.label} (recommended)`\n : t.label,\n hint:\n recommendedNames.has(t.name) && t.name === \"dispatch\"\n ? \"Recommended workspace control plane: secrets, messaging, approvals, and A2A delegation\"\n : t.hint,\n }));\n\n // If there's nothing left to pick, the caller gets an empty selection —\n // they decide how to handle it.\n if (options.length === 0) return [];\n\n // Default pre-selection: what the user passed via --template, falling\n // back to caller defaults, then to \"chat\" when available.\n const defaults =\n preselected.length > 0\n ? preselected.filter((p) => options.some((o) => o.value === p))\n : opts?.defaultTemplates\n ? opts.defaultTemplates.filter((p) =>\n options.some((o) => o.value === p),\n )\n : options.some((o) => o.value === \"chat\")\n ? [\"chat\"]\n : [];\n\n const baseMessage = opts?.message ?? \"Which apps would you like to include?\";\n const result = await clack.multiselect({\n message: `${baseMessage}\\n (↑/↓ move · space to toggle · enter to confirm)`,\n options,\n initialValues: defaults,\n required: false,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n process.exit(0);\n }\n return result as string[];\n}\n\nfunction parseTemplateList(input?: string): string[] {\n if (!input) return [];\n return input\n .split(\",\")\n .map((s) => normalizeTemplateName(s.trim()))\n .filter(Boolean);\n}\n\nfunction listInstalledApps(workspaceRoot: string): string[] {\n const appsDir = path.join(workspaceRoot, \"apps\");\n if (!fs.existsSync(appsDir)) return [];\n return fs\n .readdirSync(appsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Workspace detection\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Walk up from startDir looking for a package.json with\n * `agent-native.workspaceCore` set. Returns the workspace root and core\n * package name, or null if not inside a workspace.\n */\nexport function detectWorkspace(\n startDir: string,\n): { workspaceRoot: string; workspaceCoreName: string } | null {\n let dir = path.resolve(startDir);\n for (let i = 0; i < 20; i++) {\n const pkgPath = path.join(dir, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n const wsCore = pkg?.[\"agent-native\"]?.workspaceCore;\n if (typeof wsCore === \"string\" && wsCore.length > 0) {\n return { workspaceRoot: dir, workspaceCoreName: wsCore };\n }\n } catch {}\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\nexport { parseWorkspaceScope };\n\n/** @internal — exported for E2E tests */\nexport {\n scaffoldWorkspaceRoot as _scaffoldWorkspaceRoot,\n scaffoldAppTemplate as _scaffoldAppTemplate,\n scaffoldRequiredPackages as _scaffoldRequiredPackages,\n postProcessStandalone as _postProcessStandalone,\n loadCatalog as _loadCatalog,\n fixPackageJsonName as _fixPackageJsonName,\n renameGitignore as _renameGitignore,\n rewriteNetlifyToml as _rewriteNetlifyToml,\n getCoreDependencyVersion as _getCoreDependencyVersion,\n getDispatchDependencyVersion as _getDispatchDependencyVersion,\n getGitHubTemplateRef as _getGitHubTemplateRef,\n getGitHubTemplateRefCandidates as _getGitHubTemplateRefCandidates,\n workspaceAppNameForTemplateSelection as _workspaceAppNameForTemplateSelection,\n shouldSkipScaffoldEntry as _shouldSkipScaffoldEntry,\n tarExtractArgs as _tarExtractArgs,\n};\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Download / copy helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\nfunction validateRepoName(repo: string): void {\n if (!/^[a-zA-Z0-9_.-]+\\/[a-zA-Z0-9_.-]+$/.test(repo)) {\n throw new ValidationError(\n `Invalid repository name \"${repo}\". Expected format: user/repo`,\n );\n }\n}\n\nfunction tarExtractArgs(\n tarPath: string,\n destDir: string,\n options: { skipAgentSymlinks?: boolean } = {},\n): string[] {\n const excludes = options.skipAgentSymlinks\n ? FIRST_PARTY_TARBALL_SYMLINK_EXCLUDES.flatMap((pattern) => [\n \"--exclude\",\n pattern,\n ])\n : [];\n return [\"xzf\", tarPath, \"--strip-components=1\", ...excludes, \"-C\", destDir];\n}\n\nfunction downloadAndExtract(\n url: string,\n destDir: string,\n options: { skipAgentSymlinks?: boolean } = {},\n): void {\n fs.mkdirSync(destDir, { recursive: true });\n // --fail-with-body so curl exits non-zero on HTTP 4xx/5xx instead of writing\n // the error body (HTML/JSON) to disk where tar then fails with the opaque\n // \"Unrecognized archive format\" message.\n const tarball = execFileSync(\"curl\", [\"--fail-with-body\", \"-sL\", url], {\n maxBuffer: 100 * 1024 * 1024,\n });\n const tarPath = path.join(destDir, \".download.tar.gz\");\n fs.writeFileSync(tarPath, tarball);\n try {\n execFileSync(\"tar\", tarExtractArgs(tarPath, destDir, options), {\n stdio: \"pipe\",\n });\n } finally {\n fs.unlinkSync(tarPath);\n }\n}\n\nasync function downloadGitHubSubdir(\n repo: string,\n subdir: string,\n targetDir: string,\n): Promise<void> {\n validateRepoName(repo);\n const refs = getGitHubTemplateRefCandidates();\n const errors: string[] = [];\n for (const ref of refs) {\n const tarUrl = `https://api.github.com/repos/${repo}/tarball/${encodeURIComponent(ref)}`;\n const tmpDir = path.join(\n targetDir,\n \"..\",\n `.agent-native-tmp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n );\n try {\n downloadAndExtract(tarUrl, tmpDir, { skipAgentSymlinks: repo === REPO });\n const srcDir = path.join(tmpDir, subdir);\n if (!fs.existsSync(srcDir)) {\n throw new Error(\n `Template directory \"${subdir}\" not found at ref \"${ref}\".`,\n );\n }\n copyDir(srcDir, targetDir);\n return;\n } catch (err) {\n errors.push(\n ` ${ref}: ${err instanceof Error ? err.message.split(\"\\n\")[0] : String(err)}`,\n );\n } finally {\n fs.rmSync(tmpDir, { recursive: true, force: true });\n }\n }\n throw new Error(\n `Failed to download templates from ${repo}. Tried refs:\\n${errors.join(\"\\n\")}`,\n );\n}\n\nasync function downloadGitHubRepo(\n repo: string,\n targetDir: string,\n): Promise<void> {\n validateRepoName(repo);\n const tarUrl = `https://api.github.com/repos/${repo}/tarball/main`;\n downloadAndExtract(tarUrl, targetDir);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Text / filesystem helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Merge key-value entries into named sections of a pnpm-workspace.yaml string\n * without creating duplicate section headers. For each section:\n * - If the section already exists, new entries are injected after its header.\n * - If the section is absent, a new block is appended at the end.\n * Entries already present (by key) are skipped.\n */\nfunction mergeWorkspaceYamlSections(\n yaml: string,\n sections: Record<string, Record<string, string>>,\n): string {\n let result = yaml;\n for (const [section, entries] of Object.entries(sections)) {\n for (const [key, value] of Object.entries(entries)) {\n if (result.includes(key)) continue;\n const sectionHeader = new RegExp(`^${section}:\\\\s*$`, \"m\");\n const match = sectionHeader.exec(result);\n if (match) {\n const insertAt = match.index + match[0].length;\n result =\n result.slice(0, insertAt) +\n `\\n ${key}: ${value}` +\n result.slice(insertAt);\n } else {\n result =\n result.trimEnd() +\n (result ? \"\\n\" : \"\") +\n `\\n${section}:\\n ${key}: ${value}\\n`;\n }\n }\n }\n return result;\n}\n\n/**\n * Load the pnpm workspace catalog.\n * First tries the build-time snapshot at dist/catalog.json (works when\n * running as a published npm package). Falls back to parsing the monorepo\n * pnpm-workspace.yaml (works during local framework development).\n */\nfunction loadCatalog(): Record<string, string> {\n try {\n // Build-time snapshot generated by finalize-build.mjs\n const snapshotPath = path.resolve(__dirname, \"../catalog.json\");\n if (fs.existsSync(snapshotPath)) {\n return JSON.parse(fs.readFileSync(snapshotPath, \"utf-8\"));\n }\n\n // Fallback: parse pnpm-workspace.yaml from the monorepo root\n // From dist/cli/ or src/cli/: 4 levels up → packages/core → packages → repo root\n const repoRoot = path.resolve(__dirname, \"../../../..\");\n const wsPath = path.join(repoRoot, \"pnpm-workspace.yaml\");\n if (!fs.existsSync(wsPath)) return {};\n const content = fs.readFileSync(wsPath, \"utf-8\");\n const result: Record<string, string> = {};\n let inCatalog = false;\n for (const line of content.split(\"\\n\")) {\n if (/^catalog:\\s*$/.test(line)) {\n inCatalog = true;\n continue;\n }\n if (inCatalog) {\n if (/^\\S/.test(line)) break;\n const match = line.match(/^\\s+\"?([^\":]+)\"?\\s*:\\s*\"?([^\"]+)\"?\\s*$/);\n if (match) result[match[1]] = match[2];\n }\n }\n return result;\n } catch {\n return {};\n }\n}\n\nfunction titleCase(name: string): string {\n return name\n .split(\"-\")\n .map((w) => (w ? w[0].toUpperCase() + w.slice(1) : w))\n .join(\" \");\n}\n\nfunction appTitleForScaffold(appName: string): string {\n return titleCase(appName);\n}\n\nfunction isChatOnRampTemplate(templateName: string | undefined): boolean {\n return templateName === \"chat\" || templateName === \"starter\";\n}\n\nfunction trackingTemplateName(\n templateName: string | undefined,\n): string | undefined {\n return templateName === \"starter\" ? \"chat\" : templateName;\n}\n\nfunction defaultPackageDescriptionForScaffold(appName: string): string {\n const appTitle = appTitleForScaffold(appName);\n return `Workspace app for ${appTitle}.`;\n}\n\nfunction shouldReplaceScaffoldDescription(value: unknown): boolean {\n if (typeof value !== \"string\" || !value.trim()) return true;\n return /\\b(starter|new app|blank\\b.*\\bapp)\\b/i.test(value);\n}\n\nfunction fixPackageJsonName(\n appDir: string,\n name: string,\n templateName?: string,\n): void {\n const pkgPath = path.join(appDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) return;\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n pkg.name = name;\n const appTitle = appTitleForScaffold(name);\n // When the user picked a custom name (e.g. `add-app todo --template=chat`)\n // the template's displayName would otherwise leak into the workspace apps\n // grid as the new app's label. Overwrite it so the app shows up as \"Todo\"\n // instead of the source template's branding.\n if (templateName && name !== templateName) {\n pkg.displayName = appTitle;\n }\n if (\n shouldReplaceScaffoldDescription(pkg.description) ||\n (isChatOnRampTemplate(templateName) && name !== templateName)\n ) {\n pkg.description = defaultPackageDescriptionForScaffold(name);\n }\n fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n}\n\nfunction fixWebManifestName(\n appDir: string,\n name: string,\n templateName?: string,\n): void {\n if (!isChatOnRampTemplate(templateName) || name === templateName) return;\n const manifestPath = path.join(appDir, \"public\", \"manifest.json\");\n if (!fs.existsSync(manifestPath)) return;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"));\n const appTitle = titleCase(name);\n manifest.name = appTitle;\n manifest.short_name = appTitle;\n if (\n typeof manifest.description !== \"string\" ||\n /\\b(blank app|starter|chat-first)\\b/i.test(manifest.description)\n ) {\n manifest.description = defaultPackageDescriptionForScaffold(name);\n }\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + \"\\n\");\n } catch {}\n}\n\nfunction getCoreDependencyVersion(): string {\n if (process.env.AGENT_NATIVE_CREATE_USE_LOCAL_CORE === \"1\") {\n const localCore = findLocalPackage(\"core\");\n if (localCore) return pathToFileURL(localCore).href;\n }\n\n // Generated apps must install before the current package version is\n // published. The dist-tag resolves to the newest released core today and to\n // this package version once the release goes live. Local file deps are\n // intentionally opt-in so scaffolded repos remain portable by default.\n return \"latest\";\n}\n\nfunction getDispatchDependencyVersion(): string {\n if (process.env.AGENT_NATIVE_CREATE_USE_LOCAL_CORE === \"1\") {\n const localDispatch = findLocalPackage(\"dispatch\");\n if (localDispatch) return pathToFileURL(localDispatch).href;\n }\n\n return \"latest\";\n}\n\nfunction getCorePackageVersion(): string | undefined {\n try {\n const packageRoot = path.resolve(__dirname, \"../..\");\n const pkg = JSON.parse(\n fs.readFileSync(path.join(packageRoot, \"package.json\"), \"utf-8\"),\n );\n return typeof pkg.version === \"string\" ? pkg.version : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Git refs to try, in priority order, when downloading templates from the\n * framework repo. The release tag scheme has shifted over time:\n *\n * - ≤ 0.7.83: single repo-wide tag `v<version>` (legacy).\n * - ≥ 0.8.0: changesets per-package tags\n * `@agent-native/core@<version>` (current).\n *\n * `main` is the final fallback so dev builds and brand-new releases (where\n * the tag has not propagated yet) still work — at the cost of pulling\n * potentially newer template code than the running CLI was built against.\n */\nfunction getGitHubTemplateRefCandidates(): string[] {\n const version = getCorePackageVersion();\n const candidates: string[] = [];\n if (version && /^\\d+\\.\\d+\\.\\d+(?:-.+)?$/.test(version)) {\n candidates.push(`@agent-native/core@${version}`);\n candidates.push(`v${version}`);\n }\n candidates.push(\"main\");\n return candidates;\n}\n\n/** @deprecated Kept for backward-compatible test imports. Returns the\n * highest-priority candidate; callers that need the full fallback list\n * should use `getGitHubTemplateRefCandidates()`. */\nfunction getGitHubTemplateRef(): string {\n return getGitHubTemplateRefCandidates()[0]!;\n}\n\nfunction rewriteCoreDependencyVersions(projectDir: string): void {\n const pkgPath = path.join(projectDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) return;\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n for (const depType of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n ] as const) {\n const deps = pkg[depType];\n if (deps?.[\"@agent-native/core\"]) {\n deps[\"@agent-native/core\"] = getCoreDependencyVersion();\n }\n }\n fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n}\n\nfunction validateWorkspaceAppName(\n appName: string,\n clack: typeof import(\"@clack/prompts\"),\n opts?: { allowDispatch?: boolean },\n): void {\n const error =\n opts?.allowDispatch && appName === \"dispatch\"\n ? null\n : getWorkspaceAppIdValidationError(appName);\n if (error) {\n clack.cancel(error);\n process.exit(1);\n }\n}\n\nfunction upsertTomlBuildEnvironment(\n content: string,\n vars: Record<string, string>,\n): string {\n const lines = content.split(\"\\n\");\n const sectionIndex = lines.findIndex(\n (line) => line.trim() === \"[build.environment]\",\n );\n if (sectionIndex === -1) {\n const envLines = [\"\", \"[build.environment]\"].concat(\n Object.entries(vars).map(([key, value]) => ` ${key} = \"${value}\"`),\n );\n return content.trimEnd() + \"\\n\" + envLines.join(\"\\n\") + \"\\n\";\n }\n\n let nextSectionIndex = lines.findIndex(\n (line, index) => index > sectionIndex && /^\\s*\\[/.test(line),\n );\n if (nextSectionIndex === -1) nextSectionIndex = lines.length;\n\n for (const [key, value] of Object.entries(vars)) {\n const existingIndex = lines.findIndex(\n (line, index) =>\n index > sectionIndex &&\n index < nextSectionIndex &&\n new RegExp(`^\\\\s*${key}\\\\s*=`).test(line),\n );\n const nextLine = ` ${key} = \"${value}\"`;\n if (existingIndex === -1) {\n lines.splice(nextSectionIndex, 0, nextLine);\n nextSectionIndex += 1;\n } else {\n lines[existingIndex] = nextLine;\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction ensureRedirect(\n content: string,\n from: string,\n to: string,\n status: number,\n): string {\n const escapedFrom = from.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const redirectPattern = new RegExp(\n `\\\\n?\\\\[\\\\[redirects\\\\]\\\\]\\\\s+from\\\\s*=\\\\s*\"${escapedFrom}\"\\\\s+to\\\\s*=\\\\s*\"[^\"]*\"\\\\s+status\\\\s*=\\\\s*\\\\d+(?:\\\\s+force\\\\s*=\\\\s*(?:true|false))?`,\n \"m\",\n );\n const block = [\n \"\",\n \"[[redirects]]\",\n ` from = \"${from}\"`,\n ` to = \"${to}\"`,\n ` status = ${status}`,\n ].join(\"\\n\");\n if (redirectPattern.test(content)) {\n return content.replace(redirectPattern, block);\n }\n return content.trimEnd() + \"\\n\" + block + \"\\n\";\n}\n\nfunction removeRedirect(content: string, from: string): string {\n const escapedFrom = from.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const redirectPattern = new RegExp(\n `\\\\n?\\\\[\\\\[redirects\\\\]\\\\]\\\\s+from\\\\s*=\\\\s*\"${escapedFrom}\"\\\\s+to\\\\s*=\\\\s*\"[^\"]*\"\\\\s+status\\\\s*=\\\\s*\\\\d+(?:\\\\s+force\\\\s*=\\\\s*(?:true|false))?`,\n \"gm\",\n );\n return content.replace(redirectPattern, \"\").replace(/\\n{3,}/g, \"\\n\\n\");\n}\n\nfunction addWorkspaceMountNetlifyConfig(\n content: string,\n appName: string,\n): string {\n const basePath = `/${appName}`;\n let next = upsertTomlBuildEnvironment(content, {\n APP_BASE_PATH: basePath,\n VITE_APP_BASE_PATH: basePath,\n NITRO_PRESET: \"netlify\",\n NPM_CONFIG_PRODUCTION: \"false\",\n });\n\n if (appName === \"dispatch\") {\n next = ensureRedirect(next, \"/\", \"/dispatch/overview\", 302);\n next = ensureRedirect(next, \"/dispatch\", \"/dispatch/overview\", 302);\n for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {\n next = ensureRedirect(next, `/${from}`, `/dispatch/${to}`, 302);\n }\n next = removeRedirect(next, \"/dispatch/*\");\n }\n\n return next;\n}\n\nfunction rewriteNetlifyToml(\n appDir: string,\n appName: string,\n mode: \"standalone\" | \"workspace\",\n): void {\n const netlifyPath = path.join(appDir, \"netlify.toml\");\n if (!fs.existsSync(netlifyPath)) return;\n\n try {\n let content = fs.readFileSync(netlifyPath, \"utf-8\");\n const originalCommand = content.match(/^ command = \"([^\"]*)\"$/m)?.[1];\n const usesUnpooledDatabase =\n originalCommand?.includes(\"NETLIFY_DATABASE_URL_UNPOOLED\") ?? false;\n const buildCommand =\n mode === \"workspace\"\n ? `APP_BASE_PATH=/${appName} VITE_APP_BASE_PATH=/${appName} NITRO_PRESET=netlify pnpm --filter ${appName} build`\n : \"NITRO_PRESET=netlify pnpm build\";\n const databaseSetup =\n 'export DATABASE_URL=\\\\\"${NETLIFY_DATABASE_URL:-$DATABASE_URL}\\\\\"';\n const buildDatabasePrefix = usesUnpooledDatabase\n ? 'DATABASE_URL=\\\\\"${NETLIFY_DATABASE_URL_UNPOOLED:-$DATABASE_URL}\\\\\" '\n : \"\";\n const command = `${databaseSetup} && ${buildDatabasePrefix}${buildCommand}`;\n const publishPath = mode === \"workspace\" ? `apps/${appName}/dist` : \"dist\";\n const functionsPath =\n mode === \"workspace\"\n ? `apps/${appName}/.netlify/functions-internal`\n : \".netlify/functions-internal\";\n\n content = content\n .replace(/^ command = \".*\"$/m, ` command = \"${command}\"`)\n .replace(\n /publish = \"templates\\/[^\"]+\\/dist\"/g,\n `publish = \"${publishPath}\"`,\n )\n .replace(\n /functions = \"templates\\/[^\"]+\\/\\.netlify\\/functions-internal\"/g,\n `functions = \"${functionsPath}\"`,\n )\n // Strip the `ignore` script line: it references a monorepo script path\n // (scripts/netlify-ignore-build.mjs) that doesn't exist in scaffolds, so\n // skip-unchanged would never work and every deploy logs a not-found error.\n .replace(/^\\s*ignore\\s*=\\s*\"[^\"]*\"\\s*\\n/m, \"\");\n\n if (mode === \"workspace\") {\n content = addWorkspaceMountNetlifyConfig(content, appName);\n }\n\n fs.writeFileSync(netlifyPath, content);\n } catch {}\n}\n\nfunction rewriteTrackingAppId(\n appDir: string,\n appName: string,\n templateName?: string,\n): void {\n const rootPath = path.join(appDir, \"app\", \"root.tsx\");\n if (!fs.existsSync(rootPath)) return;\n\n try {\n const content = fs.readFileSync(rootPath, \"utf-8\");\n const trackedTemplateName = trackingTemplateName(templateName);\n const sourceAppIds = [\"agent-native-[^\\\"']+\", \"\\\\{\\\\{APP_NAME\\\\}\\\\}\"];\n if (templateName && templateName !== appName) {\n sourceAppIds.push(escapeRegExp(templateName));\n }\n if (isChatOnRampTemplate(templateName)) {\n sourceAppIds.push(\"starter\", \"chat\");\n }\n const pattern = new RegExp(\n `(^\\\\s*app:\\\\s*)([\"'])(?:${sourceAppIds.join(\"|\")})\\\\2(\\\\s*,?)`,\n \"m\",\n );\n if (!pattern.test(content)) return;\n\n let next = content.replace(\n pattern,\n (_match, prefix: string, quote: string, suffix: string) =>\n `${prefix}${quote}${appName}${quote}${suffix}`,\n );\n\n if (\n trackedTemplateName &&\n trackedTemplateName !== appName &&\n !hasTrackingTemplate(next)\n ) {\n next = next.replace(\n /(^\\s*app:\\s*[\"'][^\"']+[\"'],?\\s*$)/m,\n (line) =>\n `${line}\\n template: ${JSON.stringify(trackedTemplateName)},`,\n );\n }\n\n if (next !== content) {\n fs.writeFileSync(rootPath, next);\n }\n } catch {}\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction hasTrackingTemplate(content: string): boolean {\n const match = content.match(/configureTracking\\(\\{[\\s\\S]*?\\}\\);/);\n return !!match && /^\\s*template\\s*:/m.test(match[0]);\n}\n\nfunction tryGitInit(dir: string): boolean {\n try {\n execFileSync(\"git\", [\"init\"], { cwd: dir, stdio: \"pipe\" });\n execFileSync(\"git\", [\"add\", \"-A\"], { cwd: dir, stdio: \"pipe\" });\n execFileSync(\n \"git\",\n [\"commit\", \"-m\", \"Initial commit from agent-native create\"],\n {\n cwd: dir,\n stdio: \"pipe\",\n env: {\n ...process.env,\n GIT_AUTHOR_NAME: \"agent-native\",\n GIT_AUTHOR_EMAIL: \"noreply@agent-native.com\",\n GIT_COMMITTER_NAME: \"agent-native\",\n GIT_COMMITTER_EMAIL: \"noreply@agent-native.com\",\n },\n },\n );\n return true;\n } catch {\n return false;\n }\n}\n\nfunction renameGitignore(dir: string): void {\n const src = path.join(dir, \"_gitignore\");\n const dst = path.join(dir, \".gitignore\");\n if (fs.existsSync(src)) fs.renameSync(src, dst);\n}\n\nfunction replacePlaceholders(\n dir: string,\n appName: string,\n appTitle: string,\n workspaceName?: string,\n): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isSymbolicLink()) continue;\n if (entry.isDirectory()) {\n replacePlaceholders(p, appName, appTitle, workspaceName);\n continue;\n }\n let content: string;\n try {\n content = fs.readFileSync(p, \"utf-8\");\n } catch {\n continue;\n }\n const hasWs =\n workspaceName !== undefined && content.includes(\"{{WORKSPACE_NAME}}\");\n if (\n !content.includes(\"{{APP_NAME}}\") &&\n !content.includes(\"{{APP_TITLE}}\") &&\n !hasWs\n ) {\n continue;\n }\n let next = content;\n if (workspaceName !== undefined) {\n next = next.replace(/\\{\\{WORKSPACE_NAME\\}\\}/g, workspaceName);\n }\n next = next\n .replace(/\\{\\{APP_NAME\\}\\}/g, appName)\n .replace(/\\{\\{APP_TITLE\\}\\}/g, appTitle);\n fs.writeFileSync(p, next);\n }\n}\n\nfunction copyDir(src: string, dest: string, root?: string): void {\n const resolvedRoot = root ?? path.resolve(src);\n fs.mkdirSync(dest, { recursive: true });\n for (const entry of fs.readdirSync(src, { withFileTypes: true })) {\n const srcPath = path.join(src, entry.name);\n if (shouldSkipScaffoldEntry(entry.name, srcPath)) continue;\n const destPath = path.join(dest, entry.name);\n if (entry.isSymbolicLink()) {\n const target = fs.readlinkSync(srcPath);\n const resolvedTarget = path.resolve(path.dirname(srcPath), target);\n if (resolvedTarget.startsWith(resolvedRoot)) {\n fs.symlinkSync(target, destPath);\n } else {\n try {\n const stat = fs.statSync(srcPath);\n if (stat.isDirectory()) {\n copyDir(srcPath, destPath, resolvedRoot);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n } catch {\n // Broken symlink — skip silently\n }\n }\n } else if (entry.isDirectory()) {\n copyDir(srcPath, destPath, resolvedRoot);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\nfunction shouldSkipScaffoldEntry(name: string, srcPath?: string): boolean {\n if (\n name === \"settings.json\" &&\n srcPath?.split(path.sep).includes(\".claude\")\n ) {\n return true;\n }\n if (\n name === \"node_modules\" ||\n name === \".agent-native\" ||\n name === \".env\" ||\n name === \".env.local\" ||\n name === \"pnpm-lock.yaml\" ||\n name === \".netlify\" ||\n name === \".vercel\" ||\n name === \".generated\" ||\n name === \".react-router\" ||\n name === \".output\" ||\n name === \"build\" ||\n name === \"dist\" ||\n name === \"test-results\" ||\n name === \"playwright-report\" ||\n name === \".DS_Store\"\n ) {\n return true;\n }\n return (\n name.endsWith(\".tmp.json\") ||\n /^qa-.*\\.db(?:-shm|-wal)?$/.test(name) ||\n /\\.db-(?:shm|wal)$/.test(name)\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath, pathToFileURL } from \"url\";\nimport { execFileSync } from \"child_process\";\nimport { setupAgentSymlinks } from \"./setup-agents.js\";\nimport { workspacifyApp, parseWorkspaceScope } from \"./workspacify.js\";\nimport {\n DISPATCH_WORKSPACE_ROOT_REDIRECTS,\n getWorkspaceAppIdValidationError,\n} from \"../shared/workspace-app-id.js\";\nimport {\n coreTemplates,\n getTemplate,\n allTemplateNames,\n type TemplateMeta,\n} from \"./templates-meta.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst REPO = \"BuilderIO/agent-native\";\nconst TEMPLATES_DIR = \"templates\";\nconst POSTGRES_DEPENDENCY_VERSION = \"^3.4.9\";\nconst STANDALONE_EXACT_DEPENDENCY_OVERRIDES: Record<string, string> = {\n \"@react-router/dev\": \"7.16.0\",\n \"@react-router/fs-routes\": \"7.16.0\",\n \"react-router\": \"7.16.0\",\n};\nconst FIRST_PARTY_TARBALL_SYMLINK_EXCLUDES = [\n \"*/CLAUDE.md\",\n \"*/.claude/skills\",\n];\n\n/**\n * Tagged error for input that fails CLI-level validation (repo names, app\n * names, etc.). The Sentry `beforeSend` hook in cli/index.ts drops events\n * whose top-level exception type is `ValidationError` so we don't pollute\n * Sentry with expected user-input rejections.\n */\nexport class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Move the primitive-first and chat on-ramps to the top of the list so they\n * line up with clack's default highlight.\n */\nfunction onRampFirst(templates: TemplateMeta[]): TemplateMeta[] {\n return moveTemplatesToFront(templates, [\"headless\", \"chat\"]);\n}\n\nfunction moveTemplatesToFront(\n templates: TemplateMeta[],\n preferredNames: string[],\n): TemplateMeta[] {\n const preferred = preferredNames\n .map((name) => templates.find((t) => t.name === name))\n .filter((template): template is TemplateMeta => Boolean(template));\n if (preferred.length === 0) return templates;\n const preferredSet = new Set(preferred.map((t) => t.name));\n return [...preferred, ...templates.filter((t) => !preferredSet.has(t.name))];\n}\n\n/** Primitive-first scaffold option appended to standalone pickers. */\nconst HEADLESS_OPTION = {\n name: \"headless\",\n label: \"Headless\",\n hint: \"Action-first app with one hello primitive and no UI shell\",\n};\n\nexport interface CreateAppOptions {\n /** Pre-select these templates in the picker. Comma-separated string or array. */\n template?: string;\n /** Scaffold a single standalone app (old behavior). Skips workspace creation. */\n standalone?: boolean;\n /** Internal: skip pnpm install at the end (for tests). */\n noInstall?: boolean;\n}\n\n/**\n * Main entry for `agent-native create [name]`.\n *\n * Default behavior: scaffold a workspace at <name>/ with a multi-select\n * template picker. Use --standalone for the single-app standalone flow.\n *\n * If run *inside* an existing workspace, falls through to the add-app\n * flow that scaffolds one new app under apps/<name>/.\n */\nexport async function createApp(\n name?: string,\n opts?: CreateAppOptions,\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n\n // If we're already inside a workspace, the meaning of `create <name>` is\n // \"add a new app to this workspace\". Delegate to add-app.\n const workspace = detectWorkspace(process.cwd());\n if (workspace) {\n await addAppToWorkspace(name, opts);\n return;\n }\n\n // Standalone escape hatch — behaves like the old single-app flow.\n if (opts?.standalone) {\n await createStandaloneApp(name, opts, clack);\n return;\n }\n\n // When exactly one template is specified explicitly, treat it as a\n // standalone scaffold (script-friendly, matches historic behavior).\n // Use `--template a,b` or pass no --template to opt into the workspace\n // flow with the multi-select picker.\n const parsed = parseTemplateList(opts?.template);\n if (parsed.includes(\"headless\") && parsed.length > 1) {\n clack.cancel(\n \"The headless scaffold is standalone-only. Use `agent-native create my-app --headless`, or use the Chat template when adding a UI app to a workspace.\",\n );\n process.exit(1);\n }\n if (parsed.length === 1) {\n await createStandaloneApp(name, opts, clack);\n return;\n }\n\n // Default: create a workspace.\n await createWorkspaceInteractive(name, opts, clack);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Workspace creation (new default)\n * ───────────────────────────────────────────────────────────────────────── */\n\nasync function createWorkspaceInteractive(\n name: string | undefined,\n opts: CreateAppOptions | undefined,\n clack: typeof import(\"@clack/prompts\"),\n): Promise<void> {\n clack.intro(\"Create a new agent-native workspace\");\n\n name = await promptNameIfMissing(name, clack, \"workspace\", \"my-platform\");\n const preselected = parseTemplateList(opts?.template);\n\n clack.note(\n [\n `You're creating a workspace named \"${name}\". A workspace is a monorepo`,\n \"container — it isn't an app itself. Inside it you pick one or more apps\",\n \"(below), and each app gets its own route, agent, and UI. Apps in the\",\n \"same workspace share auth, database, and the agent chat. Add more apps\",\n \"later with `npx @agent-native/core@latest add-app`. Chat is the UI on-ramp\",\n \"for a minimal chat-first app with the browser shell already wired.\",\n \"Dispatch is always included as the workspace control plane —\",\n \"it owns shared secrets, messaging, approvals, and cross-app routing.\",\n ].join(\"\\n\"),\n \"About workspaces\",\n );\n\n // Dispatch is the workspace control plane (shared secrets, messaging,\n // approvals, cross-app routing) and is always scaffolded — the picker\n // only shows the optional apps. If the user explicitly passed\n // `--template=...`, those entries get unioned with dispatch.\n const optionalPicks =\n preselected.length > 0\n ? preselected.filter((t) => t !== \"dispatch\")\n : await promptTemplatePicker(preselected, clack, {\n defaultTemplates: [\"chat\"],\n preferredFirst: [\"chat\"],\n excludeNames: [\"dispatch\"],\n });\n const templates = [\"dispatch\", ...optionalPicks];\n\n const targetDir = path.resolve(process.cwd(), name);\n if (fs.existsSync(targetDir)) {\n clack.cancel(`Directory \"${name}\" already exists.`);\n process.exit(1);\n }\n\n const s = clack.spinner();\n s.start(`Scaffolding workspace \"${name}\"...`);\n const appNames = new Set<string>();\n const scaffoldedApps: string[] = [];\n\n try {\n await scaffoldWorkspaceRoot(targetDir, name);\n const workspaceCoreName = `@${name}/shared`;\n\n for (let i = 0; i < templates.length; i++) {\n const templateName = templates[i];\n const appName = workspaceAppNameForTemplateSelection(templateName);\n validateWorkspaceAppName(appName, clack, {\n allowDispatch: appName === \"dispatch\" && templateName === \"dispatch\",\n });\n if (appNames.has(appName)) {\n clack.cancel(\n `Workspace app \"${appName}\" is selected more than once. Choose unique app templates or app names.`,\n );\n process.exit(1);\n }\n appNames.add(appName);\n scaffoldedApps.push(appName);\n // Distinguish download vs local copy in the spinner so a multi-second\n // GitHub fetch doesn't look like a frozen \"Scaffolding...\" message.\n // Mirrors the local-vs-remote decision inside scaffoldAppTemplate.\n const willDownload =\n templateName !== \"headless\" && templateName.startsWith(\"github:\")\n ? true\n : !findLocalTemplate(normalizeTemplateName(templateName));\n s.message(\n willDownload\n ? `Downloading ${titleCase(appName)} template (${i + 1}/${templates.length})...`\n : `Scaffolding ${titleCase(appName)} (${i + 1}/${templates.length})...`,\n );\n const appDir = path.join(targetDir, \"apps\", appName);\n await scaffoldAppTemplate(appDir, templateName);\n s.message(\n `Configuring ${titleCase(appName)} (${i + 1}/${templates.length})...`,\n );\n replacePlaceholders(appDir, appName, appTitleForScaffold(appName), name);\n rewriteTrackingAppId(appDir, appName, templateName);\n workspacifyApp({\n appDir,\n appName,\n templateName,\n workspaceRoot: targetDir,\n workspaceCoreName,\n coreDependencyVersion: getCoreDependencyVersion(),\n dispatchDependencyVersion: getDispatchDependencyVersion(),\n });\n fixPackageJsonName(appDir, appName, templateName);\n fixWebManifestName(appDir, appName, templateName);\n rewriteNetlifyToml(appDir, appName, \"workspace\");\n renameGitignore(appDir);\n // Each app owns its own .claude / .agents symlinks.\n setupAgentSymlinks(appDir);\n }\n\n s.message(\"Adding shared packages...\");\n await scaffoldRequiredPackages(templates, targetDir);\n\n s.stop(\n `Workspace scaffolded with ${templates.length} app${templates.length === 1 ? \"\" : \"s\"}.`,\n );\n } catch (err: any) {\n s.stop(\"Failed to scaffold workspace.\");\n // Remove the partially-scaffolded workspace so a retry of `agent-native\n // create <name>` doesn't trip the \"Directory already exists\" guard.\n cleanupOnFailure(targetDir);\n clack.cancel(err?.message ?? String(err));\n process.exit(1);\n }\n\n tryGitInit(targetDir);\n\n // Show the user the tree we just built so the workspace/app distinction is\n // visible, not just described. First-time users routinely expect their\n // workspace name to be the app — seeing apps/<template>/ subdirectories\n // makes the structure concrete.\n const treeLines = [\n ` ${name}/ ← your workspace`,\n ...scaffoldedApps.map(\n (appName, i) =>\n ` ${i === scaffoldedApps.length - 1 ? \"└─\" : \"├─\"} apps/${appName}/`.padEnd(\n 30,\n ) + ` ← app`,\n ),\n ];\n const dispatchNextStep = [\n `Once running, open Dispatch — you'll see \"Workspace: ${titleCase(name)}\"`,\n `at the top, with all your apps listed under it.`,\n ];\n\n const installSteps = hasPnpm()\n ? [\n ` pnpm install`,\n ` pnpm dev # starts Dispatch on http://localhost:8092`,\n ]\n : [\n ` # pnpm is required but wasn't found on your PATH. Install it first:`,\n ` npm install -g pnpm`,\n ``,\n ` pnpm install`,\n ` pnpm dev # starts Dispatch on http://localhost:8092`,\n ];\n\n clack.outro(\n [\n `Created workspace \"${name}\" with ${templates.length} app${templates.length === 1 ? \"\" : \"s\"}:`,\n ``,\n ...treeLines,\n ``,\n `Next steps:`,\n ``,\n ` cd ${name}`,\n ...installSteps,\n ``,\n ...dispatchNextStep,\n ``,\n `Add another app later: npx @agent-native/core@latest add-app`,\n `Deploy the whole workspace: pnpm exec agent-native deploy`,\n ].join(\"\\n\"),\n );\n}\n\nfunction workspaceAppNameForTemplateSelection(templateName: string): string {\n const normalized = normalizeTemplateName(templateName);\n if (!normalized.startsWith(\"github:\")) return templateName;\n const repo = normalized.slice(\"github:\".length).trim();\n const repoName = repo.split(\"/\").filter(Boolean).pop() ?? \"app\";\n let appName = repoName\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (!appName) appName = \"app\";\n if (!/^[a-z]/.test(appName)) appName = `app-${appName}`;\n return appName;\n}\n\n/**\n * Detect whether pnpm is on PATH. End-user machines often have npm/yarn but\n * not pnpm; the workspace scaffold uses pnpm workspaces, so we surface a\n * specific install hint in the outro when it's missing rather than letting\n * the user hit `zsh: command not found: pnpm`.\n */\nfunction hasPnpm(): boolean {\n try {\n execFileSync(\"pnpm\", [\"--version\"], { stdio: \"ignore\" });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function scaffoldWorkspaceRoot(\n targetDir: string,\n name: string,\n): Promise<void> {\n const packageRoot = path.resolve(__dirname, \"../..\");\n const rootTemplate = path.join(packageRoot, \"src/templates/workspace-root\");\n const coreTemplate = path.join(packageRoot, \"src/templates/workspace-core\");\n\n copyDir(rootTemplate, targetDir);\n replacePlaceholders(targetDir, name, titleCase(name));\n rewriteCoreDependencyVersions(targetDir);\n renameGitignore(targetDir);\n\n // Inject the catalog from this repo's pnpm-workspace.yaml so templates'\n // `catalog:` version references resolve in the scaffolded workspace.\n const catalog = loadCatalog();\n if (Object.keys(catalog).length > 0) {\n const wsPath = path.join(targetDir, \"pnpm-workspace.yaml\");\n const existing = fs.existsSync(wsPath)\n ? fs.readFileSync(wsPath, \"utf-8\")\n : \"\";\n if (!existing.includes(\"catalog:\")) {\n const catalogYaml = Object.entries(catalog)\n .map(([k, v]) => ` \"${k}\": \"${v}\"`)\n .join(\"\\n\");\n fs.writeFileSync(\n wsPath,\n existing.trimEnd() + \"\\ncatalog:\\n\" + catalogYaml + \"\\n\",\n );\n }\n }\n\n const corePackageDir = path.join(targetDir, \"packages\", \"shared\");\n fs.mkdirSync(path.join(targetDir, \"packages\"), { recursive: true });\n copyDir(coreTemplate, corePackageDir);\n replacePlaceholders(corePackageDir, name, titleCase(name));\n rewriteCoreDependencyVersions(corePackageDir);\n setupAgentSymlinks(corePackageDir);\n\n // Ensure apps/ exists (even if empty).\n fs.mkdirSync(path.join(targetDir, \"apps\"), { recursive: true });\n\n // Root-level agent instructions apply before an agent descends into an app.\n linkWorkspaceRootSkills(targetDir);\n setupAgentSymlinks(targetDir);\n}\n\nfunction linkWorkspaceRootSkills(targetDir: string): void {\n const sharedSkillsDir = path.join(\n targetDir,\n \"packages\",\n \"shared\",\n \".agents\",\n \"skills\",\n );\n if (!fs.existsSync(sharedSkillsDir)) return;\n\n const agentsDir = path.join(targetDir, \".agents\");\n const linkPath = path.join(agentsDir, \"skills\");\n const target = \"../packages/shared/.agents/skills\";\n\n fs.mkdirSync(agentsDir, { recursive: true });\n\n try {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n if (fs.readlinkSync(linkPath) === target) return;\n fs.unlinkSync(linkPath);\n } else {\n return;\n }\n } catch {\n // Missing link; create below.\n }\n\n try {\n fs.symlinkSync(\n target,\n linkPath,\n process.platform === \"win32\" ? \"junction\" : \"dir\",\n );\n } catch {\n try {\n copyDir(sharedSkillsDir, linkPath);\n } catch {\n // Best-effort fallback for environments that disallow symlinks.\n }\n }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Adding an app into an existing workspace\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Entry for `agent-native add-app [name]`. Called from inside a workspace.\n * Shows the multi-select picker (excluding already-installed apps) and\n * scaffolds each selected template under apps/<name>/.\n *\n * When `name` is provided with `--template foo`, scaffolds exactly one app\n * named <name> using template foo (non-interactive).\n */\nexport async function addAppToWorkspace(\n name?: string,\n opts?: CreateAppOptions,\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n const workspace = detectWorkspace(process.cwd());\n if (!workspace) {\n clack.cancel(\n \"Not inside a workspace. Run `agent-native create` to make one first, or use `--standalone`.\",\n );\n process.exit(1);\n }\n\n clack.intro(\"Add an app to your workspace\");\n\n const installed = listInstalledApps(workspace.workspaceRoot);\n\n // Non-interactive path: name + single --template\n const preselected = parseTemplateList(opts?.template);\n if (preselected.includes(\"headless\")) {\n clack.cancel(\n \"The headless scaffold is standalone-only. Use `agent-native create my-app --headless` outside a workspace, or use the Chat template when adding a UI app to a workspace.\",\n );\n process.exit(1);\n }\n if (name && preselected.length === 1) {\n const tpl = preselected[0];\n await scaffoldOneAppIntoWorkspace(workspace, name, tpl, clack);\n return;\n }\n\n const hasDispatch = installed.includes(\"dispatch\");\n const templates = await promptTemplatePicker(preselected, clack, {\n excludeNames: installed,\n message: \"Which apps do you want to add?\",\n defaultTemplates: hasDispatch ? undefined : [\"dispatch\"],\n preferredFirst: hasDispatch ? [\"chat\"] : [\"dispatch\", \"chat\"],\n recommendedNames: hasDispatch ? [] : [\"dispatch\"],\n });\n if (templates.length === 0) {\n clack.cancel(\"No apps selected. Cancelled.\");\n process.exit(0);\n }\n\n for (const t of templates) {\n await scaffoldOneAppIntoWorkspace(workspace, t, t, clack);\n }\n}\n\nasync function scaffoldOneAppIntoWorkspace(\n workspace: { workspaceRoot: string; workspaceCoreName: string },\n appName: string,\n templateName: string,\n clack: typeof import(\"@clack/prompts\"),\n): Promise<void> {\n // Dispatch is the one reserved-route exception: the canonical workspace\n // control-plane app intentionally owns /dispatch.\n validateWorkspaceAppName(appName, clack, {\n allowDispatch: appName === \"dispatch\" && templateName === \"dispatch\",\n });\n const appsDir = path.join(workspace.workspaceRoot, \"apps\");\n fs.mkdirSync(appsDir, { recursive: true });\n const appDir = path.join(appsDir, appName);\n\n if (fs.existsSync(appDir)) {\n clack.cancel(`Directory \"apps/${appName}\" already exists.`);\n process.exit(1);\n }\n\n const s = clack.spinner();\n s.start(\n `Working... no action needed. Scaffolding apps/${appName} from ${templateName}.`,\n );\n\n try {\n await scaffoldAppTemplate(appDir, templateName);\n replacePlaceholders(\n appDir,\n appName,\n appTitleForScaffold(appName),\n path.basename(workspace.workspaceRoot),\n );\n rewriteTrackingAppId(appDir, appName, templateName);\n workspacifyApp({\n appDir,\n appName,\n templateName,\n workspaceRoot: workspace.workspaceRoot,\n workspaceCoreName: workspace.workspaceCoreName,\n coreDependencyVersion: getCoreDependencyVersion(),\n dispatchDependencyVersion: getDispatchDependencyVersion(),\n });\n fixPackageJsonName(appDir, appName, templateName);\n fixWebManifestName(appDir, appName, templateName);\n rewriteNetlifyToml(appDir, appName, \"workspace\");\n renameGitignore(appDir);\n setupAgentSymlinks(appDir);\n await scaffoldRequiredPackages([templateName], workspace.workspaceRoot);\n s.stop(`Scaffolded apps/${appName}.`);\n } catch (err: any) {\n s.stop(`Failed to scaffold apps/${appName}.`);\n cleanupOnFailure(appDir);\n clack.cancel(err?.message ?? String(err));\n process.exit(1);\n }\n\n clack.outro(\n [\n `Done!`,\n ``,\n ` pnpm install`,\n ` pnpm dev`,\n ``,\n `The workspace gateway will detect apps/${appName} and serve it at /${appName}.`,\n ].join(\"\\n\"),\n );\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Standalone creation (escape hatch)\n * ───────────────────────────────────────────────────────────────────────── */\n\nasync function createStandaloneApp(\n name: string | undefined,\n opts: CreateAppOptions | undefined,\n clack: typeof import(\"@clack/prompts\"),\n): Promise<void> {\n clack.intro(\"Create a new standalone agent-native app\");\n\n name = await promptNameIfMissing(name, clack, \"app\", \"my-app\");\n\n const targetDir = path.resolve(process.cwd(), name);\n if (fs.existsSync(targetDir)) {\n clack.cancel(`Directory \"${name}\" already exists.`);\n process.exit(1);\n }\n\n // Standalone is single-select — pick one template.\n let template =\n opts?.template && !opts.template.includes(\",\") ? opts.template : undefined;\n if (!template) {\n const picked = await clack.select({\n message: \"Which template would you like to use?\",\n options: [\n {\n value: HEADLESS_OPTION.name,\n label: HEADLESS_OPTION.label,\n hint: HEADLESS_OPTION.hint,\n },\n ...onRampFirst(coreTemplates())\n .filter((t) => t.name !== HEADLESS_OPTION.name)\n .map((t) => ({\n value: t.name,\n label: t.label,\n hint: t.hint,\n })),\n ],\n });\n if (clack.isCancel(picked)) {\n clack.cancel(\"Cancelled.\");\n process.exit(0);\n }\n template = picked as string;\n }\n template = normalizeTemplateName(template);\n\n const s = clack.spinner();\n s.start(\n template === \"headless\"\n ? \"Scaffolding the headless agent app...\"\n : `Downloading the ${template} template from GitHub...`,\n );\n try {\n await scaffoldAppTemplate(targetDir, template);\n s.message(`Setting up ${name}…`);\n postProcessStandalone(name, targetDir, template);\n s.stop(\"App created!\");\n } catch (err: any) {\n s.stop(\"Failed to create app.\");\n cleanupOnFailure(targetDir);\n clack.cancel(err?.message ?? String(err));\n process.exit(1);\n }\n\n tryGitInit(targetDir);\n\n if (template === \"headless\") {\n clack.outro(\n [\n \"Done! Next steps:\",\n \"\",\n ` cd ${name}`,\n \" pnpm install\",\n \" pnpm action hello --name Builder\",\n ` pnpm agent \"Call hello for Builder\"`,\n \"\",\n \"Add a UI later by starting from the Chat template; `agent-native add` is reserved for integration blueprints.\",\n ].join(\"\\n\"),\n );\n } else {\n clack.outro(\n `Done! Next steps:\\n\\n cd ${name}\\n pnpm install\\n pnpm dev`,\n );\n }\n}\n\n/**\n * Remove a partially-scaffolded target directory after a scaffold failure so a\n * retry doesn't hit the \"Directory already exists\" guard. Best-effort — the\n * underlying failure is what we want surfaced, so we swallow rm errors and\n * skip if the directory is somehow already gone.\n */\nfunction cleanupOnFailure(targetDir: string): void {\n try {\n if (fs.existsSync(targetDir)) {\n fs.rmSync(targetDir, { recursive: true, force: true });\n }\n } catch {\n // Ignore — original error is more useful than a cleanup failure.\n }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Shared scaffolding helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Scaffold a single app template into `targetDir`. Resolves:\n * - \"headless\" / legacy \"blank\" → bundled action-first template\n * - \"github:user/repo\" → download the whole repo\n * - first-party template name → download that subdir from BuilderIO/agent-native\n */\nasync function scaffoldAppTemplate(\n targetDir: string,\n template: string,\n): Promise<void> {\n fs.mkdirSync(path.dirname(targetDir), { recursive: true });\n\n // Normalize legacy / renamed aliases.\n let resolved = normalizeTemplateName(template);\n\n if (resolved === \"headless\") {\n const packageRoot = path.resolve(__dirname, \"../..\");\n const headlessDir = path.join(packageRoot, \"src/templates/headless\");\n if (!fs.existsSync(headlessDir)) {\n throw new Error(\n `Headless template not found at ${headlessDir}. Is the package installed correctly?`,\n );\n }\n copyDir(headlessDir, targetDir);\n return;\n }\n\n if (resolved.startsWith(\"github:\")) {\n const repo = resolved.slice(\"github:\".length);\n await downloadGitHubRepo(repo, targetDir);\n return;\n }\n\n if (!getTemplate(resolved)) {\n throw new Error(\n `Unknown template \"${template}\". Known: ${allTemplateNames().join(\", \")} — or use github:user/repo for community templates.`,\n );\n }\n\n // If running from the framework monorepo with a local templates/ dir, use\n // that. Otherwise download from GitHub. This keeps `agent-native create`\n // fast during framework development.\n const sourceTemplate = templateSourceName(resolved);\n const localTemplate = findLocalTemplate(sourceTemplate);\n if (localTemplate) {\n copyDir(localTemplate, targetDir);\n } else {\n await downloadGitHubSubdir(\n REPO,\n `${TEMPLATES_DIR}/${sourceTemplate}`,\n targetDir,\n );\n }\n}\n\nfunction templateSourceName(name: string): string {\n if (name === \"starter\") return \"chat\";\n return name;\n}\n\n/**\n * When developing the framework itself, prefer the sibling templates/<name>\n * directory. Returns undefined when running as a published package.\n */\nfunction findLocalTemplate(name: string): string | undefined {\n let dir = path.resolve(__dirname);\n for (let i = 0; i < 10; i++) {\n const candidate = path.join(dir, \"templates\", name);\n if (fs.existsSync(path.join(candidate, \"package.json\"))) {\n return candidate;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return undefined;\n}\n\nfunction normalizeTemplateName(template: string): string {\n if (template === \"blank\") return \"headless\";\n if (template === \"video\") return \"videos\";\n if (template === \"image\" || template === \"images\" || template === \"asset\") {\n return \"assets\";\n }\n return template;\n}\n\n/**\n * Find a local packages/<name> directory (for framework development).\n * Returns undefined when running as a published npm package.\n */\nfunction findLocalPackage(name: string): string | undefined {\n let dir = path.resolve(__dirname);\n for (let i = 0; i < 10; i++) {\n const candidate = path.join(dir, \"packages\", name);\n if (fs.existsSync(path.join(candidate, \"package.json\"))) {\n return candidate;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return undefined;\n}\n\n/**\n * Scaffold internal workspace packages required by the selected templates.\n * Deduplicates so each package is only copied once even if multiple\n * templates need it.\n */\nasync function scaffoldRequiredPackages(\n templateNames: string[],\n workspaceRoot: string,\n): Promise<void> {\n const needed = new Set<string>();\n for (const t of templateNames) {\n const meta = getTemplate(t);\n if (meta?.requiredPackages) {\n for (const p of meta.requiredPackages) needed.add(p);\n }\n }\n\n for (const pkgName of needed) {\n const targetDir = path.join(workspaceRoot, \"packages\", pkgName);\n if (fs.existsSync(targetDir)) continue;\n\n fs.mkdirSync(path.join(workspaceRoot, \"packages\"), { recursive: true });\n\n const localPkg = findLocalPackage(pkgName);\n if (localPkg) {\n copyDir(localPkg, targetDir);\n } else {\n await downloadGitHubSubdir(REPO, `packages/${pkgName}`, targetDir);\n }\n\n // The copied package may have @agent-native/core as a workspace:* dep.\n // Convert it to this CLI package's published range since\n // @agent-native/core is an npm package, not a workspace member.\n const pkgJsonPath = path.join(targetDir, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n for (const depType of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n ] as const) {\n const deps = pkg[depType];\n if (!deps) continue;\n for (const [key, val] of Object.entries(deps)) {\n if (\n typeof val === \"string\" &&\n val.startsWith(\"workspace:\") &&\n key === \"@agent-native/core\"\n ) {\n deps[key] = getCoreDependencyVersion();\n }\n }\n }\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n }\n }\n\n // Add a postinstall script to build workspace packages so their dist/\n // directories exist even when downloaded from GitHub (where dist/ is\n // gitignored).\n if (needed.size > 0) {\n const rootPkgPath = path.join(workspaceRoot, \"package.json\");\n if (fs.existsSync(rootPkgPath)) {\n try {\n const rootPkg = JSON.parse(fs.readFileSync(rootPkgPath, \"utf-8\"));\n rootPkg.scripts = rootPkg.scripts ?? {};\n const builds = [...needed]\n .map((n) => `pnpm --filter ./packages/${n} build`)\n .join(\" && \");\n const existing = rootPkg.scripts.postinstall;\n if (existing) {\n if (!existing.includes(builds)) {\n rootPkg.scripts.postinstall = `${existing} && ${builds}`;\n }\n } else {\n rootPkg.scripts.postinstall = builds;\n }\n fs.writeFileSync(rootPkgPath, JSON.stringify(rootPkg, null, 2) + \"\\n\");\n } catch {}\n }\n }\n}\n\n/**\n * Post-process a standalone scaffold: replace placeholders, strip\n * workspace:* deps, set up agent symlinks, etc.\n */\nfunction postProcessStandalone(\n name: string,\n targetDir: string,\n templateName?: string,\n): void {\n const appTitle = appTitleForScaffold(name);\n replacePlaceholders(targetDir, name, appTitle);\n rewriteTrackingAppId(targetDir, name, templateName);\n fixPackageJsonName(targetDir, name, templateName);\n fixWebManifestName(targetDir, name, templateName);\n rewriteNetlifyToml(targetDir, name, \"standalone\");\n\n for (const base of [\"learnings\"]) {\n const defaultsFile = path.join(targetDir, `${base}.defaults.md`);\n const targetFile = path.join(targetDir, `${base}.md`);\n if (fs.existsSync(defaultsFile) && !fs.existsSync(targetFile)) {\n fs.copyFileSync(defaultsFile, targetFile);\n }\n }\n\n renameGitignore(targetDir);\n\n // No monorepo-only files to drop for standalone scaffolds.\n // DEVELOPING.md is intentionally kept: it documents local run commands,\n // DATABASE_URL defaults, and other local-run instructions that are equally\n // valid for standalone apps.\n\n // Resolve workspace:* and catalog: deps for standalone projects.\n // catalog: references only resolve inside a pnpm workspace with a catalog\n // defined in pnpm-workspace.yaml — standalone scaffolds don't have one.\n const catalog = loadCatalog();\n const pkgPath = path.join(targetDir, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n for (const depType of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n ] as const) {\n const deps = pkg[depType];\n if (!deps) continue;\n for (const [key, val] of Object.entries(deps)) {\n const exactOverride = STANDALONE_EXACT_DEPENDENCY_OVERRIDES[key];\n if (exactOverride) {\n deps[key] = exactOverride;\n } else if (key === \"@agent-native/core\") {\n deps[key] = getCoreDependencyVersion();\n } else if (typeof val === \"string\" && val.startsWith(\"workspace:\")) {\n deps[key] = \"latest\";\n } else if (typeof val === \"string\" && val === \"catalog:\") {\n deps[key] = catalog[key] ?? \"latest\";\n }\n }\n }\n // Ensure pnpm.onlyBuiltDependencies is set so native packages\n // (better-sqlite3, esbuild, node-pty) compile their postinstall scripts\n // under pnpm 10+ without prompting for `pnpm approve-builds`.\n pkg.dependencies = pkg.dependencies ?? {};\n pkg.dependencies.postgres ??= POSTGRES_DEPENDENCY_VERSION;\n\n const requiredBuilt = [\"better-sqlite3\", \"esbuild\", \"node-pty\"];\n if (!pkg.pnpm || typeof pkg.pnpm !== \"object\") {\n pkg.pnpm = {};\n }\n const existing = Array.isArray(pkg.pnpm.onlyBuiltDependencies)\n ? pkg.pnpm.onlyBuiltDependencies\n : [];\n pkg.pnpm.onlyBuiltDependencies = Array.from(\n new Set([...existing, ...requiredBuilt]),\n );\n fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n }\n\n // Write pnpm-workspace.yaml for pnpm v11 compatibility. pnpm v11 no longer\n // reads the pnpm field in package.json, so allowBuilds and overrides must\n // live here. Merge into any existing file (e.g. from the default template)\n // without creating duplicate section headers.\n const wsPath = path.join(targetDir, \"pnpm-workspace.yaml\");\n try {\n const existing = fs.existsSync(wsPath)\n ? fs.readFileSync(wsPath, \"utf-8\")\n : \"\";\n const sections: Record<string, Record<string, string>> = {\n allowBuilds: {\n \"better-sqlite3\": \"true\",\n esbuild: \"true\",\n \"node-pty\": \"true\",\n },\n };\n if (templateName !== \"headless\") {\n sections.overrides = {\n '\"@assistant-ui/store\"': '\">=0.2.9 <0.2.14\"',\n '\"@assistant-ui/tap\"': '\"^0.5.14\"',\n };\n }\n const updated = mergeWorkspaceYamlSections(existing, sections);\n if (updated !== existing) {\n fs.writeFileSync(wsPath, updated);\n }\n } catch {}\n\n setupAgentSymlinks(targetDir);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Prompting helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\nasync function promptNameIfMissing(\n name: string | undefined,\n clack: typeof import(\"@clack/prompts\"),\n kind: \"workspace\" | \"app\",\n placeholder: string,\n): Promise<string> {\n if (name) {\n if (!/^[a-z][a-z0-9-]*$/.test(name)) {\n clack.cancel(\n `Invalid ${kind} name \"${name}\". Use lowercase letters, numbers, and hyphens.`,\n );\n process.exit(1);\n }\n return name;\n }\n const result = await clack.text({\n message: `What is your ${kind} name?`,\n placeholder,\n validate(value) {\n if (!value)\n return `${kind[0].toUpperCase() + kind.slice(1)} name is required`;\n if (!/^[a-z][a-z0-9-]*$/.test(value)) {\n return \"Use lowercase letters, numbers, and hyphens (must start with a letter)\";\n }\n if (fs.existsSync(path.resolve(process.cwd(), value))) {\n return `Directory \"${value}\" already exists`;\n }\n },\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n process.exit(0);\n }\n return result as string;\n}\n\nasync function promptTemplatePicker(\n preselected: string[],\n clack: typeof import(\"@clack/prompts\"),\n opts?: {\n defaultTemplates?: string[];\n excludeNames?: string[];\n message?: string;\n preferredFirst?: string[];\n recommendedNames?: string[];\n },\n): Promise<string[]> {\n const excluded = new Set(opts?.excludeNames ?? []);\n const orderedTemplates = opts?.preferredFirst\n ? moveTemplatesToFront(coreTemplates(), opts.preferredFirst)\n : onRampFirst(coreTemplates());\n const recommendedNames = new Set(opts?.recommendedNames ?? []);\n const options = orderedTemplates\n .filter((t) => !excluded.has(t.name))\n .map((t) => ({\n value: t.name,\n label: recommendedNames.has(t.name)\n ? `${t.label} (recommended)`\n : t.label,\n hint:\n recommendedNames.has(t.name) && t.name === \"dispatch\"\n ? \"Recommended workspace control plane: secrets, messaging, approvals, and A2A delegation\"\n : t.hint,\n }));\n\n // If there's nothing left to pick, the caller gets an empty selection —\n // they decide how to handle it.\n if (options.length === 0) return [];\n\n // Default pre-selection: what the user passed via --template, falling\n // back to caller defaults, then to \"chat\" when available.\n const defaults =\n preselected.length > 0\n ? preselected.filter((p) => options.some((o) => o.value === p))\n : opts?.defaultTemplates\n ? opts.defaultTemplates.filter((p) =>\n options.some((o) => o.value === p),\n )\n : options.some((o) => o.value === \"chat\")\n ? [\"chat\"]\n : [];\n\n const baseMessage = opts?.message ?? \"Which apps would you like to include?\";\n const result = await clack.multiselect({\n message: `${baseMessage}\\n (↑/↓ move · space to toggle · enter to confirm)`,\n options,\n initialValues: defaults,\n required: false,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n process.exit(0);\n }\n return result as string[];\n}\n\nfunction parseTemplateList(input?: string): string[] {\n if (!input) return [];\n return input\n .split(\",\")\n .map((s) => normalizeTemplateName(s.trim()))\n .filter(Boolean);\n}\n\nfunction listInstalledApps(workspaceRoot: string): string[] {\n const appsDir = path.join(workspaceRoot, \"apps\");\n if (!fs.existsSync(appsDir)) return [];\n return fs\n .readdirSync(appsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Workspace detection\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Walk up from startDir looking for a package.json with\n * `agent-native.workspaceCore` set. Returns the workspace root and core\n * package name, or null if not inside a workspace.\n */\nexport function detectWorkspace(\n startDir: string,\n): { workspaceRoot: string; workspaceCoreName: string } | null {\n let dir = path.resolve(startDir);\n for (let i = 0; i < 20; i++) {\n const pkgPath = path.join(dir, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n const wsCore = pkg?.[\"agent-native\"]?.workspaceCore;\n if (typeof wsCore === \"string\" && wsCore.length > 0) {\n return { workspaceRoot: dir, workspaceCoreName: wsCore };\n }\n } catch {}\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\nexport { parseWorkspaceScope };\n\n/** @internal — exported for E2E tests */\nexport {\n scaffoldWorkspaceRoot as _scaffoldWorkspaceRoot,\n scaffoldAppTemplate as _scaffoldAppTemplate,\n scaffoldRequiredPackages as _scaffoldRequiredPackages,\n postProcessStandalone as _postProcessStandalone,\n loadCatalog as _loadCatalog,\n fixPackageJsonName as _fixPackageJsonName,\n renameGitignore as _renameGitignore,\n rewriteNetlifyToml as _rewriteNetlifyToml,\n getCoreDependencyVersion as _getCoreDependencyVersion,\n getDispatchDependencyVersion as _getDispatchDependencyVersion,\n getGitHubTemplateRef as _getGitHubTemplateRef,\n getGitHubTemplateRefCandidates as _getGitHubTemplateRefCandidates,\n workspaceAppNameForTemplateSelection as _workspaceAppNameForTemplateSelection,\n shouldSkipScaffoldEntry as _shouldSkipScaffoldEntry,\n tarExtractArgs as _tarExtractArgs,\n};\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Download / copy helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\nfunction validateRepoName(repo: string): void {\n if (!/^[a-zA-Z0-9_.-]+\\/[a-zA-Z0-9_.-]+$/.test(repo)) {\n throw new ValidationError(\n `Invalid repository name \"${repo}\". Expected format: user/repo`,\n );\n }\n}\n\nfunction tarExtractArgs(\n tarPath: string,\n destDir: string,\n options: { skipAgentSymlinks?: boolean } = {},\n): string[] {\n const excludes = options.skipAgentSymlinks\n ? FIRST_PARTY_TARBALL_SYMLINK_EXCLUDES.flatMap((pattern) => [\n \"--exclude\",\n pattern,\n ])\n : [];\n return [\"xzf\", tarPath, \"--strip-components=1\", ...excludes, \"-C\", destDir];\n}\n\nfunction downloadAndExtract(\n url: string,\n destDir: string,\n options: { skipAgentSymlinks?: boolean } = {},\n): void {\n fs.mkdirSync(destDir, { recursive: true });\n // --fail-with-body so curl exits non-zero on HTTP 4xx/5xx instead of writing\n // the error body (HTML/JSON) to disk where tar then fails with the opaque\n // \"Unrecognized archive format\" message.\n const tarball = execFileSync(\"curl\", [\"--fail-with-body\", \"-sL\", url], {\n maxBuffer: 100 * 1024 * 1024,\n });\n const tarPath = path.join(destDir, \".download.tar.gz\");\n fs.writeFileSync(tarPath, tarball);\n try {\n execFileSync(\"tar\", tarExtractArgs(tarPath, destDir, options), {\n stdio: \"pipe\",\n });\n } finally {\n fs.unlinkSync(tarPath);\n }\n}\n\nasync function downloadGitHubSubdir(\n repo: string,\n subdir: string,\n targetDir: string,\n): Promise<void> {\n validateRepoName(repo);\n const refs = getGitHubTemplateRefCandidates();\n const errors: string[] = [];\n for (const ref of refs) {\n const tarUrl = `https://api.github.com/repos/${repo}/tarball/${encodeURIComponent(ref)}`;\n const tmpDir = path.join(\n targetDir,\n \"..\",\n `.agent-native-tmp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n );\n try {\n downloadAndExtract(tarUrl, tmpDir, { skipAgentSymlinks: repo === REPO });\n const srcDir = path.join(tmpDir, subdir);\n if (!fs.existsSync(srcDir)) {\n throw new Error(\n `Template directory \"${subdir}\" not found at ref \"${ref}\".`,\n );\n }\n copyDir(srcDir, targetDir);\n return;\n } catch (err) {\n errors.push(\n ` ${ref}: ${err instanceof Error ? err.message.split(\"\\n\")[0] : String(err)}`,\n );\n } finally {\n fs.rmSync(tmpDir, { recursive: true, force: true });\n }\n }\n throw new Error(\n `Failed to download templates from ${repo}. Tried refs:\\n${errors.join(\"\\n\")}`,\n );\n}\n\nasync function downloadGitHubRepo(\n repo: string,\n targetDir: string,\n): Promise<void> {\n validateRepoName(repo);\n const tarUrl = `https://api.github.com/repos/${repo}/tarball/main`;\n downloadAndExtract(tarUrl, targetDir);\n}\n\n/* ─────────────────────────────────────────────────────────────────────────\n * Text / filesystem helpers\n * ───────────────────────────────────────────────────────────────────────── */\n\n/**\n * Merge key-value entries into named sections of a pnpm-workspace.yaml string\n * without creating duplicate section headers. For each section:\n * - If the section already exists, new entries are injected after its header.\n * - If the section is absent, a new block is appended at the end.\n * Entries already present (by key) are skipped.\n */\nfunction mergeWorkspaceYamlSections(\n yaml: string,\n sections: Record<string, Record<string, string>>,\n): string {\n let result = yaml;\n for (const [section, entries] of Object.entries(sections)) {\n for (const [key, value] of Object.entries(entries)) {\n if (result.includes(key)) continue;\n const sectionHeader = new RegExp(`^${section}:\\\\s*$`, \"m\");\n const match = sectionHeader.exec(result);\n if (match) {\n const insertAt = match.index + match[0].length;\n result =\n result.slice(0, insertAt) +\n `\\n ${key}: ${value}` +\n result.slice(insertAt);\n } else {\n result =\n result.trimEnd() +\n (result ? \"\\n\" : \"\") +\n `\\n${section}:\\n ${key}: ${value}\\n`;\n }\n }\n }\n return result;\n}\n\n/**\n * Load the pnpm workspace catalog.\n * First tries the build-time snapshot at dist/catalog.json (works when\n * running as a published npm package). Falls back to parsing the monorepo\n * pnpm-workspace.yaml (works during local framework development).\n */\nfunction loadCatalog(): Record<string, string> {\n try {\n // Build-time snapshot generated by finalize-build.mjs\n const snapshotPath = path.resolve(__dirname, \"../catalog.json\");\n if (fs.existsSync(snapshotPath)) {\n return JSON.parse(fs.readFileSync(snapshotPath, \"utf-8\"));\n }\n\n // Fallback: parse pnpm-workspace.yaml from the monorepo root\n // From dist/cli/ or src/cli/: 4 levels up → packages/core → packages → repo root\n const repoRoot = path.resolve(__dirname, \"../../../..\");\n const wsPath = path.join(repoRoot, \"pnpm-workspace.yaml\");\n if (!fs.existsSync(wsPath)) return {};\n const content = fs.readFileSync(wsPath, \"utf-8\");\n const result: Record<string, string> = {};\n let inCatalog = false;\n for (const line of content.split(\"\\n\")) {\n if (/^catalog:\\s*$/.test(line)) {\n inCatalog = true;\n continue;\n }\n if (inCatalog) {\n if (/^\\S/.test(line)) break;\n const match = line.match(/^\\s+\"?([^\":]+)\"?\\s*:\\s*\"?([^\"]+)\"?\\s*$/);\n if (match) result[match[1]] = match[2];\n }\n }\n return result;\n } catch {\n return {};\n }\n}\n\nfunction titleCase(name: string): string {\n return name\n .split(\"-\")\n .map((w) => (w ? w[0].toUpperCase() + w.slice(1) : w))\n .join(\" \");\n}\n\nfunction appTitleForScaffold(appName: string): string {\n return titleCase(appName);\n}\n\nfunction isChatOnRampTemplate(templateName: string | undefined): boolean {\n return templateName === \"chat\" || templateName === \"starter\";\n}\n\nfunction trackingTemplateName(\n templateName: string | undefined,\n): string | undefined {\n return templateName === \"starter\" ? \"chat\" : templateName;\n}\n\nfunction defaultPackageDescriptionForScaffold(appName: string): string {\n const appTitle = appTitleForScaffold(appName);\n return `Workspace app for ${appTitle}.`;\n}\n\nfunction shouldReplaceScaffoldDescription(value: unknown): boolean {\n if (typeof value !== \"string\" || !value.trim()) return true;\n return /\\b(starter|new app|blank\\b.*\\bapp)\\b/i.test(value);\n}\n\nfunction fixPackageJsonName(\n appDir: string,\n name: string,\n templateName?: string,\n): void {\n const pkgPath = path.join(appDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) return;\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n pkg.name = name;\n const appTitle = appTitleForScaffold(name);\n // When the user picked a custom name (e.g. `add-app todo --template=chat`)\n // the template's displayName would otherwise leak into the workspace apps\n // grid as the new app's label. Overwrite it so the app shows up as \"Todo\"\n // instead of the source template's branding.\n if (templateName && name !== templateName) {\n pkg.displayName = appTitle;\n }\n if (\n shouldReplaceScaffoldDescription(pkg.description) ||\n (isChatOnRampTemplate(templateName) && name !== templateName)\n ) {\n pkg.description = defaultPackageDescriptionForScaffold(name);\n }\n fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n}\n\nfunction fixWebManifestName(\n appDir: string,\n name: string,\n templateName?: string,\n): void {\n if (!isChatOnRampTemplate(templateName) || name === templateName) return;\n const manifestPath = path.join(appDir, \"public\", \"manifest.json\");\n if (!fs.existsSync(manifestPath)) return;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"));\n const appTitle = titleCase(name);\n manifest.name = appTitle;\n manifest.short_name = appTitle;\n if (\n typeof manifest.description !== \"string\" ||\n /\\b(blank app|starter|chat-first)\\b/i.test(manifest.description)\n ) {\n manifest.description = defaultPackageDescriptionForScaffold(name);\n }\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + \"\\n\");\n } catch {}\n}\n\nfunction getCoreDependencyVersion(): string {\n if (process.env.AGENT_NATIVE_CREATE_USE_LOCAL_CORE === \"1\") {\n const localCore = findLocalPackage(\"core\");\n if (localCore) return pathToFileURL(localCore).href;\n }\n\n // Generated apps must install before the current package version is\n // published. The dist-tag resolves to the newest released core today and to\n // this package version once the release goes live. Local file deps are\n // intentionally opt-in so scaffolded repos remain portable by default.\n return \"latest\";\n}\n\nfunction getDispatchDependencyVersion(): string {\n if (process.env.AGENT_NATIVE_CREATE_USE_LOCAL_CORE === \"1\") {\n const localDispatch = findLocalPackage(\"dispatch\");\n if (localDispatch) return pathToFileURL(localDispatch).href;\n }\n\n return \"latest\";\n}\n\nfunction getCorePackageVersion(): string | undefined {\n try {\n const packageRoot = path.resolve(__dirname, \"../..\");\n const pkg = JSON.parse(\n fs.readFileSync(path.join(packageRoot, \"package.json\"), \"utf-8\"),\n );\n return typeof pkg.version === \"string\" ? pkg.version : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Git refs to try, in priority order, when downloading templates from the\n * framework repo. The release tag scheme has shifted over time:\n *\n * - ≤ 0.7.83: single repo-wide tag `v<version>` (legacy).\n * - ≥ 0.8.0: changesets per-package tags\n * `@agent-native/core@<version>` (current).\n *\n * `main` is the final fallback so dev builds and brand-new releases (where\n * the tag has not propagated yet) still work — at the cost of pulling\n * potentially newer template code than the running CLI was built against.\n */\nfunction getGitHubTemplateRefCandidates(): string[] {\n const version = getCorePackageVersion();\n const candidates: string[] = [];\n if (version && /^\\d+\\.\\d+\\.\\d+(?:-.+)?$/.test(version)) {\n candidates.push(`@agent-native/core@${version}`);\n candidates.push(`v${version}`);\n }\n candidates.push(\"main\");\n return candidates;\n}\n\n/** @deprecated Kept for backward-compatible test imports. Returns the\n * highest-priority candidate; callers that need the full fallback list\n * should use `getGitHubTemplateRefCandidates()`. */\nfunction getGitHubTemplateRef(): string {\n return getGitHubTemplateRefCandidates()[0]!;\n}\n\nfunction rewriteCoreDependencyVersions(projectDir: string): void {\n const pkgPath = path.join(projectDir, \"package.json\");\n if (!fs.existsSync(pkgPath)) return;\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n for (const depType of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n ] as const) {\n const deps = pkg[depType];\n if (deps?.[\"@agent-native/core\"]) {\n deps[\"@agent-native/core\"] = getCoreDependencyVersion();\n }\n }\n fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n } catch {}\n}\n\nfunction validateWorkspaceAppName(\n appName: string,\n clack: typeof import(\"@clack/prompts\"),\n opts?: { allowDispatch?: boolean },\n): void {\n const error =\n opts?.allowDispatch && appName === \"dispatch\"\n ? null\n : getWorkspaceAppIdValidationError(appName);\n if (error) {\n clack.cancel(error);\n process.exit(1);\n }\n}\n\nfunction upsertTomlBuildEnvironment(\n content: string,\n vars: Record<string, string>,\n): string {\n const lines = content.split(\"\\n\");\n const sectionIndex = lines.findIndex(\n (line) => line.trim() === \"[build.environment]\",\n );\n if (sectionIndex === -1) {\n const envLines = [\"\", \"[build.environment]\"].concat(\n Object.entries(vars).map(([key, value]) => ` ${key} = \"${value}\"`),\n );\n return content.trimEnd() + \"\\n\" + envLines.join(\"\\n\") + \"\\n\";\n }\n\n let nextSectionIndex = lines.findIndex(\n (line, index) => index > sectionIndex && /^\\s*\\[/.test(line),\n );\n if (nextSectionIndex === -1) nextSectionIndex = lines.length;\n\n for (const [key, value] of Object.entries(vars)) {\n const existingIndex = lines.findIndex(\n (line, index) =>\n index > sectionIndex &&\n index < nextSectionIndex &&\n new RegExp(`^\\\\s*${key}\\\\s*=`).test(line),\n );\n const nextLine = ` ${key} = \"${value}\"`;\n if (existingIndex === -1) {\n lines.splice(nextSectionIndex, 0, nextLine);\n nextSectionIndex += 1;\n } else {\n lines[existingIndex] = nextLine;\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction ensureRedirect(\n content: string,\n from: string,\n to: string,\n status: number,\n): string {\n const escapedFrom = from.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const redirectPattern = new RegExp(\n `\\\\n?\\\\[\\\\[redirects\\\\]\\\\]\\\\s+from\\\\s*=\\\\s*\"${escapedFrom}\"\\\\s+to\\\\s*=\\\\s*\"[^\"]*\"\\\\s+status\\\\s*=\\\\s*\\\\d+(?:\\\\s+force\\\\s*=\\\\s*(?:true|false))?`,\n \"m\",\n );\n const block = [\n \"\",\n \"[[redirects]]\",\n ` from = \"${from}\"`,\n ` to = \"${to}\"`,\n ` status = ${status}`,\n ].join(\"\\n\");\n if (redirectPattern.test(content)) {\n return content.replace(redirectPattern, block);\n }\n return content.trimEnd() + \"\\n\" + block + \"\\n\";\n}\n\nfunction removeRedirect(content: string, from: string): string {\n const escapedFrom = from.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const redirectPattern = new RegExp(\n `\\\\n?\\\\[\\\\[redirects\\\\]\\\\]\\\\s+from\\\\s*=\\\\s*\"${escapedFrom}\"\\\\s+to\\\\s*=\\\\s*\"[^\"]*\"\\\\s+status\\\\s*=\\\\s*\\\\d+(?:\\\\s+force\\\\s*=\\\\s*(?:true|false))?`,\n \"gm\",\n );\n return content.replace(redirectPattern, \"\").replace(/\\n{3,}/g, \"\\n\\n\");\n}\n\nfunction addWorkspaceMountNetlifyConfig(\n content: string,\n appName: string,\n): string {\n const basePath = `/${appName}`;\n let next = upsertTomlBuildEnvironment(content, {\n APP_BASE_PATH: basePath,\n VITE_APP_BASE_PATH: basePath,\n NITRO_PRESET: \"netlify\",\n NPM_CONFIG_PRODUCTION: \"false\",\n });\n\n if (appName === \"dispatch\") {\n next = ensureRedirect(next, \"/\", \"/dispatch/overview\", 302);\n next = ensureRedirect(next, \"/dispatch\", \"/dispatch/overview\", 302);\n for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {\n next = ensureRedirect(next, `/${from}`, `/dispatch/${to}`, 302);\n }\n next = removeRedirect(next, \"/dispatch/*\");\n }\n\n return next;\n}\n\nfunction rewriteNetlifyToml(\n appDir: string,\n appName: string,\n mode: \"standalone\" | \"workspace\",\n): void {\n const netlifyPath = path.join(appDir, \"netlify.toml\");\n if (!fs.existsSync(netlifyPath)) return;\n\n try {\n let content = fs.readFileSync(netlifyPath, \"utf-8\");\n const originalCommand = content.match(/^ command = \"([^\"]*)\"$/m)?.[1];\n const usesUnpooledDatabase =\n originalCommand?.includes(\"NETLIFY_DATABASE_URL_UNPOOLED\") ?? false;\n const buildCommand =\n mode === \"workspace\"\n ? `APP_BASE_PATH=/${appName} VITE_APP_BASE_PATH=/${appName} NITRO_PRESET=netlify pnpm --filter ${appName} build`\n : \"NITRO_PRESET=netlify pnpm build\";\n const databaseSetup =\n 'export DATABASE_URL=\\\\\"${NETLIFY_DATABASE_URL:-$DATABASE_URL}\\\\\"';\n const buildDatabasePrefix = usesUnpooledDatabase\n ? 'DATABASE_URL=\\\\\"${NETLIFY_DATABASE_URL_UNPOOLED:-$DATABASE_URL}\\\\\" '\n : \"\";\n const command = `${databaseSetup} && ${buildDatabasePrefix}${buildCommand}`;\n const publishPath = mode === \"workspace\" ? `apps/${appName}/dist` : \"dist\";\n const functionsPath =\n mode === \"workspace\"\n ? `apps/${appName}/.netlify/functions-internal`\n : \".netlify/functions-internal\";\n\n content = content\n .replace(/^ command = \".*\"$/m, ` command = \"${command}\"`)\n .replace(\n /publish = \"templates\\/[^\"]+\\/dist\"/g,\n `publish = \"${publishPath}\"`,\n )\n .replace(\n /functions = \"templates\\/[^\"]+\\/\\.netlify\\/functions-internal\"/g,\n `functions = \"${functionsPath}\"`,\n )\n // Strip the `ignore` script line: it references a monorepo script path\n // (scripts/netlify-ignore-build.mjs) that doesn't exist in scaffolds, so\n // skip-unchanged would never work and every deploy logs a not-found error.\n .replace(/^\\s*ignore\\s*=\\s*\"[^\"]*\"\\s*\\n/m, \"\");\n\n if (mode === \"workspace\") {\n content = addWorkspaceMountNetlifyConfig(content, appName);\n }\n\n fs.writeFileSync(netlifyPath, content);\n } catch {}\n}\n\nfunction rewriteTrackingAppId(\n appDir: string,\n appName: string,\n templateName?: string,\n): void {\n const rootPath = path.join(appDir, \"app\", \"root.tsx\");\n if (!fs.existsSync(rootPath)) return;\n\n try {\n const content = fs.readFileSync(rootPath, \"utf-8\");\n const trackedTemplateName = trackingTemplateName(templateName);\n const sourceAppIds = [\"agent-native-[^\\\"']+\", \"\\\\{\\\\{APP_NAME\\\\}\\\\}\"];\n if (templateName && templateName !== appName) {\n sourceAppIds.push(escapeRegExp(templateName));\n }\n if (isChatOnRampTemplate(templateName)) {\n sourceAppIds.push(\"starter\", \"chat\");\n }\n const pattern = new RegExp(\n `(^\\\\s*app:\\\\s*)([\"'])(?:${sourceAppIds.join(\"|\")})\\\\2(\\\\s*,?)`,\n \"m\",\n );\n if (!pattern.test(content)) return;\n\n let next = content.replace(\n pattern,\n (_match, prefix: string, quote: string, suffix: string) =>\n `${prefix}${quote}${appName}${quote}${suffix}`,\n );\n\n if (\n trackedTemplateName &&\n trackedTemplateName !== appName &&\n !hasTrackingTemplate(next)\n ) {\n next = next.replace(\n /(^\\s*app:\\s*[\"'][^\"']+[\"'],?\\s*$)/m,\n (line) =>\n `${line}\\n template: ${JSON.stringify(trackedTemplateName)},`,\n );\n }\n\n if (next !== content) {\n fs.writeFileSync(rootPath, next);\n }\n } catch {}\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction hasTrackingTemplate(content: string): boolean {\n const match = content.match(/configureTracking\\(\\{[\\s\\S]*?\\}\\);/);\n return !!match && /^\\s*template\\s*:/m.test(match[0]);\n}\n\nfunction tryGitInit(dir: string): boolean {\n try {\n execFileSync(\"git\", [\"init\"], { cwd: dir, stdio: \"pipe\" });\n execFileSync(\"git\", [\"add\", \"-A\"], { cwd: dir, stdio: \"pipe\" });\n execFileSync(\n \"git\",\n [\"commit\", \"-m\", \"Initial commit from agent-native create\"],\n {\n cwd: dir,\n stdio: \"pipe\",\n env: {\n ...process.env,\n GIT_AUTHOR_NAME: \"agent-native\",\n GIT_AUTHOR_EMAIL: \"noreply@agent-native.com\",\n GIT_COMMITTER_NAME: \"agent-native\",\n GIT_COMMITTER_EMAIL: \"noreply@agent-native.com\",\n },\n },\n );\n return true;\n } catch {\n return false;\n }\n}\n\nfunction renameGitignore(dir: string): void {\n const src = path.join(dir, \"_gitignore\");\n const dst = path.join(dir, \".gitignore\");\n if (fs.existsSync(src)) fs.renameSync(src, dst);\n}\n\nfunction replacePlaceholders(\n dir: string,\n appName: string,\n appTitle: string,\n workspaceName?: string,\n): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const p = path.join(dir, entry.name);\n if (entry.isSymbolicLink()) continue;\n if (entry.isDirectory()) {\n replacePlaceholders(p, appName, appTitle, workspaceName);\n continue;\n }\n let content: string;\n try {\n content = fs.readFileSync(p, \"utf-8\");\n } catch {\n continue;\n }\n const hasWs =\n workspaceName !== undefined && content.includes(\"{{WORKSPACE_NAME}}\");\n if (\n !content.includes(\"{{APP_NAME}}\") &&\n !content.includes(\"{{APP_TITLE}}\") &&\n !hasWs\n ) {\n continue;\n }\n let next = content;\n if (workspaceName !== undefined) {\n next = next.replace(/\\{\\{WORKSPACE_NAME\\}\\}/g, workspaceName);\n }\n next = next\n .replace(/\\{\\{APP_NAME\\}\\}/g, appName)\n .replace(/\\{\\{APP_TITLE\\}\\}/g, appTitle);\n fs.writeFileSync(p, next);\n }\n}\n\nfunction copyDir(src: string, dest: string, root?: string): void {\n const resolvedRoot = root ?? path.resolve(src);\n fs.mkdirSync(dest, { recursive: true });\n for (const entry of fs.readdirSync(src, { withFileTypes: true })) {\n const srcPath = path.join(src, entry.name);\n if (shouldSkipScaffoldEntry(entry.name, srcPath)) continue;\n const destPath = path.join(dest, entry.name);\n if (entry.isSymbolicLink()) {\n const target = fs.readlinkSync(srcPath);\n const resolvedTarget = path.resolve(path.dirname(srcPath), target);\n if (resolvedTarget.startsWith(resolvedRoot)) {\n fs.symlinkSync(target, destPath);\n } else {\n try {\n const stat = fs.statSync(srcPath);\n if (stat.isDirectory()) {\n copyDir(srcPath, destPath, resolvedRoot);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n } catch {\n // Broken symlink — skip silently\n }\n }\n } else if (entry.isDirectory()) {\n copyDir(srcPath, destPath, resolvedRoot);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\nfunction shouldSkipScaffoldEntry(name: string, srcPath?: string): boolean {\n if (\n name === \"settings.json\" &&\n srcPath?.split(path.sep).includes(\".claude\")\n ) {\n return true;\n }\n if (\n name === \"node_modules\" ||\n name === \".agent-native\" ||\n name === \".env\" ||\n name === \".env.local\" ||\n name === \"pnpm-lock.yaml\" ||\n name === \".netlify\" ||\n name === \".vercel\" ||\n name === \".generated\" ||\n name === \".react-router\" ||\n name === \".output\" ||\n name === \"build\" ||\n name === \"dist\" ||\n name === \"test-results\" ||\n name === \"playwright-report\" ||\n name === \".DS_Store\"\n ) {\n return true;\n }\n return (\n name.endsWith(\".tmp.json\") ||\n /^qa-.*\\.db(?:-shm|-wal)?$/.test(name) ||\n /\\.db-(?:shm|wal)$/.test(name)\n );\n}\n"]}
|
|
@@ -70,7 +70,7 @@ function buildNewWorkspaceAppPrompt(input) {
|
|
|
70
70
|
`Dispatch workspace resources with scope=all are inherited workspace context. Do not copy or sync them into the new app; every workspace app reads them at runtime and may override with app shared or personal resources.`,
|
|
71
71
|
``,
|
|
72
72
|
`Pick a UI template that fits the user's prompt — analytics, assets, brain, calendar, chat, content, design, dispatch, forms, mail, slides, or clips when the request needs custom UI but none of the domain templates fit.`,
|
|
73
|
-
`Use the chat template as the minimal add-UI scaffold. Do not treat Chat as the required default for primitive/headless
|
|
73
|
+
`Use the chat template as the minimal add-UI scaffold. Do not treat Chat as the required default for primitive/headless agent workflows unless the user explicitly asks for a UI app.`,
|
|
74
74
|
`If you use the chat template, treat it as scaffolding only: the finished app must use the requested app's real name, home screen, navigation, package metadata, and manifest, and it must not leave visible "Chat", "Starter", "Blank app", or "New app" UI behind.`,
|
|
75
75
|
`Use the workspace app layout: create it under apps/${input.appId}, mount it at /${input.appId}, keep it on the shared workspace database/hosting model, and avoid table-name collisions by namespacing any new domain tables to the app.`,
|
|
76
76
|
`Important routing rule: from outside the app, link to /${input.appId}; inside apps/${input.appId}, React Router routes are app-local. Use <Link to="/review"> and navigate("/review"), not "/${input.appId}/review"; APP_BASE_PATH supplies the mounted prefix, and hardcoding it causes doubled URLs like /${input.appId}/${input.appId}/review.`,
|