deepspace 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{chunk-DQ4G6VL6.js → chunk-T7V4GUIN.js} +283 -180
  3. package/dist/chunk-T7V4GUIN.js.map +1 -0
  4. package/dist/cli.js +1010 -6123
  5. package/dist/cli.js.map +1 -1
  6. package/dist/documentation-client-core.d.ts +18 -0
  7. package/dist/{docs-client-core.js → documentation-client-core.js} +60 -51
  8. package/dist/documentation-client-core.js.map +1 -0
  9. package/dist/documentation-default-renderer.cjs +124 -0
  10. package/dist/documentation-react.d.ts +2 -0
  11. package/dist/{docs-react.js → documentation-react.js} +8 -8
  12. package/dist/documentation-runtime.js +71 -0
  13. package/dist/documentation-server-core.d.ts +11 -0
  14. package/dist/{docs-server-core.js → documentation-server-core.js} +13 -13
  15. package/dist/documentation-server-core.js.map +1 -0
  16. package/dist/documentation.d.ts +366 -0
  17. package/dist/documentation.js +3953 -0
  18. package/dist/documentation.js.map +1 -0
  19. package/dist/feature-installer.js +145 -0
  20. package/dist/feature-installer.js.map +1 -1
  21. package/dist/index.d.ts +6 -8
  22. package/dist/index.js +5 -15
  23. package/dist/index.js.map +1 -1
  24. package/dist/public-BGRX_Cjd.d.ts +234 -0
  25. package/dist/schema.d.ts +186 -0
  26. package/dist/schema.js +610 -0
  27. package/dist/schema.js.map +1 -0
  28. package/dist/server.d.ts +19 -167
  29. package/dist/server.js +76 -1069
  30. package/dist/server.js.map +1 -1
  31. package/dist/testing.d.ts +5 -8
  32. package/dist/testing.js +48 -14
  33. package/dist/testing.js.map +1 -1
  34. package/dist/worker.d.ts +52 -173
  35. package/dist/worker.js +563 -492
  36. package/dist/worker.js.map +1 -1
  37. package/features/admin-page/src/admin-schema.ts +1 -1
  38. package/features/ai-chat/feature.json +2 -2
  39. package/features/ai-chat/src/ChatPanel.tsx +0 -1
  40. package/features/ai-chat/src/ai-chat-schema.ts +1 -2
  41. package/features/canvas/src/canvas-schema.ts +1 -1
  42. package/features/documentation/content/index.mdx +14 -0
  43. package/features/documentation/content/quickstart.mdx +12 -0
  44. package/features/documentation/documentation.json +18 -0
  45. package/features/documentation/feature.json +68 -0
  46. package/features/{docs → documents}/feature.json +27 -27
  47. package/features/{docs/src/DocsEditorPage.tsx → documents/src/DocumentsEditorPage.tsx} +74 -74
  48. package/features/{docs/src/DocsListPage.tsx → documents/src/DocumentsListPage.tsx} +102 -102
  49. package/features/{docs/src/DocsOutlinePanel.tsx → documents/src/DocumentsOutlinePanel.tsx} +9 -9
  50. package/features/{docs/src/DocsPresence.tsx → documents/src/DocumentsPresence.tsx} +18 -18
  51. package/features/{docs → documents}/src/InviteDialog.tsx +21 -21
  52. package/features/{docs → documents}/src/LibrarySidebar.tsx +25 -25
  53. package/features/documents/src/__tests__/documents-presence-access.test.ts +71 -0
  54. package/features/{docs/src/docs-library-types.ts → documents/src/documents-library-types.ts} +3 -3
  55. package/features/{docs/src/docs-schema.ts → documents/src/documents-schema.ts} +6 -6
  56. package/features/{docs/src/docs-ui.css → documents/src/documents-ui.css} +89 -89
  57. package/features/{docs → documents}/src/editor/DocEditorSurface.tsx +11 -11
  58. package/features/{docs/src/editor/DocsTiptapToolbar.tsx → documents/src/editor/DocumentsTiptapToolbar.tsx} +21 -21
  59. package/features/{docs → documents}/src/editor/useDocEditor.ts +4 -4
  60. package/features/{docs/src/use-docs-presence-access.ts → documents/src/use-documents-presence-access.ts} +51 -51
  61. package/features/file-attachments/src/attachments-schema.ts +1 -1
  62. package/features/items/src/items-schema.ts +1 -1
  63. package/features/leaderboard/src/leaderboard-schema.ts +1 -1
  64. package/features/messaging/src/ChatMultiPage.tsx +1 -1
  65. package/features/messaging/src/ChatPage.tsx +1 -1
  66. package/features/messaging/src/messaging-schema.ts +2 -2
  67. package/features/tasks/src/tasks-schema.ts +1 -1
  68. package/features/testing/src/test-schema.ts +2 -2
  69. package/package.json +12 -7
  70. package/dist/chunk-DQ4G6VL6.js.map +0 -1
  71. package/dist/docs-client-core.d.ts +0 -18
  72. package/dist/docs-client-core.js.map +0 -1
  73. package/dist/docs-react.d.ts +0 -2
  74. package/dist/docs-runtime.js +0 -71
  75. package/dist/docs-server-core.d.ts +0 -11
  76. package/dist/docs-server-core.js.map +0 -1
  77. package/dist/docs.d.ts +0 -350
  78. package/dist/docs.js +0 -5139
  79. package/dist/docs.js.map +0 -1
  80. package/dist/public-Cp1X8ZQ3.d.ts +0 -230
  81. package/features/docs/src/__tests__/docs-presence-access.test.ts +0 -71
  82. /package/dist/{docs-react.js.map → documentation-react.js.map} +0 -0
