@forge-ts/gen 0.7.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 * Sanitize content for MDX compatibility.\n *\n * Processes content line-by-line, skipping code fence interiors.\n * Outside code fences: converts HTML comments to MDX comments,\n * escapes curly braces and angle brackets that MDX would parse\n * as JSX tags or expressions.\n *\n * @internal\n */\nfunction sanitizeMdx(content: string): string {\n\tconst lines = content.split(\"\\n\");\n\tconst result: string[] = [];\n\tlet insideFence = false;\n\n\tfor (const line of lines) {\n\t\tif (insideFence) {\n\t\t\tresult.push(line);\n\t\t\tif (/^```\\s*$/.test(line)) {\n\t\t\t\tinsideFence = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (/^```/.test(line)) {\n\t\t\tinsideFence = true;\n\t\t\tresult.push(line);\n\t\t\tcontinue;\n\t\t}\n\t\t// Outside code fences — sanitize for MDX\n\t\tlet safe = line;\n\t\t// Convert HTML comments to MDX comments\n\t\tsafe = safe.replace(/<!--([\\s\\S]*?)-->/g, \"{/* $1 */}\");\n\t\t// Escape { } that aren't part of MDX comments we just created\n\t\tsafe = safe.replace(/\\{(?!\\/\\*)/g, \"\\\\{\").replace(/(?<!\\*\\/)\\}/g, \"\\\\}\");\n\t\t// Escape < that starts a word (JSX tag-like): Array<string> → Array&lt;string>\n\t\tsafe = safe.replace(/<(\\w)/g, \"&lt;$1\");\n\t\t// Escape > preceded by a word char\n\t\tsafe = safe.replace(/(\\w)>/g, \"$1&gt;\");\n\t\tresult.push(safe);\n\t}\n\n\treturn result.join(\"\\n\");\n}\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\t// Sanitize for MDX: escape {}, <>, and convert HTML comments.\n\t\t\t// Must run AFTER code fence tagging since sanitizeMdx skips fence interiors.\n\t\t\tcontent = sanitizeMdx(content);\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\"[![Documented with forge-ts](https://img.shields.io/badge/docs-forge--ts-blue)](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/**\n * Escape MDX-unsafe characters in text that appears outside code fences.\n *\n * MDX parses `<Word>` as JSX tags and `{expr}` as JS expressions.\n * In documentation content (summaries, descriptions, table cells), these\n * come from TypeScript generics (`Array<string>`) and TSDoc inline tags\n * (`{@link Foo}`). We escape them so MDX treats them as literal text.\n *\n * This is exported so SSG adapters can apply it during page transformation.\n *\n * @public\n */\nexport function escapeMdx(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t// Escape { and } — prevents MDX expression parsing of {@link}, {Type}, etc.\n\t\t\t.replace(/\\{/g, \"\\\\{\")\n\t\t\t.replace(/\\}/g, \"\\\\}\")\n\t\t\t// Escape < and > that look like JSX tags — prevents MDX tag parsing\n\t\t\t// of Array<string>, Record<K, V>, Promise<void>, etc.\n\t\t\t// Only escape angle brackets that are followed by word chars (tag-like).\n\t\t\t.replace(/<(\\w)/g, \"&lt;$1\")\n\t\t\t.replace(/(\\w)>/g, \"$1&gt;\")\n\t);\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\tconst slug = 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// agentskills.io convention: SKILL-{project} prefix\n\tconst prefixed = slug.startsWith(\"skill-\") ? slug : `SKILL-${slug}`;\n\treturn prefixed.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\tescapeMdx,\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\t// Extract auto sections from the generated content.\n\t// The adapter may have converted HTML comments to MDX comments via sanitizeMdx(),\n\t// so we need to check both formats in the generated content.\n\tconst htmlPattern = /<!-- FORGE:AUTO-START (\\S+) -->([\\s\\S]*?)<!-- FORGE:AUTO-END \\1 -->/g;\n\tconst mdxGenPattern =\n\t\t/\\{\\/\\*\\s*FORGE:AUTO-START (\\S+)\\s*\\*\\/\\}([\\s\\S]*?)\\{\\/\\*\\s*FORGE:AUTO-END \\1\\s*\\*\\/\\}/g;\n\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 = htmlPattern.exec(generated)) !== null) {\n\t\tnewSections.set(match[1], match[0]);\n\t}\n\t// biome-ignore lint: also check MDX format in generated content\n\twhile ((match = mdxGenPattern.exec(generated)) !== null) {\n\t\tif (!newSections.has(match[1])) {\n\t\t\tnewSections.set(match[1], match[0]);\n\t\t}\n\t}\n\n\tif (newSections.size === 0) return null;\n\n\t// Replace each marker section in the existing on-disk content (try both formats)\n\tlet updated = existing;\n\tlet changed = false;\n\tfor (const [id, replacement] of newSections) {\n\t\tconst htmlSectionPattern = new RegExp(\n\t\t\t`<!-- FORGE:AUTO-START ${id} -->[\\\\s\\\\S]*?<!-- FORGE:AUTO-END ${id} -->`,\n\t\t);\n\t\tconst mdxSectionPattern = new RegExp(\n\t\t\t`\\\\{/\\\\*\\\\s*FORGE:AUTO-START ${id}\\\\s*\\\\*/\\\\}[\\\\s\\\\S]*?\\\\{/\\\\*\\\\s*FORGE:AUTO-END ${id}\\\\s*\\\\*/\\\\}`,\n\t\t);\n\t\tif (htmlSectionPattern.test(updated)) {\n\t\t\tupdated = updated.replace(htmlSectionPattern, replacement);\n\t\t\tchanged = true;\n\t\t} else if (mdxSectionPattern.test(updated)) {\n\t\t\tupdated = updated.replace(mdxSectionPattern, 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: [...new Set(writtenFiles)],\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/markdown-utils.ts","../src/adapters/mintlify.ts","../src/adapters/docusaurus.ts","../src/adapters/nextra.ts","../src/adapters/vitepress.ts","../src/llms.ts","../src/markdown.ts","../src/mdast-builders.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","/**\n * Shared markdown/MDX utilities powered by gray-matter and the unified/remark ecosystem.\n *\n * Provides:\n * - Frontmatter parsing and serialization (gray-matter)\n * - AST-aware MDX sanitization (remark-parse + position-based transforms)\n * - AST-aware FORGE:AUTO section updates (remark-parse + position-based splicing)\n *\n * @internal\n */\n\nimport matter from \"gray-matter\";\nimport remarkFrontmatter from \"remark-frontmatter\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMdx from \"remark-mdx\";\nimport remarkParse from \"remark-parse\";\nimport { unified } from \"unified\";\nimport { SKIP, visit } from \"unist-util-visit\";\nimport type { MdBlock, MdPhrasing, MdText } from \"./mdast-builders.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Result of parsing frontmatter from markdown/MDX content.\n * @public\n */\nexport interface FrontmatterResult {\n\t/** The body content without the frontmatter block. */\n\tbody: string;\n\t/** The parsed frontmatter data as a key-value map. */\n\tdata: Record<string, unknown>;\n}\n\n/** A targeted string replacement anchored to source positions. */\ninterface PositionedTransform {\n\tstart: number;\n\tend: number;\n\treplacement: string;\n}\n\n/** A source range in the original content string. */\ninterface SourceRange {\n\tstart: number;\n\tend: number;\n}\n\n/** A matched FORGE:AUTO section with its content and position. */\ninterface AutoSection {\n\tid: string;\n\t/** The full text from START marker through END marker (inclusive). */\n\tfullText: string;\n\tstart: number;\n\tend: number;\n}\n\n// ---------------------------------------------------------------------------\n// Remark processor factory\n// ---------------------------------------------------------------------------\n\n/**\n * Create a remark parser configured for standard markdown with GFM tables\n * and YAML frontmatter support.\n */\nfunction createParser() {\n\treturn unified().use(remarkParse).use(remarkGfm).use(remarkFrontmatter, [\"yaml\"]);\n}\n\n/**\n * Create an MDX-aware parser for processing existing MDX files.\n * Falls back to the standard parser if MDX parsing fails (e.g., malformed content).\n */\nfunction createMdxParser() {\n\treturn unified().use(remarkParse).use(remarkMdx).use(remarkGfm).use(remarkFrontmatter, [\"yaml\"]);\n}\n\n/**\n * Get protected ranges, trying MDX-aware parsing first for robustness\n * with existing MDX files that may contain JSX expressions.\n */\nfunction getProtectedRangesSafe(content: string): SourceRange[] {\n\ttry {\n\t\treturn getProtectedRangesFromTree(createMdxParser().parse(content));\n\t} catch {\n\t\t// Fallback to standard parser if MDX parsing fails\n\t\treturn getProtectedRangesFromTree(createParser().parse(content));\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter utilities (powered by gray-matter)\n// ---------------------------------------------------------------------------\n\n/**\n * Parse frontmatter from markdown/MDX content.\n *\n * Uses gray-matter for robust YAML parsing — handles multi-line values,\n * quoted strings, and edge cases that regex-based stripping misses.\n *\n * @param content - The full file content including frontmatter.\n * @returns The body (without frontmatter) and the parsed data object.\n * @public\n */\nexport function parseFrontmatter(content: string): FrontmatterResult {\n\tconst result = matter(content);\n\treturn { body: result.content, data: result.data as Record<string, unknown> };\n}\n\n/**\n * Serialize content with frontmatter prepended.\n *\n * Produces the standard format:\n * ```\n * ---\n * key: value\n * ---\n *\n * body\n * ```\n *\n * @param body - The markdown body content (without frontmatter).\n * @param data - The frontmatter fields to serialize.\n * @returns The combined frontmatter + body string.\n * @public\n */\nexport function stringifyWithFrontmatter(\n\tbody: string,\n\tdata: Record<string, string | number | boolean>,\n): string {\n\tif (Object.keys(data).length === 0) return body;\n\t// gray-matter.stringify expects the body to start with \\n for proper spacing\n\tconst normalizedBody = body.startsWith(\"\\n\") ? body : `\\n${body}`;\n\treturn matter.stringify(normalizedBody, data);\n}\n\n/**\n * Strip frontmatter from content, returning only the body.\n *\n * @param content - The full file content including frontmatter.\n * @returns The body content without the frontmatter block.\n * @public\n */\nexport function stripFrontmatter(content: string): string {\n\treturn matter(content).content;\n}\n\n// ---------------------------------------------------------------------------\n// TSDoc content parsing\n// ---------------------------------------------------------------------------\n\n/** Cached parser for TSDoc content that may contain markdown formatting. */\nconst inlineParser = unified().use(remarkParse).use(remarkGfm);\n\n/**\n * Parse a markdown string and extract inline (phrasing) content.\n *\n * Use for TSDoc text that may contain backtick code, bold, links, etc.\n * The returned nodes can be spread into paragraphs, table cells, or\n * any other context that accepts inline content.\n *\n * This prevents double-escaping: backticks become proper `inlineCode`\n * nodes instead of text that gets escaped by the serializer.\n *\n * @param markdown - The TSDoc content string (may contain markdown).\n * @returns Array of inline mdast nodes.\n * @public\n */\nexport function parseInline(markdown: string): MdPhrasing[] {\n\tif (!markdown) return [];\n\tconst tree = inlineParser.parse(markdown);\n\tconst first = tree.children[0];\n\tif (first?.type === \"paragraph\") {\n\t\t// biome-ignore lint: mdast children are compatible with our MdPhrasing\n\t\treturn (first as any).children as MdPhrasing[];\n\t}\n\treturn [{ type: \"text\", value: markdown } as MdText];\n}\n\n/**\n * Parse a markdown string and extract block-level content.\n *\n * Use for multi-line TSDoc content that may contain headings,\n * lists, blockquotes, code blocks, etc.\n *\n * @param markdown - The markdown string to parse.\n * @returns Array of block-level mdast nodes.\n * @public\n */\nexport function parseBlocks(markdown: string): MdBlock[] {\n\tif (!markdown) return [];\n\tconst tree = inlineParser.parse(markdown);\n\t// biome-ignore lint: mdast children are compatible with our MdBlock\n\treturn tree.children as unknown as MdBlock[];\n}\n\n// ---------------------------------------------------------------------------\n// Protected range detection\n// ---------------------------------------------------------------------------\n\n/**\n * Extract protected ranges from a parsed tree.\n * Protected ranges include: fenced code blocks, indented code blocks,\n * inline code spans, and YAML frontmatter. Content inside these ranges\n * must not be transformed during sanitization or marker detection.\n */\nfunction getProtectedRangesFromTree(\n\ttree: ReturnType<ReturnType<typeof createParser>[\"parse\"]>,\n): SourceRange[] {\n\tconst ranges: SourceRange[] = [];\n\n\tvisit(tree, (node) => {\n\t\tconst pos = node.position;\n\t\tif (!pos?.start.offset || !pos?.end.offset) return;\n\n\t\tif (node.type === \"code\" || node.type === \"inlineCode\" || node.type === \"yaml\") {\n\t\t\tranges.push({\n\t\t\t\tstart: pos.start.offset,\n\t\t\t\tend: pos.end.offset,\n\t\t\t});\n\t\t\treturn SKIP;\n\t\t}\n\t});\n\n\treturn ranges.sort((a, b) => a.start - b.start);\n}\n\n/**\n * Check whether a character offset falls inside a protected range.\n * Uses binary search for efficiency on large documents.\n */\nfunction isProtected(offset: number, ranges: SourceRange[]): boolean {\n\tlet lo = 0;\n\tlet hi = ranges.length - 1;\n\twhile (lo <= hi) {\n\t\tconst mid = (lo + hi) >>> 1;\n\t\tconst r = ranges[mid];\n\t\tif (offset < r.start) {\n\t\t\thi = mid - 1;\n\t\t} else if (offset >= r.end) {\n\t\t\tlo = mid + 1;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n// ---------------------------------------------------------------------------\n// MDX sanitization (AST-aware, position-based)\n// ---------------------------------------------------------------------------\n\n/**\n * Sanitize markdown content for MDX compatibility using AST-aware processing.\n *\n * Parses the document with remark to understand its structure, then applies\n * targeted string replacements only to text and HTML comment nodes —\n * code blocks, inline code, and frontmatter are automatically preserved.\n *\n * Transformations applied outside code:\n * - HTML comments to MDX comments\n * - Curly braces in text escaped (prevents MDX expression parsing)\n * - Angle brackets around word chars escaped (prevents JSX tag parsing)\n *\n * @param content - The markdown content to sanitize.\n * @returns The sanitized content safe for MDX consumption.\n * @public\n */\nexport function sanitizeForMdx(content: string): string {\n\tconst tree = createParser().parse(content);\n\tconst transforms: PositionedTransform[] = [];\n\n\tvisit(tree, (node) => {\n\t\tconst pos = node.position;\n\t\tif (!pos?.start.offset || !pos?.end.offset) return;\n\n\t\tconst start = pos.start.offset;\n\t\tconst end = pos.end.offset;\n\n\t\t// Convert HTML comments to MDX comments\n\t\tif (node.type === \"html\") {\n\t\t\tconst original = content.slice(start, end);\n\t\t\tconst commentMatch = /^<!--([\\s\\S]*?)-->$/.exec(original);\n\t\t\tif (commentMatch) {\n\t\t\t\ttransforms.push({\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\treplacement: `{/*${commentMatch[1]}*/}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn SKIP;\n\t\t}\n\n\t\t// Escape MDX-unsafe characters in text nodes\n\t\tif (node.type === \"text\") {\n\t\t\tconst original = content.slice(start, end);\n\t\t\tconst escaped = original\n\t\t\t\t// Escape { and } — prevents MDX expression parsing\n\t\t\t\t// Skip { that's part of an MDX comment we might have created\n\t\t\t\t.replace(/\\{(?!\\/\\*)/g, \"\\\\{\")\n\t\t\t\t.replace(/(?<!\\*\\/)\\}/g, \"\\\\}\")\n\t\t\t\t// Escape < followed by a word char (JSX tag-like)\n\t\t\t\t.replace(/<(\\w)/g, \"&lt;$1\")\n\t\t\t\t// Escape > preceded by a word char\n\t\t\t\t.replace(/(\\w)>/g, \"$1&gt;\");\n\t\t\tif (escaped !== original) {\n\t\t\t\ttransforms.push({ start, end, replacement: escaped });\n\t\t\t}\n\t\t\treturn SKIP;\n\t\t}\n\n\t\t// Skip code and frontmatter nodes entirely\n\t\tif (node.type === \"code\" || node.type === \"inlineCode\" || node.type === \"yaml\") {\n\t\t\treturn SKIP;\n\t\t}\n\t});\n\n\t// Apply transforms in reverse position order to preserve earlier offsets\n\tlet result = content;\n\tfor (const t of transforms.sort((a, b) => b.start - a.start)) {\n\t\tresult = result.slice(0, t.start) + t.replacement + result.slice(t.end);\n\t}\n\n\treturn result;\n}\n\n// ---------------------------------------------------------------------------\n// FORGE:AUTO section updates (AST-aware, position-based)\n// ---------------------------------------------------------------------------\n\n/**\n * Find all FORGE:AUTO marker pairs in content.\n *\n * Searches for both HTML comment and MDX comment formats:\n * - HTML: `&lt;!-- FORGE:AUTO-START id --&gt;` ... `&lt;!-- FORGE:AUTO-END id --&gt;`\n * - MDX: MDX comment equivalents wrapping FORGE:AUTO-START/END markers\n *\n * Uses the remark AST to identify protected ranges (code blocks) so that\n * markers appearing inside code are never matched.\n */\nfunction findAutoSections(content: string): Map<string, AutoSection> {\n\tconst protectedRanges = getProtectedRangesSafe(content);\n\n\t// Collect all marker positions (both HTML and MDX comment formats)\n\tconst markers: Array<{ type: \"start\" | \"end\"; id: string; offset: number; length: number }> = [];\n\n\tconst patterns: Array<{ regex: RegExp; type: \"start\" | \"end\" }> = [\n\t\t{ regex: /<!--\\s*FORGE:AUTO-START\\s+(\\S+)\\s*-->/g, type: \"start\" },\n\t\t{ regex: /<!--\\s*FORGE:AUTO-END\\s+(\\S+)\\s*-->/g, type: \"end\" },\n\t\t{ regex: /\\{\\/\\*\\s*FORGE:AUTO-START\\s+(\\S+)\\s*\\*\\/\\}/g, type: \"start\" },\n\t\t{ regex: /\\{\\/\\*\\s*FORGE:AUTO-END\\s+(\\S+)\\s*\\*\\/\\}/g, type: \"end\" },\n\t];\n\n\tfor (const { regex, type } of patterns) {\n\t\tlet match: RegExpExecArray | null;\n\t\t// biome-ignore lint: manual exec loop is clearest for regex iteration\n\t\twhile ((match = regex.exec(content)) !== null) {\n\t\t\tif (!isProtected(match.index, protectedRanges)) {\n\t\t\t\tmarkers.push({\n\t\t\t\t\ttype,\n\t\t\t\t\tid: match[1],\n\t\t\t\t\toffset: match.index,\n\t\t\t\t\tlength: match[0].length,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sort by position in document\n\tmarkers.sort((a, b) => a.offset - b.offset);\n\n\t// Match START/END pairs\n\tconst sections = new Map<string, AutoSection>();\n\tfor (let i = 0; i < markers.length; i++) {\n\t\tconst m = markers[i];\n\t\tif (m.type !== \"start\") continue;\n\n\t\t// Find the first matching END after this START\n\t\tfor (let j = i + 1; j < markers.length; j++) {\n\t\t\tif (markers[j].type === \"end\" && markers[j].id === m.id) {\n\t\t\t\tconst sectionEnd = markers[j].offset + markers[j].length;\n\t\t\t\tsections.set(m.id, {\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tfullText: content.slice(m.offset, sectionEnd),\n\t\t\t\t\tstart: m.offset,\n\t\t\t\t\tend: sectionEnd,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn sections;\n}\n\n/**\n * Updates auto-enriched sections in an existing stub file.\n *\n * Uses AST-aware parsing to find FORGE:AUTO markers, ensuring markers\n * inside code blocks are never accidentally matched. Replaces content\n * between `<!-- FORGE:AUTO-START id -->` and `<!-- FORGE:AUTO-END id -->`\n * markers (or their MDX comment equivalents) with fresh content from\n * the newly generated version.\n *\n * Manual content outside markers is preserved exactly — no reformatting.\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 */\nexport function updateAutoSections(existing: string, generated: string): string | null {\n\tconst newSections = findAutoSections(generated);\n\tif (newSections.size === 0) return null;\n\n\tconst existingSections = findAutoSections(existing);\n\tif (existingSections.size === 0) return null;\n\n\t// Sort by position descending — replace from end to preserve earlier positions\n\tconst sortedExisting = [...existingSections.entries()].sort(([, a], [, b]) => b.start - a.start);\n\n\tlet result = existing;\n\tlet changed = false;\n\n\tfor (const [id, existingSection] of sortedExisting) {\n\t\tconst newSection = newSections.get(id);\n\t\tif (newSection) {\n\t\t\tresult =\n\t\t\t\tresult.slice(0, existingSection.start) +\n\t\t\t\tnewSection.fullText +\n\t\t\t\tresult.slice(existingSection.end);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\treturn changed ? result : null;\n}\n","import { sanitizeForMdx, stringifyWithFrontmatter, stripFrontmatter } from \"../markdown-utils.js\";\nimport 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 using gray-matter. */\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 fields: Record<string, string | number | boolean> = { title };\n\tif (description) {\n\t\tfields.description = description;\n\t}\n\n\tconst body = stripFrontmatter(page.content);\n\treturn stringifyWithFrontmatter(body, fields);\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\t// Sanitize for MDX: escape {}, <>, and convert HTML comments.\n\t\t\t// Must run AFTER code fence tagging. Uses AST-aware processing\n\t\t\t// so code blocks and inline code are automatically preserved.\n\t\t\tcontent = sanitizeForMdx(content);\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 { stringifyWithFrontmatter, stripFrontmatter } from \"../markdown-utils.js\";\nimport 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 using gray-matter. */\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 fields: Record<string, string | number | boolean> = {\n\t\ttitle,\n\t\tsidebar_label: sidebarLabel,\n\t};\n\tif (sidebarPosition !== undefined) {\n\t\tfields.sidebar_position = sidebarPosition as number;\n\t}\n\tif (description) {\n\t\tfields.description = description;\n\t}\n\n\tconst body = stripFrontmatter(page.content);\n\treturn stringifyWithFrontmatter(body, fields);\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 { stringifyWithFrontmatter, stripFrontmatter } from \"../markdown-utils.js\";\nimport 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 using gray-matter. */\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 body = stripFrontmatter(page.content);\n\treturn stringifyWithFrontmatter(body, { title });\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 { stringifyWithFrontmatter, stripFrontmatter } from \"../markdown-utils.js\";\nimport 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 using gray-matter. */\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 fields: Record<string, string | number | boolean> = { title, outline: \"deep\" };\n\tif (description) {\n\t\tfields.description = description;\n\t}\n\n\tconst body = stripFrontmatter(page.content);\n\treturn stringifyWithFrontmatter(body, fields);\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\";\nimport { parseInline, stringifyWithFrontmatter } from \"./markdown-utils.js\";\nimport {\n\ttype MdBlock,\n\ttype MdListItem,\n\ttype MdPhrasing,\n\tmd,\n\tserializeMarkdown,\n\ttoAnchor,\n} from \"./mdast-builders.js\";\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/** Build the frontmatter block for the configured SSG target using gray-matter. */\nfunction buildFrontmatter(config: ForgeConfig, _mdx: boolean): string {\n\tconst target = config.gen.ssgTarget;\n\tif (!target) return \"\";\n\n\tconst fields: Record<string, string | number | boolean> = {};\n\n\tswitch (target) {\n\t\tcase \"docusaurus\":\n\t\t\tfields.sidebar_position = 1;\n\t\t\tfields.title = \"API Reference\";\n\t\t\tbreak;\n\t\tcase \"mintlify\":\n\t\t\tfields.title = \"API Reference\";\n\t\t\tbreak;\n\t\tcase \"nextra\":\n\t\t\tfields.title = \"API Reference\";\n\t\t\tfields.description = \"Auto-generated API reference\";\n\t\t\tbreak;\n\t\tcase \"vitepress\":\n\t\t\tfields.title = \"API Reference\";\n\t\t\tfields.outline = \"deep\";\n\t\t\tbreak;\n\t}\n\n\treturn stringifyWithFrontmatter(\"\", fields);\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// Symbol rendering (AST-based)\n// ---------------------------------------------------------------------------\n\n/**\n * Renders a symbol section as mdast blocks.\n * Used for both top-level symbols (depth=3) and children (depth=4+).\n * @internal\n */\nfunction renderSymbolBlocks(symbol: ForgeSymbol, rootDir: string, depth: number): MdBlock[] {\n\tconst nodes: MdBlock[] = [];\n\tconst ext = symbol.kind === \"function\" || symbol.kind === \"method\" ? \"()\" : \"\";\n\tconst headingDepth = Math.min(depth, 6) as 1 | 2 | 3 | 4 | 5 | 6;\n\tnodes.push(md.heading(headingDepth, md.inlineCode(`${symbol.name}${ext}`)));\n\n\tif (symbol.documentation?.deprecated) {\n\t\tnodes.push(\n\t\t\tmd.blockquote(\n\t\t\t\tmd.paragraph(\n\t\t\t\t\tmd.strong(md.text(\"Deprecated\")),\n\t\t\t\t\tmd.text(\": \"),\n\t\t\t\t\t...parseInline(symbol.documentation.deprecated),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t}\n\n\t// Source location\n\tconst rel = relative(rootDir, symbol.filePath);\n\tnodes.push(\n\t\tmd.paragraph(md.emphasis(md.text(\"Defined in \"), md.inlineCode(`${rel}:${symbol.line}`))),\n\t);\n\n\tif (symbol.signature) {\n\t\tnodes.push(md.code(\"typescript\", symbol.signature));\n\t}\n\n\tif (symbol.documentation?.summary) {\n\t\tnodes.push(md.paragraph(...parseInline(symbol.documentation.summary)));\n\t}\n\n\tconst params = symbol.documentation?.params ?? [];\n\tif (params.length > 0) {\n\t\tnodes.push(md.paragraph(md.strong(md.text(\"Parameters\"))));\n\t\tconst paramItems: MdListItem[] = [];\n\t\tfor (const p of params) {\n\t\t\tconst parts = [md.inlineCode(p.name)] as MdPhrasing[];\n\t\t\tif (p.type) {\n\t\t\t\tparts.push(md.text(\" (\"), md.inlineCode(p.type), md.text(\")\"));\n\t\t\t}\n\t\t\tparts.push(md.text(\" — \"), ...parseInline(p.description));\n\t\t\tparamItems.push(md.listItem(md.paragraph(...parts)));\n\t\t}\n\t\tnodes.push(md.list(paramItems));\n\t}\n\n\tif (symbol.documentation?.returns) {\n\t\tconst retParts = [md.strong(md.text(\"Returns\"))] as MdPhrasing[];\n\t\tif (symbol.documentation.returns.type) {\n\t\t\tretParts.push(md.text(\" (\"), md.inlineCode(symbol.documentation.returns.type), md.text(\")\"));\n\t\t}\n\t\tretParts.push(md.text(\": \"), ...parseInline(symbol.documentation.returns.description));\n\t\tnodes.push(md.paragraph(...retParts));\n\t}\n\n\tconst throws = symbol.documentation?.throws ?? [];\n\tif (throws.length > 0) {\n\t\tnodes.push(md.paragraph(md.strong(md.text(\"Throws\"))));\n\t\tconst throwItems: MdListItem[] = [];\n\t\tfor (const t of throws) {\n\t\t\tconst parts = [] as MdPhrasing[];\n\t\t\tif (t.type) {\n\t\t\t\tparts.push(md.inlineCode(t.type), md.text(\" — \"), ...parseInline(t.description));\n\t\t\t} else {\n\t\t\t\tparts.push(...parseInline(t.description));\n\t\t\t}\n\t\t\tthrowItems.push(md.listItem(md.paragraph(...parts)));\n\t\t}\n\t\tnodes.push(md.list(throwItems));\n\t}\n\n\tconst examples = symbol.documentation?.examples ?? [];\n\tif (examples.length > 0) {\n\t\tnodes.push(md.paragraph(md.strong(md.text(\"Examples\"))));\n\t\tfor (const ex of examples) {\n\t\t\tnodes.push(md.code(ex.language, ex.code.trim()));\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\tfor (const child of children) {\n\t\t\tnodes.push(...renderSymbolBlocks(child, rootDir, depth + 1));\n\t\t}\n\t}\n\n\treturn nodes;\n}\n\n/**\n * Build a Table of Contents as mdast blocks.\n * @internal\n */\nfunction buildTocBlocks(groups: Map<ForgeSymbol[\"kind\"], ForgeSymbol[]>): MdBlock[] {\n\tconst tocItems: MdListItem[] = [];\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\n\t\t// Sub-items for each symbol in this group\n\t\tconst subItems: MdListItem[] = [];\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\tsubItems.push(\n\t\t\t\tmd.listItem(md.paragraph(md.link(`#${symAnchor}`, md.inlineCode(displayName)))),\n\t\t\t);\n\t\t}\n\n\t\ttocItems.push(\n\t\t\tmd.listItem(md.paragraph(md.link(`#${anchor}`, md.text(label))), md.list(subItems)),\n\t\t);\n\t}\n\n\treturn [md.heading(2, md.text(\"Table of Contents\")), md.list(tocItems)];\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\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\t// Build the body as mdast nodes\n\tconst nodes: MdBlock[] = [];\n\n\t// Page title + preamble\n\tnodes.push(md.heading(1, md.text(\"API Reference\")));\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Generated by \"),\n\t\t\tmd.link(\"https://github.com/kryptobaseddev/forge-ts\", md.text(\"forge-ts\")),\n\t\t\tmd.text(\" from \"),\n\t\t\tmd.inlineCode(config.rootDir),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\n\t// Table of Contents\n\tif (topLevel.length > 0) {\n\t\tnodes.push(...buildTocBlocks(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\tnodes.push(md.heading(2, md.text(label)));\n\n\t\tfor (const symbol of group) {\n\t\t\tnodes.push(...renderSymbolBlocks(symbol, config.rootDir, 3));\n\t\t}\n\t}\n\n\t// Serialize the body\n\tconst body = serializeMarkdown(md.root(...nodes));\n\n\t// Prepend frontmatter and MDX imports (these are not markdown constructs)\n\tconst parts: string[] = [];\n\tconst frontmatter = buildFrontmatter(config, mdx);\n\tif (frontmatter) {\n\t\tparts.push(frontmatter);\n\t}\n\tif (mdx) {\n\t\tparts.push(buildMdxImports());\n\t}\n\tparts.push(body);\n\n\treturn `${parts.join(\"\").trimEnd()}\\n`;\n}\n","/**\n * Mdast AST node builders and markdown serialization.\n *\n * Provides concise factory functions for constructing mdast trees\n * and a serializer that produces well-formed markdown via remark-stringify.\n *\n * @internal\n */\n\nimport remarkFrontmatter from \"remark-frontmatter\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkStringify from \"remark-stringify\";\nimport { unified } from \"unified\";\n\n// ---------------------------------------------------------------------------\n// Mdast type definitions (subset used by forge-ts generation)\n// ---------------------------------------------------------------------------\n\n/** Inline leaf node: literal text. */\nexport interface MdText {\n\ttype: \"text\";\n\tvalue: string;\n}\n\n/** Inline leaf node: code span. */\nexport interface MdInlineCode {\n\ttype: \"inlineCode\";\n\tvalue: string;\n}\n\n/** Inline container: strong emphasis (bold). */\nexport interface MdStrong {\n\ttype: \"strong\";\n\tchildren: MdPhrasing[];\n}\n\n/** Inline container: emphasis (italic). */\nexport interface MdEmphasis {\n\ttype: \"emphasis\";\n\tchildren: MdPhrasing[];\n}\n\n/** Inline container: hyperlink. */\nexport interface MdLink {\n\ttype: \"link\";\n\turl: string;\n\tchildren: MdPhrasing[];\n}\n\n/** Union of all inline (phrasing) content types. */\nexport type MdPhrasing = MdText | MdInlineCode | MdStrong | MdEmphasis | MdLink;\n\n/** Block node: heading (depth 1-6). */\nexport interface MdHeading {\n\ttype: \"heading\";\n\tdepth: 1 | 2 | 3 | 4 | 5 | 6;\n\tchildren: MdPhrasing[];\n}\n\n/** Block node: paragraph. */\nexport interface MdParagraph {\n\ttype: \"paragraph\";\n\tchildren: MdPhrasing[];\n}\n\n/** Block node: fenced code block. */\nexport interface MdCode {\n\ttype: \"code\";\n\tlang?: string | null;\n\tvalue: string;\n}\n\n/** Block node: blockquote. */\nexport interface MdBlockquote {\n\ttype: \"blockquote\";\n\tchildren: MdBlock[];\n}\n\n/** Block node: raw HTML (including comments). */\nexport interface MdHtml {\n\ttype: \"html\";\n\tvalue: string;\n}\n\n/** Block node: horizontal rule. */\nexport interface MdThematicBreak {\n\ttype: \"thematicBreak\";\n}\n\n/** List item container. */\nexport interface MdListItem {\n\ttype: \"listItem\";\n\tspread?: boolean;\n\tchildren: MdBlock[];\n}\n\n/** Block node: ordered or unordered list. */\nexport interface MdList {\n\ttype: \"list\";\n\tordered?: boolean;\n\tspread?: boolean;\n\tchildren: MdListItem[];\n}\n\n/** GFM table cell. */\nexport interface MdTableCell {\n\ttype: \"tableCell\";\n\tchildren: MdPhrasing[];\n}\n\n/** GFM table row. */\nexport interface MdTableRow {\n\ttype: \"tableRow\";\n\tchildren: MdTableCell[];\n}\n\n/** GFM table. */\nexport interface MdTable {\n\ttype: \"table\";\n\talign?: (\"left\" | \"center\" | \"right\" | null)[];\n\tchildren: MdTableRow[];\n}\n\n/** Union of all block content types. */\nexport type MdBlock =\n\t| MdHeading\n\t| MdParagraph\n\t| MdCode\n\t| MdBlockquote\n\t| MdHtml\n\t| MdThematicBreak\n\t| MdList\n\t| MdTable;\n\n/** Document root. */\nexport interface MdRoot {\n\ttype: \"root\";\n\tchildren: MdBlock[];\n}\n\n// ---------------------------------------------------------------------------\n// Node builder namespace\n// ---------------------------------------------------------------------------\n\n/**\n * Concise factory functions for building mdast nodes.\n *\n * Usage:\n * ```typescript\n * const tree = md.root(\n * md.heading(2, md.text(\"API\")),\n * md.table(null,\n * md.tableRow(md.tableCell(md.text(\"Name\")), md.tableCell(md.text(\"Type\"))),\n * md.tableRow(md.tableCell(md.inlineCode(\"id\")), md.tableCell(md.text(\"string\"))),\n * ),\n * );\n * ```\n */\nexport const md = {\n\t// Inline (phrasing) nodes\n\ttext: (value: string): MdText => ({ type: \"text\", value }),\n\tinlineCode: (value: string): MdInlineCode => ({ type: \"inlineCode\", value }),\n\tstrong: (...children: MdPhrasing[]): MdStrong => ({ type: \"strong\", children }),\n\temphasis: (...children: MdPhrasing[]): MdEmphasis => ({ type: \"emphasis\", children }),\n\tlink: (url: string, ...children: MdPhrasing[]): MdLink => ({ type: \"link\", url, children }),\n\n\t// Block nodes\n\theading: (depth: 1 | 2 | 3 | 4 | 5 | 6, ...children: MdPhrasing[]): MdHeading => ({\n\t\ttype: \"heading\",\n\t\tdepth,\n\t\tchildren,\n\t}),\n\tparagraph: (...children: MdPhrasing[]): MdParagraph => ({ type: \"paragraph\", children }),\n\tcode: (lang: string, value: string): MdCode => ({ type: \"code\", lang, value }),\n\tblockquote: (...children: MdBlock[]): MdBlockquote => ({ type: \"blockquote\", children }),\n\thtml: (value: string): MdHtml => ({ type: \"html\", value }),\n\tthematicBreak: (): MdThematicBreak => ({ type: \"thematicBreak\" }),\n\n\t// List nodes\n\tlistItem: (...children: MdBlock[]): MdListItem => ({\n\t\ttype: \"listItem\",\n\t\tspread: false,\n\t\tchildren,\n\t}),\n\tlist: (items: MdListItem[], ordered = false): MdList => ({\n\t\ttype: \"list\",\n\t\tordered,\n\t\tspread: false,\n\t\tchildren: items,\n\t}),\n\n\t// GFM table nodes\n\ttableCell: (...children: MdPhrasing[]): MdTableCell => ({ type: \"tableCell\", children }),\n\ttableRow: (...cells: MdTableCell[]): MdTableRow => ({ type: \"tableRow\", children: cells }),\n\ttable: (\n\t\talign: (\"left\" | \"center\" | \"right\" | null)[] | null,\n\t\t...rows: MdTableRow[]\n\t): MdTable => ({\n\t\ttype: \"table\",\n\t\talign: align ?? undefined,\n\t\tchildren: rows,\n\t}),\n\n\t// Root\n\troot: (...children: MdBlock[]): MdRoot => ({ type: \"root\", children }),\n};\n\n// ---------------------------------------------------------------------------\n// Serialization\n// ---------------------------------------------------------------------------\n\n/** Cached processor instance — avoids recreating on every call. */\nconst serializer = unified().use(remarkGfm).use(remarkFrontmatter).use(remarkStringify, {\n\tbullet: \"-\",\n\temphasis: \"*\",\n\tstrong: \"*\",\n\tfences: true,\n\tlistItemIndent: \"one\",\n\trule: \"-\",\n});\n\n/**\n * Serialize an mdast tree to a well-formed markdown string.\n *\n * Uses remark-stringify with GFM table support. The serializer handles\n * all escaping (pipes in table cells, special characters in text, etc.)\n * so callers never need manual escape functions.\n *\n * @param tree - The mdast root node to serialize.\n * @returns The serialized markdown string.\n */\nexport function serializeMarkdown(tree: MdRoot): string {\n\treturn String(serializer.stringify(tree));\n}\n\n// ---------------------------------------------------------------------------\n// Convenience helpers\n// ---------------------------------------------------------------------------\n\n/** Shorthand: paragraph containing a single text node. */\nexport function textP(value: string): MdParagraph {\n\treturn md.paragraph(md.text(value));\n}\n\n/** Shorthand: paragraph with bold intro text followed by regular text. */\nexport function boldIntroP(bold: string, rest: string): MdParagraph {\n\treturn md.paragraph(md.strong(md.text(bold)), md.text(rest));\n}\n\n/** Shorthand: list item containing a single text paragraph. */\nexport function textListItem(value: string): MdListItem {\n\treturn md.listItem(md.paragraph(md.text(value)));\n}\n\n/**\n * Wrap a raw markdown string as an HTML node.\n * Use for TSDoc content that may contain markdown formatting (backticks,\n * bold, links) which should pass through to the output verbatim rather\n * than being escaped by the serializer.\n */\nexport function rawBlock(markdown: string): MdHtml {\n\treturn md.html(markdown);\n}\n\n/**\n * Truncate a string to at most maxLen chars.\n * Avoids cutting inside backtick-delimited code spans to prevent\n * broken inline code that would cause escaping issues.\n */\nexport function truncate(text: string, maxLen = 80): string {\n\tif (text.length <= maxLen) return text;\n\tlet cutPoint = maxLen - 3;\n\t// Count backticks before the cut point — if odd, we're inside a code span\n\tconst prefix = text.slice(0, cutPoint);\n\tconst backtickCount = (prefix.match(/`/g) || []).length;\n\tif (backtickCount % 2 !== 0) {\n\t\t// Inside a code span — back up to before the opening backtick\n\t\tconst lastBacktick = prefix.lastIndexOf(\"`\");\n\t\tif (lastBacktick > 0) {\n\t\t\tcutPoint = lastBacktick;\n\t\t}\n\t}\n\treturn `${text.slice(0, cutPoint).trimEnd()}...`;\n}\n\n/** Convert a label to a GitHub-compatible anchor slug. */\nexport function 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/**\n * Strip extension from a link path and normalize to a slug.\n * Produces bare slug links compatible with Mintlify and most SSGs.\n */\nexport function slugLink(path: string): string {\n\tlet slug = path.startsWith(\"./\") ? path.slice(2) : path;\n\tslug = slug.replace(/\\.(mdx?)$/, \"\");\n\treturn `/${slug}`;\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport type { ForgeSymbol } from \"@forge-ts/core\";\nimport { parseInline } from \"./markdown-utils.js\";\nimport {\n\ttype MdBlock,\n\ttype MdTableRow,\n\tmd,\n\trawBlock,\n\tserializeMarkdown,\n} from \"./mdast-builders.js\";\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 * Builds the API overview content as mdast blocks.\n * @internal\n */\nfunction buildApiBlocks(symbols: ForgeSymbol[], includeExamples: boolean): MdBlock[] {\n\tconst nodes: MdBlock[] = [];\n\n\t// API table\n\tconst headerRow = md.tableRow(\n\t\tmd.tableCell(md.text(\"Symbol\")),\n\t\tmd.tableCell(md.text(\"Kind\")),\n\t\tmd.tableCell(md.text(\"Description\")),\n\t);\n\tconst dataRows: MdTableRow[] = [];\n\n\tfor (const s of symbols) {\n\t\t// Derive compact signature for display\n\t\tlet sigText: string;\n\t\tif (!s.signature) {\n\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\tsigText = `${s.name}${ext}`;\n\t\t} else {\n\t\t\tsigText = s.signature.length > 60 ? `${s.signature.slice(0, 57)}...` : s.signature;\n\t\t}\n\n\t\tconst summary = s.documentation?.summary ?? \"\";\n\t\tdataRows.push(\n\t\t\tmd.tableRow(\n\t\t\t\tmd.tableCell(md.inlineCode(sigText)),\n\t\t\t\tmd.tableCell(md.text(s.kind)),\n\t\t\t\tmd.tableCell(...(summary ? parseInline(summary) : [md.text(\"\")])),\n\t\t\t),\n\t\t);\n\t}\n\n\tnodes.push(md.table(null, headerRow, ...dataRows));\n\n\t// Optional examples section\n\tif (includeExamples) {\n\t\tconst withExamples = symbols.filter((s) => (s.documentation?.examples ?? []).length > 0);\n\t\tif (withExamples.length > 0) {\n\t\t\tnodes.push(md.heading(3, md.text(\"Examples\")));\n\n\t\t\tfor (const s of withExamples) {\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tnodes.push(md.heading(4, md.inlineCode(`${s.name}${ext}`)));\n\t\t\t\tconst examples = s.documentation?.examples ?? [];\n\t\t\t\tconst ex = examples[0];\n\t\t\t\tnodes.push(md.code(ex.language, ex.code.trim()));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nodes;\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\t// Build inner content as mdast\n\tconst innerNodes: MdBlock[] = [];\n\n\tinnerNodes.push(md.heading(2, md.text(\"API Overview\")));\n\n\tif (badge) {\n\t\t// Badge uses shields.io image markdown — pass through as raw\n\t\tinnerNodes.push(\n\t\t\trawBlock(\n\t\t\t\t\"[![Documented with forge-ts](https://img.shields.io/badge/docs-forge--ts-blue)](https://github.com/forge-ts/forge-ts)\",\n\t\t\t),\n\t\t);\n\t}\n\n\tinnerNodes.push(...buildApiBlocks(exported, includeExamples));\n\n\t// Serialize to markdown string\n\tconst innerMd = serializeMarkdown(md.root(...innerNodes));\n\n\t// Wrap with markers\n\tconst injection = `${SECTION_START}\\n\\n${innerMd}\\n${SECTION_END}`;\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\";\nimport { parseInline, stringifyWithFrontmatter } from \"./markdown-utils.js\";\nimport {\n\ttype MdBlock,\n\ttype MdListItem,\n\ttype MdPhrasing,\n\ttype MdTableRow,\n\tmd,\n\tserializeMarkdown,\n\tslugLink,\n\ttextListItem,\n\ttextP,\n\ttoAnchor,\n\ttruncate,\n} from \"./mdast-builders.js\";\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/**\n * Escape MDX-unsafe characters in text that appears outside code fences.\n *\n * MDX parses `<Word>` as JSX tags and `{expr}` as JS expressions.\n * In documentation content (summaries, descriptions, table cells), these\n * come from TypeScript generics (`Array<string>`) and TSDoc inline tags\n * (`{@link Foo}`). We escape them so MDX treats them as literal text.\n *\n * This is exported so SSG adapters can apply it during page transformation.\n *\n * @public\n */\nexport function escapeMdx(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t// Escape { and } — prevents MDX expression parsing of {@link}, {Type}, etc.\n\t\t\t.replace(/\\{/g, \"\\\\{\")\n\t\t\t.replace(/\\}/g, \"\\\\}\")\n\t\t\t// Escape < and > that look like JSX tags — prevents MDX tag parsing\n\t\t\t// of Array<string>, Record<K, V>, Promise<void>, etc.\n\t\t\t// Only escape angle brackets that are followed by word chars (tag-like).\n\t\t\t.replace(/<(\\w)/g, \"&lt;$1\")\n\t\t\t.replace(/(\\w)>/g, \"$1&gt;\")\n\t);\n}\n\n/** Build a frontmatter block string from the fields map using gray-matter. */\nfunction serializeFrontmatter(fields: Record<string, string | number | boolean>): string {\n\tif (Object.keys(fields).length === 0) return \"\";\n\t// stringifyWithFrontmatter produces `---\\ndata\\n---\\n\\nbody` — we only need the frontmatter prefix\n\treturn stringifyWithFrontmatter(\"\", fields);\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// 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 nodes: MdBlock[] = [];\n\n\t// Intro — no h1, frontmatter title handles the heading\n\tif (options.projectDescription) {\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\t\tmd.text(` — ${options.projectDescription}`),\n\t\t\t),\n\t\t);\n\t} else {\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\t\tmd.text(\n\t\t\t\t\t\" 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\t\t),\n\t\t\t),\n\t\t);\n\t}\n\n\t// Features section\n\tnodes.push(md.heading(2, md.text(\"Features\")));\n\n\tconst pkgCount = symbolsByPackage.size;\n\tconst featureItems: MdListItem[] = [];\n\tif (pkgCount > 1) {\n\t\tfeatureItems.push(textListItem(`${pkgCount} packages with full TypeScript support`));\n\t} else {\n\t\tfeatureItems.push(textListItem(\"Full TypeScript support with TSDoc extraction\"));\n\t}\n\tfeatureItems.push(textListItem(\"Auto-generated API reference from source code\"));\n\tfeatureItems.push(\n\t\tmd.listItem(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.text(\"Executable \"),\n\t\t\t\tmd.inlineCode(\"@example\"),\n\t\t\t\tmd.text(\" blocks as doctests\"),\n\t\t\t),\n\t\t),\n\t);\n\tfeatureItems.push(textListItem(\"AI-ready context files from a single build pass\"));\n\tnodes.push(md.list(featureItems));\n\n\t// Installation section\n\tnodes.push(md.heading(2, md.text(\"Installation\")));\n\tnodes.push(md.code(\"bash\", `npm install -D ${options.packageName ?? \"@forge-ts/cli\"}`));\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\tnodes.push(md.heading(2, md.text(\"Quick Example\")));\n\t\tnodes.push(md.code(firstExample.language || \"typescript\", firstExample.code.trim()));\n\t}\n\n\t// Packages table\n\tif (symbolsByPackage.size > 0) {\n\t\tnodes.push(md.heading(2, md.text(\"Packages\")));\n\n\t\tconst headerRow = md.tableRow(\n\t\t\tmd.tableCell(md.text(\"Package\")),\n\t\t\tmd.tableCell(md.text(\"Description\")),\n\t\t);\n\t\tconst dataRows: MdTableRow[] = [];\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 = truncate(rawDesc);\n\t\t\tdataRows.push(\n\t\t\t\tmd.tableRow(\n\t\t\t\t\tmd.tableCell(md.link(slugLink(`packages/${pkgName}/index`), md.inlineCode(pkgName))),\n\t\t\t\t\tmd.tableCell(md.text(desc)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tnodes.push(md.table(null, headerRow, ...dataRows));\n\t}\n\n\t// Next Steps\n\tnodes.push(md.heading(2, md.text(\"Next Steps\")));\n\tnodes.push(\n\t\tmd.list([\n\t\t\tmd.listItem(\n\t\t\t\tmd.paragraph(\n\t\t\t\t\tmd.link(\"/getting-started\", md.text(\"Getting Started\")),\n\t\t\t\t\tmd.text(\" — Step-by-step guide\"),\n\t\t\t\t),\n\t\t\t),\n\t\t\tmd.listItem(\n\t\t\t\tmd.paragraph(\n\t\t\t\t\tmd.link(\"/packages\", md.text(\"API Reference\")),\n\t\t\t\t\tmd.text(\" — Full API documentation\"),\n\t\t\t\t),\n\t\t\t),\n\t\t\tmd.listItem(\n\t\t\t\tmd.paragraph(md.link(\"/concepts\", md.text(\"Concepts\")), md.text(\" — How it works\")),\n\t\t\t),\n\t\t]),\n\t);\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\t// No h1 — frontmatter title handles the heading\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Get up and running with \"),\n\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\tmd.text(\" in minutes.\"),\n\t\t),\n\t);\n\n\tif (options.projectDescription) {\n\t\tnodes.push(md.paragraph(...parseInline(options.projectDescription)));\n\t}\n\n\tnodes.push(md.heading(2, md.text(\"Step 1: Install\")));\n\tnodes.push(md.code(\"bash\", `npm install -D ${options.packageName ?? \"@forge-ts/cli\"}`));\n\n\tnodes.push(md.heading(2, md.text(\"Step 2: Add TSDoc to your code\")));\n\tnodes.push(textP(\"Add TSDoc comments to your exported functions and types:\"));\n\tnodes.push(\n\t\tmd.code(\n\t\t\t\"typescript\",\n\t\t\t[\n\t\t\t\t\"/**\",\n\t\t\t\t\" * Adds two numbers together.\",\n\t\t\t\t\" * @param a - First number\",\n\t\t\t\t\" * @param b - Second number\",\n\t\t\t\t\" * @returns The sum of a and b\",\n\t\t\t\t\" * @example\",\n\t\t\t\t\" * ```typescript\",\n\t\t\t\t\" * const result = add(1, 2); // => 3\",\n\t\t\t\t\" * ```\",\n\t\t\t\t\" */\",\n\t\t\t\t\"export function add(a: number, b: number): number {\",\n\t\t\t\t\" return a + b;\",\n\t\t\t\t\"}\",\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n\n\tnodes.push(md.heading(2, md.text(\"Step 3: Run forge-ts check\")));\n\tnodes.push(textP(\"Lint your TSDoc coverage before generating docs:\"));\n\tnodes.push(md.code(\"bash\", \"npx forge-ts check\"));\n\tnodes.push(textP(\"Expected output:\"));\n\tnodes.push(\n\t\tmd.code(\n\t\t\t\"\",\n\t\t\t[\"forge-ts: checking TSDoc coverage...\", \" \\u2713 All public symbols documented\"].join(\"\\n\"),\n\t\t),\n\t);\n\n\tnodes.push(md.heading(2, md.text(\"Step 4: Generate docs\")));\n\tnodes.push(textP(\"Build your documentation site:\"));\n\tnodes.push(md.code(\"bash\", \"npx forge-ts build\"));\n\n\tif (firstExample) {\n\t\tnodes.push(textP(\"Your code examples become live documentation:\"));\n\t\tnodes.push(md.code(firstExample.language || \"typescript\", firstExample.code.trim()));\n\t}\n\n\tnodes.push(md.heading(2, md.text(\"What's Next?\")));\n\tnodes.push(\n\t\tmd.list([\n\t\t\tmd.listItem(\n\t\t\t\tmd.paragraph(\n\t\t\t\t\tmd.link(\"/concepts\", md.text(\"Concepts\")),\n\t\t\t\t\tmd.text(\" — Understand how forge-ts works\"),\n\t\t\t\t),\n\t\t\t),\n\t\t\tmd.listItem(\n\t\t\t\tmd.paragraph(\n\t\t\t\t\tmd.link(\"/packages\", md.text(\"API Reference\")),\n\t\t\t\t\tmd.text(\" — Full API documentation\"),\n\t\t\t\t),\n\t\t\t),\n\t\t\tmd.listItem(\n\t\t\t\tmd.paragraph(md.link(\"/guides\", md.text(\"Guides\")), md.text(\" — Practical how-to guides\")),\n\t\t\t),\n\t\t]),\n\t);\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"This page explains the core concepts behind \"),\n\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\tnodes.push(\n\t\tmd.blockquote(\n\t\t\ttextP(\"This is a stub page. Edit this file to add your project's conceptual documentation.\"),\n\t\t\ttextP(\"Auto-generated sections below (inside FORGE:AUTO markers) update on every build.\"),\n\t\t),\n\t);\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\tnodes.push(md.html(\"<!-- FORGE:AUTO-START how-it-works -->\"));\n\tnodes.push(md.heading(2, md.text(\"How It Works\")));\n\tif (pkgDoc) {\n\t\tnodes.push(md.paragraph(...parseInline(pkgDoc)));\n\t} else {\n\t\tnodes.push(\n\t\t\ttextP(\n\t\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\t),\n\t\t);\n\t}\n\tnodes.push(md.html(\"<!-- FORGE:AUTO-END how-it-works -->\"));\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\tnodes.push(md.html(\"<!-- FORGE:AUTO-START key-abstractions -->\"));\n\t\tnodes.push(md.heading(2, md.text(\"Key Abstractions\")));\n\t\tconst items: MdListItem[] = [];\n\t\tfor (const s of allTypeSymbols) {\n\t\t\tconst desc = s.documentation?.summary ?? `The \\`${s.name}\\` ${s.kind}.`;\n\t\t\titems.push(\n\t\t\t\tmd.listItem(\n\t\t\t\t\tmd.paragraph(md.strong(md.inlineCode(s.name)), md.text(\" — \"), ...parseInline(desc)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tnodes.push(md.list(items));\n\t\tnodes.push(md.html(\"<!-- FORGE:AUTO-END key-abstractions -->\"));\n\t}\n\n\treturn serializeMarkdown(md.root(...nodes));\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\tconst nodes: MdBlock[] = [];\n\n\tnodes.push(textP(\"Practical how-to guides for common tasks.\"));\n\tnodes.push(\n\t\tmd.blockquote(\n\t\t\ttextP(\n\t\t\t\t\"Add your guides to the `guides/` directory. Each `.md` or `.mdx` file will appear here automatically.\",\n\t\t\t),\n\t\t),\n\t);\n\tnodes.push(md.heading(2, md.text(\"Getting Things Done\")));\n\tnodes.push(\n\t\ttextP(\n\t\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);\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\t// Find @packageDocumentation summary\n\tconst pkgDoc = symbols.map((s) => s.documentation?.tags?.packageDocumentation?.[0]).find(Boolean);\n\tif (pkgDoc) {\n\t\tnodes.push(md.paragraph(...parseInline(pkgDoc)));\n\t} else {\n\t\tnodes.push(\n\t\t\tmd.paragraph(md.text(\"API reference for the \"), md.inlineCode(pkgName), md.text(\" package.\")),\n\t\t);\n\t}\n\n\tconst renderGroup = (group: ForgeSymbol[], heading: string, pathSuffix: string) => {\n\t\tif (group.length === 0) return;\n\t\tnodes.push(md.heading(2, md.text(heading)));\n\n\t\tconst headerRow = md.tableRow(\n\t\t\tmd.tableCell(md.text(\"Symbol\")),\n\t\t\tmd.tableCell(md.text(\"Kind\")),\n\t\t\tmd.tableCell(md.text(\"Description\")),\n\t\t);\n\t\tconst dataRows: MdTableRow[] = [];\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 rawSummary = s.documentation?.summary ?? \"\";\n\t\t\tconst summary = truncate(rawSummary);\n\t\t\tdataRows.push(\n\t\t\t\tmd.tableRow(\n\t\t\t\t\tmd.tableCell(\n\t\t\t\t\t\tmd.link(\n\t\t\t\t\t\t\t`${slugLink(`packages/${pkgName}/${pathSuffix}`)}#${anchor}`,\n\t\t\t\t\t\t\tmd.inlineCode(`${s.name}${ext}`),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\tmd.tableCell(md.text(s.kind)),\n\t\t\t\t\tmd.tableCell(...parseInline(summary)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tnodes.push(md.table(null, headerRow, ...dataRows));\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 serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\t// No h1 — frontmatter title handles the heading in Mintlify and other SSGs\n\n\tif (pkgDoc) {\n\t\tnodes.push(md.paragraph(...parseInline(pkgDoc)));\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\tnodes.push(md.heading(2, md.text(heading)));\n\n\t\t\tconst headerRow = md.tableRow(\n\t\t\t\tmd.tableCell(md.text(\"Symbol\")),\n\t\t\t\tmd.tableCell(md.text(\"Kind\")),\n\t\t\t\tmd.tableCell(md.text(\"Description\")),\n\t\t\t);\n\t\t\tconst dataRows: MdTableRow[] = [];\n\t\t\tfor (const s of group) {\n\t\t\t\tconst ext = s.kind === \"function\" ? \"()\" : \"\";\n\t\t\t\tconst anchor = toAnchor(`${s.name}${ext}`);\n\t\t\t\tconst rawSummary = s.documentation?.summary ?? \"\";\n\t\t\t\tconst summary = truncate(rawSummary);\n\t\t\t\tdataRows.push(\n\t\t\t\t\tmd.tableRow(\n\t\t\t\t\t\tmd.tableCell(\n\t\t\t\t\t\t\tmd.link(\n\t\t\t\t\t\t\t\t`${slugLink(`packages/${packageName}/api/index`)}#${anchor}`,\n\t\t\t\t\t\t\t\tmd.inlineCode(`${s.name}${ext}`),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmd.tableCell(md.text(s.kind)),\n\t\t\t\t\t\tmd.tableCell(...parseInline(summary)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tnodes.push(md.table(null, headerRow, ...dataRows));\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 serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tnodes.push(\n\t\ttextP(\"Type contracts exported by this package: interfaces, type aliases, and enums.\"),\n\t);\n\n\tfor (const s of typeSymbols) {\n\t\tnodes.push(md.heading(2, md.text(s.name)));\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tnodes.push(\n\t\t\t\tmd.blockquote(\n\t\t\t\t\tmd.paragraph(\n\t\t\t\t\t\tmd.strong(md.text(\"Deprecated\")),\n\t\t\t\t\t\tmd.text(\": \"),\n\t\t\t\t\t\t...parseInline(s.documentation.deprecated),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tnodes.push(md.paragraph(...parseInline(s.documentation.summary)));\n\t\t}\n\n\t\tif (s.signature && s.kind !== \"interface\") {\n\t\t\tnodes.push(md.code(\"typescript\", s.signature));\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\tconst headerRow = md.tableRow(\n\t\t\t\tmd.tableCell(md.text(\"Property\")),\n\t\t\t\tmd.tableCell(md.text(\"Type\")),\n\t\t\t\tmd.tableCell(md.text(\"Required\")),\n\t\t\t\tmd.tableCell(md.text(\"Description\")),\n\t\t\t);\n\t\t\tconst dataRows: MdTableRow[] = [];\n\t\t\tfor (const child of children) {\n\t\t\t\tconst typePhrasing: MdPhrasing = child.signature\n\t\t\t\t\t? md.inlineCode(child.signature)\n\t\t\t\t\t: md.text(\"\\u2014\");\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 = child.documentation?.summary || child.name;\n\t\t\t\tdataRows.push(\n\t\t\t\t\tmd.tableRow(\n\t\t\t\t\t\tmd.tableCell(md.inlineCode(child.name)),\n\t\t\t\t\t\tmd.tableCell(typePhrasing),\n\t\t\t\t\t\tmd.tableCell(md.text(optional)),\n\t\t\t\t\t\tmd.tableCell(...parseInline(description)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tnodes.push(md.table(null, headerRow, ...dataRows));\n\t\t}\n\t}\n\n\t// Suppress unused variable warning\n\tvoid packageName;\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tnodes.push(textP(\"Functions and classes exported by this package.\"));\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\tnodes.push(md.heading(2, md.text(heading)));\n\n\t\tif (s.documentation?.deprecated) {\n\t\t\tnodes.push(\n\t\t\t\tmd.blockquote(\n\t\t\t\t\tmd.paragraph(\n\t\t\t\t\t\tmd.strong(md.text(\"Deprecated\")),\n\t\t\t\t\t\tmd.text(\": \"),\n\t\t\t\t\t\t...parseInline(s.documentation.deprecated),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (s.documentation?.summary) {\n\t\t\tnodes.push(md.paragraph(...parseInline(s.documentation.summary)));\n\t\t}\n\n\t\tif (s.signature) {\n\t\t\tnodes.push(md.paragraph(md.strong(md.text(\"Signature\"))));\n\t\t\tnodes.push(md.code(\"typescript\", s.signature));\n\t\t}\n\n\t\tconst params = s.documentation?.params ?? [];\n\t\tif (params.length > 0) {\n\t\t\tnodes.push(md.paragraph(md.strong(md.text(\"Parameters\"))));\n\n\t\t\tconst headerRow = md.tableRow(\n\t\t\t\tmd.tableCell(md.text(\"Name\")),\n\t\t\t\tmd.tableCell(md.text(\"Type\")),\n\t\t\t\tmd.tableCell(md.text(\"Description\")),\n\t\t\t);\n\t\t\tconst dataRows: MdTableRow[] = [];\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 typePhrasing: MdPhrasing = resolvedType\n\t\t\t\t\t? md.inlineCode(resolvedType)\n\t\t\t\t\t: md.text(\"\\u2014\");\n\t\t\t\tdataRows.push(\n\t\t\t\t\tmd.tableRow(\n\t\t\t\t\t\tmd.tableCell(md.inlineCode(p.name)),\n\t\t\t\t\t\tmd.tableCell(typePhrasing),\n\t\t\t\t\t\tmd.tableCell(...parseInline(p.description)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tnodes.push(md.table(null, headerRow, ...dataRows));\n\t\t}\n\n\t\tif (s.documentation?.returns) {\n\t\t\tconst retParts: MdPhrasing[] = [md.strong(md.text(\"Returns\"))];\n\t\t\tif (s.documentation.returns.type) {\n\t\t\t\tretParts.push(md.text(\" \"));\n\t\t\t\tretParts.push(md.inlineCode(s.documentation.returns.type));\n\t\t\t}\n\t\t\tretParts.push(md.text(\" — \"), ...parseInline(s.documentation.returns.description));\n\t\t\tnodes.push(md.paragraph(...retParts));\n\t\t}\n\n\t\tconst throws = s.documentation?.throws ?? [];\n\t\tif (throws.length > 0) {\n\t\t\tnodes.push(md.paragraph(md.strong(md.text(\"Throws\"))));\n\t\t\tconst throwItems: MdListItem[] = [];\n\t\t\tfor (const t of throws) {\n\t\t\t\tconst throwParts: MdPhrasing[] = [];\n\t\t\t\tif (t.type) {\n\t\t\t\t\tthrowParts.push(md.inlineCode(t.type));\n\t\t\t\t\tthrowParts.push(md.text(\" — \"), ...parseInline(t.description));\n\t\t\t\t} else {\n\t\t\t\t\tthrowParts.push(...parseInline(t.description));\n\t\t\t\t}\n\t\t\t\tthrowItems.push(md.listItem(md.paragraph(...throwParts)));\n\t\t\t}\n\t\t\tnodes.push(md.list(throwItems));\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\tnodes.push(md.paragraph(md.strong(md.text(\"Example\"))));\n\t\t\tnodes.push(md.code(ex.language || \"typescript\", ex.code.trim()));\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\tnodes.push(md.paragraph(md.strong(md.text(\"Methods\"))));\n\t\t\tfor (const method of methods) {\n\t\t\t\tnodes.push(md.heading(3, md.text(`${method.name}()`)));\n\t\t\t\tif (method.documentation?.summary) {\n\t\t\t\t\tnodes.push(md.paragraph(...parseInline(method.documentation.summary)));\n\t\t\t\t}\n\t\t\t\tif (method.signature) {\n\t\t\t\t\tnodes.push(md.code(\"typescript\", method.signature));\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 serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\t// No h1 — frontmatter title handles the heading\n\tnodes.push(textP(\"All usage examples from the package, aggregated for quick reference.\"));\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\tnodes.push(md.heading(2, md.inlineCode(`${s.name}${ext}`)));\n\n\t\tif (s.documentation?.summary) {\n\t\t\tnodes.push(md.paragraph(md.emphasis(...parseInline(s.documentation.summary))));\n\t\t}\n\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.link(\n\t\t\t\t\t`${slugLink(`packages/${packageName}/api/functions`)}#${toAnchor(s.name)}`,\n\t\t\t\t\tmd.text(\"View in API reference\"),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\t\tfor (const ex of examples) {\n\t\t\tnodes.push(md.code(ex.language || \"typescript\", ex.code.trim()));\n\t\t}\n\t}\n\n\tif (!hasExamples) {\n\t\tnodes.push(md.paragraph(md.emphasis(md.text(\"No examples documented yet.\"))));\n\t}\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Configuration reference for \"),\n\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\n\tnodes.push(md.heading(2, md.text(\"forge-ts.config.ts\")));\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Create a \"),\n\t\t\tmd.inlineCode(\"forge-ts.config.ts\"),\n\t\t\tmd.text(\" file in your project root:\"),\n\t\t),\n\t);\n\tnodes.push(\n\t\tmd.code(\n\t\t\t\"typescript\",\n\t\t\t[\n\t\t\t\t'import { defineConfig } from \"@forge-ts/core\";',\n\t\t\t\t\"\",\n\t\t\t\t\"export default defineConfig({\",\n\t\t\t\t' rootDir: \".\",',\n\t\t\t\t' outDir: \"docs/generated\",',\n\t\t\t\t\"});\",\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n\n\tif (configSymbol) {\n\t\tnodes.push(md.heading(2, md.inlineCode(configSymbol.name)));\n\n\t\tif (configSymbol.documentation?.summary) {\n\t\t\tnodes.push(md.paragraph(...parseInline(configSymbol.documentation.summary)));\n\t\t}\n\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\tconst headerRow = md.tableRow(\n\t\t\t\tmd.tableCell(md.text(\"Property\")),\n\t\t\t\tmd.tableCell(md.text(\"Type\")),\n\t\t\t\tmd.tableCell(md.text(\"Required\")),\n\t\t\t\tmd.tableCell(md.text(\"Description\")),\n\t\t\t);\n\t\t\tconst dataRows: MdTableRow[] = [];\n\t\t\tfor (const child of children) {\n\t\t\t\tconst typePhrasing: MdPhrasing = child.signature\n\t\t\t\t\t? md.inlineCode(child.signature)\n\t\t\t\t\t: md.text(\"\\u2014\");\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 = child.documentation?.summary || child.name;\n\t\t\t\tdataRows.push(\n\t\t\t\t\tmd.tableRow(\n\t\t\t\t\t\tmd.tableCell(md.inlineCode(child.name)),\n\t\t\t\t\t\tmd.tableCell(typePhrasing),\n\t\t\t\t\t\tmd.tableCell(md.text(optional)),\n\t\t\t\t\t\tmd.tableCell(...parseInline(description)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tnodes.push(md.table(null, headerRow, ...dataRows));\n\t\t}\n\t}\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Release history for \"),\n\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\tnodes.push(\n\t\tmd.blockquote(textP(\"This is a stub page. Link to or embed your `CHANGELOG.md` here.\")),\n\t);\n\n\tif (repoUrl) {\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.text(\"See \"),\n\t\t\t\tmd.link(`${repoUrl}/blob/main/CHANGELOG.md`, md.text(\"CHANGELOG.md\")),\n\t\t\t\tmd.text(\" for the full release history.\"),\n\t\t\t),\n\t\t);\n\t} else {\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.text(\"See your project's \"),\n\t\t\t\tmd.inlineCode(\"CHANGELOG.md\"),\n\t\t\t\tmd.text(\" for the full release history.\"),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn serializeMarkdown(md.root(...nodes));\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\tconst nodes: MdBlock[] = [];\n\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Frequently asked questions about \"),\n\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\tnodes.push(\n\t\tmd.blockquote(textP(\"This is a stub page. Common questions will be added here as they arise.\")),\n\t);\n\n\tnodes.push(md.heading(2, md.text(\"How do I configure forge-ts?\")));\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Create a \"),\n\t\t\tmd.inlineCode(\"forge-ts.config.ts\"),\n\t\t\tmd.text(\" file in your project root. See \"),\n\t\t\tmd.link(\"/configuration\", md.text(\"Configuration\")),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\n\tnodes.push(md.heading(2, md.text(\"What TypeScript version is required?\")));\n\tnodes.push(textP(\"forge-ts requires TypeScript 5.0 or later.\"));\n\n\tnodes.push(md.heading(2, md.text(\"How do I run @example blocks as tests?\")));\n\tnodes.push(md.code(\"bash\", \"npx forge-ts test\"));\n\n\treturn serializeMarkdown(md.root(...nodes));\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 nodes: MdBlock[] = [];\n\n\tnodes.push(\n\t\tmd.paragraph(\n\t\t\tmd.text(\"Contributing to \"),\n\t\t\tmd.strong(md.text(options.projectName)),\n\t\t\tmd.text(\".\"),\n\t\t),\n\t);\n\tnodes.push(\n\t\tmd.blockquote(textP(\"This is a stub page. Link to or embed your `CONTRIBUTING.md` here.\")),\n\t);\n\n\tif (repoUrl) {\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.text(\"See \"),\n\t\t\t\tmd.link(`${repoUrl}/blob/main/CONTRIBUTING.md`, md.text(\"CONTRIBUTING.md\")),\n\t\t\t\tmd.text(\" for contribution guidelines.\"),\n\t\t\t),\n\t\t);\n\t} else {\n\t\tnodes.push(\n\t\t\tmd.paragraph(\n\t\t\t\tmd.text(\"See your project's \"),\n\t\t\t\tmd.inlineCode(\"CONTRIBUTING.md\"),\n\t\t\t\tmd.text(\" for contribution guidelines.\"),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn serializeMarkdown(md.root(...nodes));\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\tconst slug = 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// agentskills.io convention: SKILL-{project} prefix\n\tconst prefixed = slug.startsWith(\"skill-\") ? slug : `SKILL-${slug}`;\n\treturn prefixed.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 {\n\ttype FrontmatterResult,\n\tparseBlocks,\n\tparseFrontmatter,\n\tparseInline,\n\tsanitizeForMdx,\n\tstringifyWithFrontmatter,\n\tstripFrontmatter,\n} from \"./markdown-utils.js\";\nexport { md, serializeMarkdown, slugLink, toAnchor, truncate } from \"./mdast-builders.js\";\nexport { type ReadmeSyncOptions, syncReadme } from \"./readme-sync.js\";\nexport {\n\ttype DocPage,\n\tescapeMdx,\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 { updateAutoSections } from \"./markdown-utils.js\";\nimport { syncReadme } from \"./readme-sync.js\";\nimport { generateDocSite, groupSymbolsByPackage } from \"./site-generator.js\";\nimport { generateSkillPackage } from \"./skill.js\";\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: [...new Set(writtenFiles)],\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","remarkFrontmatter","remarkGfm","unified","relative","relative","pageSlug","slugToLabel","existsSync","readFile","writeFile","writeFile","existsSync","readFile"]}