@forge-ts/gen 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +22 -10
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -2036,7 +2036,7 @@ function renderQuickStart(symbols, config) {
|
|
|
2036
2036
|
const cliCommands = [];
|
|
2037
2037
|
for (const key of relevantKeys) {
|
|
2038
2038
|
const script = scripts[key];
|
|
2039
|
-
if (script
|
|
2039
|
+
if (script?.includes(cliName)) {
|
|
2040
2040
|
cliCommands.push(`npx ${cliName} ${key}`);
|
|
2041
2041
|
}
|
|
2042
2042
|
}
|
|
@@ -2112,7 +2112,7 @@ function renderConfigSection(symbols, config) {
|
|
|
2112
2112
|
const children = configSymbol.children ?? [];
|
|
2113
2113
|
if (children.length > 0) {
|
|
2114
2114
|
const projectName = config.project.packageName ?? "project";
|
|
2115
|
-
const importSource = projectName.includes("/") ? projectName.split("/")[0]
|
|
2115
|
+
const importSource = projectName.includes("/") ? `${projectName.split("/")[0]}/${projectName.split("/")[1]}` : projectName;
|
|
2116
2116
|
lines.push("```typescript");
|
|
2117
2117
|
lines.push(`import type { ${configSymbol.name} } from "${importSource}";`);
|
|
2118
2118
|
lines.push("");
|
|
@@ -2175,9 +2175,7 @@ function renderGotchas(symbols) {
|
|
|
2175
2175
|
);
|
|
2176
2176
|
for (const sym of throwers) {
|
|
2177
2177
|
for (const t of sym.documentation?.throws ?? []) {
|
|
2178
|
-
lines.push(
|
|
2179
|
-
`- \`${sym.name}()\` throws${t.type ? ` \`${t.type}\`` : ""}: ${t.description}`
|
|
2180
|
-
);
|
|
2178
|
+
lines.push(`- \`${sym.name}()\` throws${t.type ? ` \`${t.type}\`` : ""}: ${t.description}`);
|
|
2181
2179
|
}
|
|
2182
2180
|
}
|
|
2183
2181
|
const enums = exported.filter((s) => s.kind === "enum" && (s.children?.length ?? 0) > 0);
|
|
@@ -2673,6 +2671,7 @@ function updateAutoSections(existing, generated) {
|
|
|
2673
2671
|
async function generate(config, options) {
|
|
2674
2672
|
const start = Date.now();
|
|
2675
2673
|
const forceStubs = options?.forceStubs ?? false;
|
|
2674
|
+
const writtenFiles = [];
|
|
2676
2675
|
const walker = createWalker(config);
|
|
2677
2676
|
const symbols = walker.walk();
|
|
2678
2677
|
await mkdir(config.outDir, { recursive: true });
|
|
@@ -2681,7 +2680,9 @@ async function generate(config, options) {
|
|
|
2681
2680
|
mdx: format === "mdx"
|
|
2682
2681
|
});
|
|
2683
2682
|
const ext = format === "mdx" ? "mdx" : "md";
|
|
2684
|
-
|
|
2683
|
+
const filePath = join(config.outDir, `api-reference.${ext}`);
|
|
2684
|
+
await writeFile2(filePath, content, "utf8");
|
|
2685
|
+
writtenFiles.push(filePath);
|
|
2685
2686
|
}
|
|
2686
2687
|
const resolvedRoot = config.rootDir === "." ? process.cwd() : config.rootDir;
|
|
2687
2688
|
const projectName = resolvedRoot.split("/").pop() ?? "Project";
|
|
@@ -2711,11 +2712,13 @@ async function generate(config, options) {
|
|
|
2711
2712
|
const merged = updateAutoSections(existingContent, file.content);
|
|
2712
2713
|
if (merged) {
|
|
2713
2714
|
await writeFile2(filePath, merged, "utf8");
|
|
2715
|
+
writtenFiles.push(filePath);
|
|
2714
2716
|
}
|
|
2715
2717
|
continue;
|
|
2716
2718
|
}
|
|
2717
2719
|
await mkdir(dirname(filePath), { recursive: true });
|
|
2718
2720
|
await writeFile2(filePath, file.content, "utf8");
|
|
2721
|
+
writtenFiles.push(filePath);
|
|
2719
2722
|
}
|
|
2720
2723
|
if (config.gen.ssgTarget) {
|
|
2721
2724
|
const configFiles = adapter.generateConfig(adapterContext);
|
|
@@ -2723,14 +2726,19 @@ async function generate(config, options) {
|
|
|
2723
2726
|
const filePath = join(config.outDir, file.path);
|
|
2724
2727
|
await mkdir(dirname(filePath), { recursive: true });
|
|
2725
2728
|
await writeFile2(filePath, file.content, "utf8");
|
|
2729
|
+
writtenFiles.push(filePath);
|
|
2726
2730
|
}
|
|
2727
2731
|
}
|
|
2728
2732
|
}
|
|
2729
2733
|
if (config.gen.llmsTxt) {
|
|
2734
|
+
const llmsPath = join(config.outDir, "llms.txt");
|
|
2730
2735
|
const llms = generateLlmsTxt(symbols, config);
|
|
2731
|
-
await writeFile2(
|
|
2736
|
+
await writeFile2(llmsPath, llms, "utf8");
|
|
2737
|
+
writtenFiles.push(llmsPath);
|
|
2738
|
+
const llmsFullPath = join(config.outDir, "llms-full.txt");
|
|
2732
2739
|
const llmsFull = generateLlmsFullTxt(symbols, config);
|
|
2733
|
-
await writeFile2(
|
|
2740
|
+
await writeFile2(llmsFullPath, llmsFull, "utf8");
|
|
2741
|
+
writtenFiles.push(llmsFullPath);
|
|
2734
2742
|
const skillEnabled = config.skill.enabled !== false;
|
|
2735
2743
|
if (skillEnabled) {
|
|
2736
2744
|
const skillPkg = generateSkillPackage(symbols, config);
|
|
@@ -2740,18 +2748,22 @@ async function generate(config, options) {
|
|
|
2740
2748
|
const filePath = join(skillDir, file.path);
|
|
2741
2749
|
await mkdir(dirname(filePath), { recursive: true });
|
|
2742
2750
|
await writeFile2(filePath, file.content, "utf8");
|
|
2751
|
+
writtenFiles.push(filePath);
|
|
2743
2752
|
}
|
|
2744
2753
|
}
|
|
2745
2754
|
}
|
|
2746
2755
|
if (config.gen.readmeSync) {
|
|
2747
|
-
|
|
2756
|
+
const readmePath = join(config.rootDir, "README.md");
|
|
2757
|
+
await syncReadme(readmePath, symbols);
|
|
2758
|
+
writtenFiles.push(readmePath);
|
|
2748
2759
|
}
|
|
2749
2760
|
return {
|
|
2750
2761
|
success: true,
|
|
2751
2762
|
symbols,
|
|
2752
2763
|
errors: [],
|
|
2753
2764
|
warnings: [],
|
|
2754
|
-
duration: Date.now() - start
|
|
2765
|
+
duration: Date.now() - start,
|
|
2766
|
+
writtenFiles
|
|
2755
2767
|
};
|
|
2756
2768
|
}
|
|
2757
2769
|
export {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/registry.ts","../src/adapters/mintlify.ts","../src/adapters/docusaurus.ts","../src/adapters/nextra.ts","../src/adapters/vitepress.ts","../src/llms.ts","../src/markdown.ts","../src/readme-sync.ts","../src/site-generator.ts","../src/skill.ts","../src/ssg-config.ts","../src/index.ts"],"sourcesContent":["import type { SSGAdapter, SSGTarget } from \"./types.js\";\n\n/** Registry of all available SSG adapters. */\nconst adapters = new Map<SSGTarget, SSGAdapter>();\n\n/**\n * Register an SSG adapter.\n * Called once per provider at module load time.\n *\n * @param adapter - The adapter to register.\n * @example\n * ```typescript\n * import { registerAdapter } from \"@forge-ts/gen\";\n * registerAdapter(mintlifyAdapter);\n * ```\n * @public\n */\nexport function registerAdapter(adapter: SSGAdapter): void {\n\tadapters.set(adapter.target, adapter);\n}\n\n/**\n * Get a registered adapter by target name.\n * Throws if the target is not registered.\n *\n * @param target - The SSG target identifier.\n * @returns The registered {@link SSGAdapter} for the given target.\n * @throws `Error` if the target is not registered.\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"mintlify\");\n * ```\n * @public\n */\nexport function getAdapter(target: SSGTarget): SSGAdapter {\n\tconst adapter = adapters.get(target);\n\tif (!adapter) {\n\t\tconst available = [...adapters.keys()].join(\", \");\n\t\tthrow new Error(`Unknown SSG target \"${target}\". Available targets: ${available}`);\n\t}\n\treturn adapter;\n}\n\n/**\n * Get all registered adapter targets.\n *\n * @returns An array of all registered {@link SSGTarget} identifiers.\n * @example\n * ```typescript\n * import { getAvailableTargets } from \"@forge-ts/gen\";\n * const targets = getAvailableTargets(); // [\"mintlify\", \"docusaurus\", ...]\n * ```\n * @public\n */\nexport function getAvailableTargets(): SSGTarget[] {\n\treturn [...adapters.keys()];\n}\n\n/**\n * The default SSG target when none is specified.\n * @public\n */\nexport const DEFAULT_TARGET: SSGTarget = \"mintlify\";\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 3,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** A navigation group with pages (Mintlify v4 format). */\ninterface MintlifyNavGroup {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavGroup>;\n}\n\n/** A navigation tab containing groups (Mintlify v4 format). */\ninterface MintlifyNavTab {\n\ttab: string;\n\tgroups: MintlifyNavGroup[];\n}\n\n/** Contextual AI assistant options for Mintlify v4. */\ninterface MintlifyContextual {\n\toptions: Array<\"copy\" | \"view\" | \"chatgpt\" | \"claude\" | \"perplexity\">;\n}\n\n/** Mintlify v4 docs.json structure. */\ninterface MintlifyDocsJson {\n\tname: string;\n\ttheme: string;\n\tcolors: { primary: string; light: string; dark: string };\n\tnavigation: { tabs: MintlifyNavTab[] };\n\tfooter: { socials: Record<string, string> };\n\tcontextual: MintlifyContextual;\n}\n\n/** Build the docs.json navigation config following the 5-stage architecture. */\nfunction buildDocsJson(context: AdapterContext): MintlifyDocsJson {\n\tconst { pages, projectName } = context;\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t}\n\t}\n\n\tconst tabs: MintlifyNavTab[] = [];\n\n\t// Documentation tab — ORIENT + LEARN + BUILD + COMMUNITY\n\tconst docGroups: MintlifyNavGroup[] = [];\n\n\tdocGroups.push({\n\t\tgroup: \"Getting Started\",\n\t\tpages: [\"index\", \"getting-started\"],\n\t});\n\n\tdocGroups.push({\n\t\tgroup: \"Learn\",\n\t\tpages: [\"concepts\", \"guides/index\"],\n\t});\n\n\tdocGroups.push({\n\t\tgroup: \"Reference\",\n\t\tpages: [\"configuration\", \"changelog\"],\n\t});\n\n\tdocGroups.push({\n\t\tgroup: \"Community\",\n\t\tpages: [\"faq\", \"contributing\"],\n\t});\n\n\ttabs.push({ tab: \"Documentation\", groups: docGroups });\n\n\t// API Reference tab — per-package groups with api/ subpages\n\tif (byPackage.size > 0) {\n\t\tconst apiGroups: MintlifyNavGroup[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\t// Sort: index first, then api/index, then api/functions, api/types, api/examples\n\t\t\tconst sorted = slugs.sort((a, b) => {\n\t\t\t\tconst order = (s: string) => {\n\t\t\t\t\tif (s.endsWith(\"/index\")) return 0;\n\t\t\t\t\tif (s.includes(\"/api/index\")) return 1;\n\t\t\t\t\tif (s.includes(\"/api/functions\")) return 2;\n\t\t\t\t\tif (s.includes(\"/api/types\")) return 3;\n\t\t\t\t\tif (s.includes(\"/api/examples\")) return 4;\n\t\t\t\t\treturn 5;\n\t\t\t\t};\n\t\t\t\treturn order(a) - order(b);\n\t\t\t});\n\t\t\tapiGroups.push({ group: `@forge-ts/${pkgName}`, pages: sorted });\n\t\t}\n\t\ttabs.push({ tab: \"API Reference\", groups: apiGroups });\n\t}\n\n\treturn {\n\t\tname: projectName,\n\t\ttheme: \"mint\",\n\t\tcolors: { primary: \"#0ea5e9\", light: \"#38bdf8\", dark: \"#0284c7\" },\n\t\tnavigation: { tabs },\n\t\tfooter: {\n\t\t\tsocials: context.config.project.repository\n\t\t\t\t? { github: context.config.project.repository }\n\t\t\t\t: {},\n\t\t},\n\t\tcontextual: {\n\t\t\toptions: [\"copy\", \"view\", \"chatgpt\", \"claude\", \"perplexity\"],\n\t\t},\n\t};\n}\n\n/** Add Mintlify-compatible frontmatter to a doc page. */\nfunction addMintlifyFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\n\tconst lines = [\"---\", `title: \"${title}\"`];\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\t// Strip existing frontmatter block if present, then prepend ours\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Mintlify SSG adapter.\n * Implements the {@link SSGAdapter} contract for the Mintlify platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"mintlify\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"docs.json\"\n * ```\n * @public\n */\nexport const mintlifyAdapter: SSGAdapter = {\n\ttarget: \"mintlify\",\n\tdisplayName: \"Mintlify\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\tconst docsJson = buildDocsJson(context);\n\t\treturn {\n\t\t\ttarget: \"mintlify\",\n\t\t\tfiles: [{ path: \"docs.json\", content: JSON.stringify(docsJson, null, 2) }],\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {},\n\t\t\tscripts: {},\n\t\t\tinstructions: [\n\t\t\t\t\"Preview locally: npx @mintlify/cli dev\",\n\t\t\t\t\"Deploy: Push to GitHub and connect at mintlify.com\",\n\t\t\t],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => {\n\t\t\tlet content = addMintlifyFrontmatter(page);\n\t\t\t// Strip any top-level h1 lines — Mintlify renders frontmatter title as h1\n\t\t\tcontent = content.replace(/^# .+$/m, \"\").replace(/\\n{3,}/g, \"\\n\\n\");\n\t\t\t// Ensure opening code fences that have no language tag get a typescript tag.\n\t\t\t// We track fence state so we only tag opening fences, not closing ones.\n\t\t\tlet insideFence = false;\n\t\t\tcontent = content\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.map((line) => {\n\t\t\t\t\tif (insideFence) {\n\t\t\t\t\t\tif (/^```\\s*$/.test(line)) {\n\t\t\t\t\t\t\tinsideFence = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn line;\n\t\t\t\t\t}\n\t\t\t\t\t// Opening fence with a language — track but don't modify\n\t\t\t\t\tif (/^```\\S/.test(line)) {\n\t\t\t\t\t\tinsideFence = true;\n\t\t\t\t\t\treturn line;\n\t\t\t\t\t}\n\t\t\t\t\t// Opening fence with no language — add typescript\n\t\t\t\t\tif (/^```\\s*$/.test(line)) {\n\t\t\t\t\t\tinsideFence = true;\n\t\t\t\t\t\treturn \"```typescript\";\n\t\t\t\t\t}\n\t\t\t\t\treturn line;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t\treturn {\n\t\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\t\tcontent,\n\t\t\t\tstub: page.stub,\n\t\t\t};\n\t\t});\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\tconst config = buildDocsJson(context);\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \"docs.json\",\n\t\t\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t\t\t},\n\t\t];\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"@mintlify/cli\", \"dev\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"Mintlify Dev Server\",\n\t\t\turl: \"http://localhost:3000\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn existsSync(join(outDir, \"docs.json\"));\n\t},\n};\n\n// Self-register\nregisterAdapter(mintlifyAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\n/** Build the sidebars.ts content from doc pages. */\nfunction buildSidebarsTs(pages: DocPage[]): string {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\n\treturn (\n\t\t`import type { SidebarsConfig } from \"@docusaurus/plugin-content-docs\";\\n\\n` +\n\t\t`const sidebars: SidebarsConfig = ${json};\\n\\n` +\n\t\t`export default sidebars;\\n`\n\t);\n}\n\n/** Build the docusaurus.config.ts content. */\nfunction buildDocusaurusConfig(context: AdapterContext): string {\n\tconst { projectName, projectDescription } = context;\n\tconst description = projectDescription ?? `${projectName} documentation`;\n\n\treturn (\n\t\t`import { themes as prismThemes } from \"prism-react-renderer\";\\n` +\n\t\t`import type { Config } from \"@docusaurus/types\";\\n` +\n\t\t`import type * as Preset from \"@docusaurus/preset-classic\";\\n\\n` +\n\t\t`const config: Config = {\\n` +\n\t\t` title: \"${projectName}\",\\n` +\n\t\t` tagline: \"${description}\",\\n` +\n\t\t` url: \"https://your-domain.com\",\\n` +\n\t\t` baseUrl: \"/\",\\n` +\n\t\t` onBrokenLinks: \"throw\",\\n` +\n\t\t` onBrokenMarkdownLinks: \"warn\",\\n` +\n\t\t` i18n: {\\n` +\n\t\t` defaultLocale: \"en\",\\n` +\n\t\t` locales: [\"en\"],\\n` +\n\t\t` },\\n` +\n\t\t` presets: [\\n` +\n\t\t` [\\n` +\n\t\t` \"classic\",\\n` +\n\t\t` {\\n` +\n\t\t` docs: {\\n` +\n\t\t` routeBasePath: \"/\",\\n` +\n\t\t` sidebarPath: \"./sidebars.ts\",\\n` +\n\t\t` },\\n` +\n\t\t` blog: false,\\n` +\n\t\t` } satisfies Preset.Options,\\n` +\n\t\t` ],\\n` +\n\t\t` ],\\n` +\n\t\t` themeConfig: {\\n` +\n\t\t` prism: {\\n` +\n\t\t` theme: prismThemes.github,\\n` +\n\t\t` darkTheme: prismThemes.dracula,\\n` +\n\t\t` },\\n` +\n\t\t` } satisfies Preset.ThemeConfig,\\n` +\n\t\t`} satisfies Config;\\n\\n` +\n\t\t`export default config;\\n`\n\t);\n}\n\n/** Build the package.json content for a Docusaurus site. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"docusaurus start\",\n\t\t\t\"docs:build\": \"docusaurus build\",\n\t\t\t\"docs:serve\": \"docusaurus serve\",\n\t\t},\n\t\tdependencies: {\n\t\t\t\"@docusaurus/core\": \"^3.9.2\",\n\t\t\t\"@docusaurus/preset-classic\": \"^3.9.2\",\n\t\t\t\"@mdx-js/react\": \"^3.0.0\",\n\t\t\treact: \"^19.0.0\",\n\t\t\t\"react-dom\": \"^19.0.0\",\n\t\t\t\"prism-react-renderer\": \"^2.3.0\",\n\t\t},\n\t\tdevDependencies: {\n\t\t\t\"@docusaurus/tsconfig\": \"^3.9.2\",\n\t\t\t\"@docusaurus/types\": \"^3.9.2\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add Docusaurus-compatible frontmatter to a doc page. */\nfunction addDocusaurusFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\tconst sidebarLabel = page.frontmatter.sidebar_label\n\t\t? String(page.frontmatter.sidebar_label)\n\t\t: title;\n\tconst sidebarPosition = page.frontmatter.sidebar_position;\n\n\tconst lines = [\"---\", `title: \"${title}\"`, `sidebar_label: \"${sidebarLabel}\"`];\n\tif (sidebarPosition !== undefined) {\n\t\tlines.push(`sidebar_position: ${sidebarPosition}`);\n\t}\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Docusaurus SSG adapter.\n * Implements the {@link SSGAdapter} contract for the Docusaurus platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"docusaurus\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"sidebars.ts\"\n * ```\n * @public\n */\nexport const docusaurusAdapter: SSGAdapter = {\n\ttarget: \"docusaurus\",\n\tdisplayName: \"Docusaurus\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\treturn {\n\t\t\ttarget: \"docusaurus\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \"docusaurus.config.ts\", content: buildDocusaurusConfig(context) },\n\t\t\t\t{ path: \"sidebars.ts\", content: buildSidebarsTs(context.pages) },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t\t{ path: \"tsconfig.json\", content: '{ \"extends\": \"@docusaurus/tsconfig\" }\\n' },\n\t\t\t],\n\t\t\tdependencies: {\n\t\t\t\t\"@docusaurus/core\": \"^3.9.2\",\n\t\t\t\t\"@docusaurus/preset-classic\": \"^3.9.2\",\n\t\t\t\t\"@mdx-js/react\": \"^3.0.0\",\n\t\t\t\treact: \"^19.0.0\",\n\t\t\t\t\"react-dom\": \"^19.0.0\",\n\t\t\t\t\"prism-react-renderer\": \"^2.3.0\",\n\t\t\t},\n\t\t\tdevDependencies: {\n\t\t\t\t\"@docusaurus/tsconfig\": \"^3.9.2\",\n\t\t\t\t\"@docusaurus/types\": \"^3.9.2\",\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"docusaurus start\",\n\t\t\t\t\"docs:build\": \"docusaurus build\",\n\t\t\t\t\"docs:serve\": \"docusaurus serve\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addDocusaurusFrontmatter(page),\n\t\t\tstub: page.stub,\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \"sidebars.ts\",\n\t\t\t\tcontent: buildSidebarsTs(context.pages),\n\t\t\t},\n\t\t];\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"docusaurus\", \"start\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"Docusaurus Dev Server\",\n\t\t\turl: \"http://localhost:3000\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn (\n\t\t\texistsSync(join(outDir, \"sidebars.ts\")) ||\n\t\t\texistsSync(join(outDir, \"docusaurus.config.ts\")) ||\n\t\t\texistsSync(join(outDir, \"docusaurus.config.js\"))\n\t\t);\n\t},\n};\n\n// Self-register\nregisterAdapter(docusaurusAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: false,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n/**\n * Render a plain object as a JS module export.\n * Values are always strings so we can use JSON.stringify on the object\n * and then replace the surrounding braces with a default export statement.\n */\nfunction renderMetaJs(meta: Record<string, string>): string {\n\tconst json = JSON.stringify(meta, null, 2);\n\treturn `export default ${json};\\n`;\n}\n\n/** Build all _meta.js files for the Nextra v4 navigation. */\nfunction buildMetaFiles(pages: DocPage[]): GeneratedFile[] {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst files: GeneratedFile[] = [];\n\n\t// Root _meta.js (content/ directory in Nextra v4)\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\tfiles.push({\n\t\tpath: \"content/_meta.js\",\n\t\tcontent: renderMetaJs(rootMeta),\n\t});\n\n\t// Per-package _meta.js\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: `content/packages/${pkgName}/_meta.js`,\n\t\t\tcontent: renderMetaJs(pkgMeta),\n\t\t});\n\t}\n\n\t// content/packages/_meta.js when there are multiple packages\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"content/packages/_meta.js\",\n\t\t\tcontent: renderMetaJs(packagesMeta),\n\t\t});\n\t}\n\n\treturn files;\n}\n\n/** Build the app/layout.tsx content for Nextra v4. */\nfunction buildAppLayout(context: AdapterContext): string {\n\tconst { projectName } = context;\n\treturn (\n\t\t`import { Layout } from \"nextra-theme-docs\";\\n` +\n\t\t`import { Head } from \"nextra/components\";\\n` +\n\t\t`import { getPageMap } from \"nextra/page-map\";\\n` +\n\t\t`import type { ReactNode } from \"react\";\\n\\n` +\n\t\t`export const metadata = {\\n` +\n\t\t` title: {\\n` +\n\t\t` template: \\`%s – ${projectName}\\`,\\n` +\n\t\t` },\\n` +\n\t\t`};\\n\\n` +\n\t\t`export default async function RootLayout({ children }: { children: ReactNode }) {\\n` +\n\t\t` const pageMap = await getPageMap();\\n` +\n\t\t` return (\\n` +\n\t\t` <html lang=\"en\" suppressHydrationWarning>\\n` +\n\t\t` <Head />\\n` +\n\t\t` <body>\\n` +\n\t\t` <Layout pageMap={pageMap} docsRepositoryBase=\"\">\\n` +\n\t\t` {children}\\n` +\n\t\t` </Layout>\\n` +\n\t\t` </body>\\n` +\n\t\t` </html>\\n` +\n\t\t` );\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build the app/[[...mdxPath]]/page.tsx content for Nextra v4. */\nfunction buildCatchAllPage(): string {\n\treturn (\n\t\t`import { generateStaticParamsFor, importPage } from \"nextra/pages\";\\n\\n` +\n\t\t`export const generateStaticParams = generateStaticParamsFor(\"mdxPath\");\\n\\n` +\n\t\t`export async function generateMetadata(props: {\\n` +\n\t\t` params: Promise<Record<string, string[]>>;\\n` +\n\t\t`}) {\\n` +\n\t\t` const params = await props.params;\\n` +\n\t\t` const { metadata } = await importPage(params.mdxPath);\\n` +\n\t\t` return metadata;\\n` +\n\t\t`}\\n\\n` +\n\t\t`const Wrapper = importPage;\\n` +\n\t\t`export default async function Page(props: {\\n` +\n\t\t` params: Promise<Record<string, string[]>>;\\n` +\n\t\t`}) {\\n` +\n\t\t` const params = await props.params;\\n` +\n\t\t` const result = await importPage(params.mdxPath);\\n` +\n\t\t` const { default: MDXContent } = result;\\n` +\n\t\t` return <MDXContent {...props} params={params} />;\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build mdx-components.ts for Nextra v4. */\nfunction buildMdxComponents(): string {\n\treturn (\n\t\t`import { useMDXComponents as getNextraComponents } from \"nextra-theme-docs\";\\n\\n` +\n\t\t`export function useMDXComponents(components: Record<string, unknown>) {\\n` +\n\t\t` return getNextraComponents(components);\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build next.config.ts for Nextra v4. */\nfunction buildNextConfig(): string {\n\treturn (\n\t\t`import nextra from \"nextra\";\\n\\n` +\n\t\t`const withNextra = nextra({\\n` +\n\t\t` contentDirBasePath: \"/\",\\n` +\n\t\t`});\\n\\n` +\n\t\t`export default withNextra({\\n` +\n\t\t` output: \"export\",\\n` +\n\t\t` images: { unoptimized: true },\\n` +\n\t\t`});\\n`\n\t);\n}\n\n/** Build package.json for Nextra v4. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"next dev\",\n\t\t\t\"docs:build\": \"next build\",\n\t\t\t\"docs:serve\": \"next start\",\n\t\t},\n\t\tdependencies: {\n\t\t\tnext: \"^15\",\n\t\t\tnextra: \"^4\",\n\t\t\t\"nextra-theme-docs\": \"^4\",\n\t\t\treact: \"^19\",\n\t\t\t\"react-dom\": \"^19\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add Nextra-compatible frontmatter to a doc page (title only — description optional). */\nfunction addNextraFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tif (!title) {\n\t\treturn page.content;\n\t}\n\n\tconst lines = [\"---\", `title: \"${title}\"`, \"---\", \"\"];\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Nextra SSG adapter (v4, App Router).\n * Implements the {@link SSGAdapter} contract for the Nextra platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"nextra\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"content/_meta.js\"\n * ```\n * @public\n */\nexport const nextraAdapter: SSGAdapter = {\n\ttarget: \"nextra\",\n\tdisplayName: \"Nextra\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\tconst metaFiles = buildMetaFiles(context.pages);\n\t\treturn {\n\t\t\ttarget: \"nextra\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \"next.config.ts\", content: buildNextConfig() },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t\t{ path: \"mdx-components.ts\", content: buildMdxComponents() },\n\t\t\t\t{ path: \"app/layout.tsx\", content: buildAppLayout(context) },\n\t\t\t\t{ path: \"app/[[...mdxPath]]/page.tsx\", content: buildCatchAllPage() },\n\t\t\t\t...metaFiles,\n\t\t\t],\n\t\t\tdependencies: {\n\t\t\t\tnext: \"^15\",\n\t\t\t\tnextra: \"^4\",\n\t\t\t\t\"nextra-theme-docs\": \"^4\",\n\t\t\t\treact: \"^19\",\n\t\t\t\t\"react-dom\": \"^19\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"next dev\",\n\t\t\t\t\"docs:build\": \"next build\",\n\t\t\t\t\"docs:serve\": \"next start\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addNextraFrontmatter(page),\n\t\t\tstub: page.stub,\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn buildMetaFiles(context.pages);\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"next\", \"dev\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"Nextra Dev Server (Next.js)\",\n\t\t\turl: \"http://localhost:3000\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn (\n\t\t\texistsSync(join(outDir, \"content/_meta.js\")) ||\n\t\t\texistsSync(join(outDir, \"next.config.ts\")) ||\n\t\t\texistsSync(join(outDir, \"next.config.js\"))\n\t\t);\n\t},\n};\n\n// Self-register\nregisterAdapter(nextraAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"md\",\n\tsupportsMdx: false,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\n/** Build the sidebar structure from doc pages. */\nfunction buildSidebar(pages: DocPage[]): VitePressGroup[] {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn sidebar;\n}\n\n/** Build the .vitepress/config.mts content. */\nfunction buildVitePressConfig(context: AdapterContext): string {\n\tconst { projectName, projectDescription } = context;\n\tconst description = projectDescription ?? `${projectName} documentation`;\n\tconst sidebar = buildSidebar(context.pages);\n\tconst sidebarJson = JSON.stringify(sidebar, null, 4).split(\"\\n\").join(\"\\n \");\n\n\treturn (\n\t\t`import { defineConfig } from \"vitepress\";\\n\\n` +\n\t\t`// https://vitepress.dev/reference/site-config\\n` +\n\t\t`export default defineConfig({\\n` +\n\t\t` title: \"${projectName}\",\\n` +\n\t\t` description: \"${description}\",\\n` +\n\t\t` themeConfig: {\\n` +\n\t\t` nav: [\\n` +\n\t\t` { text: \"Home\", link: \"/\" },\\n` +\n\t\t` ],\\n` +\n\t\t` sidebar: ${sidebarJson},\\n` +\n\t\t` socialLinks: [],\\n` +\n\t\t` },\\n` +\n\t\t`});\\n`\n\t);\n}\n\n/** Build package.json for a VitePress site. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\ttype: \"module\",\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"vitepress dev\",\n\t\t\t\"docs:build\": \"vitepress build\",\n\t\t\t\"docs:preview\": \"vitepress preview\",\n\t\t},\n\t\tdevDependencies: {\n\t\t\tvitepress: \"^2.0.0\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add VitePress-compatible frontmatter to a doc page. */\nfunction addVitepressFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\n\tconst lines = [\"---\", `title: \"${title}\"`, \"outline: deep\"];\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * VitePress SSG adapter.\n * Implements the {@link SSGAdapter} contract for the VitePress platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"vitepress\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \".vitepress/config.mts\"\n * ```\n * @public\n */\nexport const vitepressAdapter: SSGAdapter = {\n\ttarget: \"vitepress\",\n\tdisplayName: \"VitePress\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\treturn {\n\t\t\ttarget: \"vitepress\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \".vitepress/config.mts\", content: buildVitePressConfig(context) },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t],\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {\n\t\t\t\tvitepress: \"^2.0.0\",\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"vitepress dev\",\n\t\t\t\t\"docs:build\": \"vitepress build\",\n\t\t\t\t\"docs:preview\": \"vitepress preview\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\t// VitePress uses .md (not .mdx)\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.endsWith(\".mdx\") ? page.path.replace(/\\.mdx$/, \".md\") : page.path,\n\t\t\tcontent: addVitepressFrontmatter(page),\n\t\t\tstub: page.stub,\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \".vitepress/config.mts\",\n\t\t\t\tcontent: buildVitePressConfig(context),\n\t\t\t},\n\t\t];\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"vitepress\", \"dev\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"VitePress Dev Server\",\n\t\t\turl: \"http://localhost:5173\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn existsSync(join(outDir, \".vitepress\"));\n\t},\n};\n\n// Self-register\nregisterAdapter(vitepressAdapter);\n","import type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Derives a compact one-line signature for routing manifest entries.\n * @internal\n */\nfunction compactEntry(symbol: ForgeSymbol): string {\n\tif (symbol.signature) {\n\t\treturn symbol.signature;\n\t}\n\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\treturn `${symbol.kind} ${symbol.name}${ext}`;\n}\n\n/**\n * Generates an `llms.txt` routing manifest from the extracted symbols.\n *\n * The file follows the llms.txt specification: a compact, structured overview\n * designed to help large language models navigate a project's documentation.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsTxt } from \"@forge-ts/gen\";\n * const txt = generateLlmsTxt(symbols, config);\n * console.log(txt.startsWith(\"# \")); // true\n * ```\n * @public\n */\nexport function generateLlmsTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName}`);\n\tlines.push(`> Auto-generated API documentation`);\n\tlines.push(\"\");\n\n\t// Sections block — link to generated files\n\tlines.push(\"## Sections\");\n\tlines.push(\"\");\n\tif (config.gen.formats.includes(\"markdown\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.md): Full API documentation\");\n\t}\n\tif (config.gen.formats.includes(\"mdx\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.mdx): Full API documentation (MDX)\");\n\t}\n\tif (config.gen.llmsTxt) {\n\t\tlines.push(\"- [Full Context](./llms-full.txt): Dense context for LLM consumption\");\n\t}\n\tlines.push(\"\");\n\n\t// Quick Reference block\n\tif (exported.length > 0) {\n\t\tlines.push(\"## Quick Reference\");\n\t\tlines.push(\"\");\n\t\tfor (const symbol of exported) {\n\t\t\tconst summary = symbol.documentation?.summary ?? \"\";\n\t\t\tconst entry = compactEntry(symbol);\n\t\t\tlines.push(summary ? `${entry} - ${summary}` : entry);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a full parameter list section.\n * @internal\n */\nfunction renderParams(params: NonNullable<ForgeSymbol[\"documentation\"]>[\"params\"]): string {\n\tif (!params || params.length === 0) return \"\";\n\tconst lines: string[] = [\"\", \"Parameters:\"];\n\tfor (const p of params) {\n\t\tconst typeStr = p.type ? ` (${p.type})` : \"\";\n\t\tlines.push(`- ${p.name}${typeStr}: ${p.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a single symbol section for llms-full.txt.\n * @internal\n */\nfunction renderFullSymbol(symbol: ForgeSymbol, depth: number): string {\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst lines: string[] = [];\n\n\tlines.push(`${hashes} ${symbol.name}${ext}`);\n\n\tif (symbol.signature) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.signature);\n\t}\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(\"\");\n\t\tlines.push(`DEPRECATED: ${symbol.documentation.deprecated}`);\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.documentation.summary);\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tconst paramBlock = renderParams(params);\n\tif (paramBlock) {\n\t\tlines.push(paramBlock);\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (${symbol.documentation.returns.type})`\n\t\t\t: \"\";\n\t\tlines.push(\"\");\n\t\tlines.push(`Returns${retType}: ${symbol.documentation.returns.description}`);\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Example:\");\n\t\tfor (const ex of examples) {\n\t\t\tconst exLines = ex.code.trim().split(\"\\n\");\n\t\t\tfor (const l of exLines) {\n\t\t\t\tlines.push(` ${l}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Render children inline\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Members:\");\n\t\tfor (const child of children) {\n\t\t\tlines.push(\"\");\n\t\t\tconst childSection = renderFullSymbol(child, depth + 1);\n\t\t\t// indent child one level\n\t\t\tfor (const cl of childSection.split(\"\\n\")) {\n\t\t\t\tlines.push(cl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates an `llms-full.txt` dense context file from the extracted symbols.\n *\n * Unlike `llms.txt`, this file contains complete documentation for every\n * exported symbol, intended for LLM ingestion that requires full context.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms-full.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsFullTxt } from \"@forge-ts/gen\";\n * const fullTxt = generateLlmsFullTxt(symbols, config);\n * console.log(fullTxt.includes(\"Full Context\")); // true\n * ```\n * @public\n */\nexport function generateLlmsFullTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName} - Full Context`);\n\tlines.push(\"\");\n\tlines.push(`Root: ${config.rootDir}`);\n\tlines.push(`Generated: ${new Date().toISOString()}`);\n\tlines.push(\"\");\n\n\t// Group by kind\n\tconst kindGroups: Record<string, ForgeSymbol[]> = {};\n\tfor (const symbol of exported) {\n\t\tconst list = kindGroups[symbol.kind] ?? [];\n\t\tlist.push(symbol);\n\t\tkindGroups[symbol.kind] = list;\n\t}\n\n\tconst kindOrder: Array<ForgeSymbol[\"kind\"]> = [\n\t\t\"function\",\n\t\t\"class\",\n\t\t\"interface\",\n\t\t\"type\",\n\t\t\"enum\",\n\t\t\"variable\",\n\t];\n\n\tconst kindLabels: Record<string, string> = {\n\t\tfunction: \"Functions\",\n\t\tclass: \"Classes\",\n\t\tinterface: \"Interfaces\",\n\t\ttype: \"Types\",\n\t\tenum: \"Enums\",\n\t\tvariable: \"Variables\",\n\t};\n\n\tfor (const kind of kindOrder) {\n\t\tconst group = kindGroups[kind];\n\t\tif (!group || group.length === 0) continue;\n\n\t\tlines.push(`## ${kindLabels[kind]}`);\n\t\tlines.push(\"\");\n\n\t\tfor (const symbol of group) {\n\t\t\tlines.push(renderFullSymbol(symbol, 3));\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Options controlling Markdown output.\n * @public\n */\nexport interface MarkdownOptions {\n\t/** Whether to use MDX syntax (default: Markdown). */\n\tmdx?: boolean;\n}\n\n/** Display labels for each symbol kind. */\nconst KIND_LABELS: Record<ForgeSymbol[\"kind\"], string> = {\n\tfunction: \"Functions\",\n\tclass: \"Classes\",\n\tinterface: \"Interfaces\",\n\ttype: \"Types\",\n\tenum: \"Enums\",\n\tvariable: \"Variables\",\n\tmethod: \"Methods\",\n\tproperty: \"Properties\",\n};\n\n/** Canonical ordering for top-level kind groups. */\nconst KIND_ORDER: Array<ForgeSymbol[\"kind\"]> = [\n\t\"function\",\n\t\"class\",\n\t\"interface\",\n\t\"type\",\n\t\"enum\",\n\t\"variable\",\n];\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Build the frontmatter block for the configured SSG target. */\nfunction buildFrontmatter(config: ForgeConfig, mdx: boolean): string {\n\tconst target = config.gen.ssgTarget;\n\tif (!target) return \"\";\n\n\tconst lines: string[] = [\"---\"];\n\n\tswitch (target) {\n\t\tcase \"docusaurus\":\n\t\t\tlines.push(\"sidebar_position: 1\");\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"mintlify\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"nextra\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"description: Auto-generated API reference\");\n\t\t\tbreak;\n\t\tcase \"vitepress\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"outline: deep\");\n\t\t\tbreak;\n\t}\n\n\tlines.push(\"---\");\n\tif (mdx) {\n\t\tlines.push(\"\");\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\n/** Build MDX import block for custom components. */\nfunction buildMdxImports(): string {\n\treturn 'import { Callout } from \"@components/Callout\";\\n\\n';\n}\n\n/**\n * Render a deprecation notice banner.\n * @internal\n */\nfunction renderDeprecation(deprecated: string): string {\n\treturn `> **Deprecated**: ${deprecated}\\n`;\n}\n\n/**\n * Render source location line.\n * @internal\n */\nfunction renderSourceLink(symbol: ForgeSymbol, rootDir: string): string {\n\tconst rel = relative(rootDir, symbol.filePath);\n\treturn `_Defined in \\`${rel}:${symbol.line}\\`_\\n`;\n}\n\n/**\n * Renders a symbol at H3 level (used for both top-level and children).\n * @internal\n */\nfunction renderSymbolSection(\n\tsymbol: ForgeSymbol,\n\trootDir: string,\n\tmdx: boolean,\n\tdepth: number,\n): string {\n\tconst lines: string[] = [];\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tlines.push(`${hashes} \\`${symbol.name}${ext}\\``);\n\tlines.push(\"\");\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(renderDeprecation(symbol.documentation.deprecated));\n\t}\n\n\tlines.push(renderSourceLink(symbol, rootDir));\n\n\tif (symbol.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(symbol.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(symbol.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tlines.push(\"**Parameters**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of params) {\n\t\t\tconst typeStr = p.type ? ` (\\`${p.type}\\`)` : \"\";\n\t\t\tlines.push(`- \\`${p.name}\\`${typeStr} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (\\`${symbol.documentation.returns.type}\\`)`\n\t\t\t: \"\";\n\t\tlines.push(`**Returns**${retType}: ${symbol.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tlines.push(\"**Throws**\");\n\t\tlines.push(\"\");\n\t\tfor (const t of throws) {\n\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"**Examples**\");\n\t\tlines.push(\"\");\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\t// Render children (class members, enum values, interface properties)\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tconst childDepth = depth + 1;\n\t\tfor (const child of children) {\n\t\t\tlines.push(renderSymbolSection(child, rootDir, mdx, childDepth));\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Build a Table of Contents from grouped symbols.\n * @internal\n */\nfunction buildToc(groups: Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>): string {\n\tconst lines: string[] = [];\n\tlines.push(\"## Table of Contents\");\n\tlines.push(\"\");\n\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tconst anchor = toAnchor(label);\n\t\tlines.push(`- [${label}](#${anchor})`);\n\n\t\tfor (const symbol of group) {\n\t\t\tconst ext = kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst displayName = `${symbol.name}${ext}`;\n\t\t\tconst symAnchor = toAnchor(displayName);\n\t\t\tlines.push(` - [\\`${displayName}\\`](#${symAnchor})`);\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates a Markdown (or MDX) string from a list of symbols.\n *\n * @param symbols - The symbols to document.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Rendering options.\n * @returns The generated Markdown string.\n * @example\n * ```typescript\n * import { generateMarkdown } from \"@forge-ts/gen\";\n * const md = generateMarkdown(symbols, config, { mdx: false });\n * console.log(md.startsWith(\"# API Reference\")); // true\n * ```\n * @public\n */\nexport function generateMarkdown(\n\tsymbols: ForgeSymbol[],\n\tconfig: ForgeConfig,\n\toptions: MarkdownOptions = {},\n): string {\n\tconst mdx = options.mdx ?? false;\n\tconst exported = symbols.filter((s) => s.exported);\n\n\t// Group by kind (top-level only — children are nested under their parent)\n\tconst topLevel = exported.filter((s) => s.kind !== \"method\" && s.kind !== \"property\");\n\n\tconst groups = new Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>();\n\tfor (const symbol of topLevel) {\n\t\tconst list = groups.get(symbol.kind) ?? [];\n\t\tlist.push(symbol);\n\t\tgroups.set(symbol.kind, list);\n\t}\n\n\tconst parts: string[] = [];\n\n\t// Frontmatter\n\tconst frontmatter = buildFrontmatter(config, mdx);\n\tif (frontmatter) {\n\t\tparts.push(frontmatter);\n\t}\n\n\t// MDX imports\n\tif (mdx) {\n\t\tparts.push(buildMdxImports());\n\t}\n\n\t// Page title + preamble\n\tparts.push(\"# API Reference\\n\");\n\tparts.push(\n\t\t`Generated by [forge-ts](https://github.com/kryptobaseddev/forge-ts) from \\`${config.rootDir}\\`.\\n`,\n\t);\n\n\t// Table of Contents\n\tif (topLevel.length > 0) {\n\t\tparts.push(buildToc(groups));\n\t}\n\n\t// Symbol groups\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tparts.push(`## ${label}\\n`);\n\n\t\tfor (const symbol of group) {\n\t\t\tparts.push(renderSymbolSection(symbol, config.rootDir, mdx, 3));\n\t\t\tparts.push(\"\");\n\t\t}\n\t}\n\n\treturn `${parts\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type { ForgeSymbol } from \"@forge-ts/core\";\n\nconst SECTION_START = \"<!-- forge-ts:start -->\";\nconst SECTION_END = \"<!-- forge-ts:end -->\";\n\n/** Options controlling README sync behaviour. */\nexport interface ReadmeSyncOptions {\n\t/** Include a \"Documented with forge-ts\" badge above the API table. */\n\tbadge?: boolean;\n\t/** Include first @example from each top-level symbol. */\n\tincludeExamples?: boolean;\n}\n\n/**\n * Derives a compact type signature string for the table.\n * @internal\n */\nfunction tableSignature(symbol: ForgeSymbol): string {\n\tif (!symbol.signature) {\n\t\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\t\treturn `\\`${symbol.name}${ext}\\``;\n\t}\n\t// Keep it short: show at most 60 characters of the signature\n\tconst sig =\n\t\tsymbol.signature.length > 60 ? `${symbol.signature.slice(0, 57)}...` : symbol.signature;\n\treturn `\\`${sig}\\``;\n}\n\n/**\n * Renders the first @example block as a fenced code snippet.\n * @internal\n */\nfunction renderFirstExample(symbol: ForgeSymbol): string {\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length === 0) return \"\";\n\tconst ex = examples[0];\n\treturn [\"\", `\\`\\`\\`${ex.language}`, ex.code.trim(), \"```\"].join(\"\\n\");\n}\n\n/**\n * Builds the markdown table rows for the API overview.\n * @internal\n */\nfunction buildApiTable(symbols: ForgeSymbol[], includeExamples: boolean): string[] {\n\tconst lines: string[] = [\"| Symbol | Kind | Description |\", \"|--------|------|-------------|\"];\n\n\tfor (const s of symbols) {\n\t\tconst sig = tableSignature(s);\n\t\tconst summary = s.documentation?.summary ?? \"\";\n\t\tlines.push(`| ${sig} | ${s.kind} | ${summary} |`);\n\t}\n\n\tif (includeExamples) {\n\t\tconst withExamples = symbols.filter((s) => (s.documentation?.examples ?? []).length > 0);\n\t\tif (withExamples.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"### Examples\");\n\t\t\tfor (const s of withExamples) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tlines.push(`#### \\`${s.name}${ext}\\``);\n\t\t\t\tlines.push(renderFirstExample(s));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines;\n}\n\n/**\n * Injects a summary of exported symbols into a `README.md` file.\n *\n * The content is placed between `<!-- forge-ts:start -->` and\n * `<!-- forge-ts:end -->` comment markers. If neither marker exists, the\n * summary is appended to the end of the file.\n *\n * @param readmePath - Absolute path to the `README.md` to update.\n * @param symbols - Symbols to summarise in the README.\n * @param options - Options controlling sync behaviour.\n * @returns `true` if the file was modified, `false` otherwise.\n * @example\n * ```typescript\n * import { syncReadme } from \"@forge-ts/gen\";\n * const modified = await syncReadme(\"/path/to/README.md\", symbols);\n * console.log(modified); // true if README was updated\n * ```\n * @public\n */\nexport async function syncReadme(\n\treadmePath: string,\n\tsymbols: ForgeSymbol[],\n\toptions: ReadmeSyncOptions = {},\n): Promise<boolean> {\n\tconst exported = symbols.filter((s) => s.exported);\n\tif (exported.length === 0) return false;\n\n\tconst badge = options.badge ?? false;\n\tconst includeExamples = options.includeExamples ?? false;\n\n\tconst innerLines: string[] = [];\n\tinnerLines.push(\"## API Overview\");\n\tinnerLines.push(\"\");\n\n\tif (badge) {\n\t\tinnerLines.push(\n\t\t\t\"[](https://github.com/forge-ts/forge-ts)\",\n\t\t);\n\t\tinnerLines.push(\"\");\n\t}\n\n\tinnerLines.push(...buildApiTable(exported, includeExamples));\n\n\tconst summaryLines = [SECTION_START, \"\", ...innerLines, \"\", SECTION_END];\n\tconst injection = summaryLines.join(\"\\n\");\n\n\tlet existing = existsSync(readmePath) ? await readFile(readmePath, \"utf8\") : \"\";\n\n\tconst startIdx = existing.indexOf(SECTION_START);\n\tconst endIdx = existing.indexOf(SECTION_END);\n\n\tif (startIdx !== -1 && endIdx !== -1) {\n\t\texisting =\n\t\t\texisting.slice(0, startIdx) + injection + existing.slice(endIdx + SECTION_END.length);\n\t} else {\n\t\texisting = `${existing.trimEnd()}\\n\\n${injection}\\n`;\n\t}\n\n\tawait writeFile(readmePath, existing, \"utf8\");\n\treturn true;\n}\n","import { basename, relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * A single generated documentation page.\n * @public\n */\nexport interface DocPage {\n\t/** Relative path from outDir (e.g., \"packages/core/index.md\") */\n\tpath: string;\n\t/** Page content (Markdown or MDX) */\n\tcontent: string;\n\t/** Frontmatter fields */\n\tfrontmatter: Record<string, string | number | boolean>;\n\t/**\n\t * When true, this page is scaffolding intended for human/agent editing.\n\t * Stub pages are created only on the first build and never overwritten,\n\t * preserving manual edits across subsequent `forge-ts build` runs.\n\t * Auto-generated pages (stub=false) are always regenerated from source.\n\t */\n\tstub?: boolean;\n}\n\n/**\n * Options controlling the doc site generator.\n * @public\n */\nexport interface SiteGeneratorOptions {\n\t/** Output format */\n\tformat: \"markdown\" | \"mdx\";\n\t/** SSG target for frontmatter */\n\tssgTarget?: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\";\n\t/** Project name */\n\tprojectName: string;\n\t/** Project description */\n\tprojectDescription?: string;\n\t/** Repository URL (auto-detected from package.json). */\n\trepositoryUrl?: string;\n\t/** npm package name for install commands. */\n\tpackageName?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Escape pipe characters for use inside Markdown table cells. */\nfunction escapePipe(text: string): string {\n\treturn text.replace(/\\|/g, \"\\\\|\");\n}\n\n/** Build a frontmatter block string from the fields map. */\nfunction serializeFrontmatter(fields: Record<string, string | number | boolean>): string {\n\tif (Object.keys(fields).length === 0) return \"\";\n\tconst lines = [\"---\"];\n\tfor (const [key, value] of Object.entries(fields)) {\n\t\tlines.push(`${key}: ${value}`);\n\t}\n\tlines.push(\"---\");\n\treturn `${lines.join(\"\\n\")}\\n\\n`;\n}\n\n/**\n * Build frontmatter fields for the given SSG target.\n * @internal\n */\nfunction buildFrontmatterFields(\n\ttitle: string,\n\tdescription: string,\n\tssgTarget: SiteGeneratorOptions[\"ssgTarget\"],\n\tsidebarPosition?: number,\n): Record<string, string | number | boolean> {\n\tif (!ssgTarget) return {};\n\n\tswitch (ssgTarget) {\n\t\tcase \"docusaurus\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = {\n\t\t\t\ttitle,\n\t\t\t\tsidebar_label: title,\n\t\t\t};\n\t\t\tif (sidebarPosition !== undefined) {\n\t\t\t\tfields.sidebar_position = sidebarPosition;\n\t\t\t}\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"mintlify\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"nextra\":\n\t\t\treturn { title };\n\t\tcase \"vitepress\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title, outline: \"deep\" };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tdefault:\n\t\t\treturn {};\n\t}\n}\n\n/**\n * Strip `.md` or `.mdx` extension from a link path and normalise leading `./`.\n * Produces bare slug links compatible with Mintlify and most other SSGs.\n * @internal\n */\nfunction slugLink(path: string): string {\n\t// Remove leading ./ if present\n\tlet slug = path.startsWith(\"./\") ? path.slice(2) : path;\n\t// Remove .md / .mdx extension\n\tslug = slug.replace(/\\.(mdx?)$/, \"\");\n\treturn `/${slug}`;\n}\n\n/** Truncate a description to at most maxLen chars. */\nfunction truncate(text: string, maxLen = 80): string {\n\tif (text.length <= maxLen) return text;\n\treturn `${text.slice(0, maxLen - 3)}...`;\n}\n\n// ---------------------------------------------------------------------------\n// Package grouping\n// ---------------------------------------------------------------------------\n\n/**\n * Groups symbols by their package based on file path.\n *\n * For monorepos (symbols under `packages/<name>/`) the package name is\n * derived from the directory segment immediately after `packages/`.\n * For non-monorepo projects all symbols fall under the project name.\n *\n * @param symbols - All extracted symbols.\n * @param rootDir - Absolute path to the project root.\n * @returns A map from package name to symbol list.\n * @example\n * ```typescript\n * import { groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, \"/path/to/project\");\n * console.log(grouped.has(\"core\")); // true for monorepo\n * ```\n * @public\n */\nexport function groupSymbolsByPackage(\n\tsymbols: ForgeSymbol[],\n\trootDir: string,\n): Map<string, ForgeSymbol[]> {\n\tconst result = new Map<string, ForgeSymbol[]>();\n\n\tfor (const symbol of symbols) {\n\t\tconst rel = relative(rootDir, symbol.filePath);\n\t\t// Detect monorepo structure: packages/<name>/...\n\t\tconst monorepoMatch = /^packages[\\\\/]([^\\\\/]+)[\\\\/]/.exec(rel);\n\t\tconst packageName = monorepoMatch ? monorepoMatch[1] : basename(rootDir);\n\n\t\tconst list = result.get(packageName) ?? [];\n\t\tlist.push(symbol);\n\t\tresult.set(packageName, list);\n\t}\n\n\treturn result;\n}\n\n// ---------------------------------------------------------------------------\n// Symbol kind sets\n// ---------------------------------------------------------------------------\n\nconst TYPE_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"interface\", \"type\", \"enum\"]);\n\nconst FUNCTION_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"function\", \"class\"]);\n\n// ---------------------------------------------------------------------------\n// ORIENT: Landing page (index)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the root landing page following the 5-stage information architecture.\n *\n * Structure: intro sentence, Features, Installation, Quick Example, Packages table, Next Steps.\n * @internal\n */\nfunction renderProjectIndexPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\tconst lines: string[] = [];\n\n\t// Intro — no h1, frontmatter title handles the heading\n\tif (options.projectDescription) {\n\t\tlines.push(`**${options.projectName}** — ${options.projectDescription}`);\n\t} else {\n\t\tlines.push(\n\t\t\t`**${options.projectName}** is a TypeScript documentation toolkit that performs a single AST traversal of your project and produces API docs, OpenAPI specs, executable doctests, and AI context files in one pass.`,\n\t\t);\n\t}\n\tlines.push(\"\");\n\n\t// Features section\n\tlines.push(\"## Features\");\n\tlines.push(\"\");\n\n\tconst pkgCount = symbolsByPackage.size;\n\tif (pkgCount > 1) {\n\t\tlines.push(`- ${pkgCount} packages with full TypeScript support`);\n\t} else {\n\t\tlines.push(\"- Full TypeScript support with TSDoc extraction\");\n\t}\n\tlines.push(\"- Auto-generated API reference from source code\");\n\tlines.push(\"- Executable `@example` blocks as doctests\");\n\tlines.push(\"- AI-ready context files from a single build pass\");\n\tlines.push(\"\");\n\n\t// Installation section\n\tlines.push(\"## Installation\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install -D ${options.packageName ?? \"@forge-ts/cli\"}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\t// Quick Example — first @example from any exported function\n\tlet firstExample: { code: string; language: string } | undefined;\n\touter: for (const [, symbols] of symbolsByPackage) {\n\t\tfor (const s of symbols) {\n\t\t\tif (!s.exported || s.kind !== \"function\") continue;\n\t\t\tconst ex = s.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tfirstExample = ex;\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (firstExample) {\n\t\tlines.push(\"## Quick Example\");\n\t\tlines.push(\"\");\n\t\tlines.push(`\\`\\`\\`${firstExample.language || \"typescript\"}`);\n\t\tlines.push(firstExample.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\t// Packages table\n\tif (symbolsByPackage.size > 0) {\n\t\tlines.push(\"## Packages\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"| Package | Description |\");\n\t\tlines.push(\"|---------|-------------|\");\n\t\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\t\tconst pkgDoc = symbols\n\t\t\t\t.map((s) => s.documentation?.tags?.packageDocumentation?.[0])\n\t\t\t\t.find(Boolean);\n\t\t\tconst exported = symbols.filter(\n\t\t\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t\t\t);\n\t\t\tconst rawDesc = pkgDoc ?? `${exported.length} exported symbol(s).`;\n\t\t\tconst desc = escapePipe(truncate(rawDesc));\n\t\t\tconst link = `[\\`${pkgName}\\`](${slugLink(`packages/${pkgName}/index`)})`;\n\t\t\tlines.push(`| ${link} | ${desc} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\t// Next Steps\n\tlines.push(\"## Next Steps\");\n\tlines.push(\"\");\n\tlines.push(`- [Getting Started](/getting-started) — Step-by-step guide`);\n\tlines.push(`- [API Reference](/packages) — Full API documentation`);\n\tlines.push(`- [Concepts](/concepts) — How it works`);\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// ORIENT: Getting Started (tutorial)\n// ---------------------------------------------------------------------------\n\n/**\n * Render a step-by-step getting started tutorial page.\n * @internal\n */\nfunction renderGettingStartedPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\t// Find the first exported function with an example\n\tlet firstExample: { code: string; language: string } | undefined;\n\n\touter: for (const [, symbols] of symbolsByPackage) {\n\t\tfor (const s of symbols) {\n\t\t\tif (!s.exported || s.kind !== \"function\") continue;\n\t\t\tconst ex = s.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tfirstExample = ex;\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst lines: string[] = [];\n\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(`Get up and running with **${options.projectName}** in minutes.`);\n\n\tif (options.projectDescription) {\n\t\tlines.push(\"\");\n\t\tlines.push(options.projectDescription);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\"## Step 1: Install\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install -D ${options.packageName ?? \"@forge-ts/cli\"}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tlines.push(\"## Step 2: Add TSDoc to your code\");\n\tlines.push(\"\");\n\tlines.push(\"Add TSDoc comments to your exported functions and types:\");\n\tlines.push(\"\");\n\tlines.push(\"```typescript\");\n\tlines.push(\"/**\");\n\tlines.push(\" * Adds two numbers together.\");\n\tlines.push(\" * @param a - First number\");\n\tlines.push(\" * @param b - Second number\");\n\tlines.push(\" * @returns The sum of a and b\");\n\tlines.push(\" * @example\");\n\tlines.push(\" * ```typescript\");\n\tlines.push(\" * const result = add(1, 2); // => 3\");\n\tlines.push(\" * ```\");\n\tlines.push(\" */\");\n\tlines.push(\"export function add(a: number, b: number): number {\");\n\tlines.push(\" return a + b;\");\n\tlines.push(\"}\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tlines.push(\"## Step 3: Run forge-ts check\");\n\tlines.push(\"\");\n\tlines.push(\"Lint your TSDoc coverage before generating docs:\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(\"npx forge-ts check\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\tlines.push(\"Expected output:\");\n\tlines.push(\"\");\n\tlines.push(\"```\");\n\tlines.push(\"forge-ts: checking TSDoc coverage...\");\n\tlines.push(\" ✓ All public symbols documented\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tlines.push(\"## Step 4: Generate docs\");\n\tlines.push(\"\");\n\tlines.push(\"Build your documentation site:\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(\"npx forge-ts build\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tif (firstExample) {\n\t\tlines.push(\"Your code examples become live documentation:\");\n\t\tlines.push(\"\");\n\t\tlines.push(`\\`\\`\\`${firstExample.language || \"typescript\"}`);\n\t\tlines.push(firstExample.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## What's Next?\");\n\tlines.push(\"\");\n\tlines.push(\"- [Concepts](/concepts) — Understand how forge-ts works\");\n\tlines.push(\"- [API Reference](/packages) — Full API documentation\");\n\tlines.push(\"- [Guides](/guides) — Practical how-to guides\");\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// LEARN: Concepts (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the concepts stub page with key abstractions from package docs.\n * @internal\n */\nfunction renderConceptsPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\tconst lines: string[] = [];\n\n\tlines.push(`This page explains the core concepts behind **${options.projectName}**.`);\n\tlines.push(\"\");\n\tlines.push(\n\t\t\"> This is a stub page. Edit this file to add your project's conceptual documentation.\",\n\t);\n\tlines.push(\"> Auto-generated sections below (inside FORGE:AUTO markers) update on every build.\");\n\tlines.push(\"\");\n\n\t// Auto-enriched section: How It Works — regenerated even in existing stubs\n\tconst pkgDoc = [...symbolsByPackage.values()]\n\t\t.flatMap((syms) => syms.map((s) => s.documentation?.tags?.packageDocumentation?.[0]))\n\t\t.find(Boolean);\n\n\tlines.push(\"<!-- FORGE:AUTO-START how-it-works -->\");\n\tlines.push(\"## How It Works\");\n\tlines.push(\"\");\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t} else {\n\t\tlines.push(\n\t\t\t`${options.projectName} processes your TypeScript source with a single AST traversal, extracting TSDoc comments and type information to generate documentation.`,\n\t\t);\n\t}\n\tlines.push(\"\");\n\tlines.push(\"<!-- FORGE:AUTO-END how-it-works -->\");\n\tlines.push(\"\");\n\n\t// Auto-enriched section: Key Abstractions — regenerated even in existing stubs\n\tconst allTypeSymbols = [...symbolsByPackage.values()]\n\t\t.flat()\n\t\t.filter((s) => s.exported && TYPE_KINDS.has(s.kind));\n\n\tif (allTypeSymbols.length > 0) {\n\t\tlines.push(\"<!-- FORGE:AUTO-START key-abstractions -->\");\n\t\tlines.push(\"## Key Abstractions\");\n\t\tlines.push(\"\");\n\t\tfor (const s of allTypeSymbols) {\n\t\t\tconst desc = s.documentation?.summary ?? `The \\`${s.name}\\` ${s.kind}.`;\n\t\t\tlines.push(`- **\\`${s.name}\\`** — ${desc}`);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"<!-- FORGE:AUTO-END key-abstractions -->\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// BUILD: Guides index (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the guides index stub page.\n * @internal\n */\nfunction renderGuidesIndexPage(): string {\n\treturn [\n\t\t\"Practical how-to guides for common tasks.\",\n\t\t\"\",\n\t\t\"> Add your guides to the `guides/` directory. Each `.md` or `.mdx` file will appear here automatically.\",\n\t\t\"\",\n\t\t\"## Getting Things Done\",\n\t\t\"\",\n\t\t\"Guides will appear here as you add them. Start by creating a file like `guides/my-guide.md`.\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Package API overview (api/index)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the API overview page for a package — a full symbol table.\n * @internal\n */\nfunction renderApiIndexPage(pkgName: string, symbols: ForgeSymbol[]): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst functions = exported.filter((s) => FUNCTION_KINDS.has(s.kind));\n\tconst types = exported.filter((s) => TYPE_KINDS.has(s.kind));\n\tconst others = exported.filter((s) => !FUNCTION_KINDS.has(s.kind) && !TYPE_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\n\t// Find @packageDocumentation summary\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t\tlines.push(\"\");\n\t} else {\n\t\tlines.push(`API reference for the \\`${pkgName}\\` package.`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst renderGroup = (group: ForgeSymbol[], heading: string, pathSuffix: string) => {\n\t\tif (group.length === 0) return;\n\t\tlines.push(`## ${heading}`);\n\t\tlines.push(\"\");\n\t\tlines.push(\"| Symbol | Kind | Description |\");\n\t\tlines.push(\"|--------|------|-------------|\");\n\t\tfor (const s of group) {\n\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst anchor = toAnchor(`${s.name}${ext}`);\n\t\t\tconst link = `[\\`${s.name}${ext}\\`](${slugLink(`packages/${pkgName}/${pathSuffix}`)}#${anchor})`;\n\t\t\tconst rawSummary = s.documentation?.summary ?? \"\";\n\t\t\tconst summary = escapePipe(truncate(rawSummary));\n\t\t\tlines.push(`| ${link} | ${s.kind} | ${summary} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t};\n\n\trenderGroup(functions, \"Functions & Classes\", \"api/functions\");\n\trenderGroup(types, \"Types & Interfaces\", \"api/types\");\n\trenderGroup(others, \"Other Exports\", \"api/functions\");\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Package overview (packages/<name>/index)\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the overview (index) page for a package.\n * @internal\n */\nfunction renderPackageOverviewPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\t// Find @packageDocumentation summary from tags\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\n\tconst lines: string[] = [];\n\n\t// No h1 — frontmatter title handles the heading in Mintlify and other SSGs\n\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t\tlines.push(\"\");\n\t}\n\n\tif (exported.length > 0) {\n\t\t// Group by kind: functions first, then types, then others\n\t\tconst functions = exported.filter((s) => FUNCTION_KINDS.has(s.kind));\n\t\tconst types = exported.filter((s) => TYPE_KINDS.has(s.kind));\n\t\tconst others = exported.filter((s) => !FUNCTION_KINDS.has(s.kind) && !TYPE_KINDS.has(s.kind));\n\n\t\tconst renderGroup = (group: ForgeSymbol[], heading: string) => {\n\t\t\tif (group.length === 0) return;\n\t\t\tlines.push(`## ${heading}`);\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"| Symbol | Kind | Description |\");\n\t\t\tlines.push(\"|--------|------|-------------|\");\n\t\t\tfor (const s of group) {\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tconst name = `[\\`${s.name}${ext}\\`](${slugLink(`packages/${packageName}/api/index`)}#${toAnchor(`${s.name}${ext}`)})`;\n\t\t\t\tconst rawSummary = s.documentation?.summary ?? \"\";\n\t\t\t\tconst summary = escapePipe(truncate(rawSummary));\n\t\t\t\tlines.push(`| ${name} | ${s.kind} | ${summary} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t};\n\n\t\trenderGroup(functions, \"Functions & Classes\");\n\t\trenderGroup(types, \"Types & Interfaces\");\n\t\trenderGroup(others, \"Other Exports\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Types page\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the types page for a package (interfaces, type aliases, enums).\n * @internal\n */\nfunction renderTypesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst typeSymbols = symbols.filter((s) => s.exported && TYPE_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(\"Type contracts exported by this package: interfaces, type aliases, and enums.\");\n\tlines.push(\"\");\n\n\tfor (const s of typeSymbols) {\n\t\tlines.push(`## ${s.name}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature && s.kind !== \"interface\") {\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst children = (s.children ?? []).filter((c) => c.kind === \"property\" || c.kind === \"method\");\n\n\t\tif (children.length > 0) {\n\t\t\tlines.push(\"| Property | Type | Required | Description |\");\n\t\t\tlines.push(\"|----------|------|----------|-------------|\");\n\t\t\tfor (const child of children) {\n\t\t\t\tconst name = `\\`${child.name}\\``;\n\t\t\t\tconst type = child.signature ? `\\`${escapePipe(child.signature)}\\`` : \"—\";\n\t\t\t\tconst optional =\n\t\t\t\t\tchild.signature?.includes(\"?\") || child.signature?.includes(\"undefined\") ? \"No\" : \"Yes\";\n\t\t\t\tconst description = escapePipe(child.documentation?.summary || child.name);\n\t\t\t\tlines.push(`| ${name} | ${type} | ${optional} | ${description} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\t// Suppress unused variable warning\n\tvoid packageName;\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Functions page\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the functions page for a package (functions and classes).\n * @internal\n */\nfunction renderFunctionsPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst fnSymbols = symbols.filter((s) => s.exported && FUNCTION_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(\"Functions and classes exported by this package.\");\n\tlines.push(\"\");\n\n\tfor (const s of fnSymbols) {\n\t\tconst paramSig =\n\t\t\ts.kind === \"function\" && s.documentation?.params\n\t\t\t\t? s.documentation.params.map((p) => p.name).join(\", \")\n\t\t\t\t: \"\";\n\t\tconst heading = s.kind === \"function\" ? `${s.name}(${paramSig})` : s.name;\n\n\t\tlines.push(`## ${heading}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature) {\n\t\t\tlines.push(\"**Signature**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst params = s.documentation?.params ?? [];\n\t\tif (params.length > 0) {\n\t\t\tlines.push(\"**Parameters**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"| Name | Type | Description |\");\n\t\t\tlines.push(\"|------|------|-------------|\");\n\t\t\tfor (const p of params) {\n\t\t\t\t// Fall back to extracting type from signature when param.type is absent\n\t\t\t\tlet resolvedType = p.type;\n\t\t\t\tif (!resolvedType && s.signature) {\n\t\t\t\t\t// Try to match `paramName: SomeType` in the signature\n\t\t\t\t\tconst typeMatch = new RegExp(`\\\\b${p.name}\\\\s*[?:]\\\\s*([^,)]+)`).exec(s.signature);\n\t\t\t\t\tif (typeMatch) {\n\t\t\t\t\t\tresolvedType = typeMatch[1].trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst type = resolvedType ? `\\`${escapePipe(resolvedType)}\\`` : \"—\";\n\t\t\t\tlines.push(`| \\`${p.name}\\` | ${type} | ${escapePipe(p.description)} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.returns) {\n\t\t\tconst retType = s.documentation.returns.type ? ` \\`${s.documentation.returns.type}\\`` : \"\";\n\t\t\tlines.push(`**Returns**${retType} — ${s.documentation.returns.description}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst throws = s.documentation?.throws ?? [];\n\t\tif (throws.length > 0) {\n\t\t\tlines.push(\"**Throws**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const t of throws) {\n\t\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length > 0) {\n\t\t\tconst ex = examples[0];\n\t\t\tlines.push(\"**Example**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`\\`\\`\\`${ex.language || \"typescript\"}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\t// Render class methods\n\t\tconst methods = (s.children ?? []).filter((c) => c.kind === \"method\");\n\t\tif (methods.length > 0) {\n\t\t\tlines.push(\"**Methods**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const method of methods) {\n\t\t\t\tlines.push(`### ${method.name}()`);\n\t\t\t\tlines.push(\"\");\n\t\t\t\tif (method.documentation?.summary) {\n\t\t\t\t\tlines.push(method.documentation.summary);\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t\tif (method.signature) {\n\t\t\t\t\tlines.push(\"```typescript\");\n\t\t\t\t\tlines.push(method.signature);\n\t\t\t\t\tlines.push(\"```\");\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Suppress unused variable warning\n\tvoid packageName;\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Examples page\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the examples page for a package — aggregates all @example blocks.\n * @internal\n */\nfunction renderExamplesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst lines: string[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(\"All usage examples from the package, aggregated for quick reference.\");\n\tlines.push(\"\");\n\n\tlet hasExamples = false;\n\n\tfor (const s of exported) {\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length === 0) continue;\n\n\t\thasExamples = true;\n\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\tlines.push(`## \\`${s.name}${ext}\\``);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(`_${s.documentation.summary}_`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(\n\t\t\t`[View in API reference](${slugLink(`packages/${packageName}/api/functions`)}#${toAnchor(s.name)})`,\n\t\t);\n\t\tlines.push(\"\");\n\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language || \"typescript\"}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\tif (!hasExamples) {\n\t\tlines.push(\"_No examples documented yet._\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Configuration page\n// ---------------------------------------------------------------------------\n\n/**\n * Render the configuration reference page.\n * @internal\n */\nfunction renderConfigurationPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\t// Look for a ForgeConfig-like type across all packages\n\tconst configSymbol = [...symbolsByPackage.values()]\n\t\t.flat()\n\t\t.find((s) => s.exported && TYPE_KINDS.has(s.kind) && /config/i.test(s.name));\n\n\tconst lines: string[] = [];\n\n\tlines.push(`Configuration reference for **${options.projectName}**.`);\n\tlines.push(\"\");\n\tlines.push(\"## forge-ts.config.ts\");\n\tlines.push(\"\");\n\tlines.push(\"Create a `forge-ts.config.ts` file in your project root:\");\n\tlines.push(\"\");\n\tlines.push(\"```typescript\");\n\tlines.push('import { defineConfig } from \"@forge-ts/core\";');\n\tlines.push(\"\");\n\tlines.push(\"export default defineConfig({\");\n\tlines.push(' rootDir: \".\",');\n\tlines.push(' outDir: \"docs/generated\",');\n\tlines.push(\"});\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tif (configSymbol) {\n\t\tlines.push(`## \\`${configSymbol.name}\\``);\n\t\tlines.push(\"\");\n\t\tif (configSymbol.documentation?.summary) {\n\t\t\tlines.push(configSymbol.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tconst children = (configSymbol.children ?? []).filter(\n\t\t\t(c) => c.kind === \"property\" || c.kind === \"method\",\n\t\t);\n\t\tif (children.length > 0) {\n\t\t\tlines.push(\"| Property | Type | Required | Description |\");\n\t\t\tlines.push(\"|----------|------|----------|-------------|\");\n\t\t\tfor (const child of children) {\n\t\t\t\tconst name = `\\`${child.name}\\``;\n\t\t\t\tconst type = child.signature ? `\\`${escapePipe(child.signature)}\\`` : \"—\";\n\t\t\t\tconst optional =\n\t\t\t\t\tchild.signature?.includes(\"?\") || child.signature?.includes(\"undefined\") ? \"No\" : \"Yes\";\n\t\t\t\tconst description = escapePipe(child.documentation?.summary || child.name);\n\t\t\t\tlines.push(`| ${name} | ${type} | ${optional} | ${description} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Changelog (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the changelog stub page.\n * @internal\n */\nfunction renderChangelogPage(options: SiteGeneratorOptions): string {\n\tconst repoUrl = options.repositoryUrl ?? \"\";\n\tconst changelogLink = repoUrl\n\t\t? `See [CHANGELOG.md](${repoUrl}/blob/main/CHANGELOG.md) for the full release history.`\n\t\t: \"See your project's `CHANGELOG.md` for the full release history.\";\n\treturn [\n\t\t`Release history for **${options.projectName}**.`,\n\t\t\"\",\n\t\t\"> This is a stub page. Link to or embed your `CHANGELOG.md` here.\",\n\t\t\"\",\n\t\tchangelogLink,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// COMMUNITY: FAQ (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the FAQ stub page.\n * @internal\n */\nfunction renderFaqPage(options: SiteGeneratorOptions): string {\n\treturn [\n\t\t`Frequently asked questions about **${options.projectName}**.`,\n\t\t\"\",\n\t\t\"> This is a stub page. Common questions will be added here as they arise.\",\n\t\t\"\",\n\t\t\"## How do I configure forge-ts?\",\n\t\t\"\",\n\t\t\"Create a `forge-ts.config.ts` file in your project root. See [Configuration](/configuration).\",\n\t\t\"\",\n\t\t\"## What TypeScript version is required?\",\n\t\t\"\",\n\t\t\"forge-ts requires TypeScript 5.0 or later.\",\n\t\t\"\",\n\t\t\"## How do I run @example blocks as tests?\",\n\t\t\"\",\n\t\t\"```bash\",\n\t\t\"npx forge-ts test\",\n\t\t\"```\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// COMMUNITY: Contributing (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the contributing stub page.\n * @internal\n */\nfunction renderContributingPage(options: SiteGeneratorOptions): string {\n\tconst repoUrl = options.repositoryUrl ?? \"\";\n\tconst contribLink = repoUrl\n\t\t? `See [CONTRIBUTING.md](${repoUrl}/blob/main/CONTRIBUTING.md) for contribution guidelines.`\n\t\t: \"See your project's `CONTRIBUTING.md` for contribution guidelines.\";\n\treturn [\n\t\t`Contributing to **${options.projectName}**.`,\n\t\t\"\",\n\t\t\"> This is a stub page. Link to or embed your `CONTRIBUTING.md` here.\",\n\t\t\"\",\n\t\tcontribLink,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generates a full multi-page documentation site from symbols grouped by package.\n *\n * Follows a 5-stage information architecture:\n * 1. ORIENT — Landing page, Getting Started\n * 2. LEARN — Concepts (stub)\n * 3. BUILD — Guides (stub)\n * 4. REFERENCE — API Reference, Types, Configuration, Changelog\n * 5. COMMUNITY — FAQ, Contributing (stubs)\n *\n * @param symbolsByPackage - Symbols grouped by package name.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Site generation options.\n * @returns An array of {@link DocPage} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateDocSite, groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, config.rootDir);\n * const pages = generateDocSite(grouped, config, { format: \"markdown\", projectName: \"my-project\" });\n * console.log(pages.length > 0); // true\n * ```\n * @public\n */\nexport function generateDocSite(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\tconfig: ForgeConfig,\n\toptions: SiteGeneratorOptions,\n): DocPage[] {\n\tconst ext = options.format === \"mdx\" ? \"mdx\" : \"md\";\n\tconst pages: DocPage[] = [];\n\n\t// -------------------------------------------------------------------------\n\t// ORIENT\n\t// -------------------------------------------------------------------------\n\n\t// Project landing page\n\tconst indexContent = renderProjectIndexPage(symbolsByPackage, options);\n\tconst indexFrontmatter = buildFrontmatterFields(\n\t\toptions.projectName,\n\t\toptions.projectDescription ?? \"\",\n\t\toptions.ssgTarget,\n\t\t1,\n\t);\n\tpages.push({\n\t\tpath: `index.${ext}`,\n\t\tcontent: `${serializeFrontmatter(indexFrontmatter)}${indexContent.trimEnd()}\\n`,\n\t\tfrontmatter: indexFrontmatter,\n\t});\n\n\t// Getting started\n\tconst gettingStartedContent = renderGettingStartedPage(symbolsByPackage, options);\n\tconst gettingStartedFrontmatter = buildFrontmatterFields(\n\t\t\"Getting Started\",\n\t\t`Quick start guide for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t2,\n\t);\n\tpages.push({\n\t\tpath: `getting-started.${ext}`,\n\t\tcontent: `${serializeFrontmatter(gettingStartedFrontmatter)}${gettingStartedContent.trimEnd()}\\n`,\n\t\tfrontmatter: gettingStartedFrontmatter,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// LEARN\n\t// -------------------------------------------------------------------------\n\n\tconst conceptsContent = renderConceptsPage(symbolsByPackage, options);\n\tconst conceptsFrontmatter = buildFrontmatterFields(\n\t\t\"Concepts\",\n\t\t`Core concepts behind ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t3,\n\t);\n\tpages.push({\n\t\tpath: `concepts.${ext}`,\n\t\tcontent: `${serializeFrontmatter(conceptsFrontmatter)}${conceptsContent.trimEnd()}\\n`,\n\t\tfrontmatter: conceptsFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// BUILD\n\t// -------------------------------------------------------------------------\n\n\tconst guidesContent = renderGuidesIndexPage();\n\tconst guidesFrontmatter = buildFrontmatterFields(\n\t\t\"Guides\",\n\t\t`How-to guides for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t4,\n\t);\n\tpages.push({\n\t\tpath: `guides/index.${ext}`,\n\t\tcontent: `${serializeFrontmatter(guidesFrontmatter)}${guidesContent.trimEnd()}\\n`,\n\t\tfrontmatter: guidesFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// REFERENCE — per-package pages\n\t// -------------------------------------------------------------------------\n\n\tlet pkgPosition = 1;\n\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\tconst pkgBase = `packages/${pkgName}`;\n\n\t\t// Package overview index\n\t\tconst overviewContent = renderPackageOverviewPage(pkgName, symbols, options);\n\t\tconst overviewFrontmatter = buildFrontmatterFields(\n\t\t\tpkgName,\n\t\t\t`${pkgName} package overview`,\n\t\t\toptions.ssgTarget,\n\t\t\tpkgPosition,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/index.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(overviewFrontmatter)}${overviewContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: overviewFrontmatter,\n\t\t});\n\n\t\t// api/index — symbol table overview\n\t\tconst apiIndexContent = renderApiIndexPage(pkgName, symbols);\n\t\tconst apiIndexFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — API Reference`,\n\t\t\t`Full API reference for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/index.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(apiIndexFrontmatter)}${apiIndexContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: apiIndexFrontmatter,\n\t\t});\n\n\t\t// api/functions\n\t\tconst functionsContent = renderFunctionsPage(pkgName, symbols, options);\n\t\tconst functionsFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Functions`,\n\t\t\t`Functions and classes for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/functions.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(functionsFrontmatter)}${functionsContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: functionsFrontmatter,\n\t\t});\n\n\t\t// api/types\n\t\tconst typesContent = renderTypesPage(pkgName, symbols, options);\n\t\tconst typesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Types`,\n\t\t\t`Type contracts for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/types.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(typesFrontmatter)}${typesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: typesFrontmatter,\n\t\t});\n\n\t\t// api/examples\n\t\tconst examplesContent = renderExamplesPage(pkgName, symbols, options);\n\t\tconst examplesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Examples`,\n\t\t\t`Usage examples for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/examples.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(examplesFrontmatter)}${examplesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: examplesFrontmatter,\n\t\t});\n\n\t\tpkgPosition++;\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// REFERENCE — project-level\n\t// -------------------------------------------------------------------------\n\n\tconst configContent = renderConfigurationPage(symbolsByPackage, options);\n\tconst configFrontmatter = buildFrontmatterFields(\n\t\t\"Configuration\",\n\t\t`Configuration reference for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `configuration.${ext}`,\n\t\tcontent: `${serializeFrontmatter(configFrontmatter)}${configContent.trimEnd()}\\n`,\n\t\tfrontmatter: configFrontmatter,\n\t});\n\n\tconst changelogContent = renderChangelogPage(options);\n\tconst changelogFrontmatter = buildFrontmatterFields(\n\t\t\"Changelog\",\n\t\t`Release history for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `changelog.${ext}`,\n\t\tcontent: `${serializeFrontmatter(changelogFrontmatter)}${changelogContent.trimEnd()}\\n`,\n\t\tfrontmatter: changelogFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// COMMUNITY\n\t// -------------------------------------------------------------------------\n\n\tconst faqContent = renderFaqPage(options);\n\tconst faqFrontmatter = buildFrontmatterFields(\n\t\t\"FAQ\",\n\t\t`Frequently asked questions about ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `faq.${ext}`,\n\t\tcontent: `${serializeFrontmatter(faqFrontmatter)}${faqContent.trimEnd()}\\n`,\n\t\tfrontmatter: faqFrontmatter,\n\t\tstub: true,\n\t});\n\n\tconst contributingContent = renderContributingPage(options);\n\tconst contributingFrontmatter = buildFrontmatterFields(\n\t\t\"Contributing\",\n\t\t`How to contribute to ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `contributing.${ext}`,\n\t\tcontent: `${serializeFrontmatter(contributingFrontmatter)}${contributingContent.trimEnd()}\\n`,\n\t\tfrontmatter: contributingFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// Suppress unused variable warning — config is available for future use\n\tvoid config;\n\n\treturn pages;\n}\n","import type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Returns a compact one-line type description for a symbol.\n * @internal\n */\nfunction kindLabel(kind: ForgeSymbol[\"kind\"]): string {\n\tconst labels: Record<ForgeSymbol[\"kind\"], string> = {\n\t\tfunction: \"function\",\n\t\tclass: \"class\",\n\t\tinterface: \"interface\",\n\t\ttype: \"type alias\",\n\t\tenum: \"enum\",\n\t\tvariable: \"constant\",\n\t\tmethod: \"method\",\n\t\tproperty: \"property\",\n\t};\n\treturn labels[kind];\n}\n\n/**\n * Converts a package name or project name to a lowercase-hyphenated slug\n * valid for agentskills.io directory names (max 64 chars, hyphens only).\n * @internal\n */\nfunction toDirectoryName(name: string): string {\n\treturn name\n\t\t.replace(/^@[^/]+\\//, \"\") // strip npm scope\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 64);\n}\n\n/**\n * Returns true when `kind` is a concept-level declaration.\n * @internal\n */\nfunction isConceptKind(kind: ForgeSymbol[\"kind\"]): boolean {\n\treturn kind === \"interface\" || kind === \"type\" || kind === \"class\" || kind === \"enum\";\n}\n\n/**\n * Returns the primary CLI command name from bin config, or undefined.\n * @internal\n */\nfunction primaryBinName(config: ForgeConfig): string | undefined {\n\tconst bin = config.project.bin;\n\tif (!bin) return undefined;\n\tconst keys = Object.keys(bin);\n\tif (keys.length === 0) return undefined;\n\t// Prefer a key matching the package name (sans scope)\n\tconst pkgShort = config.project.packageName?.replace(/^@[^/]+\\//, \"\");\n\treturn keys.find((k) => k === pkgShort) ?? keys[0];\n}\n\n// ---------------------------------------------------------------------------\n// Description builder\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a structured description with numbered trigger scenarios.\n * Derived from the project's exported symbols, config, and package metadata.\n * @internal\n */\nfunction buildDescription(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst projectName =\n\t\tconfig.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"this project\";\n\n\t// Lead sentence — prefer package.json description, then @packageDocumentation\n\tconst pkgDoc = symbols.find((s) => s.documentation?.tags?.packageDocumentation);\n\tconst leadSentence =\n\t\tconfig.project.description ??\n\t\tpkgDoc?.documentation?.summary ??\n\t\texported.find((s) => s.documentation?.summary)?.documentation?.summary;\n\n\t// Build numbered trigger scenarios from detected capabilities\n\tconst triggers: string[] = [];\n\tlet n = 1;\n\n\tconst cliName = primaryBinName(config);\n\tif (cliName) {\n\t\ttriggers.push(`(${n++}) running ${cliName} CLI commands`);\n\t}\n\n\tconst functionCount = exported.filter((s) => s.kind === \"function\").length;\n\tif (functionCount > 0) {\n\t\ttriggers.push(`(${n++}) calling its ${functionCount} API functions`);\n\t}\n\n\tconst hasRoutes = exported.some((s) => s.documentation?.tags?.route !== undefined);\n\tif (hasRoutes) {\n\t\ttriggers.push(`(${n++}) building HTTP API routes`);\n\t}\n\n\tconst configSym = exported.find(\n\t\t(s) =>\n\t\t\t(s.kind === \"interface\" || s.kind === \"type\") &&\n\t\t\t/config/i.test(s.name) &&\n\t\t\t(s.children?.length ?? 0) > 0,\n\t);\n\tif (configSym) {\n\t\ttriggers.push(`(${n++}) configuring ${projectName}`);\n\t}\n\n\tconst typeCount = exported.filter(\n\t\t(s) => s.kind === \"interface\" || s.kind === \"type\" || s.kind === \"enum\",\n\t).length;\n\tif (typeCount > 0) {\n\t\ttriggers.push(`(${n++}) understanding its ${typeCount} type definitions`);\n\t}\n\n\tconst classCount = exported.filter((s) => s.kind === \"class\").length;\n\tif (classCount > 0) {\n\t\ttriggers.push(`(${n++}) working with its ${classCount} classes`);\n\t}\n\n\t// Keywords from package.json as additional trigger words\n\tconst keywords = config.project.keywords ?? [];\n\tif (keywords.length > 0) {\n\t\tconst kwStr = keywords.slice(0, 5).join('\", \"');\n\t\ttriggers.push(`(${n++}) user mentions \"${kwStr}\"`);\n\t}\n\n\ttriggers.push(`(${n}) user mentions \"${projectName}\" or asks about its API`);\n\n\tlet description = \"\";\n\tif (leadSentence) {\n\t\tdescription += `${leadSentence} `;\n\t}\n\tdescription += `Use when: ${triggers.join(\", \")}.`;\n\n\tif (description.length > 1024) {\n\t\tdescription = `${description.slice(0, 1021)}...`;\n\t}\n\treturn description;\n}\n\n// ---------------------------------------------------------------------------\n// Body section renderers\n// ---------------------------------------------------------------------------\n\n/**\n * Renders a Quick Start section with install command and key CLI/API usage.\n * @internal\n */\nfunction renderQuickStart(\n\tsymbols: ForgeSymbol[],\n\tconfig: ForgeConfig,\n): string[] {\n\tconst lines: string[] = [];\n\tconst projectName = config.project.packageName ?? \"project\";\n\tconst cliName = primaryBinName(config);\n\n\tlines.push(\"## Quick Start\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install ${cliName ? \"-D \" : \"\"}${projectName}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\t// If CLI exists, show key commands instead of API example\n\tif (cliName && config.project.scripts) {\n\t\tconst scripts = config.project.scripts;\n\t\tconst relevantKeys = [\"check\", \"test\", \"build\", \"lint\", \"dev\", \"start\", \"generate\"];\n\t\tconst cliCommands: string[] = [];\n\t\tfor (const key of relevantKeys) {\n\t\t\tconst script = scripts[key];\n\t\t\tif (script && script.includes(cliName)) {\n\t\t\t\tcliCommands.push(`npx ${cliName} ${key}`);\n\t\t\t}\n\t\t}\n\t\t// Fallback: show common subcommands from bin keys\n\t\tif (cliCommands.length === 0) {\n\t\t\tcliCommands.push(`npx ${cliName} --help`);\n\t\t}\n\t\tif (cliCommands.length > 0) {\n\t\t\tlines.push(\"```bash\");\n\t\t\tfor (const cmd of cliCommands.slice(0, 5)) {\n\t\t\t\tlines.push(cmd);\n\t\t\t}\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t} else {\n\t\t// No CLI — show first @example as quick start\n\t\tconst exported = symbols.filter((s) => s.exported);\n\t\tfor (const sym of exported) {\n\t\t\tif (sym.kind !== \"function\" && sym.kind !== \"class\") continue;\n\t\t\tconst ex = sym.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tlines.push(`\\`\\`\\`${ex.language || \"typescript\"}`);\n\t\t\t\tlines.push(ex.code.trim());\n\t\t\t\tlines.push(\"```\");\n\t\t\t\tlines.push(\"\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines;\n}\n\n/**\n * Renders a compact API summary table for the body. Full details go to the reference.\n * @internal\n */\nfunction renderApiSummaryTable(symbols: ForgeSymbol[]): string[] {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst functions = exported.filter((s) => s.kind === \"function\");\n\tif (functions.length === 0) return [];\n\n\tconst lines: string[] = [];\n\tlines.push(\"## API\");\n\tlines.push(\"\");\n\tlines.push(\"| Function | Description |\");\n\tlines.push(\"|----------|-------------|\");\n\n\tfor (const fn of functions.slice(0, 15)) {\n\t\tconst desc = fn.documentation?.summary ?? \"\";\n\t\tlines.push(`| \\`${fn.name}()\\` | ${desc} |`);\n\t}\n\tif (functions.length > 15) {\n\t\tlines.push(`| ... | ${functions.length - 15} more — see API reference |`);\n\t}\n\tlines.push(\"\");\n\treturn lines;\n}\n\n/**\n * Renders key types list (top 10) from exported types and interfaces.\n * @internal\n */\nfunction renderKeyTypes(symbols: ForgeSymbol[], max: number = 10): string[] {\n\tconst lines: string[] = [];\n\tlet count = 0;\n\tfor (const sym of symbols) {\n\t\tif (count >= max) break;\n\t\tif (!sym.exported) continue;\n\t\tif (!isConceptKind(sym.kind)) continue;\n\t\tconst summary = sym.documentation?.summary ?? \"\";\n\t\tconst label = summary ? `**\\`${sym.name}\\`** — ${summary}` : `**\\`${sym.name}\\`**`;\n\t\tlines.push(`- ${label}`);\n\t\tcount++;\n\t}\n\treturn lines;\n}\n\n/**\n * Renders a Configuration section with a code example using inline comments.\n * @internal\n */\nfunction renderConfigSection(symbols: ForgeSymbol[], config: ForgeConfig): string[] {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst configSymbol = exported.find(\n\t\t(s) =>\n\t\t\t(s.kind === \"interface\" || s.kind === \"type\") &&\n\t\t\t/config/i.test(s.name) &&\n\t\t\t(s.children?.length ?? 0) > 0,\n\t);\n\tif (!configSymbol) return [];\n\n\tconst lines: string[] = [];\n\tlines.push(\"## Configuration\");\n\tlines.push(\"\");\n\n\t// Generate a code example with inline comments from child summaries\n\tconst children = configSymbol.children ?? [];\n\tif (children.length > 0) {\n\t\tconst projectName = config.project.packageName ?? \"project\";\n\t\tconst importSource = projectName.includes(\"/\") ? projectName.split(\"/\")[0] + \"/\" + projectName.split(\"/\")[1] : projectName;\n\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(`import type { ${configSymbol.name} } from \"${importSource}\";`);\n\t\tlines.push(\"\");\n\t\tlines.push(`const config: Partial<${configSymbol.name}> = {`);\n\t\tfor (const child of children.slice(0, 10)) {\n\t\t\tconst comment = child.documentation?.summary;\n\t\t\tif (comment) {\n\t\t\t\tlines.push(` // ${comment}`);\n\t\t\t}\n\t\t\t// Infer a sensible default value from the type\n\t\t\tconst type = extractType(child.signature);\n\t\t\tconst defaultVal = inferDefaultValue(type, child.name);\n\t\t\tlines.push(` ${child.name}: ${defaultVal},`);\n\t\t}\n\t\tif (children.length > 10) {\n\t\t\tlines.push(` // ... ${children.length - 10} more options`);\n\t\t}\n\t\tlines.push(\"};\");\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"See [references/CONFIGURATION.md](references/CONFIGURATION.md) for full details.\");\n\tlines.push(\"\");\n\treturn lines;\n}\n\n/**\n * Extracts the type portion from a property signature.\n *\n * The TypeScript checker returns different formats depending on the symbol:\n * - Simple properties: just the type, e.g. `string`, `boolean`\n * - Complex objects: the full inline type, e.g. `{ enabled: boolean; strict: boolean; }`\n * - Named properties: `name: type` (rare — most children are bare types)\n *\n * This function only splits on `:` when the left side is a simple identifier\n * (no braces, parens, or pipes). Otherwise it returns the whole string as-is,\n * since it IS the type.\n *\n * @param signature - The raw signature string from the walker.\n * @returns The extracted type string, or empty string if no signature.\n * @internal\n */\nfunction extractType(signature: string | undefined): string {\n\tif (!signature) return \"\";\n\tconst trimmed = signature.trim();\n\t// If it starts with { or ( or contains |, it's already a type expression\n\tif (/^[{(]/.test(trimmed) || /[|]/.test(trimmed.split(\":\")[0])) {\n\t\treturn trimmed;\n\t}\n\tconst colonIdx = trimmed.indexOf(\":\");\n\tif (colonIdx === -1) return trimmed;\n\t// Only split if the left side looks like a simple identifier (no special chars)\n\tconst left = trimmed.slice(0, colonIdx).trim();\n\tif (/^[a-zA-Z_$][a-zA-Z0-9_$?]*$/.test(left)) {\n\t\treturn trimmed.slice(colonIdx + 1).trim();\n\t}\n\treturn trimmed;\n}\n\n/**\n * Infers a sensible placeholder value from a TypeScript type string.\n * @internal\n */\nfunction inferDefaultValue(type: string, name: string): string {\n\tconst t = type.trim();\n\tif (t === \"boolean\" || t.startsWith(\"boolean\")) return \"true\";\n\tif (t === \"string\" || t.startsWith(\"string\")) return `\"...\"`;\n\tif (t === \"number\" || t.startsWith(\"number\")) return \"0\";\n\tif (t.includes(\"[]\") || t.startsWith(\"Array\")) return \"[]\";\n\tif (t.startsWith(\"{\") || /^[A-Z]/.test(t)) return \"{ /* ... */ }\";\n\tif (/dir|path/i.test(name)) return `\".\"`;\n\treturn `undefined`;\n}\n\n/**\n * Detects gotchas from the project's symbols — things an agent would get\n * wrong without being told. Derived from @throws, @deprecated, and\n * non-obvious type constraints.\n * @internal\n */\nfunction renderGotchas(symbols: ForgeSymbol[]): string[] {\n\tconst lines: string[] = [];\n\tconst exported = symbols.filter((s) => s.exported);\n\n\t// Deprecated symbols\n\tconst deprecated = exported.filter((s) => s.documentation?.deprecated);\n\tfor (const sym of deprecated) {\n\t\tconst reason = sym.documentation?.deprecated ?? \"\";\n\t\tconst msg = reason && reason !== \"true\" ? `: ${reason}` : \"\";\n\t\tlines.push(`- \\`${sym.name}\\` is deprecated${msg}`);\n\t}\n\n\t// Functions that throw\n\tconst throwers = exported.filter(\n\t\t(s) => s.kind === \"function\" && (s.documentation?.throws?.length ?? 0) > 0,\n\t);\n\tfor (const sym of throwers) {\n\t\tfor (const t of sym.documentation?.throws ?? []) {\n\t\t\tlines.push(\n\t\t\t\t`- \\`${sym.name}()\\` throws${t.type ? ` \\`${t.type}\\`` : \"\"}: ${t.description}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Enums with non-obvious values\n\tconst enums = exported.filter((s) => s.kind === \"enum\" && (s.children?.length ?? 0) > 0);\n\tfor (const sym of enums) {\n\t\tconst values = (sym.children ?? []).map((c) => c.name).join(\", \");\n\t\tlines.push(`- \\`${sym.name}\\` enum values: ${values}`);\n\t}\n\n\treturn lines;\n}\n\n// ---------------------------------------------------------------------------\n// SKILL.md builder\n// ---------------------------------------------------------------------------\n\n/**\n * Generates the full SKILL.md content. Generic for ANY TypeScript project.\n * Content is derived entirely from the project's symbols and metadata.\n * @internal\n */\nfunction buildSkillMd(symbols: ForgeSymbol[], config: ForgeConfig, directoryName: string): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst description = buildDescription(symbols, config);\n\n\tconst lines: string[] = [];\n\n\t// ---------------------------------------------------------------------------\n\t// YAML Frontmatter — only name + description per skill spec\n\t// ---------------------------------------------------------------------------\n\tlines.push(\"---\");\n\tlines.push(`name: ${directoryName}`);\n\tlines.push(\"description: >\");\n\tfor (const segment of description.split(\"\\n\")) {\n\t\tlines.push(` ${segment}`);\n\t}\n\tlines.push(\"---\");\n\tlines.push(\"\");\n\n\t// ---------------------------------------------------------------------------\n\t// Title + Overview\n\t// ---------------------------------------------------------------------------\n\tlines.push(`# ${projectName}`);\n\tlines.push(\"\");\n\n\tconst pkgDoc = symbols.find((s) => s.documentation?.tags?.packageDocumentation);\n\tconst overview =\n\t\tconfig.project.description ??\n\t\tpkgDoc?.documentation?.summary ??\n\t\tsymbols.filter((s) => s.exported).find((s) => s.documentation?.summary)?.documentation\n\t\t\t?.summary;\n\tif (overview) {\n\t\tlines.push(overview);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Quick Start — install + CLI commands or first example\n\t// ---------------------------------------------------------------------------\n\tlines.push(...renderQuickStart(symbols, config));\n\n\t// ---------------------------------------------------------------------------\n\t// API summary table — compact, functions only\n\t// ---------------------------------------------------------------------------\n\tlines.push(...renderApiSummaryTable(symbols));\n\n\t// ---------------------------------------------------------------------------\n\t// Configuration — code example with inline comments\n\t// ---------------------------------------------------------------------------\n\tlines.push(...renderConfigSection(symbols, config));\n\n\t// ---------------------------------------------------------------------------\n\t// Custom sections — injected from config.skill.customSections\n\t// These allow projects to add workflow knowledge, domain context,\n\t// and other information that cannot be derived from symbols alone.\n\t// ---------------------------------------------------------------------------\n\tconst customSections = config.skill.customSections ?? [];\n\tfor (const section of customSections) {\n\t\tlines.push(`## ${section.heading}`);\n\t\tlines.push(\"\");\n\t\tlines.push(section.content);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Gotchas — from @deprecated, @throws, enums + config.skill.extraGotchas\n\t// ---------------------------------------------------------------------------\n\tconst gotchaLines = renderGotchas(symbols);\n\tconst extraGotchas = config.skill.extraGotchas ?? [];\n\tfor (const gotcha of extraGotchas) {\n\t\tgotchaLines.push(`- ${gotcha}`);\n\t}\n\tif (gotchaLines.length > 0) {\n\t\tlines.push(\"## Gotchas\");\n\t\tlines.push(\"\");\n\t\tlines.push(...gotchaLines);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Key Types — top 10 exported types/interfaces\n\t// ---------------------------------------------------------------------------\n\tconst keyTypeLines = renderKeyTypes(symbols);\n\tif (keyTypeLines.length > 0) {\n\t\tlines.push(\"## Key Types\");\n\t\tlines.push(\"\");\n\t\tlines.push(...keyTypeLines);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// References section — clear pointers to bundled files\n\t// ---------------------------------------------------------------------------\n\tlines.push(\"## References\");\n\tlines.push(\"\");\n\tlines.push(\"- [references/CONFIGURATION.md](references/CONFIGURATION.md) — Full config options\");\n\tlines.push(\n\t\t\"- [references/API-REFERENCE.md](references/API-REFERENCE.md) — Signatures, parameters, examples\",\n\t);\n\tlines.push(\"\");\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n\n// ---------------------------------------------------------------------------\n// API Reference builder\n// ---------------------------------------------------------------------------\n\n/**\n * Generates the `references/API-REFERENCE.md` content.\n * Grouped by kind with a Table of Contents for efficient navigation.\n * @internal\n */\nfunction buildApiReferenceMd(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst exported = symbols.filter((s) => s.exported);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${projectName} — API Reference`);\n\tlines.push(\"\");\n\n\t// Group by kind\n\tconst functions = exported.filter((s) => s.kind === \"function\");\n\tconst classes = exported.filter((s) => s.kind === \"class\");\n\tconst types = exported.filter(\n\t\t(s) => s.kind === \"interface\" || s.kind === \"type\" || s.kind === \"enum\",\n\t);\n\tconst variables = exported.filter((s) => s.kind === \"variable\");\n\n\t// Table of Contents\n\tconst tocEntries: string[] = [];\n\tif (functions.length > 0) tocEntries.push(\"- [Functions](#functions)\");\n\tif (types.length > 0) tocEntries.push(\"- [Types](#types)\");\n\tif (classes.length > 0) tocEntries.push(\"- [Classes](#classes)\");\n\tif (variables.length > 0) tocEntries.push(\"- [Constants](#constants)\");\n\n\tif (tocEntries.length > 0) {\n\t\tlines.push(\"## Table of Contents\");\n\t\tlines.push(\"\");\n\t\tlines.push(...tocEntries);\n\t\tlines.push(\"\");\n\t}\n\n\t// Functions section\n\tif (functions.length > 0) {\n\t\tlines.push(\"## Functions\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of functions) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\t// Types section\n\tif (types.length > 0) {\n\t\tlines.push(\"## Types\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of types) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\t// Classes section\n\tif (classes.length > 0) {\n\t\tlines.push(\"## Classes\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of classes) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\t// Constants section\n\tif (variables.length > 0) {\n\t\tlines.push(\"## Constants\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of variables) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n\n/**\n * Renders a single symbol's full detail block for the API reference.\n * @internal\n */\nfunction renderSymbolDetail(sym: ForgeSymbol): string[] {\n\tconst lines: string[] = [];\n\tlines.push(`### \\`${sym.name}\\``);\n\tlines.push(\"\");\n\n\tif (sym.documentation?.summary) {\n\t\tlines.push(sym.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\tif (sym.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(sym.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\tif (sym.documentation?.params && sym.documentation.params.length > 0) {\n\t\tlines.push(\"**Parameters:**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of sym.documentation.params) {\n\t\t\tlines.push(`- \\`${p.name}\\`${p.type ? ` (\\`${p.type}\\`)` : \"\"} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\tif (sym.documentation?.returns) {\n\t\tlines.push(`**Returns:** ${sym.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\t// Children (class members, interface properties)\n\tif (sym.children && sym.children.length > 0) {\n\t\tlines.push(\"**Members:**\");\n\t\tlines.push(\"\");\n\t\tfor (const child of sym.children) {\n\t\t\tconst desc = child.documentation?.summary ?? \"\";\n\t\t\tlines.push(`- \\`${child.name}\\`${desc ? ` — ${desc}` : \"\"}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\tfor (const ex of sym.documentation?.examples ?? []) {\n\t\tconst lang = ex.language || \"typescript\";\n\t\tlines.push(`\\`\\`\\`${lang}`);\n\t\tlines.push(ex.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\treturn lines;\n}\n\n// ---------------------------------------------------------------------------\n// Configuration Reference builder\n// ---------------------------------------------------------------------------\n\n/**\n * Generates the `references/CONFIGURATION.md` content.\n * Documents all config-like types with property tables and code examples.\n * @internal\n */\nfunction buildConfigurationMd(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst exported = symbols.filter((s) => s.exported);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${projectName} — Configuration Reference`);\n\tlines.push(\"\");\n\n\tconst configSymbols = exported.filter(\n\t\t(s) =>\n\t\t\t(s.kind === \"interface\" || s.kind === \"type\") &&\n\t\t\t/config/i.test(s.name) &&\n\t\t\t(s.children?.length ?? 0) > 0,\n\t);\n\n\tfor (const configSym of configSymbols) {\n\t\tlines.push(`## \\`${configSym.name}\\``);\n\t\tlines.push(\"\");\n\t\tif (configSym.documentation?.summary) {\n\t\t\tlines.push(configSym.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst children = configSym.children ?? [];\n\n\t\t// Code example with inline comments\n\t\tif (children.length > 0) {\n\t\t\tconst importSource = projectName.includes(\"/\")\n\t\t\t\t? projectName\n\t\t\t\t: projectName;\n\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(`import type { ${configSym.name} } from \"${importSource}\";`);\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`const config: Partial<${configSym.name}> = {`);\n\t\t\tfor (const child of children) {\n\t\t\t\tif (child.documentation?.summary) {\n\t\t\t\t\tlines.push(` // ${child.documentation.summary}`);\n\t\t\t\t}\n\t\t\t\tconst type = extractType(child.signature);\n\t\t\t\tconst defaultVal = inferDefaultValue(type, child.name);\n\t\t\t\tlines.push(` ${child.name}: ${defaultVal},`);\n\t\t\t}\n\t\t\tlines.push(\"};\");\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\t// Property table for quick lookup\n\t\tlines.push(\"| Property | Type | Description |\");\n\t\tlines.push(\"|----------|------|-------------|\");\n\t\tfor (const child of children) {\n\t\t\tconst type = extractType(child.signature);\n\t\t\tconst desc = child.documentation?.summary ?? \"\";\n\t\t\tlines.push(`| \\`${child.name}\\` | \\`${type}\\` | ${desc} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (configSymbols.length === 0) {\n\t\tlines.push(\"No configuration types detected in this project.\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Script builders\n// ---------------------------------------------------------------------------\n\n/**\n * Generates contextual shell scripts based on project metadata.\n * @internal\n */\nfunction buildScripts(config: ForgeConfig): Array<{ path: string; content: string }> {\n\tconst scripts: Array<{ path: string; content: string }> = [];\n\tconst cliName = primaryBinName(config);\n\tconst pkgScripts = config.project.scripts ?? {};\n\n\tif (cliName) {\n\t\t// Projects with a CLI get purpose-built wrappers\n\t\t// Build script\n\t\tif (pkgScripts.build) {\n\t\t\tscripts.push({\n\t\t\t\tpath: \"scripts/build.sh\",\n\t\t\t\tcontent: [\n\t\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\t`# Run ${cliName} build pipeline`,\n\t\t\t\t\t\"set -euo pipefail\",\n\t\t\t\t\t`npx ${cliName} build \"$@\"`,\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t});\n\t\t}\n\n\t\t// Check/lint script\n\t\tconst checkCmd = pkgScripts.check ?? pkgScripts.lint;\n\t\tif (checkCmd) {\n\t\t\tconst subcommand = checkCmd.includes(\"check\") ? \"check\" : \"lint\";\n\t\t\tscripts.push({\n\t\t\t\tpath: \"scripts/check.sh\",\n\t\t\t\tcontent: [\n\t\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\t`# Run ${cliName} ${subcommand}`,\n\t\t\t\t\t\"set -euo pipefail\",\n\t\t\t\t\t`npx ${cliName} ${subcommand} \"$@\"`,\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t});\n\t\t}\n\n\t\t// Test script\n\t\tif (pkgScripts.test) {\n\t\t\tscripts.push({\n\t\t\t\tpath: \"scripts/test.sh\",\n\t\t\t\tcontent: [\n\t\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\t`# Run ${cliName} test suite`,\n\t\t\t\t\t\"set -euo pipefail\",\n\t\t\t\t\t`npx ${cliName} test \"$@\"`,\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t});\n\t\t}\n\t}\n\n\t// Fallback: always include at least a test script\n\tif (scripts.length === 0) {\n\t\tscripts.push({\n\t\t\tpath: \"scripts/test.sh\",\n\t\t\tcontent: [\n\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\"# Run the project's test suite\",\n\t\t\t\t'# Usage: ./scripts/test.sh [additional args]',\n\t\t\t\t\"\",\n\t\t\t\t\"if [ -f package.json ]; then\",\n\t\t\t\t' npm test \"$@\"',\n\t\t\t\t\"else\",\n\t\t\t\t' echo \"No package.json found\"',\n\t\t\t\t\" exit 1\",\n\t\t\t\t\"fi\",\n\t\t\t\t\"\",\n\t\t\t].join(\"\\n\"),\n\t\t});\n\t}\n\n\treturn scripts;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * A generated skill package following the agentskills.io directory structure.\n * Contains SKILL.md plus optional references and scripts files.\n *\n * @public\n */\nexport interface SkillPackage {\n\t/** The skill directory name (lowercase, hyphens only, max 64 chars). */\n\tdirectoryName: string;\n\t/** Files to write inside the skill directory. */\n\tfiles: Array<{ path: string; content: string }>;\n}\n\n/**\n * Generates an agentskills.io-compliant skill package for ANY TypeScript project.\n *\n * All content is derived from the project's exported symbols and metadata.\n * No hardcoded project-specific content. Works for any project that forge-ts analyzes.\n *\n * @param symbols - All symbols from the project.\n * @param config - The resolved forge-ts config.\n * @returns A {@link SkillPackage} describing the directory and its files.\n * @example\n * ```typescript\n * import { generateSkillPackage } from \"@forge-ts/gen\";\n * const pkg = generateSkillPackage(symbols, config);\n * console.log(pkg.directoryName); // \"my-lib\"\n * console.log(pkg.files.map(f => f.path));\n * // [\"SKILL.md\", \"references/API-REFERENCE.md\", ...]\n * ```\n * @public\n */\nexport function generateSkillPackage(symbols: ForgeSymbol[], config: ForgeConfig): SkillPackage {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst directoryName = toDirectoryName(projectName);\n\n\tconst skillMd = buildSkillMd(symbols, config, directoryName);\n\tconst apiRefMd = buildApiReferenceMd(symbols, config);\n\tconst configMd = buildConfigurationMd(symbols, config);\n\tconst scripts = buildScripts(config);\n\n\treturn {\n\t\tdirectoryName,\n\t\tfiles: [\n\t\t\t{ path: \"SKILL.md\", content: skillMd },\n\t\t\t{ path: \"references/API-REFERENCE.md\", content: apiRefMd },\n\t\t\t{ path: \"references/CONFIGURATION.md\", content: configMd },\n\t\t\t...scripts,\n\t\t],\n\t};\n}\n\n/**\n * Generates a SKILL.md string following the Agent Skills specification.\n * Generic for any TypeScript project — content derived from symbols.\n *\n * @param symbols - All symbols from the project.\n * @param config - The resolved forge-ts config.\n * @returns The SKILL.md content as a string.\n * @example\n * ```typescript\n * import { generateSkillMd } from \"@forge-ts/gen\";\n * const skill = generateSkillMd(symbols, config);\n * ```\n * @public\n */\nexport function generateSkillMd(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst directoryName = toDirectoryName(projectName);\n\treturn buildSkillMd(symbols, config, directoryName);\n}\n","import type { DocPage } from \"./site-generator.js\";\n\n/**\n * A single generated SSG configuration file.\n * @public\n */\nexport interface SSGConfigFile {\n\t/** Relative path from outDir (e.g., \"mint.json\", \"_meta.json\") */\n\tpath: string;\n\t/** File content */\n\tcontent: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/**\n * Partition pages into top-level pages and package pages.\n *\n * Top-level pages are those not nested under `packages/`.\n * Package pages are grouped by their package directory segment.\n */\nfunction partitionPages(pages: DocPage[]): {\n\ttopLevel: string[];\n\tbyPackage: Map<string, string[]>;\n} {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\treturn { topLevel, byPackage };\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n// ---------------------------------------------------------------------------\n// Mintlify\n// ---------------------------------------------------------------------------\n\ninterface MintlifyNavigationPage {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavigationPage>;\n}\n\ninterface MintlifyConfig {\n\t$schema: string;\n\tname: string;\n\tnavigation: MintlifyNavigationPage[];\n}\n\nfunction generateMintlifyConfig(pages: DocPage[], projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst navigation: MintlifyNavigationPage[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tnavigation.push({\n\t\t\tgroup: \"Getting Started\",\n\t\t\tpages: topLevel,\n\t\t});\n\t}\n\n\tif (byPackage.size > 0) {\n\t\tconst packageGroups: MintlifyNavigationPage[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\tpackageGroups.push({\n\t\t\t\tgroup: pkgName,\n\t\t\t\tpages: slugs,\n\t\t\t});\n\t\t}\n\t\tnavigation.push({\n\t\t\tgroup: \"Packages\",\n\t\t\tpages: packageGroups as unknown as Array<string | MintlifyNavigationPage>,\n\t\t});\n\t}\n\n\tconst config: MintlifyConfig = {\n\t\t$schema: \"https://mintlify.com/schema.json\",\n\t\tname: projectName,\n\t\tnavigation,\n\t};\n\n\treturn {\n\t\tpath: \"mint.json\",\n\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Docusaurus\n// ---------------------------------------------------------------------------\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\nfunction generateDocusaurusConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\tconst content =\n\t\t`/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\\n` +\n\t\t`const sidebars = ${json};\\n` +\n\t\t`module.exports = sidebars;\\n`;\n\n\treturn {\n\t\tpath: \"sidebars.js\",\n\t\tcontent,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Nextra\n// ---------------------------------------------------------------------------\n\nfunction generateNextraConfigs(pages: DocPage[], _projectName: string): SSGConfigFile[] {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst files: SSGConfigFile[] = [];\n\n\t// Root _meta.json\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\n\tfiles.push({\n\t\tpath: \"_meta.json\",\n\t\tcontent: `${JSON.stringify(rootMeta, null, 2)}\\n`,\n\t});\n\n\t// Per-package _meta.json files\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\t// slug is e.g. \"packages/core/api-reference\"\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\n\t\t// packages/<pkgName>/_meta.json\n\t\tfiles.push({\n\t\t\tpath: `packages/${pkgName}/_meta.json`,\n\t\t\tcontent: `${JSON.stringify(pkgMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\t// If there are multiple packages, also write a packages/_meta.json\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"packages/_meta.json\",\n\t\t\tcontent: `${JSON.stringify(packagesMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\treturn files;\n}\n\n// ---------------------------------------------------------------------------\n// VitePress\n// ---------------------------------------------------------------------------\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\nfunction generateVitePressConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn {\n\t\tpath: \".vitepress/sidebar.json\",\n\t\tcontent: `${JSON.stringify(sidebar, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Public entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generate navigation configuration file(s) for the given SSG target.\n *\n * Returns one file for most targets, but multiple files for Nextra (which\n * uses per-directory `_meta.json` files).\n *\n * @param pages - The {@link DocPage} array produced by `generateDocSite`.\n * @param target - The SSG target.\n * @param projectName - The project name (used in config metadata).\n * @returns An array of {@link SSGConfigFile} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateSSGConfigs } from \"@forge-ts/gen\";\n * const configs = generateSSGConfigs(pages, \"vitepress\", \"my-project\");\n * console.log(configs[0].path); // \".vitepress/sidebar.json\"\n * ```\n * @public\n */\nexport function generateSSGConfigs(\n\tpages: DocPage[],\n\ttarget: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\",\n\tprojectName: string,\n): SSGConfigFile[] {\n\tswitch (target) {\n\t\tcase \"mintlify\":\n\t\t\treturn [generateMintlifyConfig(pages, projectName)];\n\t\tcase \"docusaurus\":\n\t\t\treturn [generateDocusaurusConfig(pages, projectName)];\n\t\tcase \"nextra\":\n\t\t\treturn generateNextraConfigs(pages, projectName);\n\t\tcase \"vitepress\":\n\t\t\treturn [generateVitePressConfig(pages, projectName)];\n\t\tdefault: {\n\t\t\t// Exhaustiveness guard — TypeScript will catch unhandled variants at\n\t\t\t// compile time, but we want a safe runtime fallback too.\n\t\t\tconst _exhaustive: never = target;\n\t\t\tvoid _exhaustive;\n\t\t\treturn [];\n\t\t}\n\t}\n}\n","/**\n * @forge-ts/gen — Markdown/MDX documentation and llms.txt generator.\n *\n * Generates human- and machine-readable documentation from the forge-ts\n * symbol graph, with optional README injection.\n *\n * @packageDocumentation\n * @public\n */\n\nexport * from \"./adapters/index.js\";\nexport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nexport {\n\tgenerateMarkdown,\n\ttype MarkdownOptions,\n} from \"./markdown.js\";\nexport { type ReadmeSyncOptions, syncReadme } from \"./readme-sync.js\";\nexport {\n\ttype DocPage,\n\tgenerateDocSite,\n\tgroupSymbolsByPackage,\n\ttype SiteGeneratorOptions,\n} from \"./site-generator.js\";\nexport { generateSkillMd, generateSkillPackage, type SkillPackage } from \"./skill.js\";\nexport { generateSSGConfigs, type SSGConfigFile } from \"./ssg-config.js\";\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { createWalker, type ForgeConfig, type ForgeResult } from \"@forge-ts/core\";\nimport { DEFAULT_TARGET, getAdapter } from \"./adapters/index.js\";\nimport type { AdapterContext } from \"./adapters/types.js\";\nimport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nimport { generateMarkdown } from \"./markdown.js\";\nimport { syncReadme } from \"./readme-sync.js\";\nimport { generateDocSite, groupSymbolsByPackage } from \"./site-generator.js\";\nimport { generateSkillPackage } from \"./skill.js\";\n\n/**\n * Updates auto-enriched sections in an existing stub file.\n * Replaces content between `<!-- FORGE:AUTO-START id -->` and\n * `<!-- FORGE:AUTO-END id -->` markers with fresh content from the\n * newly generated version. Manual content outside markers is preserved.\n *\n * @param existing - The current file content on disk.\n * @param generated - The freshly generated content with updated markers.\n * @returns The merged content, or null if no markers were found to update.\n * @internal\n */\nfunction updateAutoSections(existing: string, generated: string): string | null {\n\tconst markerPattern = /<!-- FORGE:AUTO-START (\\S+) -->([\\s\\S]*?)<!-- FORGE:AUTO-END \\1 -->/g;\n\n\t// Extract all auto sections from the generated content\n\tconst newSections = new Map<string, string>();\n\tlet match: RegExpExecArray | null;\n\t// biome-ignore lint: manual exec loop is clearest for named captures\n\twhile ((match = markerPattern.exec(generated)) !== null) {\n\t\tnewSections.set(match[1], match[0]);\n\t}\n\n\tif (newSections.size === 0) return null;\n\n\t// Replace each marker section in the existing content\n\tlet updated = existing;\n\tlet changed = false;\n\tfor (const [id, replacement] of newSections) {\n\t\tconst sectionPattern = new RegExp(\n\t\t\t`<!-- FORGE:AUTO-START ${id} -->[\\\\s\\\\S]*?<!-- FORGE:AUTO-END ${id} -->`,\n\t\t);\n\t\tif (sectionPattern.test(updated)) {\n\t\t\tupdated = updated.replace(sectionPattern, replacement);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\treturn changed ? updated : null;\n}\n\n/**\n * Options for the generation pipeline.\n *\n * @public\n */\nexport interface GenerateOptions {\n\t/**\n\t * When true, overwrite stub pages even if they already exist on disk.\n\t * Normally stub pages (concepts, guides, faq, contributing, changelog)\n\t * are only created on the first build to preserve manual edits.\n\t * Use this to reset stubs to their scaffolding state.\n\t *\n\t * @example\n\t * ```typescript\n\t * await generate(config, { forceStubs: true });\n\t * ```\n\t */\n\tforceStubs?: boolean;\n}\n\n/**\n * Runs the full generation pipeline: walk → render → write.\n *\n * Auto-generated pages are always regenerated from source code.\n * Stub pages (scaffolding for human/agent editing) are only created\n * if they don't already exist, preserving manual edits across builds.\n * Pass `{ forceStubs: true }` to overwrite stubs.\n *\n * @param config - The resolved {@link ForgeConfig} for the project.\n * @param options - Optional generation flags (e.g., forceStubs).\n * @returns A {@link ForgeResult} describing the outcome.\n * @example\n * ```typescript\n * import { generate } from \"@forge-ts/gen\";\n * const result = await generate(config);\n * console.log(result.success); // true if all files were written\n * ```\n * @public\n * @packageDocumentation\n */\nexport async function generate(config: ForgeConfig, options?: GenerateOptions): Promise<ForgeResult> {\n\tconst start = Date.now();\n\tconst forceStubs = options?.forceStubs ?? false;\n\n\tconst walker = createWalker(config);\n\tconst symbols = walker.walk();\n\n\tawait mkdir(config.outDir, { recursive: true });\n\n\t// Legacy flat output — kept for backward compatibility\n\tfor (const format of config.gen.formats) {\n\t\tconst content = generateMarkdown(symbols, config, {\n\t\t\tmdx: format === \"mdx\",\n\t\t});\n\t\tconst ext = format === \"mdx\" ? \"mdx\" : \"md\";\n\t\tawait writeFile(join(config.outDir, `api-reference.${ext}`), content, \"utf8\");\n\t}\n\n\t// Multi-page site output — writes directly to outDir via adapters\n\tconst resolvedRoot = config.rootDir === \".\" ? process.cwd() : config.rootDir;\n\tconst projectName = resolvedRoot.split(\"/\").pop() ?? \"Project\";\n\tconst symbolsByPackage = groupSymbolsByPackage(symbols, config.rootDir);\n\n\tconst target = config.gen.ssgTarget ?? DEFAULT_TARGET;\n\tconst adapter = getAdapter(target);\n\n\tfor (const format of config.gen.formats) {\n\t\tconst pages = generateDocSite(symbolsByPackage, config, {\n\t\t\tformat,\n\t\t\tssgTarget: config.gen.ssgTarget,\n\t\t\tprojectName,\n\t\t\trepositoryUrl: config.project.repository,\n\t\t\tpackageName: config.project.packageName,\n\t\t});\n\n\t\tconst adapterContext: AdapterContext = {\n\t\t\tconfig,\n\t\t\tprojectName,\n\t\t\tpages,\n\t\t\tsymbols,\n\t\t\toutDir: config.outDir,\n\t\t};\n\n\t\t// Transform pages through the adapter (adds correct frontmatter and extensions).\n\t\t// The adapter propagates the stub flag from DocPage to GeneratedFile.\n\t\tconst transformedPages = adapter.transformPages(pages, adapterContext);\n\t\tfor (const file of transformedPages) {\n\t\t\tconst filePath = join(config.outDir, file.path);\n\n\t\t\t// Stub pages: preserve manual edits across subsequent builds.\n\t\t\t// If the stub exists on disk, update only FORGE:AUTO marker sections\n\t\t\t// (progressive enrichment) while leaving manual content untouched.\n\t\t\t// With --force-stubs, overwrite the entire file.\n\t\t\tif (file.stub && existsSync(filePath) && !forceStubs) {\n\t\t\t\tconst existingContent = await readFile(filePath, \"utf8\");\n\t\t\t\tconst merged = updateAutoSections(existingContent, file.content);\n\t\t\t\tif (merged) {\n\t\t\t\t\tawait writeFile(filePath, merged, \"utf8\");\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t}\n\n\t\t// Generate platform config files only when ssgTarget is explicitly set\n\t\tif (config.gen.ssgTarget) {\n\t\t\tconst configFiles = adapter.generateConfig(adapterContext);\n\t\t\tfor (const file of configFiles) {\n\t\t\t\tconst filePath = join(config.outDir, file.path);\n\t\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.gen.llmsTxt) {\n\t\tconst llms = generateLlmsTxt(symbols, config);\n\t\tawait writeFile(join(config.outDir, \"llms.txt\"), llms, \"utf8\");\n\n\t\tconst llmsFull = generateLlmsFullTxt(symbols, config);\n\t\tawait writeFile(join(config.outDir, \"llms-full.txt\"), llmsFull, \"utf8\");\n\n\t\t// Skill package generation — follows gen.llmsTxt unless skill.enabled is explicitly false\n\t\tconst skillEnabled = config.skill.enabled !== false;\n\t\tif (skillEnabled) {\n\t\t\tconst skillPkg = generateSkillPackage(symbols, config);\n\t\t\tconst skillDir = join(config.outDir, skillPkg.directoryName);\n\t\t\tawait mkdir(skillDir, { recursive: true });\n\t\t\tfor (const file of skillPkg.files) {\n\t\t\t\tconst filePath = join(skillDir, file.path);\n\t\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.gen.readmeSync) {\n\t\tawait syncReadme(join(config.rootDir, \"README.md\"), symbols);\n\t}\n\n\treturn {\n\t\tsuccess: true,\n\t\tsymbols,\n\t\terrors: [],\n\t\twarnings: [],\n\t\tduration: Date.now() - start,\n\t};\n}\n"],"mappings":"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","names":["existsSync","join","styleGuide","pageSlug","existsSync","join","styleGuide","pageSlug","buildPackageJson","existsSync","join","styleGuide","pageSlug","slugToLabel","buildPackageJson","existsSync","join","relative","toAnchor","pageSlug","slugToLabel","existsSync","readFile","writeFile","writeFile","existsSync","readFile"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapters/registry.ts","../src/adapters/mintlify.ts","../src/adapters/docusaurus.ts","../src/adapters/nextra.ts","../src/adapters/vitepress.ts","../src/llms.ts","../src/markdown.ts","../src/readme-sync.ts","../src/site-generator.ts","../src/skill.ts","../src/ssg-config.ts","../src/index.ts"],"sourcesContent":["import type { SSGAdapter, SSGTarget } from \"./types.js\";\n\n/** Registry of all available SSG adapters. */\nconst adapters = new Map<SSGTarget, SSGAdapter>();\n\n/**\n * Register an SSG adapter.\n * Called once per provider at module load time.\n *\n * @param adapter - The adapter to register.\n * @example\n * ```typescript\n * import { registerAdapter } from \"@forge-ts/gen\";\n * registerAdapter(mintlifyAdapter);\n * ```\n * @public\n */\nexport function registerAdapter(adapter: SSGAdapter): void {\n\tadapters.set(adapter.target, adapter);\n}\n\n/**\n * Get a registered adapter by target name.\n * Throws if the target is not registered.\n *\n * @param target - The SSG target identifier.\n * @returns The registered {@link SSGAdapter} for the given target.\n * @throws `Error` if the target is not registered.\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"mintlify\");\n * ```\n * @public\n */\nexport function getAdapter(target: SSGTarget): SSGAdapter {\n\tconst adapter = adapters.get(target);\n\tif (!adapter) {\n\t\tconst available = [...adapters.keys()].join(\", \");\n\t\tthrow new Error(`Unknown SSG target \"${target}\". Available targets: ${available}`);\n\t}\n\treturn adapter;\n}\n\n/**\n * Get all registered adapter targets.\n *\n * @returns An array of all registered {@link SSGTarget} identifiers.\n * @example\n * ```typescript\n * import { getAvailableTargets } from \"@forge-ts/gen\";\n * const targets = getAvailableTargets(); // [\"mintlify\", \"docusaurus\", ...]\n * ```\n * @public\n */\nexport function getAvailableTargets(): SSGTarget[] {\n\treturn [...adapters.keys()];\n}\n\n/**\n * The default SSG target when none is specified.\n * @public\n */\nexport const DEFAULT_TARGET: SSGTarget = \"mintlify\";\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 3,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** A navigation group with pages (Mintlify v4 format). */\ninterface MintlifyNavGroup {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavGroup>;\n}\n\n/** A navigation tab containing groups (Mintlify v4 format). */\ninterface MintlifyNavTab {\n\ttab: string;\n\tgroups: MintlifyNavGroup[];\n}\n\n/** Contextual AI assistant options for Mintlify v4. */\ninterface MintlifyContextual {\n\toptions: Array<\"copy\" | \"view\" | \"chatgpt\" | \"claude\" | \"perplexity\">;\n}\n\n/** Mintlify v4 docs.json structure. */\ninterface MintlifyDocsJson {\n\tname: string;\n\ttheme: string;\n\tcolors: { primary: string; light: string; dark: string };\n\tnavigation: { tabs: MintlifyNavTab[] };\n\tfooter: { socials: Record<string, string> };\n\tcontextual: MintlifyContextual;\n}\n\n/** Build the docs.json navigation config following the 5-stage architecture. */\nfunction buildDocsJson(context: AdapterContext): MintlifyDocsJson {\n\tconst { pages, projectName } = context;\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t}\n\t}\n\n\tconst tabs: MintlifyNavTab[] = [];\n\n\t// Documentation tab — ORIENT + LEARN + BUILD + COMMUNITY\n\tconst docGroups: MintlifyNavGroup[] = [];\n\n\tdocGroups.push({\n\t\tgroup: \"Getting Started\",\n\t\tpages: [\"index\", \"getting-started\"],\n\t});\n\n\tdocGroups.push({\n\t\tgroup: \"Learn\",\n\t\tpages: [\"concepts\", \"guides/index\"],\n\t});\n\n\tdocGroups.push({\n\t\tgroup: \"Reference\",\n\t\tpages: [\"configuration\", \"changelog\"],\n\t});\n\n\tdocGroups.push({\n\t\tgroup: \"Community\",\n\t\tpages: [\"faq\", \"contributing\"],\n\t});\n\n\ttabs.push({ tab: \"Documentation\", groups: docGroups });\n\n\t// API Reference tab — per-package groups with api/ subpages\n\tif (byPackage.size > 0) {\n\t\tconst apiGroups: MintlifyNavGroup[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\t// Sort: index first, then api/index, then api/functions, api/types, api/examples\n\t\t\tconst sorted = slugs.sort((a, b) => {\n\t\t\t\tconst order = (s: string) => {\n\t\t\t\t\tif (s.endsWith(\"/index\")) return 0;\n\t\t\t\t\tif (s.includes(\"/api/index\")) return 1;\n\t\t\t\t\tif (s.includes(\"/api/functions\")) return 2;\n\t\t\t\t\tif (s.includes(\"/api/types\")) return 3;\n\t\t\t\t\tif (s.includes(\"/api/examples\")) return 4;\n\t\t\t\t\treturn 5;\n\t\t\t\t};\n\t\t\t\treturn order(a) - order(b);\n\t\t\t});\n\t\t\tapiGroups.push({ group: `@forge-ts/${pkgName}`, pages: sorted });\n\t\t}\n\t\ttabs.push({ tab: \"API Reference\", groups: apiGroups });\n\t}\n\n\treturn {\n\t\tname: projectName,\n\t\ttheme: \"mint\",\n\t\tcolors: { primary: \"#0ea5e9\", light: \"#38bdf8\", dark: \"#0284c7\" },\n\t\tnavigation: { tabs },\n\t\tfooter: {\n\t\t\tsocials: context.config.project.repository\n\t\t\t\t? { github: context.config.project.repository }\n\t\t\t\t: {},\n\t\t},\n\t\tcontextual: {\n\t\t\toptions: [\"copy\", \"view\", \"chatgpt\", \"claude\", \"perplexity\"],\n\t\t},\n\t};\n}\n\n/** Add Mintlify-compatible frontmatter to a doc page. */\nfunction addMintlifyFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\n\tconst lines = [\"---\", `title: \"${title}\"`];\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\t// Strip existing frontmatter block if present, then prepend ours\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Mintlify SSG adapter.\n * Implements the {@link SSGAdapter} contract for the Mintlify platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"mintlify\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"docs.json\"\n * ```\n * @public\n */\nexport const mintlifyAdapter: SSGAdapter = {\n\ttarget: \"mintlify\",\n\tdisplayName: \"Mintlify\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\tconst docsJson = buildDocsJson(context);\n\t\treturn {\n\t\t\ttarget: \"mintlify\",\n\t\t\tfiles: [{ path: \"docs.json\", content: JSON.stringify(docsJson, null, 2) }],\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {},\n\t\t\tscripts: {},\n\t\t\tinstructions: [\n\t\t\t\t\"Preview locally: npx @mintlify/cli dev\",\n\t\t\t\t\"Deploy: Push to GitHub and connect at mintlify.com\",\n\t\t\t],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => {\n\t\t\tlet content = addMintlifyFrontmatter(page);\n\t\t\t// Strip any top-level h1 lines — Mintlify renders frontmatter title as h1\n\t\t\tcontent = content.replace(/^# .+$/m, \"\").replace(/\\n{3,}/g, \"\\n\\n\");\n\t\t\t// Ensure opening code fences that have no language tag get a typescript tag.\n\t\t\t// We track fence state so we only tag opening fences, not closing ones.\n\t\t\tlet insideFence = false;\n\t\t\tcontent = content\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.map((line) => {\n\t\t\t\t\tif (insideFence) {\n\t\t\t\t\t\tif (/^```\\s*$/.test(line)) {\n\t\t\t\t\t\t\tinsideFence = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn line;\n\t\t\t\t\t}\n\t\t\t\t\t// Opening fence with a language — track but don't modify\n\t\t\t\t\tif (/^```\\S/.test(line)) {\n\t\t\t\t\t\tinsideFence = true;\n\t\t\t\t\t\treturn line;\n\t\t\t\t\t}\n\t\t\t\t\t// Opening fence with no language — add typescript\n\t\t\t\t\tif (/^```\\s*$/.test(line)) {\n\t\t\t\t\t\tinsideFence = true;\n\t\t\t\t\t\treturn \"```typescript\";\n\t\t\t\t\t}\n\t\t\t\t\treturn line;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t\treturn {\n\t\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\t\tcontent,\n\t\t\t\tstub: page.stub,\n\t\t\t};\n\t\t});\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\tconst config = buildDocsJson(context);\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \"docs.json\",\n\t\t\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t\t\t},\n\t\t];\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"@mintlify/cli\", \"dev\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"Mintlify Dev Server\",\n\t\t\turl: \"http://localhost:3000\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn existsSync(join(outDir, \"docs.json\"));\n\t},\n};\n\n// Self-register\nregisterAdapter(mintlifyAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\n/** Build the sidebars.ts content from doc pages. */\nfunction buildSidebarsTs(pages: DocPage[]): string {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\n\treturn (\n\t\t`import type { SidebarsConfig } from \"@docusaurus/plugin-content-docs\";\\n\\n` +\n\t\t`const sidebars: SidebarsConfig = ${json};\\n\\n` +\n\t\t`export default sidebars;\\n`\n\t);\n}\n\n/** Build the docusaurus.config.ts content. */\nfunction buildDocusaurusConfig(context: AdapterContext): string {\n\tconst { projectName, projectDescription } = context;\n\tconst description = projectDescription ?? `${projectName} documentation`;\n\n\treturn (\n\t\t`import { themes as prismThemes } from \"prism-react-renderer\";\\n` +\n\t\t`import type { Config } from \"@docusaurus/types\";\\n` +\n\t\t`import type * as Preset from \"@docusaurus/preset-classic\";\\n\\n` +\n\t\t`const config: Config = {\\n` +\n\t\t` title: \"${projectName}\",\\n` +\n\t\t` tagline: \"${description}\",\\n` +\n\t\t` url: \"https://your-domain.com\",\\n` +\n\t\t` baseUrl: \"/\",\\n` +\n\t\t` onBrokenLinks: \"throw\",\\n` +\n\t\t` onBrokenMarkdownLinks: \"warn\",\\n` +\n\t\t` i18n: {\\n` +\n\t\t` defaultLocale: \"en\",\\n` +\n\t\t` locales: [\"en\"],\\n` +\n\t\t` },\\n` +\n\t\t` presets: [\\n` +\n\t\t` [\\n` +\n\t\t` \"classic\",\\n` +\n\t\t` {\\n` +\n\t\t` docs: {\\n` +\n\t\t` routeBasePath: \"/\",\\n` +\n\t\t` sidebarPath: \"./sidebars.ts\",\\n` +\n\t\t` },\\n` +\n\t\t` blog: false,\\n` +\n\t\t` } satisfies Preset.Options,\\n` +\n\t\t` ],\\n` +\n\t\t` ],\\n` +\n\t\t` themeConfig: {\\n` +\n\t\t` prism: {\\n` +\n\t\t` theme: prismThemes.github,\\n` +\n\t\t` darkTheme: prismThemes.dracula,\\n` +\n\t\t` },\\n` +\n\t\t` } satisfies Preset.ThemeConfig,\\n` +\n\t\t`} satisfies Config;\\n\\n` +\n\t\t`export default config;\\n`\n\t);\n}\n\n/** Build the package.json content for a Docusaurus site. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"docusaurus start\",\n\t\t\t\"docs:build\": \"docusaurus build\",\n\t\t\t\"docs:serve\": \"docusaurus serve\",\n\t\t},\n\t\tdependencies: {\n\t\t\t\"@docusaurus/core\": \"^3.9.2\",\n\t\t\t\"@docusaurus/preset-classic\": \"^3.9.2\",\n\t\t\t\"@mdx-js/react\": \"^3.0.0\",\n\t\t\treact: \"^19.0.0\",\n\t\t\t\"react-dom\": \"^19.0.0\",\n\t\t\t\"prism-react-renderer\": \"^2.3.0\",\n\t\t},\n\t\tdevDependencies: {\n\t\t\t\"@docusaurus/tsconfig\": \"^3.9.2\",\n\t\t\t\"@docusaurus/types\": \"^3.9.2\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add Docusaurus-compatible frontmatter to a doc page. */\nfunction addDocusaurusFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\tconst sidebarLabel = page.frontmatter.sidebar_label\n\t\t? String(page.frontmatter.sidebar_label)\n\t\t: title;\n\tconst sidebarPosition = page.frontmatter.sidebar_position;\n\n\tconst lines = [\"---\", `title: \"${title}\"`, `sidebar_label: \"${sidebarLabel}\"`];\n\tif (sidebarPosition !== undefined) {\n\t\tlines.push(`sidebar_position: ${sidebarPosition}`);\n\t}\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Docusaurus SSG adapter.\n * Implements the {@link SSGAdapter} contract for the Docusaurus platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"docusaurus\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"sidebars.ts\"\n * ```\n * @public\n */\nexport const docusaurusAdapter: SSGAdapter = {\n\ttarget: \"docusaurus\",\n\tdisplayName: \"Docusaurus\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\treturn {\n\t\t\ttarget: \"docusaurus\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \"docusaurus.config.ts\", content: buildDocusaurusConfig(context) },\n\t\t\t\t{ path: \"sidebars.ts\", content: buildSidebarsTs(context.pages) },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t\t{ path: \"tsconfig.json\", content: '{ \"extends\": \"@docusaurus/tsconfig\" }\\n' },\n\t\t\t],\n\t\t\tdependencies: {\n\t\t\t\t\"@docusaurus/core\": \"^3.9.2\",\n\t\t\t\t\"@docusaurus/preset-classic\": \"^3.9.2\",\n\t\t\t\t\"@mdx-js/react\": \"^3.0.0\",\n\t\t\t\treact: \"^19.0.0\",\n\t\t\t\t\"react-dom\": \"^19.0.0\",\n\t\t\t\t\"prism-react-renderer\": \"^2.3.0\",\n\t\t\t},\n\t\t\tdevDependencies: {\n\t\t\t\t\"@docusaurus/tsconfig\": \"^3.9.2\",\n\t\t\t\t\"@docusaurus/types\": \"^3.9.2\",\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"docusaurus start\",\n\t\t\t\t\"docs:build\": \"docusaurus build\",\n\t\t\t\t\"docs:serve\": \"docusaurus serve\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addDocusaurusFrontmatter(page),\n\t\t\tstub: page.stub,\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \"sidebars.ts\",\n\t\t\t\tcontent: buildSidebarsTs(context.pages),\n\t\t\t},\n\t\t];\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"docusaurus\", \"start\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"Docusaurus Dev Server\",\n\t\t\turl: \"http://localhost:3000\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn (\n\t\t\texistsSync(join(outDir, \"sidebars.ts\")) ||\n\t\t\texistsSync(join(outDir, \"docusaurus.config.ts\")) ||\n\t\t\texistsSync(join(outDir, \"docusaurus.config.js\"))\n\t\t);\n\t},\n};\n\n// Self-register\nregisterAdapter(docusaurusAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"mdx\",\n\tsupportsMdx: true,\n\trequiresFrontmatter: false,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n/**\n * Render a plain object as a JS module export.\n * Values are always strings so we can use JSON.stringify on the object\n * and then replace the surrounding braces with a default export statement.\n */\nfunction renderMetaJs(meta: Record<string, string>): string {\n\tconst json = JSON.stringify(meta, null, 2);\n\treturn `export default ${json};\\n`;\n}\n\n/** Build all _meta.js files for the Nextra v4 navigation. */\nfunction buildMetaFiles(pages: DocPage[]): GeneratedFile[] {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst files: GeneratedFile[] = [];\n\n\t// Root _meta.js (content/ directory in Nextra v4)\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\tfiles.push({\n\t\tpath: \"content/_meta.js\",\n\t\tcontent: renderMetaJs(rootMeta),\n\t});\n\n\t// Per-package _meta.js\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: `content/packages/${pkgName}/_meta.js`,\n\t\t\tcontent: renderMetaJs(pkgMeta),\n\t\t});\n\t}\n\n\t// content/packages/_meta.js when there are multiple packages\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"content/packages/_meta.js\",\n\t\t\tcontent: renderMetaJs(packagesMeta),\n\t\t});\n\t}\n\n\treturn files;\n}\n\n/** Build the app/layout.tsx content for Nextra v4. */\nfunction buildAppLayout(context: AdapterContext): string {\n\tconst { projectName } = context;\n\treturn (\n\t\t`import { Layout } from \"nextra-theme-docs\";\\n` +\n\t\t`import { Head } from \"nextra/components\";\\n` +\n\t\t`import { getPageMap } from \"nextra/page-map\";\\n` +\n\t\t`import type { ReactNode } from \"react\";\\n\\n` +\n\t\t`export const metadata = {\\n` +\n\t\t` title: {\\n` +\n\t\t` template: \\`%s – ${projectName}\\`,\\n` +\n\t\t` },\\n` +\n\t\t`};\\n\\n` +\n\t\t`export default async function RootLayout({ children }: { children: ReactNode }) {\\n` +\n\t\t` const pageMap = await getPageMap();\\n` +\n\t\t` return (\\n` +\n\t\t` <html lang=\"en\" suppressHydrationWarning>\\n` +\n\t\t` <Head />\\n` +\n\t\t` <body>\\n` +\n\t\t` <Layout pageMap={pageMap} docsRepositoryBase=\"\">\\n` +\n\t\t` {children}\\n` +\n\t\t` </Layout>\\n` +\n\t\t` </body>\\n` +\n\t\t` </html>\\n` +\n\t\t` );\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build the app/[[...mdxPath]]/page.tsx content for Nextra v4. */\nfunction buildCatchAllPage(): string {\n\treturn (\n\t\t`import { generateStaticParamsFor, importPage } from \"nextra/pages\";\\n\\n` +\n\t\t`export const generateStaticParams = generateStaticParamsFor(\"mdxPath\");\\n\\n` +\n\t\t`export async function generateMetadata(props: {\\n` +\n\t\t` params: Promise<Record<string, string[]>>;\\n` +\n\t\t`}) {\\n` +\n\t\t` const params = await props.params;\\n` +\n\t\t` const { metadata } = await importPage(params.mdxPath);\\n` +\n\t\t` return metadata;\\n` +\n\t\t`}\\n\\n` +\n\t\t`const Wrapper = importPage;\\n` +\n\t\t`export default async function Page(props: {\\n` +\n\t\t` params: Promise<Record<string, string[]>>;\\n` +\n\t\t`}) {\\n` +\n\t\t` const params = await props.params;\\n` +\n\t\t` const result = await importPage(params.mdxPath);\\n` +\n\t\t` const { default: MDXContent } = result;\\n` +\n\t\t` return <MDXContent {...props} params={params} />;\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build mdx-components.ts for Nextra v4. */\nfunction buildMdxComponents(): string {\n\treturn (\n\t\t`import { useMDXComponents as getNextraComponents } from \"nextra-theme-docs\";\\n\\n` +\n\t\t`export function useMDXComponents(components: Record<string, unknown>) {\\n` +\n\t\t` return getNextraComponents(components);\\n` +\n\t\t`}\\n`\n\t);\n}\n\n/** Build next.config.ts for Nextra v4. */\nfunction buildNextConfig(): string {\n\treturn (\n\t\t`import nextra from \"nextra\";\\n\\n` +\n\t\t`const withNextra = nextra({\\n` +\n\t\t` contentDirBasePath: \"/\",\\n` +\n\t\t`});\\n\\n` +\n\t\t`export default withNextra({\\n` +\n\t\t` output: \"export\",\\n` +\n\t\t` images: { unoptimized: true },\\n` +\n\t\t`});\\n`\n\t);\n}\n\n/** Build package.json for Nextra v4. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"next dev\",\n\t\t\t\"docs:build\": \"next build\",\n\t\t\t\"docs:serve\": \"next start\",\n\t\t},\n\t\tdependencies: {\n\t\t\tnext: \"^15\",\n\t\t\tnextra: \"^4\",\n\t\t\t\"nextra-theme-docs\": \"^4\",\n\t\t\treact: \"^19\",\n\t\t\t\"react-dom\": \"^19\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add Nextra-compatible frontmatter to a doc page (title only — description optional). */\nfunction addNextraFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tif (!title) {\n\t\treturn page.content;\n\t}\n\n\tconst lines = [\"---\", `title: \"${title}\"`, \"---\", \"\"];\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * Nextra SSG adapter (v4, App Router).\n * Implements the {@link SSGAdapter} contract for the Nextra platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"nextra\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \"content/_meta.js\"\n * ```\n * @public\n */\nexport const nextraAdapter: SSGAdapter = {\n\ttarget: \"nextra\",\n\tdisplayName: \"Nextra\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\tconst metaFiles = buildMetaFiles(context.pages);\n\t\treturn {\n\t\t\ttarget: \"nextra\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \"next.config.ts\", content: buildNextConfig() },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t\t{ path: \"mdx-components.ts\", content: buildMdxComponents() },\n\t\t\t\t{ path: \"app/layout.tsx\", content: buildAppLayout(context) },\n\t\t\t\t{ path: \"app/[[...mdxPath]]/page.tsx\", content: buildCatchAllPage() },\n\t\t\t\t...metaFiles,\n\t\t\t],\n\t\t\tdependencies: {\n\t\t\t\tnext: \"^15\",\n\t\t\t\tnextra: \"^4\",\n\t\t\t\t\"nextra-theme-docs\": \"^4\",\n\t\t\t\treact: \"^19\",\n\t\t\t\t\"react-dom\": \"^19\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"next dev\",\n\t\t\t\t\"docs:build\": \"next build\",\n\t\t\t\t\"docs:serve\": \"next start\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.replace(/\\.md$/, \".mdx\"),\n\t\t\tcontent: addNextraFrontmatter(page),\n\t\t\tstub: page.stub,\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn buildMetaFiles(context.pages);\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"next\", \"dev\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"Nextra Dev Server (Next.js)\",\n\t\t\turl: \"http://localhost:3000\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn (\n\t\t\texistsSync(join(outDir, \"content/_meta.js\")) ||\n\t\t\texistsSync(join(outDir, \"next.config.ts\")) ||\n\t\t\texistsSync(join(outDir, \"next.config.js\"))\n\t\t);\n\t},\n};\n\n// Self-register\nregisterAdapter(nextraAdapter);\n","import type { DocPage } from \"../site-generator.js\";\nimport { registerAdapter } from \"./registry.js\";\nimport type {\n\tAdapterContext,\n\tGeneratedFile,\n\tScaffoldManifest,\n\tSSGAdapter,\n\tSSGStyleGuide,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Style guide\n// ---------------------------------------------------------------------------\n\nconst styleGuide: SSGStyleGuide = {\n\tpageExtension: \"md\",\n\tsupportsMdx: false,\n\trequiresFrontmatter: true,\n\tmaxHeadingDepth: 4,\n\tdefaultImports: [],\n\tcodeBlockLanguage: \"typescript\",\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\n/** Build the sidebar structure from doc pages. */\nfunction buildSidebar(pages: DocPage[]): VitePressGroup[] {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn sidebar;\n}\n\n/** Build the .vitepress/config.mts content. */\nfunction buildVitePressConfig(context: AdapterContext): string {\n\tconst { projectName, projectDescription } = context;\n\tconst description = projectDescription ?? `${projectName} documentation`;\n\tconst sidebar = buildSidebar(context.pages);\n\tconst sidebarJson = JSON.stringify(sidebar, null, 4).split(\"\\n\").join(\"\\n \");\n\n\treturn (\n\t\t`import { defineConfig } from \"vitepress\";\\n\\n` +\n\t\t`// https://vitepress.dev/reference/site-config\\n` +\n\t\t`export default defineConfig({\\n` +\n\t\t` title: \"${projectName}\",\\n` +\n\t\t` description: \"${description}\",\\n` +\n\t\t` themeConfig: {\\n` +\n\t\t` nav: [\\n` +\n\t\t` { text: \"Home\", link: \"/\" },\\n` +\n\t\t` ],\\n` +\n\t\t` sidebar: ${sidebarJson},\\n` +\n\t\t` socialLinks: [],\\n` +\n\t\t` },\\n` +\n\t\t`});\\n`\n\t);\n}\n\n/** Build package.json for a VitePress site. */\nfunction buildPackageJson(context: AdapterContext): string {\n\tconst pkg = {\n\t\tname: `${context.projectName}-docs`,\n\t\tversion: \"0.0.0\",\n\t\tprivate: true,\n\t\ttype: \"module\",\n\t\tscripts: {\n\t\t\t\"docs:dev\": \"vitepress dev\",\n\t\t\t\"docs:build\": \"vitepress build\",\n\t\t\t\"docs:preview\": \"vitepress preview\",\n\t\t},\n\t\tdevDependencies: {\n\t\t\tvitepress: \"^2.0.0\",\n\t\t},\n\t};\n\treturn `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\n/** Add VitePress-compatible frontmatter to a doc page. */\nfunction addVitepressFrontmatter(page: DocPage): string {\n\tconst title = String(page.frontmatter.title ?? \"\");\n\tconst description = page.frontmatter.description\n\t\t? String(page.frontmatter.description)\n\t\t: undefined;\n\n\tconst lines = [\"---\", `title: \"${title}\"`, \"outline: deep\"];\n\tif (description) {\n\t\tlines.push(`description: \"${description}\"`);\n\t}\n\tlines.push(\"---\", \"\");\n\n\tconst body = page.content.replace(/^---[\\s\\S]*?---\\n+/, \"\");\n\treturn lines.join(\"\\n\") + body;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter\n// ---------------------------------------------------------------------------\n\n/**\n * VitePress SSG adapter.\n * Implements the {@link SSGAdapter} contract for the VitePress platform.\n *\n * @example\n * ```typescript\n * import { getAdapter } from \"@forge-ts/gen\";\n * const adapter = getAdapter(\"vitepress\");\n * const configs = adapter.generateConfig(context);\n * console.log(configs[0].path); // \".vitepress/config.mts\"\n * ```\n * @public\n */\nexport const vitepressAdapter: SSGAdapter = {\n\ttarget: \"vitepress\",\n\tdisplayName: \"VitePress\",\n\tstyleGuide,\n\n\tscaffold(context: AdapterContext): ScaffoldManifest {\n\t\treturn {\n\t\t\ttarget: \"vitepress\",\n\t\t\tfiles: [\n\t\t\t\t{ path: \".vitepress/config.mts\", content: buildVitePressConfig(context) },\n\t\t\t\t{ path: \"package.json\", content: buildPackageJson(context) },\n\t\t\t],\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {\n\t\t\t\tvitepress: \"^2.0.0\",\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t\"docs:dev\": \"vitepress dev\",\n\t\t\t\t\"docs:build\": \"vitepress build\",\n\t\t\t\t\"docs:preview\": \"vitepress preview\",\n\t\t\t},\n\t\t\tinstructions: [`Run \\`npm run docs:dev\\` inside ${context.outDir} to preview your docs`],\n\t\t};\n\t},\n\n\ttransformPages(pages: DocPage[], _context: AdapterContext): GeneratedFile[] {\n\t\t// VitePress uses .md (not .mdx)\n\t\treturn pages.map((page) => ({\n\t\t\tpath: page.path.endsWith(\".mdx\") ? page.path.replace(/\\.mdx$/, \".md\") : page.path,\n\t\t\tcontent: addVitepressFrontmatter(page),\n\t\t\tstub: page.stub,\n\t\t}));\n\t},\n\n\tgenerateConfig(context: AdapterContext): GeneratedFile[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tpath: \".vitepress/config.mts\",\n\t\t\t\tcontent: buildVitePressConfig(context),\n\t\t\t},\n\t\t];\n\t},\n\n\tgetDevCommand(outDir: string) {\n\t\treturn {\n\t\t\tbin: \"npx\",\n\t\t\targs: [\"vitepress\", \"dev\"],\n\t\t\tcwd: outDir,\n\t\t\tlabel: \"VitePress Dev Server\",\n\t\t\turl: \"http://localhost:5173\",\n\t\t};\n\t},\n\n\tasync detectExisting(outDir: string): Promise<boolean> {\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tconst { join } = await import(\"node:path\");\n\t\treturn existsSync(join(outDir, \".vitepress\"));\n\t},\n};\n\n// Self-register\nregisterAdapter(vitepressAdapter);\n","import type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Derives a compact one-line signature for routing manifest entries.\n * @internal\n */\nfunction compactEntry(symbol: ForgeSymbol): string {\n\tif (symbol.signature) {\n\t\treturn symbol.signature;\n\t}\n\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\treturn `${symbol.kind} ${symbol.name}${ext}`;\n}\n\n/**\n * Generates an `llms.txt` routing manifest from the extracted symbols.\n *\n * The file follows the llms.txt specification: a compact, structured overview\n * designed to help large language models navigate a project's documentation.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsTxt } from \"@forge-ts/gen\";\n * const txt = generateLlmsTxt(symbols, config);\n * console.log(txt.startsWith(\"# \")); // true\n * ```\n * @public\n */\nexport function generateLlmsTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName}`);\n\tlines.push(`> Auto-generated API documentation`);\n\tlines.push(\"\");\n\n\t// Sections block — link to generated files\n\tlines.push(\"## Sections\");\n\tlines.push(\"\");\n\tif (config.gen.formats.includes(\"markdown\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.md): Full API documentation\");\n\t}\n\tif (config.gen.formats.includes(\"mdx\")) {\n\t\tlines.push(\"- [API Reference](./api-reference.mdx): Full API documentation (MDX)\");\n\t}\n\tif (config.gen.llmsTxt) {\n\t\tlines.push(\"- [Full Context](./llms-full.txt): Dense context for LLM consumption\");\n\t}\n\tlines.push(\"\");\n\n\t// Quick Reference block\n\tif (exported.length > 0) {\n\t\tlines.push(\"## Quick Reference\");\n\t\tlines.push(\"\");\n\t\tfor (const symbol of exported) {\n\t\t\tconst summary = symbol.documentation?.summary ?? \"\";\n\t\t\tconst entry = compactEntry(symbol);\n\t\t\tlines.push(summary ? `${entry} - ${summary}` : entry);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a full parameter list section.\n * @internal\n */\nfunction renderParams(params: NonNullable<ForgeSymbol[\"documentation\"]>[\"params\"]): string {\n\tif (!params || params.length === 0) return \"\";\n\tconst lines: string[] = [\"\", \"Parameters:\"];\n\tfor (const p of params) {\n\t\tconst typeStr = p.type ? ` (${p.type})` : \"\";\n\t\tlines.push(`- ${p.name}${typeStr}: ${p.description}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Renders a single symbol section for llms-full.txt.\n * @internal\n */\nfunction renderFullSymbol(symbol: ForgeSymbol, depth: number): string {\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst lines: string[] = [];\n\n\tlines.push(`${hashes} ${symbol.name}${ext}`);\n\n\tif (symbol.signature) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.signature);\n\t}\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(\"\");\n\t\tlines.push(`DEPRECATED: ${symbol.documentation.deprecated}`);\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(\"\");\n\t\tlines.push(symbol.documentation.summary);\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tconst paramBlock = renderParams(params);\n\tif (paramBlock) {\n\t\tlines.push(paramBlock);\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (${symbol.documentation.returns.type})`\n\t\t\t: \"\";\n\t\tlines.push(\"\");\n\t\tlines.push(`Returns${retType}: ${symbol.documentation.returns.description}`);\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Example:\");\n\t\tfor (const ex of examples) {\n\t\t\tconst exLines = ex.code.trim().split(\"\\n\");\n\t\t\tfor (const l of exLines) {\n\t\t\t\tlines.push(` ${l}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Render children inline\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tlines.push(\"\");\n\t\tlines.push(\"Members:\");\n\t\tfor (const child of children) {\n\t\t\tlines.push(\"\");\n\t\t\tconst childSection = renderFullSymbol(child, depth + 1);\n\t\t\t// indent child one level\n\t\t\tfor (const cl of childSection.split(\"\\n\")) {\n\t\t\t\tlines.push(cl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates an `llms-full.txt` dense context file from the extracted symbols.\n *\n * Unlike `llms.txt`, this file contains complete documentation for every\n * exported symbol, intended for LLM ingestion that requires full context.\n *\n * @param symbols - The symbols to include.\n * @param config - The resolved {@link ForgeConfig}.\n * @returns The generated `llms-full.txt` content as a string.\n * @example\n * ```typescript\n * import { generateLlmsFullTxt } from \"@forge-ts/gen\";\n * const fullTxt = generateLlmsFullTxt(symbols, config);\n * console.log(fullTxt.includes(\"Full Context\")); // true\n * ```\n * @public\n */\nexport function generateLlmsFullTxt(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\tconst projectName = config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst lines: string[] = [];\n\n\tlines.push(`# ${projectName} - Full Context`);\n\tlines.push(\"\");\n\tlines.push(`Root: ${config.rootDir}`);\n\tlines.push(`Generated: ${new Date().toISOString()}`);\n\tlines.push(\"\");\n\n\t// Group by kind\n\tconst kindGroups: Record<string, ForgeSymbol[]> = {};\n\tfor (const symbol of exported) {\n\t\tconst list = kindGroups[symbol.kind] ?? [];\n\t\tlist.push(symbol);\n\t\tkindGroups[symbol.kind] = list;\n\t}\n\n\tconst kindOrder: Array<ForgeSymbol[\"kind\"]> = [\n\t\t\"function\",\n\t\t\"class\",\n\t\t\"interface\",\n\t\t\"type\",\n\t\t\"enum\",\n\t\t\"variable\",\n\t];\n\n\tconst kindLabels: Record<string, string> = {\n\t\tfunction: \"Functions\",\n\t\tclass: \"Classes\",\n\t\tinterface: \"Interfaces\",\n\t\ttype: \"Types\",\n\t\tenum: \"Enums\",\n\t\tvariable: \"Variables\",\n\t};\n\n\tfor (const kind of kindOrder) {\n\t\tconst group = kindGroups[kind];\n\t\tif (!group || group.length === 0) continue;\n\n\t\tlines.push(`## ${kindLabels[kind]}`);\n\t\tlines.push(\"\");\n\n\t\tfor (const symbol of group) {\n\t\t\tlines.push(renderFullSymbol(symbol, 3));\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * Options controlling Markdown output.\n * @public\n */\nexport interface MarkdownOptions {\n\t/** Whether to use MDX syntax (default: Markdown). */\n\tmdx?: boolean;\n}\n\n/** Display labels for each symbol kind. */\nconst KIND_LABELS: Record<ForgeSymbol[\"kind\"], string> = {\n\tfunction: \"Functions\",\n\tclass: \"Classes\",\n\tinterface: \"Interfaces\",\n\ttype: \"Types\",\n\tenum: \"Enums\",\n\tvariable: \"Variables\",\n\tmethod: \"Methods\",\n\tproperty: \"Properties\",\n};\n\n/** Canonical ordering for top-level kind groups. */\nconst KIND_ORDER: Array<ForgeSymbol[\"kind\"]> = [\n\t\"function\",\n\t\"class\",\n\t\"interface\",\n\t\"type\",\n\t\"enum\",\n\t\"variable\",\n];\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Build the frontmatter block for the configured SSG target. */\nfunction buildFrontmatter(config: ForgeConfig, mdx: boolean): string {\n\tconst target = config.gen.ssgTarget;\n\tif (!target) return \"\";\n\n\tconst lines: string[] = [\"---\"];\n\n\tswitch (target) {\n\t\tcase \"docusaurus\":\n\t\t\tlines.push(\"sidebar_position: 1\");\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"mintlify\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tbreak;\n\t\tcase \"nextra\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"description: Auto-generated API reference\");\n\t\t\tbreak;\n\t\tcase \"vitepress\":\n\t\t\tlines.push(\"title: API Reference\");\n\t\t\tlines.push(\"outline: deep\");\n\t\t\tbreak;\n\t}\n\n\tlines.push(\"---\");\n\tif (mdx) {\n\t\tlines.push(\"\");\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\n/** Build MDX import block for custom components. */\nfunction buildMdxImports(): string {\n\treturn 'import { Callout } from \"@components/Callout\";\\n\\n';\n}\n\n/**\n * Render a deprecation notice banner.\n * @internal\n */\nfunction renderDeprecation(deprecated: string): string {\n\treturn `> **Deprecated**: ${deprecated}\\n`;\n}\n\n/**\n * Render source location line.\n * @internal\n */\nfunction renderSourceLink(symbol: ForgeSymbol, rootDir: string): string {\n\tconst rel = relative(rootDir, symbol.filePath);\n\treturn `_Defined in \\`${rel}:${symbol.line}\\`_\\n`;\n}\n\n/**\n * Renders a symbol at H3 level (used for both top-level and children).\n * @internal\n */\nfunction renderSymbolSection(\n\tsymbol: ForgeSymbol,\n\trootDir: string,\n\tmdx: boolean,\n\tdepth: number,\n): string {\n\tconst lines: string[] = [];\n\tconst hashes = \"#\".repeat(depth);\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tlines.push(`${hashes} \\`${symbol.name}${ext}\\``);\n\tlines.push(\"\");\n\n\tif (symbol.documentation?.deprecated) {\n\t\tlines.push(renderDeprecation(symbol.documentation.deprecated));\n\t}\n\n\tlines.push(renderSourceLink(symbol, rootDir));\n\n\tif (symbol.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(symbol.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tlines.push(symbol.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tlines.push(\"**Parameters**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of params) {\n\t\t\tconst typeStr = p.type ? ` (\\`${p.type}\\`)` : \"\";\n\t\t\tlines.push(`- \\`${p.name}\\`${typeStr} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retType = symbol.documentation.returns.type\n\t\t\t? ` (\\`${symbol.documentation.returns.type}\\`)`\n\t\t\t: \"\";\n\t\tlines.push(`**Returns**${retType}: ${symbol.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tlines.push(\"**Throws**\");\n\t\tlines.push(\"\");\n\t\tfor (const t of throws) {\n\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tlines.push(\"**Examples**\");\n\t\tlines.push(\"\");\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\t// Render children (class members, enum values, interface properties)\n\tconst children = symbol.children ?? [];\n\tif (children.length > 0 && depth < 5) {\n\t\tconst childDepth = depth + 1;\n\t\tfor (const child of children) {\n\t\t\tlines.push(renderSymbolSection(child, rootDir, mdx, childDepth));\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Build a Table of Contents from grouped symbols.\n * @internal\n */\nfunction buildToc(groups: Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>): string {\n\tconst lines: string[] = [];\n\tlines.push(\"## Table of Contents\");\n\tlines.push(\"\");\n\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tconst anchor = toAnchor(label);\n\t\tlines.push(`- [${label}](#${anchor})`);\n\n\t\tfor (const symbol of group) {\n\t\t\tconst ext = kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst displayName = `${symbol.name}${ext}`;\n\t\t\tconst symAnchor = toAnchor(displayName);\n\t\t\tlines.push(` - [\\`${displayName}\\`](#${symAnchor})`);\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Generates a Markdown (or MDX) string from a list of symbols.\n *\n * @param symbols - The symbols to document.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Rendering options.\n * @returns The generated Markdown string.\n * @example\n * ```typescript\n * import { generateMarkdown } from \"@forge-ts/gen\";\n * const md = generateMarkdown(symbols, config, { mdx: false });\n * console.log(md.startsWith(\"# API Reference\")); // true\n * ```\n * @public\n */\nexport function generateMarkdown(\n\tsymbols: ForgeSymbol[],\n\tconfig: ForgeConfig,\n\toptions: MarkdownOptions = {},\n): string {\n\tconst mdx = options.mdx ?? false;\n\tconst exported = symbols.filter((s) => s.exported);\n\n\t// Group by kind (top-level only — children are nested under their parent)\n\tconst topLevel = exported.filter((s) => s.kind !== \"method\" && s.kind !== \"property\");\n\n\tconst groups = new Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>();\n\tfor (const symbol of topLevel) {\n\t\tconst list = groups.get(symbol.kind) ?? [];\n\t\tlist.push(symbol);\n\t\tgroups.set(symbol.kind, list);\n\t}\n\n\tconst parts: string[] = [];\n\n\t// Frontmatter\n\tconst frontmatter = buildFrontmatter(config, mdx);\n\tif (frontmatter) {\n\t\tparts.push(frontmatter);\n\t}\n\n\t// MDX imports\n\tif (mdx) {\n\t\tparts.push(buildMdxImports());\n\t}\n\n\t// Page title + preamble\n\tparts.push(\"# API Reference\\n\");\n\tparts.push(\n\t\t`Generated by [forge-ts](https://github.com/kryptobaseddev/forge-ts) from \\`${config.rootDir}\\`.\\n`,\n\t);\n\n\t// Table of Contents\n\tif (topLevel.length > 0) {\n\t\tparts.push(buildToc(groups));\n\t}\n\n\t// Symbol groups\n\tfor (const kind of KIND_ORDER) {\n\t\tconst group = groups.get(kind);\n\t\tif (!group || group.length === 0) continue;\n\n\t\tconst label = KIND_LABELS[kind];\n\t\tparts.push(`## ${label}\\n`);\n\n\t\tfor (const symbol of group) {\n\t\t\tparts.push(renderSymbolSection(symbol, config.rootDir, mdx, 3));\n\t\t\tparts.push(\"\");\n\t\t}\n\t}\n\n\treturn `${parts\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type { ForgeSymbol } from \"@forge-ts/core\";\n\nconst SECTION_START = \"<!-- forge-ts:start -->\";\nconst SECTION_END = \"<!-- forge-ts:end -->\";\n\n/** Options controlling README sync behaviour. */\nexport interface ReadmeSyncOptions {\n\t/** Include a \"Documented with forge-ts\" badge above the API table. */\n\tbadge?: boolean;\n\t/** Include first @example from each top-level symbol. */\n\tincludeExamples?: boolean;\n}\n\n/**\n * Derives a compact type signature string for the table.\n * @internal\n */\nfunction tableSignature(symbol: ForgeSymbol): string {\n\tif (!symbol.signature) {\n\t\tconst ext = symbol.kind === \"function\" ? \"()\" : \"\";\n\t\treturn `\\`${symbol.name}${ext}\\``;\n\t}\n\t// Keep it short: show at most 60 characters of the signature\n\tconst sig =\n\t\tsymbol.signature.length > 60 ? `${symbol.signature.slice(0, 57)}...` : symbol.signature;\n\treturn `\\`${sig}\\``;\n}\n\n/**\n * Renders the first @example block as a fenced code snippet.\n * @internal\n */\nfunction renderFirstExample(symbol: ForgeSymbol): string {\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length === 0) return \"\";\n\tconst ex = examples[0];\n\treturn [\"\", `\\`\\`\\`${ex.language}`, ex.code.trim(), \"```\"].join(\"\\n\");\n}\n\n/**\n * Builds the markdown table rows for the API overview.\n * @internal\n */\nfunction buildApiTable(symbols: ForgeSymbol[], includeExamples: boolean): string[] {\n\tconst lines: string[] = [\"| Symbol | Kind | Description |\", \"|--------|------|-------------|\"];\n\n\tfor (const s of symbols) {\n\t\tconst sig = tableSignature(s);\n\t\tconst summary = s.documentation?.summary ?? \"\";\n\t\tlines.push(`| ${sig} | ${s.kind} | ${summary} |`);\n\t}\n\n\tif (includeExamples) {\n\t\tconst withExamples = symbols.filter((s) => (s.documentation?.examples ?? []).length > 0);\n\t\tif (withExamples.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"### Examples\");\n\t\t\tfor (const s of withExamples) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tlines.push(`#### \\`${s.name}${ext}\\``);\n\t\t\t\tlines.push(renderFirstExample(s));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines;\n}\n\n/**\n * Injects a summary of exported symbols into a `README.md` file.\n *\n * The content is placed between `<!-- forge-ts:start -->` and\n * `<!-- forge-ts:end -->` comment markers. If neither marker exists, the\n * summary is appended to the end of the file.\n *\n * @param readmePath - Absolute path to the `README.md` to update.\n * @param symbols - Symbols to summarise in the README.\n * @param options - Options controlling sync behaviour.\n * @returns `true` if the file was modified, `false` otherwise.\n * @example\n * ```typescript\n * import { syncReadme } from \"@forge-ts/gen\";\n * const modified = await syncReadme(\"/path/to/README.md\", symbols);\n * console.log(modified); // true if README was updated\n * ```\n * @public\n */\nexport async function syncReadme(\n\treadmePath: string,\n\tsymbols: ForgeSymbol[],\n\toptions: ReadmeSyncOptions = {},\n): Promise<boolean> {\n\tconst exported = symbols.filter((s) => s.exported);\n\tif (exported.length === 0) return false;\n\n\tconst badge = options.badge ?? false;\n\tconst includeExamples = options.includeExamples ?? false;\n\n\tconst innerLines: string[] = [];\n\tinnerLines.push(\"## API Overview\");\n\tinnerLines.push(\"\");\n\n\tif (badge) {\n\t\tinnerLines.push(\n\t\t\t\"[](https://github.com/forge-ts/forge-ts)\",\n\t\t);\n\t\tinnerLines.push(\"\");\n\t}\n\n\tinnerLines.push(...buildApiTable(exported, includeExamples));\n\n\tconst summaryLines = [SECTION_START, \"\", ...innerLines, \"\", SECTION_END];\n\tconst injection = summaryLines.join(\"\\n\");\n\n\tlet existing = existsSync(readmePath) ? await readFile(readmePath, \"utf8\") : \"\";\n\n\tconst startIdx = existing.indexOf(SECTION_START);\n\tconst endIdx = existing.indexOf(SECTION_END);\n\n\tif (startIdx !== -1 && endIdx !== -1) {\n\t\texisting =\n\t\t\texisting.slice(0, startIdx) + injection + existing.slice(endIdx + SECTION_END.length);\n\t} else {\n\t\texisting = `${existing.trimEnd()}\\n\\n${injection}\\n`;\n\t}\n\n\tawait writeFile(readmePath, existing, \"utf8\");\n\treturn true;\n}\n","import { basename, relative } from \"node:path\";\nimport type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n/**\n * A single generated documentation page.\n * @public\n */\nexport interface DocPage {\n\t/** Relative path from outDir (e.g., \"packages/core/index.md\") */\n\tpath: string;\n\t/** Page content (Markdown or MDX) */\n\tcontent: string;\n\t/** Frontmatter fields */\n\tfrontmatter: Record<string, string | number | boolean>;\n\t/**\n\t * When true, this page is scaffolding intended for human/agent editing.\n\t * Stub pages are created only on the first build and never overwritten,\n\t * preserving manual edits across subsequent `forge-ts build` runs.\n\t * Auto-generated pages (stub=false) are always regenerated from source.\n\t */\n\tstub?: boolean;\n}\n\n/**\n * Options controlling the doc site generator.\n * @public\n */\nexport interface SiteGeneratorOptions {\n\t/** Output format */\n\tformat: \"markdown\" | \"mdx\";\n\t/** SSG target for frontmatter */\n\tssgTarget?: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\";\n\t/** Project name */\n\tprojectName: string;\n\t/** Project description */\n\tprojectDescription?: string;\n\t/** Repository URL (auto-detected from package.json). */\n\trepositoryUrl?: string;\n\t/** npm package name for install commands. */\n\tpackageName?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nfunction toAnchor(text: string): string {\n\treturn text\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9\\s-]/g, \"\")\n\t\t.trim()\n\t\t.replace(/\\s+/g, \"-\");\n}\n\n/** Escape pipe characters for use inside Markdown table cells. */\nfunction escapePipe(text: string): string {\n\treturn text.replace(/\\|/g, \"\\\\|\");\n}\n\n/** Build a frontmatter block string from the fields map. */\nfunction serializeFrontmatter(fields: Record<string, string | number | boolean>): string {\n\tif (Object.keys(fields).length === 0) return \"\";\n\tconst lines = [\"---\"];\n\tfor (const [key, value] of Object.entries(fields)) {\n\t\tlines.push(`${key}: ${value}`);\n\t}\n\tlines.push(\"---\");\n\treturn `${lines.join(\"\\n\")}\\n\\n`;\n}\n\n/**\n * Build frontmatter fields for the given SSG target.\n * @internal\n */\nfunction buildFrontmatterFields(\n\ttitle: string,\n\tdescription: string,\n\tssgTarget: SiteGeneratorOptions[\"ssgTarget\"],\n\tsidebarPosition?: number,\n): Record<string, string | number | boolean> {\n\tif (!ssgTarget) return {};\n\n\tswitch (ssgTarget) {\n\t\tcase \"docusaurus\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = {\n\t\t\t\ttitle,\n\t\t\t\tsidebar_label: title,\n\t\t\t};\n\t\t\tif (sidebarPosition !== undefined) {\n\t\t\t\tfields.sidebar_position = sidebarPosition;\n\t\t\t}\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"mintlify\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tcase \"nextra\":\n\t\t\treturn { title };\n\t\tcase \"vitepress\": {\n\t\t\tconst fields: Record<string, string | number | boolean> = { title, outline: \"deep\" };\n\t\t\tif (description) {\n\t\t\t\tfields.description = description;\n\t\t\t}\n\t\t\treturn fields;\n\t\t}\n\t\tdefault:\n\t\t\treturn {};\n\t}\n}\n\n/**\n * Strip `.md` or `.mdx` extension from a link path and normalise leading `./`.\n * Produces bare slug links compatible with Mintlify and most other SSGs.\n * @internal\n */\nfunction slugLink(path: string): string {\n\t// Remove leading ./ if present\n\tlet slug = path.startsWith(\"./\") ? path.slice(2) : path;\n\t// Remove .md / .mdx extension\n\tslug = slug.replace(/\\.(mdx?)$/, \"\");\n\treturn `/${slug}`;\n}\n\n/** Truncate a description to at most maxLen chars. */\nfunction truncate(text: string, maxLen = 80): string {\n\tif (text.length <= maxLen) return text;\n\treturn `${text.slice(0, maxLen - 3)}...`;\n}\n\n// ---------------------------------------------------------------------------\n// Package grouping\n// ---------------------------------------------------------------------------\n\n/**\n * Groups symbols by their package based on file path.\n *\n * For monorepos (symbols under `packages/<name>/`) the package name is\n * derived from the directory segment immediately after `packages/`.\n * For non-monorepo projects all symbols fall under the project name.\n *\n * @param symbols - All extracted symbols.\n * @param rootDir - Absolute path to the project root.\n * @returns A map from package name to symbol list.\n * @example\n * ```typescript\n * import { groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, \"/path/to/project\");\n * console.log(grouped.has(\"core\")); // true for monorepo\n * ```\n * @public\n */\nexport function groupSymbolsByPackage(\n\tsymbols: ForgeSymbol[],\n\trootDir: string,\n): Map<string, ForgeSymbol[]> {\n\tconst result = new Map<string, ForgeSymbol[]>();\n\n\tfor (const symbol of symbols) {\n\t\tconst rel = relative(rootDir, symbol.filePath);\n\t\t// Detect monorepo structure: packages/<name>/...\n\t\tconst monorepoMatch = /^packages[\\\\/]([^\\\\/]+)[\\\\/]/.exec(rel);\n\t\tconst packageName = monorepoMatch ? monorepoMatch[1] : basename(rootDir);\n\n\t\tconst list = result.get(packageName) ?? [];\n\t\tlist.push(symbol);\n\t\tresult.set(packageName, list);\n\t}\n\n\treturn result;\n}\n\n// ---------------------------------------------------------------------------\n// Symbol kind sets\n// ---------------------------------------------------------------------------\n\nconst TYPE_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"interface\", \"type\", \"enum\"]);\n\nconst FUNCTION_KINDS: ReadonlySet<ForgeSymbol[\"kind\"]> = new Set([\"function\", \"class\"]);\n\n// ---------------------------------------------------------------------------\n// ORIENT: Landing page (index)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the root landing page following the 5-stage information architecture.\n *\n * Structure: intro sentence, Features, Installation, Quick Example, Packages table, Next Steps.\n * @internal\n */\nfunction renderProjectIndexPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\tconst lines: string[] = [];\n\n\t// Intro — no h1, frontmatter title handles the heading\n\tif (options.projectDescription) {\n\t\tlines.push(`**${options.projectName}** — ${options.projectDescription}`);\n\t} else {\n\t\tlines.push(\n\t\t\t`**${options.projectName}** is a TypeScript documentation toolkit that performs a single AST traversal of your project and produces API docs, OpenAPI specs, executable doctests, and AI context files in one pass.`,\n\t\t);\n\t}\n\tlines.push(\"\");\n\n\t// Features section\n\tlines.push(\"## Features\");\n\tlines.push(\"\");\n\n\tconst pkgCount = symbolsByPackage.size;\n\tif (pkgCount > 1) {\n\t\tlines.push(`- ${pkgCount} packages with full TypeScript support`);\n\t} else {\n\t\tlines.push(\"- Full TypeScript support with TSDoc extraction\");\n\t}\n\tlines.push(\"- Auto-generated API reference from source code\");\n\tlines.push(\"- Executable `@example` blocks as doctests\");\n\tlines.push(\"- AI-ready context files from a single build pass\");\n\tlines.push(\"\");\n\n\t// Installation section\n\tlines.push(\"## Installation\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install -D ${options.packageName ?? \"@forge-ts/cli\"}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\t// Quick Example — first @example from any exported function\n\tlet firstExample: { code: string; language: string } | undefined;\n\touter: for (const [, symbols] of symbolsByPackage) {\n\t\tfor (const s of symbols) {\n\t\t\tif (!s.exported || s.kind !== \"function\") continue;\n\t\t\tconst ex = s.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tfirstExample = ex;\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (firstExample) {\n\t\tlines.push(\"## Quick Example\");\n\t\tlines.push(\"\");\n\t\tlines.push(`\\`\\`\\`${firstExample.language || \"typescript\"}`);\n\t\tlines.push(firstExample.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\t// Packages table\n\tif (symbolsByPackage.size > 0) {\n\t\tlines.push(\"## Packages\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"| Package | Description |\");\n\t\tlines.push(\"|---------|-------------|\");\n\t\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\t\tconst pkgDoc = symbols\n\t\t\t\t.map((s) => s.documentation?.tags?.packageDocumentation?.[0])\n\t\t\t\t.find(Boolean);\n\t\t\tconst exported = symbols.filter(\n\t\t\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t\t\t);\n\t\t\tconst rawDesc = pkgDoc ?? `${exported.length} exported symbol(s).`;\n\t\t\tconst desc = escapePipe(truncate(rawDesc));\n\t\t\tconst link = `[\\`${pkgName}\\`](${slugLink(`packages/${pkgName}/index`)})`;\n\t\t\tlines.push(`| ${link} | ${desc} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\t// Next Steps\n\tlines.push(\"## Next Steps\");\n\tlines.push(\"\");\n\tlines.push(`- [Getting Started](/getting-started) — Step-by-step guide`);\n\tlines.push(`- [API Reference](/packages) — Full API documentation`);\n\tlines.push(`- [Concepts](/concepts) — How it works`);\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// ORIENT: Getting Started (tutorial)\n// ---------------------------------------------------------------------------\n\n/**\n * Render a step-by-step getting started tutorial page.\n * @internal\n */\nfunction renderGettingStartedPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\t// Find the first exported function with an example\n\tlet firstExample: { code: string; language: string } | undefined;\n\n\touter: for (const [, symbols] of symbolsByPackage) {\n\t\tfor (const s of symbols) {\n\t\t\tif (!s.exported || s.kind !== \"function\") continue;\n\t\t\tconst ex = s.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tfirstExample = ex;\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst lines: string[] = [];\n\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(`Get up and running with **${options.projectName}** in minutes.`);\n\n\tif (options.projectDescription) {\n\t\tlines.push(\"\");\n\t\tlines.push(options.projectDescription);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\"## Step 1: Install\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install -D ${options.packageName ?? \"@forge-ts/cli\"}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tlines.push(\"## Step 2: Add TSDoc to your code\");\n\tlines.push(\"\");\n\tlines.push(\"Add TSDoc comments to your exported functions and types:\");\n\tlines.push(\"\");\n\tlines.push(\"```typescript\");\n\tlines.push(\"/**\");\n\tlines.push(\" * Adds two numbers together.\");\n\tlines.push(\" * @param a - First number\");\n\tlines.push(\" * @param b - Second number\");\n\tlines.push(\" * @returns The sum of a and b\");\n\tlines.push(\" * @example\");\n\tlines.push(\" * ```typescript\");\n\tlines.push(\" * const result = add(1, 2); // => 3\");\n\tlines.push(\" * ```\");\n\tlines.push(\" */\");\n\tlines.push(\"export function add(a: number, b: number): number {\");\n\tlines.push(\" return a + b;\");\n\tlines.push(\"}\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tlines.push(\"## Step 3: Run forge-ts check\");\n\tlines.push(\"\");\n\tlines.push(\"Lint your TSDoc coverage before generating docs:\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(\"npx forge-ts check\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\tlines.push(\"Expected output:\");\n\tlines.push(\"\");\n\tlines.push(\"```\");\n\tlines.push(\"forge-ts: checking TSDoc coverage...\");\n\tlines.push(\" ✓ All public symbols documented\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tlines.push(\"## Step 4: Generate docs\");\n\tlines.push(\"\");\n\tlines.push(\"Build your documentation site:\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(\"npx forge-ts build\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tif (firstExample) {\n\t\tlines.push(\"Your code examples become live documentation:\");\n\t\tlines.push(\"\");\n\t\tlines.push(`\\`\\`\\`${firstExample.language || \"typescript\"}`);\n\t\tlines.push(firstExample.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## What's Next?\");\n\tlines.push(\"\");\n\tlines.push(\"- [Concepts](/concepts) — Understand how forge-ts works\");\n\tlines.push(\"- [API Reference](/packages) — Full API documentation\");\n\tlines.push(\"- [Guides](/guides) — Practical how-to guides\");\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// LEARN: Concepts (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the concepts stub page with key abstractions from package docs.\n * @internal\n */\nfunction renderConceptsPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\tconst lines: string[] = [];\n\n\tlines.push(`This page explains the core concepts behind **${options.projectName}**.`);\n\tlines.push(\"\");\n\tlines.push(\n\t\t\"> This is a stub page. Edit this file to add your project's conceptual documentation.\",\n\t);\n\tlines.push(\"> Auto-generated sections below (inside FORGE:AUTO markers) update on every build.\");\n\tlines.push(\"\");\n\n\t// Auto-enriched section: How It Works — regenerated even in existing stubs\n\tconst pkgDoc = [...symbolsByPackage.values()]\n\t\t.flatMap((syms) => syms.map((s) => s.documentation?.tags?.packageDocumentation?.[0]))\n\t\t.find(Boolean);\n\n\tlines.push(\"<!-- FORGE:AUTO-START how-it-works -->\");\n\tlines.push(\"## How It Works\");\n\tlines.push(\"\");\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t} else {\n\t\tlines.push(\n\t\t\t`${options.projectName} processes your TypeScript source with a single AST traversal, extracting TSDoc comments and type information to generate documentation.`,\n\t\t);\n\t}\n\tlines.push(\"\");\n\tlines.push(\"<!-- FORGE:AUTO-END how-it-works -->\");\n\tlines.push(\"\");\n\n\t// Auto-enriched section: Key Abstractions — regenerated even in existing stubs\n\tconst allTypeSymbols = [...symbolsByPackage.values()]\n\t\t.flat()\n\t\t.filter((s) => s.exported && TYPE_KINDS.has(s.kind));\n\n\tif (allTypeSymbols.length > 0) {\n\t\tlines.push(\"<!-- FORGE:AUTO-START key-abstractions -->\");\n\t\tlines.push(\"## Key Abstractions\");\n\t\tlines.push(\"\");\n\t\tfor (const s of allTypeSymbols) {\n\t\t\tconst desc = s.documentation?.summary ?? `The \\`${s.name}\\` ${s.kind}.`;\n\t\t\tlines.push(`- **\\`${s.name}\\`** — ${desc}`);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"<!-- FORGE:AUTO-END key-abstractions -->\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// BUILD: Guides index (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the guides index stub page.\n * @internal\n */\nfunction renderGuidesIndexPage(): string {\n\treturn [\n\t\t\"Practical how-to guides for common tasks.\",\n\t\t\"\",\n\t\t\"> Add your guides to the `guides/` directory. Each `.md` or `.mdx` file will appear here automatically.\",\n\t\t\"\",\n\t\t\"## Getting Things Done\",\n\t\t\"\",\n\t\t\"Guides will appear here as you add them. Start by creating a file like `guides/my-guide.md`.\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Package API overview (api/index)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the API overview page for a package — a full symbol table.\n * @internal\n */\nfunction renderApiIndexPage(pkgName: string, symbols: ForgeSymbol[]): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst functions = exported.filter((s) => FUNCTION_KINDS.has(s.kind));\n\tconst types = exported.filter((s) => TYPE_KINDS.has(s.kind));\n\tconst others = exported.filter((s) => !FUNCTION_KINDS.has(s.kind) && !TYPE_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\n\t// Find @packageDocumentation summary\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t\tlines.push(\"\");\n\t} else {\n\t\tlines.push(`API reference for the \\`${pkgName}\\` package.`);\n\t\tlines.push(\"\");\n\t}\n\n\tconst renderGroup = (group: ForgeSymbol[], heading: string, pathSuffix: string) => {\n\t\tif (group.length === 0) return;\n\t\tlines.push(`## ${heading}`);\n\t\tlines.push(\"\");\n\t\tlines.push(\"| Symbol | Kind | Description |\");\n\t\tlines.push(\"|--------|------|-------------|\");\n\t\tfor (const s of group) {\n\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\tconst anchor = toAnchor(`${s.name}${ext}`);\n\t\t\tconst link = `[\\`${s.name}${ext}\\`](${slugLink(`packages/${pkgName}/${pathSuffix}`)}#${anchor})`;\n\t\t\tconst rawSummary = s.documentation?.summary ?? \"\";\n\t\t\tconst summary = escapePipe(truncate(rawSummary));\n\t\t\tlines.push(`| ${link} | ${s.kind} | ${summary} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t};\n\n\trenderGroup(functions, \"Functions & Classes\", \"api/functions\");\n\trenderGroup(types, \"Types & Interfaces\", \"api/types\");\n\trenderGroup(others, \"Other Exports\", \"api/functions\");\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Package overview (packages/<name>/index)\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the overview (index) page for a package.\n * @internal\n */\nfunction renderPackageOverviewPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\t// Find @packageDocumentation summary from tags\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\n\tconst lines: string[] = [];\n\n\t// No h1 — frontmatter title handles the heading in Mintlify and other SSGs\n\n\tif (pkgDoc) {\n\t\tlines.push(pkgDoc);\n\t\tlines.push(\"\");\n\t}\n\n\tif (exported.length > 0) {\n\t\t// Group by kind: functions first, then types, then others\n\t\tconst functions = exported.filter((s) => FUNCTION_KINDS.has(s.kind));\n\t\tconst types = exported.filter((s) => TYPE_KINDS.has(s.kind));\n\t\tconst others = exported.filter((s) => !FUNCTION_KINDS.has(s.kind) && !TYPE_KINDS.has(s.kind));\n\n\t\tconst renderGroup = (group: ForgeSymbol[], heading: string) => {\n\t\t\tif (group.length === 0) return;\n\t\t\tlines.push(`## ${heading}`);\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"| Symbol | Kind | Description |\");\n\t\t\tlines.push(\"|--------|------|-------------|\");\n\t\t\tfor (const s of group) {\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tconst name = `[\\`${s.name}${ext}\\`](${slugLink(`packages/${packageName}/api/index`)}#${toAnchor(`${s.name}${ext}`)})`;\n\t\t\t\tconst rawSummary = s.documentation?.summary ?? \"\";\n\t\t\t\tconst summary = escapePipe(truncate(rawSummary));\n\t\t\t\tlines.push(`| ${name} | ${s.kind} | ${summary} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t};\n\n\t\trenderGroup(functions, \"Functions & Classes\");\n\t\trenderGroup(types, \"Types & Interfaces\");\n\t\trenderGroup(others, \"Other Exports\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Types page\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the types page for a package (interfaces, type aliases, enums).\n * @internal\n */\nfunction renderTypesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst typeSymbols = symbols.filter((s) => s.exported && TYPE_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(\"Type contracts exported by this package: interfaces, type aliases, and enums.\");\n\tlines.push(\"\");\n\n\tfor (const s of typeSymbols) {\n\t\tlines.push(`## ${s.name}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature && s.kind !== \"interface\") {\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst children = (s.children ?? []).filter((c) => c.kind === \"property\" || c.kind === \"method\");\n\n\t\tif (children.length > 0) {\n\t\t\tlines.push(\"| Property | Type | Required | Description |\");\n\t\t\tlines.push(\"|----------|------|----------|-------------|\");\n\t\t\tfor (const child of children) {\n\t\t\t\tconst name = `\\`${child.name}\\``;\n\t\t\t\tconst type = child.signature ? `\\`${escapePipe(child.signature)}\\`` : \"—\";\n\t\t\t\tconst optional =\n\t\t\t\t\tchild.signature?.includes(\"?\") || child.signature?.includes(\"undefined\") ? \"No\" : \"Yes\";\n\t\t\t\tconst description = escapePipe(child.documentation?.summary || child.name);\n\t\t\t\tlines.push(`| ${name} | ${type} | ${optional} | ${description} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\t// Suppress unused variable warning\n\tvoid packageName;\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Functions page\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the functions page for a package (functions and classes).\n * @internal\n */\nfunction renderFunctionsPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst fnSymbols = symbols.filter((s) => s.exported && FUNCTION_KINDS.has(s.kind));\n\n\tconst lines: string[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(\"Functions and classes exported by this package.\");\n\tlines.push(\"\");\n\n\tfor (const s of fnSymbols) {\n\t\tconst paramSig =\n\t\t\ts.kind === \"function\" && s.documentation?.params\n\t\t\t\t? s.documentation.params.map((p) => p.name).join(\", \")\n\t\t\t\t: \"\";\n\t\tconst heading = s.kind === \"function\" ? `${s.name}(${paramSig})` : s.name;\n\n\t\tlines.push(`## ${heading}`);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tlines.push(`> **Deprecated**: ${s.documentation.deprecated}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(s.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.signature) {\n\t\t\tlines.push(\"**Signature**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(s.signature);\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst params = s.documentation?.params ?? [];\n\t\tif (params.length > 0) {\n\t\t\tlines.push(\"**Parameters**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"| Name | Type | Description |\");\n\t\t\tlines.push(\"|------|------|-------------|\");\n\t\t\tfor (const p of params) {\n\t\t\t\t// Fall back to extracting type from signature when param.type is absent\n\t\t\t\tlet resolvedType = p.type;\n\t\t\t\tif (!resolvedType && s.signature) {\n\t\t\t\t\t// Try to match `paramName: SomeType` in the signature\n\t\t\t\t\tconst typeMatch = new RegExp(`\\\\b${p.name}\\\\s*[?:]\\\\s*([^,)]+)`).exec(s.signature);\n\t\t\t\t\tif (typeMatch) {\n\t\t\t\t\t\tresolvedType = typeMatch[1].trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst type = resolvedType ? `\\`${escapePipe(resolvedType)}\\`` : \"—\";\n\t\t\t\tlines.push(`| \\`${p.name}\\` | ${type} | ${escapePipe(p.description)} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tif (s.documentation?.returns) {\n\t\t\tconst retType = s.documentation.returns.type ? ` \\`${s.documentation.returns.type}\\`` : \"\";\n\t\t\tlines.push(`**Returns**${retType} — ${s.documentation.returns.description}`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst throws = s.documentation?.throws ?? [];\n\t\tif (throws.length > 0) {\n\t\t\tlines.push(\"**Throws**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const t of throws) {\n\t\t\t\tconst typeStr = t.type ? `\\`${t.type}\\` — ` : \"\";\n\t\t\t\tlines.push(`- ${typeStr}${t.description}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length > 0) {\n\t\t\tconst ex = examples[0];\n\t\t\tlines.push(\"**Example**\");\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`\\`\\`\\`${ex.language || \"typescript\"}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\t// Render class methods\n\t\tconst methods = (s.children ?? []).filter((c) => c.kind === \"method\");\n\t\tif (methods.length > 0) {\n\t\t\tlines.push(\"**Methods**\");\n\t\t\tlines.push(\"\");\n\t\t\tfor (const method of methods) {\n\t\t\t\tlines.push(`### ${method.name}()`);\n\t\t\t\tlines.push(\"\");\n\t\t\t\tif (method.documentation?.summary) {\n\t\t\t\t\tlines.push(method.documentation.summary);\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t\tif (method.signature) {\n\t\t\t\t\tlines.push(\"```typescript\");\n\t\t\t\t\tlines.push(method.signature);\n\t\t\t\t\tlines.push(\"```\");\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Suppress unused variable warning\n\tvoid packageName;\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Examples page\n// ---------------------------------------------------------------------------\n\n/**\n * Renders the examples page for a package — aggregates all @example blocks.\n * @internal\n */\nfunction renderExamplesPage(\n\tpackageName: string,\n\tsymbols: ForgeSymbol[],\n\t_options: SiteGeneratorOptions,\n): string {\n\tconst exported = symbols.filter(\n\t\t(s) => s.exported && s.kind !== \"method\" && s.kind !== \"property\",\n\t);\n\n\tconst lines: string[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tlines.push(\"All usage examples from the package, aggregated for quick reference.\");\n\tlines.push(\"\");\n\n\tlet hasExamples = false;\n\n\tfor (const s of exported) {\n\t\tconst examples = s.documentation?.examples ?? [];\n\t\tif (examples.length === 0) continue;\n\n\t\thasExamples = true;\n\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\tlines.push(`## \\`${s.name}${ext}\\``);\n\t\tlines.push(\"\");\n\n\t\tif (s.documentation?.summary) {\n\t\t\tlines.push(`_${s.documentation.summary}_`);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(\n\t\t\t`[View in API reference](${slugLink(`packages/${packageName}/api/functions`)}#${toAnchor(s.name)})`,\n\t\t);\n\t\tlines.push(\"\");\n\n\t\tfor (const ex of examples) {\n\t\t\tlines.push(`\\`\\`\\`${ex.language || \"typescript\"}`);\n\t\t\tlines.push(ex.code.trim());\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\tif (!hasExamples) {\n\t\tlines.push(\"_No examples documented yet._\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Configuration page\n// ---------------------------------------------------------------------------\n\n/**\n * Render the configuration reference page.\n * @internal\n */\nfunction renderConfigurationPage(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\toptions: SiteGeneratorOptions,\n): string {\n\t// Look for a ForgeConfig-like type across all packages\n\tconst configSymbol = [...symbolsByPackage.values()]\n\t\t.flat()\n\t\t.find((s) => s.exported && TYPE_KINDS.has(s.kind) && /config/i.test(s.name));\n\n\tconst lines: string[] = [];\n\n\tlines.push(`Configuration reference for **${options.projectName}**.`);\n\tlines.push(\"\");\n\tlines.push(\"## forge-ts.config.ts\");\n\tlines.push(\"\");\n\tlines.push(\"Create a `forge-ts.config.ts` file in your project root:\");\n\tlines.push(\"\");\n\tlines.push(\"```typescript\");\n\tlines.push('import { defineConfig } from \"@forge-ts/core\";');\n\tlines.push(\"\");\n\tlines.push(\"export default defineConfig({\");\n\tlines.push(' rootDir: \".\",');\n\tlines.push(' outDir: \"docs/generated\",');\n\tlines.push(\"});\");\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\tif (configSymbol) {\n\t\tlines.push(`## \\`${configSymbol.name}\\``);\n\t\tlines.push(\"\");\n\t\tif (configSymbol.documentation?.summary) {\n\t\t\tlines.push(configSymbol.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tconst children = (configSymbol.children ?? []).filter(\n\t\t\t(c) => c.kind === \"property\" || c.kind === \"method\",\n\t\t);\n\t\tif (children.length > 0) {\n\t\t\tlines.push(\"| Property | Type | Required | Description |\");\n\t\t\tlines.push(\"|----------|------|----------|-------------|\");\n\t\t\tfor (const child of children) {\n\t\t\t\tconst name = `\\`${child.name}\\``;\n\t\t\t\tconst type = child.signature ? `\\`${escapePipe(child.signature)}\\`` : \"—\";\n\t\t\t\tconst optional =\n\t\t\t\t\tchild.signature?.includes(\"?\") || child.signature?.includes(\"undefined\") ? \"No\" : \"Yes\";\n\t\t\t\tconst description = escapePipe(child.documentation?.summary || child.name);\n\t\t\t\tlines.push(`| ${name} | ${type} | ${optional} | ${description} |`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// REFERENCE: Changelog (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the changelog stub page.\n * @internal\n */\nfunction renderChangelogPage(options: SiteGeneratorOptions): string {\n\tconst repoUrl = options.repositoryUrl ?? \"\";\n\tconst changelogLink = repoUrl\n\t\t? `See [CHANGELOG.md](${repoUrl}/blob/main/CHANGELOG.md) for the full release history.`\n\t\t: \"See your project's `CHANGELOG.md` for the full release history.\";\n\treturn [\n\t\t`Release history for **${options.projectName}**.`,\n\t\t\"\",\n\t\t\"> This is a stub page. Link to or embed your `CHANGELOG.md` here.\",\n\t\t\"\",\n\t\tchangelogLink,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// COMMUNITY: FAQ (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the FAQ stub page.\n * @internal\n */\nfunction renderFaqPage(options: SiteGeneratorOptions): string {\n\treturn [\n\t\t`Frequently asked questions about **${options.projectName}**.`,\n\t\t\"\",\n\t\t\"> This is a stub page. Common questions will be added here as they arise.\",\n\t\t\"\",\n\t\t\"## How do I configure forge-ts?\",\n\t\t\"\",\n\t\t\"Create a `forge-ts.config.ts` file in your project root. See [Configuration](/configuration).\",\n\t\t\"\",\n\t\t\"## What TypeScript version is required?\",\n\t\t\"\",\n\t\t\"forge-ts requires TypeScript 5.0 or later.\",\n\t\t\"\",\n\t\t\"## How do I run @example blocks as tests?\",\n\t\t\"\",\n\t\t\"```bash\",\n\t\t\"npx forge-ts test\",\n\t\t\"```\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// COMMUNITY: Contributing (stub)\n// ---------------------------------------------------------------------------\n\n/**\n * Render the contributing stub page.\n * @internal\n */\nfunction renderContributingPage(options: SiteGeneratorOptions): string {\n\tconst repoUrl = options.repositoryUrl ?? \"\";\n\tconst contribLink = repoUrl\n\t\t? `See [CONTRIBUTING.md](${repoUrl}/blob/main/CONTRIBUTING.md) for contribution guidelines.`\n\t\t: \"See your project's `CONTRIBUTING.md` for contribution guidelines.\";\n\treturn [\n\t\t`Contributing to **${options.projectName}**.`,\n\t\t\"\",\n\t\t\"> This is a stub page. Link to or embed your `CONTRIBUTING.md` here.\",\n\t\t\"\",\n\t\tcontribLink,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generates a full multi-page documentation site from symbols grouped by package.\n *\n * Follows a 5-stage information architecture:\n * 1. ORIENT — Landing page, Getting Started\n * 2. LEARN — Concepts (stub)\n * 3. BUILD — Guides (stub)\n * 4. REFERENCE — API Reference, Types, Configuration, Changelog\n * 5. COMMUNITY — FAQ, Contributing (stubs)\n *\n * @param symbolsByPackage - Symbols grouped by package name.\n * @param config - The resolved {@link ForgeConfig}.\n * @param options - Site generation options.\n * @returns An array of {@link DocPage} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateDocSite, groupSymbolsByPackage } from \"@forge-ts/gen\";\n * const grouped = groupSymbolsByPackage(symbols, config.rootDir);\n * const pages = generateDocSite(grouped, config, { format: \"markdown\", projectName: \"my-project\" });\n * console.log(pages.length > 0); // true\n * ```\n * @public\n */\nexport function generateDocSite(\n\tsymbolsByPackage: Map<string, ForgeSymbol[]>,\n\tconfig: ForgeConfig,\n\toptions: SiteGeneratorOptions,\n): DocPage[] {\n\tconst ext = options.format === \"mdx\" ? \"mdx\" : \"md\";\n\tconst pages: DocPage[] = [];\n\n\t// -------------------------------------------------------------------------\n\t// ORIENT\n\t// -------------------------------------------------------------------------\n\n\t// Project landing page\n\tconst indexContent = renderProjectIndexPage(symbolsByPackage, options);\n\tconst indexFrontmatter = buildFrontmatterFields(\n\t\toptions.projectName,\n\t\toptions.projectDescription ?? \"\",\n\t\toptions.ssgTarget,\n\t\t1,\n\t);\n\tpages.push({\n\t\tpath: `index.${ext}`,\n\t\tcontent: `${serializeFrontmatter(indexFrontmatter)}${indexContent.trimEnd()}\\n`,\n\t\tfrontmatter: indexFrontmatter,\n\t});\n\n\t// Getting started\n\tconst gettingStartedContent = renderGettingStartedPage(symbolsByPackage, options);\n\tconst gettingStartedFrontmatter = buildFrontmatterFields(\n\t\t\"Getting Started\",\n\t\t`Quick start guide for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t2,\n\t);\n\tpages.push({\n\t\tpath: `getting-started.${ext}`,\n\t\tcontent: `${serializeFrontmatter(gettingStartedFrontmatter)}${gettingStartedContent.trimEnd()}\\n`,\n\t\tfrontmatter: gettingStartedFrontmatter,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// LEARN\n\t// -------------------------------------------------------------------------\n\n\tconst conceptsContent = renderConceptsPage(symbolsByPackage, options);\n\tconst conceptsFrontmatter = buildFrontmatterFields(\n\t\t\"Concepts\",\n\t\t`Core concepts behind ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t3,\n\t);\n\tpages.push({\n\t\tpath: `concepts.${ext}`,\n\t\tcontent: `${serializeFrontmatter(conceptsFrontmatter)}${conceptsContent.trimEnd()}\\n`,\n\t\tfrontmatter: conceptsFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// BUILD\n\t// -------------------------------------------------------------------------\n\n\tconst guidesContent = renderGuidesIndexPage();\n\tconst guidesFrontmatter = buildFrontmatterFields(\n\t\t\"Guides\",\n\t\t`How-to guides for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t\t4,\n\t);\n\tpages.push({\n\t\tpath: `guides/index.${ext}`,\n\t\tcontent: `${serializeFrontmatter(guidesFrontmatter)}${guidesContent.trimEnd()}\\n`,\n\t\tfrontmatter: guidesFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// REFERENCE — per-package pages\n\t// -------------------------------------------------------------------------\n\n\tlet pkgPosition = 1;\n\tfor (const [pkgName, symbols] of symbolsByPackage) {\n\t\tconst pkgBase = `packages/${pkgName}`;\n\n\t\t// Package overview index\n\t\tconst overviewContent = renderPackageOverviewPage(pkgName, symbols, options);\n\t\tconst overviewFrontmatter = buildFrontmatterFields(\n\t\t\tpkgName,\n\t\t\t`${pkgName} package overview`,\n\t\t\toptions.ssgTarget,\n\t\t\tpkgPosition,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/index.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(overviewFrontmatter)}${overviewContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: overviewFrontmatter,\n\t\t});\n\n\t\t// api/index — symbol table overview\n\t\tconst apiIndexContent = renderApiIndexPage(pkgName, symbols);\n\t\tconst apiIndexFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — API Reference`,\n\t\t\t`Full API reference for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/index.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(apiIndexFrontmatter)}${apiIndexContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: apiIndexFrontmatter,\n\t\t});\n\n\t\t// api/functions\n\t\tconst functionsContent = renderFunctionsPage(pkgName, symbols, options);\n\t\tconst functionsFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Functions`,\n\t\t\t`Functions and classes for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/functions.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(functionsFrontmatter)}${functionsContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: functionsFrontmatter,\n\t\t});\n\n\t\t// api/types\n\t\tconst typesContent = renderTypesPage(pkgName, symbols, options);\n\t\tconst typesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Types`,\n\t\t\t`Type contracts for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/types.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(typesFrontmatter)}${typesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: typesFrontmatter,\n\t\t});\n\n\t\t// api/examples\n\t\tconst examplesContent = renderExamplesPage(pkgName, symbols, options);\n\t\tconst examplesFrontmatter = buildFrontmatterFields(\n\t\t\t`${pkgName} — Examples`,\n\t\t\t`Usage examples for the ${pkgName} package`,\n\t\t\toptions.ssgTarget,\n\t\t);\n\t\tpages.push({\n\t\t\tpath: `${pkgBase}/api/examples.${ext}`,\n\t\t\tcontent: `${serializeFrontmatter(examplesFrontmatter)}${examplesContent.trimEnd()}\\n`,\n\t\t\tfrontmatter: examplesFrontmatter,\n\t\t});\n\n\t\tpkgPosition++;\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// REFERENCE — project-level\n\t// -------------------------------------------------------------------------\n\n\tconst configContent = renderConfigurationPage(symbolsByPackage, options);\n\tconst configFrontmatter = buildFrontmatterFields(\n\t\t\"Configuration\",\n\t\t`Configuration reference for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `configuration.${ext}`,\n\t\tcontent: `${serializeFrontmatter(configFrontmatter)}${configContent.trimEnd()}\\n`,\n\t\tfrontmatter: configFrontmatter,\n\t});\n\n\tconst changelogContent = renderChangelogPage(options);\n\tconst changelogFrontmatter = buildFrontmatterFields(\n\t\t\"Changelog\",\n\t\t`Release history for ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `changelog.${ext}`,\n\t\tcontent: `${serializeFrontmatter(changelogFrontmatter)}${changelogContent.trimEnd()}\\n`,\n\t\tfrontmatter: changelogFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// -------------------------------------------------------------------------\n\t// COMMUNITY\n\t// -------------------------------------------------------------------------\n\n\tconst faqContent = renderFaqPage(options);\n\tconst faqFrontmatter = buildFrontmatterFields(\n\t\t\"FAQ\",\n\t\t`Frequently asked questions about ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `faq.${ext}`,\n\t\tcontent: `${serializeFrontmatter(faqFrontmatter)}${faqContent.trimEnd()}\\n`,\n\t\tfrontmatter: faqFrontmatter,\n\t\tstub: true,\n\t});\n\n\tconst contributingContent = renderContributingPage(options);\n\tconst contributingFrontmatter = buildFrontmatterFields(\n\t\t\"Contributing\",\n\t\t`How to contribute to ${options.projectName}`,\n\t\toptions.ssgTarget,\n\t);\n\tpages.push({\n\t\tpath: `contributing.${ext}`,\n\t\tcontent: `${serializeFrontmatter(contributingFrontmatter)}${contributingContent.trimEnd()}\\n`,\n\t\tfrontmatter: contributingFrontmatter,\n\t\tstub: true,\n\t});\n\n\t// Suppress unused variable warning — config is available for future use\n\tvoid config;\n\n\treturn pages;\n}\n","import type { ForgeConfig, ForgeSymbol } from \"@forge-ts/core\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Converts a package name or project name to a lowercase-hyphenated slug\n * valid for agentskills.io directory names (max 64 chars, hyphens only).\n * @internal\n */\nfunction toDirectoryName(name: string): string {\n\treturn name\n\t\t.replace(/^@[^/]+\\//, \"\") // strip npm scope\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 64);\n}\n\n/**\n * Returns true when `kind` is a concept-level declaration.\n * @internal\n */\nfunction isConceptKind(kind: ForgeSymbol[\"kind\"]): boolean {\n\treturn kind === \"interface\" || kind === \"type\" || kind === \"class\" || kind === \"enum\";\n}\n\n/**\n * Returns the primary CLI command name from bin config, or undefined.\n * @internal\n */\nfunction primaryBinName(config: ForgeConfig): string | undefined {\n\tconst bin = config.project.bin;\n\tif (!bin) return undefined;\n\tconst keys = Object.keys(bin);\n\tif (keys.length === 0) return undefined;\n\t// Prefer a key matching the package name (sans scope)\n\tconst pkgShort = config.project.packageName?.replace(/^@[^/]+\\//, \"\");\n\treturn keys.find((k) => k === pkgShort) ?? keys[0];\n}\n\n// ---------------------------------------------------------------------------\n// Description builder\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a structured description with numbered trigger scenarios.\n * Derived from the project's exported symbols, config, and package metadata.\n * @internal\n */\nfunction buildDescription(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst projectName =\n\t\tconfig.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"this project\";\n\n\t// Lead sentence — prefer package.json description, then @packageDocumentation\n\tconst pkgDoc = symbols.find((s) => s.documentation?.tags?.packageDocumentation);\n\tconst leadSentence =\n\t\tconfig.project.description ??\n\t\tpkgDoc?.documentation?.summary ??\n\t\texported.find((s) => s.documentation?.summary)?.documentation?.summary;\n\n\t// Build numbered trigger scenarios from detected capabilities\n\tconst triggers: string[] = [];\n\tlet n = 1;\n\n\tconst cliName = primaryBinName(config);\n\tif (cliName) {\n\t\ttriggers.push(`(${n++}) running ${cliName} CLI commands`);\n\t}\n\n\tconst functionCount = exported.filter((s) => s.kind === \"function\").length;\n\tif (functionCount > 0) {\n\t\ttriggers.push(`(${n++}) calling its ${functionCount} API functions`);\n\t}\n\n\tconst hasRoutes = exported.some((s) => s.documentation?.tags?.route !== undefined);\n\tif (hasRoutes) {\n\t\ttriggers.push(`(${n++}) building HTTP API routes`);\n\t}\n\n\tconst configSym = exported.find(\n\t\t(s) =>\n\t\t\t(s.kind === \"interface\" || s.kind === \"type\") &&\n\t\t\t/config/i.test(s.name) &&\n\t\t\t(s.children?.length ?? 0) > 0,\n\t);\n\tif (configSym) {\n\t\ttriggers.push(`(${n++}) configuring ${projectName}`);\n\t}\n\n\tconst typeCount = exported.filter(\n\t\t(s) => s.kind === \"interface\" || s.kind === \"type\" || s.kind === \"enum\",\n\t).length;\n\tif (typeCount > 0) {\n\t\ttriggers.push(`(${n++}) understanding its ${typeCount} type definitions`);\n\t}\n\n\tconst classCount = exported.filter((s) => s.kind === \"class\").length;\n\tif (classCount > 0) {\n\t\ttriggers.push(`(${n++}) working with its ${classCount} classes`);\n\t}\n\n\t// Keywords from package.json as additional trigger words\n\tconst keywords = config.project.keywords ?? [];\n\tif (keywords.length > 0) {\n\t\tconst kwStr = keywords.slice(0, 5).join('\", \"');\n\t\ttriggers.push(`(${n++}) user mentions \"${kwStr}\"`);\n\t}\n\n\ttriggers.push(`(${n}) user mentions \"${projectName}\" or asks about its API`);\n\n\tlet description = \"\";\n\tif (leadSentence) {\n\t\tdescription += `${leadSentence} `;\n\t}\n\tdescription += `Use when: ${triggers.join(\", \")}.`;\n\n\tif (description.length > 1024) {\n\t\tdescription = `${description.slice(0, 1021)}...`;\n\t}\n\treturn description;\n}\n\n// ---------------------------------------------------------------------------\n// Body section renderers\n// ---------------------------------------------------------------------------\n\n/**\n * Renders a Quick Start section with install command and key CLI/API usage.\n * @internal\n */\nfunction renderQuickStart(symbols: ForgeSymbol[], config: ForgeConfig): string[] {\n\tconst lines: string[] = [];\n\tconst projectName = config.project.packageName ?? \"project\";\n\tconst cliName = primaryBinName(config);\n\n\tlines.push(\"## Quick Start\");\n\tlines.push(\"\");\n\tlines.push(\"```bash\");\n\tlines.push(`npm install ${cliName ? \"-D \" : \"\"}${projectName}`);\n\tlines.push(\"```\");\n\tlines.push(\"\");\n\n\t// If CLI exists, show key commands instead of API example\n\tif (cliName && config.project.scripts) {\n\t\tconst scripts = config.project.scripts;\n\t\tconst relevantKeys = [\"check\", \"test\", \"build\", \"lint\", \"dev\", \"start\", \"generate\"];\n\t\tconst cliCommands: string[] = [];\n\t\tfor (const key of relevantKeys) {\n\t\t\tconst script = scripts[key];\n\t\t\tif (script?.includes(cliName)) {\n\t\t\t\tcliCommands.push(`npx ${cliName} ${key}`);\n\t\t\t}\n\t\t}\n\t\t// Fallback: show common subcommands from bin keys\n\t\tif (cliCommands.length === 0) {\n\t\t\tcliCommands.push(`npx ${cliName} --help`);\n\t\t}\n\t\tif (cliCommands.length > 0) {\n\t\t\tlines.push(\"```bash\");\n\t\t\tfor (const cmd of cliCommands.slice(0, 5)) {\n\t\t\t\tlines.push(cmd);\n\t\t\t}\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\t} else {\n\t\t// No CLI — show first @example as quick start\n\t\tconst exported = symbols.filter((s) => s.exported);\n\t\tfor (const sym of exported) {\n\t\t\tif (sym.kind !== \"function\" && sym.kind !== \"class\") continue;\n\t\t\tconst ex = sym.documentation?.examples?.[0];\n\t\t\tif (ex) {\n\t\t\t\tlines.push(`\\`\\`\\`${ex.language || \"typescript\"}`);\n\t\t\t\tlines.push(ex.code.trim());\n\t\t\t\tlines.push(\"```\");\n\t\t\t\tlines.push(\"\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines;\n}\n\n/**\n * Renders a compact API summary table for the body. Full details go to the reference.\n * @internal\n */\nfunction renderApiSummaryTable(symbols: ForgeSymbol[]): string[] {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst functions = exported.filter((s) => s.kind === \"function\");\n\tif (functions.length === 0) return [];\n\n\tconst lines: string[] = [];\n\tlines.push(\"## API\");\n\tlines.push(\"\");\n\tlines.push(\"| Function | Description |\");\n\tlines.push(\"|----------|-------------|\");\n\n\tfor (const fn of functions.slice(0, 15)) {\n\t\tconst desc = fn.documentation?.summary ?? \"\";\n\t\tlines.push(`| \\`${fn.name}()\\` | ${desc} |`);\n\t}\n\tif (functions.length > 15) {\n\t\tlines.push(`| ... | ${functions.length - 15} more — see API reference |`);\n\t}\n\tlines.push(\"\");\n\treturn lines;\n}\n\n/**\n * Renders key types list (top 10) from exported types and interfaces.\n * @internal\n */\nfunction renderKeyTypes(symbols: ForgeSymbol[], max: number = 10): string[] {\n\tconst lines: string[] = [];\n\tlet count = 0;\n\tfor (const sym of symbols) {\n\t\tif (count >= max) break;\n\t\tif (!sym.exported) continue;\n\t\tif (!isConceptKind(sym.kind)) continue;\n\t\tconst summary = sym.documentation?.summary ?? \"\";\n\t\tconst label = summary ? `**\\`${sym.name}\\`** — ${summary}` : `**\\`${sym.name}\\`**`;\n\t\tlines.push(`- ${label}`);\n\t\tcount++;\n\t}\n\treturn lines;\n}\n\n/**\n * Renders a Configuration section with a code example using inline comments.\n * @internal\n */\nfunction renderConfigSection(symbols: ForgeSymbol[], config: ForgeConfig): string[] {\n\tconst exported = symbols.filter((s) => s.exported);\n\tconst configSymbol = exported.find(\n\t\t(s) =>\n\t\t\t(s.kind === \"interface\" || s.kind === \"type\") &&\n\t\t\t/config/i.test(s.name) &&\n\t\t\t(s.children?.length ?? 0) > 0,\n\t);\n\tif (!configSymbol) return [];\n\n\tconst lines: string[] = [];\n\tlines.push(\"## Configuration\");\n\tlines.push(\"\");\n\n\t// Generate a code example with inline comments from child summaries\n\tconst children = configSymbol.children ?? [];\n\tif (children.length > 0) {\n\t\tconst projectName = config.project.packageName ?? \"project\";\n\t\tconst importSource = projectName.includes(\"/\")\n\t\t\t? `${projectName.split(\"/\")[0]}/${projectName.split(\"/\")[1]}`\n\t\t\t: projectName;\n\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(`import type { ${configSymbol.name} } from \"${importSource}\";`);\n\t\tlines.push(\"\");\n\t\tlines.push(`const config: Partial<${configSymbol.name}> = {`);\n\t\tfor (const child of children.slice(0, 10)) {\n\t\t\tconst comment = child.documentation?.summary;\n\t\t\tif (comment) {\n\t\t\t\tlines.push(` // ${comment}`);\n\t\t\t}\n\t\t\t// Infer a sensible default value from the type\n\t\t\tconst type = extractType(child.signature);\n\t\t\tconst defaultVal = inferDefaultValue(type, child.name);\n\t\t\tlines.push(` ${child.name}: ${defaultVal},`);\n\t\t}\n\t\tif (children.length > 10) {\n\t\t\tlines.push(` // ... ${children.length - 10} more options`);\n\t\t}\n\t\tlines.push(\"};\");\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"See [references/CONFIGURATION.md](references/CONFIGURATION.md) for full details.\");\n\tlines.push(\"\");\n\treturn lines;\n}\n\n/**\n * Extracts the type portion from a property signature.\n *\n * The TypeScript checker returns different formats depending on the symbol:\n * - Simple properties: just the type, e.g. `string`, `boolean`\n * - Complex objects: the full inline type, e.g. `{ enabled: boolean; strict: boolean; }`\n * - Named properties: `name: type` (rare — most children are bare types)\n *\n * This function only splits on `:` when the left side is a simple identifier\n * (no braces, parens, or pipes). Otherwise it returns the whole string as-is,\n * since it IS the type.\n *\n * @param signature - The raw signature string from the walker.\n * @returns The extracted type string, or empty string if no signature.\n * @internal\n */\nfunction extractType(signature: string | undefined): string {\n\tif (!signature) return \"\";\n\tconst trimmed = signature.trim();\n\t// If it starts with { or ( or contains |, it's already a type expression\n\tif (/^[{(]/.test(trimmed) || /[|]/.test(trimmed.split(\":\")[0])) {\n\t\treturn trimmed;\n\t}\n\tconst colonIdx = trimmed.indexOf(\":\");\n\tif (colonIdx === -1) return trimmed;\n\t// Only split if the left side looks like a simple identifier (no special chars)\n\tconst left = trimmed.slice(0, colonIdx).trim();\n\tif (/^[a-zA-Z_$][a-zA-Z0-9_$?]*$/.test(left)) {\n\t\treturn trimmed.slice(colonIdx + 1).trim();\n\t}\n\treturn trimmed;\n}\n\n/**\n * Infers a sensible placeholder value from a TypeScript type string.\n * @internal\n */\nfunction inferDefaultValue(type: string, name: string): string {\n\tconst t = type.trim();\n\tif (t === \"boolean\" || t.startsWith(\"boolean\")) return \"true\";\n\tif (t === \"string\" || t.startsWith(\"string\")) return `\"...\"`;\n\tif (t === \"number\" || t.startsWith(\"number\")) return \"0\";\n\tif (t.includes(\"[]\") || t.startsWith(\"Array\")) return \"[]\";\n\tif (t.startsWith(\"{\") || /^[A-Z]/.test(t)) return \"{ /* ... */ }\";\n\tif (/dir|path/i.test(name)) return `\".\"`;\n\treturn `undefined`;\n}\n\n/**\n * Detects gotchas from the project's symbols — things an agent would get\n * wrong without being told. Derived from @throws, @deprecated, and\n * non-obvious type constraints.\n * @internal\n */\nfunction renderGotchas(symbols: ForgeSymbol[]): string[] {\n\tconst lines: string[] = [];\n\tconst exported = symbols.filter((s) => s.exported);\n\n\t// Deprecated symbols\n\tconst deprecated = exported.filter((s) => s.documentation?.deprecated);\n\tfor (const sym of deprecated) {\n\t\tconst reason = sym.documentation?.deprecated ?? \"\";\n\t\tconst msg = reason && reason !== \"true\" ? `: ${reason}` : \"\";\n\t\tlines.push(`- \\`${sym.name}\\` is deprecated${msg}`);\n\t}\n\n\t// Functions that throw\n\tconst throwers = exported.filter(\n\t\t(s) => s.kind === \"function\" && (s.documentation?.throws?.length ?? 0) > 0,\n\t);\n\tfor (const sym of throwers) {\n\t\tfor (const t of sym.documentation?.throws ?? []) {\n\t\t\tlines.push(`- \\`${sym.name}()\\` throws${t.type ? ` \\`${t.type}\\`` : \"\"}: ${t.description}`);\n\t\t}\n\t}\n\n\t// Enums with non-obvious values\n\tconst enums = exported.filter((s) => s.kind === \"enum\" && (s.children?.length ?? 0) > 0);\n\tfor (const sym of enums) {\n\t\tconst values = (sym.children ?? []).map((c) => c.name).join(\", \");\n\t\tlines.push(`- \\`${sym.name}\\` enum values: ${values}`);\n\t}\n\n\treturn lines;\n}\n\n// ---------------------------------------------------------------------------\n// SKILL.md builder\n// ---------------------------------------------------------------------------\n\n/**\n * Generates the full SKILL.md content. Generic for ANY TypeScript project.\n * Content is derived entirely from the project's symbols and metadata.\n * @internal\n */\nfunction buildSkillMd(symbols: ForgeSymbol[], config: ForgeConfig, directoryName: string): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\n\tconst description = buildDescription(symbols, config);\n\n\tconst lines: string[] = [];\n\n\t// ---------------------------------------------------------------------------\n\t// YAML Frontmatter — only name + description per skill spec\n\t// ---------------------------------------------------------------------------\n\tlines.push(\"---\");\n\tlines.push(`name: ${directoryName}`);\n\tlines.push(\"description: >\");\n\tfor (const segment of description.split(\"\\n\")) {\n\t\tlines.push(` ${segment}`);\n\t}\n\tlines.push(\"---\");\n\tlines.push(\"\");\n\n\t// ---------------------------------------------------------------------------\n\t// Title + Overview\n\t// ---------------------------------------------------------------------------\n\tlines.push(`# ${projectName}`);\n\tlines.push(\"\");\n\n\tconst pkgDoc = symbols.find((s) => s.documentation?.tags?.packageDocumentation);\n\tconst overview =\n\t\tconfig.project.description ??\n\t\tpkgDoc?.documentation?.summary ??\n\t\tsymbols.filter((s) => s.exported).find((s) => s.documentation?.summary)?.documentation?.summary;\n\tif (overview) {\n\t\tlines.push(overview);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Quick Start — install + CLI commands or first example\n\t// ---------------------------------------------------------------------------\n\tlines.push(...renderQuickStart(symbols, config));\n\n\t// ---------------------------------------------------------------------------\n\t// API summary table — compact, functions only\n\t// ---------------------------------------------------------------------------\n\tlines.push(...renderApiSummaryTable(symbols));\n\n\t// ---------------------------------------------------------------------------\n\t// Configuration — code example with inline comments\n\t// ---------------------------------------------------------------------------\n\tlines.push(...renderConfigSection(symbols, config));\n\n\t// ---------------------------------------------------------------------------\n\t// Custom sections — injected from config.skill.customSections\n\t// These allow projects to add workflow knowledge, domain context,\n\t// and other information that cannot be derived from symbols alone.\n\t// ---------------------------------------------------------------------------\n\tconst customSections = config.skill.customSections ?? [];\n\tfor (const section of customSections) {\n\t\tlines.push(`## ${section.heading}`);\n\t\tlines.push(\"\");\n\t\tlines.push(section.content);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Gotchas — from @deprecated, @throws, enums + config.skill.extraGotchas\n\t// ---------------------------------------------------------------------------\n\tconst gotchaLines = renderGotchas(symbols);\n\tconst extraGotchas = config.skill.extraGotchas ?? [];\n\tfor (const gotcha of extraGotchas) {\n\t\tgotchaLines.push(`- ${gotcha}`);\n\t}\n\tif (gotchaLines.length > 0) {\n\t\tlines.push(\"## Gotchas\");\n\t\tlines.push(\"\");\n\t\tlines.push(...gotchaLines);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Key Types — top 10 exported types/interfaces\n\t// ---------------------------------------------------------------------------\n\tconst keyTypeLines = renderKeyTypes(symbols);\n\tif (keyTypeLines.length > 0) {\n\t\tlines.push(\"## Key Types\");\n\t\tlines.push(\"\");\n\t\tlines.push(...keyTypeLines);\n\t\tlines.push(\"\");\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// References section — clear pointers to bundled files\n\t// ---------------------------------------------------------------------------\n\tlines.push(\"## References\");\n\tlines.push(\"\");\n\tlines.push(\"- [references/CONFIGURATION.md](references/CONFIGURATION.md) — Full config options\");\n\tlines.push(\n\t\t\"- [references/API-REFERENCE.md](references/API-REFERENCE.md) — Signatures, parameters, examples\",\n\t);\n\tlines.push(\"\");\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n\n// ---------------------------------------------------------------------------\n// API Reference builder\n// ---------------------------------------------------------------------------\n\n/**\n * Generates the `references/API-REFERENCE.md` content.\n * Grouped by kind with a Table of Contents for efficient navigation.\n * @internal\n */\nfunction buildApiReferenceMd(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst exported = symbols.filter((s) => s.exported);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${projectName} — API Reference`);\n\tlines.push(\"\");\n\n\t// Group by kind\n\tconst functions = exported.filter((s) => s.kind === \"function\");\n\tconst classes = exported.filter((s) => s.kind === \"class\");\n\tconst types = exported.filter(\n\t\t(s) => s.kind === \"interface\" || s.kind === \"type\" || s.kind === \"enum\",\n\t);\n\tconst variables = exported.filter((s) => s.kind === \"variable\");\n\n\t// Table of Contents\n\tconst tocEntries: string[] = [];\n\tif (functions.length > 0) tocEntries.push(\"- [Functions](#functions)\");\n\tif (types.length > 0) tocEntries.push(\"- [Types](#types)\");\n\tif (classes.length > 0) tocEntries.push(\"- [Classes](#classes)\");\n\tif (variables.length > 0) tocEntries.push(\"- [Constants](#constants)\");\n\n\tif (tocEntries.length > 0) {\n\t\tlines.push(\"## Table of Contents\");\n\t\tlines.push(\"\");\n\t\tlines.push(...tocEntries);\n\t\tlines.push(\"\");\n\t}\n\n\t// Functions section\n\tif (functions.length > 0) {\n\t\tlines.push(\"## Functions\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of functions) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\t// Types section\n\tif (types.length > 0) {\n\t\tlines.push(\"## Types\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of types) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\t// Classes section\n\tif (classes.length > 0) {\n\t\tlines.push(\"## Classes\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of classes) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\t// Constants section\n\tif (variables.length > 0) {\n\t\tlines.push(\"## Constants\");\n\t\tlines.push(\"\");\n\t\tfor (const sym of variables) {\n\t\t\tlines.push(...renderSymbolDetail(sym));\n\t\t}\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n\n/**\n * Renders a single symbol's full detail block for the API reference.\n * @internal\n */\nfunction renderSymbolDetail(sym: ForgeSymbol): string[] {\n\tconst lines: string[] = [];\n\tlines.push(`### \\`${sym.name}\\``);\n\tlines.push(\"\");\n\n\tif (sym.documentation?.summary) {\n\t\tlines.push(sym.documentation.summary);\n\t\tlines.push(\"\");\n\t}\n\tif (sym.signature) {\n\t\tlines.push(\"```typescript\");\n\t\tlines.push(sym.signature);\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\tif (sym.documentation?.params && sym.documentation.params.length > 0) {\n\t\tlines.push(\"**Parameters:**\");\n\t\tlines.push(\"\");\n\t\tfor (const p of sym.documentation.params) {\n\t\t\tlines.push(`- \\`${p.name}\\`${p.type ? ` (\\`${p.type}\\`)` : \"\"} — ${p.description}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\tif (sym.documentation?.returns) {\n\t\tlines.push(`**Returns:** ${sym.documentation.returns.description}`);\n\t\tlines.push(\"\");\n\t}\n\t// Children (class members, interface properties)\n\tif (sym.children && sym.children.length > 0) {\n\t\tlines.push(\"**Members:**\");\n\t\tlines.push(\"\");\n\t\tfor (const child of sym.children) {\n\t\t\tconst desc = child.documentation?.summary ?? \"\";\n\t\t\tlines.push(`- \\`${child.name}\\`${desc ? ` — ${desc}` : \"\"}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\tfor (const ex of sym.documentation?.examples ?? []) {\n\t\tconst lang = ex.language || \"typescript\";\n\t\tlines.push(`\\`\\`\\`${lang}`);\n\t\tlines.push(ex.code.trim());\n\t\tlines.push(\"```\");\n\t\tlines.push(\"\");\n\t}\n\treturn lines;\n}\n\n// ---------------------------------------------------------------------------\n// Configuration Reference builder\n// ---------------------------------------------------------------------------\n\n/**\n * Generates the `references/CONFIGURATION.md` content.\n * Documents all config-like types with property tables and code examples.\n * @internal\n */\nfunction buildConfigurationMd(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst exported = symbols.filter((s) => s.exported);\n\n\tconst lines: string[] = [];\n\tlines.push(`# ${projectName} — Configuration Reference`);\n\tlines.push(\"\");\n\n\tconst configSymbols = exported.filter(\n\t\t(s) =>\n\t\t\t(s.kind === \"interface\" || s.kind === \"type\") &&\n\t\t\t/config/i.test(s.name) &&\n\t\t\t(s.children?.length ?? 0) > 0,\n\t);\n\n\tfor (const configSym of configSymbols) {\n\t\tlines.push(`## \\`${configSym.name}\\``);\n\t\tlines.push(\"\");\n\t\tif (configSym.documentation?.summary) {\n\t\t\tlines.push(configSym.documentation.summary);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tconst children = configSym.children ?? [];\n\n\t\t// Code example with inline comments\n\t\tif (children.length > 0) {\n\t\t\tconst importSource = projectName.includes(\"/\") ? projectName : projectName;\n\n\t\t\tlines.push(\"```typescript\");\n\t\t\tlines.push(`import type { ${configSym.name} } from \"${importSource}\";`);\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`const config: Partial<${configSym.name}> = {`);\n\t\t\tfor (const child of children) {\n\t\t\t\tif (child.documentation?.summary) {\n\t\t\t\t\tlines.push(` // ${child.documentation.summary}`);\n\t\t\t\t}\n\t\t\t\tconst type = extractType(child.signature);\n\t\t\t\tconst defaultVal = inferDefaultValue(type, child.name);\n\t\t\t\tlines.push(` ${child.name}: ${defaultVal},`);\n\t\t\t}\n\t\t\tlines.push(\"};\");\n\t\t\tlines.push(\"```\");\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\t// Property table for quick lookup\n\t\tlines.push(\"| Property | Type | Description |\");\n\t\tlines.push(\"|----------|------|-------------|\");\n\t\tfor (const child of children) {\n\t\t\tconst type = extractType(child.signature);\n\t\t\tconst desc = child.documentation?.summary ?? \"\";\n\t\t\tlines.push(`| \\`${child.name}\\` | \\`${type}\\` | ${desc} |`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tif (configSymbols.length === 0) {\n\t\tlines.push(\"No configuration types detected in this project.\");\n\t\tlines.push(\"\");\n\t}\n\n\treturn `${lines\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd()}\\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Script builders\n// ---------------------------------------------------------------------------\n\n/**\n * Generates contextual shell scripts based on project metadata.\n * @internal\n */\nfunction buildScripts(config: ForgeConfig): Array<{ path: string; content: string }> {\n\tconst scripts: Array<{ path: string; content: string }> = [];\n\tconst cliName = primaryBinName(config);\n\tconst pkgScripts = config.project.scripts ?? {};\n\n\tif (cliName) {\n\t\t// Projects with a CLI get purpose-built wrappers\n\t\t// Build script\n\t\tif (pkgScripts.build) {\n\t\t\tscripts.push({\n\t\t\t\tpath: \"scripts/build.sh\",\n\t\t\t\tcontent: [\n\t\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\t`# Run ${cliName} build pipeline`,\n\t\t\t\t\t\"set -euo pipefail\",\n\t\t\t\t\t`npx ${cliName} build \"$@\"`,\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t});\n\t\t}\n\n\t\t// Check/lint script\n\t\tconst checkCmd = pkgScripts.check ?? pkgScripts.lint;\n\t\tif (checkCmd) {\n\t\t\tconst subcommand = checkCmd.includes(\"check\") ? \"check\" : \"lint\";\n\t\t\tscripts.push({\n\t\t\t\tpath: \"scripts/check.sh\",\n\t\t\t\tcontent: [\n\t\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\t`# Run ${cliName} ${subcommand}`,\n\t\t\t\t\t\"set -euo pipefail\",\n\t\t\t\t\t`npx ${cliName} ${subcommand} \"$@\"`,\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t});\n\t\t}\n\n\t\t// Test script\n\t\tif (pkgScripts.test) {\n\t\t\tscripts.push({\n\t\t\t\tpath: \"scripts/test.sh\",\n\t\t\t\tcontent: [\n\t\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\t`# Run ${cliName} test suite`,\n\t\t\t\t\t\"set -euo pipefail\",\n\t\t\t\t\t`npx ${cliName} test \"$@\"`,\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t});\n\t\t}\n\t}\n\n\t// Fallback: always include at least a test script\n\tif (scripts.length === 0) {\n\t\tscripts.push({\n\t\t\tpath: \"scripts/test.sh\",\n\t\t\tcontent: [\n\t\t\t\t\"#!/usr/bin/env bash\",\n\t\t\t\t\"# Run the project's test suite\",\n\t\t\t\t\"# Usage: ./scripts/test.sh [additional args]\",\n\t\t\t\t\"\",\n\t\t\t\t\"if [ -f package.json ]; then\",\n\t\t\t\t' npm test \"$@\"',\n\t\t\t\t\"else\",\n\t\t\t\t' echo \"No package.json found\"',\n\t\t\t\t\" exit 1\",\n\t\t\t\t\"fi\",\n\t\t\t\t\"\",\n\t\t\t].join(\"\\n\"),\n\t\t});\n\t}\n\n\treturn scripts;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * A generated skill package following the agentskills.io directory structure.\n * Contains SKILL.md plus optional references and scripts files.\n *\n * @public\n */\nexport interface SkillPackage {\n\t/** The skill directory name (lowercase, hyphens only, max 64 chars). */\n\tdirectoryName: string;\n\t/** Files to write inside the skill directory. */\n\tfiles: Array<{ path: string; content: string }>;\n}\n\n/**\n * Generates an agentskills.io-compliant skill package for ANY TypeScript project.\n *\n * All content is derived from the project's exported symbols and metadata.\n * No hardcoded project-specific content. Works for any project that forge-ts analyzes.\n *\n * @param symbols - All symbols from the project.\n * @param config - The resolved forge-ts config.\n * @returns A {@link SkillPackage} describing the directory and its files.\n * @example\n * ```typescript\n * import { generateSkillPackage } from \"@forge-ts/gen\";\n * const pkg = generateSkillPackage(symbols, config);\n * console.log(pkg.directoryName); // \"my-lib\"\n * console.log(pkg.files.map(f => f.path));\n * // [\"SKILL.md\", \"references/API-REFERENCE.md\", ...]\n * ```\n * @public\n */\nexport function generateSkillPackage(symbols: ForgeSymbol[], config: ForgeConfig): SkillPackage {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst directoryName = toDirectoryName(projectName);\n\n\tconst skillMd = buildSkillMd(symbols, config, directoryName);\n\tconst apiRefMd = buildApiReferenceMd(symbols, config);\n\tconst configMd = buildConfigurationMd(symbols, config);\n\tconst scripts = buildScripts(config);\n\n\treturn {\n\t\tdirectoryName,\n\t\tfiles: [\n\t\t\t{ path: \"SKILL.md\", content: skillMd },\n\t\t\t{ path: \"references/API-REFERENCE.md\", content: apiRefMd },\n\t\t\t{ path: \"references/CONFIGURATION.md\", content: configMd },\n\t\t\t...scripts,\n\t\t],\n\t};\n}\n\n/**\n * Generates a SKILL.md string following the Agent Skills specification.\n * Generic for any TypeScript project — content derived from symbols.\n *\n * @param symbols - All symbols from the project.\n * @param config - The resolved forge-ts config.\n * @returns The SKILL.md content as a string.\n * @example\n * ```typescript\n * import { generateSkillMd } from \"@forge-ts/gen\";\n * const skill = generateSkillMd(symbols, config);\n * ```\n * @public\n */\nexport function generateSkillMd(symbols: ForgeSymbol[], config: ForgeConfig): string {\n\tconst projectName = config.project.packageName ?? config.rootDir.split(\"/\").pop() ?? \"Project\";\n\tconst directoryName = toDirectoryName(projectName);\n\treturn buildSkillMd(symbols, config, directoryName);\n}\n","import type { DocPage } from \"./site-generator.js\";\n\n/**\n * A single generated SSG configuration file.\n * @public\n */\nexport interface SSGConfigFile {\n\t/** Relative path from outDir (e.g., \"mint.json\", \"_meta.json\") */\n\tpath: string;\n\t/** File content */\n\tcontent: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Strip the file extension from a page path, returning the slug. */\nfunction pageSlug(pagePath: string): string {\n\treturn pagePath.replace(/\\.[^.]+$/, \"\");\n}\n\n/**\n * Partition pages into top-level pages and package pages.\n *\n * Top-level pages are those not nested under `packages/`.\n * Package pages are grouped by their package directory segment.\n */\nfunction partitionPages(pages: DocPage[]): {\n\ttopLevel: string[];\n\tbyPackage: Map<string, string[]>;\n} {\n\tconst topLevel: string[] = [];\n\tconst byPackage = new Map<string, string[]>();\n\n\tfor (const page of pages) {\n\t\tconst slug = pageSlug(page.path);\n\t\tconst packageMatch = /^packages\\/([^/]+)\\/(.+)$/.exec(slug);\n\t\tif (packageMatch) {\n\t\t\tconst pkgName = packageMatch[1];\n\t\t\tconst list = byPackage.get(pkgName) ?? [];\n\t\t\tlist.push(slug);\n\t\t\tbyPackage.set(pkgName, list);\n\t\t} else {\n\t\t\ttopLevel.push(slug);\n\t\t}\n\t}\n\n\treturn { topLevel, byPackage };\n}\n\n/** Convert a slug segment to a human-readable label. */\nfunction slugToLabel(slug: string): string {\n\treturn slug\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\n// ---------------------------------------------------------------------------\n// Mintlify\n// ---------------------------------------------------------------------------\n\ninterface MintlifyNavigationPage {\n\tgroup: string;\n\tpages: Array<string | MintlifyNavigationPage>;\n}\n\ninterface MintlifyConfig {\n\t$schema: string;\n\tname: string;\n\tnavigation: MintlifyNavigationPage[];\n}\n\nfunction generateMintlifyConfig(pages: DocPage[], projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst navigation: MintlifyNavigationPage[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tnavigation.push({\n\t\t\tgroup: \"Getting Started\",\n\t\t\tpages: topLevel,\n\t\t});\n\t}\n\n\tif (byPackage.size > 0) {\n\t\tconst packageGroups: MintlifyNavigationPage[] = [];\n\t\tfor (const [pkgName, slugs] of byPackage) {\n\t\t\tpackageGroups.push({\n\t\t\t\tgroup: pkgName,\n\t\t\t\tpages: slugs,\n\t\t\t});\n\t\t}\n\t\tnavigation.push({\n\t\t\tgroup: \"Packages\",\n\t\t\tpages: packageGroups as unknown as Array<string | MintlifyNavigationPage>,\n\t\t});\n\t}\n\n\tconst config: MintlifyConfig = {\n\t\t$schema: \"https://mintlify.com/schema.json\",\n\t\tname: projectName,\n\t\tnavigation,\n\t};\n\n\treturn {\n\t\tpath: \"mint.json\",\n\t\tcontent: `${JSON.stringify(config, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Docusaurus\n// ---------------------------------------------------------------------------\n\ninterface DocusaurusCategory {\n\ttype: \"category\";\n\tlabel: string;\n\titems: Array<string | DocusaurusCategory>;\n}\n\ntype DocusaurusSidebarItem = string | DocusaurusCategory;\n\nfunction generateDocusaurusConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\n\tconst items: DocusaurusSidebarItem[] = [...topLevel];\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\titems.push({\n\t\t\ttype: \"category\",\n\t\t\tlabel: pkgName,\n\t\t\titems: slugs,\n\t\t});\n\t}\n\n\tconst sidebarObj = { docs: items };\n\tconst json = JSON.stringify(sidebarObj, null, 2);\n\tconst content =\n\t\t`/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\\n` +\n\t\t`const sidebars = ${json};\\n` +\n\t\t`module.exports = sidebars;\\n`;\n\n\treturn {\n\t\tpath: \"sidebars.js\",\n\t\tcontent,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Nextra\n// ---------------------------------------------------------------------------\n\nfunction generateNextraConfigs(pages: DocPage[], _projectName: string): SSGConfigFile[] {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst files: SSGConfigFile[] = [];\n\n\t// Root _meta.json\n\tconst rootMeta: Record<string, string> = {};\n\tfor (const slug of topLevel) {\n\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\trootMeta[segment] = slugToLabel(segment);\n\t}\n\tif (byPackage.size > 0) {\n\t\trootMeta.packages = \"Packages\";\n\t}\n\n\tfiles.push({\n\t\tpath: \"_meta.json\",\n\t\tcontent: `${JSON.stringify(rootMeta, null, 2)}\\n`,\n\t});\n\n\t// Per-package _meta.json files\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst pkgMeta: Record<string, string> = {};\n\t\tfor (const slug of slugs) {\n\t\t\t// slug is e.g. \"packages/core/api-reference\"\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tpkgMeta[segment] = slugToLabel(segment);\n\t\t}\n\n\t\t// packages/<pkgName>/_meta.json\n\t\tfiles.push({\n\t\t\tpath: `packages/${pkgName}/_meta.json`,\n\t\t\tcontent: `${JSON.stringify(pkgMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\t// If there are multiple packages, also write a packages/_meta.json\n\tif (byPackage.size > 1) {\n\t\tconst packagesMeta: Record<string, string> = {};\n\t\tfor (const pkgName of byPackage.keys()) {\n\t\t\tpackagesMeta[pkgName] = pkgName;\n\t\t}\n\t\tfiles.push({\n\t\t\tpath: \"packages/_meta.json\",\n\t\t\tcontent: `${JSON.stringify(packagesMeta, null, 2)}\\n`,\n\t\t});\n\t}\n\n\treturn files;\n}\n\n// ---------------------------------------------------------------------------\n// VitePress\n// ---------------------------------------------------------------------------\n\ninterface VitePressItem {\n\ttext: string;\n\tlink: string;\n}\n\ninterface VitePressGroup {\n\ttext: string;\n\titems: VitePressItem[];\n}\n\nfunction generateVitePressConfig(pages: DocPage[], _projectName: string): SSGConfigFile {\n\tconst { topLevel, byPackage } = partitionPages(pages);\n\tconst sidebar: VitePressGroup[] = [];\n\n\tif (topLevel.length > 0) {\n\t\tconst items: VitePressItem[] = topLevel.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst link = slug === \"index\" ? \"/\" : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: \"Getting Started\", items });\n\t}\n\n\tfor (const [pkgName, slugs] of byPackage) {\n\t\tconst items: VitePressItem[] = slugs.map((slug) => {\n\t\t\tconst segment = slug.split(\"/\").pop() ?? slug;\n\t\t\tconst isIndex = segment === \"index\";\n\t\t\tconst link = isIndex ? `/packages/${pkgName}/` : `/${slug}`;\n\t\t\treturn { text: slugToLabel(segment), link };\n\t\t});\n\t\tsidebar.push({ text: pkgName, items });\n\t}\n\n\treturn {\n\t\tpath: \".vitepress/sidebar.json\",\n\t\tcontent: `${JSON.stringify(sidebar, null, 2)}\\n`,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Public entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Generate navigation configuration file(s) for the given SSG target.\n *\n * Returns one file for most targets, but multiple files for Nextra (which\n * uses per-directory `_meta.json` files).\n *\n * @param pages - The {@link DocPage} array produced by `generateDocSite`.\n * @param target - The SSG target.\n * @param projectName - The project name (used in config metadata).\n * @returns An array of {@link SSGConfigFile} objects ready to be written to disk.\n * @example\n * ```typescript\n * import { generateSSGConfigs } from \"@forge-ts/gen\";\n * const configs = generateSSGConfigs(pages, \"vitepress\", \"my-project\");\n * console.log(configs[0].path); // \".vitepress/sidebar.json\"\n * ```\n * @public\n */\nexport function generateSSGConfigs(\n\tpages: DocPage[],\n\ttarget: \"docusaurus\" | \"mintlify\" | \"nextra\" | \"vitepress\",\n\tprojectName: string,\n): SSGConfigFile[] {\n\tswitch (target) {\n\t\tcase \"mintlify\":\n\t\t\treturn [generateMintlifyConfig(pages, projectName)];\n\t\tcase \"docusaurus\":\n\t\t\treturn [generateDocusaurusConfig(pages, projectName)];\n\t\tcase \"nextra\":\n\t\t\treturn generateNextraConfigs(pages, projectName);\n\t\tcase \"vitepress\":\n\t\t\treturn [generateVitePressConfig(pages, projectName)];\n\t\tdefault: {\n\t\t\t// Exhaustiveness guard — TypeScript will catch unhandled variants at\n\t\t\t// compile time, but we want a safe runtime fallback too.\n\t\t\tconst _exhaustive: never = target;\n\t\t\tvoid _exhaustive;\n\t\t\treturn [];\n\t\t}\n\t}\n}\n","/**\n * @forge-ts/gen — Markdown/MDX documentation and llms.txt generator.\n *\n * Generates human- and machine-readable documentation from the forge-ts\n * symbol graph, with optional README injection.\n *\n * @packageDocumentation\n * @public\n */\n\nexport * from \"./adapters/index.js\";\nexport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nexport {\n\tgenerateMarkdown,\n\ttype MarkdownOptions,\n} from \"./markdown.js\";\nexport { type ReadmeSyncOptions, syncReadme } from \"./readme-sync.js\";\nexport {\n\ttype DocPage,\n\tgenerateDocSite,\n\tgroupSymbolsByPackage,\n\ttype SiteGeneratorOptions,\n} from \"./site-generator.js\";\nexport { generateSkillMd, generateSkillPackage, type SkillPackage } from \"./skill.js\";\nexport { generateSSGConfigs, type SSGConfigFile } from \"./ssg-config.js\";\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { createWalker, type ForgeConfig, type ForgeResult } from \"@forge-ts/core\";\nimport { DEFAULT_TARGET, getAdapter } from \"./adapters/index.js\";\nimport type { AdapterContext } from \"./adapters/types.js\";\nimport { generateLlmsFullTxt, generateLlmsTxt } from \"./llms.js\";\nimport { generateMarkdown } from \"./markdown.js\";\nimport { syncReadme } from \"./readme-sync.js\";\nimport { generateDocSite, groupSymbolsByPackage } from \"./site-generator.js\";\nimport { generateSkillPackage } from \"./skill.js\";\n\n/**\n * Updates auto-enriched sections in an existing stub file.\n * Replaces content between `<!-- FORGE:AUTO-START id -->` and\n * `<!-- FORGE:AUTO-END id -->` markers with fresh content from the\n * newly generated version. Manual content outside markers is preserved.\n *\n * @param existing - The current file content on disk.\n * @param generated - The freshly generated content with updated markers.\n * @returns The merged content, or null if no markers were found to update.\n * @internal\n */\nfunction updateAutoSections(existing: string, generated: string): string | null {\n\tconst markerPattern = /<!-- FORGE:AUTO-START (\\S+) -->([\\s\\S]*?)<!-- FORGE:AUTO-END \\1 -->/g;\n\n\t// Extract all auto sections from the generated content\n\tconst newSections = new Map<string, string>();\n\tlet match: RegExpExecArray | null;\n\t// biome-ignore lint: manual exec loop is clearest for named captures\n\twhile ((match = markerPattern.exec(generated)) !== null) {\n\t\tnewSections.set(match[1], match[0]);\n\t}\n\n\tif (newSections.size === 0) return null;\n\n\t// Replace each marker section in the existing content\n\tlet updated = existing;\n\tlet changed = false;\n\tfor (const [id, replacement] of newSections) {\n\t\tconst sectionPattern = new RegExp(\n\t\t\t`<!-- FORGE:AUTO-START ${id} -->[\\\\s\\\\S]*?<!-- FORGE:AUTO-END ${id} -->`,\n\t\t);\n\t\tif (sectionPattern.test(updated)) {\n\t\t\tupdated = updated.replace(sectionPattern, replacement);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\treturn changed ? updated : null;\n}\n\n/**\n * Options for the generation pipeline.\n *\n * @public\n */\nexport interface GenerateOptions {\n\t/**\n\t * When true, overwrite stub pages even if they already exist on disk.\n\t * Normally stub pages (concepts, guides, faq, contributing, changelog)\n\t * are only created on the first build to preserve manual edits.\n\t * Use this to reset stubs to their scaffolding state.\n\t *\n\t * @example\n\t * ```typescript\n\t * await generate(config, { forceStubs: true });\n\t * ```\n\t */\n\tforceStubs?: boolean;\n}\n\n/**\n * Runs the full generation pipeline: walk → render → write.\n *\n * Auto-generated pages are always regenerated from source code.\n * Stub pages (scaffolding for human/agent editing) are only created\n * if they don't already exist, preserving manual edits across builds.\n * Pass `{ forceStubs: true }` to overwrite stubs.\n *\n * @param config - The resolved {@link ForgeConfig} for the project.\n * @param options - Optional generation flags (e.g., forceStubs).\n * @returns A {@link ForgeResult} describing the outcome.\n * @example\n * ```typescript\n * import { generate } from \"@forge-ts/gen\";\n * const result = await generate(config);\n * console.log(result.success); // true if all files were written\n * ```\n * @public\n * @packageDocumentation\n */\nexport async function generate(\n\tconfig: ForgeConfig,\n\toptions?: GenerateOptions,\n): Promise<ForgeResult> {\n\tconst start = Date.now();\n\tconst forceStubs = options?.forceStubs ?? false;\n\tconst writtenFiles: string[] = [];\n\n\tconst walker = createWalker(config);\n\tconst symbols = walker.walk();\n\n\tawait mkdir(config.outDir, { recursive: true });\n\n\t// Legacy flat output — kept for backward compatibility\n\tfor (const format of config.gen.formats) {\n\t\tconst content = generateMarkdown(symbols, config, {\n\t\t\tmdx: format === \"mdx\",\n\t\t});\n\t\tconst ext = format === \"mdx\" ? \"mdx\" : \"md\";\n\t\tconst filePath = join(config.outDir, `api-reference.${ext}`);\n\t\tawait writeFile(filePath, content, \"utf8\");\n\t\twrittenFiles.push(filePath);\n\t}\n\n\t// Multi-page site output — writes directly to outDir via adapters\n\tconst resolvedRoot = config.rootDir === \".\" ? process.cwd() : config.rootDir;\n\tconst projectName = resolvedRoot.split(\"/\").pop() ?? \"Project\";\n\tconst symbolsByPackage = groupSymbolsByPackage(symbols, config.rootDir);\n\n\tconst target = config.gen.ssgTarget ?? DEFAULT_TARGET;\n\tconst adapter = getAdapter(target);\n\n\tfor (const format of config.gen.formats) {\n\t\tconst pages = generateDocSite(symbolsByPackage, config, {\n\t\t\tformat,\n\t\t\tssgTarget: config.gen.ssgTarget,\n\t\t\tprojectName,\n\t\t\trepositoryUrl: config.project.repository,\n\t\t\tpackageName: config.project.packageName,\n\t\t});\n\n\t\tconst adapterContext: AdapterContext = {\n\t\t\tconfig,\n\t\t\tprojectName,\n\t\t\tpages,\n\t\t\tsymbols,\n\t\t\toutDir: config.outDir,\n\t\t};\n\n\t\t// Transform pages through the adapter (adds correct frontmatter and extensions).\n\t\t// The adapter propagates the stub flag from DocPage to GeneratedFile.\n\t\tconst transformedPages = adapter.transformPages(pages, adapterContext);\n\t\tfor (const file of transformedPages) {\n\t\t\tconst filePath = join(config.outDir, file.path);\n\n\t\t\t// Stub pages: preserve manual edits across subsequent builds.\n\t\t\t// If the stub exists on disk, update only FORGE:AUTO marker sections\n\t\t\t// (progressive enrichment) while leaving manual content untouched.\n\t\t\t// With --force-stubs, overwrite the entire file.\n\t\t\tif (file.stub && existsSync(filePath) && !forceStubs) {\n\t\t\t\tconst existingContent = await readFile(filePath, \"utf8\");\n\t\t\t\tconst merged = updateAutoSections(existingContent, file.content);\n\t\t\t\tif (merged) {\n\t\t\t\t\tawait writeFile(filePath, merged, \"utf8\");\n\t\t\t\t\twrittenFiles.push(filePath);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t\twrittenFiles.push(filePath);\n\t\t}\n\n\t\t// Generate platform config files only when ssgTarget is explicitly set\n\t\tif (config.gen.ssgTarget) {\n\t\t\tconst configFiles = adapter.generateConfig(adapterContext);\n\t\t\tfor (const file of configFiles) {\n\t\t\t\tconst filePath = join(config.outDir, file.path);\n\t\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t\t\twrittenFiles.push(filePath);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.gen.llmsTxt) {\n\t\tconst llmsPath = join(config.outDir, \"llms.txt\");\n\t\tconst llms = generateLlmsTxt(symbols, config);\n\t\tawait writeFile(llmsPath, llms, \"utf8\");\n\t\twrittenFiles.push(llmsPath);\n\n\t\tconst llmsFullPath = join(config.outDir, \"llms-full.txt\");\n\t\tconst llmsFull = generateLlmsFullTxt(symbols, config);\n\t\tawait writeFile(llmsFullPath, llmsFull, \"utf8\");\n\t\twrittenFiles.push(llmsFullPath);\n\n\t\t// Skill package generation — follows gen.llmsTxt unless skill.enabled is explicitly false\n\t\tconst skillEnabled = config.skill.enabled !== false;\n\t\tif (skillEnabled) {\n\t\t\tconst skillPkg = generateSkillPackage(symbols, config);\n\t\t\tconst skillDir = join(config.outDir, skillPkg.directoryName);\n\t\t\tawait mkdir(skillDir, { recursive: true });\n\t\t\tfor (const file of skillPkg.files) {\n\t\t\t\tconst filePath = join(skillDir, file.path);\n\t\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t\t\t\twrittenFiles.push(filePath);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.gen.readmeSync) {\n\t\tconst readmePath = join(config.rootDir, \"README.md\");\n\t\tawait syncReadme(readmePath, symbols);\n\t\twrittenFiles.push(readmePath);\n\t}\n\n\treturn {\n\t\tsuccess: true,\n\t\tsymbols,\n\t\terrors: [],\n\t\twarnings: [],\n\t\tduration: Date.now() - start,\n\t\twrittenFiles,\n\t};\n}\n"],"mappings":"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","names":["existsSync","join","styleGuide","pageSlug","existsSync","join","styleGuide","pageSlug","buildPackageJson","existsSync","join","styleGuide","pageSlug","slugToLabel","buildPackageJson","existsSync","join","relative","toAnchor","pageSlug","slugToLabel","existsSync","readFile","writeFile","writeFile","existsSync","readFile"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge-ts/gen",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Markdown/MDX and llms.txt generator for forge-ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@forge-ts/core": "0.6.
|
|
27
|
+
"@forge-ts/core": "0.6.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"tsup": "^8.3.5",
|