package/dist/docs.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/docs/build.ts","../src/docs/markdown.ts","../src/docs/text.ts","../src/docs/types.ts","../src/docs/routing.ts","../src/docs/artifacts.ts","../src/docs/graph.ts","../src/docs/config.ts","../src/shared/ai-models.ts","../src/docs/config/schema.ts","../src/docs/config/validation.ts","../src/docs/mdx.ts","../src/docs/openapi.ts","../src/docs/openapi-object.ts","../src/docs/openapi-samples.ts","../src/docs/custom-runtime.ts","../src/docs/output.ts","../src/docs/skill.ts","../src/docs/template.ts","../src/docs/runtime/app.tsx","../src/docs/runtime/article.tsx","../src/docs/runtime/browser.ts","../src/docs/runtime/icons.tsx","../src/docs/runtime/page-actions.tsx","../src/docs/runtime/assistant.tsx","../src/client/ai-stream.ts","../src/docs/runtime/assistant-history.ts","../src/docs/runtime/dialog.ts","../src/docs/runtime/navigation.tsx","../src/docs/runtime/search.tsx","../src/docs/runtime/styles/base.ts","../src/docs/runtime/styles/content.ts","../src/docs/runtime/styles/navigation.ts","../src/docs/runtime/styles/overlays.ts","../src/docs/runtime/styles/responsive.ts","../src/docs/runtime/styles.ts","../src/docs/vite.ts","../src/docs/dev-http.ts"],"sourcesContent":["import { buildSync } from 'esbuild'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport {\n createAssistantChunks,\n createSearchEntries,\n pageMarkdown,\n pagesInNavigationOrder,\n renderLlmsFull,\n renderLlmsIndex,\n renderRobots,\n renderSitemap,\n stableJson,\n} from './artifacts'\nimport { validateDocs } from './graph'\nimport { buildCustomDocsRuntime } from './custom-runtime'\nimport { DocsOutput } from './output'\nimport { artifactPathsForRoute } from './routing'\nimport { createDocsSkillArtifacts } from './skill'\nimport {\n createPageRuntime,\n createNotFoundPage,\n renderPage,\n renderRedirect,\n DOCS_CSS,\n DOCS_THEME_BOOTSTRAP,\n} from './template'\nimport {\n DOCS_MANIFEST_VERSION,\n DocsError,\n type DocsBuildManifest,\n type DocsBuildResult,\n} from './types'\n\nexport interface BuildDocsOptions {\n appDir: string\n outputDir?: string\n baseUrl?: string\n}\n\nexport function buildDocs(options: BuildDocsOptions): DocsBuildResult {\n const validation = validateDocs(options.appDir)\n const outputDir = options.outputDir ? resolve(options.outputDir) : validation.outputDir\n const output = new DocsOutput(outputDir, validation.appDir, validation.sourceDir)\n const renderConfig = options.baseUrl\n ? { ...validation.graph.config, url: options.baseUrl }\n : validation.graph.config\n\n const write = output.write.bind(output)\n\n const customRuntime = buildCustomDocsRuntime(validation)\n if (customRuntime) {\n for (const asset of customRuntime.browserAssets) write(`assets/${asset.path}`, asset.content)\n }\n\n for (const page of validation.graph.pages) {\n const artifactPaths = artifactPathsForRoute(page.route)\n const renderOptions = {\n config: renderConfig,\n page,\n pages: validation.graph.pages,\n navigation: validation.graph.navigation,\n }\n const runtime = createPageRuntime(renderOptions)\n write(artifactPaths.html, renderPage(renderOptions, customRuntime ? {\n customStylesheets: customRuntime.stylesheets,\n markup: customRuntime.render(runtime.data, page.route),\n runtimeModule: true,\n runtimeScript: '/_docs/assets/docs-custom-runtime.js',\n } : {}, runtime))\n write(artifactPaths.data, stableJson(runtime.document))\n write(artifactPaths.markdown, pageMarkdown(page))\n }\n for (const [from, to] of Object.entries(validation.graph.config.redirects)) {\n write(artifactPathsForRoute(from).html, renderRedirect(to))\n }\n\n const notFoundPage = createNotFoundPage()\n const notFoundOptions = {\n config: renderConfig,\n page: notFoundPage,\n pages: [notFoundPage],\n navigation: validation.graph.navigation,\n }\n const notFoundRuntime = createPageRuntime(notFoundOptions)\n write('404.html', renderPage(notFoundOptions, customRuntime ? {\n customStylesheets: customRuntime.stylesheets,\n markup: customRuntime.render(notFoundRuntime.data, notFoundPage.route),\n runtimeModule: true,\n runtimeScript: '/_docs/assets/docs-custom-runtime.js',\n } : {}, notFoundRuntime))\n write('assets/docs.css', DOCS_CSS.trimStart())\n write('assets/docs-theme.js', DOCS_THEME_BOOTSTRAP)\n if (!customRuntime) write('assets/docs-runtime.js', buildDocsRuntime().trimStart())\n write('search.json', stableJson(createSearchEntries(validation.graph.pages)))\n write('assistant-index.json', stableJson(createAssistantChunks(validation.graph.pages)))\n const openApiOperations = validation.graph.pages.flatMap((page) =>\n page.openapi ? [{ route: page.route, ...page.openapi }] : [],\n )\n if (openApiOperations.length > 0) write('openapi.json', stableJson(openApiOperations))\n const machinePages = pagesInNavigationOrder(validation.graph.pages, validation.graph.navigation)\n write('llms.txt', renderLlmsIndex(machinePages, validation.graph.config.name))\n write('llms-full.txt', renderLlmsFull(machinePages, validation.graph.config.name))\n const skill = createDocsSkillArtifacts(validation.graph, renderConfig.url)\n write('skill.md', skill.markdown)\n write(`.well-known/skills/${skill.name}/SKILL.md`, skill.markdown)\n write('.well-known/skills/index.json', stableJson(skill.legacyIndex))\n write(`.well-known/agent-skills/${skill.name}/skill.md`, skill.markdown)\n write('.well-known/agent-skills/index.json', stableJson(skill.discoveryIndex))\n write('sitemap.xml', renderSitemap(validation.graph.pages, renderConfig.url))\n write('robots.txt', renderRobots(renderConfig.url, renderConfig.seo.noindex))\n output.copyMedia(\n validation.sourceDir,\n new Set(\n validation.graph.pages\n .filter((page) => page.kind === 'openapi')\n .map((page) => resolve(page.sourcePath)),\n ),\n )\n\n const outputHash = output.hash()\n const manifest: DocsBuildManifest = {\n version: DOCS_MANIFEST_VERSION,\n sourceHash: validation.graph.sourceHash,\n outputHash,\n name: validation.graph.config.name,\n pageCount: validation.graph.pages.length,\n routes: validation.graph.pages.map((page) => page.route),\n assistant: validation.graph.config.assistant,\n mcp: validation.graph.config.mcp,\n }\n write('manifest.json', stableJson(manifest))\n\n return {\n ...validation,\n outputDir,\n manifest,\n files: [...output.files].sort(),\n }\n}\n\n/**\n * Published packages ship a pre-bundled browser runtime beside `dist/docs.js`.\n * Source checkouts compile the same entry on demand so SDK tests and local CLI\n * development exercise the real hydration code rather than a test-only shim.\n */\nfunction buildDocsRuntime(): string {\n const bundledPath = fileURLToPath(new URL('./docs-runtime.js', import.meta.url))\n if (existsSync(bundledPath)) return readFileSync(bundledPath, 'utf8')\n\n const sourcePath = fileURLToPath(new URL('./runtime/auto-client.tsx', import.meta.url))\n const result = buildSync({\n entryPoints: [sourcePath],\n bundle: true,\n write: false,\n minify: true,\n platform: 'browser',\n format: 'iife',\n target: ['es2022'],\n jsx: 'automatic',\n define: { 'process.env.NODE_ENV': '\"production\"' },\n })\n const output = result.outputFiles?.[0]?.text\n if (!output) {\n throw new DocsError('Unable to compile the docs browser runtime', 'docs_runtime_build_failed')\n }\n return output\n}\n","import hljs from 'highlight.js/lib/core'\nimport bash from 'highlight.js/lib/languages/bash'\nimport css from 'highlight.js/lib/languages/css'\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport json from 'highlight.js/lib/languages/json'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport xml from 'highlight.js/lib/languages/xml'\nimport yaml from 'highlight.js/lib/languages/yaml'\nimport { Marked } from 'marked'\nimport sanitizeHtml from 'sanitize-html'\nimport { parse as parseYaml } from 'yaml'\nimport { createSlugger, errorMessage, escapeHtml } from './text'\nimport { DocsError, type DocsFrontmatter, type DocsHeading } from './types'\n\nconst COMPONENT_NAMES = [\n 'Note',\n 'Tip',\n 'Warning',\n 'Info',\n 'Card',\n 'Accordion',\n 'AccordionGroup',\n 'Step',\n 'Tab',\n 'CodeGroup',\n 'Steps',\n 'Tabs',\n] as const\n\ntype ComponentName = (typeof COMPONENT_NAMES)[number]\n\nconst LEAF_COMPONENTS: ComponentName[] = [\n 'Note',\n 'Tip',\n 'Warning',\n 'Info',\n 'Card',\n 'Accordion',\n 'Step',\n 'Tab',\n 'CodeGroup',\n]\n\nconst WRAPPER_COMPONENTS: ComponentName[] = ['AccordionGroup', 'Steps', 'Tabs']\n\nfor (const [name, language] of Object.entries({\n bash,\n css,\n html: xml,\n javascript,\n json,\n jsx: javascript,\n markdown,\n md: markdown,\n shell: bash,\n sh: bash,\n ts: typescript,\n tsx: typescript,\n typescript,\n xml,\n yaml,\n yml: yaml,\n})) {\n hljs.registerLanguage(name, language)\n}\n\nconst markdownRenderer = new Marked({\n renderer: {\n code({ text, lang }) {\n const { language, title } = parseCodeFenceInfo(lang)\n const highlighted = language && hljs.getLanguage(language)\n ? hljs.highlight(text, { language, ignoreIllegals: true }).value\n : escapeHtml(text)\n const className = language\n ? ` class=\"language-${escapeHtml(language)} hljs\"`\n : ' class=\"hljs\"'\n return `<pre${title ? ` data-code-title=\"${escapeHtml(title)}\"` : ''}><code${className}>${highlighted}</code></pre>\\n`\n },\n },\n})\n\nexport interface ParsedMarkdown {\n frontmatter: DocsFrontmatter\n markdown: string\n html: string\n text: string\n headings: DocsHeading[]\n}\n\nexport function parseMarkdown(source: string, file: string): ParsedMarkdown {\n const { frontmatter, body } = parseFrontmatter(source, file)\n validateExecutableMdx(body, file)\n\n const placeholders: string[] = []\n let prepared = protectCode(body.replace(/^\\uFEFF/, ''), placeholders)\n for (const name of [...LEAF_COMPONENTS, ...WRAPPER_COMPONENTS]) {\n prepared = replaceComponentBlocks(prepared, name, placeholders)\n }\n\n const rendered = String(markdownRenderer.parse(prepared, { gfm: true, breaks: false }))\n let restored = rendered\n for (let pass = 0; pass < placeholders.length + 1; pass++) {\n let changed = false\n restored = restored.replace(\n /(?:<p>)?@@DEEPSPACE_COMPONENT_(\\d+)@@(?:<\\/p>)?/g,\n (_match, indexRaw: string) => {\n const replacement = placeholders[Number(indexRaw)]\n if (replacement === undefined) return ''\n changed = true\n return replacement\n },\n )\n if (!changed) break\n }\n restored = restored.replace(\n /<div class=\"docs-code-group\" data-code-group-pending data-code-group-title=\"([^\"]*)\">([\\s\\S]*?)<\\/div>/g,\n (_match, title: string, innerHtml: string) => renderCodeGroup(innerHtml, title),\n )\n\n const safe = sanitizeHtml(restored, {\n allowedTags: [\n ...sanitizeHtml.defaults.allowedTags,\n 'article',\n 'aside',\n 'button',\n 'details',\n 'div',\n 'figure',\n 'figcaption',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'input',\n 'label',\n 'section',\n 'span',\n 'summary',\n 'table',\n 'thead',\n 'tbody',\n 'tr',\n 'th',\n 'td',\n ],\n allowedAttributes: {\n a: ['href', 'title', 'target', 'rel', 'class'],\n aside: ['class'],\n button: ['type', 'class', 'data-copy-code'],\n code: ['class'],\n details: ['class', 'open'],\n div: ['class', 'data-tab-group', 'data-tab-persist'],\n img: ['src', 'alt', 'title', 'width', 'height', 'loading'],\n input: ['type', 'checked', 'disabled'],\n pre: ['class', 'data-code-title'],\n section: ['class', 'data-tab', 'data-tab-title'],\n span: ['class'],\n summary: ['class'],\n table: ['class'],\n '*': ['id', 'aria-label', 'aria-hidden', 'role'],\n },\n allowedSchemes: ['http', 'https', 'mailto'],\n allowProtocolRelative: false,\n disallowedTagsMode: 'escape',\n transformTags: {\n a: (_tagName, attributes) => {\n const external = /^https?:\\/\\//i.test(attributes.href ?? '')\n return {\n tagName: 'a',\n attribs: external\n ? { ...attributes, target: '_blank', rel: 'noopener noreferrer' }\n : attributes,\n }\n },\n img: (_tagName, attributes) => ({\n tagName: 'img',\n attribs: { ...attributes, loading: attributes.loading ?? 'lazy' },\n }),\n },\n })\n\n const { html, headings } = addHeadingIds(safe)\n return {\n frontmatter,\n markdown: body.trim(),\n html,\n text: htmlToText(html),\n headings,\n }\n}\n\nexport function parseFrontmatter(\n source: string,\n file: string,\n): { frontmatter: DocsFrontmatter; body: string } {\n if (!source.startsWith('---\\n') && !source.startsWith('---\\r\\n')) {\n return { frontmatter: {}, body: source }\n }\n const normalized = source.replace(/\\r\\n/g, '\\n')\n const end = normalized.indexOf('\\n---\\n', 4)\n if (end === -1) {\n throw new DocsError(\n `Unclosed front matter in ${file}`,\n 'docs_frontmatter_invalid',\n [{ code: 'frontmatter_unclosed', message: 'Expected a closing --- line', file, line: 1 }],\n )\n }\n\n let value: unknown\n try {\n value = parseYaml(normalized.slice(4, end), { maxAliasCount: 20 })\n } catch (error) {\n throw new DocsError(\n `Invalid front matter in ${file}: ${errorMessage(error)}`,\n 'docs_frontmatter_invalid',\n [{ code: 'frontmatter_yaml', message: errorMessage(error), file, line: 1 }],\n )\n }\n if (value === null) value = {}\n if (typeof value !== 'object' || Array.isArray(value)) {\n throw new DocsError(\n `Front matter must be a mapping in ${file}`,\n 'docs_frontmatter_invalid',\n [{ code: 'frontmatter_shape', message: 'Expected key/value front matter', file, line: 1 }],\n )\n }\n const raw = value as Record<string, unknown>\n const frontmatter: DocsFrontmatter = {}\n for (const key of ['title', 'description', 'slug'] as const) {\n if (raw[key] !== undefined && typeof raw[key] !== 'string') {\n throw frontmatterTypeError(file, key, 'string')\n }\n if (typeof raw[key] === 'string') frontmatter[key] = raw[key]\n }\n for (const key of ['hidden', 'noindex'] as const) {\n if (raw[key] !== undefined && typeof raw[key] !== 'boolean') {\n throw frontmatterTypeError(file, key, 'boolean')\n }\n if (typeof raw[key] === 'boolean') frontmatter[key] = raw[key]\n }\n return { frontmatter, body: normalized.slice(end + 5) }\n}\n\nfunction replaceComponentBlocks(\n source: string,\n name: ComponentName,\n placeholders: string[],\n): string {\n const pattern = new RegExp(`<${name}(\\\\s[^>]*)?>([\\\\s\\\\S]*?)<\\\\/${name}>`, 'g')\n return source.replace(pattern, (_match, attributesRaw: string | undefined, inner: string) => {\n const attributes = parseAttributes(attributesRaw ?? '')\n const innerHtml = String(markdownRenderer.parse(inner.trim(), { gfm: true, breaks: false }))\n const html = renderComponent(name, attributes, innerHtml)\n const index = placeholders.push(html) - 1\n return `\\n\\n@@DEEPSPACE_COMPONENT_${index}@@\\n\\n`\n })\n}\n\nfunction renderComponent(\n name: ComponentName,\n attributes: Record<string, string>,\n innerHtml: string,\n): string {\n const title = escapeHtml(attributes.title ?? attributes.label ?? '')\n switch (name) {\n case 'Note':\n case 'Tip':\n case 'Warning':\n case 'Info':\n return `<aside class=\"docs-callout docs-callout-${name.toLowerCase()}\">` +\n `${title ? `<strong>${title}</strong>` : `<strong>${name}</strong>`}${innerHtml}</aside>`\n case 'Card': {\n const href = safeHref(attributes.href)\n const content = `${title ? `<strong>${title}</strong>` : ''}${innerHtml}`\n return href\n ? `<a class=\"docs-card\" href=\"${escapeHtml(href)}\">${content}<span aria-hidden=\"true\">→</span></a>`\n : `<div class=\"docs-card\">${content}</div>`\n }\n case 'Accordion':\n return `<details class=\"docs-accordion\"><summary>${title || 'Details'}</summary>${innerHtml}</details>`\n case 'AccordionGroup':\n return `<div class=\"docs-accordion-group\">${innerHtml}</div>`\n case 'Step':\n return `<section class=\"docs-step\">${title ? `<h3>${title}</h3>` : ''}${innerHtml}</section>`\n case 'Steps':\n return `<div class=\"docs-steps\">${innerHtml}</div>`\n case 'Tab':\n return `<section class=\"docs-tab\" data-tab data-tab-title=\"${title || 'Tab'}\">${innerHtml}</section>`\n case 'Tabs':\n return `<div class=\"docs-tabs\" data-tab-group>${innerHtml}</div>`\n case 'CodeGroup':\n return `<div class=\"docs-code-group\" data-code-group-pending data-code-group-title=\"${title}\">${innerHtml}</div>`\n }\n}\n\nfunction renderCodeGroup(innerHtml: string, title: string): string {\n const blocks = [...innerHtml.matchAll(/<pre([^>]*)>([\\s\\S]*?)<\\/pre>/g)]\n if (blocks.length === 0) {\n return `<div class=\"docs-code-group\">${title ? `<div class=\"docs-code-group-title\">${title}</div>` : ''}${innerHtml}</div>`\n }\n const tabs = blocks.map((match, index) => {\n const attributes = match[1] ?? ''\n const explicit = attributes.match(/\\sdata-code-title=\"([^\"]+)\"/)?.[1]\n const language = match[2]?.match(/class=\"language-([^\\s\"]+)/)?.[1]\n const label = explicit ?? codeLanguageLabel(language) ?? `Example ${index + 1}`\n return `<section class=\"docs-code-tab\" data-tab data-tab-title=\"${escapeHtml(label)}\"><pre${attributes}>${match[2]}</pre></section>`\n }).join('')\n return `<div class=\"docs-code-group\" data-tab-group data-tab-persist=\"code\">${title ? `<div class=\"docs-code-group-title\">${title}</div>` : ''}${tabs}</div>`\n}\n\nfunction parseCodeFenceInfo(value: string | undefined): { language?: string; title?: string } {\n const raw = value?.trim() ?? ''\n if (!raw) return {}\n const language = raw.split(/\\s+/, 1)[0]?.toLowerCase()\n const metadata = raw.slice(language?.length ?? 0).trim()\n const quotedTitle = metadata.match(/(?:^|\\s)title=(?:\"([^\"]+)\"|'([^']+)')/i)\n const title = quotedTitle?.[1] ?? quotedTitle?.[2] ?? (metadata && !metadata.includes('=') ? metadata : undefined)\n return {\n ...(language ? { language } : {}),\n ...(title ? { title: title.trim() } : {}),\n }\n}\n\nfunction codeLanguageLabel(language: string | undefined): string | undefined {\n if (!language) return undefined\n const names: Record<string, string> = {\n bash: 'Shell',\n javascript: 'JavaScript',\n js: 'JavaScript',\n jsx: 'React',\n shell: 'Shell',\n sh: 'Shell',\n ts: 'TypeScript',\n tsx: 'React',\n typescript: 'TypeScript',\n }\n return names[language] ?? language.toUpperCase()\n}\n\nfunction parseAttributes(raw: string): Record<string, string> {\n const attributes: Record<string, string> = {}\n const pattern = /([A-Za-z][A-Za-z0-9_-]*)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g\n for (const match of raw.matchAll(pattern)) {\n attributes[match[1]] = match[2] ?? match[3] ?? ''\n }\n return attributes\n}\n\nfunction validateExecutableMdx(body: string, file: string): void {\n const validationBody = stripCodeForValidation(body)\n const lines = validationBody.split('\\n')\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index]\n if (/^\\s*(?:import|export)\\s/.test(line)) {\n throw new DocsError(\n `Executable MDX is not supported in ${file}:${index + 1}`,\n 'docs_mdx_unsafe',\n [{\n code: 'mdx_module_syntax',\n message: 'Use the built-in docs component vocabulary instead of import/export',\n file,\n line: index + 1,\n }],\n )\n }\n if (/<[A-Za-z][^>]*\\son[A-Za-z]+\\s*=/.test(line) || /<script\\b/i.test(line)) {\n throw new DocsError(\n `Active HTML is not supported in ${file}:${index + 1}`,\n 'docs_mdx_unsafe',\n [{\n code: 'active_html',\n message: 'Scripts and inline event handlers are prohibited',\n file,\n line: index + 1,\n }],\n )\n }\n if (/<[A-Z][A-Za-z0-9]*[^>]*=\\s*\\{/.test(line)) {\n throw new DocsError(\n `JSX expressions are not supported in ${file}:${index + 1}`,\n 'docs_mdx_unsafe',\n [{\n code: 'jsx_expression',\n message: 'Component attributes must use quoted string values',\n file,\n line: index + 1,\n }],\n )\n }\n }\n\n const componentPattern = /<\\/?([A-Z][A-Za-z0-9]*)\\b/g\n for (const match of validationBody.matchAll(componentPattern)) {\n if (!COMPONENT_NAMES.includes(match[1] as ComponentName)) {\n const line = validationBody.slice(0, match.index).split('\\n').length\n throw new DocsError(\n `Unknown docs component <${match[1]}> in ${file}:${line}`,\n 'docs_mdx_component_unknown',\n [{\n code: 'unknown_component',\n message: `Supported components: ${COMPONENT_NAMES.join(', ')}`,\n file,\n line,\n }],\n )\n }\n }\n}\n\nfunction protectCode(source: string, placeholders: string[]): string {\n const fenced = source.replace(\n /^([ \\t]*)(`{3,}|~{3,})[^\\n]*\\n[\\s\\S]*?^\\1\\2[ \\t]*(?=\\n|$)/gm,\n (block, indentation: string) => {\n const normalized = indentation\n ? block.split('\\n').map((line) => line.startsWith(indentation) ? line.slice(indentation.length) : line).join('\\n')\n : block\n const html = String(markdownRenderer.parse(normalized, { gfm: true, breaks: false }))\n const index = placeholders.push(html) - 1\n return `\\n\\n@@DEEPSPACE_COMPONENT_${index}@@\\n\\n`\n },\n )\n return fenced.replace(/`([^`\\n]+)`/g, (_match, code: string) => {\n const index = placeholders.push(`<code>${escapeHtml(code)}</code>`) - 1\n return `@@DEEPSPACE_COMPONENT_${index}@@`\n })\n}\n\nfunction stripCodeForValidation(source: string): string {\n return source\n .replace(\n /^([ \\t]*)(`{3,}|~{3,})[^\\n]*\\n[\\s\\S]*?^\\1\\2[ \\t]*(?=\\n|$)/gm,\n (block) => block.replace(/[^\\n]/g, ' '),\n )\n .replace(/`[^`\\n]+`/g, (code) => ' '.repeat(code.length))\n}\n\nfunction addHeadingIds(html: string): { html: string; headings: DocsHeading[] } {\n const headings: DocsHeading[] = []\n const slug = createSlugger()\n const output = html.replace(/<h([1-6])>([\\s\\S]*?)<\\/h\\1>/g, (_match, depthRaw, content) => {\n const text = htmlToText(content)\n const id = slug(text)\n const depth = Number(depthRaw)\n headings.push({ depth, id, text })\n return `<h${depth} id=\"${id}\">${content}<a class=\"docs-heading-anchor\" href=\"#${id}\" aria-label=\"Link to ${escapeHtml(text)}\">#</a></h${depth}>`\n })\n return { html: output, headings }\n}\n\nexport { slugify } from './text'\n\nexport function htmlToText(html: string): string {\n return decodeEntities(\n html\n .replace(/<pre[\\s\\S]*?<\\/pre>/g, ' ')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim(),\n )\n}\n\nfunction decodeEntities(value: string): string {\n return value\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n}\n\nfunction safeHref(value: string | undefined): string {\n if (!value) return ''\n if (/^(?:https?:|mailto:|\\/|#)/i.test(value)) return value\n return ''\n}\n\nfunction frontmatterTypeError(file: string, key: string, type: string): DocsError {\n return new DocsError(\n `Front matter ${key} must be a ${type} in ${file}`,\n 'docs_frontmatter_invalid',\n [{ code: 'frontmatter_type', message: `${key} must be a ${type}`, file, line: 1 }],\n )\n}\n","/** Render an unknown failure without unsafe structural assumptions. */\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n}\n\nexport function escapeXml(value: string): string {\n return escapeHtml(value).replace(/&#39;/g, '&apos;')\n}\n\nexport function slugify(value: string): string {\n return value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n}\n\n/** Allocate stable, collision-free ids with the same rules in Markdown and MDX. */\nexport function createSlugger(fallback = 'section'): (value: string) => string {\n const seen = new Map<string, number>()\n return (value) => {\n const base = slugify(value) || fallback\n const count = seen.get(base) ?? 0\n seen.set(base, count + 1)\n return count === 0 ? base : `${base}-${count + 1}`\n }\n}\n","export const DOCS_CONFIG_FILE = 'docs.json'\nexport const DOCS_MANIFEST_VERSION = 1\n\nexport type DocsAssistantAccess = 'disabled' | 'public' | 'authenticated'\nexport type DocsMcpAccess = 'disabled' | 'public'\nexport const DOCS_CONTEXTUAL_ACTIONS = [\n 'copy',\n 'view',\n 'assistant',\n 'chatgpt',\n 'claude',\n 'mcp',\n 'add-mcp',\n 'cursor',\n 'vscode',\n] as const\nexport type DocsContextualAction = (typeof DOCS_CONTEXTUAL_ACTIONS)[number]\nexport const DEFAULT_DOCS_CONTEXTUAL_ACTIONS: readonly DocsContextualAction[] =\n DOCS_CONTEXTUAL_ACTIONS\n\nexport interface DocsFontConfig {\n family: string\n weight?: number | string\n source?: string\n format?: string\n}\n\nexport interface DocsThemeConfig {\n preset?: string\n accent?: string\n background?: string\n backgroundDark?: string\n backgroundDecoration?: 'none' | 'gradient' | 'grid'\n bodyFont?: DocsFontConfig\n headingFont?: DocsFontConfig\n monoFont?: DocsFontConfig\n codeBlockMode?: 'dark' | 'system'\n eyebrowStyle?: 'section' | 'breadcrumbs' | 'none'\n logo?: string\n logoDark?: string\n logoHref?: string\n favicon?: string\n defaultMode?: 'light' | 'dark' | 'system'\n strictMode?: boolean\n}\n\nexport interface DocsLinkConfig {\n label: string\n href: string\n}\n\nexport interface DocsNavGroup {\n group: string\n pages: DocsNavigationItem[]\n}\n\nexport type DocsNavigationItem = string | DocsLinkConfig | DocsNavGroup\n\nexport const DOCS_OPENAPI_SAMPLE_LANGUAGES = ['curl', 'javascript', 'python', 'go'] as const\nexport type DocsOpenApiSampleLanguage = (typeof DOCS_OPENAPI_SAMPLE_LANGUAGES)[number]\nexport type DocsOpenApiSampleDefaults = 'required' | 'all'\n\nexport interface DocsOpenApiExamplesConfig {\n languages: DocsOpenApiSampleLanguage[]\n defaults: DocsOpenApiSampleDefaults\n autogenerate: boolean\n}\n\nexport const DEFAULT_DOCS_OPENAPI_EXAMPLES = {\n languages: ['curl', 'python', 'javascript', 'go'],\n defaults: 'all',\n autogenerate: true,\n} as const satisfies Omit<DocsOpenApiExamplesConfig, 'languages'> & {\n languages: readonly DocsOpenApiSampleLanguage[]\n}\n\nexport interface DocsOpenApiConfig {\n source: string\n route?: string\n label?: string\n playground?: boolean\n baseUrl?: string\n examples?: DocsOpenApiExamplesConfig\n}\n\nexport interface DocsAssistantConfig {\n access: DocsAssistantAccess\n model?: string\n suggestions?: string[]\n}\n\nexport interface DocsMcpConfig {\n access: DocsMcpAccess\n}\n\nexport interface DocsContextualConfig {\n actions: DocsContextualAction[]\n}\n\nexport interface DocsSeoConfig {\n noindex?: boolean\n ogImage?: string\n metaTags?: Record<string, string>\n}\n\nexport interface DocsConfig {\n $schema?: string\n name: string\n description?: string\n source: string\n output: string\n url?: string\n theme: DocsThemeConfig\n navigation?: DocsNavigationItem[]\n links: DocsLinkConfig[]\n footer: DocsLinkConfig[]\n redirects: Record<string, string>\n openapi: DocsOpenApiConfig[]\n assistant: DocsAssistantConfig\n mcp: DocsMcpConfig\n contextual: DocsContextualConfig\n seo: DocsSeoConfig\n}\n\nexport interface DocsFrontmatter {\n title?: string\n description?: string\n slug?: string\n hidden?: boolean\n noindex?: boolean\n}\n\nexport interface DocsHeading {\n depth: number\n id: string\n text: string\n}\n\nexport interface DocsPage {\n sourcePath: string\n relativePath: string\n route: string\n title: string\n description?: string\n hidden: boolean\n noindex: boolean\n markdown: string\n html: string\n text: string\n headings: DocsHeading[]\n sourceFormat: 'markdown' | 'mdx' | 'generated'\n kind: 'page' | 'openapi'\n openapi?: DocsOpenApiOperation\n}\n\nexport interface DocsNavigationPage {\n kind: 'page'\n route: string\n label: string\n}\n\nexport interface DocsNavigationLink {\n kind: 'link'\n href: string\n label: string\n}\n\nexport interface DocsNavigationGroup {\n kind: 'group'\n label: string\n items: DocsNavigationNode[]\n}\n\nexport type DocsNavigationNode = DocsNavigationPage | DocsNavigationLink | DocsNavigationGroup\n\nexport interface DocsOpenApiParameter {\n name: string\n in: string\n required: boolean\n description?: string\n schema?: unknown\n example?: unknown\n}\n\nexport interface DocsOpenApiResponse {\n status: string\n description: string\n schema?: unknown\n}\n\nexport interface DocsOpenApiCodeSample {\n language: string\n label: string\n syntax: string\n code: string\n generated: boolean\n}\n\nexport interface DocsOpenApiOperation {\n method: string\n path: string\n operationId: string\n summary: string\n description?: string\n tags: string[]\n parameters: DocsOpenApiParameter[]\n requestBody?: unknown\n responses: DocsOpenApiResponse[]\n security?: unknown\n baseUrl?: string\n playground: boolean\n codeSamples: DocsOpenApiCodeSample[]\n}\n\nexport interface DocsSearchEntry {\n route: string\n title: string\n description?: string\n headings: string[]\n text: string\n}\n\nexport interface DocsAssistantChunk {\n id: string\n route: string\n title: string\n heading?: string\n text: string\n}\n\nexport interface DocsGraph {\n config: DocsConfig\n pages: DocsPage[]\n navigation: DocsNavigationNode[]\n sourceHash: string\n}\n\nexport interface DocsBuildManifest {\n version: typeof DOCS_MANIFEST_VERSION\n sourceHash: string\n outputHash: string\n name: string\n pageCount: number\n routes: string[]\n assistant: DocsAssistantConfig\n mcp: DocsMcpConfig\n}\n\nexport interface DocsDiagnostic {\n code: string\n message: string\n file?: string\n line?: number\n}\n\nexport interface DocsValidationResult {\n appDir: string\n configPath: string\n sourceDir: string\n outputDir: string\n graph: DocsGraph\n warnings: DocsDiagnostic[]\n}\n\nexport interface DocsBuildResult extends DocsValidationResult {\n manifest: DocsBuildManifest\n files: string[]\n}\n\nexport interface DocsRuntimePageLink {\n route: string\n title: string\n}\n\nexport interface DocsRuntimePage {\n route: string\n title: string\n description?: string\n html: string\n headings: DocsHeading[]\n kind: DocsPage['kind']\n markdownUrl: string\n openapi?: DocsOpenApiOperation\n}\n\nexport interface DocsRuntimeData {\n config: Pick<\n DocsConfig,\n 'name' | 'description' | 'theme' | 'links' | 'footer' | 'assistant' | 'mcp' | 'contextual'\n >\n page: DocsRuntimePage\n navigation: DocsNavigationNode[]\n breadcrumbs: string[]\n previous?: DocsRuntimePageLink\n next?: DocsRuntimePageLink\n}\n\nexport type DocsRuntimeRouteData = Omit<DocsRuntimeData, 'config' | 'navigation'>\n\n/** Small per-route payload used by the hydrated docs router. */\nexport interface DocsRuntimeRouteDocument {\n canonical: string | null\n data: DocsRuntimeRouteData\n description: string | null\n openGraph: Record<'og:title' | 'og:description' | 'og:url', string | null>\n robots: string | null\n title: string\n}\n\nexport class DocsError extends Error {\n readonly code: string\n readonly diagnostics: DocsDiagnostic[]\n\n constructor(message: string, code: string, diagnostics: DocsDiagnostic[] = []) {\n super(message)\n this.name = 'DocsError'\n this.code = code\n this.diagnostics = diagnostics\n }\n}\n","import { DocsError } from './types'\n\n/** Normalize and validate every public documentation route in one place. */\nexport function normalizeRoute(value: string): string {\n assertSafeRoute(value)\n let route = `/${value}`.replace(/\\/{2,}/g, '/')\n if (route.length > 1) route = route.replace(/\\/$/, '')\n route = route.replace(/\\.(?:md|mdx)$/i, '')\n route = route.replace(/\\/index$/i, '')\n return route || '/'\n}\n\nexport function routeFromRelativePath(relativePath: string): string {\n let path = relativePath.replace(/\\.(?:md|mdx)$/i, '')\n if (path === 'index') path = ''\n else path = path.replace(/\\/index$/i, '')\n return normalizeRoute(path)\n}\n\n/** Canonical public Markdown projection for a page route. */\nexport function markdownUrlForRoute(route: string): string {\n return route === '/' ? '/index.md' : `${normalizeRoute(route)}.md`\n}\n\n/** Deterministic build artifact paths for one canonical page route. */\nexport function artifactPathsForRoute(route: string): {\n data: string\n html: string\n markdown: string\n} {\n const clean = normalizeRoute(route).replace(/^\\//, '')\n return clean\n ? {\n data: `data/${clean}.json`,\n html: `${clean}/index.html`,\n markdown: `${clean}.md`,\n }\n : {\n data: 'data/index.json',\n html: 'index.html',\n markdown: 'index.md',\n }\n}\n\nexport function routeArtifactId(route: string): string {\n return route === '/'\n ? 'index'\n : normalizeRoute(route).replace(/^\\//, '').replace(/[^a-z0-9]+/gi, '-')\n}\n\nexport function joinSiteUrl(base: string, route: string): string {\n const path = route.startsWith('/') ? route : `/${route}`\n return `${base.replace(/\\/$/, '')}${path}`\n}\n\nfunction assertSafeRoute(value: string): void {\n if (value.includes('\\\\') || value.includes('\\0')) throw unsafeRoute(value)\n\n let decoded = value\n for (let pass = 0; pass < 5; pass++) {\n let next: string\n try {\n next = decodeURIComponent(decoded)\n } catch {\n throw unsafeRoute(value)\n }\n if (next === decoded) break\n decoded = next\n }\n if (\n decoded.includes('\\\\') ||\n decoded.includes('\\0') ||\n decoded.split('/').some((segment) => segment === '.' || segment === '..')\n ) throw unsafeRoute(value)\n}\n\nfunction unsafeRoute(value: string): DocsError {\n return new DocsError(\n `Documentation route contains an unsafe path segment: ${value}`,\n 'docs_route_invalid',\n [{ code: 'route_path_escape', message: value }],\n )\n}\n","import { htmlToText } from './markdown'\nimport {\n joinSiteUrl,\n markdownUrlForRoute,\n routeArtifactId,\n} from './routing'\nimport { escapeXml } from './text'\nimport type {\n DocsAssistantChunk,\n DocsNavigationNode,\n DocsPage,\n DocsSearchEntry,\n} from './types'\n\nexport function pageMarkdown(page: DocsPage): string {\n const title = `# ${page.title}`\n const body = page.markdown.replace(/^#\\s+[^\\n]+\\n?/, '').trim()\n return `${title}\\n${page.description ? `\\n${page.description}\\n` : ''}${body ? `\\n${body}\\n` : '\\n'}`\n}\n\nexport function createSearchEntries(pages: DocsPage[]): DocsSearchEntry[] {\n return pages\n .filter((page) => !page.hidden)\n .map((page) => ({\n route: page.route,\n title: page.title,\n ...(page.description ? { description: page.description } : {}),\n headings: page.headings.filter((heading) => heading.depth > 1).map((heading) => heading.text),\n text: page.text.slice(0, 12_000),\n }))\n}\n\nexport function createAssistantChunks(pages: DocsPage[]): DocsAssistantChunk[] {\n return pages.flatMap((page) => {\n if (page.hidden) return []\n const chunks: DocsAssistantChunk[] = []\n let index = 0\n const sections = page.html.split(/(?=<h[23]\\b)/)\n for (const section of sections) {\n const headingMatch = section.match(/^<h[23] id=\"([^\"]+)\">/)\n const heading = headingMatch\n ? page.headings.find((candidate) => candidate.id === headingMatch[1])\n : undefined\n const route = heading ? `${page.route}#${heading.id}` : page.route\n const paragraphs = htmlToText(section).split(/(?<=[.!?])\\s+(?=[A-Z0-9])/)\n let current = ''\n const flush = (): void => {\n const text = current.trim()\n if (!text) return\n chunks.push({\n id: `${routeArtifactId(page.route)}:${index++}`,\n route,\n title: page.title,\n ...(heading ? { heading: heading.text } : {}),\n text,\n })\n current = ''\n }\n for (const paragraph of paragraphs) {\n if (current.length + paragraph.length > 1_800) flush()\n current += `${current ? ' ' : ''}${paragraph}`\n }\n flush()\n }\n return chunks\n })\n}\n\nexport function pagesInNavigationOrder(\n pages: DocsPage[],\n navigation: DocsNavigationNode[],\n): DocsPage[] {\n const byRoute = new Map(pages.map((page) => [page.route, page]))\n const ordered: DocsPage[] = []\n const seen = new Set<string>()\n const visit = (nodes: DocsNavigationNode[]): void => {\n for (const node of nodes) {\n if (node.kind === 'group') {\n visit(node.items)\n continue\n }\n if (node.kind !== 'page' || seen.has(node.route)) continue\n const page = byRoute.get(node.route)\n if (page) ordered.push(page)\n seen.add(node.route)\n }\n }\n visit(navigation)\n for (const page of pages) {\n if (!seen.has(page.route)) ordered.push(page)\n }\n return ordered\n}\n\nexport function renderLlmsIndex(pages: DocsPage[], name: string): string {\n const lines = [`# ${name}`, '', '> Documentation index generated by DeepSpace Docs.', '']\n for (const page of pages.filter((candidate) => !candidate.hidden)) {\n lines.push(\n `- [${page.title}](${markdownUrlForRoute(page.route)})` +\n `${page.description ? `: ${page.description}` : ''}`,\n )\n }\n return `${lines.join('\\n')}\\n`\n}\n\nexport function renderLlmsFull(pages: DocsPage[], name: string): string {\n return `# ${name}\\n\\n${pages\n .filter((page) => !page.hidden)\n .map((page) => `${pageMarkdown(page).trim()}\\n\\nSource: ${page.route}`)\n .join('\\n\\n---\\n\\n')}\\n`\n}\n\nexport function renderSitemap(pages: DocsPage[], baseUrl: string | undefined): string {\n const urls = baseUrl\n ? pages\n .filter((page) => !page.hidden && !page.noindex)\n .map((page) => ` <url><loc>${escapeXml(joinSiteUrl(baseUrl, page.route))}</loc></url>`)\n .join('\\n')\n : ''\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n${urls}${urls ? '\\n' : ''}</urlset>\\n`\n}\n\nexport function renderRobots(baseUrl: string | undefined, noindex: boolean | undefined): string {\n if (noindex) return 'User-agent: *\\nDisallow: /\\n'\n return `User-agent: *\\nAllow: /\\n${baseUrl ? `Sitemap: ${joinSiteUrl(baseUrl, '/sitemap.xml')}\\n` : ''}`\n}\n\nexport function stableJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`\n}\n","import { createHash } from 'node:crypto'\nimport { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { basename, dirname, extname, join, posix, relative, resolve, sep } from 'node:path'\nimport { loadDocsConfig, type LoadedDocsConfig } from './config'\nimport { parseMarkdown, slugify } from './markdown'\nimport { parseMdx } from './mdx'\nimport { operationMarkdown, parseOpenApi } from './openapi'\nimport { normalizeRoute, routeFromRelativePath } from './routing'\nimport {\n DocsError,\n type DocsConfig,\n type DocsDiagnostic,\n type DocsGraph,\n type DocsNavigationItem,\n type DocsNavigationNode,\n type DocsPage,\n type DocsValidationResult,\n} from './types'\n\nexport function validateDocs(appDir: string): DocsValidationResult {\n const loaded = loadDocsConfig(appDir)\n if (!existsSync(loaded.sourceDir)) {\n throw new DocsError(\n `Documentation source directory not found: ${loaded.config.source}`,\n 'docs_source_missing',\n [{ code: 'source_missing', message: loaded.config.source, file: loaded.sourceDir }],\n )\n }\n const warnings: DocsDiagnostic[] = [...loaded.warnings]\n const contentFiles = collectContentFiles(loaded.sourceDir)\n const sourceFiles = contentFiles.filter((path) => ['.md', '.mdx'].includes(extname(path).toLowerCase()))\n if (sourceFiles.length === 0 && loaded.config.openapi.length === 0) {\n throw new DocsError(\n `No .md or .mdx pages found in ${loaded.config.source}`,\n 'docs_pages_missing',\n [{ code: 'pages_missing', message: loaded.config.source, file: loaded.sourceDir }],\n )\n }\n\n const pages = sourceFiles.map((sourcePath) => pageFromSource(loaded, sourcePath))\n const openApiHashes: string[] = []\n const openApiGroups: DocsNavigationNode[] = []\n for (const openapiConfig of loaded.config.openapi) {\n const api = parseOpenApi(resolve(appDir), openapiConfig)\n openApiHashes.push(api.raw)\n const apiPages = api.operations.map((operation) => {\n const markdown = operationMarkdown(operation)\n const parsed = parseMarkdown(markdown, `${api.sourcePath}#${operation.operationId}`)\n return {\n sourcePath: api.sourcePath,\n relativePath: `${relative(resolve(appDir), api.sourcePath)}#${operation.operationId}`,\n route: joinRoute(api.route, operation.operationId),\n title: operation.summary,\n description: operation.description,\n hidden: false,\n noindex: loaded.config.seo.noindex === true,\n markdown,\n html: parsed.html,\n text: parsed.text,\n headings: parsed.headings,\n sourceFormat: 'generated' as const,\n kind: 'openapi' as const,\n openapi: operation,\n } satisfies DocsPage\n })\n pages.push(...apiPages)\n openApiGroups.push({\n kind: 'group',\n label: api.title,\n items: apiPages.map((page) => ({ kind: 'page', route: page.route, label: page.title })),\n })\n }\n\n assertUniqueRoutes(pages)\n const byRoute = new Map(pages.map((page) => [page.route, page]))\n const navigation = loaded.config.navigation\n ? normalizeNavigation(loaded.config.navigation, byRoute, loaded.config)\n : automaticNavigation(pages.filter((page) => page.kind === 'page'))\n navigation.push(...openApiGroups)\n assertNavigationCoverage(navigation, pages, loaded.config)\n validatePageLinks(pages, byRoute, loaded.config.redirects)\n validateRedirectTargets(loaded.config, byRoute)\n\n const hash = createHash('sha256')\n hash.update(loaded.raw)\n for (const contentPath of contentFiles) {\n hash.update(relative(resolve(appDir), contentPath).split(sep).join('/'))\n hash.update(readFileSync(contentPath))\n }\n for (const raw of openApiHashes) hash.update(raw)\n const graph: DocsGraph = {\n config: loaded.config,\n pages: pages.sort((a, b) => a.route.localeCompare(b.route)),\n navigation,\n sourceHash: hash.digest('hex'),\n }\n return {\n appDir: resolve(appDir),\n configPath: loaded.configPath,\n sourceDir: loaded.sourceDir,\n outputDir: loaded.outputDir,\n graph,\n warnings,\n }\n}\n\nfunction pageFromSource(loaded: LoadedDocsConfig, sourcePath: string): DocsPage {\n const source = readFileSync(sourcePath, 'utf8')\n const relativePath = relative(loaded.sourceDir, sourcePath).split(sep).join('/')\n const rewritten = rewriteLocalReferences(source, relativePath, loaded.sourceDir, sourcePath)\n const sourceFormat = extname(sourcePath).toLowerCase() === '.mdx' ? 'mdx' : 'markdown'\n const parsed = sourceFormat === 'mdx'\n ? parseMdx(rewritten, sourcePath)\n : parseMarkdown(rewritten, sourcePath)\n const route = parsed.frontmatter.slug\n ? normalizeRoute(parsed.frontmatter.slug)\n : routeFromRelativePath(relativePath)\n const title = parsed.frontmatter.title\n ?? parsed.headings.find((heading) => heading.depth === 1)?.text\n ?? titleFromFile(relativePath)\n return {\n sourcePath,\n relativePath,\n route,\n title,\n description: parsed.frontmatter.description,\n hidden: parsed.frontmatter.hidden === true,\n noindex: loaded.config.seo.noindex === true || parsed.frontmatter.noindex === true,\n markdown: parsed.markdown,\n html: parsed.html,\n text: parsed.text,\n headings: parsed.headings,\n sourceFormat,\n kind: 'page',\n }\n}\n\nfunction collectContentFiles(sourceDir: string): string[] {\n const files: string[] = []\n const walk = (directory: string): void => {\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (entry.name.startsWith('.') || entry.name === 'node_modules') continue\n const path = join(directory, entry.name)\n if (entry.isSymbolicLink()) {\n throw new DocsError(\n `Documentation content may not contain symbolic links: ${path}`,\n 'docs_source_unsafe',\n [{ code: 'source_symlink', message: path, file: path }],\n )\n }\n if (entry.isDirectory()) walk(path)\n else if (entry.isFile()) files.push(path)\n }\n }\n walk(sourceDir)\n return files.sort()\n}\n\nfunction normalizeNavigation(\n items: DocsNavigationItem[],\n pages: Map<string, DocsPage>,\n config: DocsConfig,\n): DocsNavigationNode[] {\n return items.map((item): DocsNavigationNode => {\n if (typeof item === 'string') {\n const route = navigationReferenceToRoute(item)\n const page = pages.get(route)\n if (!page) {\n throw new DocsError(\n `Navigation references a missing page: ${item}`,\n 'docs_navigation_invalid',\n [{ code: 'navigation_missing_page', message: item }],\n )\n }\n return { kind: 'page', route, label: page.title }\n }\n if ('group' in item) {\n return {\n kind: 'group',\n label: item.group,\n items: normalizeNavigation(item.pages, pages, config),\n }\n }\n if (!isSafeLink(item.href)) {\n throw new DocsError(\n `Unsafe navigation link: ${item.href}`,\n 'docs_navigation_invalid',\n [{ code: 'navigation_unsafe_link', message: item.href }],\n )\n }\n if (item.href.startsWith('/')) {\n const route = normalizeRoute(item.href)\n if (!pages.has(route) && !config.redirects[route]) {\n throw new DocsError(\n `Navigation link points to an unknown internal route: ${item.href}`,\n 'docs_navigation_invalid',\n [{ code: 'navigation_missing_route', message: item.href }],\n )\n }\n return { kind: 'link', href: route, label: item.label }\n }\n return { kind: 'link', href: item.href, label: item.label }\n })\n}\n\nfunction automaticNavigation(pages: DocsPage[]): DocsNavigationNode[] {\n return pages\n .filter((page) => !page.hidden)\n .sort((a, b) => a.route.localeCompare(b.route))\n .map((page) => ({ kind: 'page', route: page.route, label: page.title }))\n}\n\nfunction assertNavigationCoverage(\n navigation: DocsNavigationNode[],\n pages: DocsPage[],\n config: DocsConfig,\n): void {\n if (!config.navigation) return\n const routes = new Set<string>()\n const visit = (nodes: DocsNavigationNode[]): void => {\n for (const node of nodes) {\n if (node.kind === 'page') routes.add(node.route)\n else if (node.kind === 'group') visit(node.items)\n }\n }\n visit(navigation)\n const orphaned = pages.filter((page) => page.kind === 'page' && !page.hidden && !routes.has(page.route))\n if (orphaned.length > 0) {\n throw new DocsError(\n `${orphaned.length} public page(s) are missing from navigation`,\n 'docs_navigation_incomplete',\n orphaned.map((page) => ({\n code: 'navigation_orphan',\n message: page.route,\n file: page.sourcePath,\n })),\n )\n }\n}\n\nfunction validatePageLinks(\n pages: DocsPage[],\n byRoute: Map<string, DocsPage>,\n redirects: Record<string, string>,\n): void {\n const diagnostics: DocsDiagnostic[] = []\n for (const page of pages) {\n if (page.kind !== 'page') continue\n const pattern = /(!?)\\[[^\\]]*\\]\\(([^)\\s]+)(?:\\s+[\"'][^\"']*[\"'])?\\)/g\n for (const match of page.markdown.matchAll(pattern)) {\n const isImage = match[1] === '!'\n const href = match[2]\n if (isImage || href.startsWith('/_docs/media/')) continue\n if (/^(?:https?:|mailto:|#|data:)/i.test(href)) continue\n const routePart = href.split('#')[0].split('?')[0]\n if (!routePart) continue\n const target = routePart.startsWith('/')\n ? normalizeRoute(routePart)\n : normalizeRoute(posix.join(dirname(page.route), routePart))\n const normalized = navigationReferenceToRoute(target)\n if (!byRoute.has(normalized) && !redirects[normalized]) {\n diagnostics.push({\n code: 'broken_internal_link',\n message: `${href} resolves to ${normalized}`,\n file: page.sourcePath,\n line: page.markdown.slice(0, match.index).split('\\n').length,\n })\n }\n }\n }\n if (diagnostics.length > 0) {\n throw new DocsError(\n `${diagnostics.length} broken internal documentation link(s)`,\n 'docs_links_invalid',\n diagnostics,\n )\n }\n}\n\nexport function rewriteLocalReferences(\n source: string,\n relativePath: string,\n sourceDir: string,\n sourcePath: string,\n): string {\n const pageDirectory = posix.dirname(relativePath)\n return source.replace(\n /(!?)\\[([^\\]]*)\\]\\(([^)\\s]+)((?:\\s+[\"'][^\"']*[\"'])?)\\)/g,\n (match, imageMarker: string, label: string, href: string, title: string) => {\n if (/^(?:https?:|mailto:|data:|#)/i.test(href)) return match\n const [pathPart, suffix = ''] = href.split(/(?=[?#])/)\n if (!pathPart) return match\n const relativeTarget = pathPart.startsWith('/')\n ? pathPart.replace(/^\\//, '')\n : posix.normalize(posix.join(pageDirectory, pathPart))\n if (relativeTarget === '..' || relativeTarget.startsWith('../')) {\n throw new DocsError(\n `Documentation reference escapes the source directory: ${href}`,\n 'docs_link_unsafe',\n [{ code: 'link_path_escape', message: href, file: sourcePath }],\n )\n }\n const absoluteTarget = resolve(sourceDir, relativeTarget)\n if (imageMarker === '!') {\n if (!existsSync(absoluteTarget)) {\n throw new DocsError(\n `Documentation image not found: ${href}`,\n 'docs_asset_missing',\n [{ code: 'asset_missing', message: href, file: sourcePath }],\n )\n }\n return `![${label}](/_docs/media/${relativeTarget}${suffix}${title})`\n }\n if (/\\.(?:md|mdx)$/i.test(relativeTarget)) {\n return `[${label}](${routeFromRelativePath(relativeTarget)}${suffix}${title})`\n }\n const markdownTarget = [\n `${absoluteTarget}.mdx`,\n `${absoluteTarget}.md`,\n join(absoluteTarget, 'index.mdx'),\n join(absoluteTarget, 'index.md'),\n ].find(existsSync)\n if (markdownTarget) {\n const targetRelative = relative(sourceDir, markdownTarget).split(sep).join('/')\n return `[${label}](${routeFromRelativePath(targetRelative)}${suffix}${title})`\n }\n if (existsSync(absoluteTarget)) {\n return `[${label}](/_docs/media/${relativeTarget}${suffix}${title})`\n }\n return match\n },\n )\n}\n\nfunction validateRedirectTargets(config: DocsConfig, byRoute: Map<string, DocsPage>): void {\n for (const [from, to] of Object.entries(config.redirects)) {\n const normalizedFrom = normalizeRoute(from)\n if (byRoute.has(normalizedFrom)) {\n throw new DocsError(\n `Redirect source collides with a page: ${from}`,\n 'docs_redirect_invalid',\n [{ code: 'redirect_page_collision', message: from }],\n )\n }\n const finalTarget = followRedirects(to, config.redirects)\n if (!byRoute.has(normalizeRoute(finalTarget))) {\n throw new DocsError(\n `Redirect target does not exist: ${from} -> ${to}`,\n 'docs_redirect_invalid',\n [{ code: 'redirect_missing_target', message: `${from} -> ${to}` }],\n )\n }\n }\n}\n\nfunction followRedirects(route: string, redirects: Record<string, string>): string {\n let cursor = route\n const seen = new Set<string>()\n while (redirects[cursor] && !seen.has(cursor)) {\n seen.add(cursor)\n cursor = redirects[cursor]\n }\n return cursor\n}\n\nfunction assertUniqueRoutes(pages: DocsPage[]): void {\n const seen = new Map<string, DocsPage>()\n for (const page of pages) {\n const existing = seen.get(page.route)\n if (existing) {\n throw new DocsError(\n `Multiple documentation pages resolve to ${page.route}`,\n 'docs_route_collision',\n [existing, page].map((candidate) => ({\n code: 'route_collision',\n message: candidate.route,\n file: candidate.sourcePath,\n })),\n )\n }\n if (page.route.startsWith('/_docs') || page.route.startsWith('/api/')) {\n throw new DocsError(\n `Documentation route uses a reserved prefix: ${page.route}`,\n 'docs_route_reserved',\n [{ code: 'reserved_route', message: page.route, file: page.sourcePath }],\n )\n }\n seen.set(page.route, page)\n }\n}\n\nfunction navigationReferenceToRoute(value: string): string {\n return normalizeRoute(value)\n}\n\nfunction titleFromFile(relativePath: string): string {\n const stem = basename(relativePath, extname(relativePath))\n const candidate = stem.toLowerCase() === 'index' ? basename(dirname(relativePath)) : stem\n if (!candidate || candidate === '.') return 'Overview'\n return candidate.split(/[-_]/).filter(Boolean).map(capitalize).join(' ')\n}\n\nfunction capitalize(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1)\n}\n\nfunction joinRoute(left: string, right: string): string {\n return normalizeRoute(`${left}/${slugify(right)}`)\n}\n\nfunction isSafeLink(value: string): boolean {\n return /^(?:https?:\\/\\/|mailto:|\\/|#)/i.test(value)\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { z } from 'zod'\nimport {\n getDeepSpaceAIModel,\n listDeepSpaceAgentModels,\n resolveDeepSpaceAgentModel,\n} from '../shared/ai-models'\nimport {\n DOCS_CONFIG_FILE,\n DEFAULT_DOCS_OPENAPI_EXAMPLES,\n DocsError,\n type DocsConfig,\n type DocsDiagnostic,\n type DocsNavigationItem,\n type DocsOpenApiConfig,\n} from './types'\nimport { RAW_CONFIG_KEYS, openapiItemSchema, rawConfigSchema } from './config/schema'\nimport {\n humanize,\n isWithin,\n safeChildPath,\n validateLinks,\n validateRedirects,\n} from './config/validation'\nimport { errorMessage } from './text'\n\nexport interface LoadedDocsConfig {\n config: DocsConfig\n configPath: string\n sourceDir: string\n outputDir: string\n raw: string\n warnings: DocsDiagnostic[]\n}\n\nexport function loadDocsConfig(appDir: string): LoadedDocsConfig {\n const resolvedAppDir = resolve(appDir)\n const configPath = resolve(resolvedAppDir, DOCS_CONFIG_FILE)\n if (!existsSync(configPath)) {\n throw new DocsError(\n `No ${DOCS_CONFIG_FILE} found in ${resolvedAppDir}`,\n 'docs_config_missing',\n [{ code: 'docs_config_missing', message: `Create ${DOCS_CONFIG_FILE}`, file: configPath }],\n )\n }\n\n const raw = readFileSync(configPath, 'utf8')\n let input: unknown\n try {\n input = JSON.parse(raw)\n } catch (error) {\n throw new DocsError(\n `${DOCS_CONFIG_FILE} is not valid JSON: ${errorMessage(error)}`,\n 'docs_config_invalid',\n [{ code: 'invalid_json', message: errorMessage(error), file: configPath }],\n )\n }\n\n const parsed = rawConfigSchema.safeParse(input)\n if (!parsed.success) {\n const diagnostics = parsed.error.issues.map((issue) => ({\n code: 'invalid_config_value',\n message: `${issue.path.join('.') || '<root>'}: ${issue.message}`,\n file: configPath,\n }))\n throw new DocsError(\n `${DOCS_CONFIG_FILE} has ${diagnostics.length} validation error(s)`,\n 'docs_config_invalid',\n diagnostics,\n )\n }\n\n const data = parsed.data\n if (\n data.assistant.model !== undefined &&\n !resolveDeepSpaceAgentModel(data.assistant.model, 'documentation')\n ) {\n const catalogModel = getDeepSpaceAIModel(data.assistant.model)\n const reason = catalogModel\n ? `does not support the multi-step documentation agent (${catalogModel.note ?? 'incompatible runtime contract'})`\n : 'is not in the DeepSpace model catalog'\n const supported = listDeepSpaceAgentModels('documentation')\n .map((model) => model.id)\n .join(', ')\n throw new DocsError(\n `${DOCS_CONFIG_FILE} has an unsupported assistant model`,\n 'docs_config_invalid',\n [\n {\n code: 'unsupported_assistant_model',\n message: `assistant.model '${data.assistant.model}' ${reason}. Supported models: ${supported}`,\n file: configPath,\n },\n ],\n )\n }\n const warnings: DocsDiagnostic[] = []\n if (input && typeof input === 'object' && !Array.isArray(input)) {\n for (const key of Object.keys(input)) {\n if (!RAW_CONFIG_KEYS.has(key)) {\n warnings.push({\n code: 'unsupported_config_key',\n message: `Unsupported Mintlify configuration key '${key}' was ignored`,\n file: configPath,\n })\n }\n }\n }\n const themeInput = typeof data.theme === 'string' ? { preset: data.theme } : data.theme\n if (typeof data.theme === 'string') {\n warnings.push({\n code: 'mintlify_theme_normalized',\n message: `Mintlify theme '${data.theme}' is mapped to the native Orbit surface`,\n file: configPath,\n })\n }\n const logo = typeof data.logo === 'string' ? { light: data.logo } : data.logo\n const background = data.background?.color\n const bodyFont =\n data.fonts?.body ?? (data.fonts?.family ? { family: data.fonts.family } : undefined)\n const headingFont = data.fonts?.heading ?? bodyFont\n const monoFont = data.fonts?.mono\n const navigation = Array.isArray(data.navigation) ? data.navigation : data.navigation?.groups\n if (data.navigation && !Array.isArray(data.navigation)) {\n warnings.push({\n code: 'mintlify_navigation_normalized',\n message: 'Mintlify navigation.groups was normalized to native navigation',\n file: configPath,\n })\n }\n const navbarLinks = [\n ...(data.navbar?.links ?? []),\n ...(data.navbar?.primary\n ? [{ label: data.navbar.primary.label, href: data.navbar.primary.href }]\n : []),\n ]\n const footer = Array.isArray(data.footer)\n ? data.footer\n : Object.entries(data.footer.socials ?? {}).map(([label, href]) => ({\n label: humanize(label),\n href,\n }))\n const config: DocsConfig = {\n $schema: data.$schema,\n name: data.name,\n description: data.description,\n source: data.source,\n output: data.output,\n url: data.url,\n theme: {\n ...themeInput,\n accent: themeInput.accent ?? data.colors?.primary ?? data.colors?.light ?? data.colors?.dark,\n background: background?.light ?? themeInput.background,\n backgroundDark: background && 'dark' in background ? background.dark : undefined,\n backgroundDecoration: data.background?.decoration,\n bodyFont,\n headingFont,\n monoFont,\n codeBlockMode: data.styling?.codeblocks,\n eyebrowStyle: data.styling?.eyebrows,\n logo: themeInput.logo ?? logo?.light,\n logoDark: themeInput.logoDark ?? logo?.dark,\n logoHref: logo?.href,\n favicon: themeInput.favicon ?? data.favicon,\n defaultMode: data.appearance?.default ?? themeInput.defaultMode,\n strictMode: data.appearance?.strict,\n },\n navigation: navigation as DocsNavigationItem[] | undefined,\n links: data.links.length > 0 ? data.links : navbarLinks,\n footer,\n redirects: data.redirects,\n openapi: normalizeOpenApi(data.openapi, data.api) as DocsOpenApiConfig[],\n assistant: data.assistant,\n mcp: data.mcp,\n contextual: data.contextual,\n seo: {\n ...(data.seo.noindex === undefined ? {} : { noindex: data.seo.noindex }),\n ...(data.seo.ogImage ? { ogImage: data.seo.ogImage } : {}),\n ...((data.seo.metaTags ?? data.seo.metatags)\n ? { metaTags: data.seo.metaTags ?? data.seo.metatags }\n : {}),\n },\n }\n validateRedirects(config.redirects, configPath)\n validateLinks(config.links, 'links', configPath)\n validateLinks(config.footer, 'footer', configPath)\n if (config.theme.logoHref) {\n validateLinks([{ label: 'logo', href: config.theme.logoHref }], 'logo.href', configPath)\n }\n\n const sourceDir = safeChildPath(resolvedAppDir, config.source, 'source', configPath)\n const outputDir = safeChildPath(resolvedAppDir, config.output, 'output', configPath)\n if (sourceDir === outputDir || isWithin(sourceDir, outputDir)) {\n throw new DocsError(\n 'docs.json output must not contain the documentation source directory',\n 'docs_path_collision',\n [\n {\n code: 'docs_path_collision',\n message: `source=${config.source}, output=${config.output}`,\n file: configPath,\n },\n ],\n )\n }\n\n config.theme = {\n ...config.theme,\n ...(config.theme.logo ? { logo: normalizeLocalAsset(config.theme.logo, sourceDir) } : {}),\n ...(config.theme.logoDark\n ? { logoDark: normalizeLocalAsset(config.theme.logoDark, sourceDir) }\n : {}),\n ...(config.theme.favicon\n ? { favicon: normalizeLocalAsset(config.theme.favicon, sourceDir) }\n : {}),\n ...(config.theme.bodyFont?.source\n ? {\n bodyFont: {\n ...config.theme.bodyFont,\n source: normalizeLocalAsset(config.theme.bodyFont.source, sourceDir),\n },\n }\n : {}),\n ...(config.theme.headingFont?.source\n ? {\n headingFont: {\n ...config.theme.headingFont,\n source: normalizeLocalAsset(config.theme.headingFont.source, sourceDir),\n },\n }\n : {}),\n ...(config.theme.monoFont?.source\n ? {\n monoFont: {\n ...config.theme.monoFont,\n source: normalizeLocalAsset(config.theme.monoFont.source, sourceDir),\n },\n }\n : {}),\n }\n if (config.seo.ogImage) {\n config.seo = {\n ...config.seo,\n ogImage: normalizeLocalAsset(config.seo.ogImage, sourceDir),\n }\n }\n\n return { config, configPath, sourceDir, outputDir, raw, warnings }\n}\n\nfunction normalizeLocalAsset(value: string, sourceDir: string): string {\n if (/^(?:https?:|data:|\\/\\/_docs\\/)/i.test(value)) return value\n const relativePath = value.replace(/^\\.\\//, '').replace(/^\\/+/, '')\n if (!relativePath || !existsSync(resolve(sourceDir, relativePath))) return value\n return `/_docs/media/${relativePath.split('\\\\').join('/')}`\n}\n\nfunction normalizeOpenApi(\n value: z.infer<typeof openapiItemSchema> | Array<z.infer<typeof openapiItemSchema>> | undefined,\n api: z.infer<typeof rawConfigSchema>['api'],\n): Array<z.infer<typeof openapiItemSchema>> {\n if (!value) return []\n const items = Array.isArray(value) ? value : [value]\n return items.map((item) => {\n const localExamples = 'examples' in item ? item.examples : undefined\n const display = api?.playground?.display\n return {\n ...item,\n ...('playground' in item && item.playground !== undefined\n ? { playground: item.playground }\n : display\n ? { playground: display === 'interactive' }\n : {}),\n examples: {\n languages: localExamples?.languages ??\n api?.examples?.languages ?? [...DEFAULT_DOCS_OPENAPI_EXAMPLES.languages],\n defaults: localExamples?.defaults ??\n api?.examples?.defaults ?? DEFAULT_DOCS_OPENAPI_EXAMPLES.defaults,\n autogenerate: localExamples?.autogenerate ??\n api?.examples?.autogenerate ?? DEFAULT_DOCS_OPENAPI_EXAMPLES.autogenerate,\n },\n }\n })\n}\n","/**\n * Canonical DeepSpace model catalog and agent policy.\n *\n * Provider catalogs are discovery inputs, not a safe runtime allowlist: a\n * model is promoted here only after its tool loop, transport, pricing, and\n * streaming contract have been verified end to end through the DeepSpace\n * proxy. Every client picker and server agent profile consumes this module.\n */\n\nexport type DeepSpaceAIProvider = 'anthropic' | 'openai' | 'cerebras'\nexport type DeepSpaceAgentProfileId = 'application' | 'documentation'\nexport type DeepSpaceAgentSupport = 'multi-step' | 'single-step' | 'none'\n\nexport interface DeepSpaceAIModel {\n id: string\n label: string\n provider: DeepSpaceAIProvider\n providerLabel: string\n family: string\n /** Whether the model is eligible for DeepSpace's server-owned agent loop. */\n agentSupport: DeepSpaceAgentSupport\n /** Profiles in which the model has passed the complete runtime contract. */\n agentProfiles: readonly DeepSpaceAgentProfileId[]\n /** Provider transport currently used by the DeepSpace proxy adapter. */\n transport: 'messages' | 'chat-completions'\n recommendation: 'frontier' | 'balanced' | 'fast' | 'available' | 'limited'\n note?: string\n}\n\nexport interface DeepSpaceAgentProfile {\n id: DeepSpaceAgentProfileId\n defaultModel: string\n maxSteps: number\n maxToolCalls?: number\n allowedTools: 'application-defined' | readonly string[]\n}\n\n/**\n * Versioned provenance for the provider catalogs used during the latest\n * promotion review. Keeping this in the shipped artifact makes selection\n * policy auditable without allowing a mutable upstream list to change a\n * deployed app underneath a commit.\n */\nexport const DEEPSPACE_MODEL_CATALOG_PROVENANCE = {\n version: '2026-08-03',\n verifiedAt: '2026-08-03',\n sources: {\n anthropic: 'https://platform.claude.com/docs/en/api/beta/models/list',\n openai: 'https://developers.openai.com/api/docs/models/all',\n cerebras: 'https://inference-docs.cerebras.ai/models/overview',\n },\n} as const\n\nconst MULTI_STEP_AGENT_PROFILES = ['application', 'documentation'] as const\n\ntype MultiStepModelInput = Pick<DeepSpaceAIModel, 'id' | 'label' | 'family' | 'recommendation'>\ntype MultiStepProvider = Pick<DeepSpaceAIModel, 'provider' | 'providerLabel' | 'transport'>\n\nfunction createMultiStepModelFactory<const Provider extends MultiStepProvider>(provider: Provider) {\n return <const Model extends MultiStepModelInput>(model: Model) => ({\n ...model,\n ...provider,\n agentSupport: 'multi-step' as const,\n agentProfiles: MULTI_STEP_AGENT_PROFILES,\n })\n}\n\nconst anthropicModel = createMultiStepModelFactory({\n provider: 'anthropic',\n providerLabel: 'Anthropic',\n transport: 'messages',\n})\n\nconst openAIModel = createMultiStepModelFactory({\n provider: 'openai',\n providerLabel: 'OpenAI',\n transport: 'chat-completions',\n})\n\nexport const DEEPSPACE_AI_MODELS = [\n anthropicModel({\n id: 'claude-fable-5',\n label: 'Claude Fable 5',\n family: 'Claude 5',\n recommendation: 'frontier',\n }),\n anthropicModel({\n id: 'claude-opus-5',\n label: 'Claude Opus 5',\n family: 'Claude 5',\n recommendation: 'frontier',\n }),\n anthropicModel({\n id: 'claude-sonnet-5',\n label: 'Claude Sonnet 5',\n family: 'Claude 5',\n recommendation: 'balanced',\n }),\n anthropicModel({\n id: 'claude-haiku-4-5',\n label: 'Claude Haiku 4.5',\n family: 'Claude 4.5',\n recommendation: 'fast',\n }),\n openAIModel({\n id: 'gpt-5.6-sol',\n label: 'GPT-5.6 Sol',\n family: 'GPT-5.6',\n recommendation: 'frontier',\n }),\n openAIModel({\n id: 'gpt-5.6-terra',\n label: 'GPT-5.6 Terra',\n family: 'GPT-5.6',\n recommendation: 'balanced',\n }),\n openAIModel({\n id: 'gpt-5.6-luna',\n label: 'GPT-5.6 Luna',\n family: 'GPT-5.6',\n recommendation: 'fast',\n }),\n {\n id: 'gpt-oss-120b',\n label: 'GPT-OSS 120B',\n provider: 'cerebras',\n providerLabel: 'Cerebras',\n family: 'GPT-OSS',\n agentSupport: 'single-step',\n agentProfiles: [],\n transport: 'chat-completions',\n recommendation: 'limited',\n note: 'Available for direct generation; the current proxy adapter has not passed multi-step tool-result continuation.',\n },\n] as const satisfies readonly DeepSpaceAIModel[]\n\nexport const DEEPSPACE_AI_DEFAULTS = {\n agent: 'claude-sonnet-5',\n directGeneration: 'claude-sonnet-5',\n summarization: 'claude-haiku-4-5',\n} as const satisfies Record<string, DeepSpaceAIModelId>\n\nexport const DEEPSPACE_AGENT_PROFILES = {\n application: {\n id: 'application',\n defaultModel: DEEPSPACE_AI_DEFAULTS.agent,\n maxSteps: 5,\n allowedTools: 'application-defined',\n },\n documentation: {\n id: 'documentation',\n defaultModel: DEEPSPACE_AI_DEFAULTS.agent,\n // Permit up to twenty completed read-only tools plus one final synthesis\n // step. The runner disables tools once the tool-call budget is exhausted.\n maxSteps: 21,\n maxToolCalls: 20,\n allowedTools: ['docs_search', 'docs_read'],\n },\n} as const satisfies Record<DeepSpaceAgentProfileId, DeepSpaceAgentProfile>\n\nexport type DeepSpaceAIModelId = (typeof DEEPSPACE_AI_MODELS)[number]['id']\n\nexport function getDeepSpaceAIModel(modelId: unknown): DeepSpaceAIModel | null {\n if (typeof modelId !== 'string') return null\n return DEEPSPACE_AI_MODELS.find((model) => model.id === modelId) ?? null\n}\n\nexport function listDeepSpaceAgentModels(\n profileId: DeepSpaceAgentProfileId = 'application',\n): readonly DeepSpaceAIModel[] {\n const defaultModel = DEEPSPACE_AGENT_PROFILES[profileId].defaultModel\n return DEEPSPACE_AI_MODELS.filter((model) =>\n (model.agentProfiles as readonly DeepSpaceAgentProfileId[]).includes(profileId),\n ).sort((left, right) => Number(right.id === defaultModel) - Number(left.id === defaultModel))\n}\n\nexport interface ResolvedDeepSpaceAgentModel {\n modelId: string\n provider: DeepSpaceAIProvider\n model: DeepSpaceAIModel\n profile: DeepSpaceAgentProfile\n}\n\nexport function resolveDeepSpaceAgentModel(\n modelId: unknown,\n profileId: DeepSpaceAgentProfileId = 'application',\n): ResolvedDeepSpaceAgentModel | null {\n const profile = DEEPSPACE_AGENT_PROFILES[profileId]\n const resolvedId = modelId === undefined ? profile.defaultModel : modelId\n const model = getDeepSpaceAIModel(resolvedId)\n if (!model || !model.agentProfiles.includes(profileId)) return null\n return { modelId: model.id, provider: model.provider, model, profile }\n}\n","import { z } from 'zod'\nimport {\n DEFAULT_DOCS_CONTEXTUAL_ACTIONS,\n DOCS_CONTEXTUAL_ACTIONS,\n DOCS_OPENAPI_SAMPLE_LANGUAGES,\n} from '../types'\n\nconst linkSchema = z.object({\n label: z.string().trim().min(1),\n href: z.string().trim().min(1),\n})\n\ntype NavigationInput =\n | string\n | z.infer<typeof linkSchema>\n | {\n group: string\n pages: NavigationInput[]\n }\n\nconst navigationSchema: z.ZodType<NavigationInput> = z.lazy(() =>\n z.union([\n z.string().trim().min(1),\n linkSchema,\n z.object({\n group: z.string().trim().min(1),\n pages: z.array(navigationSchema).min(1),\n }),\n ]),\n)\n\nconst openApiExamplesSchema = z.object({\n languages: z.array(z.enum(DOCS_OPENAPI_SAMPLE_LANGUAGES)).min(1).optional(),\n defaults: z.enum(['required', 'all']).optional(),\n autogenerate: z.boolean().optional(),\n})\n\nexport const openapiItemSchema = z.union([\n z\n .string()\n .trim()\n .min(1)\n .transform((source) => ({ source })),\n z.object({\n source: z.string().trim().min(1),\n route: z.string().trim().optional(),\n label: z.string().trim().min(1).optional(),\n playground: z.boolean().optional(),\n baseUrl: z.string().url().optional(),\n examples: openApiExamplesSchema.optional(),\n }),\n])\n\nconst themeObjectSchema = z.object({\n preset: z.string().trim().min(1).optional(),\n accent: z.string().trim().optional(),\n background: z.string().trim().optional(),\n logo: z.string().trim().optional(),\n logoDark: z.string().trim().optional(),\n favicon: z.string().trim().optional(),\n defaultMode: z.enum(['light', 'dark', 'system']).optional(),\n})\n\nconst fontSpecSchema = z.union([\n z\n .string()\n .trim()\n .min(1)\n .transform((family) => ({ family })),\n z.object({\n family: z.string().trim().min(1),\n weight: z.union([z.number().int().min(100).max(900), z.string().trim().min(1)]).optional(),\n source: z.string().trim().min(1).optional(),\n format: z.string().trim().min(1).optional(),\n }),\n])\n\nconst colorPairSchema = z.union([\n z\n .string()\n .trim()\n .min(1)\n .transform((color) => ({ light: color })),\n z.object({\n light: z.string().trim().min(1).optional(),\n dark: z.string().trim().min(1).optional(),\n }),\n])\n\nconst navigationRootSchema = z.union([\n z.array(navigationSchema),\n z.object({\n groups: z.array(\n z.object({\n group: z.string().trim().min(1),\n pages: z.array(navigationSchema).min(1),\n }),\n ),\n global: z.record(z.string(), z.unknown()).optional(),\n }),\n])\n\nconst navbarSchema = z\n .object({\n links: z.array(linkSchema).optional(),\n primary: z\n .object({\n type: z.string().optional(),\n label: z.string().trim().min(1),\n href: z.string().trim().min(1),\n })\n .optional(),\n })\n .optional()\n\nconst footerSchema = z.union([\n z.array(linkSchema),\n z.object({ socials: z.record(z.string(), z.string().trim().min(1)).optional() }),\n])\n\nconst logoSchema = z\n .union([\n z.string().trim().min(1),\n z.object({\n light: z.string().trim().min(1),\n dark: z.string().trim().min(1).optional(),\n href: z.string().trim().min(1).optional(),\n }),\n ])\n .optional()\n\nconst contextualActionsSchema = z\n .array(z.enum(DOCS_CONTEXTUAL_ACTIONS))\n .min(1)\n .max(DOCS_CONTEXTUAL_ACTIONS.length)\n .refine((actions) => new Set(actions).size === actions.length, {\n message: 'actions must not contain duplicates',\n })\n\nexport const rawConfigSchema = z.object({\n $schema: z.string().optional(),\n name: z.string().trim().min(1),\n description: z.string().trim().optional(),\n source: z.string().trim().min(1).default('docs'),\n output: z.string().trim().min(1).default('dist/_docs'),\n url: z.string().url().optional(),\n theme: z.union([z.string().trim().min(1), themeObjectSchema]).default({}),\n colors: z\n .object({\n primary: z.string().trim().optional(),\n light: z.string().trim().optional(),\n dark: z.string().trim().optional(),\n })\n .optional(),\n logo: logoSchema,\n favicon: z.string().trim().min(1).optional(),\n appearance: z\n .object({\n default: z.enum(['light', 'dark', 'system']).optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n background: z\n .object({\n color: colorPairSchema.optional(),\n decoration: z.enum(['none', 'gradient', 'grid']).optional(),\n })\n .optional(),\n fonts: z\n .object({\n family: z.string().trim().min(1).optional(),\n body: fontSpecSchema.optional(),\n heading: fontSpecSchema.optional(),\n mono: fontSpecSchema.optional(),\n })\n .optional(),\n styling: z\n .object({\n codeblocks: z.enum(['dark', 'system']).optional(),\n eyebrows: z.enum(['section', 'breadcrumbs', 'none']).optional(),\n })\n .optional(),\n navigation: navigationRootSchema.optional(),\n navbar: navbarSchema,\n links: z.array(linkSchema).default([]),\n footer: footerSchema.default([]),\n redirects: z.record(z.string(), z.string()).default({}),\n api: z\n .object({\n playground: z\n .object({\n display: z.enum(['interactive', 'simple', 'none']).optional(),\n })\n .optional(),\n examples: openApiExamplesSchema.optional(),\n })\n .optional(),\n openapi: z.union([openapiItemSchema, z.array(openapiItemSchema)]).optional(),\n assistant: z\n .object({\n access: z.enum(['disabled', 'public', 'authenticated']).default('disabled'),\n model: z.string().trim().min(1).optional(),\n suggestions: z.array(z.string().trim().min(1)).max(6).optional(),\n })\n .default({ access: 'disabled' }),\n mcp: z\n .object({\n access: z.enum(['disabled', 'public']).default('public'),\n })\n .default({ access: 'public' }),\n contextual: z\n .object({\n actions: contextualActionsSchema.default([...DEFAULT_DOCS_CONTEXTUAL_ACTIONS]),\n })\n .default({ actions: [...DEFAULT_DOCS_CONTEXTUAL_ACTIONS] }),\n seo: z\n .object({\n noindex: z.boolean().optional(),\n ogImage: z.string().trim().optional(),\n metaTags: z.record(z.string(), z.string()).optional(),\n metatags: z.record(z.string(), z.string()).optional(),\n })\n .default({}),\n})\n\nexport const RAW_CONFIG_KEYS = new Set([\n '$schema',\n 'name',\n 'description',\n 'source',\n 'output',\n 'url',\n 'theme',\n 'colors',\n 'logo',\n 'favicon',\n 'appearance',\n 'background',\n 'fonts',\n 'styling',\n 'navigation',\n 'navbar',\n 'links',\n 'footer',\n 'redirects',\n 'api',\n 'openapi',\n 'assistant',\n 'mcp',\n 'contextual',\n 'seo',\n])\n","import { existsSync, realpathSync } from 'node:fs'\nimport { isAbsolute, relative, resolve } from 'node:path'\nimport { DocsError } from '../types'\n\nexport function validateLinks(\n links: Array<{ label: string; href: string }>,\n field: string,\n configPath: string,\n): void {\n for (const link of links) {\n if (!/^(?:https?:\\/\\/|mailto:|\\/|#)/i.test(link.href)) {\n throw new DocsError(\n `Unsafe ${field} link: ${link.href}`,\n 'docs_config_invalid',\n [{ code: 'unsafe_link', message: `${field}: ${link.href}`, file: configPath }],\n )\n }\n }\n}\n\nexport function safeChildPath(appDir: string, configured: string, field: string, configPath: string): string {\n if (isAbsolute(configured)) {\n throw new DocsError(\n `docs.json ${field} must be relative to the app directory`,\n 'docs_path_invalid',\n [{ code: 'absolute_path', message: `${field}: ${configured}`, file: configPath }],\n )\n }\n const path = resolve(appDir, configured)\n const rel = relative(appDir, path)\n if (rel === '..' || rel.startsWith(`..${pathSeparator()}`)) {\n throw new DocsError(\n `docs.json ${field} escapes the app directory`,\n 'docs_path_invalid',\n [{ code: 'path_escape', message: `${field}: ${configured}`, file: configPath }],\n )\n }\n if (existsSync(path)) {\n const realRoot = realpathSync(appDir)\n const realPath = realpathSync(path)\n const realRelative = relative(realRoot, realPath)\n if (realRelative === '..' || realRelative.startsWith(`..${pathSeparator()}`)) {\n throw new DocsError(\n `docs.json ${field} resolves outside the app directory`,\n 'docs_path_invalid',\n [{ code: 'path_symlink_escape', message: `${field}: ${configured}`, file: configPath }],\n )\n }\n }\n return path\n}\n\nfunction pathSeparator(): string {\n return process.platform === 'win32' ? '\\\\' : '/'\n}\n\nexport function isWithin(parent: string, child: string): boolean {\n const rel = relative(parent, child)\n return rel !== '' && rel !== '..' && !rel.startsWith(`..${pathSeparator()}`)\n}\n\nexport function validateRedirects(redirects: Record<string, string>, configPath: string): void {\n for (const [from, to] of Object.entries(redirects)) {\n if (!from.startsWith('/') || !to.startsWith('/')) {\n throw new DocsError(\n `Redirects must use absolute site paths: ${from} -> ${to}`,\n 'docs_redirect_invalid',\n [{ code: 'redirect_path', message: `${from} -> ${to}`, file: configPath }],\n )\n }\n if (from === to) {\n throw new DocsError(\n `Redirect points to itself: ${from}`,\n 'docs_redirect_invalid',\n [{ code: 'redirect_loop', message: from, file: configPath }],\n )\n }\n const seen = new Set([from])\n let cursor: string | undefined = to\n while (cursor && redirects[cursor]) {\n if (seen.has(cursor)) {\n throw new DocsError(\n `Redirect loop includes ${cursor}`,\n 'docs_redirect_invalid',\n [{ code: 'redirect_loop', message: [...seen, cursor].join(' -> '), file: configPath }],\n )\n }\n seen.add(cursor)\n cursor = redirects[cursor]\n }\n }\n}\n\nexport function humanize(value: string): string {\n return value\n .split(/[-_]/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ')\n}\n","import { createProcessor, type CompileOptions } from '@mdx-js/mdx'\nimport { gfmToMarkdown } from 'mdast-util-gfm'\nimport { toMarkdown } from 'mdast-util-to-markdown'\nimport remarkFrontmatter from 'remark-frontmatter'\nimport remarkGfm from 'remark-gfm'\nimport rehypeHighlight from 'rehype-highlight'\nimport { parseFrontmatter, parseMarkdown, type ParsedMarkdown } from './markdown'\nimport { createSlugger, errorMessage } from './text'\nimport { DocsError } from './types'\n\ninterface SyntaxNode {\n type: string\n value?: string\n depth?: number\n meta?: string | null\n name?: string | null\n attributes?: Array<{ type?: string; name?: string; value?: unknown }>\n children?: SyntaxNode[]\n data?: Record<string, unknown>\n position?: { start?: { line?: number } }\n}\n\nconst EXECUTABLE_NODE_TYPES = new Set([\n 'mdxjsEsm',\n 'mdxFlowExpression',\n 'mdxTextExpression',\n])\n\nexport function parseMdx(source: string, file: string): ParsedMarkdown {\n const { frontmatter, body } = parseFrontmatter(source, file)\n try {\n const processor = createProcessor({ remarkPlugins: [remarkGfm] })\n const tree = processor.parse(body) as unknown as SyntaxNode\n const staticTree = projectStaticMarkdown(tree)\n const markdown = toMarkdown(staticTree as unknown as Parameters<typeof toMarkdown>[0], {\n extensions: [gfmToMarkdown()],\n })\n return { ...parseMarkdown(markdown, file), frontmatter }\n } catch (error) {\n if (error instanceof DocsError) throw error\n const line = diagnosticLine(error)\n throw new DocsError(\n `Invalid MDX in ${file}: ${errorMessage(error)}`,\n 'docs_mdx_invalid',\n [{ code: 'mdx_syntax', message: errorMessage(error), file, ...(line ? { line } : {}) }],\n )\n }\n}\n\n/** Shared compile settings keep graph headings and executable MDX output identical. */\nexport function mdxCompileOptions(): CompileOptions {\n return {\n jsx: false,\n outputFormat: 'program',\n remarkPlugins: [remarkGfm, remarkFrontmatter, removeFrontmatter, addRuntimeMetadata],\n rehypePlugins: [rehypeHighlight],\n }\n}\n\nfunction projectStaticMarkdown(node: SyntaxNode): SyntaxNode {\n const projected: SyntaxNode = { ...node }\n delete projected.attributes\n delete projected.name\n projected.children = (node.children ?? []).flatMap(projectStaticNode)\n return projected\n}\n\nfunction projectStaticNode(node: SyntaxNode): SyntaxNode[] {\n if (EXECUTABLE_NODE_TYPES.has(node.type)) return []\n if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n const title = jsxTitle(node)\n const titleNode = title\n ? [{\n type: 'paragraph',\n children: [{ type: 'text', value: title }],\n } satisfies SyntaxNode]\n : []\n return [...titleNode, ...(node.children ?? []).flatMap(projectStaticNode)]\n }\n return [projectStaticMarkdown(node)]\n}\n\nfunction jsxTitle(node: SyntaxNode): string | undefined {\n const attribute = node.attributes?.find((candidate) =>\n candidate.type === 'mdxJsxAttribute' && (candidate.name === 'title' || candidate.name === 'label'),\n )\n return typeof attribute?.value === 'string' ? attribute.value : undefined\n}\n\nfunction removeFrontmatter() {\n return (tree: SyntaxNode): void => {\n tree.children = tree.children?.filter((node) => node.type !== 'yaml')\n }\n}\n\nfunction addRuntimeMetadata() {\n return (tree: SyntaxNode): void => {\n const slug = createSlugger()\n visit(tree, (node) => {\n if (node.type === 'heading') {\n const text = staticText(node)\n const id = slug(text)\n node.data = {\n ...node.data,\n hProperties: {\n ...asRecord(node.data?.hProperties),\n id,\n },\n }\n }\n if (node.type === 'code' && typeof node.meta === 'string' && node.meta.trim()) {\n node.data = {\n ...node.data,\n hProperties: {\n ...asRecord(node.data?.hProperties),\n 'data-code-title': node.meta.trim(),\n },\n }\n }\n })\n }\n}\n\nfunction staticText(node: SyntaxNode): string {\n if (node.type === 'text' || node.type === 'inlineCode') return node.value ?? ''\n if (EXECUTABLE_NODE_TYPES.has(node.type)) return ''\n return (node.children ?? []).map(staticText).join('')\n}\n\nfunction visit(node: SyntaxNode, visitor: (node: SyntaxNode) => void): void {\n visitor(node)\n for (const child of node.children ?? []) visit(child, visitor)\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {}\n}\n\nfunction diagnosticLine(error: unknown): number | undefined {\n if (!error || typeof error !== 'object' || !('line' in error)) return undefined\n return typeof error.line === 'number' ? error.line : undefined\n}\n","import { existsSync, readFileSync, realpathSync } from 'node:fs'\nimport { basename, extname, relative, resolve, sep } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport {\n DocsError,\n type DocsOpenApiConfig,\n type DocsOpenApiOperation,\n type DocsOpenApiParameter,\n} from './types'\nimport { slugify } from './markdown'\nimport { normalizeRoute } from './routing'\nimport { errorMessage } from './text'\nimport { createOpenApiCodeSamples } from './openapi-samples'\nimport { asOpenApiObject, resolveOpenApiObject } from './openapi-object'\n\nconst HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace'] as const\n\ninterface OpenApiDocument {\n openapi?: unknown\n swagger?: unknown\n info?: { title?: unknown; description?: unknown }\n servers?: Array<{ url?: unknown }>\n host?: unknown\n basePath?: unknown\n schemes?: unknown\n security?: unknown\n paths?: Record<string, Record<string, unknown>>\n}\n\nexport interface ParsedOpenApi {\n sourcePath: string\n title: string\n route: string\n raw: string\n operations: DocsOpenApiOperation[]\n}\n\nexport function parseOpenApi(appDir: string, config: DocsOpenApiConfig): ParsedOpenApi {\n const sourcePath = resolve(appDir, config.source)\n assertOpenApiSourcePath(appDir, sourcePath, config.source)\n if (!existsSync(sourcePath)) {\n throw new DocsError(`OpenAPI source not found: ${config.source}`, 'docs_openapi_missing', [\n { code: 'openapi_missing', message: config.source, file: sourcePath },\n ])\n }\n assertOpenApiSourcePath(appDir, realpathSync(sourcePath), config.source)\n const raw = readFileSync(sourcePath, 'utf8')\n let parsed: unknown\n try {\n parsed = ['.yaml', '.yml'].includes(extname(sourcePath).toLowerCase())\n ? parseYaml(raw, { maxAliasCount: 50 })\n : JSON.parse(raw)\n } catch (error) {\n throw new DocsError(\n `Invalid OpenAPI document ${config.source}: ${errorMessage(error)}`,\n 'docs_openapi_invalid',\n [{ code: 'openapi_parse', message: errorMessage(error), file: sourcePath }],\n )\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw invalidOpenApi(sourcePath, 'Document root must be an object')\n }\n const document = parsed as OpenApiDocument\n if (typeof document.openapi !== 'string' && typeof document.swagger !== 'string') {\n throw invalidOpenApi(sourcePath, 'Expected an openapi or swagger version field')\n }\n if (!document.paths || typeof document.paths !== 'object') {\n throw invalidOpenApi(sourcePath, 'Expected a paths object')\n }\n\n const documentServer = firstServerUrl(document.servers) ?? swaggerServerUrl(document)\n const operations: DocsOpenApiOperation[] = []\n const ids = new Set<string>()\n for (const [path, pathItem] of Object.entries(document.paths)) {\n const normalizedPathItem = resolveOpenApiObject(pathItem, document as Record<string, unknown>)\n if (!normalizedPathItem) continue\n for (const method of HTTP_METHODS) {\n const operation = resolveOpenApiObject(\n normalizedPathItem[method],\n document as Record<string, unknown>,\n )\n if (!operation) continue\n const baseUrl =\n config.baseUrl ??\n firstServerUrl(operation.servers) ??\n firstServerUrl(normalizedPathItem.servers) ??\n documentServer\n const fallbackId = `${method}-${path}`\n const operationId = slugify(\n typeof operation.operationId === 'string' ? operation.operationId : fallbackId,\n )\n if (!operationId)\n throw invalidOpenApi(sourcePath, `Could not derive id for ${method} ${path}`)\n if (ids.has(operationId)) {\n throw invalidOpenApi(sourcePath, `Duplicate operation id: ${operationId}`)\n }\n ids.add(operationId)\n const summary =\n typeof operation.summary === 'string'\n ? operation.summary\n : `${method.toUpperCase()} ${path}`\n const parameters = mergeParameters(\n normalizedPathItem.parameters,\n operation.parameters,\n document as Record<string, unknown>,\n )\n const security = 'security' in operation ? operation.security : document.security\n const normalized = {\n method: method.toUpperCase(),\n path,\n operationId,\n summary,\n ...(typeof operation.description === 'string'\n ? { description: operation.description }\n : {}),\n tags: Array.isArray(operation.tags)\n ? operation.tags.filter((tag): tag is string => typeof tag === 'string')\n : [],\n parameters,\n ...('requestBody' in operation ? { requestBody: operation.requestBody } : {}),\n responses: normalizeResponses(operation.responses, document as Record<string, unknown>),\n ...(security === undefined ? {} : { security }),\n ...(baseUrl ? { baseUrl } : {}),\n playground: config.playground === true && Boolean(baseUrl),\n } satisfies Omit<DocsOpenApiOperation, 'codeSamples'>\n operations.push({\n ...normalized,\n codeSamples: createOpenApiCodeSamples(\n normalized,\n document as Record<string, unknown>,\n config.examples,\n operation['x-codeSamples'] ?? operation['x-code-samples'],\n ),\n })\n }\n }\n if (operations.length === 0) {\n throw invalidOpenApi(sourcePath, 'No HTTP operations found')\n }\n\n const route = normalizeRoute(config.route ?? '/api-reference')\n const title =\n config.label ??\n (typeof document.info?.title === 'string'\n ? document.info.title\n : basename(config.source, extname(config.source)))\n return { sourcePath, title, route, raw, operations }\n}\n\nfunction assertOpenApiSourcePath(appDir: string, sourcePath: string, configured: string): void {\n const sourceIsReal = existsSync(sourcePath)\n const root =\n sourceIsReal && existsSync(appDir) && sourcePath === realpathSync(sourcePath)\n ? realpathSync(appDir)\n : resolve(appDir)\n const rel = relative(root, sourcePath)\n if (rel === '..' || rel.startsWith(`..${sep}`) || rel === '') {\n throw new DocsError(\n `OpenAPI source must be a file inside the app directory: ${configured}`,\n 'docs_openapi_path_invalid',\n [{ code: 'openapi_path_escape', message: configured, file: sourcePath }],\n )\n }\n}\n\nexport function operationMarkdown(operation: DocsOpenApiOperation): string {\n const lines = [\n `<div class=\"docs-api-badge\"><span class=\"method method-${operation.method.toLowerCase()}\">${operation.method}</span><code>${operation.path}</code></div>`,\n '',\n ]\n if (operation.description) lines.push(operation.description, '')\n if (operation.parameters.length > 0) {\n lines.push(\n '## Parameters',\n '',\n '| Name | In | Required | Description |',\n '| --- | --- | --- | --- |',\n )\n for (const parameter of operation.parameters) {\n lines.push(\n `| \\`${escapeTable(parameter.name)}\\` | ${escapeTable(parameter.in)} | ` +\n `${parameter.required ? 'yes' : 'no'} | ${escapeTable(parameter.description ?? '')} |`,\n )\n }\n lines.push('')\n }\n if (operation.requestBody !== undefined) {\n lines.push('## Request body', '', '```json', prettyJson(operation.requestBody), '```', '')\n }\n if (operation.security !== undefined) {\n lines.push('## Security', '', '```json', prettyJson(operation.security), '```', '')\n }\n lines.push('## Responses', '')\n if (operation.responses.length === 0) {\n lines.push('No response schema is declared.', '')\n } else {\n for (const response of operation.responses) {\n lines.push(`### ${response.status}`, '', response.description || 'Response', '')\n if (response.schema !== undefined) {\n lines.push('```json', prettyJson(response.schema), '```', '')\n }\n }\n }\n if (operation.codeSamples.length > 0) {\n lines.push('## Request examples', '', '<CodeGroup title=\"Request\">', '')\n for (const sample of operation.codeSamples) {\n const fence = codeFence(sample.code)\n const label = sample.label.replace(/[\"\\r\\n]/g, \"'\")\n lines.push(`${fence}${sample.syntax} title=\"${label}\"`, sample.code, fence, '')\n }\n lines.push('</CodeGroup>', '')\n }\n return lines.join('\\n')\n}\n\nfunction mergeParameters(\n pathParameters: unknown,\n operationParameters: unknown,\n document: Record<string, unknown>,\n): DocsOpenApiParameter[] {\n const merged = new Map<string, DocsOpenApiParameter>()\n for (const values of [pathParameters, operationParameters]) {\n if (!Array.isArray(values)) continue\n for (const value of values) {\n for (const parameter of normalizeParameter(value, document)) {\n merged.set(`${parameter.in}\\0${parameter.name}`, parameter)\n }\n }\n }\n return [...merged.values()]\n}\n\nfunction normalizeParameter(\n value: unknown,\n document: Record<string, unknown>,\n): DocsOpenApiParameter[] {\n const parameter = resolveOpenApiObject(value, document)\n if (!parameter) return []\n if (typeof parameter.name !== 'string' || typeof parameter.in !== 'string') return []\n return [\n {\n name: parameter.name,\n in: parameter.in,\n required: parameter.required === true,\n ...(typeof parameter.description === 'string' ? { description: parameter.description } : {}),\n ...('schema' in parameter ? { schema: parameter.schema } : {}),\n ...('example' in parameter ? { example: parameter.example } : {}),\n },\n ]\n}\n\nfunction normalizeResponses(value: unknown, document: Record<string, unknown>) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return []\n return Object.entries(value as Record<string, unknown>).map(([status, response]) => {\n const data = resolveOpenApiObject(response, document)\n if (!data) {\n return { status, description: '' }\n }\n return {\n status,\n description: typeof data.description === 'string' ? data.description : '',\n ...('content' in data ? { schema: data.content } : {}),\n }\n })\n}\n\nfunction invalidOpenApi(file: string, message: string): DocsError {\n return new DocsError(`Invalid OpenAPI document: ${message}`, 'docs_openapi_invalid', [\n { code: 'openapi_shape', message, file },\n ])\n}\n\nfunction prettyJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return String(value)\n }\n}\n\nfunction escapeTable(value: string): string {\n return value.replace(/\\|/g, '\\\\|').replace(/\\n/g, ' ')\n}\n\nfunction codeFence(source: string): string {\n const longest = Math.max(0, ...[...source.matchAll(/`+/g)].map((match) => match[0].length))\n return '`'.repeat(Math.max(3, longest + 1))\n}\n\nfunction firstServerUrl(value: unknown): string | undefined {\n if (!Array.isArray(value)) return undefined\n for (const server of value) {\n const object = asOpenApiObject(server)\n if (typeof object?.url === 'string') return object.url\n }\n return undefined\n}\n\nfunction swaggerServerUrl(document: OpenApiDocument): string | undefined {\n if (typeof document.host !== 'string' || !document.host) return undefined\n const scheme = Array.isArray(document.schemes)\n ? document.schemes.find((value): value is string => typeof value === 'string')\n : undefined\n const basePath = typeof document.basePath === 'string' ? document.basePath : ''\n return `${scheme ?? 'https'}://${document.host}${basePath}`\n}\n","export type OpenApiObject = Record<string, unknown>\n\nexport function asOpenApiObject(value: unknown): OpenApiObject | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as OpenApiObject)\n : undefined\n}\n\nexport function resolveOpenApiObject(\n value: unknown,\n document: OpenApiObject,\n seen: Set<string> = new Set(),\n): OpenApiObject | undefined {\n const object = asOpenApiObject(value)\n if (!object || typeof object.$ref !== 'string') return object\n const reference = object.$ref\n if (!reference.startsWith('#/') || seen.has(reference)) return undefined\n seen.add(reference)\n let resolved: unknown = document\n for (const segment of reference.slice(2).split('/')) {\n resolved = asOpenApiObject(resolved)?.[segment.replace(/~1/g, '/').replace(/~0/g, '~')]\n }\n const target = asOpenApiObject(resolved)\n if (!target) return undefined\n const siblings = Object.fromEntries(Object.entries(object).filter(([key]) => key !== '$ref'))\n return { ...target, ...siblings }\n}\n","import {\n DEFAULT_DOCS_OPENAPI_EXAMPLES,\n type DocsOpenApiCodeSample,\n type DocsOpenApiExamplesConfig,\n type DocsOpenApiParameter,\n type DocsOpenApiSampleLanguage,\n} from './types'\nimport { asOpenApiObject, resolveOpenApiObject, type OpenApiObject } from './openapi-object'\n\ninterface SampleOperation {\n method: string\n path: string\n baseUrl?: string\n parameters: DocsOpenApiParameter[]\n requestBody?: unknown\n security?: unknown\n}\n\nconst LANGUAGE_METADATA: Record<DocsOpenApiSampleLanguage, { label: string; syntax: string }> = {\n curl: { label: 'cURL', syntax: 'bash' },\n javascript: { label: 'JavaScript', syntax: 'javascript' },\n python: { label: 'Python', syntax: 'python' },\n go: { label: 'Go', syntax: 'go' },\n}\n\nexport function createOpenApiCodeSamples(\n operation: SampleOperation,\n document: OpenApiObject,\n examples: DocsOpenApiExamplesConfig | undefined,\n customSamples: unknown,\n): DocsOpenApiCodeSample[] {\n const custom = normalizeCustomSamples(customSamples)\n if (examples?.autogenerate === false || !operation.baseUrl) return custom\n\n const languages = examples?.languages ?? DEFAULT_DOCS_OPENAPI_EXAMPLES.languages\n const defaults = examples?.defaults ?? DEFAULT_DOCS_OPENAPI_EXAMPLES.defaults\n const request = buildSampleRequest(operation, document, defaults === 'all')\n const customLanguages = new Set(custom.map((sample) => knownLanguage(sample.language)))\n const generated = languages\n .filter((language) => !customLanguages.has(language))\n .map(\n (language): DocsOpenApiCodeSample => ({\n language,\n label: LANGUAGE_METADATA[language].label,\n syntax: LANGUAGE_METADATA[language].syntax,\n code: renderSample(language, request),\n generated: true,\n }),\n )\n return [...custom, ...generated]\n}\n\ninterface SampleRequest {\n method: string\n url: string\n headers: Record<string, string>\n body?: unknown\n}\n\nfunction buildSampleRequest(\n operation: SampleOperation,\n document: OpenApiObject,\n includeOptional: boolean,\n): SampleRequest {\n let path = operation.path\n const query = new URLSearchParams()\n const headers: Record<string, string> = { Accept: 'application/json' }\n const cookies: string[] = []\n const parameters = operation.parameters.filter(\n (parameter) => parameter.required || includeOptional,\n )\n\n for (const parameter of parameters) {\n const value = sampleParameterValue(parameter, document)\n if (parameter.in === 'path') {\n path = path.replaceAll(`{${parameter.name}}`, encodeURIComponent(String(value)))\n } else if (parameter.in === 'query') {\n query.set(parameter.name, String(value))\n } else if (parameter.in === 'header') {\n headers[parameter.name] = String(value)\n } else if (parameter.in === 'cookie') {\n cookies.push(`${parameter.name}=${String(value)}`)\n }\n }\n path = path.replace(/\\{([^}]+)\\}/g, (_match, name: string) =>\n encodeURIComponent(`example-${slugPart(name)}`),\n )\n\n applySecurity(operation.security ?? document.security, document, headers, query, cookies)\n if (cookies.length > 0) headers.Cookie = cookies.join('; ')\n\n const body = requestBodyExample(operation.requestBody, document, includeOptional)\n if (body !== undefined) headers['Content-Type'] = 'application/json'\n const separator = path.includes('?') ? '&' : '?'\n const search = query.toString()\n const url = `${operation.baseUrl?.replace(/\\/$/, '') ?? ''}${path}${search ? `${separator}${search}` : ''}`\n return { method: operation.method, url, headers, ...(body === undefined ? {} : { body }) }\n}\n\nfunction sampleParameterValue(parameter: DocsOpenApiParameter, document: OpenApiObject): unknown {\n if (parameter.example !== undefined) return parameter.example\n const schema = resolveOpenApiObject(parameter.schema, document)\n if (schema) {\n if (schema.example !== undefined) return schema.example\n if (schema.default !== undefined) return schema.default\n if (Array.isArray(schema.enum) && schema.enum.length > 0) return schema.enum[0]\n if (schema.type === 'boolean') return true\n if (schema.type === 'integer' || schema.type === 'number') return 1\n }\n return `example-${slugPart(parameter.name)}`\n}\n\nfunction requestBodyExample(\n value: unknown,\n document: OpenApiObject,\n includeOptional: boolean,\n): unknown {\n const requestBody = resolveOpenApiObject(value, document)\n if (!requestBody) return undefined\n const content = asOpenApiObject(requestBody.content)\n if (!content) return undefined\n const jsonMedia = Object.entries(content).find(([contentType]) => contentType.endsWith('+json'))\n const media = asOpenApiObject(content['application/json']) ?? asOpenApiObject(jsonMedia?.[1])\n if (!media) return undefined\n if (media.example !== undefined) return media.example\n const namedExamples = asOpenApiObject(media.examples)\n if (namedExamples) {\n for (const example of Object.values(namedExamples)) {\n const resolved = resolveOpenApiObject(example, document)\n if (resolved && resolved.value !== undefined) return resolved.value\n }\n }\n return schemaExample(media.schema, document, includeOptional, new Set(), 0)\n}\n\nfunction schemaExample(\n value: unknown,\n document: OpenApiObject,\n includeOptional: boolean,\n seen: Set<string>,\n depth: number,\n): unknown {\n if (depth > 8) return undefined\n const schema = resolveOpenApiObject(value, document, seen)\n if (!schema) return undefined\n if (schema.example !== undefined) return schema.example\n if (schema.default !== undefined) return schema.default\n if (Array.isArray(schema.enum) && schema.enum.length > 0) return schema.enum[0]\n const alternatives = Array.isArray(schema.oneOf)\n ? schema.oneOf\n : Array.isArray(schema.anyOf)\n ? schema.anyOf\n : undefined\n if (alternatives?.[0] !== undefined) {\n return schemaExample(alternatives[0], document, includeOptional, seen, depth + 1)\n }\n if (Array.isArray(schema.allOf)) {\n return Object.assign(\n {},\n ...schema.allOf.map((part) => {\n const example = schemaExample(part, document, includeOptional, seen, depth + 1)\n return asOpenApiObject(example) ?? {}\n }),\n )\n }\n const properties = asOpenApiObject(schema.properties)\n if (schema.type === 'object' || properties) {\n const required = new Set(\n Array.isArray(schema.required)\n ? schema.required.filter((name): name is string => typeof name === 'string')\n : [],\n )\n return Object.fromEntries(\n Object.entries(properties ?? {})\n .filter(([name]) => includeOptional || required.has(name))\n .map(([name, property]) => [\n name,\n schemaExample(property, document, includeOptional, new Set(seen), depth + 1),\n ])\n .filter((entry) => entry[1] !== undefined),\n )\n }\n if (schema.type === 'array' || schema.items !== undefined) {\n const item = schemaExample(schema.items, document, includeOptional, seen, depth + 1)\n return item === undefined ? [] : [item]\n }\n if (schema.type === 'boolean') return true\n if (schema.type === 'integer' || schema.type === 'number') return 1\n if (schema.type === 'string') return stringExample(schema.format)\n return undefined\n}\n\nfunction stringExample(format: unknown): string {\n switch (format) {\n case 'date-time':\n return '2026-01-01T00:00:00Z'\n case 'date':\n return '2026-01-01'\n case 'email':\n return 'user@example.com'\n case 'uuid':\n return '00000000-0000-4000-8000-000000000000'\n case 'uri':\n case 'url':\n return 'https://example.com'\n default:\n return 'string'\n }\n}\n\nfunction applySecurity(\n value: unknown,\n document: OpenApiObject,\n headers: Record<string, string>,\n query: URLSearchParams,\n cookies: string[],\n): void {\n if (!Array.isArray(value)) return\n const requirement = value.map(asOpenApiObject).find(Boolean)\n if (!requirement) return\n const schemes = asOpenApiObject(asOpenApiObject(document.components)?.securitySchemes)\n for (const name of Object.keys(requirement)) {\n const scheme = resolveOpenApiObject(schemes?.[name], document)\n if (!scheme) continue\n if (scheme.type === 'http' && scheme.scheme === 'bearer') {\n headers.Authorization = 'Bearer <token>'\n } else if (scheme.type === 'http' && scheme.scheme === 'basic') {\n headers.Authorization = 'Basic <credentials>'\n } else if (scheme.type === 'apiKey' && typeof scheme.name === 'string') {\n if (scheme.in === 'query') query.set(scheme.name, '<api-key>')\n else if (scheme.in === 'cookie') cookies.push(`${scheme.name}=<api-key>`)\n else headers[scheme.name] = '<api-key>'\n }\n }\n}\n\nfunction renderSample(language: DocsOpenApiSampleLanguage, request: SampleRequest): string {\n switch (language) {\n case 'curl':\n return renderCurl(request)\n case 'javascript':\n return renderJavaScript(request)\n case 'python':\n return renderPython(request)\n case 'go':\n return renderGo(request)\n }\n}\n\nfunction renderCurl(request: SampleRequest): string {\n const lines = [`curl --request ${request.method} \\\\`, ` --url '${escapeShell(request.url)}'`]\n for (const [name, value] of Object.entries(request.headers)) {\n lines[lines.length - 1] += ' \\\\'\n lines.push(` --header '${escapeShell(`${name}: ${value}`)}'`)\n }\n if (request.body !== undefined) {\n lines[lines.length - 1] += ' \\\\'\n lines.push(` --data '${escapeShell(prettyJson(request.body))}'`)\n }\n return lines.join('\\n')\n}\n\nfunction renderJavaScript(request: SampleRequest): string {\n const options = [\n `method: ${JSON.stringify(request.method)}`,\n `headers: ${indent(prettyJson(request.headers), 2).trimStart()}`,\n ...(request.body === undefined\n ? []\n : [`body: JSON.stringify(${indent(prettyJson(request.body), 2).trimStart()})`]),\n ]\n return [\n `const response = await fetch(${JSON.stringify(request.url)}, {`,\n options.map((option) => ` ${option},`).join('\\n'),\n '})',\n '',\n 'if (!response.ok) throw new Error(`Request failed: ${response.status}`)',\n 'const data = await response.json()',\n 'console.log(data)',\n ].join('\\n')\n}\n\nfunction renderPython(request: SampleRequest): string {\n const arguments_ = [\n JSON.stringify(request.method),\n JSON.stringify(request.url),\n `headers=${pythonValue(request.headers)}`,\n ...(request.body === undefined ? [] : [`json=${pythonValue(request.body)}`]),\n ]\n return [\n 'import requests',\n '',\n 'response = requests.request(',\n arguments_.map((argument) => ` ${argument},`).join('\\n'),\n ')',\n 'response.raise_for_status()',\n 'print(response.json())',\n ].join('\\n')\n}\n\nfunction renderGo(request: SampleRequest): string {\n const requestBody =\n request.body === undefined\n ? 'nil'\n : `strings.NewReader(${JSON.stringify(prettyJson(request.body))})`\n const imports = ['\"fmt\"', '\"io\"', '\"net/http\"']\n if (request.body !== undefined) imports.push('\"strings\"')\n return [\n 'package main',\n '',\n 'import (',\n ...imports.map((value) => `\\t${value}`),\n ')',\n '',\n 'func main() {',\n `\\treq, err := http.NewRequest(${JSON.stringify(request.method)}, ${JSON.stringify(request.url)}, ${requestBody})`,\n '\\tif err != nil { panic(err) }',\n ...Object.entries(request.headers).map(\n ([name, value]) => `\\treq.Header.Set(${JSON.stringify(name)}, ${JSON.stringify(value)})`,\n ),\n '',\n '\\tres, err := http.DefaultClient.Do(req)',\n '\\tif err != nil { panic(err) }',\n '\\tdefer res.Body.Close()',\n '',\n '\\tbody, err := io.ReadAll(res.Body)',\n '\\tif err != nil { panic(err) }',\n '\\tfmt.Println(string(body))',\n '}',\n ].join('\\n')\n}\n\nfunction normalizeCustomSamples(value: unknown): DocsOpenApiCodeSample[] {\n if (!Array.isArray(value)) return []\n return value.flatMap((entry): DocsOpenApiCodeSample[] => {\n const sample = asOpenApiObject(entry)\n const language = typeof sample?.lang === 'string' ? sample.lang.trim().toLowerCase() : ''\n const source = typeof sample?.source === 'string' ? sample.source.trim() : ''\n if (!language || !source) return []\n const normalizedLanguage = knownLanguage(language)\n const label =\n typeof sample?.label === 'string' && sample.label.trim()\n ? sample.label.trim()\n : normalizedLanguage\n ? LANGUAGE_METADATA[normalizedLanguage].label\n : language\n return [\n {\n language,\n label,\n syntax: syntaxForLanguage(language),\n code: source,\n generated: false,\n },\n ]\n })\n}\n\nfunction knownLanguage(value: string): DocsOpenApiSampleLanguage | undefined {\n if (['curl', 'bash', 'shell', 'sh'].includes(value)) return 'curl'\n if (['javascript', 'js', 'node', 'nodejs'].includes(value)) return 'javascript'\n if (['python', 'py'].includes(value)) return 'python'\n if (['go', 'golang'].includes(value)) return 'go'\n return undefined\n}\n\nfunction syntaxForLanguage(value: string): string {\n const known = knownLanguage(value)\n return known ? LANGUAGE_METADATA[known].syntax : value.replace(/[^a-z0-9_+#.-]/g, '') || 'text'\n}\n\nfunction prettyJson(value: unknown): string {\n return JSON.stringify(value, null, 2)\n}\n\nfunction pythonValue(value: unknown): string {\n return prettyJson(value)\n .replace(/\\btrue\\b/g, 'True')\n .replace(/\\bfalse\\b/g, 'False')\n .replace(/\\bnull\\b/g, 'None')\n}\n\nfunction escapeShell(value: string): string {\n return value.replace(/'/g, `'\"'\"'`)\n}\n\nfunction indent(value: string, spaces: number): string {\n const prefix = ' '.repeat(spaces)\n return value\n .split('\\n')\n .map((line) => `${prefix}${line}`)\n .join('\\n')\n}\n\nfunction slugPart(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '') || 'value'\n )\n}\n","import { compileSync } from '@mdx-js/mdx'\nimport { parse as parseJavaScript } from 'acorn'\nimport { buildSync, type BuildOptions, type BuildResult, type OutputFile } from 'esbuild'\nimport { createRequire } from 'node:module'\nimport { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, extname, join, relative, resolve, sep } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { rewriteLocalReferences } from './graph'\nimport { mdxCompileOptions } from './mdx'\nimport { errorMessage } from './text'\nimport { DocsError, type DocsRuntimeData, type DocsValidationResult } from './types'\n\nexport interface CustomDocsRuntime {\n browserAssets: Array<{ path: string; content: string }>\n stylesheets: string[]\n render(data: DocsRuntimeData, route: string): string\n}\n\ninterface JavaScriptNode {\n type: string\n start?: number\n end?: number\n source?: JavaScriptNode\n value?: unknown\n [key: string]: unknown\n}\n\nexport function buildCustomDocsRuntime(validation: DocsValidationResult): CustomDocsRuntime | null {\n const sitePath = resolve(validation.appDir, 'docs.tsx')\n const mdxPages = validation.graph.pages.filter((page) => page.sourceFormat === 'mdx')\n if (!existsSync(sitePath) && mdxPages.length === 0) return null\n\n const temporaryDir = mkdtempSync(join(tmpdir(), 'deepspace-docs-runtime-'))\n try {\n const compiledPages = mdxPages.map((page, index) => {\n const source = readFileSync(page.sourcePath, 'utf8')\n const rewritten = rewriteLocalReferences(\n source,\n page.relativePath,\n validation.sourceDir,\n page.sourcePath,\n )\n const compiled = compileSync(rewritten, mdxCompileOptions())\n const path = join(temporaryDir, `page-${index}.mjs`)\n writeFileSync(path, resolveCompiledImports(String(compiled), page.sourcePath, validation.appDir))\n return { path, route: page.route }\n })\n\n const clientEntry = runtimeEntry('docs-client-core.js', 'runtime/client.tsx')\n const publicEntry = runtimeEntry('docs-react.js', 'runtime/public.tsx')\n const serverEntry = runtimeEntry('docs-server-core.js', 'runtime/server.tsx')\n const browserEntry = join(temporaryDir, 'browser-entry.ts')\n const serverBundleEntry = join(temporaryDir, 'server-entry.ts')\n writeFileSync(browserEntry, generatedBrowserEntry(clientEntry, publicEntry, sitePath, compiledPages))\n writeFileSync(serverBundleEntry, generatedServerEntry(serverEntry, sitePath, compiledPages))\n\n const reactAliases = runtimeDependencyAliases()\n const alias = { ...reactAliases, 'deepspace/docs/react': publicEntry }\n const browserOutDir = join(temporaryDir, 'browser')\n const sharedBuildOptions: BuildOptions = {\n absWorkingDir: temporaryDir,\n bundle: true,\n define: { 'process.env.NODE_ENV': '\"production\"' },\n jsx: 'automatic',\n target: ['es2022'],\n ...(existsSync(resolve(validation.appDir, 'tsconfig.json'))\n ? { tsconfig: resolve(validation.appDir, 'tsconfig.json') }\n : {}),\n write: false,\n }\n const browser = buildSync({\n ...sharedBuildOptions,\n alias,\n entryPoints: ['browser-entry.ts'],\n chunkNames: 'docs-page-[hash]',\n entryNames: 'docs-custom-runtime',\n format: 'esm',\n loader: assetLoaders('dataurl'),\n minify: true,\n outdir: browserOutDir,\n platform: 'browser',\n splitting: true,\n })\n const server = buildSync({\n ...sharedBuildOptions,\n alias: { ...reactAliases, 'deepspace/docs/react': serverEntry },\n entryPoints: ['server-entry.ts'],\n format: 'cjs',\n loader: { ...assetLoaders('dataurl'), '.css': 'text' },\n logLevel: 'silent',\n minify: false,\n outdir: join(temporaryDir, 'server'),\n platform: 'node',\n target: ['node22'],\n })\n const browserAssets = (browser.outputFiles ?? []).map((output) => ({\n path: relative(browserOutDir, output.path).split(sep).join('/'),\n content: output.text,\n }))\n if (!browserAssets.some((asset) => asset.path === 'docs-custom-runtime.js')) {\n throw new Error('Executable docs build did not emit docs-custom-runtime.js')\n }\n const stylesheets = browserAssets\n .filter((asset) => extname(asset.path) === '.css')\n .map((asset) => `/_docs/assets/${asset.path}`)\n const serverJavaScript = outputWithExtension(server, '.js').text\n const module = { exports: {} as { render?: (route: string, data: DocsRuntimeData) => string } }\n const evaluate = new Function('require', 'module', 'exports', serverJavaScript)\n evaluate(createRequire(import.meta.url), module, module.exports)\n if (typeof module.exports.render !== 'function') {\n throw new Error('The generated documentation server renderer did not export render()')\n }\n return {\n browserAssets,\n stylesheets,\n render: (data, route) => module.exports.render?.(route, data) ?? '',\n }\n } catch (error) {\n if (error instanceof DocsError) throw error\n throw new DocsError(\n `Unable to compile executable documentation: ${errorMessage(error)}`,\n 'docs_runtime_build_failed',\n [{ code: 'runtime_compile', message: errorMessage(error), file: existsSync(sitePath) ? sitePath : undefined }],\n )\n } finally {\n rmSync(temporaryDir, { recursive: true, force: true })\n }\n}\n\nfunction generatedBrowserEntry(\n clientEntry: string,\n publicEntry: string,\n sitePath: string,\n pages: Array<{ path: string; route: string }>,\n): string {\n const siteImport = existsSync(sitePath)\n ? `import Site from ${quote(sitePath)}`\n : `import { DefaultDocs as Site } from ${quote(publicEntry)}`\n const pageLoaders = pages.map((page) => `${quote(page.route)}: () => import(${quote(page.path)})`).join(',\\n')\n return `import { hydrateDocs } from ${quote(clientEntry)}\n${siteImport}\nconst loaders = { ${pageLoaders} }\nconst pages = {}\nasync function loadPage(route) {\n const loader = loaders[route]\n if (loader && !pages[route]) pages[route] = (await loader()).default\n}\nconst payload = document.getElementById('deepspace-docs-data')\nif (payload?.textContent) await loadPage(JSON.parse(payload.textContent).page.route)\nhydrateDocs({ Site, pages, loadPage })\n`\n}\n\nfunction generatedServerEntry(\n serverEntry: string,\n sitePath: string,\n pages: Array<{ path: string; route: string }>,\n): string {\n const imports = pages.map((page, index) => `import Page${index} from ${quote(page.path)}`).join('\\n')\n const siteImport = existsSync(sitePath)\n ? `import Site from ${quote(sitePath)}`\n : `import { DefaultDocs as Site } from ${quote(serverEntry)}`\n const pageMap = pages.map((page, index) => `${quote(page.route)}: Page${index}`).join(',\\n')\n return `import { renderDocs } from ${quote(serverEntry)}\n${siteImport}\n${imports}\nconst pages = { ${pageMap} }\nexport function render(route, data) {\n return renderDocs({ data, Page: pages[route], Site })\n}\n`\n}\n\nfunction resolveCompiledImports(code: string, sourcePath: string, appDir: string): string {\n const tree = parseJavaScript(code, { ecmaVersion: 'latest', sourceType: 'module' }) as unknown as JavaScriptNode\n const replacements: Array<{ start: number; end: number; value: string }> = []\n const appRequire = createRequire(join(appDir, 'package.json'))\n visitJavaScript(tree, (node) => {\n const source = importSource(node)\n if (!source || typeof source.value !== 'string' || source.start === undefined || source.end === undefined) {\n return\n }\n const specifier = source.value\n if (/^(?:data:|https?:|node:)/.test(specifier)) return\n const resolved = specifier.startsWith('.')\n ? resolve(dirname(sourcePath), specifier)\n : specifier === 'deepspace/docs/react' || specifier === 'react' || specifier.startsWith('react/')\n ? specifier\n : appRequire.resolve(specifier)\n replacements.push({ start: source.start, end: source.end, value: quote(resolved.split(sep).join('/')) })\n })\n return replacements\n .sort((left, right) => right.start - left.start)\n .reduce(\n (output, replacement) =>\n `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`,\n code,\n )\n}\n\nfunction importSource(node: JavaScriptNode): JavaScriptNode | undefined {\n if (\n node.type === 'ImportDeclaration' ||\n node.type === 'ExportAllDeclaration' ||\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ImportExpression'\n ) return node.source\n return undefined\n}\n\nfunction visitJavaScript(node: JavaScriptNode, visitor: (node: JavaScriptNode) => void): void {\n visitor(node)\n for (const value of Object.values(node)) {\n if (Array.isArray(value)) {\n for (const child of value) {\n if (isJavaScriptNode(child)) visitJavaScript(child, visitor)\n }\n } else if (isJavaScriptNode(value)) {\n visitJavaScript(value, visitor)\n }\n }\n}\n\nfunction isJavaScriptNode(value: unknown): value is JavaScriptNode {\n return Boolean(value && typeof value === 'object' && 'type' in value && typeof value.type === 'string')\n}\n\nfunction runtimeEntry(builtName: string, sourceRelativePath: string): string {\n const built = fileURLToPath(new URL(`./${builtName}`, import.meta.url))\n if (existsSync(built)) return built\n return fileURLToPath(new URL(`./${sourceRelativePath}`, import.meta.url))\n}\n\nfunction runtimeDependencyAliases(): Record<string, string> {\n const require = createRequire(import.meta.url)\n return Object.fromEntries(\n ['react', 'react/jsx-runtime', 'react-dom', 'react-dom/client', 'react-dom/server']\n .map((specifier) => [specifier, require.resolve(specifier)]),\n )\n}\n\nfunction outputWithExtension(result: BuildResult, extension: string): OutputFile {\n const output = optionalOutputWithExtension(result, extension)\n if (!output) throw new Error(`Executable docs build did not emit a ${extension} file`)\n return output\n}\n\nfunction optionalOutputWithExtension(result: BuildResult, extension: string): OutputFile | undefined {\n return result.outputFiles?.find((output) => extname(output.path) === extension)\n}\n\nfunction assetLoaders(imageLoader: 'dataurl'): Record<string, 'css' | 'dataurl'> {\n return {\n '.avif': imageLoader,\n '.css': 'css',\n '.gif': imageLoader,\n '.jpeg': imageLoader,\n '.jpg': imageLoader,\n '.png': imageLoader,\n '.svg': imageLoader,\n '.webp': imageLoader,\n '.woff': imageLoader,\n '.woff2': imageLoader,\n }\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value)\n}\n","import { createHash } from 'node:crypto'\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n rmSync,\n writeFileSync,\n} from 'node:fs'\nimport { dirname, extname, join, relative, resolve, sep } from 'node:path'\nimport sanitizeHtml from 'sanitize-html'\nimport { DocsError } from './types'\n\nconst MEDIA_EXTENSIONS = new Set([\n '.avif',\n '.gif',\n '.ico',\n '.jpeg',\n '.jpg',\n '.png',\n '.svg',\n '.webp',\n '.woff',\n '.woff2',\n])\n\nconst SOURCE_EXTENSIONS = new Set(['.css', '.js', '.jsx', '.md', '.mdx', '.ts', '.tsx'])\n\n/** Owns all filesystem mutation and hashing for one deterministic docs build. */\nexport class DocsOutput {\n readonly files = new Set<string>()\n\n constructor(\n readonly outputDir: string,\n appDir: string,\n sourceDir: string,\n ) {\n assertSafeOutput(appDir, sourceDir, outputDir)\n if (existsSync(outputDir)) rmSync(outputDir, { recursive: true, force: true })\n mkdirSync(outputDir, { recursive: true })\n }\n\n write(relativePath: string, content: string | Uint8Array): void {\n const path = this.safePath(relativePath)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, content)\n this.files.add(normalizeRelativePath(relativePath))\n }\n\n copyMedia(sourceDir: string, auxiliarySources: Set<string>): void {\n const walk = (directory: string): void => {\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (entry.name.startsWith('.') || entry.name === 'node_modules') continue\n const sourcePath = join(directory, entry.name)\n if (entry.isDirectory()) {\n walk(sourcePath)\n continue\n }\n const extension = extname(entry.name).toLowerCase()\n if (SOURCE_EXTENSIONS.has(extension) || auxiliarySources.has(resolve(sourcePath))) continue\n if (!MEDIA_EXTENSIONS.has(extension)) {\n throw new DocsError(\n `Unsupported documentation media type: ${relative(sourceDir, sourcePath)}`,\n 'docs_media_unsupported',\n [{\n code: 'media_type_unsupported',\n message: extension || '(no extension)',\n file: sourcePath,\n }],\n )\n }\n const mediaPath = `media/${normalizeRelativePath(relative(sourceDir, sourcePath))}`\n const content = extension === '.svg'\n ? sanitizeSvg(readFileSync(sourcePath, 'utf8'), sourcePath)\n : readFileSync(sourcePath)\n this.write(mediaPath, content)\n }\n }\n walk(sourceDir)\n }\n\n hash(): string {\n const hash = createHash('sha256')\n for (const file of [...this.files].sort()) {\n hash.update(file)\n hash.update(readFileSync(join(this.outputDir, file)))\n }\n return hash.digest('hex')\n }\n\n private safePath(relativePath: string): string {\n const path = resolve(this.outputDir, relativePath)\n const rel = relative(this.outputDir, path)\n if (rel === '..' || rel.startsWith(`..${sep}`) || rel === '') {\n throw new DocsError(\n `Refusing documentation artifact outside the output directory: ${relativePath}`,\n 'docs_output_unsafe',\n [{ code: 'artifact_path_escape', message: relativePath }],\n )\n }\n return path\n }\n}\n\nfunction assertSafeOutput(appDir: string, sourceDir: string, outputDir: string): void {\n const appRelative = relative(appDir, outputDir)\n const sourceRelative = relative(sourceDir, outputDir)\n if (\n outputDir === appDir ||\n outputDir === sourceDir ||\n appRelative === '..' ||\n appRelative.startsWith(`..${sep}`) ||\n sourceRelative === '' ||\n (!sourceRelative.startsWith('..') && sourceRelative !== '')\n ) {\n throw new DocsError(\n `Refusing unsafe docs output directory: ${outputDir}`,\n 'docs_output_unsafe',\n [{ code: 'unsafe_output', message: outputDir }],\n )\n }\n}\n\nfunction sanitizeSvg(source: string, sourcePath: string): string {\n const safe = sanitizeHtml(source, {\n allowedTags: [\n 'svg', 'g', 'path', 'circle', 'ellipse', 'line', 'polyline', 'polygon',\n 'rect', 'image', 'defs', 'linearGradient', 'radialGradient', 'stop',\n 'clipPath', 'mask', 'title', 'desc', 'text', 'tspan',\n ],\n allowedAttributes: {\n svg: [\n 'xmlns', 'xmlns:xlink', 'viewBox', 'width', 'height', 'fill', 'stroke',\n 'role', 'aria-label',\n ],\n image: ['href', 'xlink:href', 'x', 'y', 'width', 'height', 'preserveAspectRatio'],\n '*': [\n 'id', 'class', 'd', 'x', 'y', 'x1', 'x2', 'y1', 'y2', 'cx', 'cy',\n 'r', 'rx', 'ry', 'points', 'width', 'height', 'viewBox', 'fill',\n 'fill-rule', 'fill-opacity', 'stroke', 'stroke-width', 'stroke-linecap',\n 'stroke-linejoin', 'stroke-opacity', 'opacity', 'transform', 'offset',\n 'stop-color', 'stop-opacity', 'clip-path', 'mask', 'role', 'aria-label',\n 'aria-hidden', 'font-family', 'font-size', 'font-style', 'font-weight',\n 'letter-spacing', 'text-anchor', 'dominant-baseline',\n ],\n },\n allowedSchemes: ['data'],\n allowProtocolRelative: false,\n disallowedTagsMode: 'discard',\n parser: { lowerCaseTags: false, lowerCaseAttributeNames: false },\n })\n if (!/<svg\\b/i.test(safe)) {\n throw new DocsError(\n `Invalid documentation SVG: ${relative(process.cwd(), sourcePath)}`,\n 'docs_media_invalid',\n [{ code: 'svg_invalid', message: 'Expected an SVG root element', file: sourcePath }],\n )\n }\n return safe\n}\n\nfunction normalizeRelativePath(path: string): string {\n return path.split(sep).join('/')\n}\n","import { createHash } from 'node:crypto'\nimport { markdownUrlForRoute } from './routing'\nimport type { DocsGraph, DocsNavigationNode, DocsPage } from './types'\n\nexport const AGENT_SKILLS_SCHEMA = 'https://schemas.agentskills.io/discovery/0.2.0/schema.json'\n\nexport interface DocsSkillArtifacts {\n name: string\n description: string\n markdown: string\n legacyIndex: Record<string, unknown>\n discoveryIndex: Record<string, unknown>\n}\n\n/** Build one deterministic, installable skill from the same graph as the site. */\nexport function createDocsSkillArtifacts(graph: DocsGraph, baseUrl?: string): DocsSkillArtifacts {\n const name = docsSkillName(graph.config.name)\n const description = docsSkillDescription(graph.config.name, graph.config.description)\n const root = baseUrl?.replace(/\\/$/, '') ?? ''\n const markdown = renderDocsSkill(graph, name, description, root)\n const digest = createHash('sha256').update(markdown).digest('hex')\n\n return {\n name,\n description,\n markdown,\n legacyIndex: {\n skills: [{ name, description, files: ['SKILL.md'] }],\n },\n discoveryIndex: {\n $schema: AGENT_SKILLS_SCHEMA,\n skills: [\n {\n name,\n type: 'skill-md',\n description,\n url: `/.well-known/agent-skills/${name}/skill.md`,\n digest: `sha256:${digest}`,\n },\n ],\n },\n }\n}\n\nexport function docsSkillName(value: string): string {\n const normalized = value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/-{2,}/g, '-')\n return normalized.slice(0, 64).replace(/-+$/g, '') || 'documentation'\n}\n\nfunction docsSkillDescription(name: string, description?: string): string {\n const detail = description?.replace(/\\s+/g, ' ').trim()\n const value = detail\n ? `Use when answering questions, integrating, or implementing work with ${name}. ${detail}`\n : `Use when answering questions, integrating, or implementing work with ${name}.`\n return value.slice(0, 1_024).trim()\n}\n\nfunction renderDocsSkill(\n graph: DocsGraph,\n name: string,\n description: string,\n root: string,\n): string {\n const lines = [\n '---',\n `name: ${JSON.stringify(name)}`,\n `description: ${JSON.stringify(description)}`,\n 'metadata:',\n ' version: \"1.0\"',\n ` source-hash: ${JSON.stringify(graph.sourceHash)}`,\n '---',\n '',\n `# ${graph.config.name}`,\n '',\n graph.config.description ??\n `Use the published ${graph.config.name} documentation as the source of truth.`,\n '',\n '## Grounding workflow',\n '',\n `1. Read [the documentation index](${root}/llms.txt) to discover the available pages.`,\n graph.config.mcp.access === 'public'\n ? `2. Prefer the read-only MCP server at \\`${root}/mcp\\` for ranked search and exact page reads.`\n : `2. Search the index, then open the relevant page Markdown directly.`,\n `3. Read a page's canonical Markdown before making implementation claims or quoting commands.`,\n `4. Treat this release as authoritative; do not mix instructions from another version or hostname.`,\n '',\n '## Documentation map',\n '',\n ...renderNavigation(graph.navigation, graph.pages, root),\n '## Constraints',\n '',\n '- Do not invent APIs, commands, configuration keys, or supported behavior.',\n '- Preserve security, authentication, billing, and deployment boundaries stated in the docs.',\n '- When pages disagree, prefer the more specific page and report the conflict.',\n '- Link the exact source page in the final answer when the client supports citations.',\n '',\n ]\n return lines.join('\\n')\n}\n\nfunction renderNavigation(\n navigation: DocsNavigationNode[],\n pages: DocsPage[],\n root: string,\n): string[] {\n const byRoute = new Map(pages.map((page) => [page.route, page]))\n const lines: string[] = []\n const seen = new Set<string>()\n\n const visit = (nodes: DocsNavigationNode[], depth: number): void => {\n for (const node of nodes) {\n if (node.kind === 'group') {\n lines.push(`${'#'.repeat(Math.min(depth + 2, 6))} ${node.label}`, '')\n visit(node.items, depth + 1)\n continue\n }\n if (node.kind !== 'page' || seen.has(node.route)) continue\n const page = byRoute.get(node.route)\n if (!page || page.hidden) continue\n seen.add(page.route)\n const markdownRoute = markdownUrlForRoute(page.route)\n lines.push(renderPageLink(page, root, markdownRoute))\n }\n }\n\n visit(navigation, 1)\n const remaining = pages.filter((page) => !page.hidden && !seen.has(page.route))\n if (remaining.length > 0) {\n lines.push('### More', '')\n for (const page of remaining) {\n const markdownRoute = markdownUrlForRoute(page.route)\n lines.push(renderPageLink(page, root, markdownRoute))\n }\n }\n lines.push('')\n return lines\n}\n\nfunction renderPageLink(page: DocsPage, root: string, markdownRoute: string): string {\n return `- [${page.title}](${root}${markdownRoute})` +\n `${page.description ? ` — ${page.description}` : ''}`\n}\n","import { createElement } from 'react'\nimport { renderToString } from 'react-dom/server'\nimport type {\n DocsConfig,\n DocsNavigationNode,\n DocsPage,\n DocsRuntimeData,\n DocsRuntimeRouteDocument,\n} from './types'\nimport { DocsApp } from './runtime/app'\nimport { joinSiteUrl, markdownUrlForRoute } from './routing'\nimport { escapeHtml } from './text'\nexport { DOCS_CSS } from './runtime/styles'\n\nconst ASSET_ROOT = '/_docs/assets'\n\nexport interface DocsPageRenderOptions {\n config: DocsConfig\n page: DocsPage\n pages: DocsPage[]\n navigation: DocsNavigationNode[]\n}\n\nexport interface DocsPageRuntime {\n data: DocsRuntimeData\n document: DocsRuntimeRouteDocument\n}\n\nexport function renderPage(options: DocsPageRenderOptions, assets: {\n customStylesheets?: string[]\n markup?: string\n runtimeModule?: boolean\n runtimeScript?: string\n} = {}, runtime = createPageRuntime(options)): string {\n const { config, page } = options\n const { data: runtimeData, document: runtimeDocument } = runtime\n const accent = validCssColor(config.theme.accent) ? config.theme.accent : '#635bff'\n const background = validCssColor(config.theme.background) ? config.theme.background : '#fbfcfe'\n const backgroundDark = validCssColor(config.theme.backgroundDark) ? config.theme.backgroundDark : '#0c0e14'\n const defaultMode = config.theme.defaultMode ?? 'system'\n const bodyFont = cssFontStack(config.theme.bodyFont?.family)\n const headingFont = cssFontStack(config.theme.headingFont?.family ?? config.theme.bodyFont?.family)\n const monoFont = cssMonoFontStack(config.theme.monoFont?.family)\n const fontFaces = renderFontFaces(config)\n const fontPreloads = renderFontPreloads(config)\n const markup = assets.markup ?? renderToString(createElement(DocsApp, { data: runtimeData }))\n\n return `<!doctype html>\n<html lang=\"en\" data-theme-mode=\"${defaultMode}\" data-theme-strict=\"${config.theme.strictMode ? 'true' : 'false'}\" data-code-mode=\"${config.theme.codeBlockMode ?? 'dark'}\" data-background-decoration=\"${config.theme.backgroundDecoration ?? 'none'}\" data-eyebrow-style=\"${config.theme.eyebrowStyle ?? 'section'}\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>${escapeHtml(runtimeDocument.title)}</title>\n <meta name=\"description\" content=\"${escapeHtml(runtimeDocument.description ?? '')}\">\n <meta name=\"generator\" content=\"DeepSpace Docs Orbit\">\n <meta name=\"color-scheme\" content=\"light dark\">\n ${runtimeDocument.robots ? `<meta name=\"robots\" content=\"${escapeHtml(runtimeDocument.robots)}\">` : ''}\n ${runtimeDocument.canonical ? `<link rel=\"canonical\" href=\"${escapeHtml(runtimeDocument.canonical)}\">` : ''}\n <meta property=\"og:type\" content=\"article\">\n <meta property=\"og:title\" content=\"${escapeHtml(runtimeDocument.openGraph['og:title'] ?? '')}\">\n <meta property=\"og:description\" content=\"${escapeHtml(runtimeDocument.openGraph['og:description'] ?? '')}\">\n ${runtimeDocument.openGraph['og:url'] ? `<meta property=\"og:url\" content=\"${escapeHtml(runtimeDocument.openGraph['og:url'])}\">` : ''}\n ${config.seo.ogImage ? `<meta property=\"og:image\" content=\"${escapeHtml(config.seo.ogImage)}\">` : ''}\n ${renderCustomMeta(config.seo.metaTags)}\n ${config.theme.favicon ? `<link rel=\"icon\" href=\"${escapeHtml(config.theme.favicon)}\">` : ''}\n ${fontPreloads}\n <link rel=\"stylesheet\" href=\"${ASSET_ROOT}/docs.css\">\n ${(assets.customStylesheets ?? []).map((href) => `<link rel=\"stylesheet\" href=\"${escapeHtml(href)}\">`).join('\\n ')}\n <style>${fontFaces}:root{--docs-accent:${accent};--docs-brand-bg:${background};--docs-brand-bg-dark:${backgroundDark};--docs-font-body:${bodyFont};--docs-font-heading:${headingFont};--docs-font-mono:${monoFont}}</style>\n <script src=\"${ASSET_ROOT}/docs-theme.js\"></script>\n</head>\n<body data-route=\"${escapeHtml(page.route)}\">\n <div id=\"deepspace-docs-root\">${markup}</div>\n <script id=\"deepspace-docs-data\" type=\"application/json\">${serializeBootstrap(runtimeData)}</script>\n <script${assets.runtimeModule ? ' type=\"module\"' : ''} src=\"${escapeHtml(assets.runtimeScript ?? `${ASSET_ROOT}/docs-runtime.js`)}\" defer></script>\n</body>\n</html>`\n}\n\nfunction renderFontFaces(config: DocsConfig): string {\n const fonts = [config.theme.bodyFont, config.theme.headingFont, config.theme.monoFont]\n const seen = new Set<string>()\n return fonts.flatMap((font) => {\n if (!font?.source || !validFontSource(font.source)) return []\n const key = `${font.family}:${font.source}:${font.weight ?? 'normal'}`\n if (seen.has(key)) return []\n seen.add(key)\n const family = safeFontFamily(font.family)\n const weight = typeof font.weight === 'number' || /^(?:normal|bold|[1-9]00|[1-9]00\\s+[1-9]00)$/i.test(String(font.weight))\n ? String(font.weight ?? 'normal')\n : 'normal'\n const format = font.format && /^[a-z0-9-]{2,20}$/i.test(font.format)\n ? ` format(\"${font.format}\")`\n : ''\n return [`@font-face{font-family:\"${family}\";src:url(\"${font.source}\")${format};font-weight:${weight};font-display:swap}`]\n }).join('')\n}\n\nfunction renderFontPreloads(config: DocsConfig): string {\n const sources = new Set(\n [config.theme.bodyFont, config.theme.headingFont, config.theme.monoFont]\n .flatMap((font) => font?.source && validFontSource(font.source) ? [font.source] : []),\n )\n return [...sources]\n .map((source) => `<link rel=\"preload\" href=\"${escapeHtml(source)}\" as=\"font\" type=\"font/woff2\" crossorigin>`)\n .join('\\n ')\n}\n\nfunction renderCustomMeta(metaTags: Record<string, string> | undefined): string {\n if (!metaTags) return ''\n return Object.entries(metaTags)\n .filter(([name]) => /^[a-z0-9][a-z0-9._:-]*$/i.test(name))\n .map(([name, content]) => `<meta name=\"${escapeHtml(name)}\" content=\"${escapeHtml(content)}\">`)\n .join('\\n ')\n}\n\nexport function createNotFoundPage(): DocsPage {\n return {\n sourcePath: '',\n relativePath: '',\n route: '/404',\n title: 'Page not found',\n description: 'The documentation page you requested does not exist.',\n hidden: true,\n noindex: true,\n markdown: '',\n html: '<p>The page may have moved. Search this documentation or return to the documentation home.</p><p><a href=\"/\">Go to documentation home</a></p>',\n text: 'Page not found',\n headings: [],\n sourceFormat: 'generated',\n kind: 'page',\n }\n}\n\nexport function renderNotFound(\n config: DocsConfig,\n navigation: DocsNavigationNode[],\n assets: Parameters<typeof renderPage>[1] = {},\n): string {\n const page = createNotFoundPage()\n return renderPage({ config, page, pages: [page], navigation }, assets)\n}\n\nexport function createRuntimeRouteDocument(options: {\n config: DocsConfig\n page: DocsPage\n pages: DocsPage[]\n navigation: DocsNavigationNode[]\n}): DocsRuntimeRouteDocument {\n return createPageRuntime(options).document\n}\n\nexport function createPageRuntime(options: DocsPageRenderOptions): DocsPageRuntime {\n const { config, page, pages, navigation } = options\n const data = createRuntimeData(config, page, pages, navigation)\n return {\n data,\n document: createRuntimeRouteDocumentFromData(config, page, data),\n }\n}\n\nfunction createRuntimeRouteDocumentFromData(\n config: DocsConfig,\n page: DocsPage,\n runtimeData: DocsRuntimeData,\n): DocsRuntimeRouteDocument {\n const data = {\n page: runtimeData.page,\n breadcrumbs: runtimeData.breadcrumbs,\n ...(runtimeData.previous ? { previous: runtimeData.previous } : {}),\n ...(runtimeData.next ? { next: runtimeData.next } : {}),\n }\n const canonical = config.url ? joinSiteUrl(config.url, page.route) : null\n const description = page.description ?? config.description ?? `${page.title} — ${config.name}`\n return {\n canonical,\n data,\n description,\n openGraph: {\n 'og:title': page.title,\n 'og:description': description,\n 'og:url': canonical,\n },\n robots: page.noindex ? 'noindex, nofollow' : null,\n title: `${page.title} · ${config.name}`,\n }\n}\n\nexport function renderRedirect(to: string): string {\n const safe = escapeHtml(to)\n return `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"robots\" content=\"noindex\"><meta http-equiv=\"refresh\" content=\"0;url=${safe}\"><link rel=\"canonical\" href=\"${safe}\"><title>Redirecting…</title></head><body><p>Redirecting to <a href=\"${safe}\">${safe}</a>.</p></body></html>`\n}\n\nexport function createRuntimeData(\n config: DocsConfig,\n page: DocsPage,\n pages: DocsPage[],\n navigation: DocsNavigationNode[],\n): DocsRuntimeData {\n const ordered = orderedRoutes(navigation)\n const pageIndex = ordered.indexOf(page.route)\n const previous = pageIndex > 0\n ? pages.find((candidate) => candidate.route === ordered[pageIndex - 1])\n : undefined\n const next = pageIndex >= 0\n ? pages.find((candidate) => candidate.route === ordered[pageIndex + 1])\n : undefined\n return {\n config: {\n name: config.name,\n ...(config.description ? { description: config.description } : {}),\n theme: config.theme,\n links: config.links,\n footer: config.footer,\n assistant: config.assistant,\n mcp: config.mcp,\n contextual: config.contextual,\n },\n page: {\n route: page.route,\n title: page.title,\n ...(page.description ? { description: page.description } : {}),\n html: page.html,\n headings: page.headings,\n kind: page.kind,\n markdownUrl: markdownUrlForRoute(page.route),\n ...(page.openapi ? { openapi: page.openapi } : {}),\n },\n navigation,\n breadcrumbs: findBreadcrumbs(navigation, page.route) ?? [config.name, page.title],\n ...(previous ? { previous: { route: previous.route, title: previous.title } } : {}),\n ...(next ? { next: { route: next.route, title: next.title } } : {}),\n }\n}\n\nfunction findBreadcrumbs(\n nodes: DocsNavigationNode[],\n route: string,\n parents: string[] = [],\n): string[] | undefined {\n for (const node of nodes) {\n if (node.kind === 'page' && node.route === route) return [...parents, node.label]\n if (node.kind === 'group') {\n const result = findBreadcrumbs(node.items, route, [...parents, node.label])\n if (result) return result\n }\n }\n return undefined\n}\n\nfunction orderedRoutes(nodes: DocsNavigationNode[]): string[] {\n return nodes.flatMap((node): string[] => {\n if (node.kind === 'page') return [node.route]\n if (node.kind === 'group') return orderedRoutes(node.items)\n return []\n })\n}\n\nfunction serializeBootstrap(data: DocsRuntimeData): string {\n return JSON.stringify(data)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\nfunction validCssColor(value: string | undefined): value is string {\n if (!value) return false\n return /^(?:#[0-9a-f]{3,8}|(?:rgb|hsl)a?\\([0-9.,%\\s]+\\)|[a-z]{3,20})$/i.test(value)\n}\n\nfunction cssFontStack(value: string | undefined): string {\n const family = safeFontFamily(value ?? 'Inter')\n return `${family},ui-sans-serif,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif`\n}\n\nfunction cssMonoFontStack(value: string | undefined): string {\n const family = safeFontFamily(value ?? 'Geist Mono')\n return `${family},ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace`\n}\n\nfunction safeFontFamily(value: string): string {\n return /^[a-z0-9 ,.'-]{1,80}$/i.test(value) ? value : 'Inter'\n}\n\nfunction validFontSource(value: string): boolean {\n return /^(?:\\/_docs\\/[a-z0-9_./%-]+|https:\\/\\/[^\\s\"'()<>]+)$/i.test(value)\n}\n\nfunction themeBootstrap(): void {\n try {\n const stored = localStorage.getItem('deepspace-docs-theme')\n const configured = document.documentElement.dataset.themeMode || 'system'\n const strict = document.documentElement.dataset.themeStrict === 'true'\n const mode = !strict && (stored === 'light' || stored === 'dark' || stored === 'system')\n ? stored\n : configured\n document.documentElement.dataset.themeMode = mode\n document.documentElement.dataset.theme = mode === 'system'\n ? (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : mode\n } catch {\n document.documentElement.dataset.theme = 'light'\n }\n}\n\nexport const DOCS_THEME_BOOTSTRAP = `(${themeBootstrap.toString()})()\\n`\n","import type {\n ReactNode,\n ReactElement,\n} from 'react'\nimport {\n useCallback,\n useEffect,\n useState,\n} from 'react'\nimport type { DocsRuntimeData } from '../types'\nimport { Article, ContextRail } from './article'\nimport { AssistantLauncher, DocsAssistant, type AssistantSeed } from './assistant'\nimport { DesktopSidebar, DocsHeader, MobileNavigation } from './navigation'\nimport { SearchCommand } from './search'\n\nexport interface DocsAppProps {\n data: DocsRuntimeData\n /** Rendered page body. Omit children to use the compiler's static HTML. */\n children?: ReactNode\n navigating?: boolean\n onNavigate?: (href: string) => void\n onPrefetch?: (href: string) => void\n}\n\nexport function DocsApp({\n data,\n children,\n navigating = false,\n onNavigate,\n}: DocsAppProps): ReactElement {\n const [mobileNavOpen, setMobileNavOpen] = useState(false)\n const [searchOpen, setSearchOpen] = useState(false)\n const [assistantOpen, setAssistantOpen] = useState(false)\n const [assistantSeed, setAssistantSeed] = useState<AssistantSeed>({ id: 0, submit: false, value: '' })\n\n const openAssistant = useCallback((seed = '', submit = false) => {\n setAssistantSeed((current) => ({ id: current.id + 1, submit, value: seed }))\n setSearchOpen(false)\n setAssistantOpen(true)\n }, [])\n\n useEffect(() => {\n const handleKeydown = (event: globalThis.KeyboardEvent): void => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {\n event.preventDefault()\n setSearchOpen(true)\n }\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'i') {\n event.preventDefault()\n if (data.config.assistant.access !== 'disabled') openAssistant()\n }\n }\n document.addEventListener('keydown', handleKeydown)\n return () => document.removeEventListener('keydown', handleKeydown)\n }, [data.config.assistant.access, openAssistant])\n\n useEffect(() => {\n setMobileNavOpen(false)\n setSearchOpen(false)\n }, [data.page.route])\n\n return (\n <div\n aria-busy={navigating || undefined}\n className={`${assistantOpen ? 'docs-app is-assistant-open' : 'docs-app'}${navigating ? ' is-navigating' : ''}`}\n >\n <a className=\"docs-skip-link\" href=\"#docs-content\">Skip to main content</a>\n <DocsHeader\n data={data}\n onMenuOpen={() => setMobileNavOpen(true)}\n onSearchOpen={() => setSearchOpen(true)}\n />\n <div className=\"docs-frame\">\n <DesktopSidebar data={data} />\n <main className=\"docs-main\" id=\"docs-content\">\n <div className=\"docs-reader-grid\">\n <Article data={data} onAssistantOpen={openAssistant}>{children}</Article>\n <ContextRail data={data} />\n </div>\n </main>\n </div>\n <MobileNavigation\n data={data}\n onClose={() => setMobileNavOpen(false)}\n open={mobileNavOpen}\n />\n <SearchCommand\n assistantEnabled={data.config.assistant.access !== 'disabled'}\n name={data.config.name}\n onAssistantOpen={openAssistant}\n onClose={() => setSearchOpen(false)}\n onNavigate={onNavigate}\n open={searchOpen}\n />\n {data.config.assistant.access !== 'disabled' && (\n <>\n <AssistantLauncher\n name={data.config.name}\n onOpen={() => openAssistant()}\n onSubmit={(question) => openAssistant(question, true)}\n open={assistantOpen}\n />\n <DocsAssistant\n access={data.config.assistant.access}\n name={data.config.name}\n onClose={() => setAssistantOpen(false)}\n open={assistantOpen}\n route={data.page.route}\n seed={assistantSeed}\n suggestions={data.config.assistant.suggestions}\n />\n </>\n )}\n </div>\n )\n}\n","import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport type { DocsRuntimeData } from '../types'\nimport { errorMessage, safeStorageGet, safeStorageSet, writeClipboardText } from './browser'\nimport { ChevronRightIcon } from './icons'\nimport { PageActions } from './page-actions'\n\nexport function Article({\n children,\n data,\n onAssistantOpen,\n}: {\n children?: ReactNode\n data: DocsRuntimeData\n onAssistantOpen: (seed?: string) => void\n}): ReactElement {\n const articleRef = useRef<HTMLElement>(null)\n useArticleEnhancements(articleRef, data, onAssistantOpen)\n return (\n <article className=\"docs-article\" ref={articleRef}>\n <Breadcrumbs items={data.breadcrumbs} />\n <header className=\"docs-article-header\">\n <div className=\"docs-article-meta\">\n {data.config.theme.eyebrowStyle !== 'none' && (\n <div className=\"docs-eyebrow\">{\n data.page.kind === 'openapi'\n ? 'API reference'\n : data.config.theme.eyebrowStyle === 'breadcrumbs'\n ? data.breadcrumbs.join(' / ')\n : data.breadcrumbs[0] ?? 'Documentation'\n }</div>\n )}\n <PageActions data={data} onAssistantOpen={onAssistantOpen} />\n </div>\n <h1>{data.page.title}</h1>\n {data.page.description && <p className=\"docs-lede\">{data.page.description}</p>}\n </header>\n {children ?? <div className=\"docs-prose\" dangerouslySetInnerHTML={{ __html: data.page.html }} />}\n {data.page.openapi?.playground && <ApiPlayground operation={data.page.openapi} />}\n <nav className=\"docs-pagination\" aria-label=\"Page navigation\">\n {data.previous ? (\n <a rel=\"prev\" href={data.previous.route}><small>Previous</small><span><ChevronRightIcon className=\"is-back\" />{data.previous.title}</span></a>\n ) : <span />}\n {data.next ? (\n <a rel=\"next\" href={data.next.route}><small>Next</small><span>{data.next.title}<ChevronRightIcon /></span></a>\n ) : <span />}\n </nav>\n </article>\n )\n}\n\nfunction Breadcrumbs({ items }: { items: string[] }): ReactElement {\n return (\n <nav className=\"docs-breadcrumbs\" aria-label=\"Breadcrumb\">\n {items.map((item, index) => (\n <span key={`${item}:${items.slice(0, index + 1).join('/')}`}>{index > 0 && <ChevronRightIcon />}{item}</span>\n ))}\n </nav>\n )\n}\n\nexport function ContextRail({\n data,\n}: {\n data: DocsRuntimeData\n}): ReactElement {\n const headings = useMemo(\n () => data.page.headings.filter((heading) => heading.depth === 2 || heading.depth === 3),\n [data.page.headings],\n )\n const [active, setActive] = useState(headings[0]?.id ?? '')\n useEffect(() => setActive(headings[0]?.id ?? ''), [headings])\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined') return\n const elements = headings.map((heading) => document.getElementById(heading.id)).filter(Boolean) as HTMLElement[]\n const observer = new IntersectionObserver((entries) => {\n const visible = entries.filter((entry) => entry.isIntersecting).sort((left, right) => left.boundingClientRect.top - right.boundingClientRect.top)\n if (visible[0]?.target.id) setActive(visible[0].target.id)\n }, { rootMargin: '-88px 0px -68% 0px', threshold: [0, 1] })\n elements.forEach((element) => observer.observe(element))\n return () => observer.disconnect()\n }, [headings])\n return (\n <aside className=\"docs-context-rail\" aria-label=\"Page context\">\n {headings.length > 0 && (\n <nav className=\"docs-outline\" aria-label=\"On this page\">\n <h2>On this page</h2>\n {headings.map((heading) => (\n <a\n aria-current={active === heading.id ? 'location' : undefined}\n className={`${heading.depth === 3 ? 'depth-3 ' : ''}${active === heading.id ? 'is-active' : ''}`}\n href={`#${heading.id}`}\n key={heading.id}\n >{heading.text}</a>\n ))}\n </nav>\n )}\n </aside>\n )\n}\n\n\nfunction ApiPlayground({ operation }: { operation: NonNullable<DocsRuntimeData['page']['openapi']> }): ReactElement | null {\n const [body, setBody] = useState('')\n const [token, setToken] = useState('')\n const [responseText, setResponseText] = useState('No request sent.')\n const [sending, setSending] = useState(false)\n if (!operation.baseUrl) return null\n const url = `${operation.baseUrl.replace(/\\/$/, '')}${operation.path}`\n const send = async (): Promise<void> => {\n setSending(true)\n setResponseText('Sending request…')\n try {\n const headers: Record<string, string> = {}\n if (token) headers.Authorization = `Bearer ${token}`\n if (body.trim()) headers['Content-Type'] = 'application/json'\n const response = await fetch(url, {\n method: operation.method,\n headers,\n body: ['GET', 'HEAD'].includes(operation.method) ? undefined : body.trim() || undefined,\n })\n const text = await response.text()\n setResponseText(`${response.status} ${response.statusText}\\n\\n${text}`)\n } catch (error) {\n setResponseText(errorMessage(error))\n } finally {\n setSending(false)\n }\n }\n return (\n <section className=\"docs-playground\" data-playground>\n <div className=\"docs-playground-title\"><div><span className={`method method-${operation.method.toLowerCase()}`}>{operation.method}</span><strong>Try this operation</strong></div><code>{url}</code></div>\n <p>Requests run in your browser. Tokens stay in memory and never enter search or assistant context.</p>\n <label><span>Bearer token</span><input type=\"password\" autoComplete=\"off\" value={token} onChange={(event) => setToken(event.target.value)} placeholder=\"Optional\" /></label>\n <label><span>JSON body</span><textarea rows={7} spellCheck=\"false\" value={body} onChange={(event) => setBody(event.target.value)} placeholder=\"{}\" /></label>\n <button type=\"button\" disabled={sending} onClick={send}>{sending ? 'Sending…' : `Send ${operation.method} request`}</button>\n <pre aria-live=\"polite\">{responseText}</pre>\n </section>\n )\n}\n\nfunction useArticleEnhancements(\n articleRef: RefObject<HTMLElement | null>,\n data: DocsRuntimeData,\n onAssistantOpen: (seed?: string) => void,\n): void {\n useEffect(() => {\n const article = articleRef.current\n if (!article) return\n const cleanups: Array<() => void> = []\n article.querySelectorAll<HTMLPreElement>('.docs-prose pre').forEach((pre) => {\n if (pre.querySelector('.docs-code-actions')) return\n const controls = document.createElement('div')\n controls.className = 'docs-code-actions'\n const copy = document.createElement('button')\n copy.type = 'button'\n copy.setAttribute('aria-label', 'Copy code')\n copy.textContent = 'Copy'\n const copyHandler = async (): Promise<void> => {\n await writeClipboardText(pre.querySelector('code')?.textContent ?? pre.textContent ?? '')\n copy.textContent = 'Copied'\n window.setTimeout(() => { copy.textContent = 'Copy' }, 1400)\n }\n copy.addEventListener('click', copyHandler)\n controls.appendChild(copy)\n if (data.config.assistant.access !== 'disabled') {\n const ask = document.createElement('button')\n ask.type = 'button'\n ask.textContent = 'Ask'\n ask.setAttribute('aria-label', 'Ask the documentation assistant about this code')\n const askHandler = (): void => {\n const code = pre.querySelector('code')?.textContent?.trim().slice(0, 1200) ?? ''\n onAssistantOpen(`Explain this ${data.page.title} example and the important details:\\n\\n${code}`)\n }\n ask.addEventListener('click', askHandler)\n controls.appendChild(ask)\n cleanups.push(() => ask.removeEventListener('click', askHandler))\n }\n pre.appendChild(controls)\n cleanups.push(() => { copy.removeEventListener('click', copyHandler); controls.remove() })\n })\n\n article.querySelectorAll<HTMLElement>('[data-tab-group]').forEach((group, groupIndex) => {\n if (group.querySelector(':scope > .docs-tab-buttons')) return\n const tabs = Array.from(group.querySelectorAll<HTMLElement>(':scope > [data-tab]'))\n if (tabs.length === 0) return\n const controls = document.createElement('div')\n controls.className = 'docs-tab-buttons'\n controls.setAttribute('role', 'tablist')\n const labels = tabs.map((tab, tabIndex) => tab.dataset.tabTitle ?? `Tab ${tabIndex + 1}`)\n const activate = (activeIndex: number, broadcast = false): void => {\n tabs.forEach((tab, index) => { tab.hidden = index !== activeIndex; tab.setAttribute('role', 'tabpanel') })\n Array.from(controls.querySelectorAll('button')).forEach((button, index) => {\n button.setAttribute('aria-selected', index === activeIndex ? 'true' : 'false')\n button.setAttribute('tabindex', index === activeIndex ? '0' : '-1')\n })\n if (broadcast) {\n const label = labels[activeIndex]\n if (label) {\n safeStorageSet('deepspace-docs-tab-selection', label)\n document.dispatchEvent(new CustomEvent('deepspace-docs-tab-change', {\n detail: { label, source: group },\n }))\n }\n }\n }\n tabs.forEach((tab, tabIndex) => {\n const button = document.createElement('button')\n button.type = 'button'\n button.id = `docs-tab-${groupIndex}-${tabIndex}`\n button.setAttribute('role', 'tab')\n button.textContent = labels[tabIndex]\n tab.setAttribute('aria-labelledby', button.id)\n const click = (): void => activate(tabIndex, true)\n const keydown = (event: globalThis.KeyboardEvent): void => {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return\n event.preventDefault()\n const next = event.key === 'Home' ? 0 : event.key === 'End' ? tabs.length - 1 : (tabIndex + (event.key === 'ArrowRight' ? 1 : -1) + tabs.length) % tabs.length\n activate(next)\n controls.querySelectorAll('button')[next]?.focus()\n }\n button.addEventListener('click', click)\n button.addEventListener('keydown', keydown)\n controls.appendChild(button)\n cleanups.push(() => { button.removeEventListener('click', click); button.removeEventListener('keydown', keydown) })\n })\n const title = group.querySelector(':scope > .docs-code-group-title')\n if (title) group.insertBefore(controls, title.nextSibling)\n if (!title) group.insertBefore(controls, group.firstChild)\n const sync = (event: Event): void => {\n const detail = (event as CustomEvent<{ label?: string; source?: Element }>).detail\n if (!detail?.label || detail.source === group) return\n const matchingIndex = labels.findIndex((label) => label === detail.label)\n if (matchingIndex >= 0) activate(matchingIndex)\n }\n document.addEventListener('deepspace-docs-tab-change', sync)\n const stored = safeStorageGet('deepspace-docs-tab-selection')\n const initial = stored ? labels.findIndex((label) => label === stored) : -1\n activate(initial >= 0 ? initial : 0)\n cleanups.push(() => { document.removeEventListener('deepspace-docs-tab-change', sync); controls.remove() })\n })\n return () => cleanups.reverse().forEach((cleanup) => cleanup())\n }, [articleRef, data.config.assistant.access, data.page.route, data.page.title, onAssistantOpen])\n}\n","/** Copy text while preserving focus when the Clipboard API is unavailable. */\nexport async function writeClipboardText(text: string): Promise<void> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text)\n return\n }\n } catch {\n // A user gesture can still copy through the document when access is withheld.\n }\n\n const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.readOnly = true\n textarea.style.position = 'fixed'\n textarea.style.inset = '0 auto auto 0'\n textarea.style.opacity = '0'\n textarea.style.pointerEvents = 'none'\n document.body.appendChild(textarea)\n textarea.focus({ preventScroll: true })\n textarea.select()\n const copied = document.execCommand('copy')\n textarea.remove()\n activeElement?.focus({ preventScroll: true })\n if (!copied) throw new Error('Unable to copy text')\n}\n\nexport function externalProps(href: string): { target?: '_blank'; rel?: 'noopener noreferrer' } {\n return isExternal(href) ? { target: '_blank', rel: 'noopener noreferrer' } : {}\n}\n\nexport function isExternal(href: string): boolean {\n return /^https?:\\/\\//i.test(href)\n}\n\nexport function safeStorageGet(key: string): string | null {\n try { return localStorage.getItem(key) } catch { return null }\n}\n\nexport function safeStorageSet(key: string, value: string): void {\n try { localStorage.setItem(key, value) } catch { /* storage is optional */ }\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","import type { ReactElement, SVGProps } from 'react'\n\ntype IconProps = SVGProps<SVGSVGElement>\n\nfunction Icon({ children, ...props }: IconProps): ReactElement {\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n {...props}\n >\n {children}\n </svg>\n )\n}\n\nexport function OrbitMark(props: IconProps): ReactElement {\n return (\n <Icon viewBox=\"0 0 32 32\" {...props}>\n <path d=\"M16 2.5c.5 7.7 5.8 13 13.5 13.5-7.7.5-13 5.8-13.5 13.5C15.5 21.8 10.2 16.5 2.5 16 10.2 15.5 15.5 10.2 16 2.5Z\" fill=\"currentColor\" />\n <circle cx=\"16\" cy=\"16\" fill=\"var(--docs-bg)\" r=\"3.25\" />\n <path d=\"M4.5 22.7c5.6-2 16.4-8.3 22.7-14.1\" opacity=\".45\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </Icon>\n )\n}\n\nexport function SearchIcon(props: IconProps): ReactElement {\n return <Icon {...props}><circle cx=\"11\" cy=\"11\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" /><path d=\"m16 16 4 4\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.8\" /></Icon>\n}\n\nexport function SparkIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M12 2.8c.3 5 3.7 8.4 8.7 8.7-5 .3-8.4 3.7-8.7 8.7-.3-5-3.7-8.4-8.7-8.7 5-.3 8.4-3.7 8.7-8.7Z\" stroke=\"currentColor\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" /><path d=\"M19 3v4M21 5h-4\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.4\" /></Icon>\n}\n\nexport function MenuIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M4 7h16M4 12h16M4 17h16\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.8\" /></Icon>\n}\n\nexport function CloseIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"m6 6 12 12M18 6 6 18\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.8\" /></Icon>\n}\n\nexport function SunIcon(props: IconProps): ReactElement {\n return <Icon {...props}><circle cx=\"12\" cy=\"12\" r=\"3.5\" stroke=\"currentColor\" strokeWidth=\"1.6\" /><path d=\"M12 2.5v2M12 19.5v2M2.5 12h2M19.5 12h2M5.3 5.3l1.4 1.4M17.3 17.3l1.4 1.4M18.7 5.3l-1.4 1.4M6.7 17.3l-1.4 1.4\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function MoonIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M19.5 14.8A8 8 0 0 1 9.2 4.5 8 8 0 1 0 19.5 14.8Z\" stroke=\"currentColor\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function SystemIcon(props: IconProps): ReactElement {\n return <Icon {...props}><rect x=\"3\" y=\"4\" width=\"18\" height=\"13\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.6\" /><path d=\"M8 21h8M12 17v4\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function ChevronRightIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" /></Icon>\n}\n\nexport function ChevronDownIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"m5 9 7 7 7-7\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" /></Icon>\n}\n\nexport function ExternalIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M14 4h6v6M20 4l-9 9\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" /><path d=\"M18 13v5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function CopyIcon(props: IconProps): ReactElement {\n return <Icon {...props}><rect x=\"8\" y=\"8\" width=\"11\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.6\" /><path d=\"M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2\" stroke=\"currentColor\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function CheckIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"m5 12.5 4.2 4L19 7\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.9\" /></Icon>\n}\n\nexport function FileIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M6 3.5h8l4 4V20a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1Z\" stroke=\"currentColor\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" /><path d=\"M14 3.5v4h4M8 12h7M8 16h7\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function MessageIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M5.5 18.5 4 21l3.5-1.2A8.5 8.5 0 1 0 5.5 18.5Z\" stroke=\"currentColor\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" /><path d=\"M8 10h8M8 14h5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function TerminalIcon(props: IconProps): ReactElement {\n return <Icon {...props}><rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.6\" /><path d=\"m7 9 3 3-3 3M12.5 15H17\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function EditorIcon(props: IconProps): ReactElement {\n return <Icon {...props}><rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.6\" /><path d=\"M8 4.5v15M11.5 9h5M11.5 12h5M11.5 15h3\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.6\" /></Icon>\n}\n\nexport function SendIcon(props: IconProps): ReactElement {\n return <Icon {...props}><path d=\"M12 18V6M7.5 10.5 12 6l4.5 4.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" /></Icon>\n}\n\nexport function StopIcon(props: IconProps): ReactElement {\n return <Icon {...props}><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" fill=\"currentColor\" /></Icon>\n}\n","import { useEffect, useRef, useState, type ReactElement } from 'react'\nimport type { DocsContextualAction, DocsRuntimeData } from '../types'\nimport { writeClipboardText } from './browser'\nimport {\n CheckIcon,\n ChevronDownIcon,\n CopyIcon,\n EditorIcon,\n ExternalIcon,\n FileIcon,\n MessageIcon,\n OrbitMark,\n TerminalIcon,\n} from './icons'\n\nexport function PageActions({\n data,\n onAssistantOpen,\n}: {\n data: DocsRuntimeData\n onAssistantOpen: (seed?: string) => void\n}): ReactElement | null {\n const [copied, setCopied] = useState<DocsContextualAction | null>(null)\n const detailsRef = useRef<HTMLDetailsElement>(null)\n const actions = data.config.contextual.actions.filter((action) => {\n if ((action === 'copy' || action === 'view' || action === 'chatgpt' || action === 'claude') && data.page.route === '/404') return false\n if (action === 'assistant' && data.config.assistant.access === 'disabled') return false\n if (\n (action === 'mcp' || action === 'add-mcp' || action === 'cursor' || action === 'vscode')\n && data.config.mcp.access !== 'public'\n ) return false\n return true\n })\n const primary = actions[0]\n\n useEffect(() => {\n const closeOnPointerDown = (event: PointerEvent): void => {\n const details = detailsRef.current\n if (details && !details.contains(event.target as Node)) details.open = false\n }\n const closeOnEscape = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && detailsRef.current?.open) {\n detailsRef.current.open = false\n detailsRef.current.querySelector('summary')?.focus()\n }\n }\n document.addEventListener('pointerdown', closeOnPointerDown)\n document.addEventListener('keydown', closeOnEscape)\n return () => {\n document.removeEventListener('pointerdown', closeOnPointerDown)\n document.removeEventListener('keydown', closeOnEscape)\n }\n }, [])\n\n if (!primary) return null\n\n const markCopied = (action: DocsContextualAction): void => {\n setCopied(action)\n window.setTimeout(() => setCopied((current) => current === action ? null : current), 1600)\n }\n const copyPage = async (): Promise<void> => {\n const response = await fetch(data.page.markdownUrl)\n if (!response.ok) return\n await writeClipboardText(await response.text())\n markCopied('copy')\n }\n const copyMcp = async (): Promise<void> => {\n await writeClipboardText(new URL('/mcp', window.location.origin).toString())\n markCopied('mcp')\n }\n const copyMcpInstall = async (): Promise<void> => {\n const mcpUrl = new URL('/mcp', window.location.origin).toString()\n await writeClipboardText(`npx add-mcp ${mcpUrl}`)\n markCopied('add-mcp')\n }\n const closeMenu = (): void => {\n if (detailsRef.current) detailsRef.current.open = false\n }\n const openAiContext = (provider: 'chatgpt' | 'claude'): void => {\n const markdownUrl = new URL(data.page.markdownUrl, window.location.origin).toString()\n const prompt = `Use ${markdownUrl} as context. Explain ${data.page.title} and answer my questions about this documentation page.`\n const destination = new URL(provider === 'chatgpt' ? 'https://chatgpt.com/' : 'https://claude.ai/new')\n destination.searchParams.set('q', prompt)\n window.open(destination.toString(), '_blank', 'noopener,noreferrer')\n closeMenu()\n }\n const openMcpEditor = (editor: 'cursor' | 'vscode'): void => {\n const mcpUrl = new URL('/mcp', window.location.origin).toString()\n const name = data.config.name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '') || 'docs'\n if (editor === 'cursor') {\n const config = window.btoa(JSON.stringify({ url: mcpUrl }))\n window.location.href = `cursor://anysphere.cursor-deeplink/mcp/install?name=${encodeURIComponent(name)}&config=${encodeURIComponent(config)}`\n } else {\n const config = encodeURIComponent(JSON.stringify({ name, type: 'http', url: mcpUrl }))\n window.location.href = `vscode:mcp/install?${config}`\n }\n closeMenu()\n }\n const content = (\n icon: ReactElement,\n label: string,\n description: string,\n menuItem: boolean,\n external = false,\n ): ReactElement => menuItem ? (\n <>\n <span className=\"docs-contextual-action-icon\">{icon}</span>\n <span className=\"docs-contextual-action-copy\"><strong>{label}</strong><small>{description}</small></span>\n {external && <ExternalIcon className=\"docs-contextual-action-external\" />}\n </>\n ) : <>{icon}{label}</>\n const renderAction = (action: DocsContextualAction, menuItem = false): ReactElement => {\n const role = menuItem ? 'menuitem' : undefined\n if (action === 'view') {\n return <a href={data.page.markdownUrl} key={action} onClick={closeMenu} role={role}>{content(<FileIcon />, 'View as Markdown', 'Open the raw Markdown page', menuItem)}</a>\n }\n if (action === 'assistant') {\n return <button key={action} role={role} type=\"button\" onClick={() => { closeMenu(); onAssistantOpen(`Explain the key ideas on ${data.page.title}.`) }}>{content(<OrbitMark />, 'Ask about this page', 'Use the DeepSpace agent with page context', menuItem)}</button>\n }\n if (action === 'chatgpt' || action === 'claude') {\n const label = action === 'chatgpt' ? 'Open in ChatGPT' : 'Open in Claude'\n return <button key={action} role={role} type=\"button\" onClick={() => openAiContext(action)}>{content(<MessageIcon />, label, 'Ask questions about this page', menuItem, true)}</button>\n }\n if (action === 'mcp') {\n const label = copied === action ? 'MCP URL copied' : 'Copy MCP server URL'\n return <button key={action} role={role} type=\"button\" onClick={copyMcp}>{content(copied === action ? <CheckIcon /> : <CopyIcon />, label, 'Copy the same-release documentation endpoint', menuItem)}</button>\n }\n if (action === 'add-mcp') {\n const label = copied === action ? 'Install command copied' : 'Copy MCP install command'\n return <button key={action} role={role} type=\"button\" onClick={copyMcpInstall}>{content(copied === action ? <CheckIcon /> : <TerminalIcon />, label, 'Copy npx command to install MCP server', menuItem)}</button>\n }\n if (action === 'cursor' || action === 'vscode') {\n const label = action === 'cursor' ? 'Connect to Cursor' : 'Connect to VS Code'\n return <button key={action} role={role} type=\"button\" onClick={() => openMcpEditor(action)}>{content(<EditorIcon />, label, `Install MCP server in ${action === 'cursor' ? 'Cursor' : 'VS Code'}`, menuItem, true)}</button>\n }\n const label = copied === action ? 'Page copied' : 'Copy page'\n return <button key={action} role={role} type=\"button\" onClick={copyPage}>{content(copied === action ? <CheckIcon /> : <CopyIcon />, label, 'Copy page as Markdown for LLMs', menuItem)}</button>\n }\n\n return (\n <div className=\"docs-contextual-actions\" aria-label=\"Page actions\">\n <div className=\"docs-contextual-primary\" aria-live=\"polite\">{renderAction(primary)}</div>\n {actions.length > 0 && (\n <details ref={detailsRef}>\n <summary aria-label=\"More page actions\"><ChevronDownIcon /></summary>\n <div aria-label=\"More page actions\" className=\"docs-contextual-menu\" role=\"menu\">\n {actions.map((action) => renderAction(action, true))}\n </div>\n </details>\n )}\n </div>\n )\n}\n\n","import {\n useEffect,\n useRef,\n useState,\n type FormEvent,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { parseSseLine } from '../../client/ai-stream'\nimport { completedDocsAssistantHistory } from './assistant-history'\nimport { errorMessage, externalProps, writeClipboardText } from './browser'\nimport { useDialogFocus } from './dialog'\nimport { CloseIcon, SendIcon, StopIcon } from './icons'\n\ninterface AssistantMessage {\n id: string\n role: 'assistant' | 'user'\n text: string\n state?: 'error' | 'streaming'\n status?: string\n}\n\nexport interface AssistantSeed {\n id: number\n submit: boolean\n value: string\n}\n\nexport function AssistantLauncher({\n name,\n onOpen,\n onSubmit,\n open,\n}: {\n name: string\n onOpen: () => void\n onSubmit: (question: string) => void\n open: boolean\n}): ReactElement | null {\n const [input, setInput] = useState('')\n const submit = (event: FormEvent): void => {\n event.preventDefault()\n const question = input.trim()\n if (!question) return\n setInput('')\n onSubmit(question)\n }\n if (open) return null\n return (\n <form\n className=\"docs-assistant-launcher\"\n id=\"deepspace-docs-assistant-launcher\"\n onSubmit={submit}\n >\n <button className=\"docs-launcher-agent\" type=\"button\" onClick={onOpen} aria-label={`Open the ${name} documentation agent`}>Ask {name}</button>\n <input\n aria-label={`Ask the ${name} documentation agent`}\n id=\"deepspace-docs-assistant-launcher-input\"\n maxLength={4000}\n onChange={(event) => setInput(event.target.value)}\n placeholder=\"Ask anything…\"\n value={input}\n />\n <button className=\"docs-launcher-send\" type=\"submit\" disabled={!input.trim()} aria-label=\"Send question to documentation agent\"><SendIcon /></button>\n </form>\n )\n}\n\nexport function DocsAssistant({\n access,\n name,\n onClose,\n open,\n route,\n seed,\n suggestions,\n}: {\n access: 'public' | 'authenticated'\n name: string\n onClose: () => void\n open: boolean\n route: string\n seed: AssistantSeed\n suggestions?: string[]\n}): ReactElement | null {\n const panelRef = useRef<HTMLElement>(null)\n const formRef = useRef<HTMLFormElement>(null)\n const messagesRef = useRef<HTMLDivElement>(null)\n const abortRef = useRef<AbortController | null>(null)\n const queuedQuestionRef = useRef<string | null>(null)\n const handledSeedRef = useRef(0)\n const [input, setInput] = useState(seed.value)\n const [messages, setMessages] = useState<AssistantMessage[]>([\n { id: 'welcome', role: 'assistant', text: `I can search the ${name} documentation and cite the exact pages I use.` },\n ])\n const [sending, setSending] = useState(false)\n useDialogFocus(open, panelRef, onClose, false, 'deepspace-docs-assistant-launcher-input')\n useEffect(() => {\n if (!open || seed.id === 0 || handledSeedRef.current === seed.id) return\n handledSeedRef.current = seed.id\n setInput(seed.value)\n if (!seed.submit || !seed.value.trim()) return\n queuedQuestionRef.current = seed.value\n const frame = window.requestAnimationFrame(() => formRef.current?.requestSubmit())\n return () => window.cancelAnimationFrame(frame)\n }, [open, seed])\n useEffect(() => {\n const element = messagesRef.current\n if (element) element.scrollTop = element.scrollHeight\n }, [messages])\n useEffect(() => () => abortRef.current?.abort(), [])\n if (!open) return null\n\n const submit = async (event?: FormEvent): Promise<void> => {\n event?.preventDefault()\n const question = (queuedQuestionRef.current ?? input).trim()\n queuedQuestionRef.current = null\n if (!question || sending) return\n const history = completedDocsAssistantHistory(messages)\n setInput('')\n setSending(true)\n const userId = `user-${Date.now()}`\n const answerId = `assistant-${Date.now()}`\n setMessages((current) => [...current, { id: userId, role: 'user', text: question }, { id: answerId, role: 'assistant', text: '', state: 'streaming', status: 'Searching this documentation…' }])\n const controller = new AbortController()\n abortRef.current = controller\n let timedOut = false\n const slowTimer = window.setTimeout(() => {\n setMessages((current) => current.map((message) => message.id === answerId\n ? { ...message, status: 'Still working through the documentation…' }\n : message))\n }, 12_000)\n const timeoutTimer = window.setTimeout(() => {\n timedOut = true\n controller.abort()\n }, 120_000)\n try {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-deepspace-surface': 'docs',\n }\n if (access === 'authenticated') {\n const tokenResponse = await fetch('/api/auth/token', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' } })\n const tokenData = tokenResponse.ok ? await tokenResponse.json().catch(() => null) as { token?: string } | null : null\n if (!tokenData?.token) throw new Error('Sign in to use the documentation assistant.')\n headers.Authorization = `Bearer ${tokenData.token}`\n }\n const response = await fetch('/api/ai/docs', {\n method: 'POST',\n headers,\n body: JSON.stringify({ question, route, messages: history }),\n signal: controller.signal,\n })\n if (!response.ok || !response.body) {\n const body = await response.json().catch(() => null) as { error?: string } | null\n throw new Error(body?.error ?? `Assistant unavailable (${response.status})`)\n }\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let answer = ''\n const consumeLine = (line: string): void => {\n const data = parseSseLine(line)\n if (!data) return\n if (data.type === 'text-delta' && typeof data.delta === 'string') {\n answer += data.delta\n setMessages((current) => current.map((message) => message.id === answerId ? { ...message, text: answer, state: 'streaming', status: undefined } : message))\n } else if (data.type === 'tool-input-available') {\n const status = data.toolName === 'docs_read'\n ? 'Reading the relevant source pages…'\n : 'Searching this documentation…'\n setMessages((current) => current.map((message) => message.id === answerId ? { ...message, status } : message))\n } else if (data.type === 'tool-output-available') {\n setMessages((current) => current.map((message) => message.id === answerId ? { ...message, status: 'Reviewing the source material…' } : message))\n } else if (data.type === 'error') {\n throw new Error(typeof data.errorText === 'string' ? data.errorText : 'The assistant stream failed.')\n }\n }\n while (true) {\n const chunk = await reader.read()\n if (chunk.done) break\n buffer += decoder.decode(chunk.value, { stream: true })\n const lines = buffer.split(/\\r?\\n/)\n buffer = lines.pop() ?? ''\n for (const line of lines) consumeLine(line)\n }\n buffer += decoder.decode()\n consumeLine(buffer)\n setMessages((current) => current.map((message) => message.id === answerId ? { ...message, text: answer || 'No answer was returned.', state: undefined } : message))\n } catch (error) {\n const message = timedOut\n ? 'The documentation search took too long. Try a narrower question.'\n : controller.signal.aborted\n ? 'Response stopped.'\n : errorMessage(error)\n setMessages((current) => current.map((item) => item.id === answerId ? { ...item, text: message, state: 'error' } : item))\n } finally {\n window.clearTimeout(slowTimer)\n window.clearTimeout(timeoutTimer)\n abortRef.current = null\n setSending(false)\n }\n }\n\n const defaults = suggestions ?? ['How do I get started?', 'Show me a complete example', 'What should I understand first?']\n return (\n <aside\n aria-label=\"Documentation assistant\"\n className=\"docs-assistant\"\n id=\"deepspace-docs-assistant\"\n ref={panelRef}\n role=\"complementary\"\n >\n <header>\n <div><span><strong id=\"deepspace-docs-assistant-title\">Ask {name}</strong><small>Answers from this documentation build</small></span></div>\n <button type=\"button\" onClick={onClose} aria-label=\"Close documentation assistant\"><CloseIcon /></button>\n </header>\n <div className=\"docs-assistant-messages\" ref={messagesRef} aria-live=\"polite\">\n {messages.map((message) => (\n <div className={`docs-assistant-message is-${message.role}${message.state ? ` is-${message.state}` : ''}`} key={message.id}>\n <div>\n {message.role === 'assistant' ? <AssistantMarkdown value={message.text} /> : message.text}\n {message.state === 'streaming' && !message.text && (\n <span className=\"docs-assistant-activity\" role=\"status\"><span aria-hidden=\"true\" />{message.status ?? 'Working…'}</span>\n )}\n </div>\n </div>\n ))}\n {messages.length === 1 && (\n <div className=\"docs-assistant-suggestions\">\n <p>Try asking</p>\n {defaults.map((suggestion) => <button key={suggestion} type=\"button\" onClick={() => setInput(suggestion)}>{suggestion}</button>)}\n </div>\n )}\n </div>\n <form className=\"docs-assistant-composer\" onSubmit={submit} ref={formRef}>\n <textarea\n aria-label=\"Ask a documentation question\"\n data-autofocus\n maxLength={4000}\n onChange={(event) => setInput(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n void submit()\n }\n }}\n placeholder=\"Ask a question about these docs\"\n rows={2}\n value={input}\n />\n {sending ? (\n <button type=\"button\" onClick={() => abortRef.current?.abort()} aria-label=\"Stop response\"><StopIcon /></button>\n ) : (\n <button type=\"submit\" disabled={!input.trim()} aria-label=\"Send question\"><SendIcon /></button>\n )}\n </form>\n <footer>Responses cite this deployment and may still contain mistakes.</footer>\n </aside>\n )\n}\n\n\nfunction AssistantMarkdown({ value }: { value: string }): ReactElement {\n const blocks: ReactNode[] = []\n const fence = /```([^\\n`]*)\\n([\\s\\S]*?)(?:```|$)/g\n let cursor = 0\n for (const match of value.matchAll(fence)) {\n const index = match.index ?? 0\n if (index > cursor) blocks.push(...renderAssistantText(value.slice(cursor, index), `text-${cursor}`))\n blocks.push(\n <AssistantCodeBlock\n code={(match[2] ?? '').replace(/\\n$/, '')}\n key={`code-${index}`}\n language={(match[1] ?? '').trim().split(/\\s+/, 1)[0] ?? ''}\n />,\n )\n cursor = index + match[0].length\n }\n if (cursor < value.length) blocks.push(...renderAssistantText(value.slice(cursor), `text-${cursor}`))\n return <div className=\"docs-assistant-markdown\">{blocks}</div>\n}\n\nfunction AssistantCodeBlock({ code, language }: { code: string; language: string }): ReactElement {\n const [copied, setCopied] = useState(false)\n const copy = async (): Promise<void> => {\n await writeClipboardText(code)\n setCopied(true)\n window.setTimeout(() => setCopied(false), 1400)\n }\n return (\n <figure className=\"docs-assistant-code\">\n <figcaption><span>{language || 'Code'}</span><button type=\"button\" onClick={copy}>{copied ? 'Copied' : 'Copy'}</button></figcaption>\n <pre><code>{code}</code></pre>\n </figure>\n )\n}\n\nfunction renderAssistantText(value: string, keyPrefix: string): ReactNode[] {\n const lines = value.split('\\n')\n const blocks: ReactNode[] = []\n let index = 0\n while (index < lines.length) {\n const line = lines[index]?.trim() ?? ''\n if (!line) { index += 1; continue }\n const heading = line.match(/^(#{1,4})\\s+(.+)$/)\n if (heading) {\n blocks.push(<strong className=\"docs-assistant-heading\" key={`${keyPrefix}-heading-${index}`}>{renderInlineMarkdown(heading[2])}</strong>)\n index += 1\n continue\n }\n const unordered = /^[-*]\\s+/.test(line)\n const ordered = /^\\d+[.)]\\s+/.test(line)\n if (unordered || ordered) {\n const items: ReactNode[] = []\n while (index < lines.length) {\n const candidate = lines[index]?.trim() ?? ''\n const match = unordered ? candidate.match(/^[-*]\\s+(.+)$/) : candidate.match(/^\\d+[.)]\\s+(.+)$/)\n if (!match) break\n items.push(<li key={`${keyPrefix}-item-${index}`}>{renderInlineMarkdown(match[1])}</li>)\n index += 1\n }\n blocks.push(unordered\n ? <ul key={`${keyPrefix}-list-${index}`}>{items}</ul>\n : <ol key={`${keyPrefix}-list-${index}`}>{items}</ol>)\n continue\n }\n const paragraph: string[] = [line]\n index += 1\n while (index < lines.length) {\n const candidate = lines[index]?.trim() ?? ''\n if (!candidate || /^(?:#{1,4}\\s+|[-*]\\s+|\\d+[.)]\\s+)/.test(candidate)) break\n paragraph.push(candidate)\n index += 1\n }\n blocks.push(<p key={`${keyPrefix}-paragraph-${index}`}>{paragraph.map((part, partIndex) => <span key={`${partIndex}:${part.slice(0, 18)}`}>{renderInlineMarkdown(part)}{partIndex < paragraph.length - 1 && ' '}</span>)}</p>)\n }\n return blocks\n}\n\nfunction renderInlineMarkdown(value: string): ReactNode[] {\n const pattern = /(\\[[^\\]]+\\]\\((?:https?:\\/\\/|\\/)[^)]+\\)|`[^`]+`|\\*\\*[^*]+\\*\\*)/g\n return value.split(pattern).filter(Boolean).map((part, index) => {\n const link = part.match(/^\\[([^\\]]+)\\]\\(((?:https?:\\/\\/|\\/)[^)]+)\\)$/)\n if (link) return <a key={`${index}:${part}`} href={link[2]} {...externalProps(link[2])}>{link[1]}</a>\n if (part.startsWith('`') && part.endsWith('`')) return <code key={`${index}:${part}`}>{part.slice(1, -1)}</code>\n if (part.startsWith('**') && part.endsWith('**')) return <strong key={`${index}:${part}`}>{part.slice(2, -2)}</strong>\n return <span key={`${index}:${part}`}>{part}</span>\n })\n}\n","/**\n * Pure decoders for the Vercel AI SDK v5 `toUIMessageStreamResponse` body.\n *\n * The wire format is SSE: each event is `data: <json>\\n\\n`, terminated by\n * `data: [DONE]\\n\\n`. Each event carries a `type` discriminator\n * (`text-delta`, `tool-input-available`, `tool-output-available`,\n * `tool-input-error`, `tool-output-error`, `error`, `abort`, …) — see the\n * `UIMessageChunk` union in `ai/dist/index.d.ts`.\n *\n * This module decodes those chunks into a small action vocabulary that\n * the React layer then applies to its state. Keeping decode pure means\n * the v5-boundary behavior is fully testable without spinning up a\n * component tree.\n */\n\n/** Raw v5 stream chunk, as parsed off the wire. `type` may be any string. */\nexport type AiStreamChunk = Record<string, unknown> & { type?: unknown }\n\n/**\n * Strip one SSE line's framing. Returns the parsed JSON payload, or `null`\n * for blank lines, comment lines (`:` prefix), non-`data:` SSE fields, the\n * `[DONE]` terminator, or any line whose payload doesn't parse as JSON.\n *\n * Multi-line `data:` events (per the SSE spec, joined by `\\n` before\n * dispatch) are NOT supported — v5's emitter never produces them. If you\n * hit a wire intermediary that re-splits long payloads (e.g. a proxy that\n * caps line length), upgrade this to accumulate consecutive `data:` lines\n * until a blank line.\n */\nexport function parseSseLine(line: string): AiStreamChunk | null {\n if (!line) return null\n if (line.startsWith(':')) return null // SSE comment\n if (!line.startsWith('data:')) return null // we only consume `data:` events\n // SSE allows exactly one space after the colon to be elided. Trim a\n // trailing \\r so CRLF-framed responses still hit the [DONE] short-circuit.\n const raw = line.slice(5).replace(/^ /, '').replace(/\\r$/, '')\n if (raw === '[DONE]') return null\n try {\n const parsed: unknown = JSON.parse(raw)\n if (!parsed || typeof parsed !== 'object') return null\n return parsed as AiStreamChunk\n } catch {\n return null\n }\n}\n\n/**\n * Action vocabulary the React layer applies. Every `decodeAiStreamChunk`\n * output is one of these — `null` means the chunk is intentionally ignored\n * (lifecycle markers, reasoning we don't surface yet, etc.).\n *\n * Wire field renames (v5): chunks carry `input` / `output` directly. We\n * map them to `args` / `result` here so persisted UI shapes stay v4-stable.\n */\nexport type AiStreamAction =\n | { type: 'append-text'; delta: string }\n | { type: 'upsert-tool-call'; toolCallId: string; toolName: string; input: unknown }\n | { type: 'finalize-tool-call'; toolCallId: string; result: unknown }\n /**\n * Schema validation rejected the input before the tool ran; no preceding\n * `upsert-tool-call` was emitted, so the React layer must create the\n * invocation and finalize it as failed in one step.\n */\n | { type: 'fail-tool-input'; toolCallId: string; toolName: string; input: unknown; errorText: string }\n /** Tool execution failed; a previous `upsert-tool-call` exists to finalize. */\n | { type: 'fail-tool-output'; toolCallId: string; errorText: string }\n | { type: 'stream-error'; errorText: string }\n /** Server-side abort with no error chunk to follow. */\n | { type: 'abort' }\n\n/** Decode one v5 UIMessage stream chunk into an action, or `null` to ignore. */\nexport function decodeAiStreamChunk(chunk: AiStreamChunk): AiStreamAction | null {\n if (typeof chunk.type !== 'string') return null\n\n switch (chunk.type) {\n case 'text-delta': {\n const delta = typeof chunk.delta === 'string' ? chunk.delta : ''\n if (!delta) return null\n return { type: 'append-text', delta }\n }\n\n case 'tool-input-available': {\n if (typeof chunk.toolCallId !== 'string' || typeof chunk.toolName !== 'string') return null\n return {\n type: 'upsert-tool-call',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n input: chunk.input,\n }\n }\n\n case 'tool-output-available': {\n if (typeof chunk.toolCallId !== 'string') return null\n // The wire emits `output: part.output` directly (no `toJSONValue`\n // wrapping at this layer). When `part.output` is `undefined`,\n // `JSON.stringify` drops the key entirely, so `'output' in chunk`\n // reads false on the receiving side. Treat absence as an explicit\n // `null` result — finalizing the invocation is what stops the\n // spinner; ignoring the chunk would hang the UI forever for any\n // tool whose `execute` returns undefined.\n const result = 'output' in chunk ? chunk.output : null\n return { type: 'finalize-tool-call', toolCallId: chunk.toolCallId, result }\n }\n\n case 'tool-input-error': {\n if (typeof chunk.toolCallId !== 'string' || typeof chunk.toolName !== 'string') return null\n const errorText = typeof chunk.errorText === 'string' ? chunk.errorText : 'Tool input rejected'\n return {\n type: 'fail-tool-input',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n input: chunk.input,\n errorText,\n }\n }\n\n case 'tool-output-error': {\n if (typeof chunk.toolCallId !== 'string') return null\n const errorText = typeof chunk.errorText === 'string' ? chunk.errorText : 'Tool execution failed'\n return { type: 'fail-tool-output', toolCallId: chunk.toolCallId, errorText }\n }\n\n case 'error': {\n const errorText = typeof chunk.errorText === 'string' ? chunk.errorText : 'Stream error'\n return { type: 'stream-error', errorText }\n }\n\n case 'abort':\n return { type: 'abort' }\n\n // Forward-compat: silently ignore lifecycle markers (start/finish,\n // start-step/finish-step), text-start/-end, tool-input-start/-delta,\n // reasoning-*, source-*, message-metadata.\n default:\n return null\n }\n}\n","export interface DocsAssistantTranscriptMessage {\n role: 'assistant' | 'user'\n text: string\n state?: 'error' | 'streaming'\n}\n\nexport interface DocsAssistantHistoryMessage {\n role: 'assistant' | 'user'\n content: string\n}\n\n/**\n * Build a server transcript from adjacent, successful user/assistant pairs.\n * A cancelled or failed answer invalidates its question as context too; keeping\n * only the user half would produce a non-alternating transcript on the next\n * request and permanently wedge the stateless assistant until page reload.\n */\nexport function completedDocsAssistantHistory(\n messages: readonly DocsAssistantTranscriptMessage[],\n maxMessages: number = 12,\n): DocsAssistantHistoryMessage[] {\n const pairs: Array<[DocsAssistantHistoryMessage, DocsAssistantHistoryMessage]> = []\n for (let index = 0; index < messages.length - 1; index += 1) {\n const user = messages[index]\n if (user?.role !== 'user' || user.state !== undefined || !user.text.trim()) continue\n const assistant = messages[index + 1]\n if (\n assistant?.role !== 'assistant' ||\n assistant.state !== undefined ||\n !assistant.text.trim()\n ) {\n continue\n }\n pairs.push([\n { role: 'user', content: user.text },\n { role: 'assistant', content: assistant.text },\n ])\n index += 1\n }\n\n const pairLimit = Math.max(0, Math.floor(maxMessages / 2))\n if (pairLimit === 0) return []\n return pairs.slice(-pairLimit).flat()\n}\n","import { useEffect, type RefObject } from 'react'\n\n/** Shared keyboard/focus contract for the docs search, assistant, and mobile navigation. */\nexport function useDialogFocus(\n open: boolean,\n ref: RefObject<HTMLElement | null>,\n onClose: () => void,\n trap = true,\n restoreId?: string,\n): void {\n useEffect(() => {\n if (!open) return\n const previous = document.activeElement as HTMLElement | null\n const element = ref.current\n const frame = window.requestAnimationFrame(() => {\n const target = element?.querySelector<HTMLElement>('[data-autofocus]')\n ?? element?.querySelector<HTMLElement>('button,a,input,textarea')\n target?.focus()\n })\n const keydown = (event: globalThis.KeyboardEvent): void => {\n if (event.key === 'Escape') {\n event.preventDefault()\n onClose()\n return\n }\n if (!trap || event.key !== 'Tab' || !element) return\n const focusable = Array.from(element.querySelectorAll<HTMLElement>(\n 'a[href],button:not([disabled]),input:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])',\n ))\n if (focusable.length === 0) return\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last?.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first?.focus()\n }\n }\n document.addEventListener('keydown', keydown)\n return () => {\n window.cancelAnimationFrame(frame)\n document.removeEventListener('keydown', keydown)\n const restoreTarget = restoreId\n ? document.getElementById(restoreId)\n : previous?.isConnected && previous !== document.body && !element?.contains(previous)\n ? previous\n : null\n restoreTarget?.focus()\n }\n }, [onClose, open, ref, restoreId, trap])\n}\n","import { useEffect, useRef, useState, type ReactElement } from 'react'\nimport type { DocsNavigationNode, DocsRuntimeData } from '../types'\nimport { externalProps, isExternal, safeStorageGet, safeStorageSet } from './browser'\nimport { useDialogFocus } from './dialog'\nimport {\n ChevronDownIcon,\n CloseIcon,\n ExternalIcon,\n MenuIcon,\n MoonIcon,\n OrbitMark,\n SearchIcon,\n SunIcon,\n SystemIcon,\n} from './icons'\n\ntype ThemeMode = 'light' | 'dark' | 'system'\n\nexport function DocsHeader({\n data,\n onMenuOpen,\n onSearchOpen,\n}: {\n data: DocsRuntimeData\n onMenuOpen: () => void\n onSearchOpen: () => void\n}): ReactElement {\n return (\n <header className=\"docs-header\">\n <a\n className=\"docs-brand\"\n href={data.config.theme.logoHref ?? '/'}\n aria-label={`${data.config.name} documentation home`}\n {...externalProps(data.config.theme.logoHref ?? '/')}\n >\n <BrandLogo data={data} />\n </a>\n <div className=\"docs-header-center\">\n <button className=\"docs-search-trigger\" type=\"button\" onClick={onSearchOpen} aria-label=\"Search documentation\">\n <SearchIcon />\n <span>Search documentation</span>\n <kbd>⌘K</kbd>\n </button>\n </div>\n <nav className=\"docs-top-links\" aria-label=\"Product navigation\">\n {data.config.links.map((link) => (\n <a key={`${link.label}:${link.href}`} href={link.href} {...externalProps(link.href)}>\n {link.label}\n {isExternal(link.href) && <ExternalIcon />}\n </a>\n ))}\n </nav>\n <div className=\"docs-mobile-actions\">\n <button className=\"docs-icon-button\" type=\"button\" onClick={onSearchOpen} aria-label=\"Search documentation\"><SearchIcon /></button>\n <button className=\"docs-icon-button\" type=\"button\" onClick={onMenuOpen} aria-label=\"Open documentation navigation\"><MenuIcon /></button>\n </div>\n </header>\n )\n}\n\nfunction BrandLogo({ data }: { data: DocsRuntimeData }): ReactElement {\n const { logo, logoDark } = data.config.theme\n if (logo) {\n return (\n <>\n <img className=\"docs-brand-logo docs-brand-logo-light\" src={logo} alt=\"\" />\n <img className=\"docs-brand-logo docs-brand-logo-dark\" src={logoDark ?? logo} alt=\"\" />\n <span className=\"docs-brand-product\">Docs</span>\n </>\n )\n }\n return (\n <>\n <span className=\"docs-brand-mark\"><OrbitMark /></span>\n <span className=\"docs-brand-name\">{data.config.name}</span>\n <span className=\"docs-brand-product\">Docs</span>\n </>\n )\n}\n\nexport function DesktopSidebar({ data }: { data: DocsRuntimeData }): ReactElement {\n return (\n <aside className=\"docs-sidebar\" aria-label=\"Documentation navigation\">\n <nav className=\"docs-page-tree\">\n <NavigationTree activeRoute={data.page.route} nodes={data.navigation} />\n </nav>\n <div className=\"docs-sidebar-footer\">\n {!data.config.theme.strictMode && <ThemeControls defaultMode={data.config.theme.defaultMode ?? 'system'} />}\n {data.config.footer.length > 0 && (\n <nav aria-label=\"Documentation footer\">\n {data.config.footer.map((link) => (\n <a key={`${link.label}:${link.href}`} href={link.href} {...externalProps(link.href)}>{link.label}</a>\n ))}\n </nav>\n )}\n <span>Built on DeepSpace</span>\n </div>\n </aside>\n )\n}\n\nfunction NavigationTree({\n activeRoute,\n depth = 0,\n nodes,\n}: {\n activeRoute: string\n depth?: number\n nodes: DocsNavigationNode[]\n}): ReactElement {\n return (\n <>\n {nodes.map((node) => {\n if (node.kind === 'group') {\n const active = containsRoute(node, activeRoute)\n if (depth === 0) {\n return (\n <section className=\"docs-nav-section\" key={`group:${node.label}`}>\n <h2>{node.label}</h2>\n <NavigationTree activeRoute={activeRoute} depth={depth + 1} nodes={node.items} />\n </section>\n )\n }\n return (\n <details className=\"docs-nav-folder\" key={`group:${node.label}`} open={active}>\n <summary><span>{node.label}</span><ChevronDownIcon /></summary>\n <div><NavigationTree activeRoute={activeRoute} depth={depth + 1} nodes={node.items} /></div>\n </details>\n )\n }\n const href = node.kind === 'page' ? node.route : node.href\n const active = node.kind === 'page' && node.route === activeRoute\n return (\n <a\n aria-current={active ? 'page' : undefined}\n className={active ? 'docs-nav-link is-active' : 'docs-nav-link'}\n href={href}\n key={`${node.kind}:${href}`}\n {...externalProps(href)}\n >\n <span>{node.label}</span>\n {isExternal(href) && <ExternalIcon />}\n </a>\n )\n })}\n </>\n )\n}\n\nexport function MobileNavigation({\n data,\n onClose,\n open,\n}: {\n data: DocsRuntimeData\n onClose: () => void\n open: boolean\n}): ReactElement | null {\n const dialogRef = useRef<HTMLDivElement>(null)\n useDialogFocus(open, dialogRef, onClose)\n if (!open) return null\n return (\n <div className=\"docs-modal-layer\" role=\"presentation\" onMouseDown={(event) => {\n if (event.currentTarget === event.target) onClose()\n }}>\n <div className=\"docs-mobile-nav\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Documentation navigation\" ref={dialogRef}>\n <header>\n <a\n aria-label={`${data.config.name} documentation home`}\n className=\"docs-brand\"\n href={data.config.theme.logoHref ?? '/'}\n {...externalProps(data.config.theme.logoHref ?? '/')}\n >\n <BrandLogo data={data} />\n </a>\n <button className=\"docs-icon-button\" type=\"button\" onClick={onClose} aria-label=\"Close documentation navigation\" data-autofocus><CloseIcon /></button>\n </header>\n <nav className=\"docs-page-tree\"><NavigationTree activeRoute={data.page.route} nodes={data.navigation} /></nav>\n <footer>\n {!data.config.theme.strictMode && <ThemeControls defaultMode={data.config.theme.defaultMode ?? 'system'} />}\n {data.config.footer.map((link) => <a key={`${link.label}:${link.href}`} href={link.href} {...externalProps(link.href)}>{link.label}</a>)}\n </footer>\n </div>\n </div>\n )\n}\n\nfunction ThemeControls({ defaultMode }: { defaultMode: ThemeMode }): ReactElement {\n const [mode, setMode] = useState<ThemeMode>(defaultMode)\n useEffect(() => {\n const saved = safeStorageGet('deepspace-docs-theme') as ThemeMode | null\n if (saved === 'light' || saved === 'dark' || saved === 'system') setMode(saved)\n }, [])\n useEffect(() => applyThemeMode(mode), [mode])\n const choose = (next: ThemeMode): void => {\n setMode(next)\n safeStorageSet('deepspace-docs-theme', next)\n }\n return (\n <div className=\"docs-theme-controls\" role=\"group\" aria-label=\"Theme preference\">\n <button aria-pressed={mode === 'system'} aria-label=\"Use system theme\" onClick={() => choose('system')} type=\"button\"><SystemIcon /></button>\n <button aria-pressed={mode === 'light'} aria-label=\"Use light theme\" onClick={() => choose('light')} type=\"button\"><SunIcon /></button>\n <button aria-pressed={mode === 'dark'} aria-label=\"Use dark theme\" onClick={() => choose('dark')} type=\"button\"><MoonIcon /></button>\n </div>\n )\n}\n\nfunction containsRoute(node: Extract<DocsNavigationNode, { kind: 'group' }>, route: string): boolean {\n return node.items.some((item) => item.kind === 'page'\n ? item.route === route\n : item.kind === 'group' && containsRoute(item, route))\n}\n\nfunction applyThemeMode(mode: ThemeMode): () => void {\n const media = window.matchMedia('(prefers-color-scheme: dark)')\n const apply = (): void => {\n document.documentElement.dataset.themeMode = mode\n document.documentElement.dataset.theme = mode === 'system' ? (media.matches ? 'dark' : 'light') : mode\n }\n apply()\n media.addEventListener?.('change', apply)\n return () => media.removeEventListener?.('change', apply)\n}\n","import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport type { DocsSearchEntry } from '../types'\nimport { useDialogFocus } from './dialog'\nimport { ChevronRightIcon, OrbitMark, SearchIcon, SparkIcon } from './icons'\n\nexport function SearchCommand({\n assistantEnabled,\n name,\n onAssistantOpen,\n onClose,\n onNavigate,\n open,\n}: {\n assistantEnabled: boolean\n name: string\n onAssistantOpen: (seed?: string) => void\n onClose: () => void\n onNavigate?: (href: string) => void\n open: boolean\n}): ReactElement | null {\n const dialogRef = useRef<HTMLDivElement>(null)\n const [index, setIndex] = useState<DocsSearchEntry[] | null>(null)\n const [loading, setLoading] = useState(false)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n useDialogFocus(open, dialogRef, onClose)\n useEffect(() => {\n if (!open || index || loading) return\n setLoading(true)\n fetch('/_docs/search.json')\n .then((response) => response.ok ? response.json() as Promise<DocsSearchEntry[]> : [])\n .then(setIndex)\n .catch(() => setIndex([]))\n .finally(() => setLoading(false))\n }, [index, loading, open])\n useEffect(() => {\n if (!open) {\n setQuery('')\n setActiveIndex(0)\n }\n }, [open])\n const preparedIndex = useMemo(() => prepareSearchIndex(index ?? []), [index])\n const results = useMemo(() => rankSearch(preparedIndex, query), [preparedIndex, query])\n if (!open) return null\n const selectableCount = results.length + (assistantEnabled && query.trim() ? 1 : 0)\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>): void => {\n if (event.key === 'ArrowDown' && selectableCount > 0) {\n event.preventDefault()\n setActiveIndex((current) => (current + 1) % selectableCount)\n } else if (event.key === 'ArrowUp' && selectableCount > 0) {\n event.preventDefault()\n setActiveIndex((current) => (current - 1 + selectableCount) % selectableCount)\n } else if (event.key === 'Enter') {\n event.preventDefault()\n if (activeIndex < results.length && results[activeIndex]) {\n onClose()\n if (onNavigate) onNavigate(results[activeIndex].route)\n else window.location.assign(results[activeIndex].route)\n } else if (assistantEnabled && query.trim()) {\n onAssistantOpen(query.trim())\n }\n }\n }\n return (\n <div className=\"docs-modal-layer docs-search-layer\" role=\"presentation\" onMouseDown={(event) => {\n if (event.currentTarget === event.target) onClose()\n }}>\n <div className=\"docs-search-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Search documentation\" ref={dialogRef}>\n <label className=\"docs-search-input\">\n <SearchIcon />\n <input\n aria-activedescendant={selectableCount > 0 ? `docs-search-option-${activeIndex}` : undefined}\n aria-controls=\"docs-search-results\"\n aria-expanded=\"true\"\n aria-label={`Search ${name} documentation`}\n autoComplete=\"off\"\n data-autofocus\n onChange={(event) => { setQuery(event.target.value); setActiveIndex(0) }}\n onKeyDown={handleKeyDown}\n placeholder={`Search ${name}`}\n role=\"combobox\"\n value={query}\n />\n <kbd>Esc</kbd>\n </label>\n <div className=\"docs-search-results\" id=\"docs-search-results\" role=\"listbox\" aria-label=\"Search results\">\n {!query.trim() && (\n <div className=\"docs-search-empty\"><OrbitMark /><strong>Find an answer in this commit</strong><span>Search pages, headings, APIs, and examples.</span></div>\n )}\n {query.trim() && loading && <div className=\"docs-search-state\">Searching this documentation…</div>}\n {query.trim() && !loading && results.length === 0 && <div className=\"docs-search-state\">No documentation matched “{query.trim()}”.</div>}\n {results.map((result, resultIndex) => (\n <a\n aria-selected={activeIndex === resultIndex}\n className={activeIndex === resultIndex ? 'docs-search-result is-active' : 'docs-search-result'}\n href={result.route}\n id={`docs-search-option-${resultIndex}`}\n key={result.route}\n onClick={onClose}\n onMouseEnter={() => setActiveIndex(resultIndex)}\n role=\"option\"\n >\n <span><strong>{highlightMatch(result.title, query)}</strong><small>{result.description ?? result.headings[0] ?? result.text.slice(0, 150)}</small></span>\n <ChevronRightIcon />\n </a>\n ))}\n {assistantEnabled && query.trim() && (\n <button\n aria-selected={activeIndex === results.length}\n className={activeIndex === results.length ? 'docs-search-assistant is-active' : 'docs-search-assistant'}\n id={`docs-search-option-${results.length}`}\n onClick={() => onAssistantOpen(query.trim())}\n onMouseEnter={() => setActiveIndex(results.length)}\n role=\"option\"\n type=\"button\"\n ><SparkIcon /><span><strong>Ask DeepSpace</strong><small>Answer from the current documentation with citations</small></span><ChevronRightIcon /></button>\n )}\n </div>\n <footer><span><kbd>↑</kbd><kbd>↓</kbd> select</span><span><kbd>↵</kbd> open</span><span><kbd>esc</kbd> close</span></footer>\n </div>\n </div>\n )\n}\n\ninterface PreparedSearchEntry {\n entry: DocsSearchEntry\n title: string\n headings: string\n haystack: string\n}\n\nfunction prepareSearchIndex(index: DocsSearchEntry[]): PreparedSearchEntry[] {\n return index.map((entry) => ({\n entry,\n title: normalizeSearch(entry.title),\n headings: normalizeSearch(entry.headings.join(' ')),\n haystack: normalizeSearch(`${entry.description ?? ''} ${entry.text}`),\n }))\n}\n\nfunction rankSearch(index: PreparedSearchEntry[], query: string): DocsSearchEntry[] {\n const normalized = normalizeSearch(query)\n if (!normalized) return []\n const tokens = normalized.split(' ').filter(Boolean)\n return index\n .map(({ entry, title, headings, haystack }) => {\n let score = title === normalized ? 180 : title.startsWith(normalized) ? 110 : title.includes(normalized) ? 75 : 0\n if (headings.includes(normalized)) score += 55\n for (const token of tokens) {\n if (title.includes(token)) score += 24\n else if (headings.includes(token)) score += 14\n else if (haystack.includes(token)) score += 5\n else score -= 18\n }\n return { entry, score }\n })\n .filter((item) => item.score > 0)\n .sort((left, right) => right.score - left.score || left.entry.route.localeCompare(right.entry.route))\n .slice(0, 10)\n .map((item) => item.entry)\n}\n\nfunction highlightMatch(value: string, query: string): ReactNode {\n const normalizedQuery = query.trim()\n if (!normalizedQuery) return value\n const index = value.toLowerCase().indexOf(normalizedQuery.toLowerCase())\n if (index < 0) return value\n return <>{value.slice(0, index)}<mark>{value.slice(index, index + normalizedQuery.length)}</mark>{value.slice(index + normalizedQuery.length)}</>\n}\n\nfunction normalizeSearch(value: string): string {\n return value.normalize('NFKD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim()\n}\n","export const DOCS_BASE_CSS = String.raw`\n:root {\n --docs-accent: #635bff;\n --docs-accent-2: #24c8ff;\n --docs-brand-bg: #f8fafc;\n --docs-brand-bg-dark: #0c0e14;\n --docs-font-body: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --docs-font-heading: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --docs-font-mono: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n --docs-bg: #fbfcfe;\n --docs-surface: #ffffff;\n --docs-surface-raised: #ffffff;\n --docs-panel: #f4f6fa;\n --docs-panel-strong: #edf0f6;\n --docs-text: #11131a;\n --docs-text-soft: #353a47;\n --docs-muted: #5c6270;\n --docs-faint: #646a78;\n --docs-border: #e4e7ed;\n --docs-border-strong: #d7dbe4;\n --docs-code-bg: #11131a;\n --docs-code-panel: #171a23;\n --docs-code-text: #e8ebf5;\n --docs-shadow-sm: 0 1px 2px rgba(15, 18, 28, .04), 0 2px 8px rgba(15, 18, 28, .03);\n --docs-shadow-lg: 0 24px 80px rgba(15, 18, 28, .18), 0 6px 24px rgba(15, 18, 28, .08);\n --docs-header-height: 66px;\n --docs-sidebar-width: 292px;\n color-scheme: light;\n font-family: var(--docs-font-body);\n}\n\n:root[data-theme=\"dark\"] {\n --docs-brand-bg: var(--docs-brand-bg-dark);\n --docs-bg: var(--docs-brand-bg-dark);\n --docs-surface: #10131b;\n --docs-surface-raised: #151923;\n --docs-panel: #171b25;\n --docs-panel-strong: #1e2330;\n --docs-text: #f2f4fa;\n --docs-text-soft: #cbd0dc;\n --docs-muted: #999fad;\n --docs-faint: #808797;\n --docs-border: #252a36;\n --docs-border-strong: #343a49;\n --docs-code-bg: #080a0f;\n --docs-code-panel: #10131a;\n --docs-code-text: #eef0f7;\n --docs-shadow-sm: 0 1px 2px rgba(0, 0, 0, .24);\n --docs-shadow-lg: 0 28px 90px rgba(0, 0, 0, .55), 0 8px 24px rgba(0, 0, 0, .35);\n color-scheme: dark;\n}\n\n* { box-sizing: border-box; }\nhtml { scroll-behavior: smooth; scroll-padding-top: 92px; }\nbody { margin: 0; background: var(--docs-brand-bg); color: var(--docs-text); font-family: var(--docs-font-body); font-size: 15.5px; line-height: 1.7; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }\n:root[data-background-decoration=\"gradient\"] body { background-image: radial-gradient(circle at 58% 7%, color-mix(in srgb, var(--docs-accent) 7%, transparent), transparent 32%); background-attachment: fixed; }\n:root[data-background-decoration=\"grid\"] body { background-image: linear-gradient(color-mix(in srgb, var(--docs-border) 26%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--docs-border) 26%, transparent) 1px, transparent 1px); background-attachment: fixed; background-size: 32px 32px; }\nbody:has(.docs-modal-layer), body:has(.docs-mobile-nav) { overflow: hidden; }\nbutton, input, textarea { font: inherit; }\nbutton, a { -webkit-tap-highlight-color: transparent; }\na { color: inherit; }\nbutton:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 2px solid color-mix(in srgb, var(--docs-accent) 74%, white); outline-offset: 3px; }\n::selection { background: color-mix(in srgb, var(--docs-accent) 24%, transparent); }\n\n.docs-skip-link { position: fixed; z-index: 200; top: -64px; left: 16px; padding: 9px 13px; border-radius: 8px; background: var(--docs-text); color: var(--docs-bg); font-weight: 650; text-decoration: none; }\n.docs-skip-link:focus { top: 12px; }\n.docs-app.is-navigating::before { content: \"\"; position: fixed; z-index: 240; inset: 0 auto auto 0; width: 42%; height: 2px; background: linear-gradient(90deg, var(--docs-accent), var(--docs-accent-2)); box-shadow: 0 0 14px color-mix(in srgb, var(--docs-accent-2) 48%, transparent); animation: docs-navigation-progress .8s ease-in-out infinite alternate; }\n::view-transition-old(docs-article) { animation: docs-page-out .11s ease-in both; }\n::view-transition-new(docs-article) { animation: docs-page-in .16s ease-out both; }\n\n`\n","export const DOCS_CONTENT_CSS = String.raw`\n.docs-main { min-width: 0; margin-left: var(--docs-sidebar-width); transition: margin-right .24s ease; }\n.docs-reader-grid { display: grid; grid-template-columns: minmax(0, 670px) 212px; justify-content: center; gap: 70px; width: 100%; padding: 62px 52px 156px; }\n.docs-article { min-width: 0; view-transition-name: docs-article; }\n.docs-breadcrumbs { display: none; align-items: center; gap: 5px; margin-bottom: 24px; color: var(--docs-muted); font-size: 12px; }\n.docs-breadcrumbs span { display: inline-flex; align-items: center; gap: 5px; }\n.docs-breadcrumbs svg { width: 12px; height: 12px; }\n.docs-article-header { margin-bottom: 38px; }\n.docs-article-meta { display: flex; align-items: center; justify-content: space-between; gap: 18px; min-height: 32px; margin-bottom: 7px; }\n.docs-eyebrow { color: color-mix(in srgb, var(--docs-accent) 76%, var(--docs-text)); font-size: 12px; font-weight: 700; letter-spacing: .035em; }\n.docs-contextual-actions { position: relative; display: inline-flex; flex: 0 0 auto; align-items: stretch; height: 30px; border: 1px solid var(--docs-border); border-radius: 8px; background: color-mix(in srgb, var(--docs-surface) 92%, transparent); box-shadow: var(--docs-shadow-sm); }\n.docs-contextual-actions button, .docs-contextual-actions a, .docs-contextual-actions summary { display: inline-flex; align-items: center; gap: 6px; min-width: 0; height: 28px; padding: 0 9px; border: 0; background: transparent; color: var(--docs-muted); cursor: pointer; font: 590 11px/1 var(--docs-font-body); text-decoration: none; white-space: nowrap; }\n.docs-contextual-actions button:hover, .docs-contextual-actions a:hover, .docs-contextual-actions summary:hover { color: var(--docs-text); }\n.docs-contextual-actions svg { flex: 0 0 auto; width: 13px; height: 13px; }\n.docs-contextual-actions details { position: relative; border-left: 1px solid var(--docs-border); }\n.docs-contextual-actions summary { width: 29px; padding: 0; justify-content: center; list-style: none; }\n.docs-contextual-actions summary::-webkit-details-marker { display: none; }\n.docs-contextual-actions details[open] summary { background: var(--docs-panel); color: var(--docs-text); }\n.docs-contextual-actions details[open] summary svg { transform: rotate(180deg); }\n.docs-contextual-menu { position: absolute; z-index: 35; top: calc(100% + 7px); right: -1px; display: grid; width: min(316px, calc(100vw - 32px)); max-height: min(510px, calc(100vh - 120px)); overflow: auto; padding: 6px; border: 1px solid var(--docs-border-strong); border-radius: 12px; background: var(--docs-surface-raised); box-shadow: var(--docs-shadow-lg); }\n.docs-contextual-menu button, .docs-contextual-menu a { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; align-items: center; gap: 9px; width: 100%; height: auto; min-height: 50px; padding: 6px 8px; border-radius: 8px; text-align: left; }\n.docs-contextual-menu button:hover, .docs-contextual-menu a:hover { background: var(--docs-panel); }\n.docs-contextual-action-icon { display: grid; place-items: center; width: 30px; height: 30px; border: 1px solid var(--docs-border); border-radius: 7px; background: var(--docs-surface); color: var(--docs-text-soft); }\n.docs-contextual-action-icon svg { width: 15px; height: 15px; }\n.docs-contextual-action-copy { display: grid; min-width: 0; gap: 2px; }\n.docs-contextual-action-copy strong { overflow: hidden; color: var(--docs-text); font-size: 12px; font-weight: 640; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; }\n.docs-contextual-action-copy small { overflow: hidden; color: var(--docs-muted); font-size: 10.5px; font-weight: 450; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }\n.docs-contextual-menu .docs-contextual-action-external { width: 12px; height: 12px; color: var(--docs-faint); }\n.docs-article-header h1 { margin: 0; color: var(--docs-text); font-family: var(--docs-font-heading); font-size: clamp(34px, 3vw, 41px); font-weight: 650; letter-spacing: -.038em; line-height: 1.09; overflow-wrap: anywhere; }\n.docs-lede { max-width: 650px; margin: 13px 0 0; color: var(--docs-text-soft); font-size: 17.5px; letter-spacing: -.01em; line-height: 1.56; }\n\n.docs-prose { color: var(--docs-text-soft); }\n.docs-prose > :first-child { margin-top: 0; }\n.docs-prose h1, .docs-prose h2, .docs-prose h3, .docs-prose h4, .docs-prose h5, .docs-prose h6 { color: var(--docs-text); font-family: var(--docs-font-heading); scroll-margin-top: 92px; }\n.docs-prose h1 { margin: 46px 0 17px; font-size: 30px; letter-spacing: -.03em; line-height: 1.2; }\n.docs-prose h2 { margin: 49px 0 16px; padding-top: 5px; font-size: 25px; font-weight: 625; letter-spacing: -.03em; line-height: 1.25; }\n.docs-prose h3 { margin: 33px 0 12px; font-size: 19px; font-weight: 620; letter-spacing: -.018em; line-height: 1.35; }\n.docs-prose h4 { margin: 27px 0 10px; font-size: 16px; font-weight: 620; }\n.docs-heading-anchor { margin-left: 8px; color: transparent; font-size: .72em; font-weight: 500; text-decoration: none; }\n.docs-prose h2:hover .docs-heading-anchor, .docs-prose h3:hover .docs-heading-anchor, .docs-heading-anchor:focus-visible { color: var(--docs-faint); }\n.docs-prose p { margin: 0 0 19px; }\n.docs-prose ul, .docs-prose ol { margin: 0 0 21px; padding-left: 25px; }\n.docs-prose li { margin: 5px 0; padding-left: 3px; }\n.docs-prose li::marker { color: var(--docs-faint); }\n.docs-prose strong { color: var(--docs-text); font-weight: 610; }\n.docs-prose a { color: color-mix(in srgb, var(--docs-accent) 78%, var(--docs-text)); font-weight: 560; text-decoration-color: color-mix(in srgb, var(--docs-accent) 38%, transparent); text-decoration-thickness: 1px; text-underline-offset: 3px; }\n.docs-prose a:hover { text-decoration-color: currentColor; }\n.docs-prose img { display: block; max-width: 100%; height: auto; margin: 26px 0; border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-surface); box-shadow: var(--docs-shadow-sm); }\n.docs-prose blockquote { margin: 25px 0; padding: 4px 0 4px 18px; border-left: 2px solid color-mix(in srgb, var(--docs-accent) 45%, var(--docs-border)); color: var(--docs-muted); }\n.docs-prose blockquote p:last-child { margin-bottom: 0; }\n.docs-prose hr { margin: 44px 0; border: 0; border-top: 1px solid var(--docs-border); }\n.docs-prose :not(pre) > code, .docs-assistant-message code { padding: 2px 5px; border: 1px solid var(--docs-border); border-radius: 5px; background: var(--docs-panel); color: var(--docs-text); font: 520 .88em/1.4 var(--docs-font-mono); overflow-wrap: anywhere; }\n.docs-prose pre { position: relative; overflow: auto; margin: 23px 0; padding: 20px 20px 19px; border: 1px solid color-mix(in srgb, var(--docs-border-strong) 50%, #000); border-radius: 12px; background: linear-gradient(145deg, var(--docs-code-panel), var(--docs-code-bg)); color: var(--docs-code-text); box-shadow: 0 12px 34px rgba(7, 9, 14, .12); font: 13px/1.66 var(--docs-font-mono); tab-size: 2; }\n.docs-prose pre code { display: block; min-width: max-content; padding-right: 76px; background: transparent; }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .docs-prose pre { border-color: var(--docs-border); background: linear-gradient(145deg, #f7f8fb, #f1f3f7); color: #252936; box-shadow: 0 8px 26px rgba(15, 18, 28, .06); }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .docs-code-actions button { border-color: rgba(17, 19, 26, .1); background: rgba(255, 255, 255, .72); color: #606675; }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .docs-code-actions button:hover { background: #fff; color: #11131a; }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-keyword, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-selector-tag, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-literal { color: #6f42c1; }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-string, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-title, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-name, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-type { color: #087f5b; }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-number, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-meta, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-built_in { color: #a15c00; }\n:root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-comment, :root[data-code-mode=\"system\"][data-theme=\"light\"] .hljs-quote { color: #7b8190; }\n.docs-code-actions { position: sticky; float: right; top: 0; right: 0; display: inline-flex; gap: 4px; margin: -12px -12px 0 10px; }\n.docs-code-actions button { height: 28px; padding: 0 8px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 7px; background: rgba(255, 255, 255, .07); color: #aeb5c6; cursor: pointer; font-size: 10.5px; font-weight: 650; }\n.docs-code-actions button:hover { background: rgba(255, 255, 255, .12); color: #fff; }\n.hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-section, .hljs-link { color: #b7a7ff; }\n.hljs-string, .hljs-title, .hljs-name, .hljs-type, .hljs-attribute, .hljs-symbol, .hljs-bullet, .hljs-addition { color: #73dfb4; }\n.hljs-number, .hljs-meta, .hljs-built_in, .hljs-builtin-name, .hljs-params { color: #f0b96b; }\n.hljs-comment, .hljs-quote, .hljs-deletion { color: #767f93; font-style: italic; }\n.hljs-variable, .hljs-template-variable, .hljs-regexp { color: #ff95b4; }\n\n.docs-prose table { display: block; width: 100%; overflow: auto; margin: 25px 0 29px; border: 1px solid var(--docs-border); border-radius: 10px; border-collapse: separate; border-spacing: 0; background: var(--docs-surface); font-size: 14px; }\n.docs-prose thead { background: var(--docs-panel); }\n.docs-prose th, .docs-prose td { min-width: 130px; padding: 10px 13px; border-right: 1px solid var(--docs-border); border-bottom: 1px solid var(--docs-border); text-align: left; vertical-align: top; }\n.docs-prose th:last-child, .docs-prose td:last-child { border-right: 0; }\n.docs-prose tr:last-child td { border-bottom: 0; }\n.docs-prose th { color: var(--docs-text); font-size: 12px; font-weight: 700; letter-spacing: .02em; }\n\n.docs-callout { --callout-accent: var(--docs-accent); position: relative; margin: 24px 0; padding: 16px 18px 16px 20px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--callout-accent) 25%, var(--docs-border)); border-radius: 11px; background: linear-gradient(105deg, color-mix(in srgb, var(--callout-accent) 7%, var(--docs-surface)), var(--docs-surface)); }\n.docs-callout::before { content: \"\"; position: absolute; inset: 0 auto 0 0; width: 2px; background: var(--callout-accent); }\n.docs-callout > strong { display: block; margin-bottom: 3px; color: color-mix(in srgb, var(--callout-accent) 72%, var(--docs-text)); font-size: 13px; }\n.docs-callout > :last-child { margin-bottom: 0; }\n.docs-callout-warning { --callout-accent: #e58a21; }\n.docs-callout-tip { --callout-accent: #17a673; }\n.docs-callout-info { --callout-accent: #278fdb; }\n.docs-callout-note { --callout-accent: var(--docs-accent); }\n.docs-card { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 12px; margin: 14px 0; padding: 16px 17px; border: 1px solid var(--docs-border); border-radius: 11px; background: var(--docs-surface); box-shadow: var(--docs-shadow-sm); text-decoration: none !important; transition: border-color .16s, box-shadow .16s, transform .16s; }\n.docs-card:hover { border-color: color-mix(in srgb, var(--docs-accent) 42%, var(--docs-border)); box-shadow: 0 7px 24px rgba(15, 18, 28, .07); transform: translateY(-1px); }\n.docs-card strong { display: block; margin-bottom: 2px; }\n.docs-accordion-group { margin: 21px 0; border: 1px solid var(--docs-border); border-radius: 11px; overflow: hidden; }\n.docs-accordion-group .docs-accordion { margin: 0; border: 0; border-bottom: 1px solid var(--docs-border); border-radius: 0; }\n.docs-accordion-group .docs-accordion:last-child { border-bottom: 0; }\n.docs-accordion { margin: 14px 0; padding: 0 16px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-surface); }\n.docs-accordion summary { padding: 14px 25px 14px 0; color: var(--docs-text); cursor: pointer; font-weight: 650; list-style: none; }\n.docs-accordion summary::-webkit-details-marker { display: none; }\n.docs-accordion summary::after { content: \"+\"; float: right; margin-right: -20px; color: var(--docs-faint); font-size: 18px; font-weight: 400; line-height: 1; }\n.docs-accordion[open] summary::after { content: \"−\"; }\n.docs-accordion > :last-child { margin-bottom: 15px; }\n.docs-steps { margin: 25px 0; counter-reset: docs-step; }\n.docs-step { position: relative; margin-left: 13px; padding: 0 0 29px 34px; border-left: 1px solid var(--docs-border-strong); counter-increment: docs-step; }\n.docs-step:last-child { padding-bottom: 3px; border-color: transparent; }\n.docs-step::before { content: counter(docs-step); position: absolute; left: -14px; top: -1px; display: grid; place-items: center; width: 27px; height: 27px; border: 1px solid color-mix(in srgb, var(--docs-accent) 46%, var(--docs-border)); border-radius: 50%; background: var(--docs-surface); color: color-mix(in srgb, var(--docs-accent) 78%, var(--docs-text)); box-shadow: 0 0 0 5px var(--docs-bg); font-size: 11px; font-weight: 740; }\n.docs-step h3 { margin-top: 0; }\n.docs-tabs { margin: 23px 0; overflow: hidden; border: 1px solid var(--docs-border); border-radius: 11px; background: var(--docs-surface); }\n.docs-tab-buttons { display: flex; gap: 2px; overflow-x: auto; padding: 6px; border-bottom: 1px solid var(--docs-border); background: var(--docs-panel); }\n.docs-tab-buttons button { flex: 0 0 auto; padding: 6px 10px; border: 0; border-radius: 7px; background: transparent; color: var(--docs-muted); cursor: pointer; font-size: 12.5px; font-weight: 620; }\n.docs-tab-buttons button[aria-selected=\"true\"] { background: var(--docs-surface); color: var(--docs-text); box-shadow: var(--docs-shadow-sm); }\n.docs-tab { padding: 16px 18px 2px; }\n.docs-tab > :first-child { margin-top: 0; }\n.docs-code-group { margin: 23px 0; overflow: hidden; border: 1px solid var(--docs-border-strong); border-radius: 12px; background: var(--docs-surface); }\n.docs-code-group-title { padding: 8px 13px; border-bottom: 1px solid var(--docs-border); background: var(--docs-panel); color: var(--docs-muted); font-size: 11px; font-weight: 650; }\n.docs-code-group .docs-tab-buttons { border-color: color-mix(in srgb, var(--docs-border) 72%, transparent); background: var(--docs-panel); }\n.docs-code-tab { padding: 0; }\n.docs-code-group pre { margin: 0; border: 0; border-radius: 0; box-shadow: none; }\n\n.docs-api-badge { display: flex; align-items: center; gap: 9px; margin: 0 0 25px; padding: 11px 13px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-panel); }\n.method { display: inline-grid; place-items: center; min-width: 52px; padding: 4px 7px; border-radius: 6px; background: #3178e8; color: white; font: 750 10px/1.3 var(--docs-font-mono); letter-spacing: .035em; }\n.method-post { background: #138b5b; }\n.method-put, .method-patch { background: #bd7215; }\n.method-delete { background: #cd464d; }\n.docs-playground { margin: 48px 0 30px; padding: 20px; border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-panel); }\n.docs-playground-title { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n.docs-playground-title > div { display: flex; align-items: center; gap: 9px; }\n.docs-playground-title code { overflow: hidden; color: var(--docs-muted); font: 11px var(--docs-font-mono); text-overflow: ellipsis; white-space: nowrap; }\n.docs-playground > p { color: var(--docs-muted); font-size: 12px; }\n.docs-playground label { display: grid; gap: 5px; margin: 13px 0; color: var(--docs-muted); font-size: 11px; font-weight: 650; }\n.docs-playground input, .docs-playground textarea { width: 100%; padding: 10px; border: 1px solid var(--docs-border-strong); border-radius: 8px; background: var(--docs-surface); color: var(--docs-text); font: 12.5px/1.55 var(--docs-font-mono); resize: vertical; }\n.docs-playground > button { padding: 9px 13px; border: 0; border-radius: 8px; background: var(--docs-accent); color: white; cursor: pointer; font-size: 12px; font-weight: 680; }\n.docs-playground > button:disabled { opacity: .58; cursor: wait; }\n.docs-playground > pre { max-height: 320px; overflow: auto; margin: 14px 0 0; padding: 13px; border-radius: 8px; background: var(--docs-code-bg); color: var(--docs-code-text); font: 11.5px/1.55 var(--docs-font-mono); white-space: pre-wrap; }\n\n.docs-context-rail { position: sticky; top: 92px; align-self: start; max-height: calc(100vh - 116px); overflow: auto; padding-left: 18px; }\n.docs-outline { display: grid; gap: 2px; }\n.docs-outline h2 { margin: 0 0 7px; color: var(--docs-text); font-size: 11.5px; font-weight: 700; }\n.docs-outline a { padding: 3px 0; color: var(--docs-muted); font-size: 11.5px; line-height: 1.42; text-decoration: none; transition: color .12s; }\n.docs-outline a:hover, .docs-outline a.is-active { color: var(--docs-text); }\n.docs-outline a.is-active { font-weight: 640; }\n.docs-outline a.depth-3 { padding-left: 11px; }\n.docs-feedback { display: flex; align-items: center; gap: 7px; min-height: 47px; margin-top: 58px; padding: 11px 13px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-panel); color: var(--docs-muted); font-size: 12px; }\n.docs-feedback > span { margin-right: auto; }\n.docs-feedback button { padding: 5px 9px; border: 1px solid var(--docs-border); border-radius: 7px; background: var(--docs-surface); color: var(--docs-muted); cursor: pointer; font-size: 11px; }\n.docs-feedback button:hover { color: var(--docs-text); }\n.docs-feedback p { display: flex; align-items: center; gap: 7px; margin: 0; }\n.docs-feedback svg { width: 15px; color: #17a673; }\n.docs-pagination { display: grid; grid-template-columns: 1fr 1fr; gap: 13px; margin-top: 28px; }\n.docs-pagination a { display: flex; flex-direction: column; min-height: 86px; padding: 14px 15px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-surface); text-decoration: none; transition: border-color .15s, transform .15s; }\n.docs-pagination a:hover { border-color: color-mix(in srgb, var(--docs-accent) 38%, var(--docs-border)); transform: translateY(-1px); }\n.docs-pagination a:last-child { text-align: right; }\n.docs-pagination small { margin-bottom: 7px; color: var(--docs-faint); font-size: 10.5px; font-weight: 650; text-transform: uppercase; letter-spacing: .05em; }\n.docs-pagination span { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--docs-text); font-size: 13px; font-weight: 650; }\n.docs-pagination a:last-child span { justify-content: flex-end; }\n.docs-pagination svg { flex: 0 0 auto; width: 15px; }\n.docs-pagination svg.is-back { transform: rotate(180deg); }\n\n`\n\n","export const DOCS_NAVIGATION_CSS = String.raw`\n.docs-header { position: fixed; z-index: 50; inset: 0 0 auto; display: grid; grid-template-columns: var(--docs-sidebar-width) minmax(300px, 1fr) auto; align-items: center; height: var(--docs-header-height); border-bottom: 1px solid color-mix(in srgb, var(--docs-border) 84%, transparent); background: color-mix(in srgb, var(--docs-bg) 91%, transparent); backdrop-filter: blur(18px) saturate(1.15); transition: right .24s ease; }\n.docs-brand { display: flex; align-items: center; gap: 10px; min-width: 0; height: 100%; padding: 0 23px; color: var(--docs-text); text-decoration: none; }\n.docs-brand-mark { position: relative; display: grid; place-items: center; width: 27px; height: 27px; color: var(--docs-accent); }\n.docs-brand-mark::before { content: \"\"; position: absolute; inset: -7px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--docs-accent-2) 15%, transparent), transparent 68%); }\n.docs-brand-mark svg { position: relative; width: 27px; height: 27px; }\n.docs-brand-name { overflow: hidden; font-size: 16px; font-weight: 720; letter-spacing: -.025em; text-overflow: ellipsis; white-space: nowrap; }\n.docs-brand-product { padding-left: 10px; border-left: 1px solid var(--docs-border-strong); color: var(--docs-muted); font-size: 12px; font-weight: 600; letter-spacing: .04em; }\n.docs-brand-logo { max-width: 145px; max-height: 26px; object-fit: contain; object-position: left center; }\n.docs-brand-logo-dark { display: none; }\n:root[data-theme=\"dark\"] .docs-brand-logo-light { display: none; }\n:root[data-theme=\"dark\"] .docs-brand-logo-dark { display: block; }\n\n.docs-header-center { display: flex; align-items: center; justify-content: center; padding: 0 20px; }\n.docs-search-trigger { display: flex; align-items: center; width: min(380px, 38vw); height: 38px; gap: 9px; padding: 0 10px 0 12px; border: 1px solid var(--docs-border); border-radius: 10px; background: color-mix(in srgb, var(--docs-surface) 88%, transparent); color: var(--docs-muted); box-shadow: var(--docs-shadow-sm); cursor: pointer; text-align: left; transition: border-color .15s, color .15s, transform .15s; }\n.docs-search-trigger:hover { border-color: var(--docs-border-strong); color: var(--docs-text); transform: translateY(-1px); }\n.docs-search-trigger > span { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.docs-search-trigger svg { width: 16px; }\n.docs-search-trigger kbd { padding: 2px 5px; border: 1px solid var(--docs-border); border-radius: 5px; background: var(--docs-panel); color: var(--docs-faint); font: 600 10px/1.3 var(--docs-font-mono); }\n\n.docs-top-links { display: flex; align-items: center; gap: 18px; height: 100%; padding: 0 24px 0 10px; }\n.docs-top-links a { display: inline-flex; align-items: center; gap: 4px; color: var(--docs-muted); font-size: 13px; font-weight: 560; text-decoration: none; white-space: nowrap; }\n.docs-top-links a:hover { color: var(--docs-text); }\n.docs-top-links svg { width: 12px; height: 12px; }\n.docs-mobile-actions { display: none; align-items: center; gap: 3px; padding-right: 12px; }\n.docs-icon-button { display: grid; place-items: center; width: 38px; height: 38px; padding: 0; border: 0; border-radius: 9px; background: transparent; color: var(--docs-muted); cursor: pointer; }\n.docs-icon-button:hover { background: var(--docs-panel); color: var(--docs-text); }\n\n.docs-frame { min-height: 100vh; padding-top: var(--docs-header-height); }\n.docs-sidebar { position: fixed; z-index: 30; inset: var(--docs-header-height) auto 0 0; display: flex; flex-direction: column; width: var(--docs-sidebar-width); border-right: 1px solid var(--docs-border); background: var(--docs-bg); }\n.docs-page-tree { flex: 1; overflow: auto; padding: 26px 18px 36px 22px; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: var(--docs-border-strong) transparent; }\n.docs-nav-section { margin: 0 0 25px; }\n.docs-nav-section > h2 { margin: 0 0 7px; padding: 0 9px; color: var(--docs-text-soft); font-size: 11.5px; font-weight: 720; letter-spacing: .025em; }\n.docs-nav-link { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 33px; margin: 1px 0; padding: 6px 9px; border-radius: 8px; color: var(--docs-muted); font-size: 13.25px; line-height: 1.38; text-decoration: none; transition: background .12s, color .12s; }\n.docs-nav-link > span { min-width: 0; overflow-wrap: anywhere; }\n.docs-nav-link > svg { flex: 0 0 auto; width: 12px; height: 12px; }\n.docs-nav-link:hover { background: var(--docs-panel); color: var(--docs-text); }\n.docs-nav-link.is-active { position: relative; background: linear-gradient(90deg, color-mix(in srgb, var(--docs-accent) 11%, transparent), color-mix(in srgb, var(--docs-accent-2) 5%, transparent)); color: color-mix(in srgb, var(--docs-accent) 77%, var(--docs-text)); font-weight: 650; }\n.docs-nav-link.is-active::before { content: \"\"; position: absolute; inset: 8px auto 8px -5px; width: 2px; border-radius: 4px; background: linear-gradient(var(--docs-accent), var(--docs-accent-2)); box-shadow: 0 0 10px color-mix(in srgb, var(--docs-accent-2) 52%, transparent); }\n.docs-nav-folder { margin: 2px 0; }\n.docs-nav-folder > summary { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: 6px 9px; border-radius: 8px; color: var(--docs-muted); cursor: pointer; font-size: 13.25px; font-weight: 620; list-style: none; }\n.docs-nav-folder > summary::-webkit-details-marker { display: none; }\n.docs-nav-folder > summary:hover { background: var(--docs-panel); color: var(--docs-text); }\n.docs-nav-folder > summary svg { width: 13px; transition: transform .16s; }\n.docs-nav-folder:not([open]) > summary svg { transform: rotate(-90deg); }\n.docs-nav-folder > div { margin-left: 8px; padding-left: 9px; border-left: 1px solid var(--docs-border); }\n\n.docs-sidebar-footer { flex: 0 0 auto; display: grid; gap: 11px; padding: 13px 20px 16px 22px; border-top: 1px solid var(--docs-border); background: color-mix(in srgb, var(--docs-panel) 46%, var(--docs-bg)); }\n.docs-sidebar-footer > nav { display: flex; flex-wrap: wrap; gap: 8px 13px; }\n.docs-sidebar-footer a, .docs-sidebar-footer > span { color: var(--docs-faint); font-size: 10.5px; text-decoration: none; }\n.docs-sidebar-footer a:hover { color: var(--docs-text); }\n.docs-theme-controls { display: inline-flex; width: max-content; padding: 2px; border: 1px solid var(--docs-border); border-radius: 9px; background: var(--docs-surface); box-shadow: var(--docs-shadow-sm); }\n.docs-theme-controls button { display: grid; place-items: center; width: 28px; height: 25px; padding: 0; border: 0; border-radius: 6px; background: transparent; color: var(--docs-faint); cursor: pointer; }\n.docs-theme-controls button:hover { color: var(--docs-text); }\n.docs-theme-controls button[aria-pressed=\"true\"] { background: var(--docs-panel-strong); color: var(--docs-text); }\n.docs-theme-controls svg { width: 14px; height: 14px; }\n\n`\n\n","export const DOCS_OVERLAYS_CSS = String.raw`\n.docs-modal-layer { position: fixed; z-index: 100; inset: 0; display: flex; background: rgba(9, 11, 17, .48); backdrop-filter: blur(5px); animation: docs-fade-in .14s ease-out; }\n.docs-search-layer { align-items: flex-start; justify-content: center; padding: min(12vh, 100px) 16px 16px; }\n.docs-search-dialog { width: min(680px, 100%); overflow: hidden; border: 1px solid var(--docs-border-strong); border-radius: 14px; background: var(--docs-surface-raised); box-shadow: var(--docs-shadow-lg); animation: docs-dialog-in .18s ease-out; }\n.docs-search-input { display: flex; align-items: center; gap: 11px; height: 56px; padding: 0 15px; border-bottom: 1px solid var(--docs-border); }\n.docs-search-input > svg { flex: 0 0 auto; width: 18px; color: var(--docs-muted); }\n.docs-search-input input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--docs-text); font-size: 16px; }\n.docs-search-input input::placeholder { color: var(--docs-faint); }\n.docs-search-input kbd, .docs-search-dialog footer kbd { padding: 2px 5px; border: 1px solid var(--docs-border); border-radius: 5px; background: var(--docs-panel); color: var(--docs-faint); font: 600 9px/1.4 var(--docs-font-mono); }\n.docs-search-results { min-height: 180px; max-height: min(56vh, 500px); overflow: auto; padding: 7px; }\n.docs-search-empty { display: grid; place-items: center; min-height: 180px; padding: 25px; color: var(--docs-muted); text-align: center; }\n.docs-search-empty svg { width: 29px; height: 29px; margin-bottom: 8px; color: var(--docs-accent); }\n.docs-search-empty strong { color: var(--docs-text); font-size: 14px; }\n.docs-search-empty span { font-size: 12px; }\n.docs-search-state { padding: 28px 16px; color: var(--docs-muted); font-size: 13px; text-align: center; }\n.docs-search-result, .docs-search-assistant { display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; min-height: 64px; padding: 10px 11px; border: 0; border-radius: 9px; background: transparent; color: var(--docs-text); cursor: pointer; text-align: left; text-decoration: none; }\n.docs-search-result.is-active, .docs-search-assistant.is-active { background: var(--docs-panel); }\n.docs-search-result > span, .docs-search-assistant > span { min-width: 0; flex: 1; display: grid; }\n.docs-search-result strong, .docs-search-assistant strong { overflow: hidden; font-size: 13px; font-weight: 670; text-overflow: ellipsis; white-space: nowrap; }\n.docs-search-result small, .docs-search-assistant small { overflow: hidden; color: var(--docs-muted); font-size: 11.5px; line-height: 1.5; text-overflow: ellipsis; white-space: nowrap; }\n.docs-search-result > svg, .docs-search-assistant > svg:last-child { flex: 0 0 auto; width: 14px; color: var(--docs-faint); }\n.docs-search-assistant { border-top: 1px solid var(--docs-border); border-radius: 0 0 9px 9px; color: color-mix(in srgb, var(--docs-accent) 76%, var(--docs-text)); }\n.docs-search-assistant > svg:first-child { flex: 0 0 auto; width: 19px; }\n.docs-search-result mark { border-radius: 3px; background: color-mix(in srgb, var(--docs-accent) 18%, transparent); color: inherit; }\n.docs-search-dialog > footer { display: flex; gap: 17px; padding: 8px 13px; border-top: 1px solid var(--docs-border); background: var(--docs-panel); color: var(--docs-faint); font-size: 9.5px; }\n.docs-search-dialog > footer span { display: flex; align-items: center; gap: 3px; }\n\n.docs-mobile-nav { display: flex; flex-direction: column; width: min(342px, 88vw); height: 100%; border-right: 1px solid var(--docs-border); background: var(--docs-bg); box-shadow: var(--docs-shadow-lg); animation: docs-drawer-in .2s ease-out; }\n.docs-mobile-nav > header { display: flex; align-items: center; justify-content: space-between; min-height: 64px; border-bottom: 1px solid var(--docs-border); }\n.docs-mobile-nav > header .docs-brand { border: 0; padding-left: 20px; }\n.docs-mobile-nav > header .docs-icon-button { margin-right: 12px; }\n.docs-mobile-nav > .docs-page-tree { padding-top: 22px; }\n.docs-mobile-nav > footer { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 13px; padding: 13px 18px; border-top: 1px solid var(--docs-border); }\n.docs-mobile-nav > footer a { color: var(--docs-muted); font-size: 11px; text-decoration: none; }\n\n.docs-assistant-launcher { position: fixed; z-index: 70; left: 50%; bottom: 20px; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 0; width: min(452px, calc(100vw - 36px)); min-height: 48px; padding: 5px; border: 1px solid color-mix(in srgb, var(--docs-border-strong) 92%, var(--docs-accent)); border-radius: 13px; background: color-mix(in srgb, var(--docs-surface-raised) 96%, transparent); color: var(--docs-text); box-shadow: 0 18px 45px rgba(15, 18, 28, .11), 0 2px 8px rgba(15, 18, 28, .05); transform: translateX(-50%); backdrop-filter: blur(18px) saturate(1.1); transition: border-color .16s, box-shadow .16s, transform .16s; }\n.docs-assistant-launcher:hover { border-color: color-mix(in srgb, var(--docs-accent) 32%, var(--docs-border-strong)); box-shadow: 0 20px 48px rgba(15, 18, 28, .14), 0 2px 8px rgba(15, 18, 28, .06); transform: translateX(-50%) translateY(-1px); }\n.docs-assistant-launcher input { min-width: 0; height: 36px; padding: 0 12px; border: 0; outline: 0; background: transparent; color: var(--docs-text); font-size: 13px; }\n.docs-assistant-launcher input::placeholder { color: var(--docs-muted); }\n.docs-launcher-agent, .docs-launcher-send { display: grid; place-items: center; height: 36px; border: 0; border-radius: 9px; cursor: pointer; }\n.docs-launcher-agent { width: auto; padding: 0 13px 0 9px; border-right: 1px solid var(--docs-border); border-radius: 0; background: transparent; color: var(--docs-text-soft); font-size: 11.5px; font-weight: 650; white-space: nowrap; }\n.docs-launcher-agent:hover { color: var(--docs-accent); }\n.docs-launcher-send { width: 36px; padding: 0; }\n.docs-launcher-send { background: var(--docs-accent); color: #fff; }\n.docs-launcher-send:disabled { background: var(--docs-panel); color: var(--docs-faint); cursor: default; }\n.docs-launcher-send svg { width: 15px; }\n.docs-assistant { position: fixed; z-index: 90; left: 50%; bottom: 18px; display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto; width: min(620px, calc(100vw - 36px)); height: min(570px, calc(100vh - 94px)); overflow: hidden; border: 1px solid var(--docs-border-strong); border-radius: 16px; background: var(--docs-surface); box-shadow: 0 28px 80px rgba(15, 18, 28, .18), 0 6px 22px rgba(15, 18, 28, .08); animation: docs-assistant-in .2s ease-out; transform: translateX(-50%); }\n.docs-assistant > header { display: flex; align-items: center; justify-content: space-between; min-height: 54px; padding: 0 11px 0 18px; border-bottom: 1px solid var(--docs-border); }\n.docs-assistant > header > div { display: flex; align-items: center; }\n.docs-assistant > header > div > span { display: grid; gap: 1px; }\n.docs-assistant > header strong { font-size: 13px; font-weight: 620; letter-spacing: -.01em; }\n.docs-assistant > header small { color: var(--docs-muted); font-size: 10.5px; }\n.docs-assistant > header button { display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--docs-muted); cursor: pointer; }\n.docs-assistant > header button:hover { background: var(--docs-panel); color: var(--docs-text); }\n.docs-assistant > header button:focus-visible { outline-width: 1px; outline-offset: 1px; }\n.docs-assistant > header button svg { width: 15px; height: 15px; }\n.docs-assistant-messages { overflow: auto; padding: 20px 20px 14px; overscroll-behavior: contain; }\n.docs-assistant-message { display: flex; align-items: flex-start; margin: 0 0 20px; color: var(--docs-text-soft); font-size: 13px; line-height: 1.64; }\n.docs-assistant-message > div { min-width: 0; max-width: 590px; }\n.docs-assistant-message.is-user { justify-content: flex-end; margin-left: 54px; }\n.docs-assistant-message.is-user > div { padding: 8px 11px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-panel); color: var(--docs-text); }\n.docs-assistant-message.is-error > div { color: #c64b50; }\n.docs-assistant-message a { color: color-mix(in srgb, var(--docs-accent) 79%, var(--docs-text)); font-weight: 580; text-underline-offset: 3px; }\n.docs-assistant-markdown > :first-child { margin-top: 0; }\n.docs-assistant-markdown > :last-child { margin-bottom: 0; }\n.docs-assistant-markdown p { margin: 0 0 11px; }\n.docs-assistant-markdown ul, .docs-assistant-markdown ol { margin: 0 0 12px; padding-left: 20px; }\n.docs-assistant-markdown li { margin: 3px 0; }\n.docs-assistant-heading { display: block; margin: 15px 0 6px; color: var(--docs-text); font-family: var(--docs-font-heading); font-size: 13px; }\n.docs-assistant-code { overflow: hidden; margin: 12px 0; border: 1px solid var(--docs-border-strong); border-radius: 10px; background: var(--docs-code-bg); color: var(--docs-code-text); }\n.docs-assistant-code figcaption { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: 0 8px 0 12px; border-bottom: 1px solid rgba(255,255,255,.09); background: var(--docs-code-panel); color: #aeb5c6; font: 600 10.5px/1.3 var(--docs-font-mono); }\n.docs-assistant-code button { padding: 4px 7px; border: 1px solid rgba(255,255,255,.1); border-radius: 6px; background: rgba(255,255,255,.06); color: inherit; cursor: pointer; font-size: 10px; }\n.docs-assistant-code pre { overflow: auto; margin: 0; padding: 13px; font: 11.5px/1.58 var(--docs-font-mono); }\n.docs-assistant-code code { padding: 0; border: 0; background: transparent; color: inherit; font: inherit; white-space: pre; }\n.docs-assistant-activity { display: inline-flex; align-items: center; gap: 8px; color: var(--docs-muted); font-size: 12px; }\n.docs-assistant-activity > span { width: 6px; height: 6px; border-radius: 50%; background: var(--docs-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--docs-accent) 10%, transparent); animation: docs-activity 1.25s ease-in-out infinite; }\n.docs-assistant-suggestions { display: grid; gap: 7px; margin-top: 26px; }\n.docs-assistant-suggestions p { margin: 0 0 1px; color: var(--docs-faint); font-size: 10px; font-weight: 650; letter-spacing: .035em; text-transform: uppercase; }\n.docs-assistant-suggestions button { min-height: 38px; padding: 8px 11px; border: 1px solid var(--docs-border); border-radius: 9px; background: var(--docs-bg); color: var(--docs-muted); cursor: pointer; font-size: 12px; text-align: left; transition: border-color .14s, background .14s, color .14s; }\n.docs-assistant-suggestions button:hover { border-color: var(--docs-border-strong); background: var(--docs-panel); color: var(--docs-text); }\n.docs-assistant-composer { display: flex; align-items: flex-end; gap: 7px; margin: 0 16px 9px; padding: 7px; border: 1px solid var(--docs-border-strong); border-radius: 11px; background: var(--docs-bg); box-shadow: 0 3px 12px rgba(15, 18, 28, .045); }\n.docs-assistant-composer:focus-within { border-color: color-mix(in srgb, var(--docs-accent) 52%, var(--docs-border)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--docs-accent) 9%, transparent); }\n.docs-assistant-composer textarea { min-height: 41px; max-height: 160px; flex: 1; padding: 4px 5px; resize: none; border: 0; outline: 0; background: transparent; color: var(--docs-text); font-size: 12.5px; line-height: 1.5; }\n.docs-assistant-composer button { display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 8px; background: var(--docs-accent); color: white; cursor: pointer; }\n.docs-assistant-composer button:disabled { background: var(--docs-panel-strong); color: var(--docs-faint); cursor: default; }\n.docs-assistant > footer { padding: 0 18px 10px; color: var(--docs-faint); font-size: 9.5px; text-align: center; }\n@keyframes docs-fade-in { from { opacity: 0; } }\n@keyframes docs-dialog-in { from { opacity: 0; transform: translateY(-8px) scale(.99); } }\n@keyframes docs-drawer-in { from { transform: translateX(-24px); } }\n@keyframes docs-assistant-in { from { transform: translateX(-50%) translateY(18px) scale(.985); opacity: .7; } }\n@keyframes docs-page-out { to { opacity: 0; transform: translateY(-3px); } }\n@keyframes docs-page-in { from { opacity: 0; transform: translateY(4px); } }\n@keyframes docs-activity { 50% { opacity: .42; transform: scale(.82); } }\n@keyframes docs-navigation-progress { from { transform: translateX(-20%); } to { transform: translateX(155%); } }\n\n`\n","export const DOCS_RESPONSIVE_CSS = String.raw`\n@media (max-width: 1320px) {\n .docs-reader-grid { grid-template-columns: minmax(0, 640px) 190px; gap: 48px; padding-inline: 70px; }\n .docs-top-links { gap: 13px; padding-right: 16px; }\n .docs-top-links a { font-size: 12px; }\n}\n\n@media (max-width: 1140px) {\n .docs-reader-grid { grid-template-columns: minmax(0, 760px); }\n .docs-context-rail { display: none; }\n .docs-header { grid-template-columns: var(--docs-sidebar-width) 1fr auto; }\n .docs-top-links { display: none; }\n .docs-breadcrumbs { display: flex; }\n}\n\n@media (max-width: 900px) {\n :root { --docs-sidebar-width: 0px; }\n .docs-header { grid-template-columns: minmax(0, 1fr) auto; }\n .docs-header > .docs-brand { padding-left: 17px; border-right: 0; }\n .docs-header-center, .docs-sidebar { display: none; }\n .docs-mobile-actions { display: flex; }\n .docs-main { margin-left: 0; }\n .docs-reader-grid { padding: 44px 30px 90px; }\n .docs-assistant { width: min(660px, calc(100vw - 24px)); }\n}\n\n@media (max-width: 600px) {\n body { font-size: 15px; }\n .docs-brand { padding-right: 8px; }\n .docs-brand-product { display: none; }\n .docs-mobile-actions { padding-right: 8px; }\n .docs-icon-button { width: 34px; }\n .docs-reader-grid { padding: 31px 19px 72px; }\n .docs-breadcrumbs { margin-bottom: 19px; overflow: hidden; white-space: nowrap; }\n .docs-breadcrumbs span { flex: 0 0 auto; }\n .docs-article-header { margin-bottom: 30px; }\n .docs-article-meta { align-items: flex-start; }\n .docs-eyebrow { padding-top: 8px; }\n .docs-contextual-primary button, .docs-contextual-primary a { max-width: 112px; overflow: hidden; text-overflow: ellipsis; }\n .docs-article-header h1 { font-size: 32px; line-height: 1.13; }\n .docs-lede { font-size: 17px; line-height: 1.52; }\n .docs-prose h2 { margin-top: 42px; font-size: 23px; }\n .docs-prose h3 { font-size: 18px; }\n .docs-prose pre { margin-inline: -5px; padding: 17px; border-radius: 10px; font-size: 12px; }\n .docs-code-actions { margin-right: -9px; margin-top: -9px; }\n .docs-pagination { grid-template-columns: 1fr; }\n .docs-feedback { align-items: flex-start; flex-wrap: wrap; }\n .docs-feedback > span { width: 100%; margin-bottom: 2px; }\n .docs-search-layer { padding: 8px; align-items: stretch; }\n .docs-search-dialog { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; height: 100%; border-radius: 12px; }\n .docs-search-results { max-height: none; }\n .docs-search-dialog > footer { justify-content: center; }\n .docs-assistant-launcher { bottom: 12px; width: calc(100vw - 20px); }\n .docs-assistant-launcher kbd { display: none; }\n .docs-assistant { bottom: 0; width: 100%; height: calc(100vh - 8px); border-width: 1px 0 0; border-radius: 18px 18px 0 0; }\n .docs-assistant-suggestions { grid-template-columns: 1fr; }\n .docs-playground-title { align-items: flex-start; flex-direction: column; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n html { scroll-behavior: auto; }\n *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: .001ms !important; }\n}\n`\n\n","import { DOCS_BASE_CSS } from './styles/base'\nimport { DOCS_CONTENT_CSS } from './styles/content'\nimport { DOCS_NAVIGATION_CSS } from './styles/navigation'\nimport { DOCS_OVERLAYS_CSS } from './styles/overlays'\nimport { DOCS_RESPONSIVE_CSS } from './styles/responsive'\n\n/** One emitted stylesheet, assembled from independently customizable feature layers. */\nexport const DOCS_CSS =\n DOCS_BASE_CSS +\n DOCS_NAVIGATION_CSS +\n DOCS_CONTENT_CSS +\n DOCS_OVERLAYS_CSS +\n DOCS_RESPONSIVE_CSS\n","import { existsSync, readFileSync, rmSync, statSync } from 'node:fs'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport { relative, resolve, sep } from 'node:path'\nimport { buildDocs } from './build'\nimport { docsDevHeaders, isWithinPath } from './dev-http'\nimport { DOCS_CONFIG_FILE, type DocsBuildResult } from './types'\n\ninterface DocsViteServer {\n middlewares: {\n use(\n handler: (request: IncomingMessage, response: ServerResponse, next: () => void) => void,\n ): void\n }\n watcher: {\n add(paths: string[]): void\n on(event: 'all', handler: (event: string, path: string) => void): void\n }\n config: {\n logger: {\n info(message: string): void\n error(message: string): void\n }\n }\n}\n\n/**\n * Vite development bridge for the app Worker's ASSETS binding.\n *\n * Deployed docs are bundled after the app build. In development the Worker is\n * already live, so this plugin compiles the same graph into an ignored cache\n * and serves only the reserved `/_docs/*` asset namespace through Vite.\n */\nexport function deepSpaceDocs(): {\n name: string\n apply: 'serve'\n config(config: { root?: string }): void\n configResolved(config: { root: string }): void\n configureServer(server: DocsViteServer): void\n} {\n let appDir = process.cwd()\n let result: DocsBuildResult | null = null\n\n const rebuild = (): DocsBuildResult | null => {\n const outputDir = resolve(appDir, 'public', '_docs')\n if (!existsSync(resolve(appDir, DOCS_CONFIG_FILE))) {\n rmSync(outputDir, { recursive: true, force: true })\n result = null\n return null\n }\n result = buildDocs({\n appDir,\n outputDir,\n })\n return result\n }\n\n return {\n name: 'deepspace-docs',\n apply: 'serve',\n config(config) {\n appDir = resolve(config.root ?? process.cwd())\n rebuild()\n },\n configResolved(config) {\n const resolvedRoot = resolve(config.root)\n if (resolvedRoot === appDir) return\n appDir = resolvedRoot\n rebuild()\n },\n configureServer(server) {\n server.middlewares.use((request, response, next) => {\n if (!result || !serveDocsDevAsset(result.outputDir, request, response)) next()\n })\n if (!result) return\n\n const configPath = resolve(appDir, DOCS_CONFIG_FILE)\n server.watcher.add([configPath, resolve(appDir, 'docs.tsx'), result.sourceDir])\n let timer: ReturnType<typeof setTimeout> | undefined\n server.watcher.on('all', (_event, path) => {\n const changed = resolve(path)\n if (!shouldRebuildDocs(appDir, configPath, result?.sourceDir ?? '', changed)) return\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n try {\n const next = rebuild()\n if (next) {\n server.config.logger.info(\n `[deepspace docs] rebuilt ${next.manifest.pageCount} page(s)`,\n )\n }\n } catch (error) {\n server.config.logger.error(\n `[deepspace docs] rebuild failed: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }, 120)\n })\n },\n }\n}\n\nfunction shouldRebuildDocs(\n appDir: string,\n configPath: string,\n sourceDir: string,\n changed: string,\n): boolean {\n if (\n changed === configPath ||\n changed === resolve(appDir, 'docs.tsx') ||\n isWithinPath(sourceDir, changed)\n ) {\n return true\n }\n if (!isWithinPath(appDir, changed) || !/\\.(?:css|js|jsx|ts|tsx)$/i.test(changed)) return false\n const relativePath = relative(appDir, changed).split(sep).join('/')\n return !/^(?:\\.deepspace|\\.git|\\.wrangler|dist|node_modules|public\\/_docs)(?:\\/|$)/.test(\n relativePath,\n )\n}\n\nexport function serveDocsDevAsset(\n outputDir: string,\n request: IncomingMessage,\n response: ServerResponse,\n): boolean {\n const requestUrl = request.url ?? '/'\n let pathname: string\n try {\n pathname = decodeURIComponent(new URL(requestUrl, 'http://docs.local').pathname)\n } catch {\n return false\n }\n if (!pathname.startsWith('/_docs/')) return false\n const relativePath = pathname.slice('/_docs/'.length)\n const selected = resolve(outputDir, relativePath)\n if (!isWithinPath(outputDir, selected) || !existsSync(selected) || !statSync(selected).isFile()) {\n response.writeHead(404, docsDevHeaders(selected))\n response.end('Not found')\n return true\n }\n response.writeHead(200, docsDevHeaders(selected))\n response.end(readFileSync(selected))\n return true\n}\n","import { extname, relative, resolve, sep } from 'node:path'\n\nconst DOCS_DEV_CONTENT_SECURITY_POLICY =\n \"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; \" +\n \"img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' https:; \" +\n \"object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self'\"\n\nexport function isWithinPath(root: string, candidate: string): boolean {\n if (!root) return false\n const path = relative(resolve(root), resolve(candidate))\n return path !== '..' && !path.startsWith(`..${sep}`)\n}\n\nexport function docsDevHeaders(\n path: string,\n fallbackMimeType = 'application/octet-stream',\n): Record<string, string> {\n return {\n 'Content-Type': docsMimeType(path, fallbackMimeType),\n 'Cache-Control': 'no-store',\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Security-Policy': DOCS_DEV_CONTENT_SECURITY_POLICY,\n }\n}\n\nexport function docsMimeType(path: string, fallback = 'application/octet-stream'): string {\n switch (extname(path).toLowerCase()) {\n case '.css':\n return 'text/css; charset=utf-8'\n case '.html':\n return 'text/html; charset=utf-8'\n case '.js':\n return 'text/javascript; charset=utf-8'\n case '.json':\n return 'application/json; charset=utf-8'\n case '.md':\n return 'text/markdown; charset=utf-8'\n case '.txt':\n return 'text/plain; charset=utf-8'\n case '.xml':\n return 'application/xml; charset=utf-8'\n case '.svg':\n return 'image/svg+xml'\n case '.avif':\n return 'image/avif'\n case '.gif':\n return 'image/gif'\n case '.ico':\n return 'image/x-icon'\n case '.png':\n return 'image/png'\n case '.jpg':\n case '.jpeg':\n return 'image/jpeg'\n case '.webp':\n return 'image/webp'\n case '.woff':\n return 'font/woff'\n case '.woff2':\n return 'font/woff2'\n default:\n return fallback\n }\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACA7B,IAAM,mBAAmB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAhC,IAAM,sBAAsB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["buildSync","existsSync","readFileSync","resolve","fileURLToPath","visit","existsSync","readFileSync","basename","extname","relative","resolve","sep","existsSync","resolve","resolve","existsSync","markdown","existsSync","readFileSync","realpathSync","relative","resolve","parseYaml","document","document","resolve","existsSync","realpathSync","readFileSync","parseYaml","document","relative","prettyJson","existsSync","extname","resolve","markdown","relative","sep","readFileSync","visit","basename","existsSync","readFileSync","dirname","extname","join","relative","resolve","sep","resolve","existsSync","join","readFileSync","relative","sep","extname","dirname","require","createHash","existsSync","readFileSync","readdirSync","rmSync","writeFileSync","dirname","extname","join","relative","resolve","sep","sanitizeHtml","existsSync","rmSync","dirname","writeFileSync","readdirSync","join","extname","resolve","relative","readFileSync","createHash","sep","sanitizeHtml","createHash","markdown","createHash","visit","useEffect","useState","useEffect","useRef","useState","errorMessage","jsx","jsxs","label","jsx","jsxs","useRef","useState","useEffect","errorMessage","useEffect","useRef","useState","useEffect","jsx","jsxs","useState","useRef","useEffect","errorMessage","useEffect","useRef","useState","Fragment","jsx","jsxs","active","useRef","useState","useEffect","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useRef","useState","useEffect","useMemo","Fragment","jsx","jsxs","useState","useEffect","resolve","fileURLToPath","existsSync","readFileSync","buildSync","existsSync","readFileSync","rmSync","relative","resolve","sep","extname","relative","resolve","sep","resolve","existsSync","rmSync","relative","sep","readFileSync"]}