@agent-native/core 0.58.3 → 0.58.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/agent/production-agent.d.ts +9 -0
  2. package/dist/agent/production-agent.d.ts.map +1 -1
  3. package/dist/agent/production-agent.js +80 -4
  4. package/dist/agent/production-agent.js.map +1 -1
  5. package/dist/cli/plan-local.d.ts +34 -0
  6. package/dist/cli/plan-local.d.ts.map +1 -1
  7. package/dist/cli/plan-local.js +205 -1
  8. package/dist/cli/plan-local.js.map +1 -1
  9. package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
  10. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  11. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  12. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  13. package/dist/cli/recap.d.ts +5 -0
  14. package/dist/cli/recap.d.ts.map +1 -1
  15. package/dist/cli/recap.js +19 -2
  16. package/dist/cli/recap.js.map +1 -1
  17. package/dist/client/AgentPanel.d.ts +3 -1
  18. package/dist/client/AgentPanel.d.ts.map +1 -1
  19. package/dist/client/AgentPanel.js +6 -3
  20. package/dist/client/AgentPanel.js.map +1 -1
  21. package/dist/client/AssistantChat.d.ts +5 -0
  22. package/dist/client/AssistantChat.d.ts.map +1 -1
  23. package/dist/client/AssistantChat.js +141 -39
  24. package/dist/client/AssistantChat.js.map +1 -1
  25. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  26. package/dist/client/MultiTabAssistantChat.js +44 -31
  27. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  28. package/dist/client/blocks/library/diagram.d.ts.map +1 -1
  29. package/dist/client/blocks/library/diagram.js +85 -20
  30. package/dist/client/blocks/library/diagram.js.map +1 -1
  31. package/dist/client/blocks/library/tabs.d.ts.map +1 -1
  32. package/dist/client/blocks/library/tabs.js +5 -5
  33. package/dist/client/blocks/library/tabs.js.map +1 -1
  34. package/dist/client/chat/message-components.d.ts.map +1 -1
  35. package/dist/client/chat/message-components.js +13 -10
  36. package/dist/client/chat/message-components.js.map +1 -1
  37. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  38. package/dist/client/chat/run-recovery.js +3 -3
  39. package/dist/client/chat/run-recovery.js.map +1 -1
  40. package/dist/client/chat/tool-call-display.d.ts +0 -1
  41. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  42. package/dist/client/chat/tool-call-display.js +5 -2
  43. package/dist/client/chat/tool-call-display.js.map +1 -1
  44. package/dist/client/chat/widgets/DataChartRenderer.d.ts.map +1 -1
  45. package/dist/client/chat/widgets/DataChartRenderer.js +98 -21
  46. package/dist/client/chat/widgets/DataChartRenderer.js.map +1 -1
  47. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts +4 -1
  48. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  49. package/dist/client/chat/widgets/builtin-tool-renderers.js +30 -4
  50. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  51. package/dist/client/composer/AgentComposerFrame.js +1 -1
  52. package/dist/client/composer/AgentComposerFrame.js.map +1 -1
  53. package/dist/server/agent-chat-plugin.d.ts +17 -0
  54. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  55. package/dist/server/agent-chat-plugin.js +6 -2
  56. package/dist/server/agent-chat-plugin.js.map +1 -1
  57. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
  58. package/dist/sharing/actions/set-resource-visibility.js +25 -11
  59. package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
  60. package/dist/styles/agent-native.css +115 -2
  61. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +100 -0
  62. package/docs/content/pr-visual-recap.md +2 -2
  63. package/package.json +1 -1
  64. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +100 -0
