@agent-native/core 0.51.14 → 0.52.0
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/README.md +3 -3
- package/dist/cli/connect.d.ts +4 -3
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +67 -26
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/mcp-config-writers.d.ts +20 -13
- package/dist/cli/mcp-config-writers.d.ts.map +1 -1
- package/dist/cli/mcp-config-writers.js +152 -13
- package/dist/cli/mcp-config-writers.js.map +1 -1
- package/dist/cli/mcp.d.ts +2 -2
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +41 -193
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/plan-local.d.ts +13 -1
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +62 -8
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +1 -1
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts +13 -6
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +224 -59
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/agent-engine-key.d.ts +6 -4
- package/dist/client/agent-engine-key.d.ts.map +1 -1
- package/dist/client/agent-engine-key.js +9 -6
- package/dist/client/agent-engine-key.js.map +1 -1
- package/dist/client/chat/run-recovery.js +1 -1
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +7 -14
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/coding-tools/run-code.d.ts +7 -0
- package/dist/coding-tools/run-code.d.ts.map +1 -1
- package/dist/coding-tools/run-code.js +21 -106
- package/dist/coding-tools/run-code.js.map +1 -1
- package/dist/coding-tools/sandbox/adapter.d.ts +79 -0
- package/dist/coding-tools/sandbox/adapter.d.ts.map +1 -0
- package/dist/coding-tools/sandbox/adapter.js +24 -0
- package/dist/coding-tools/sandbox/adapter.js.map +1 -0
- package/dist/coding-tools/sandbox/index.d.ts +51 -0
- package/dist/coding-tools/sandbox/index.d.ts.map +1 -0
- package/dist/coding-tools/sandbox/index.js +79 -0
- package/dist/coding-tools/sandbox/index.js.map +1 -0
- package/dist/coding-tools/sandbox/local-child-process-adapter.d.ts +24 -0
- package/dist/coding-tools/sandbox/local-child-process-adapter.d.ts.map +1 -0
- package/dist/coding-tools/sandbox/local-child-process-adapter.js +141 -0
- package/dist/coding-tools/sandbox/local-child-process-adapter.js.map +1 -0
- package/dist/server/agent-engine-api-key-route.d.ts +37 -0
- package/dist/server/agent-engine-api-key-route.d.ts.map +1 -0
- package/dist/server/agent-engine-api-key-route.js +105 -0
- package/dist/server/agent-engine-api-key-route.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +10 -6
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/create-server.js +1 -1
- package/dist/server/create-server.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -4
- package/docs/content/plan-plugin.md +5 -4
- package/docs/content/pr-visual-recap.md +1 -1
- package/docs/content/template-plan.md +1 -1
- package/package.json +1 -1
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -4
package/dist/cli/plan-local.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import fs from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
13
|
+
import { spawnSync } from "node:child_process";
|
|
13
14
|
import { pathToFileURL } from "node:url";
|
|
14
15
|
import { DEFAULT_PLAN_APP_URL, defaultPlanBlocksOut, fetchPlanBlockCatalog, normalizePlanBlockFormat, } from "./plan-blocks.js";
|
|
15
16
|
function parseArgs(argv) {
|
|
@@ -64,6 +65,42 @@ function normalizeKind(value) {
|
|
|
64
65
|
function defaultPlansDir() {
|
|
65
66
|
return path.resolve(process.env.PLAN_LOCAL_DIR || "plans");
|
|
66
67
|
}
|
|
68
|
+
function defaultLocalPlanAppUrl() {
|
|
69
|
+
return (process.env.PLAN_LOCAL_APP_URL ||
|
|
70
|
+
process.env.PLAN_BASE_URL ||
|
|
71
|
+
"http://localhost:8096");
|
|
72
|
+
}
|
|
73
|
+
function normalizeAppUrl(value) {
|
|
74
|
+
return (value || defaultLocalPlanAppUrl()).replace(/\/+$/, "");
|
|
75
|
+
}
|
|
76
|
+
function localPlanPreviewUrl(dir, appUrl) {
|
|
77
|
+
return `${normalizeAppUrl(appUrl)}/local-plans/${encodeURIComponent(path.basename(path.resolve(dir)))}`;
|
|
78
|
+
}
|
|
79
|
+
function openLocalUrl(url) {
|
|
80
|
+
const platform = process.platform;
|
|
81
|
+
const command = platform === "darwin" ? "open" : platform === "win32" ? "cmd" : "xdg-open";
|
|
82
|
+
const args = platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
83
|
+
const result = spawnSync(command, args, {
|
|
84
|
+
stdio: "ignore",
|
|
85
|
+
windowsHide: true,
|
|
86
|
+
});
|
|
87
|
+
const commandDisplay = [command, ...args].join(" ");
|
|
88
|
+
if (result.error) {
|
|
89
|
+
return {
|
|
90
|
+
ok: false,
|
|
91
|
+
command: commandDisplay,
|
|
92
|
+
error: result.error.message,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (typeof result.status === "number" && result.status !== 0) {
|
|
96
|
+
return {
|
|
97
|
+
ok: false,
|
|
98
|
+
command: commandDisplay,
|
|
99
|
+
error: `exit code ${result.status}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return { ok: true, command: commandDisplay };
|
|
103
|
+
}
|
|
67
104
|
function escapeHtml(value) {
|
|
68
105
|
return value
|
|
69
106
|
.replace(/&/g, "&")
|
|
@@ -327,24 +364,35 @@ export function writeLocalPlanPreview(input) {
|
|
|
327
364
|
parsed.frontmatter.title ||
|
|
328
365
|
firstHeading(parsed.body) ||
|
|
329
366
|
path.basename(dir);
|
|
330
|
-
const out =
|
|
331
|
-
|
|
332
|
-
|
|
367
|
+
const out = input.out ? path.resolve(input.out) : undefined;
|
|
368
|
+
if (out) {
|
|
369
|
+
fs.mkdirSync(path.dirname(out), { recursive: true });
|
|
370
|
+
fs.writeFileSync(out, buildLocalPlanPreviewHtml({ ...input, dir, kind }));
|
|
371
|
+
}
|
|
333
372
|
const files = [
|
|
334
373
|
"plan.mdx",
|
|
335
374
|
"canvas.mdx",
|
|
336
375
|
"prototype.mdx",
|
|
337
376
|
".plan-state.json",
|
|
338
377
|
].filter((file) => fs.existsSync(path.join(dir, file)));
|
|
339
|
-
|
|
378
|
+
const result = {
|
|
340
379
|
ok: true,
|
|
341
380
|
dir,
|
|
342
|
-
out,
|
|
343
|
-
url: pathToFileURL(out).href,
|
|
381
|
+
...(out ? { out } : {}),
|
|
382
|
+
url: out ? pathToFileURL(out).href : localPlanPreviewUrl(dir, input.appUrl),
|
|
344
383
|
title,
|
|
345
384
|
kind,
|
|
346
385
|
files,
|
|
347
386
|
};
|
|
387
|
+
if (!input.open)
|
|
388
|
+
return result;
|
|
389
|
+
const openResult = (input.openUrl || openLocalUrl)(result.url);
|
|
390
|
+
return {
|
|
391
|
+
...result,
|
|
392
|
+
opened: openResult.ok,
|
|
393
|
+
openCommand: openResult.command,
|
|
394
|
+
...(openResult.error ? { openError: openResult.error } : {}),
|
|
395
|
+
};
|
|
348
396
|
}
|
|
349
397
|
function writeLocalPlanSkeleton(input) {
|
|
350
398
|
const dir = path.resolve(input.dir || path.join(defaultPlansDir(), localPlanFolderName(input.title)));
|
|
@@ -426,8 +474,10 @@ function runPreview(args) {
|
|
|
426
474
|
const result = writeLocalPlanPreview({
|
|
427
475
|
dir: stringArg(args, "dir"),
|
|
428
476
|
out: optionalArg(args, "out"),
|
|
477
|
+
appUrl: optionalArg(args, "app-url"),
|
|
429
478
|
title: optionalArg(args, "title"),
|
|
430
479
|
brief: optionalArg(args, "brief"),
|
|
480
|
+
open: boolArg(args, "open"),
|
|
431
481
|
kind: optionalArg(args, "kind")
|
|
432
482
|
? normalizeKind(optionalArg(args, "kind"))
|
|
433
483
|
: undefined,
|
|
@@ -486,7 +536,7 @@ Usage:
|
|
|
486
536
|
agent-native plan blocks [--format reference|schema] [--app-url <url>] [--out <file>] [--json]
|
|
487
537
|
agent-native plan local init --title <title> [--brief <text>] [--kind plan|recap] [--dir <folder>] [--force]
|
|
488
538
|
agent-native plan local check --dir <folder>
|
|
489
|
-
agent-native plan local preview --dir <folder> [--
|
|
539
|
+
agent-native plan local preview --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--out preview.html]
|
|
490
540
|
|
|
491
541
|
The blocks command fetches the no-auth, read-only get-plan-blocks catalog from
|
|
492
542
|
the Plan app and writes plan-blocks.md (or plan-blocks.schema.json). It sends no
|
|
@@ -502,7 +552,11 @@ write actions, hosted storage, or SQLite.
|
|
|
502
552
|
Common flow:
|
|
503
553
|
agent-native plan blocks --out plan-blocks.md
|
|
504
554
|
agent-native plan local init --title "Checkout review" --kind plan
|
|
505
|
-
agent-native plan local preview --dir plans/checkout-review
|
|
555
|
+
agent-native plan local preview --dir plans/checkout-review --open
|
|
556
|
+
|
|
557
|
+
\`plan local preview\` opens the local Plan app route by default. Pass
|
|
558
|
+
\`--app-url\` when your local Plan app is on a non-default port. \`--out\` is a
|
|
559
|
+
legacy/debug escape hatch that writes a standalone static HTML file.
|
|
506
560
|
`;
|
|
507
561
|
export async function runPlan(argv) {
|
|
508
562
|
const [area, sub, ...rest] = argv;
|
|
@@ -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, HTTP, SQLite, or the Plan template runtime;\n * they only read and write local files so privacy-focused users have an\n * auditable no-DB path. The top-level `plan blocks` command is a schema-only,\n * no-auth helper for fetching the public block catalog before authoring local\n * MDX; it never sends plan content.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\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};\n\ntype LocalPlanPreviewInput = {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: 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};\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 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\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 };\n}\n\nexport function buildLocalPlanPreviewHtml(\n input: LocalPlanPreviewInput,\n): string {\n const files = readLocalPlanFiles(input.dir);\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}): LocalPlanPreviewResult {\n const dir = path.resolve(input.dir);\n const parsed = stripFrontmatter(readLocalPlanFiles(dir).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 = path.resolve(input.out || path.join(dir, \"preview.html\"));\n fs.mkdirSync(path.dirname(out), { recursive: true });\n fs.writeFileSync(out, buildLocalPlanPreviewHtml({ ...input, dir, kind }));\n const files = [\n \"plan.mdx\",\n \"canvas.mdx\",\n \"prototype.mdx\",\n \".plan-state.json\",\n ].filter((file) => fs.existsSync(path.join(dir, file)));\n return {\n ok: true,\n dir,\n out,\n url: pathToFileURL(out).href,\n title,\n kind,\n files,\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 />`, `<Diagram />`, `<TabsBlock />`,\",\n \"`<FileTree />`, or `<Diff />`; the local preview will show the source\",\n \"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 const parsed = stripFrontmatter(files.planMdx);\n const result = {\n ok: true,\n noDb: true,\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 },\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 title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\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 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 preview --dir <folder> [--out preview.html] [--kind plan|recap]\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 preview --dir plans/checkout-review\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 \"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, HTTP, SQLite, or the Plan template runtime;\n * they only read and write local files so privacy-focused users have an\n * auditable no-DB path. The top-level `plan blocks` command is a schema-only,\n * no-auth helper for fetching the public block catalog before authoring local\n * MDX; it never sends plan content.\n */\n\nimport fs from \"node:fs\";\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};\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 OpenLocalUrlResult = {\n ok: boolean;\n command: string;\n error?: string;\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 normalizeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanAppUrl()).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 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\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 };\n}\n\nexport function buildLocalPlanPreviewHtml(\n input: LocalPlanPreviewInput,\n): string {\n const files = readLocalPlanFiles(input.dir);\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 parsed = stripFrontmatter(readLocalPlanFiles(dir).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 files = [\n \"plan.mdx\",\n \"canvas.mdx\",\n \"prototype.mdx\",\n \".plan-state.json\",\n ].filter((file) => fs.existsSync(path.join(dir, file)));\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,\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 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 />`, `<Diagram />`, `<TabsBlock />`,\",\n \"`<FileTree />`, or `<Diff />`; the local preview will show the source\",\n \"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 const parsed = stripFrontmatter(files.planMdx);\n const result = {\n ok: true,\n noDb: true,\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 },\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 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 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 preview --dir plans/checkout-review --open\n\n\\`plan local preview\\` opens the local Plan app route by default. Pass\n\\`--app-url\\` when your local Plan app is on a non-default port. \\`--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 \"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/recap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../../src/cli/recap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../../src/cli/recap.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/recap.js
CHANGED
|
@@ -1231,7 +1231,7 @@ export function buildRecapPrompt(input) {
|
|
|
1231
1231
|
lines.push("## Local-Files Output (this is the only way to produce output)");
|
|
1232
1232
|
lines.push("Do NOT call the `plan` MCP server, `create-visual-recap`, `import-visual-plan-source`, `update-visual-plan`, `export-visual-plan`, or any hosted Plan action. This mode exists so the recap data never goes to a Plan app database.");
|
|
1233
1233
|
lines.push(`1. Create or replace the local MDX folder \`${localDir}\` with \`plan.mdx\` and optional \`canvas.mdx\`, \`prototype.mdx\`, and \`.plan-state.json\` derived ONLY from the real diff. Set \`kind: "recap"\` and \`localOnly: true\` in source metadata/state.`);
|
|
1234
|
-
lines.push(`2. Run \`npx @agent-native/core@latest plan local preview --dir ${JSON.stringify(localDir)} --kind recap --
|
|
1234
|
+
lines.push(`2. Run \`npx @agent-native/core@latest plan local preview --dir ${JSON.stringify(localDir)} --kind recap --open\` to validate the folder and open it in the local Plan app.`);
|
|
1235
1235
|
lines.push("3. Write the returned `url` from that command to `recap-url.txt` at the repo root, containing exactly one line. This file is the workflow's only hand-off.");
|
|
1236
1236
|
}
|
|
1237
1237
|
else {
|