@agent-native/core 0.53.0 → 0.54.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action.d.ts +40 -1
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +69 -2
- package/dist/action.js.map +1 -1
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/observational-memory/index.d.ts +6 -6
- package/dist/agent/observational-memory/index.js +6 -6
- package/dist/agent/observational-memory/index.js.map +1 -1
- package/dist/agent/observational-memory/read.d.ts +7 -9
- package/dist/agent/observational-memory/read.d.ts.map +1 -1
- package/dist/agent/observational-memory/read.js +7 -9
- package/dist/agent/observational-memory/read.js.map +1 -1
- package/dist/agent/processors.d.ts +146 -0
- package/dist/agent/processors.d.ts.map +1 -0
- package/dist/agent/processors.js +122 -0
- package/dist/agent/processors.js.map +1 -0
- package/dist/agent/production-agent.d.ts +10 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +101 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +4 -5
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/tool-call-journal.d.ts +6 -8
- package/dist/agent/tool-call-journal.d.ts.map +1 -1
- package/dist/agent/tool-call-journal.js +6 -8
- package/dist/agent/tool-call-journal.js.map +1 -1
- package/dist/agent/types.d.ts +11 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/gateway-helpers.d.ts +15 -0
- package/dist/cli/gateway-helpers.d.ts.map +1 -0
- package/dist/cli/gateway-helpers.js +51 -0
- package/dist/cli/gateway-helpers.js.map +1 -0
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +129 -4
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +38 -3
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +9 -27
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/coding-tools/run-code.d.ts.map +1 -1
- package/dist/coding-tools/run-code.js +18 -2
- package/dist/coding-tools/run-code.js.map +1 -1
- package/dist/extensions/fetch-tool.d.ts.map +1 -1
- package/dist/extensions/fetch-tool.js +80 -15
- package/dist/extensions/fetch-tool.js.map +1 -1
- package/dist/extensions/web-content.d.ts +61 -0
- package/dist/extensions/web-content.d.ts.map +1 -0
- package/dist/extensions/web-content.js +468 -0
- package/dist/extensions/web-content.js.map +1 -0
- package/dist/extensions/web-search-tool.js +3 -3
- package/dist/extensions/web-search-tool.js.map +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +4 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +80 -0
- package/dist/provider-api/corpus-jobs.d.ts.map +1 -1
- package/dist/provider-api/corpus-jobs.js +219 -22
- package/dist/provider-api/corpus-jobs.js.map +1 -1
- package/dist/provider-api/index.d.ts +24 -32
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +28 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/server/agent-chat-plugin.js +1 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +7 -0
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +90 -0
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/deep-link.d.ts +7 -0
- package/dist/server/deep-link.d.ts.map +1 -1
- package/dist/server/deep-link.js +13 -2
- package/dist/server/deep-link.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/templates/default/.agents/skills/actions/SKILL.md +52 -1
- package/dist/templates/default/.agents/skills/security/SKILL.md +22 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +52 -1
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +6 -4
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +11 -0
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +22 -0
- package/docs/content/actions.md +50 -0
- package/docs/content/durable-resume.md +49 -0
- package/docs/content/external-agents.md +2 -2
- package/docs/content/human-approval.md +101 -0
- package/docs/content/observability.md +21 -0
- package/docs/content/observational-memory.md +63 -0
- package/docs/content/plan-plugin.md +5 -0
- package/docs/content/pr-visual-recap.md +4 -3
- package/docs/content/processors.md +99 -0
- package/docs/content/template-plan.md +78 -14
- package/package.json +6 -1
- package/src/templates/default/.agents/skills/actions/SKILL.md +52 -1
- package/src/templates/default/.agents/skills/security/SKILL.md +22 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +52 -1
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +6 -4
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +11 -0
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +22 -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 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\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 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 defaultPlansDir(): string {\n return path.resolve(process.env.PLAN_LOCAL_DIR || \"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 return `${normalizeAppUrl(appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(dir)),\n )}`;\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 openLocalUrl(url: string): OpenLocalUrlResult {\n const platform = process.platform;\n const command =\n platform === \"darwin\" ? \"open\" : platform === \"win32\" ? \"cmd\" : \"xdg-open\";\n const args = platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\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 escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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(/ | |�*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\nexport function validateLocalPlanFiles(\n files: LocalPlanFiles,\n): LocalPlanValidationIssue[] {\n const issues: LocalPlanValidationIssue[] = [];\n for (const entry of localPlanSourceEntries(files)) {\n lintWireframeBlocks(entry.file, entry.source, issues);\n lintColumnsBlocks(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 \"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 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 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 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 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 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 `Local Plan bridge running at ${bridge.result.bridgeUrl}\\nPress Ctrl+C to stop.\\n`,\n );\n\n await new Promise<void>((resolve) => {\n const stop = () => {\n bridge.server.close(() => resolve());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\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 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>]\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. Use\n\\`plan local preview\\` for a local Plan dev server route. \\`preview --out\\` is a\nlegacy/debug escape hatch that writes a standalone static HTML file.\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 !== \"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 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 \"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} 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 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\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 openLocalUrl(url: string): OpenLocalUrlResult {\n const platform = process.platform;\n const command =\n platform === \"darwin\" ? \"open\" : platform === \"win32\" ? \"cmd\" : \"xdg-open\";\n const args = platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\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 escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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(/ | |�*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\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 }\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 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 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 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 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 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 `Local Plan bridge running at ${bridge.result.bridgeUrl}\\nPress Ctrl+C to stop.\\n`,\n );\n\n await new Promise<void>((resolve) => {\n const stop = () => {\n bridge.server.close(() => resolve());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\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 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>]\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. Use\n\\`plan local preview\\` for a local Plan dev server route. \\`preview --out\\` is a\nlegacy/debug escape hatch that writes a standalone static HTML file.\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 !== \"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 \"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"]}
|
package/dist/cli/skills.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAKL,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAgkBjE,eAAO,MAAM,sBAAsB,0tfAQlC,CAAC;AAmVF,eAAO,MAAM,mBAAmB,i1NAQ/B,CAAC;AAEF,eAAO,MAAM,6BAA6B,+2WASzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,+gIAOjC,CAAC;AAyBF,eAAO,MAAM,qBAAqB,sl5BAydjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,w/jCAijBjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoN/B,CAAC;AAIF,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AA0E1E,KAAK,wBAAwB,GAAG,QAAQ,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/skills.js
CHANGED
|
@@ -2278,6 +2278,17 @@ const SKILL_INSTRUCTION_CLIENTS = [
|
|
|
2278
2278
|
"claude-code",
|
|
2279
2279
|
"pi",
|
|
2280
2280
|
];
|
|
2281
|
+
// Clients that don't write their own instruction files but READ the shared
|
|
2282
|
+
// `.agents/skills` path the codex install writes. In instructions/local-files
|
|
2283
|
+
// mode they resolve to that shared-agents install instead of being dropped, so
|
|
2284
|
+
// `--client cursor --mode local-files` (etc.) installs the skills they read
|
|
2285
|
+
// rather than failing with an empty client set.
|
|
2286
|
+
const SHARED_AGENTS_READER_CLIENTS = new Set([
|
|
2287
|
+
"cursor",
|
|
2288
|
+
"opencode",
|
|
2289
|
+
"github-copilot",
|
|
2290
|
+
"cowork",
|
|
2291
|
+
]);
|
|
2281
2292
|
const SKILL_INSTRUCTION_CLIENT_LABELS = {
|
|
2282
2293
|
"claude-code": "Claude Code",
|
|
2283
2294
|
"claude-code-cli": "Claude Code",
|
|
@@ -2803,7 +2814,21 @@ function filterSkillsClients(clients, installsMcp) {
|
|
|
2803
2814
|
if (installsMcp) {
|
|
2804
2815
|
return clients.filter((client) => isMcpClientId(client) && SKILLS_CLIENTS.includes(client));
|
|
2805
2816
|
}
|
|
2806
|
-
|
|
2817
|
+
// Instructions/local-files mode: keep the first-class instruction writers, and
|
|
2818
|
+
// map shared-`.agents` readers (cursor/opencode/github-copilot/cowork) onto
|
|
2819
|
+
// the shared-agents install (codex) so they install the skills they read
|
|
2820
|
+
// rather than being silently dropped to an empty set.
|
|
2821
|
+
const out = [];
|
|
2822
|
+
for (const client of clients) {
|
|
2823
|
+
const resolved = SKILL_INSTRUCTION_CLIENTS.includes(client)
|
|
2824
|
+
? client
|
|
2825
|
+
: SHARED_AGENTS_READER_CLIENTS.has(client)
|
|
2826
|
+
? "codex"
|
|
2827
|
+
: undefined;
|
|
2828
|
+
if (resolved && !out.includes(resolved))
|
|
2829
|
+
out.push(resolved);
|
|
2830
|
+
}
|
|
2831
|
+
return out;
|
|
2807
2832
|
}
|
|
2808
2833
|
function clientPromptOptions(installsMcp) {
|
|
2809
2834
|
return skillsClients(installsMcp).map((client) => ({
|
|
@@ -2994,8 +3019,8 @@ async function promptForPlanMode(context) {
|
|
|
2994
3019
|
options: [
|
|
2995
3020
|
{
|
|
2996
3021
|
value: "hosted",
|
|
2997
|
-
label: "Hosted
|
|
2998
|
-
hint: "100% free and open source. Stores plans at plan.agent-native.com with sharing, comments, and browser editor. Requires one-time browser sign-in.",
|
|
3022
|
+
label: "Hosted plans, shareable links",
|
|
3023
|
+
hint: "Recommended. 100% free and open source. Stores plans at plan.agent-native.com with sharing, comments, and browser editor. Requires one-time browser sign-in.",
|
|
2999
3024
|
},
|
|
3000
3025
|
{
|
|
3001
3026
|
value: "local-files",
|
|
@@ -4511,6 +4536,16 @@ export async function runSkills(argv, options = {}) {
|
|
|
4511
4536
|
: "",
|
|
4512
4537
|
].filter(Boolean);
|
|
4513
4538
|
clack.note(summary.join("\n"), `Installed ${installedNames} skill${results.length === 1 ? "" : "s"}`);
|
|
4539
|
+
// OAuth clients (Claude Code) can finish auth in-host via /mcp, not only by
|
|
4540
|
+
// running the connect command — surface that on the no-connect/pending path
|
|
4541
|
+
// so a hosted install isn't left looking "done but unauthenticated".
|
|
4542
|
+
if (!authConnected &&
|
|
4543
|
+
mcpClients.some((client) => client === "claude-code" || client === "claude-code-cli")) {
|
|
4544
|
+
clack.log.info("Claude Code: reload the client, then open /mcp and choose Authenticate to finish connecting" +
|
|
4545
|
+
(pendingConnectCommands.length
|
|
4546
|
+
? " (or run the connect command above)."
|
|
4547
|
+
: "."));
|
|
4548
|
+
}
|
|
4514
4549
|
// GitHub Action follow-ups — kept as exact, copy-pasteable command lines.
|
|
4515
4550
|
for (const line of [githubActionLine, githubActionSuggestionLine].filter(Boolean)) {
|
|
4516
4551
|
clack.log.info(line);
|