@@ -1 +1 @@
1
- {"version":3,"file":"plan-local.js","sourceRoot":"","sources":["../../src/cli/plan-local.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plan helper commands.\n *\n * The `plan local` commands are intentionally separate from the Plan app\n * actions. They do not call MCP, hosted write actions, SQLite, or hosted\n * storage; they only read local files or serve them from a localhost bridge so\n * privacy-focused users have an auditable no-DB path. The top-level\n * `plan blocks` command is a schema-only, no-auth helper for fetching the\n * public block catalog before authoring local MDX; it never sends plan content.\n */\n\nimport fs from \"node:fs\";\nimport crypto from \"node:crypto\";\nimport http, {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n DEFAULT_PLAN_APP_URL,\n defaultPlanBlocksOut,\n fetchPlanBlockCatalog,\n normalizePlanBlockFormat,\n} from \"./plan-blocks.js\";\n\ntype LocalPlanKind = \"plan\" | \"recap\";\n\ntype LocalPlanFiles = {\n dir: string;\n planMdx: string;\n canvasMdx?: string;\n prototypeMdx?: string;\n stateJson?: string;\n assets?: Record<string, string>;\n};\n\nexport type LocalPlanValidationIssue = {\n file: string;\n line: number;\n message: string;\n};\n\ntype LocalPlanPreviewInput = {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n};\n\ntype LocalPlanPreviewResult = {\n ok: true;\n dir: string;\n out?: string;\n url: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\ntype LocalPlanBridgeMdxFolder = {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \".plan-state.json\"?: string;\n \"assets/\"?: Record<string, string>;\n};\n\nexport type LocalPlanBridgePayload = {\n ok: true;\n version: 1;\n source: \"agent-native-local-bridge\";\n localOnly: true;\n slug: string;\n dir: string;\n title: string;\n brief: string;\n kind: LocalPlanKind;\n updatedAt: string;\n files: string[];\n mdx: LocalPlanBridgeMdxFolder;\n};\n\nexport type LocalPlanServeResult = {\n ok: true;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n host: string;\n port: number;\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\nexport type LocalPlanBridgeServer = {\n server: Server;\n result: LocalPlanServeResult;\n};\n\nexport type LocalPlanVerifyResult = {\n ok: boolean;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n preflight: {\n status: number;\n allowOrigin: string | null;\n allowPrivateNetwork: string | null;\n };\n bridge: {\n status: number;\n ok: boolean;\n source?: string;\n localOnly?: boolean;\n files?: string[];\n mdxFiles?: string[];\n error?: string;\n };\n warnings: string[];\n};\n\ntype OpenLocalUrlResult = {\n ok: boolean;\n command: string;\n error?: string;\n};\n\nconst LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES = 2 * 1024 * 1024;\nconst LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES = 10 * 1024 * 1024;\nconst AGENT_NATIVE_MANIFEST_FILE = \"agent-native.json\";\nconst LOCAL_PLAN_ASSET_EXTENSIONS = new Set([\n \"png\",\n \"jpg\",\n \"jpeg\",\n \"gif\",\n \"webp\",\n \"svg\",\n]);\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const out: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i += 1) {\n const token = argv[i];\n if (!token.startsWith(\"--\")) continue;\n const key = token.slice(2);\n const next = argv[i + 1];\n if (next === undefined || next.startsWith(\"--\")) out[key] = true;\n else {\n out[key] = next;\n i += 1;\n }\n }\n return out;\n}\n\nfunction stringArg(\n args: Record<string, string | boolean>,\n key: string,\n): string {\n const value = args[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Missing --${key}`);\n }\n return value;\n}\n\nfunction optionalArg(\n args: Record<string, string | boolean>,\n key: string,\n): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction boolArg(args: Record<string, string | boolean>, key: string): boolean {\n return args[key] === true;\n}\n\nexport function localPlanFolderName(title: string): string {\n const slug = title\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 64)\n .replace(/-+$/g, \"\");\n return slug || \"untitled-plan\";\n}\n\nfunction normalizeKind(value: string | undefined): LocalPlanKind {\n if (!value) return \"plan\";\n if (value === \"plan\" || value === \"recap\") return value;\n throw new Error(`Invalid --kind \"${value}\" (expected plan or recap)`);\n}\n\nfunction normalizeSlash(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeRelativePath(filePath: string): string | null {\n if (!filePath.trim() || path.isAbsolute(filePath)) return null;\n const normalized = path.posix\n .normalize(normalizeSlash(filePath.trim()))\n .replace(/\\/+$/, \"\");\n if (\n !normalized ||\n normalized === \".\" ||\n normalized === \"..\" ||\n normalized.startsWith(\"../\") ||\n normalized.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n return null;\n }\n return normalized;\n}\n\nfunction findUpward(startDir: string, filename: string): string | null {\n let current = path.resolve(startDir);\n for (;;) {\n const candidate = path.join(current, filename);\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction manifestRootPath(value: unknown): string | null {\n if (typeof value === \"string\") return normalizeRelativePath(value);\n if (isRecord(value) && typeof value.path === \"string\") {\n return normalizeRelativePath(value.path);\n }\n return null;\n}\n\nfunction planManifestConfig(): { rootDir: string; plansPath: string } | null {\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n const manifestPath = configuredManifest\n ? path.resolve(configuredManifest)\n : findUpward(process.cwd(), AGENT_NATIVE_MANIFEST_FILE);\n if (!manifestPath) return null;\n\n try {\n const parsed = JSON.parse(\n fs.readFileSync(manifestPath, \"utf-8\"),\n ) as unknown;\n const apps = isRecord(parsed) && isRecord(parsed.apps) ? parsed.apps : null;\n const planApp = apps && isRecord(apps.plan) ? apps.plan : null;\n const roots = planApp && Array.isArray(planApp.roots) ? planApp.roots : [];\n const plansPath = roots\n .map(manifestRootPath)\n .find((item): item is string => Boolean(item));\n return plansPath\n ? { rootDir: path.dirname(manifestPath), plansPath }\n : null;\n } catch {\n return null;\n }\n}\n\nfunction localPlanWorkspaceRoot(startDir = process.cwd()): string {\n const manifestPath = findUpward(startDir, AGENT_NATIVE_MANIFEST_FILE);\n if (manifestPath) return path.dirname(manifestPath);\n const gitDir = findUpward(startDir, \".git\");\n if (gitDir) return path.dirname(gitDir);\n\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n if (configuredManifest) return path.dirname(path.resolve(configuredManifest));\n return process.cwd();\n}\n\nfunction defaultPlansDir(): string {\n const configured = process.env.PLAN_LOCAL_DIR;\n if (configured?.trim()) return path.resolve(configured.trim());\n const manifest = planManifestConfig();\n if (manifest) return path.resolve(manifest.rootDir, manifest.plansPath);\n return path.resolve(\"plans\");\n}\n\nfunction defaultLocalPlanAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_APP_URL ||\n process.env.PLAN_BASE_URL ||\n \"http://localhost:8096\"\n );\n}\n\nfunction defaultLocalPlanBridgeAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_BRIDGE_APP_URL ||\n process.env.PLAN_BASE_URL ||\n DEFAULT_PLAN_APP_URL\n );\n}\n\nfunction normalizeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction normalizeBridgeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanBridgeAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction localPlanPreviewUrl(dir: string, appUrl?: string): string {\n const base = `${normalizeAppUrl(appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(dir)),\n )}`;\n const repoPath = repoRelativePlanPath(dir);\n if (!repoPath) return base;\n return `${base}?${new URLSearchParams({ path: repoPath }).toString()}`;\n}\n\nfunction realpathIfExists(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return path.resolve(filePath);\n }\n}\n\nfunction repoRelativePlanPath(dir: string): string | null {\n const resolved = realpathIfExists(dir);\n const root = realpathIfExists(localPlanWorkspaceRoot(resolved));\n const relative = path.relative(root, resolved);\n if (!relative || relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n return null;\n }\n return normalizeSlash(relative);\n}\n\nfunction localPlanBridgePageUrl(input: {\n dir: string;\n bridgeUrl: string;\n appUrl?: string;\n}): string {\n return `${normalizeBridgeAppUrl(input.appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(input.dir)),\n )}?bridge=${encodeURIComponent(input.bridgeUrl)}`;\n}\n\nfunction writeLocalPlanUrlFile(dir: string, url: string, urlFile?: string) {\n const file = path.resolve(urlFile || path.join(dir, \".plan-url\"));\n fs.writeFileSync(file, `${url}\\n`, { encoding: \"utf-8\", mode: 0o600 });\n return file;\n}\n\nfunction runOpenCommand(command: string, args: string[]): OpenLocalUrlResult {\n const result = spawnSync(command, args, {\n stdio: \"ignore\",\n windowsHide: true,\n });\n const commandDisplay = [command, ...args].join(\" \");\n if (result.error) {\n return {\n ok: false,\n command: commandDisplay,\n error: result.error.message,\n };\n }\n if (typeof result.status === \"number\" && result.status !== 0) {\n return {\n ok: false,\n command: commandDisplay,\n error: `exit code ${result.status}`,\n };\n }\n return { ok: true, command: commandDisplay };\n}\n\nfunction openLocalUrl(url: string): OpenLocalUrlResult {\n const platform = process.platform;\n if (platform === \"darwin\") {\n for (const appName of [\n \"Google Chrome\",\n \"Chromium\",\n \"Microsoft Edge\",\n \"Brave Browser\",\n ]) {\n const result = runOpenCommand(\"open\", [\"-a\", appName, url]);\n if (result.ok) return result;\n }\n return runOpenCommand(\"open\", [url]);\n }\n if (platform === \"win32\") {\n return runOpenCommand(\"cmd\", [\"/c\", \"start\", \"\", url]);\n }\n return runOpenCommand(\"xdg-open\", [url]);\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction stripFrontmatter(source: string): {\n body: string;\n frontmatter: Record<string, string>;\n} {\n if (!source.startsWith(\"---\\n\")) return { body: source, frontmatter: {} };\n const end = source.indexOf(\"\\n---\", 4);\n if (end < 0) return { body: source, frontmatter: {} };\n const frontmatterSource = source.slice(4, end).trim();\n const body = source.slice(end + 4).replace(/^\\r?\\n/, \"\");\n const frontmatter: Record<string, string> = {};\n for (const line of frontmatterSource.split(/\\r?\\n/)) {\n const match = line.match(/^([A-Za-z0-9_-]+):\\s*(.*)$/);\n if (!match) continue;\n const value = match[2]\n .trim()\n .replace(/^['\"]|['\"]$/g, \"\")\n .trim();\n frontmatter[match[1]] = value;\n }\n return { body, frontmatter };\n}\n\nfunction firstHeading(source: string): string | null {\n for (const line of source.split(/\\r?\\n/)) {\n const match = line.match(/^#{1,3}\\s+(.+)$/);\n if (match) return match[1].trim();\n }\n return null;\n}\n\nfunction splitMdxBlocks(source: string): Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n}> {\n const blocks: Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n }> = [];\n const lines = source.split(/\\r?\\n/);\n let markdown: string[] = [];\n let component: string[] | null = null;\n let componentName = \"\";\n\n function flushMarkdown() {\n const value = markdown.join(\"\\n\").trim();\n if (value) blocks.push({ type: \"markdown\", value });\n markdown = [];\n }\n\n function flushComponent() {\n if (!component) return;\n blocks.push({\n type: \"component\",\n name: componentName || \"MDX component\",\n value: component.join(\"\\n\").trim(),\n });\n component = null;\n componentName = \"\";\n }\n\n for (const line of lines) {\n const start = line.match(/^<([A-Z][A-Za-z0-9_]*)\\b/);\n if (!component && start) {\n flushMarkdown();\n component = [line];\n componentName = start[1];\n if (/\\/>\\s*$/.test(line)) flushComponent();\n continue;\n }\n\n if (component) {\n component.push(line);\n if (new RegExp(`</${componentName}>\\\\s*$`).test(line)) {\n flushComponent();\n }\n continue;\n }\n\n markdown.push(line);\n }\n\n flushComponent();\n flushMarkdown();\n return blocks;\n}\n\nfunction renderMarkdownish(source: string): string {\n const lines = source.split(/\\r?\\n/);\n const html: string[] = [];\n let inCode = false;\n let codeLines: string[] = [];\n let listLines: string[] = [];\n\n function flushList() {\n if (listLines.length === 0) return;\n html.push(\n `<ul>${listLines.map((line) => `<li>${escapeHtml(line)}</li>`).join(\"\")}</ul>`,\n );\n listLines = [];\n }\n\n function flushCode() {\n if (!inCode) return;\n html.push(`<pre><code>${escapeHtml(codeLines.join(\"\\n\"))}</code></pre>`);\n codeLines = [];\n inCode = false;\n }\n\n for (const line of lines) {\n if (line.startsWith(\"```\")) {\n if (inCode) flushCode();\n else {\n flushList();\n inCode = true;\n codeLines = [];\n }\n continue;\n }\n if (inCode) {\n codeLines.push(line);\n continue;\n }\n\n const heading = line.match(/^(#{1,4})\\s+(.+)$/);\n if (heading) {\n flushList();\n const level = Math.min(heading[1].length, 4);\n html.push(`<h${level}>${escapeHtml(heading[2].trim())}</h${level}>`);\n continue;\n }\n\n const bullet = line.match(/^\\s*[-*]\\s+(.+)$/);\n if (bullet) {\n listLines.push(bullet[1]);\n continue;\n }\n\n if (!line.trim()) {\n flushList();\n continue;\n }\n\n flushList();\n html.push(`<p>${escapeHtml(line.trim())}</p>`);\n }\n\n flushCode();\n flushList();\n return html.join(\"\\n\");\n}\n\nfunction readLocalPlanAssets(dir: string): Record<string, string> | undefined {\n const assetsDir = path.join(dir, \"assets\");\n if (!fs.existsSync(assetsDir)) return undefined;\n\n const assets: Record<string, string> = {};\n let totalBytes = 0;\n for (const entry of fs.readdirSync(assetsDir, { withFileTypes: true })) {\n if (!entry.isFile()) continue;\n const filename = path.basename(entry.name);\n if (!filename || filename !== entry.name) continue;\n const ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n if (!LOCAL_PLAN_ASSET_EXTENSIONS.has(ext)) continue;\n\n const abs = path.join(assetsDir, filename);\n const bytes = fs.readFileSync(abs);\n if (bytes.byteLength > LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES) continue;\n if (totalBytes + bytes.byteLength > LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES) {\n continue;\n }\n totalBytes += bytes.byteLength;\n assets[filename] = bytes.toString(\"base64\");\n }\n\n return Object.keys(assets).length > 0 ? assets : undefined;\n}\n\nexport function readLocalPlanFiles(dir: string): LocalPlanFiles {\n const resolved = path.resolve(dir);\n const planPath = path.join(resolved, \"plan.mdx\");\n if (!fs.existsSync(planPath)) {\n throw new Error(`Missing local plan source: ${planPath}`);\n }\n const readOptional = (file: string) => {\n const abs = path.join(resolved, file);\n return fs.existsSync(abs) ? fs.readFileSync(abs, \"utf-8\") : undefined;\n };\n return {\n dir: resolved,\n planMdx: fs.readFileSync(planPath, \"utf-8\"),\n canvasMdx: readOptional(\"canvas.mdx\"),\n prototypeMdx: readOptional(\"prototype.mdx\"),\n stateJson: readOptional(\".plan-state.json\"),\n assets: readLocalPlanAssets(resolved),\n };\n}\n\nfunction localPlanMdxFolder(files: LocalPlanFiles): LocalPlanBridgeMdxFolder {\n return {\n \"plan.mdx\": files.planMdx,\n ...(files.canvasMdx ? { \"canvas.mdx\": files.canvasMdx } : {}),\n ...(files.prototypeMdx ? { \"prototype.mdx\": files.prototypeMdx } : {}),\n ...(files.stateJson ? { \".plan-state.json\": files.stateJson } : {}),\n ...(files.assets ? { \"assets/\": files.assets } : {}),\n };\n}\n\nfunction localPlanFileList(files: LocalPlanFiles): string[] {\n return [\n \"plan.mdx\",\n ...(files.canvasMdx ? [\"canvas.mdx\"] : []),\n ...(files.prototypeMdx ? [\"prototype.mdx\"] : []),\n ...(files.stateJson ? [\".plan-state.json\"] : []),\n ...Object.keys(files.assets ?? {}).map((filename) => `assets/${filename}`),\n ];\n}\n\nfunction localPlanSourceEntries(files: LocalPlanFiles): Array<{\n file: string;\n source: string;\n}> {\n return [\n { file: \"plan.mdx\", source: files.planMdx },\n ...(files.canvasMdx\n ? [{ file: \"canvas.mdx\", source: files.canvasMdx }]\n : []),\n ...(files.prototypeMdx\n ? [{ file: \"prototype.mdx\", source: files.prototypeMdx }]\n : []),\n ];\n}\n\nfunction lineNumberAt(source: string, index: number): number {\n let line = 1;\n for (let i = 0; i < index; i += 1) {\n if (source.charCodeAt(i) === 10) line += 1;\n }\n return line;\n}\n\nfunction maskFencedCode(source: string): string {\n return source.replace(\n /(^|\\n)(```|~~~)[\\s\\S]*?(\\n\\2[^\\n]*(?=\\n|$))/g,\n (match) => match.replace(/[^\\n]/g, \" \"),\n );\n}\n\nfunction findJsxOpeningTagEnd(source: string, start: number): number {\n let quote: string | null = null;\n let braceDepth = 0;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === \"{\") {\n braceDepth += 1;\n continue;\n }\n if (char === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n continue;\n }\n if (char === \">\" && braceDepth === 0) return i;\n }\n return -1;\n}\n\nfunction addValidationIssue(\n issues: LocalPlanValidationIssue[],\n file: string,\n source: string,\n index: number,\n message: string,\n) {\n issues.push({ file, line: lineNumberAt(source, index), message });\n}\n\nconst ENTITY_RE = /&(?:[a-z][a-z0-9]+|#[0-9]+|#x[0-9a-f]+);/gi;\nconst HTML_TEXT_ATTR_RE =\n /\\b(?:aria-label|alt|placeholder|title|value)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\nconst WIREFRAME_TEXT_ATTR_RE =\n /\\b(?:text|value|label|placeholder|title|note|due)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\n\nfunction normalizeVisibleText(value: string): string {\n return value\n .replace(/&nbsp;|&#160;|&#x0*a0;/gi, \" \")\n .replace(ENTITY_RE, \"x\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction meaningfulTextLength(value: string | undefined): number {\n return normalizeVisibleText(value ?? \"\").length;\n}\n\nfunction htmlMeaningfulTextLength(html: string): number {\n let length = 0;\n for (const match of html.matchAll(HTML_TEXT_ATTR_RE)) {\n length += meaningfulTextLength(match[1] ?? match[2] ?? match[3]);\n }\n\n const visibleText = html\n .replace(/<!--[\\s\\S]*?-->/g, \" \")\n .replace(/<script\\b[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style\\b[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<[^>]+>/g, \" \");\n length += meaningfulTextLength(visibleText);\n\n return length;\n}\n\nfunction hasSkeletonGeometry(html: string): boolean {\n return (\n /<(?:div|span|section|main|article|ul|li)\\b/i.test(html) &&\n /\\b(?:height|width|background|border|padding|wf-card|wf-box|wf-pill|wf-chip)\\b/i.test(\n html,\n )\n );\n}\n\nfunction stringAttributeValues(source: string, name: string): string[] {\n const values: string[] = [];\n const re = new RegExp(\n `\\\\b${name}\\\\s*=\\\\s*(?:\\\\{\\\\s*\\`([\\\\s\\\\S]*?)\\`\\\\s*\\\\}|\\\\{\\\\s*\"([^\"]*)\"\\\\s*\\\\}|\\\\{\\\\s*'([^']*)'\\\\s*\\\\}|\"([^\"]*)\"|'([^']*)')`,\n \"g\",\n );\n for (const match of source.matchAll(re)) {\n const value = match[1] ?? match[2] ?? match[3] ?? match[4] ?? match[5];\n if (value !== undefined) values.push(value);\n }\n return values;\n}\n\nfunction hasUnparsedAttributeExpression(source: string, name: string): boolean {\n return new RegExp(`\\\\b${name}\\\\s*=\\\\s*\\\\{`).test(source);\n}\n\nfunction hasMeaningfulWireframeHtml(screenOpening: string): boolean | null {\n const htmlValues = stringAttributeValues(screenOpening, \"html\");\n if (htmlValues.length === 0) {\n return hasUnparsedAttributeExpression(screenOpening, \"html\") ? null : false;\n }\n return htmlValues.some(\n (html) => htmlMeaningfulTextLength(html) >= 2 || hasSkeletonGeometry(html),\n );\n}\n\nfunction hasMeaningfulKitScreen(screenSource: string): boolean {\n for (const match of screenSource.matchAll(WIREFRAME_TEXT_ATTR_RE)) {\n if (meaningfulTextLength(match[1] ?? match[2] ?? match[3]) >= 2) {\n return true;\n }\n }\n if (/\\bitems\\s*=\\s*\\{[\\s\\S]*?\\blabel\\s*:/i.test(screenSource)) return true;\n if (/\\brows\\s*=\\s*\\{[\\s\\S]*?\\b[klv]\\s*:/i.test(screenSource)) return true;\n return false;\n}\n\nfunction hasMeaningfulWireframeScreen(blockSource: string): boolean | null {\n const screenMatch = /<Screen\\b/.exec(blockSource);\n if (!screenMatch) return false;\n const screenStart = screenMatch.index;\n const screenOpeningEnd = findJsxOpeningTagEnd(blockSource, screenStart);\n if (screenOpeningEnd < 0) return false;\n const screenOpening = blockSource.slice(screenStart, screenOpeningEnd + 1);\n const htmlMeaningful = hasMeaningfulWireframeHtml(screenOpening);\n if (htmlMeaningful === true) return true;\n\n const selfClosing = /\\/\\s*>$/.test(screenOpening);\n const closeIndex = selfClosing\n ? -1\n : blockSource.indexOf(\"</Screen>\", screenOpeningEnd + 1);\n const screenSource =\n closeIndex >= 0\n ? blockSource.slice(screenStart, closeIndex + \"</Screen>\".length)\n : screenOpening;\n if (hasMeaningfulKitScreen(screenSource)) return true;\n\n return htmlMeaningful === null ? null : false;\n}\n\nfunction lintWireframeBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<WireframeBlock\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock opening tag is not closed.\",\n );\n continue;\n }\n\n const opening = scanSource.slice(start, openingEnd + 1);\n const unsupportedAttr = opening.match(\n /\\b(data|screens|screen|elements)\\s*=/,\n );\n if (unsupportedAttr) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `WireframeBlock uses unsupported \"${unsupportedAttr[1]}\" prop. Put content inside a <Screen> child instead.`,\n );\n }\n\n const selfClosing = /\\/\\s*>$/.test(opening);\n const closeTag = \"</WireframeBlock>\";\n const closeIndex = selfClosing\n ? -1\n : scanSource.indexOf(closeTag, openingEnd + 1);\n const blockSource = selfClosing\n ? opening\n : closeIndex >= 0\n ? scanSource.slice(start, closeIndex + closeTag.length)\n : scanSource.slice(start, openingEnd + 1);\n\n if (!selfClosing && closeIndex < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock must have a closing </WireframeBlock> tag.\",\n );\n }\n\n if (selfClosing || !/<Screen\\b/.test(blockSource)) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock must wrap a <Screen> child; self-closing wireframes render empty. Use <WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>.',\n );\n continue;\n }\n\n const meaningfulScreen = hasMeaningfulWireframeScreen(blockSource);\n if (meaningfulScreen === false) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock contains an empty <Screen>; local previews render blank wireframes. Add visible html text/controls or kit nodes such as <Title text=\"Checkout\" /> and <Btn label=\"Pay\" />.',\n );\n }\n }\n}\n\nfunction lintColumnsBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<Columns\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = scanSource.slice(start, openingEnd + 1);\n if (/\\bcolumns\\s*=/.test(opening)) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'Columns must use <Column> children, not a columns= prop. Use <Columns><Column label=\"Before\">...</Column><Column label=\"After\">...</Column></Columns>.',\n );\n }\n }\n}\n\ntype JsxAttributeValue = {\n name: string;\n kind: \"expression\" | \"string\" | \"bare\" | \"boolean\";\n value: string;\n start: number;\n};\n\nfunction findBalancedEnd(\n source: string,\n start: number,\n open: string,\n close: string,\n): number {\n let depth = 0;\n let quote: string | null = null;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === open) {\n depth += 1;\n continue;\n }\n if (char === close) {\n depth -= 1;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\nfunction readJsxAttribute(\n opening: string,\n name: string,\n): JsxAttributeValue | null {\n let i = 0;\n while (i < opening.length) {\n if (!/[A-Za-z_:]/.test(opening[i] ?? \"\")) {\n i += 1;\n continue;\n }\n const nameStart = i;\n i += 1;\n while (/[\\w:.-]/.test(opening[i] ?? \"\")) i += 1;\n const attrName = opening.slice(nameStart, i);\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n if (opening[i] !== \"=\") {\n if (attrName === name) {\n return { name, kind: \"boolean\", value: \"true\", start: nameStart };\n }\n continue;\n }\n i += 1;\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n const valueStart = i;\n const quote = opening[i];\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n i += 1;\n while (i < opening.length) {\n if (opening[i] === \"\\\\\" && i + 1 < opening.length) {\n i += 2;\n continue;\n }\n if (opening[i] === quote) break;\n i += 1;\n }\n const value = opening.slice(valueStart + 1, i);\n i += 1;\n if (attrName === name) {\n return { name, kind: \"string\", value, start: valueStart + 1 };\n }\n continue;\n }\n if (quote === \"{\") {\n const end = findBalancedEnd(opening, i, \"{\", \"}\");\n if (end < 0) {\n if (attrName === name) {\n return {\n name,\n kind: \"expression\",\n value: opening.slice(valueStart + 1),\n start: valueStart + 1,\n };\n }\n break;\n }\n const value = opening.slice(valueStart + 1, end);\n i = end + 1;\n if (attrName === name) {\n return { name, kind: \"expression\", value, start: valueStart + 1 };\n }\n continue;\n }\n while (i < opening.length && !/[\\s>]/.test(opening[i] ?? \"\")) i += 1;\n if (attrName === name) {\n return {\n name,\n kind: \"bare\",\n value: opening.slice(valueStart, i),\n start: valueStart,\n };\n }\n }\n return null;\n}\n\nfunction expressionOffset(expression: string): number {\n return expression.search(/\\S/);\n}\n\nfunction extractTopLevelObjectLiterals(expression: string): Array<{\n source: string;\n start: number;\n}> | null {\n const leading = expressionOffset(expression);\n if (leading < 0 || expression[leading] !== \"[\") return null;\n const arrayEnd = findBalancedEnd(expression, leading, \"[\", \"]\");\n if (arrayEnd < 0) return null;\n const objects: Array<{ source: string; start: number }> = [];\n let i = leading + 1;\n while (i < arrayEnd) {\n const char = expression[i];\n if (/\\s|,/.test(char ?? \"\")) {\n i += 1;\n continue;\n }\n if (char !== \"{\") {\n return null;\n }\n const objectEnd = findBalancedEnd(expression, i, \"{\", \"}\");\n if (objectEnd < 0 || objectEnd > arrayEnd) return null;\n objects.push({\n source: expression.slice(i, objectEnd + 1),\n start: i,\n });\n i = objectEnd + 1;\n }\n return objects;\n}\n\nfunction findValueEnd(source: string, start: number): number {\n let i = start;\n let quote: string | null = null;\n let depth = 0;\n while (i < source.length) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (char === quote) quote = null;\n i += 1;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n i += 1;\n continue;\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n i += 1;\n continue;\n }\n if (char === \"}\" || char === \"]\" || char === \")\") {\n if (depth === 0) return i;\n depth -= 1;\n i += 1;\n continue;\n }\n if (char === \",\" && depth === 0) return i;\n i += 1;\n }\n return source.length;\n}\n\nfunction readObjectKey(\n source: string,\n start: number,\n): {\n key: string;\n keyStart: number;\n colon: number;\n} | null {\n let i = start;\n while (/\\s|,/.test(source[i] ?? \"\")) i += 1;\n const keyStart = i;\n const quote = source[i];\n let key = \"\";\n if (quote === '\"' || quote === \"'\") {\n i += 1;\n const valueStart = i;\n while (i < source.length) {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (source[i] === quote) break;\n i += 1;\n }\n key = source.slice(valueStart, i);\n i += 1;\n } else if (/[A-Za-z_$]/.test(quote ?? \"\")) {\n i += 1;\n while (/[\\w$]/.test(source[i] ?? \"\")) i += 1;\n key = source.slice(keyStart, i);\n } else {\n return null;\n }\n while (/\\s/.test(source[i] ?? \"\")) i += 1;\n if (source[i] !== \":\") return null;\n return { key, keyStart, colon: i };\n}\n\nfunction readTopLevelObjectProperty(\n objectSource: string,\n name: string,\n): { value: string; valueStart: number } | null {\n const body = objectSource.trim().startsWith(\"{\")\n ? objectSource.slice(1, objectSource.lastIndexOf(\"}\"))\n : objectSource;\n let i = 0;\n while (i < body.length) {\n const key = readObjectKey(body, i);\n if (!key) {\n i += 1;\n continue;\n }\n const valueStart = key.colon + 1;\n const valueEnd = findValueEnd(body, valueStart);\n if (key.key === name) {\n return { value: body.slice(valueStart, valueEnd), valueStart };\n }\n i = valueEnd + 1;\n }\n return null;\n}\n\nfunction isStaticNonEmptyStringLiteral(value: string): boolean {\n const trimmed = value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return trimmed.slice(1, -1).trim().length > 0;\n}\n\nfunction hasRequiredStaticString(objectSource: string, name: string): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n return prop ? isStaticNonEmptyStringLiteral(prop.value) : false;\n}\n\nfunction hasRequiredStaticId(objectSource: string): boolean {\n return hasRequiredStaticString(objectSource, \"id\");\n}\n\nfunction hasRequiredEnumLiteral(\n objectSource: string,\n name: string,\n allowed: readonly string[],\n): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n if (!prop) return false;\n const trimmed = prop.value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return allowed.includes(trimmed.slice(1, -1).trim());\n}\n\nfunction lintChecklistShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<Checklist\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const items = readJsxAttribute(opening, \"items\");\n if (!items) continue;\n if (items.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array expression with stable item ids.\",\n );\n continue;\n }\n const objects = extractTopLevelObjectLiterals(items.value);\n if (!objects) {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array of object literals so local check can validate the renderer schema.\",\n );\n continue;\n }\n objects.forEach((item, index) => {\n const base = start + items.start + item.start;\n if (!hasRequiredStaticId(item.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(item.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n }\n}\n\nfunction lintQuestionFormShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<(QuestionForm|VisualQuestions)\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const tag = match[1] ?? \"QuestionForm\";\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const questions = readJsxAttribute(opening, \"questions\");\n if (!questions) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `${tag} requires a questions array with at least one question object.`,\n );\n continue;\n }\n if (questions.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be an inline array expression with stable question ids.`,\n );\n continue;\n }\n const questionObjects = extractTopLevelObjectLiterals(questions.value);\n if (!questionObjects || questionObjects.length === 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be a non-empty inline array of object literals.`,\n );\n continue;\n }\n questionObjects.forEach((question, questionIndex) => {\n const questionBase = start + questions.start + question.start;\n if (!hasRequiredStaticId(question.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(question.source, \"title\")) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].title is required by the Plan renderer schema; add a non-empty string title.`,\n );\n }\n if (\n !hasRequiredEnumLiteral(question.source, \"mode\", [\n \"single\",\n \"multi\",\n \"freeform\",\n ])\n ) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].mode is required by the Plan renderer schema; use \"single\", \"multi\", or \"freeform\".`,\n );\n }\n const options = readTopLevelObjectProperty(question.source, \"options\");\n if (!options) return;\n const optionObjects = extractTopLevelObjectLiterals(options.value);\n if (!optionObjects) {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start + question.start + options.valueStart,\n `${tag} questions[${questionIndex}].options must be an inline array of object literals.`,\n );\n return;\n }\n optionObjects.forEach((option, optionIndex) => {\n const optionBase =\n start +\n questions.start +\n question.start +\n options.valueStart +\n option.start;\n if (!hasRequiredStaticId(option.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(option.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n });\n }\n}\n\n// Blank out fenced code blocks and inline code spans (preserving newlines and\n// length) so block-tag linters don't trip on documentation examples written in\n// prose — e.g. an inline `<WireframeBlock><Screen>...</Screen></WireframeBlock>`\n// example is not a real block to validate. Real blocks (outside code) are left\n// intact, so their offsets/line numbers stay correct. Without this the default\n// `plan local init` scaffold fails its own `plan local check`/`serve` lint.\nfunction maskCodeRegions(source: string): string {\n const blank = (s: string) => s.replace(/[^\\n]/g, \" \");\n return source.replace(/```[\\s\\S]*?```/g, blank).replace(/`[^`\\n]*`/g, blank);\n}\n\nexport function validateLocalPlanFiles(\n files: LocalPlanFiles,\n): LocalPlanValidationIssue[] {\n const issues: LocalPlanValidationIssue[] = [];\n for (const entry of localPlanSourceEntries(files)) {\n const source = maskCodeRegions(entry.source);\n lintWireframeBlocks(entry.file, source, issues);\n lintColumnsBlocks(entry.file, source, issues);\n lintChecklistShape(entry.file, entry.source, issues);\n lintQuestionFormShape(entry.file, entry.source, issues);\n }\n return issues;\n}\n\nexport function assertLocalPlanFilesValid(files: LocalPlanFiles): void {\n const issues = validateLocalPlanFiles(files);\n if (issues.length === 0) return;\n const details = issues\n .slice(0, 8)\n .map((issue) => `${issue.file}:${issue.line} ${issue.message}`)\n .join(\"\\n\");\n const overflow =\n issues.length > 8 ? `\\n...plus ${issues.length - 8} more issues` : \"\";\n throw new Error(\n `Local plan source validation failed:\\n${details}${overflow}\\nRun \\`npx @agent-native/core@latest plan blocks --out plan-blocks.md\\` and update the MDX to the documented block shapes.`,\n );\n}\n\nexport function buildLocalPlanPreviewHtml(\n input: LocalPlanPreviewInput,\n): string {\n const files = readLocalPlanFiles(input.dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(files.dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const blocks = splitMdxBlocks(parsed.body);\n const sourceFiles = [\n [\"plan.mdx\", files.planMdx],\n [\"canvas.mdx\", files.canvasMdx],\n [\"prototype.mdx\", files.prototypeMdx],\n [\".plan-state.json\", files.stateJson],\n ].filter((entry): entry is [string, string] => Boolean(entry[1]));\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n :root {\n color-scheme: light dark;\n --bg: #f8fafc;\n --paper: #ffffff;\n --ink: #0f172a;\n --muted: #64748b;\n --line: #cbd5e1;\n --accent: #2563eb;\n --soft: #eff6ff;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #020617;\n --paper: #0f172a;\n --ink: #e2e8f0;\n --muted: #94a3b8;\n --line: #334155;\n --soft: #172554;\n }\n }\n body { margin: 0; background: var(--bg); color: var(--ink); }\n main { max-width: 1040px; margin: 0 auto; padding: 40px 20px 56px; }\n header { margin-bottom: 28px; }\n h1 { font-size: clamp(2rem, 5vw, 3.5rem); line-height: 1; margin: 0 0 12px; }\n h2 { font-size: 1.35rem; margin: 28px 0 10px; }\n h3 { font-size: 1.05rem; margin: 0 0 8px; }\n p, li { line-height: 1.65; }\n .meta { display: flex; flex-wrap: wrap; gap: 8px; color: var(--muted); font-size: 0.9rem; }\n .pill { border: 1px solid var(--line); border-radius: 999px; padding: 4px 10px; background: var(--paper); }\n .notice { background: var(--soft); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin: 18px 0; }\n .block, details { background: var(--paper); border: 1px solid var(--line); border-radius: 8px; padding: 18px; margin: 14px 0; }\n .component summary { cursor: pointer; color: var(--accent); font-weight: 650; }\n pre { overflow: auto; border-radius: 8px; border: 1px solid var(--line); padding: 14px; background: rgba(148, 163, 184, 0.12); }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.9rem; }\n .source-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }\n </style>\n</head>\n<body>\n <main>\n <header>\n <div class=\"meta\">\n <span class=\"pill\">${kind === \"recap\" ? \"Visual recap\" : \"Visual plan\"}</span>\n <span class=\"pill\">Local-files mode</span>\n <span class=\"pill\">No DB writes</span>\n </div>\n <h1>${escapeHtml(title)}</h1>\n ${brief ? `<p>${escapeHtml(brief)}</p>` : \"\"}\n <div class=\"notice\">\n This preview was generated entirely from local files. It does not call\n the Plan MCP server, the Plan app action surface, a hosted service, or a\n database. Edit the MDX files and regenerate this preview to update it.\n </div>\n </header>\n <section>\n ${blocks\n .map((block) =>\n block.type === \"component\"\n ? `<details class=\"component block\" open><summary>${escapeHtml(\n block.name || \"MDX component\",\n )}</summary><pre><code>${escapeHtml(block.value)}</code></pre></details>`\n : `<article class=\"block\">${renderMarkdownish(block.value)}</article>`,\n )\n .join(\"\\n\")}\n </section>\n <section>\n <h2>Local Source Files</h2>\n <div class=\"source-tabs\">\n ${sourceFiles\n .map(\n ([name, source]) =>\n `<details><summary>${escapeHtml(name)}</summary><pre><code>${escapeHtml(\n source,\n )}</code></pre></details>`,\n )\n .join(\"\\n\")}\n </div>\n </section>\n </main>\n</body>\n</html>\n`;\n}\n\nexport function writeLocalPlanPreview(input: {\n dir: string;\n out?: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n open?: boolean;\n openUrl?: (url: string) => OpenLocalUrlResult;\n}): LocalPlanPreviewResult {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const out = input.out ? path.resolve(input.out) : undefined;\n if (out) {\n fs.mkdirSync(path.dirname(out), { recursive: true });\n fs.writeFileSync(out, buildLocalPlanPreviewHtml({ ...input, dir, kind }));\n }\n const result: LocalPlanPreviewResult = {\n ok: true,\n dir,\n ...(out ? { out } : {}),\n url: out ? pathToFileURL(out).href : localPlanPreviewUrl(dir, input.appUrl),\n title,\n kind,\n files: localPlanFileList(files),\n };\n if (!input.open) return result;\n\n const openResult = (input.openUrl || openLocalUrl)(result.url);\n return {\n ...result,\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n };\n}\n\nfunction buildLocalPlanBridgePayload(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n}): LocalPlanBridgePayload {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n\n return {\n ok: true,\n version: 1,\n source: \"agent-native-local-bridge\",\n localOnly: true,\n slug: path.basename(dir),\n dir,\n title,\n brief,\n kind,\n updatedAt: latestLocalPlanMtime(dir, files),\n files: localPlanFileList(files),\n mdx: localPlanMdxFolder(files),\n };\n}\n\nfunction latestLocalPlanMtime(dir: string, files: LocalPlanFiles): string {\n const candidates = [\n path.join(dir, \"plan.mdx\"),\n ...(files.canvasMdx ? [path.join(dir, \"canvas.mdx\")] : []),\n ...(files.prototypeMdx ? [path.join(dir, \"prototype.mdx\")] : []),\n ...(files.stateJson ? [path.join(dir, \".plan-state.json\")] : []),\n ...Object.keys(files.assets ?? {}).map((filename) =>\n path.join(dir, \"assets\", filename),\n ),\n ];\n let latest = 0;\n for (const file of candidates) {\n try {\n latest = Math.max(latest, fs.statSync(file).mtimeMs);\n } catch {\n // Ignore files deleted between the read and stat passes.\n }\n }\n return new Date(latest || Date.now()).toISOString();\n}\n\nfunction sendBridgeJson(\n res: ServerResponse,\n status: number,\n payload: unknown,\n): void {\n res.writeHead(status, {\n \"access-control-allow-origin\": \"*\",\n \"access-control-allow-methods\": \"GET, OPTIONS\",\n \"access-control-allow-headers\": \"content-type\",\n // Required when the hosted HTTPS Plan UI fetches this localhost bridge.\n \"access-control-allow-private-network\": \"true\",\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\",\n \"x-agent-native-local-bridge\": \"1\",\n });\n res.end(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction bridgeRequestUrl(req: IncomingMessage): URL {\n return new URL(req.url || \"/\", \"http://127.0.0.1\");\n}\n\nfunction bridgeHostForUrl(host: string): string {\n if (host === \"0.0.0.0\" || host === \"::\") return \"127.0.0.1\";\n return host;\n}\n\nexport async function startLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n open?: boolean;\n urlFile?: string | false;\n openUrl?: (url: string) => OpenLocalUrlResult;\n}): Promise<LocalPlanBridgeServer> {\n const dir = path.resolve(input.dir);\n const initialPayload = buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n });\n const token = input.token || crypto.randomBytes(24).toString(\"base64url\");\n const host = input.host || \"127.0.0.1\";\n const appUrl = normalizeBridgeAppUrl(input.appUrl);\n const server = http.createServer((req, res) => {\n if (req.method === \"OPTIONS\") {\n sendBridgeJson(res, 204, \"\");\n return;\n }\n if (req.method !== \"GET\") {\n sendBridgeJson(res, 405, { ok: false, error: \"Method not allowed.\" });\n return;\n }\n\n const url = bridgeRequestUrl(req);\n if (url.pathname !== \"/local-plan.json\") {\n sendBridgeJson(res, 404, { ok: false, error: \"Not found.\" });\n return;\n }\n if (url.searchParams.get(\"token\") !== token) {\n sendBridgeJson(res, 403, { ok: false, error: \"Invalid bridge token.\" });\n return;\n }\n\n try {\n sendBridgeJson(\n res,\n 200,\n buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n }),\n );\n } catch (error) {\n sendBridgeJson(res, 500, {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off(\"listening\", onListening);\n reject(error);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n server.listen(input.port ?? 0, host);\n });\n\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close();\n throw new Error(\"Local plan bridge did not bind to a TCP port.\");\n }\n\n const bridgeUrl = `http://${bridgeHostForUrl(host)}:${address.port}/local-plan.json?token=${encodeURIComponent(\n token,\n )}`;\n const url = localPlanBridgePageUrl({ dir, bridgeUrl, appUrl });\n const urlFile =\n input.urlFile === false\n ? undefined\n : writeLocalPlanUrlFile(dir, url, input.urlFile);\n const openResult = input.open\n ? (input.openUrl || openLocalUrl)(url)\n : undefined;\n\n return {\n server,\n result: {\n ok: true,\n dir,\n url,\n ...(urlFile ? { urlFile } : {}),\n bridgeUrl,\n appUrl,\n title: initialPayload.title,\n kind: initialPayload.kind,\n files: initialPayload.files,\n host,\n port: address.port,\n ...(openResult\n ? {\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n }\n : {}),\n },\n };\n}\n\nfunction localPlanBridgeWarnings(input: {\n appUrl: string;\n bridgeUrl: string;\n}): string[] {\n const warnings: string[] = [];\n try {\n const appUrl = new URL(input.appUrl);\n const bridgeUrl = new URL(input.bridgeUrl);\n if (appUrl.protocol === \"https:\" && bridgeUrl.protocol === \"http:\") {\n warnings.push(\n \"Safari may block the hosted HTTPS Plan UI from reading the HTTP localhost bridge. Use Chrome/Chromium/Edge, or pass --app-url http://localhost:8096 when running a local Plan app.\",\n );\n }\n } catch {\n // The URLs were normalized earlier; ignore defensive parse failures.\n }\n return warnings;\n}\n\nexport async function verifyLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n urlFile?: string | false;\n fetchFn?: typeof fetch;\n}): Promise<LocalPlanVerifyResult> {\n const fetchFn = input.fetchFn ?? fetch;\n const bridge = await startLocalPlanBridge({\n dir: input.dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n appUrl: input.appUrl,\n host: input.host,\n port: input.port,\n token: input.token,\n urlFile: input.urlFile,\n });\n\n try {\n const preflight = await fetchFn(bridge.result.bridgeUrl, {\n method: \"OPTIONS\",\n headers: {\n origin: bridge.result.appUrl,\n \"access-control-request-method\": \"GET\",\n \"access-control-request-private-network\": \"true\",\n },\n });\n const response = await fetchFn(bridge.result.bridgeUrl, {\n method: \"GET\",\n headers: { accept: \"application/json\" },\n });\n const payload = (await response.json().catch(() => null)) as\n | (LocalPlanBridgePayload & { mdx?: LocalPlanBridgeMdxFolder })\n | null;\n const mdxFiles = payload?.mdx\n ? Object.keys(payload.mdx).filter((file) => file !== \"assets/\")\n : undefined;\n const bridgeOk =\n response.ok &&\n payload?.ok === true &&\n payload.source === \"agent-native-local-bridge\" &&\n payload.localOnly === true &&\n Boolean(payload.mdx?.[\"plan.mdx\"]);\n const preflightOk =\n preflight.status === 204 &&\n preflight.headers.get(\"access-control-allow-origin\") === \"*\" &&\n preflight.headers.get(\"access-control-allow-private-network\") === \"true\";\n return {\n ok: bridgeOk && preflightOk,\n dir: bridge.result.dir,\n url: bridge.result.url,\n ...(bridge.result.urlFile ? { urlFile: bridge.result.urlFile } : {}),\n bridgeUrl: bridge.result.bridgeUrl,\n appUrl: bridge.result.appUrl,\n title: bridge.result.title,\n kind: bridge.result.kind,\n files: bridge.result.files,\n preflight: {\n status: preflight.status,\n allowOrigin: preflight.headers.get(\"access-control-allow-origin\"),\n allowPrivateNetwork: preflight.headers.get(\n \"access-control-allow-private-network\",\n ),\n },\n bridge: {\n status: response.status,\n ok: bridgeOk,\n ...(payload?.source ? { source: payload.source } : {}),\n ...(typeof payload?.localOnly === \"boolean\"\n ? { localOnly: payload.localOnly }\n : {}),\n ...(Array.isArray(payload?.files) ? { files: payload.files } : {}),\n ...(mdxFiles ? { mdxFiles } : {}),\n ...(payload?.error ? { error: payload.error } : {}),\n },\n warnings: localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n };\n } finally {\n await new Promise<void>((resolve) => bridge.server.close(() => resolve()));\n }\n}\n\nfunction writeLocalPlanSkeleton(input: {\n dir?: string;\n title: string;\n brief?: string;\n kind: LocalPlanKind;\n force?: boolean;\n}): { ok: true; dir: string; files: string[] } {\n const dir = path.resolve(\n input.dir || path.join(defaultPlansDir(), localPlanFolderName(input.title)),\n );\n const planPath = path.join(dir, \"plan.mdx\");\n if (fs.existsSync(planPath) && !input.force) {\n throw new Error(\n `${planPath} already exists. Pass --force to replace the skeleton.`,\n );\n }\n fs.mkdirSync(dir, { recursive: true });\n const title = input.title;\n const brief =\n input.brief ||\n (input.kind === \"recap\"\n ? \"Local visual recap generated without Plan app database writes.\"\n : \"Local visual plan generated without Plan app database writes.\");\n const mdx = [\n \"---\",\n `title: \"${title.replace(/\"/g, '\\\\\"')}\"`,\n `brief: \"${brief.replace(/\"/g, '\\\\\"')}\"`,\n `kind: \"${input.kind}\"`,\n \"localOnly: true\",\n \"---\",\n \"\",\n `# ${title}`,\n \"\",\n brief,\n \"\",\n \"## Review Surface\",\n \"\",\n \"Author the structured plan or recap here. You can add Agent-Native Plan MDX\",\n 'blocks such as `<WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>`,',\n \"`<Diagram />`, `<TabsBlock />`, `<FileTree />`, or `<Diff />`; the local\",\n \"preview will show the source without publishing it to the Plan app.\",\n \"\",\n ].join(\"\\n\");\n fs.writeFileSync(planPath, mdx, \"utf-8\");\n fs.writeFileSync(\n path.join(dir, \".plan-state.json\"),\n JSON.stringify(\n {\n localOnly: true,\n kind: input.kind,\n createdAt: new Date().toISOString(),\n },\n null,\n 2,\n ) + \"\\n\",\n \"utf-8\",\n );\n return { ok: true, dir, files: [\"plan.mdx\", \".plan-state.json\"] };\n}\n\nfunction runInit(args: Record<string, string | boolean>): void {\n const title = optionalArg(args, \"title\") || \"Untitled local visual plan\";\n const result = writeLocalPlanSkeleton({\n dir: optionalArg(args, \"dir\"),\n title,\n brief: optionalArg(args, \"brief\"),\n kind: normalizeKind(optionalArg(args, \"kind\")),\n force: boolArg(args, \"force\"),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nfunction runCheck(args: Record<string, string | boolean>): void {\n const dir = stringArg(args, \"dir\");\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const result = {\n ok: true,\n noDb: true,\n validation: \"passed\",\n dir: files.dir,\n title: parsed.frontmatter.title || firstHeading(parsed.body),\n kind: normalizeKind(parsed.frontmatter.kind),\n files: {\n \"plan.mdx\": Buffer.byteLength(files.planMdx),\n ...(files.canvasMdx\n ? { \"canvas.mdx\": Buffer.byteLength(files.canvasMdx) }\n : {}),\n ...(files.prototypeMdx\n ? { \"prototype.mdx\": Buffer.byteLength(files.prototypeMdx) }\n : {}),\n ...(files.stateJson\n ? { \".plan-state.json\": Buffer.byteLength(files.stateJson) }\n : {}),\n ...(files.assets\n ? Object.fromEntries(\n Object.entries(files.assets).map(([filename, base64]) => [\n `assets/${filename}`,\n Buffer.byteLength(base64, \"base64\"),\n ]),\n )\n : {}),\n },\n };\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nfunction runPreview(args: Record<string, string | boolean>): void {\n const result = writeLocalPlanPreview({\n dir: stringArg(args, \"dir\"),\n out: optionalArg(args, \"out\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n open: boolArg(args, \"open\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nasync function runServe(args: Record<string, string | boolean>): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const bridge = await startLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n open: boolArg(args, \"open\"),\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n\n process.stdout.write(`${JSON.stringify(bridge.result, null, 2)}\\n`);\n process.stderr.write(\n [\n `Local Plan bridge running at ${bridge.result.bridgeUrl}`,\n bridge.result.urlFile\n ? `Open URL written to ${bridge.result.urlFile}`\n : \"\",\n ...localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n \"Press Ctrl+C to stop.\",\n ]\n .filter(Boolean)\n .join(\"\\n\") + \"\\n\",\n );\n\n await new Promise<void>((resolve) => {\n let stopped = false;\n const cleanup = () => {\n process.off(\"SIGINT\", stop);\n process.off(\"SIGTERM\", stop);\n };\n const stop = () => {\n if (stopped) return;\n stopped = true;\n cleanup();\n bridge.server.close(() => resolve());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\n}\n\nasync function runVerify(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const result = await verifyLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\") || false,\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (!result.ok) process.exit(1);\n}\n\nasync function runBlocks(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const format = normalizePlanBlockFormat(optionalArg(args, \"format\"));\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_BLOCKS_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const out = optionalArg(args, \"out\") || defaultPlanBlocksOut(format);\n const useClack = Boolean(process.stdout.isTTY) && !boolArg(args, \"json\");\n let stopSpinner: ((message?: string) => void) | undefined;\n let clack: typeof import(\"@clack/prompts\") | undefined;\n\n if (useClack) {\n clack = await import(\"@clack/prompts\");\n const spinner = clack.spinner();\n spinner.start(\"Fetching Plan block catalog\");\n stopSpinner = (message?: string) => spinner.stop(message);\n }\n\n try {\n const result = await fetchPlanBlockCatalog({\n appUrl,\n format,\n out,\n });\n if (!useClack || !clack) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n stopSpinner?.(\"Fetched Plan block catalog\");\n clack.note(\n [\n `Output ${path.resolve(result.out)}`,\n `Format ${result.format}`,\n typeof result.count === \"number\" ? `Blocks ${result.count}` : \"\",\n \"Privacy No plan content sent\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Plan block catalog\",\n );\n clack.outro(`Wrote ${result.out}`);\n } catch (error) {\n if (useClack && clack) {\n stopSpinner?.(\"Plan block catalog fetch failed\");\n clack.cancel(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n throw error;\n }\n}\n\nconst HELP = `agent-native plan — local Agent-Native Plan helpers\n\nUsage:\n agent-native plan blocks [--format reference|schema] [--app-url <url>] [--out <file>] [--json]\n agent-native plan serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local init --title <title> [--brief <text>] [--kind plan|recap] [--dir <folder>] [--force]\n agent-native plan local check --dir <folder>\n agent-native plan local serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local verify --dir <folder> [--app-url <url>] [--kind plan|recap] [--port <port>]\n agent-native plan local preview --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--out preview.html]\n\nThe blocks command fetches the no-auth, read-only get-plan-blocks catalog from\nthe Plan app and writes plan-blocks.md (or plan-blocks.schema.json). It sends no\nplan content and is safe for local-files authoring before writing MDX. It uses a\nclack UI in interactive terminals and prints JSON for non-interactive shells or\nwhen --json is passed.\n\nThe local subcommands are the privacy-focused no-DB path. They only read and\nwrite local files: plan.mdx, optional canvas.mdx, optional prototype.mdx, and\noptional .plan-state.json. They do not call the Plan MCP server, the Plan app\nwrite actions, hosted storage, or SQLite.\n\nCommon flow:\n agent-native plan blocks --out plan-blocks.md\n agent-native plan local init --title \"Checkout review\" --kind plan\n agent-native plan local serve --dir plans/checkout-review --open\n\n\\`plan local serve\\` starts a tiny localhost bridge and opens the hosted Plan UI\nagainst that local-only source. The hosted app fetches the MDX from localhost in\nthe browser; it does not write plan content to the hosted database. The served\nURL is written to \\`.plan-url\\` by default; pass \\`--url-file\\` to choose a\ndifferent local-only file. On macOS, \\`--open\\` prefers Chromium browsers because\nSafari may block the hosted HTTPS page from reading the HTTP localhost bridge.\nUse \\`plan local verify\\` for headless bridge/CORS diagnostics that exit cleanly.\nUse \\`plan local preview\\` for a local Plan dev server route. \\`preview --out\\` is\na legacy/debug escape hatch that writes a standalone static HTML file.\n\\`plan serve\\` is kept as a compatibility alias for \\`plan local serve\\`.\n`;\n\nexport async function runPlan(argv: string[]): Promise<void> {\n const [area, sub, ...rest] = argv;\n if (area === \"blocks\") {\n await runBlocks(parseArgs(argv.slice(1)));\n return;\n }\n if (area === \"serve\") {\n const args = parseArgs(argv.slice(1));\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n await runServe(args);\n return;\n }\n if (area !== \"local\") {\n // Bare `agent-native plan` / `plan help` / `plan --help` → show help on\n // stdout and exit 0 (informational, not an error).\n if (\n area === undefined ||\n area === \"help\" ||\n area === \"--help\" ||\n area === \"-h\"\n ) {\n process.stdout.write(HELP);\n return;\n }\n // A non-empty, unrecognised area (e.g. `agent-native plan lokal`) is an\n // error: print to stderr so the CI log captures it, and exit 1 so callers\n // can detect the failure. This mirrors the existing behaviour for unknown\n // subcommands inside `plan local`.\n process.stderr.write(`Unknown plan area: ${area}\\n${HELP}`);\n process.exit(1);\n }\n const args = parseArgs(rest);\n // `plan local <sub> --help` / `-h` shows help instead of running the\n // subcommand (e.g. `plan local init --help` must not scaffold a folder).\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n switch (sub) {\n case \"init\":\n runInit(args);\n return;\n case \"check\":\n runCheck(args);\n return;\n case \"preview\":\n runPreview(args);\n return;\n case \"serve\":\n await runServe(args);\n return;\n case \"verify\":\n await runVerify(args);\n return;\n case \"help\":\n case \"--help\":\n case \"-h\":\n case undefined:\n process.stdout.write(HELP);\n return;\n default:\n process.stderr.write(`Unknown plan local subcommand: ${sub}\\n${HELP}`);\n process.exit(1);\n }\n}\n"]}
1
+ {"version":3,"file":"plan-local.js","sourceRoot":"","sources":["../../src/cli/plan-local.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plan helper commands.\n *\n * The `plan local` commands are intentionally separate from the Plan app\n * actions. They do not call MCP, hosted write actions, SQLite, or hosted\n * storage; they only read local files or serve them from a localhost bridge so\n * privacy-focused users have an auditable no-DB path. The top-level\n * `plan blocks` command is a schema-only, no-auth helper for fetching the\n * public block catalog before authoring local MDX; it never sends plan content.\n */\n\nimport fs from \"node:fs\";\nimport crypto from \"node:crypto\";\nimport http, {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n DEFAULT_PLAN_APP_URL,\n defaultPlanBlocksOut,\n fetchPlanBlockCatalog,\n normalizePlanBlockFormat,\n planActionEndpoint,\n} from \"./plan-blocks.js\";\n\ntype LocalPlanKind = \"plan\" | \"recap\";\n\ntype LocalPlanFiles = {\n dir: string;\n planMdx: string;\n canvasMdx?: string;\n prototypeMdx?: string;\n stateJson?: string;\n assets?: Record<string, string>;\n};\n\nexport type LocalPlanValidationIssue = {\n file: string;\n line: number;\n message: string;\n};\n\ntype LocalPlanPreviewInput = {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n};\n\ntype LocalPlanPreviewResult = {\n ok: true;\n dir: string;\n out?: string;\n url: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\ntype LocalPlanBridgeMdxFolder = {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \".plan-state.json\"?: string;\n \"assets/\"?: Record<string, string>;\n};\n\ntype VisualAnswerSourcePayload = {\n question?: string;\n title?: string;\n brief?: string;\n repoPath?: string;\n sourceUrl?: string;\n sourceType?: string;\n mdx: {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \"assets/\"?: Record<string, string>;\n };\n};\n\nexport type PublishVisualAnswerInput = {\n appUrl: string;\n token: string;\n question?: string;\n sourcePath?: string;\n out?: string;\n prevPlanId?: string;\n repo?: string;\n sourceUrl?: string;\n sourceType?: string;\n visibility?: \"private\" | \"org\" | \"public\";\n fetchFn?: typeof fetch;\n cwd?: string;\n};\n\nexport type LocalPlanBridgePayload = {\n ok: true;\n version: 1;\n source: \"agent-native-local-bridge\";\n localOnly: true;\n slug: string;\n dir: string;\n title: string;\n brief: string;\n kind: LocalPlanKind;\n updatedAt: string;\n files: string[];\n mdx: LocalPlanBridgeMdxFolder;\n};\n\nexport type LocalPlanServeResult = {\n ok: true;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n host: string;\n port: number;\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\nexport type LocalPlanBridgeServer = {\n server: Server;\n result: LocalPlanServeResult;\n};\n\nexport type LocalPlanVerifyResult = {\n ok: boolean;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n preflight: {\n status: number;\n allowOrigin: string | null;\n allowPrivateNetwork: string | null;\n };\n bridge: {\n status: number;\n ok: boolean;\n source?: string;\n localOnly?: boolean;\n files?: string[];\n mdxFiles?: string[];\n error?: string;\n };\n warnings: string[];\n};\n\ntype OpenLocalUrlResult = {\n ok: boolean;\n command: string;\n error?: string;\n};\n\nconst LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES = 2 * 1024 * 1024;\nconst LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES = 10 * 1024 * 1024;\nconst AGENT_NATIVE_MANIFEST_FILE = \"agent-native.json\";\nconst VISUAL_ANSWER_SOURCE_FILENAME = \"visual-answer-source.json\";\nconst VISUAL_ANSWER_URL_FILENAME = \"visual-answer-url.txt\";\nconst PLAN_ACTION_HTTP_TIMEOUT_MS = 45_000;\nconst LOCAL_PLAN_ASSET_EXTENSIONS = new Set([\n \"png\",\n \"jpg\",\n \"jpeg\",\n \"gif\",\n \"webp\",\n \"svg\",\n]);\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const out: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i += 1) {\n const token = argv[i];\n if (!token.startsWith(\"--\")) continue;\n const key = token.slice(2);\n const next = argv[i + 1];\n if (next === undefined || next.startsWith(\"--\")) out[key] = true;\n else {\n out[key] = next;\n i += 1;\n }\n }\n return out;\n}\n\nfunction stringArg(\n args: Record<string, string | boolean>,\n key: string,\n): string {\n const value = args[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Missing --${key}`);\n }\n return value;\n}\n\nfunction optionalArg(\n args: Record<string, string | boolean>,\n key: string,\n): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction boolArg(args: Record<string, string | boolean>, key: string): boolean {\n return args[key] === true;\n}\n\nfunction sanitizeHttpDetail(value: string, maxLength: number): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) return normalized;\n return `${normalized.slice(0, maxLength - 3)}...`;\n}\n\nfunction normalizeVisibility(\n value: string | undefined,\n): \"private\" | \"org\" | \"public\" | undefined {\n if (!value) return undefined;\n if (value === \"private\" || value === \"org\" || value === \"public\") {\n return value;\n }\n throw new Error(\n `Invalid --visibility \"${value}\" (expected private, org, or public)`,\n );\n}\n\nfunction normalizeVisualAnswerSourceType(value: string | undefined): string {\n if (!value) return \"code\";\n if (\n [\n \"code\",\n \"pull-request\",\n \"commit\",\n \"branch\",\n \"diff\",\n \"issue\",\n \"page\",\n ].includes(value)\n ) {\n return value;\n }\n throw new Error(\n `Invalid --source-type \"${value}\" (expected code, pull-request, commit, branch, diff, issue, or page)`,\n );\n}\n\nfunction visualAnswerUrlFromPublishResult(\n result: unknown,\n appUrl: string,\n): string | null {\n const base = appUrl.replace(/\\/$/, \"\");\n if (!result || typeof result !== \"object\") return null;\n const record = result as Record<string, unknown>;\n const rawUrl =\n typeof record.url === \"string\"\n ? record.url\n : record.path && typeof record.path === \"string\"\n ? record.path\n : null;\n if (rawUrl) {\n try {\n return new URL(rawUrl, `${base}/`).toString();\n } catch {\n return null;\n }\n }\n const planId =\n typeof record.planId === \"string\"\n ? record.planId\n : record.plan &&\n typeof record.plan === \"object\" &&\n typeof (record.plan as Record<string, unknown>).id === \"string\"\n ? ((record.plan as Record<string, unknown>).id as string)\n : null;\n return planId ? `${base}/plans/${encodeURIComponent(planId)}` : null;\n}\n\nasync function fetchActionWithTimeout(\n url: string,\n init: RequestInit,\n fetchFn: typeof fetch,\n): Promise<Response> {\n return await fetchFn(url, {\n ...init,\n signal: init.signal ?? AbortSignal.timeout(PLAN_ACTION_HTTP_TIMEOUT_MS),\n });\n}\n\nexport function localPlanFolderName(title: string): string {\n const slug = title\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 64)\n .replace(/-+$/g, \"\");\n return slug || \"untitled-plan\";\n}\n\nfunction normalizeKind(value: string | undefined): LocalPlanKind {\n if (!value) return \"plan\";\n if (value === \"plan\" || value === \"recap\") return value;\n throw new Error(`Invalid --kind \"${value}\" (expected plan or recap)`);\n}\n\nfunction normalizeSlash(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeRelativePath(filePath: string): string | null {\n if (!filePath.trim() || path.isAbsolute(filePath)) return null;\n const normalized = path.posix\n .normalize(normalizeSlash(filePath.trim()))\n .replace(/\\/+$/, \"\");\n if (\n !normalized ||\n normalized === \".\" ||\n normalized === \"..\" ||\n normalized.startsWith(\"../\") ||\n normalized.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n return null;\n }\n return normalized;\n}\n\nfunction findUpward(startDir: string, filename: string): string | null {\n let current = path.resolve(startDir);\n for (;;) {\n const candidate = path.join(current, filename);\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction manifestRootPath(value: unknown): string | null {\n if (typeof value === \"string\") return normalizeRelativePath(value);\n if (isRecord(value) && typeof value.path === \"string\") {\n return normalizeRelativePath(value.path);\n }\n return null;\n}\n\nfunction planManifestConfig(): { rootDir: string; plansPath: string } | null {\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n const manifestPath = configuredManifest\n ? path.resolve(configuredManifest)\n : findUpward(process.cwd(), AGENT_NATIVE_MANIFEST_FILE);\n if (!manifestPath) return null;\n\n try {\n const parsed = JSON.parse(\n fs.readFileSync(manifestPath, \"utf-8\"),\n ) as unknown;\n const apps = isRecord(parsed) && isRecord(parsed.apps) ? parsed.apps : null;\n const planApp = apps && isRecord(apps.plan) ? apps.plan : null;\n const roots = planApp && Array.isArray(planApp.roots) ? planApp.roots : [];\n const plansPath = roots\n .map(manifestRootPath)\n .find((item): item is string => Boolean(item));\n return plansPath\n ? { rootDir: path.dirname(manifestPath), plansPath }\n : null;\n } catch {\n return null;\n }\n}\n\nfunction localPlanWorkspaceRoot(startDir = process.cwd()): string {\n const manifestPath = findUpward(startDir, AGENT_NATIVE_MANIFEST_FILE);\n if (manifestPath) return path.dirname(manifestPath);\n const gitDir = findUpward(startDir, \".git\");\n if (gitDir) return path.dirname(gitDir);\n\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n if (configuredManifest) return path.dirname(path.resolve(configuredManifest));\n return process.cwd();\n}\n\nfunction defaultPlansDir(): string {\n const configured = process.env.PLAN_LOCAL_DIR;\n if (configured?.trim()) return path.resolve(configured.trim());\n const manifest = planManifestConfig();\n if (manifest) return path.resolve(manifest.rootDir, manifest.plansPath);\n return path.resolve(\"plans\");\n}\n\nfunction defaultLocalPlanAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_APP_URL ||\n process.env.PLAN_BASE_URL ||\n \"http://localhost:8096\"\n );\n}\n\nfunction defaultLocalPlanBridgeAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_BRIDGE_APP_URL ||\n process.env.PLAN_BASE_URL ||\n DEFAULT_PLAN_APP_URL\n );\n}\n\nfunction normalizeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction normalizeBridgeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanBridgeAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction localPlanPreviewUrl(dir: string, appUrl?: string): string {\n const base = `${normalizeAppUrl(appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(dir)),\n )}`;\n const repoPath = repoRelativePlanPath(dir);\n if (!repoPath) return base;\n return `${base}?${new URLSearchParams({ path: repoPath }).toString()}`;\n}\n\nfunction realpathIfExists(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return path.resolve(filePath);\n }\n}\n\nfunction repoRelativePlanPath(dir: string): string | null {\n const resolved = realpathIfExists(dir);\n const root = realpathIfExists(localPlanWorkspaceRoot(resolved));\n const relative = path.relative(root, resolved);\n if (!relative || relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n return null;\n }\n return normalizeSlash(relative);\n}\n\nfunction localPlanBridgePageUrl(input: {\n dir: string;\n bridgeUrl: string;\n appUrl?: string;\n}): string {\n return `${normalizeBridgeAppUrl(input.appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(input.dir)),\n )}?bridge=${encodeURIComponent(input.bridgeUrl)}`;\n}\n\nfunction writeLocalPlanUrlFile(dir: string, url: string, urlFile?: string) {\n const file = path.resolve(urlFile || path.join(dir, \".plan-url\"));\n fs.writeFileSync(file, `${url}\\n`, { encoding: \"utf-8\", mode: 0o600 });\n return file;\n}\n\nfunction runOpenCommand(command: string, args: string[]): OpenLocalUrlResult {\n const result = spawnSync(command, args, {\n stdio: \"ignore\",\n windowsHide: true,\n });\n const commandDisplay = [command, ...args].join(\" \");\n if (result.error) {\n return {\n ok: false,\n command: commandDisplay,\n error: result.error.message,\n };\n }\n if (typeof result.status === \"number\" && result.status !== 0) {\n return {\n ok: false,\n command: commandDisplay,\n error: `exit code ${result.status}`,\n };\n }\n return { ok: true, command: commandDisplay };\n}\n\nfunction openLocalUrl(url: string): OpenLocalUrlResult {\n const platform = process.platform;\n if (platform === \"darwin\") {\n for (const appName of [\n \"Google Chrome\",\n \"Chromium\",\n \"Microsoft Edge\",\n \"Brave Browser\",\n ]) {\n const result = runOpenCommand(\"open\", [\"-a\", appName, url]);\n if (result.ok) return result;\n }\n return runOpenCommand(\"open\", [url]);\n }\n if (platform === \"win32\") {\n return runOpenCommand(\"cmd\", [\"/c\", \"start\", \"\", url]);\n }\n return runOpenCommand(\"xdg-open\", [url]);\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction stripFrontmatter(source: string): {\n body: string;\n frontmatter: Record<string, string>;\n} {\n if (!source.startsWith(\"---\\n\")) return { body: source, frontmatter: {} };\n const end = source.indexOf(\"\\n---\", 4);\n if (end < 0) return { body: source, frontmatter: {} };\n const frontmatterSource = source.slice(4, end).trim();\n const body = source.slice(end + 4).replace(/^\\r?\\n/, \"\");\n const frontmatter: Record<string, string> = {};\n for (const line of frontmatterSource.split(/\\r?\\n/)) {\n const match = line.match(/^([A-Za-z0-9_-]+):\\s*(.*)$/);\n if (!match) continue;\n const value = match[2]\n .trim()\n .replace(/^['\"]|['\"]$/g, \"\")\n .trim();\n frontmatter[match[1]] = value;\n }\n return { body, frontmatter };\n}\n\nfunction firstHeading(source: string): string | null {\n for (const line of source.split(/\\r?\\n/)) {\n const match = line.match(/^#{1,3}\\s+(.+)$/);\n if (match) return match[1].trim();\n }\n return null;\n}\n\nfunction splitMdxBlocks(source: string): Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n}> {\n const blocks: Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n }> = [];\n const lines = source.split(/\\r?\\n/);\n let markdown: string[] = [];\n let component: string[] | null = null;\n let componentName = \"\";\n\n function flushMarkdown() {\n const value = markdown.join(\"\\n\").trim();\n if (value) blocks.push({ type: \"markdown\", value });\n markdown = [];\n }\n\n function flushComponent() {\n if (!component) return;\n blocks.push({\n type: \"component\",\n name: componentName || \"MDX component\",\n value: component.join(\"\\n\").trim(),\n });\n component = null;\n componentName = \"\";\n }\n\n for (const line of lines) {\n const start = line.match(/^<([A-Z][A-Za-z0-9_]*)\\b/);\n if (!component && start) {\n flushMarkdown();\n component = [line];\n componentName = start[1];\n if (/\\/>\\s*$/.test(line)) flushComponent();\n continue;\n }\n\n if (component) {\n component.push(line);\n if (new RegExp(`</${componentName}>\\\\s*$`).test(line)) {\n flushComponent();\n }\n continue;\n }\n\n markdown.push(line);\n }\n\n flushComponent();\n flushMarkdown();\n return blocks;\n}\n\nfunction renderMarkdownish(source: string): string {\n const lines = source.split(/\\r?\\n/);\n const html: string[] = [];\n let inCode = false;\n let codeLines: string[] = [];\n let listLines: string[] = [];\n\n function flushList() {\n if (listLines.length === 0) return;\n html.push(\n `<ul>${listLines.map((line) => `<li>${escapeHtml(line)}</li>`).join(\"\")}</ul>`,\n );\n listLines = [];\n }\n\n function flushCode() {\n if (!inCode) return;\n html.push(`<pre><code>${escapeHtml(codeLines.join(\"\\n\"))}</code></pre>`);\n codeLines = [];\n inCode = false;\n }\n\n for (const line of lines) {\n if (line.startsWith(\"```\")) {\n if (inCode) flushCode();\n else {\n flushList();\n inCode = true;\n codeLines = [];\n }\n continue;\n }\n if (inCode) {\n codeLines.push(line);\n continue;\n }\n\n const heading = line.match(/^(#{1,4})\\s+(.+)$/);\n if (heading) {\n flushList();\n const level = Math.min(heading[1].length, 4);\n html.push(`<h${level}>${escapeHtml(heading[2].trim())}</h${level}>`);\n continue;\n }\n\n const bullet = line.match(/^\\s*[-*]\\s+(.+)$/);\n if (bullet) {\n listLines.push(bullet[1]);\n continue;\n }\n\n if (!line.trim()) {\n flushList();\n continue;\n }\n\n flushList();\n html.push(`<p>${escapeHtml(line.trim())}</p>`);\n }\n\n flushCode();\n flushList();\n return html.join(\"\\n\");\n}\n\nfunction readLocalPlanAssets(dir: string): Record<string, string> | undefined {\n const assetsDir = path.join(dir, \"assets\");\n if (!fs.existsSync(assetsDir)) return undefined;\n\n const assets: Record<string, string> = {};\n let totalBytes = 0;\n for (const entry of fs.readdirSync(assetsDir, { withFileTypes: true })) {\n if (!entry.isFile()) continue;\n const filename = path.basename(entry.name);\n if (!filename || filename !== entry.name) continue;\n const ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n if (!LOCAL_PLAN_ASSET_EXTENSIONS.has(ext)) continue;\n\n const abs = path.join(assetsDir, filename);\n const bytes = fs.readFileSync(abs);\n if (bytes.byteLength > LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES) continue;\n if (totalBytes + bytes.byteLength > LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES) {\n continue;\n }\n totalBytes += bytes.byteLength;\n assets[filename] = bytes.toString(\"base64\");\n }\n\n return Object.keys(assets).length > 0 ? assets : undefined;\n}\n\nexport function readLocalPlanFiles(dir: string): LocalPlanFiles {\n const resolved = path.resolve(dir);\n const planPath = path.join(resolved, \"plan.mdx\");\n if (!fs.existsSync(planPath)) {\n throw new Error(`Missing local plan source: ${planPath}`);\n }\n const readOptional = (file: string) => {\n const abs = path.join(resolved, file);\n return fs.existsSync(abs) ? fs.readFileSync(abs, \"utf-8\") : undefined;\n };\n return {\n dir: resolved,\n planMdx: fs.readFileSync(planPath, \"utf-8\"),\n canvasMdx: readOptional(\"canvas.mdx\"),\n prototypeMdx: readOptional(\"prototype.mdx\"),\n stateJson: readOptional(\".plan-state.json\"),\n assets: readLocalPlanAssets(resolved),\n };\n}\n\nfunction localPlanMdxFolder(files: LocalPlanFiles): LocalPlanBridgeMdxFolder {\n return {\n \"plan.mdx\": files.planMdx,\n ...(files.canvasMdx ? { \"canvas.mdx\": files.canvasMdx } : {}),\n ...(files.prototypeMdx ? { \"prototype.mdx\": files.prototypeMdx } : {}),\n ...(files.stateJson ? { \".plan-state.json\": files.stateJson } : {}),\n ...(files.assets ? { \"assets/\": files.assets } : {}),\n };\n}\n\nfunction localPlanFileList(files: LocalPlanFiles): string[] {\n return [\n \"plan.mdx\",\n ...(files.canvasMdx ? [\"canvas.mdx\"] : []),\n ...(files.prototypeMdx ? [\"prototype.mdx\"] : []),\n ...(files.stateJson ? [\".plan-state.json\"] : []),\n ...Object.keys(files.assets ?? {}).map((filename) => `assets/${filename}`),\n ];\n}\n\nfunction localPlanSourceEntries(files: LocalPlanFiles): Array<{\n file: string;\n source: string;\n}> {\n return [\n { file: \"plan.mdx\", source: files.planMdx },\n ...(files.canvasMdx\n ? [{ file: \"canvas.mdx\", source: files.canvasMdx }]\n : []),\n ...(files.prototypeMdx\n ? [{ file: \"prototype.mdx\", source: files.prototypeMdx }]\n : []),\n ];\n}\n\nfunction lineNumberAt(source: string, index: number): number {\n let line = 1;\n for (let i = 0; i < index; i += 1) {\n if (source.charCodeAt(i) === 10) line += 1;\n }\n return line;\n}\n\nfunction maskFencedCode(source: string): string {\n return source.replace(\n /(^|\\n)(```|~~~)[\\s\\S]*?(\\n\\2[^\\n]*(?=\\n|$))/g,\n (match) => match.replace(/[^\\n]/g, \" \"),\n );\n}\n\nfunction findJsxOpeningTagEnd(source: string, start: number): number {\n let quote: string | null = null;\n let braceDepth = 0;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === \"{\") {\n braceDepth += 1;\n continue;\n }\n if (char === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n continue;\n }\n if (char === \">\" && braceDepth === 0) return i;\n }\n return -1;\n}\n\nfunction addValidationIssue(\n issues: LocalPlanValidationIssue[],\n file: string,\n source: string,\n index: number,\n message: string,\n) {\n issues.push({ file, line: lineNumberAt(source, index), message });\n}\n\nconst ENTITY_RE = /&(?:[a-z][a-z0-9]+|#[0-9]+|#x[0-9a-f]+);/gi;\nconst HTML_TEXT_ATTR_RE =\n /\\b(?:aria-label|alt|placeholder|title|value)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\nconst WIREFRAME_TEXT_ATTR_RE =\n /\\b(?:text|value|label|placeholder|title|note|due)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\n\nfunction normalizeVisibleText(value: string): string {\n return value\n .replace(/&nbsp;|&#160;|&#x0*a0;/gi, \" \")\n .replace(ENTITY_RE, \"x\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction meaningfulTextLength(value: string | undefined): number {\n return normalizeVisibleText(value ?? \"\").length;\n}\n\nfunction htmlMeaningfulTextLength(html: string): number {\n let length = 0;\n for (const match of html.matchAll(HTML_TEXT_ATTR_RE)) {\n length += meaningfulTextLength(match[1] ?? match[2] ?? match[3]);\n }\n\n const visibleText = html\n .replace(/<!--[\\s\\S]*?-->/g, \" \")\n .replace(/<script\\b[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style\\b[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<[^>]+>/g, \" \");\n length += meaningfulTextLength(visibleText);\n\n return length;\n}\n\nfunction hasSkeletonGeometry(html: string): boolean {\n return (\n /<(?:div|span|section|main|article|ul|li)\\b/i.test(html) &&\n /\\b(?:height|width|background|border|padding|wf-card|wf-box|wf-pill|wf-chip)\\b/i.test(\n html,\n )\n );\n}\n\nfunction stringAttributeValues(source: string, name: string): string[] {\n const values: string[] = [];\n const re = new RegExp(\n `\\\\b${name}\\\\s*=\\\\s*(?:\\\\{\\\\s*\\`([\\\\s\\\\S]*?)\\`\\\\s*\\\\}|\\\\{\\\\s*\"([^\"]*)\"\\\\s*\\\\}|\\\\{\\\\s*'([^']*)'\\\\s*\\\\}|\"([^\"]*)\"|'([^']*)')`,\n \"g\",\n );\n for (const match of source.matchAll(re)) {\n const value = match[1] ?? match[2] ?? match[3] ?? match[4] ?? match[5];\n if (value !== undefined) values.push(value);\n }\n return values;\n}\n\nfunction hasUnparsedAttributeExpression(source: string, name: string): boolean {\n return new RegExp(`\\\\b${name}\\\\s*=\\\\s*\\\\{`).test(source);\n}\n\nfunction hasMeaningfulWireframeHtml(screenOpening: string): boolean | null {\n const htmlValues = stringAttributeValues(screenOpening, \"html\");\n if (htmlValues.length === 0) {\n return hasUnparsedAttributeExpression(screenOpening, \"html\") ? null : false;\n }\n return htmlValues.some(\n (html) => htmlMeaningfulTextLength(html) >= 2 || hasSkeletonGeometry(html),\n );\n}\n\nfunction hasMeaningfulKitScreen(screenSource: string): boolean {\n for (const match of screenSource.matchAll(WIREFRAME_TEXT_ATTR_RE)) {\n if (meaningfulTextLength(match[1] ?? match[2] ?? match[3]) >= 2) {\n return true;\n }\n }\n if (/\\bitems\\s*=\\s*\\{[\\s\\S]*?\\blabel\\s*:/i.test(screenSource)) return true;\n if (/\\brows\\s*=\\s*\\{[\\s\\S]*?\\b[klv]\\s*:/i.test(screenSource)) return true;\n return false;\n}\n\nfunction hasMeaningfulWireframeScreen(blockSource: string): boolean | null {\n const screenMatch = /<Screen\\b/.exec(blockSource);\n if (!screenMatch) return false;\n const screenStart = screenMatch.index;\n const screenOpeningEnd = findJsxOpeningTagEnd(blockSource, screenStart);\n if (screenOpeningEnd < 0) return false;\n const screenOpening = blockSource.slice(screenStart, screenOpeningEnd + 1);\n const htmlMeaningful = hasMeaningfulWireframeHtml(screenOpening);\n if (htmlMeaningful === true) return true;\n\n const selfClosing = /\\/\\s*>$/.test(screenOpening);\n const closeIndex = selfClosing\n ? -1\n : blockSource.indexOf(\"</Screen>\", screenOpeningEnd + 1);\n const screenSource =\n closeIndex >= 0\n ? blockSource.slice(screenStart, closeIndex + \"</Screen>\".length)\n : screenOpening;\n if (hasMeaningfulKitScreen(screenSource)) return true;\n\n return htmlMeaningful === null ? null : false;\n}\n\nfunction lintWireframeBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<WireframeBlock\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock opening tag is not closed.\",\n );\n continue;\n }\n\n const opening = scanSource.slice(start, openingEnd + 1);\n const unsupportedAttr = opening.match(\n /\\b(data|screens|screen|elements)\\s*=/,\n );\n if (unsupportedAttr) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `WireframeBlock uses unsupported \"${unsupportedAttr[1]}\" prop. Put content inside a <Screen> child instead.`,\n );\n }\n\n const selfClosing = /\\/\\s*>$/.test(opening);\n const closeTag = \"</WireframeBlock>\";\n const closeIndex = selfClosing\n ? -1\n : scanSource.indexOf(closeTag, openingEnd + 1);\n const blockSource = selfClosing\n ? opening\n : closeIndex >= 0\n ? scanSource.slice(start, closeIndex + closeTag.length)\n : scanSource.slice(start, openingEnd + 1);\n\n if (!selfClosing && closeIndex < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock must have a closing </WireframeBlock> tag.\",\n );\n }\n\n if (selfClosing || !/<Screen\\b/.test(blockSource)) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock must wrap a <Screen> child; self-closing wireframes render empty. Use <WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>.',\n );\n continue;\n }\n\n const meaningfulScreen = hasMeaningfulWireframeScreen(blockSource);\n if (meaningfulScreen === false) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock contains an empty <Screen>; local previews render blank wireframes. Add visible html text/controls or kit nodes such as <Title text=\"Checkout\" /> and <Btn label=\"Pay\" />.',\n );\n }\n }\n}\n\nfunction lintColumnsBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<Columns\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = scanSource.slice(start, openingEnd + 1);\n if (/\\bcolumns\\s*=/.test(opening)) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'Columns must use <Column> children, not a columns= prop. Use <Columns><Column label=\"Before\">...</Column><Column label=\"After\">...</Column></Columns>.',\n );\n }\n }\n}\n\ntype JsxAttributeValue = {\n name: string;\n kind: \"expression\" | \"string\" | \"bare\" | \"boolean\";\n value: string;\n start: number;\n};\n\nfunction findBalancedEnd(\n source: string,\n start: number,\n open: string,\n close: string,\n): number {\n let depth = 0;\n let quote: string | null = null;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === open) {\n depth += 1;\n continue;\n }\n if (char === close) {\n depth -= 1;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\nfunction readJsxAttribute(\n opening: string,\n name: string,\n): JsxAttributeValue | null {\n let i = 0;\n while (i < opening.length) {\n if (!/[A-Za-z_:]/.test(opening[i] ?? \"\")) {\n i += 1;\n continue;\n }\n const nameStart = i;\n i += 1;\n while (/[\\w:.-]/.test(opening[i] ?? \"\")) i += 1;\n const attrName = opening.slice(nameStart, i);\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n if (opening[i] !== \"=\") {\n if (attrName === name) {\n return { name, kind: \"boolean\", value: \"true\", start: nameStart };\n }\n continue;\n }\n i += 1;\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n const valueStart = i;\n const quote = opening[i];\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n i += 1;\n while (i < opening.length) {\n if (opening[i] === \"\\\\\" && i + 1 < opening.length) {\n i += 2;\n continue;\n }\n if (opening[i] === quote) break;\n i += 1;\n }\n const value = opening.slice(valueStart + 1, i);\n i += 1;\n if (attrName === name) {\n return { name, kind: \"string\", value, start: valueStart + 1 };\n }\n continue;\n }\n if (quote === \"{\") {\n const end = findBalancedEnd(opening, i, \"{\", \"}\");\n if (end < 0) {\n if (attrName === name) {\n return {\n name,\n kind: \"expression\",\n value: opening.slice(valueStart + 1),\n start: valueStart + 1,\n };\n }\n break;\n }\n const value = opening.slice(valueStart + 1, end);\n i = end + 1;\n if (attrName === name) {\n return { name, kind: \"expression\", value, start: valueStart + 1 };\n }\n continue;\n }\n while (i < opening.length && !/[\\s>]/.test(opening[i] ?? \"\")) i += 1;\n if (attrName === name) {\n return {\n name,\n kind: \"bare\",\n value: opening.slice(valueStart, i),\n start: valueStart,\n };\n }\n }\n return null;\n}\n\nfunction expressionOffset(expression: string): number {\n return expression.search(/\\S/);\n}\n\nfunction extractTopLevelObjectLiterals(expression: string): Array<{\n source: string;\n start: number;\n}> | null {\n const leading = expressionOffset(expression);\n if (leading < 0 || expression[leading] !== \"[\") return null;\n const arrayEnd = findBalancedEnd(expression, leading, \"[\", \"]\");\n if (arrayEnd < 0) return null;\n const objects: Array<{ source: string; start: number }> = [];\n let i = leading + 1;\n while (i < arrayEnd) {\n const char = expression[i];\n if (/\\s|,/.test(char ?? \"\")) {\n i += 1;\n continue;\n }\n if (char !== \"{\") {\n return null;\n }\n const objectEnd = findBalancedEnd(expression, i, \"{\", \"}\");\n if (objectEnd < 0 || objectEnd > arrayEnd) return null;\n objects.push({\n source: expression.slice(i, objectEnd + 1),\n start: i,\n });\n i = objectEnd + 1;\n }\n return objects;\n}\n\nfunction findValueEnd(source: string, start: number): number {\n let i = start;\n let quote: string | null = null;\n let depth = 0;\n while (i < source.length) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (char === quote) quote = null;\n i += 1;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n i += 1;\n continue;\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n i += 1;\n continue;\n }\n if (char === \"}\" || char === \"]\" || char === \")\") {\n if (depth === 0) return i;\n depth -= 1;\n i += 1;\n continue;\n }\n if (char === \",\" && depth === 0) return i;\n i += 1;\n }\n return source.length;\n}\n\nfunction readObjectKey(\n source: string,\n start: number,\n): {\n key: string;\n keyStart: number;\n colon: number;\n} | null {\n let i = start;\n while (/\\s|,/.test(source[i] ?? \"\")) i += 1;\n const keyStart = i;\n const quote = source[i];\n let key = \"\";\n if (quote === '\"' || quote === \"'\") {\n i += 1;\n const valueStart = i;\n while (i < source.length) {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (source[i] === quote) break;\n i += 1;\n }\n key = source.slice(valueStart, i);\n i += 1;\n } else if (/[A-Za-z_$]/.test(quote ?? \"\")) {\n i += 1;\n while (/[\\w$]/.test(source[i] ?? \"\")) i += 1;\n key = source.slice(keyStart, i);\n } else {\n return null;\n }\n while (/\\s/.test(source[i] ?? \"\")) i += 1;\n if (source[i] !== \":\") return null;\n return { key, keyStart, colon: i };\n}\n\nfunction readTopLevelObjectProperty(\n objectSource: string,\n name: string,\n): { value: string; valueStart: number } | null {\n const body = objectSource.trim().startsWith(\"{\")\n ? objectSource.slice(1, objectSource.lastIndexOf(\"}\"))\n : objectSource;\n let i = 0;\n while (i < body.length) {\n const key = readObjectKey(body, i);\n if (!key) {\n i += 1;\n continue;\n }\n const valueStart = key.colon + 1;\n const valueEnd = findValueEnd(body, valueStart);\n if (key.key === name) {\n return { value: body.slice(valueStart, valueEnd), valueStart };\n }\n i = valueEnd + 1;\n }\n return null;\n}\n\nfunction isStaticNonEmptyStringLiteral(value: string): boolean {\n const trimmed = value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return trimmed.slice(1, -1).trim().length > 0;\n}\n\nfunction hasRequiredStaticString(objectSource: string, name: string): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n return prop ? isStaticNonEmptyStringLiteral(prop.value) : false;\n}\n\nfunction hasRequiredStaticId(objectSource: string): boolean {\n return hasRequiredStaticString(objectSource, \"id\");\n}\n\nfunction hasRequiredEnumLiteral(\n objectSource: string,\n name: string,\n allowed: readonly string[],\n): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n if (!prop) return false;\n const trimmed = prop.value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return allowed.includes(trimmed.slice(1, -1).trim());\n}\n\nfunction lintChecklistShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<Checklist\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const items = readJsxAttribute(opening, \"items\");\n if (!items) continue;\n if (items.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array expression with stable item ids.\",\n );\n continue;\n }\n const objects = extractTopLevelObjectLiterals(items.value);\n if (!objects) {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array of object literals so local check can validate the renderer schema.\",\n );\n continue;\n }\n objects.forEach((item, index) => {\n const base = start + items.start + item.start;\n if (!hasRequiredStaticId(item.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(item.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n }\n}\n\nfunction lintQuestionFormShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<(QuestionForm|VisualQuestions)\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const tag = match[1] ?? \"QuestionForm\";\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const questions = readJsxAttribute(opening, \"questions\");\n if (!questions) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `${tag} requires a questions array with at least one question object.`,\n );\n continue;\n }\n if (questions.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be an inline array expression with stable question ids.`,\n );\n continue;\n }\n const questionObjects = extractTopLevelObjectLiterals(questions.value);\n if (!questionObjects || questionObjects.length === 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be a non-empty inline array of object literals.`,\n );\n continue;\n }\n questionObjects.forEach((question, questionIndex) => {\n const questionBase = start + questions.start + question.start;\n if (!hasRequiredStaticId(question.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(question.source, \"title\")) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].title is required by the Plan renderer schema; add a non-empty string title.`,\n );\n }\n if (\n !hasRequiredEnumLiteral(question.source, \"mode\", [\n \"single\",\n \"multi\",\n \"freeform\",\n ])\n ) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].mode is required by the Plan renderer schema; use \"single\", \"multi\", or \"freeform\".`,\n );\n }\n const options = readTopLevelObjectProperty(question.source, \"options\");\n if (!options) return;\n const optionObjects = extractTopLevelObjectLiterals(options.value);\n if (!optionObjects) {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start + question.start + options.valueStart,\n `${tag} questions[${questionIndex}].options must be an inline array of object literals.`,\n );\n return;\n }\n optionObjects.forEach((option, optionIndex) => {\n const optionBase =\n start +\n questions.start +\n question.start +\n options.valueStart +\n option.start;\n if (!hasRequiredStaticId(option.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(option.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n });\n }\n}\n\n// Blank out fenced code blocks and inline code spans (preserving newlines and\n// length) so block-tag linters don't trip on documentation examples written in\n// prose — e.g. an inline `<WireframeBlock><Screen>...</Screen></WireframeBlock>`\n// example is not a real block to validate. Real blocks (outside code) are left\n// intact, so their offsets/line numbers stay correct. Without this the default\n// `plan local init` scaffold fails its own `plan local check`/`serve` lint.\nfunction maskCodeRegions(source: string): string {\n const blank = (s: string) => s.replace(/[^\\n]/g, \" \");\n return source.replace(/```[\\s\\S]*?```/g, blank).replace(/`[^`\\n]*`/g, blank);\n}\n\nexport function validateLocalPlanFiles(\n files: LocalPlanFiles,\n): LocalPlanValidationIssue[] {\n const issues: LocalPlanValidationIssue[] = [];\n for (const entry of localPlanSourceEntries(files)) {\n const source = maskCodeRegions(entry.source);\n lintWireframeBlocks(entry.file, source, issues);\n lintColumnsBlocks(entry.file, source, issues);\n lintChecklistShape(entry.file, entry.source, issues);\n lintQuestionFormShape(entry.file, entry.source, issues);\n }\n return issues;\n}\n\nexport function assertLocalPlanFilesValid(files: LocalPlanFiles): void {\n const issues = validateLocalPlanFiles(files);\n if (issues.length === 0) return;\n const details = issues\n .slice(0, 8)\n .map((issue) => `${issue.file}:${issue.line} ${issue.message}`)\n .join(\"\\n\");\n const overflow =\n issues.length > 8 ? `\\n...plus ${issues.length - 8} more issues` : \"\";\n throw new Error(\n `Local plan source validation failed:\\n${details}${overflow}\\nRun \\`npx @agent-native/core@latest plan blocks --out plan-blocks.md\\` and update the MDX to the documented block shapes.`,\n );\n}\n\nexport function buildLocalPlanPreviewHtml(\n input: LocalPlanPreviewInput,\n): string {\n const files = readLocalPlanFiles(input.dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(files.dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const blocks = splitMdxBlocks(parsed.body);\n const sourceFiles = [\n [\"plan.mdx\", files.planMdx],\n [\"canvas.mdx\", files.canvasMdx],\n [\"prototype.mdx\", files.prototypeMdx],\n [\".plan-state.json\", files.stateJson],\n ].filter((entry): entry is [string, string] => Boolean(entry[1]));\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n :root {\n color-scheme: light dark;\n --bg: #f8fafc;\n --paper: #ffffff;\n --ink: #0f172a;\n --muted: #64748b;\n --line: #cbd5e1;\n --accent: #2563eb;\n --soft: #eff6ff;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #020617;\n --paper: #0f172a;\n --ink: #e2e8f0;\n --muted: #94a3b8;\n --line: #334155;\n --soft: #172554;\n }\n }\n body { margin: 0; background: var(--bg); color: var(--ink); }\n main { max-width: 1040px; margin: 0 auto; padding: 40px 20px 56px; }\n header { margin-bottom: 28px; }\n h1 { font-size: clamp(2rem, 5vw, 3.5rem); line-height: 1; margin: 0 0 12px; }\n h2 { font-size: 1.35rem; margin: 28px 0 10px; }\n h3 { font-size: 1.05rem; margin: 0 0 8px; }\n p, li { line-height: 1.65; }\n .meta { display: flex; flex-wrap: wrap; gap: 8px; color: var(--muted); font-size: 0.9rem; }\n .pill { border: 1px solid var(--line); border-radius: 999px; padding: 4px 10px; background: var(--paper); }\n .notice { background: var(--soft); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin: 18px 0; }\n .block, details { background: var(--paper); border: 1px solid var(--line); border-radius: 8px; padding: 18px; margin: 14px 0; }\n .component summary { cursor: pointer; color: var(--accent); font-weight: 650; }\n pre { overflow: auto; border-radius: 8px; border: 1px solid var(--line); padding: 14px; background: rgba(148, 163, 184, 0.12); }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.9rem; }\n .source-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }\n </style>\n</head>\n<body>\n <main>\n <header>\n <div class=\"meta\">\n <span class=\"pill\">${kind === \"recap\" ? \"Visual recap\" : \"Visual plan\"}</span>\n <span class=\"pill\">Local-files mode</span>\n <span class=\"pill\">No DB writes</span>\n </div>\n <h1>${escapeHtml(title)}</h1>\n ${brief ? `<p>${escapeHtml(brief)}</p>` : \"\"}\n <div class=\"notice\">\n This preview was generated entirely from local files. It does not call\n the Plan MCP server, the Plan app action surface, a hosted service, or a\n database. Edit the MDX files and regenerate this preview to update it.\n </div>\n </header>\n <section>\n ${blocks\n .map((block) =>\n block.type === \"component\"\n ? `<details class=\"component block\" open><summary>${escapeHtml(\n block.name || \"MDX component\",\n )}</summary><pre><code>${escapeHtml(block.value)}</code></pre></details>`\n : `<article class=\"block\">${renderMarkdownish(block.value)}</article>`,\n )\n .join(\"\\n\")}\n </section>\n <section>\n <h2>Local Source Files</h2>\n <div class=\"source-tabs\">\n ${sourceFiles\n .map(\n ([name, source]) =>\n `<details><summary>${escapeHtml(name)}</summary><pre><code>${escapeHtml(\n source,\n )}</code></pre></details>`,\n )\n .join(\"\\n\")}\n </div>\n </section>\n </main>\n</body>\n</html>\n`;\n}\n\nexport function writeLocalPlanPreview(input: {\n dir: string;\n out?: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n open?: boolean;\n openUrl?: (url: string) => OpenLocalUrlResult;\n}): LocalPlanPreviewResult {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const out = input.out ? path.resolve(input.out) : undefined;\n if (out) {\n fs.mkdirSync(path.dirname(out), { recursive: true });\n fs.writeFileSync(out, buildLocalPlanPreviewHtml({ ...input, dir, kind }));\n }\n const result: LocalPlanPreviewResult = {\n ok: true,\n dir,\n ...(out ? { out } : {}),\n url: out ? pathToFileURL(out).href : localPlanPreviewUrl(dir, input.appUrl),\n title,\n kind,\n files: localPlanFileList(files),\n };\n if (!input.open) return result;\n\n const openResult = (input.openUrl || openLocalUrl)(result.url);\n return {\n ...result,\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n };\n}\n\nfunction buildLocalPlanBridgePayload(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n}): LocalPlanBridgePayload {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n\n return {\n ok: true,\n version: 1,\n source: \"agent-native-local-bridge\",\n localOnly: true,\n slug: path.basename(dir),\n dir,\n title,\n brief,\n kind,\n updatedAt: latestLocalPlanMtime(dir, files),\n files: localPlanFileList(files),\n mdx: localPlanMdxFolder(files),\n };\n}\n\nfunction latestLocalPlanMtime(dir: string, files: LocalPlanFiles): string {\n const candidates = [\n path.join(dir, \"plan.mdx\"),\n ...(files.canvasMdx ? [path.join(dir, \"canvas.mdx\")] : []),\n ...(files.prototypeMdx ? [path.join(dir, \"prototype.mdx\")] : []),\n ...(files.stateJson ? [path.join(dir, \".plan-state.json\")] : []),\n ...Object.keys(files.assets ?? {}).map((filename) =>\n path.join(dir, \"assets\", filename),\n ),\n ];\n let latest = 0;\n for (const file of candidates) {\n try {\n latest = Math.max(latest, fs.statSync(file).mtimeMs);\n } catch {\n // Ignore files deleted between the read and stat passes.\n }\n }\n return new Date(latest || Date.now()).toISOString();\n}\n\nfunction sendBridgeJson(\n res: ServerResponse,\n status: number,\n payload: unknown,\n): void {\n res.writeHead(status, {\n \"access-control-allow-origin\": \"*\",\n \"access-control-allow-methods\": \"GET, OPTIONS\",\n \"access-control-allow-headers\": \"content-type\",\n // Required when the hosted HTTPS Plan UI fetches this localhost bridge.\n \"access-control-allow-private-network\": \"true\",\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\",\n \"x-agent-native-local-bridge\": \"1\",\n });\n res.end(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction bridgeRequestUrl(req: IncomingMessage): URL {\n return new URL(req.url || \"/\", \"http://127.0.0.1\");\n}\n\nfunction bridgeHostForUrl(host: string): string {\n if (host === \"0.0.0.0\" || host === \"::\") return \"127.0.0.1\";\n return host;\n}\n\nexport async function startLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n open?: boolean;\n urlFile?: string | false;\n openUrl?: (url: string) => OpenLocalUrlResult;\n}): Promise<LocalPlanBridgeServer> {\n const dir = path.resolve(input.dir);\n const initialPayload = buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n });\n const token = input.token || crypto.randomBytes(24).toString(\"base64url\");\n const host = input.host || \"127.0.0.1\";\n const appUrl = normalizeBridgeAppUrl(input.appUrl);\n const server = http.createServer((req, res) => {\n if (req.method === \"OPTIONS\") {\n sendBridgeJson(res, 204, \"\");\n return;\n }\n if (req.method !== \"GET\") {\n sendBridgeJson(res, 405, { ok: false, error: \"Method not allowed.\" });\n return;\n }\n\n const url = bridgeRequestUrl(req);\n if (url.pathname !== \"/local-plan.json\") {\n sendBridgeJson(res, 404, { ok: false, error: \"Not found.\" });\n return;\n }\n if (url.searchParams.get(\"token\") !== token) {\n sendBridgeJson(res, 403, { ok: false, error: \"Invalid bridge token.\" });\n return;\n }\n\n try {\n sendBridgeJson(\n res,\n 200,\n buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n }),\n );\n } catch (error) {\n sendBridgeJson(res, 500, {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off(\"listening\", onListening);\n reject(error);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n server.listen(input.port ?? 0, host);\n });\n\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close();\n throw new Error(\"Local plan bridge did not bind to a TCP port.\");\n }\n\n const bridgeUrl = `http://${bridgeHostForUrl(host)}:${address.port}/local-plan.json?token=${encodeURIComponent(\n token,\n )}`;\n const url = localPlanBridgePageUrl({ dir, bridgeUrl, appUrl });\n const urlFile =\n input.urlFile === false\n ? undefined\n : writeLocalPlanUrlFile(dir, url, input.urlFile);\n const openResult = input.open\n ? (input.openUrl || openLocalUrl)(url)\n : undefined;\n\n return {\n server,\n result: {\n ok: true,\n dir,\n url,\n ...(urlFile ? { urlFile } : {}),\n bridgeUrl,\n appUrl,\n title: initialPayload.title,\n kind: initialPayload.kind,\n files: initialPayload.files,\n host,\n port: address.port,\n ...(openResult\n ? {\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n }\n : {}),\n },\n };\n}\n\nfunction localPlanBridgeWarnings(input: {\n appUrl: string;\n bridgeUrl: string;\n}): string[] {\n const warnings: string[] = [];\n try {\n const appUrl = new URL(input.appUrl);\n const bridgeUrl = new URL(input.bridgeUrl);\n if (appUrl.protocol === \"https:\" && bridgeUrl.protocol === \"http:\") {\n warnings.push(\n \"Safari may block the hosted HTTPS Plan UI from reading the HTTP localhost bridge. Use Chrome/Chromium/Edge, or pass --app-url http://localhost:8096 when running a local Plan app.\",\n );\n }\n } catch {\n // The URLs were normalized earlier; ignore defensive parse failures.\n }\n return warnings;\n}\n\nexport async function verifyLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n urlFile?: string | false;\n fetchFn?: typeof fetch;\n}): Promise<LocalPlanVerifyResult> {\n const fetchFn = input.fetchFn ?? fetch;\n const bridge = await startLocalPlanBridge({\n dir: input.dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n appUrl: input.appUrl,\n host: input.host,\n port: input.port,\n token: input.token,\n urlFile: input.urlFile,\n });\n\n try {\n const preflight = await fetchFn(bridge.result.bridgeUrl, {\n method: \"OPTIONS\",\n headers: {\n origin: bridge.result.appUrl,\n \"access-control-request-method\": \"GET\",\n \"access-control-request-private-network\": \"true\",\n },\n });\n const response = await fetchFn(bridge.result.bridgeUrl, {\n method: \"GET\",\n headers: { accept: \"application/json\" },\n });\n const payload = (await response.json().catch(() => null)) as\n | (LocalPlanBridgePayload & { mdx?: LocalPlanBridgeMdxFolder })\n | null;\n const mdxFiles = payload?.mdx\n ? Object.keys(payload.mdx).filter((file) => file !== \"assets/\")\n : undefined;\n const bridgeOk =\n response.ok &&\n payload?.ok === true &&\n payload.source === \"agent-native-local-bridge\" &&\n payload.localOnly === true &&\n Boolean(payload.mdx?.[\"plan.mdx\"]);\n const preflightOk =\n preflight.status === 204 &&\n preflight.headers.get(\"access-control-allow-origin\") === \"*\" &&\n preflight.headers.get(\"access-control-allow-private-network\") === \"true\";\n return {\n ok: bridgeOk && preflightOk,\n dir: bridge.result.dir,\n url: bridge.result.url,\n ...(bridge.result.urlFile ? { urlFile: bridge.result.urlFile } : {}),\n bridgeUrl: bridge.result.bridgeUrl,\n appUrl: bridge.result.appUrl,\n title: bridge.result.title,\n kind: bridge.result.kind,\n files: bridge.result.files,\n preflight: {\n status: preflight.status,\n allowOrigin: preflight.headers.get(\"access-control-allow-origin\"),\n allowPrivateNetwork: preflight.headers.get(\n \"access-control-allow-private-network\",\n ),\n },\n bridge: {\n status: response.status,\n ok: bridgeOk,\n ...(payload?.source ? { source: payload.source } : {}),\n ...(typeof payload?.localOnly === \"boolean\"\n ? { localOnly: payload.localOnly }\n : {}),\n ...(Array.isArray(payload?.files) ? { files: payload.files } : {}),\n ...(mdxFiles ? { mdxFiles } : {}),\n ...(payload?.error ? { error: payload.error } : {}),\n },\n warnings: localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n };\n } finally {\n await new Promise<void>((resolve) => bridge.server.close(() => resolve()));\n }\n}\n\nfunction writeLocalPlanSkeleton(input: {\n dir?: string;\n title: string;\n brief?: string;\n kind: LocalPlanKind;\n force?: boolean;\n}): { ok: true; dir: string; files: string[] } {\n const dir = path.resolve(\n input.dir || path.join(defaultPlansDir(), localPlanFolderName(input.title)),\n );\n const planPath = path.join(dir, \"plan.mdx\");\n if (fs.existsSync(planPath) && !input.force) {\n throw new Error(\n `${planPath} already exists. Pass --force to replace the skeleton.`,\n );\n }\n fs.mkdirSync(dir, { recursive: true });\n const title = input.title;\n const brief =\n input.brief ||\n (input.kind === \"recap\"\n ? \"Local visual recap generated without Plan app database writes.\"\n : \"Local visual plan generated without Plan app database writes.\");\n const mdx = [\n \"---\",\n `title: \"${title.replace(/\"/g, '\\\\\"')}\"`,\n `brief: \"${brief.replace(/\"/g, '\\\\\"')}\"`,\n `kind: \"${input.kind}\"`,\n \"localOnly: true\",\n \"---\",\n \"\",\n `# ${title}`,\n \"\",\n brief,\n \"\",\n \"## Review Surface\",\n \"\",\n \"Author the structured plan or recap here. You can add Agent-Native Plan MDX\",\n 'blocks such as `<WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>`,',\n \"`<Diagram />`, `<TabsBlock />`, `<FileTree />`, or `<Diff />`; the local\",\n \"preview will show the source without publishing it to the Plan app.\",\n \"\",\n ].join(\"\\n\");\n fs.writeFileSync(planPath, mdx, \"utf-8\");\n fs.writeFileSync(\n path.join(dir, \".plan-state.json\"),\n JSON.stringify(\n {\n localOnly: true,\n kind: input.kind,\n createdAt: new Date().toISOString(),\n },\n null,\n 2,\n ) + \"\\n\",\n \"utf-8\",\n );\n return { ok: true, dir, files: [\"plan.mdx\", \".plan-state.json\"] };\n}\n\nfunction runInit(args: Record<string, string | boolean>): void {\n const title = optionalArg(args, \"title\") || \"Untitled local visual plan\";\n const result = writeLocalPlanSkeleton({\n dir: optionalArg(args, \"dir\"),\n title,\n brief: optionalArg(args, \"brief\"),\n kind: normalizeKind(optionalArg(args, \"kind\")),\n force: boolArg(args, \"force\"),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nfunction runCheck(args: Record<string, string | boolean>): void {\n const dir = stringArg(args, \"dir\");\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const result = {\n ok: true,\n noDb: true,\n validation: \"passed\",\n dir: files.dir,\n title: parsed.frontmatter.title || firstHeading(parsed.body),\n kind: normalizeKind(parsed.frontmatter.kind),\n files: {\n \"plan.mdx\": Buffer.byteLength(files.planMdx),\n ...(files.canvasMdx\n ? { \"canvas.mdx\": Buffer.byteLength(files.canvasMdx) }\n : {}),\n ...(files.prototypeMdx\n ? { \"prototype.mdx\": Buffer.byteLength(files.prototypeMdx) }\n : {}),\n ...(files.stateJson\n ? { \".plan-state.json\": Buffer.byteLength(files.stateJson) }\n : {}),\n ...(files.assets\n ? Object.fromEntries(\n Object.entries(files.assets).map(([filename, base64]) => [\n `assets/${filename}`,\n Buffer.byteLength(base64, \"base64\"),\n ]),\n )\n : {}),\n },\n };\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nexport function readVisualAnswerSourcePayload(\n sourcePath: string,\n): VisualAnswerSourcePayload {\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(sourcePath, \"utf-8\"));\n } catch (error) {\n throw new Error(\n `Could not read ${sourcePath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(`${sourcePath} must contain a JSON object.`);\n }\n const source = parsed as Record<string, unknown>;\n const mdx = source.mdx;\n if (!mdx || typeof mdx !== \"object\" || Array.isArray(mdx)) {\n throw new Error(`${sourcePath} must contain an mdx object.`);\n }\n const planMdx = (mdx as Record<string, unknown>)[\"plan.mdx\"];\n if (typeof planMdx !== \"string\" || planMdx.trim().length === 0) {\n throw new Error(\n `${sourcePath} mdx[\"plan.mdx\"] must be a non-empty string.`,\n );\n }\n return source as VisualAnswerSourcePayload;\n}\n\nexport async function publishVisualAnswerSource(\n input: PublishVisualAnswerInput,\n): Promise<{ ok: true; url: string; out: string }> {\n const cwd = input.cwd ?? process.cwd();\n const sourcePath =\n input.sourcePath ?? path.join(cwd, VISUAL_ANSWER_SOURCE_FILENAME);\n const out = input.out ?? path.join(cwd, VISUAL_ANSWER_URL_FILENAME);\n const token = input.token.trim();\n if (!token) throw new Error(\"Plan publish token is empty.\");\n\n const source = readVisualAnswerSourcePayload(sourcePath);\n const question = input.question ?? source.question;\n if (!question?.trim()) {\n throw new Error(\n `Missing visual answer question. Pass --question or set question in ${sourcePath}.`,\n );\n }\n const body = {\n question,\n ...(input.prevPlanId ? { planId: input.prevPlanId } : {}),\n ...(source.title ? { title: source.title } : {}),\n ...(source.brief ? { brief: source.brief } : {}),\n visibility: input.visibility ?? \"org\",\n source: \"imported\",\n ...((input.repo ?? source.repoPath)\n ? { repoPath: input.repo ?? source.repoPath }\n : {}),\n ...((input.sourceUrl ?? source.sourceUrl)\n ? { sourceUrl: input.sourceUrl ?? source.sourceUrl }\n : {}),\n sourceType: normalizeVisualAnswerSourceType(\n input.sourceType ?? source.sourceType,\n ),\n currentFocus: `visual answer: ${question.trim().slice(0, 120)}`,\n status: \"review\",\n mdx: source.mdx,\n };\n\n const endpoint = planActionEndpoint(input.appUrl, \"visual-answer\");\n const fetchFn = input.fetchFn ?? fetch;\n const response = await fetchActionWithTimeout(\n endpoint,\n {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n },\n fetchFn,\n );\n const text = await response.text().catch((error) => String(error));\n if (!response.ok) {\n throw new Error(\n `visual-answer failed ${response.status} ${\n response.statusText\n }: ${sanitizeHttpDetail(text, 800)}`,\n );\n }\n let result: unknown = null;\n try {\n result = text ? JSON.parse(text) : null;\n } catch {\n throw new Error(\"visual-answer returned non-JSON output.\");\n }\n const url = visualAnswerUrlFromPublishResult(result, input.appUrl);\n if (!url) {\n throw new Error(\n \"visual-answer succeeded but did not return a usable /plans/<id> URL or plan id.\",\n );\n }\n fs.writeFileSync(path.resolve(out), `${url}\\n`, \"utf-8\");\n return { ok: true, url, out };\n}\n\nasync function runVisualAnswer(\n subcommand: string | undefined,\n args: Record<string, string | boolean>,\n): Promise<void> {\n if (\n subcommand === undefined ||\n subcommand === \"help\" ||\n subcommand === \"--help\" ||\n subcommand === \"-h\" ||\n args.help === true ||\n args.h === true\n ) {\n process.stdout.write(HELP);\n return;\n }\n if (subcommand !== \"publish\") {\n process.stderr.write(\n `Unknown plan visual-answer subcommand: ${subcommand}\\n${HELP}`,\n );\n process.exit(1);\n }\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_VISUAL_ANSWER_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const token =\n optionalArg(args, \"token\") ||\n process.env.PLAN_VISUAL_ANSWER_TOKEN ||\n process.env.PLAN_RECAP_TOKEN ||\n \"\";\n try {\n const result = await publishVisualAnswerSource({\n appUrl,\n token,\n question: optionalArg(args, \"question\"),\n sourcePath: optionalArg(args, \"source\") ?? VISUAL_ANSWER_SOURCE_FILENAME,\n out: optionalArg(args, \"out\") ?? VISUAL_ANSWER_URL_FILENAME,\n prevPlanId: optionalArg(args, \"prev-plan-id\"),\n repo: optionalArg(args, \"repo\"),\n sourceUrl: optionalArg(args, \"source-url\"),\n sourceType: optionalArg(args, \"source-type\"),\n visibility: normalizeVisibility(optionalArg(args, \"visibility\")),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } catch (error) {\n process.stdout.write(\n `${JSON.stringify(\n {\n ok: false,\n reason: error instanceof Error ? error.message : String(error),\n },\n null,\n 2,\n )}\\n`,\n );\n process.exit(1);\n }\n}\n\nfunction runPreview(args: Record<string, string | boolean>): void {\n const result = writeLocalPlanPreview({\n dir: stringArg(args, \"dir\"),\n out: optionalArg(args, \"out\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n open: boolArg(args, \"open\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nasync function runServe(args: Record<string, string | boolean>): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const bridge = await startLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n open: boolArg(args, \"open\"),\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n\n process.stdout.write(`${JSON.stringify(bridge.result, null, 2)}\\n`);\n process.stderr.write(\n [\n `Local Plan bridge running at ${bridge.result.bridgeUrl}`,\n bridge.result.urlFile\n ? `Open URL written to ${bridge.result.urlFile}`\n : \"\",\n ...localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n \"Press Ctrl+C to stop.\",\n ]\n .filter(Boolean)\n .join(\"\\n\") + \"\\n\",\n );\n\n await new Promise<void>((resolve) => {\n let stopped = false;\n const cleanup = () => {\n process.off(\"SIGINT\", stop);\n process.off(\"SIGTERM\", stop);\n };\n const stop = () => {\n if (stopped) return;\n stopped = true;\n cleanup();\n bridge.server.close(() => resolve());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\n}\n\nasync function runVerify(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const result = await verifyLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\") || false,\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (!result.ok) process.exit(1);\n}\n\nasync function runBlocks(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const format = normalizePlanBlockFormat(optionalArg(args, \"format\"));\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_BLOCKS_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const out = optionalArg(args, \"out\") || defaultPlanBlocksOut(format);\n const useClack = Boolean(process.stdout.isTTY) && !boolArg(args, \"json\");\n let stopSpinner: ((message?: string) => void) | undefined;\n let clack: typeof import(\"@clack/prompts\") | undefined;\n\n if (useClack) {\n clack = await import(\"@clack/prompts\");\n const spinner = clack.spinner();\n spinner.start(\"Fetching Plan block catalog\");\n stopSpinner = (message?: string) => spinner.stop(message);\n }\n\n try {\n const result = await fetchPlanBlockCatalog({\n appUrl,\n format,\n out,\n });\n if (!useClack || !clack) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n stopSpinner?.(\"Fetched Plan block catalog\");\n clack.note(\n [\n `Output ${path.resolve(result.out)}`,\n `Format ${result.format}`,\n typeof result.count === \"number\" ? `Blocks ${result.count}` : \"\",\n \"Privacy No plan content sent\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Plan block catalog\",\n );\n clack.outro(`Wrote ${result.out}`);\n } catch (error) {\n if (useClack && clack) {\n stopSpinner?.(\"Plan block catalog fetch failed\");\n clack.cancel(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n throw error;\n }\n}\n\nconst HELP = `agent-native plan — local Agent-Native Plan helpers\n\nUsage:\n agent-native plan blocks [--format reference|schema] [--app-url <url>] [--out <file>] [--json]\n agent-native plan visual-answer publish --question <text> [--source visual-answer-source.json] [--out visual-answer-url.txt] [--repo owner/name] [--source-url <url>] [--app-url <url>] [--token <planToken>]\n agent-native plan serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local init --title <title> [--brief <text>] [--kind plan|recap] [--dir <folder>] [--force]\n agent-native plan local check --dir <folder>\n agent-native plan local serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local verify --dir <folder> [--app-url <url>] [--kind plan|recap] [--port <port>]\n agent-native plan local preview --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--out preview.html]\n\nThe blocks command fetches the no-auth, read-only get-plan-blocks catalog from\nthe Plan app and writes plan-blocks.md (or plan-blocks.schema.json). It sends no\nplan content and is safe for local-files authoring before writing MDX. It uses a\nclack UI in interactive terminals and prints JSON for non-interactive shells or\nwhen --json is passed.\n\nThe visual-answer publish command sends a coding-agent-authored\nvisual-answer-source.json file to the Plan app's visual-answer action and writes\nvisual-answer-url.txt. The source file should contain a question, optional\ntitle/brief/repoPath/sourceUrl, and MDX files under mdx. It is the terminal\nhandoff for /visual-answer workflows after a coding agent has inspected code via\nthe local repo, the Plan bridge, or GitHub and authored structured Plan blocks.\n\nThe local subcommands are the privacy-focused no-DB path. They only read and\nwrite local files: plan.mdx, optional canvas.mdx, optional prototype.mdx, and\noptional .plan-state.json. They do not call the Plan MCP server, the Plan app\nwrite actions, hosted storage, or SQLite.\n\nCommon flow:\n agent-native plan blocks --out plan-blocks.md\n agent-native plan local init --title \"Checkout review\" --kind plan\n agent-native plan local serve --dir plans/checkout-review --open\n\n\\`plan local serve\\` starts a tiny localhost bridge and opens the hosted Plan UI\nagainst that local-only source. The hosted app fetches the MDX from localhost in\nthe browser; it does not write plan content to the hosted database. The served\nURL is written to \\`.plan-url\\` by default; pass \\`--url-file\\` to choose a\ndifferent local-only file. On macOS, \\`--open\\` prefers Chromium browsers because\nSafari may block the hosted HTTPS page from reading the HTTP localhost bridge.\nUse \\`plan local verify\\` for headless bridge/CORS diagnostics that exit cleanly.\nUse \\`plan local preview\\` for a local Plan dev server route. \\`preview --out\\` is\na legacy/debug escape hatch that writes a standalone static HTML file.\n\\`plan serve\\` is kept as a compatibility alias for \\`plan local serve\\`.\n`;\n\nexport async function runPlan(argv: string[]): Promise<void> {\n const [area, sub, ...rest] = argv;\n if (area === \"blocks\") {\n await runBlocks(parseArgs(argv.slice(1)));\n return;\n }\n if (area === \"serve\") {\n const args = parseArgs(argv.slice(1));\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n await runServe(args);\n return;\n }\n if (area === \"visual-answer\") {\n await runVisualAnswer(sub, parseArgs(rest));\n return;\n }\n if (area !== \"local\") {\n // Bare `agent-native plan` / `plan help` / `plan --help` → show help on\n // stdout and exit 0 (informational, not an error).\n if (\n area === undefined ||\n area === \"help\" ||\n area === \"--help\" ||\n area === \"-h\"\n ) {\n process.stdout.write(HELP);\n return;\n }\n // A non-empty, unrecognised area (e.g. `agent-native plan lokal`) is an\n // error: print to stderr so the CI log captures it, and exit 1 so callers\n // can detect the failure. This mirrors the existing behaviour for unknown\n // subcommands inside `plan local`.\n process.stderr.write(`Unknown plan area: ${area}\\n${HELP}`);\n process.exit(1);\n }\n const args = parseArgs(rest);\n // `plan local <sub> --help` / `-h` shows help instead of running the\n // subcommand (e.g. `plan local init --help` must not scaffold a folder).\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n switch (sub) {\n case \"init\":\n runInit(args);\n return;\n case \"check\":\n runCheck(args);\n return;\n case \"preview\":\n runPreview(args);\n return;\n case \"serve\":\n await runServe(args);\n return;\n case \"verify\":\n await runVerify(args);\n return;\n case \"help\":\n case \"--help\":\n case \"-h\":\n case undefined:\n process.stdout.write(HELP);\n return;\n default:\n process.stderr.write(`Unknown plan local subcommand: ${sub}\\n${HELP}`);\n process.exit(1);\n }\n}\n"]}