blume 1.7.1 → 1.7.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 (109) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cli/{chunk-mfm4sjwx.js → chunk-12dxjqk7.js} +32 -43
  3. package/dist/cli/{chunk-mfm4sjwx.js.map → chunk-12dxjqk7.js.map} +2 -2
  4. package/dist/cli/{chunk-vyqj481z.js → chunk-196vjxp9.js} +64 -64
  5. package/dist/cli/chunk-196vjxp9.js.map +13 -0
  6. package/dist/cli/{chunk-27gtm2ym.js → chunk-2mzebbbz.js} +1 -1
  7. package/dist/cli/{chunk-s5e5jt53.js → chunk-2z47ypj8.js} +1 -1
  8. package/dist/cli/{chunk-52cwcqvp.js → chunk-30e87n55.js} +15 -24
  9. package/dist/cli/{chunk-52cwcqvp.js.map → chunk-30e87n55.js.map} +2 -2
  10. package/dist/cli/{chunk-4trphnvy.js → chunk-3w7b2vcx.js} +10 -13
  11. package/dist/cli/{chunk-4trphnvy.js.map → chunk-3w7b2vcx.js.map} +2 -2
  12. package/dist/cli/{chunk-kmx2mydj.js → chunk-450a7rcr.js} +8 -8
  13. package/dist/cli/{chunk-kmx2mydj.js.map → chunk-450a7rcr.js.map} +1 -1
  14. package/dist/cli/{chunk-x1wvw7a8.js → chunk-5n7t497w.js} +129 -131
  15. package/dist/cli/{chunk-x1wvw7a8.js.map → chunk-5n7t497w.js.map} +4 -4
  16. package/dist/cli/{chunk-r99hynxh.js → chunk-61j18dwk.js} +36 -9
  17. package/dist/cli/{chunk-r99hynxh.js.map → chunk-61j18dwk.js.map} +3 -3
  18. package/dist/cli/{chunk-3r94j3tc.js → chunk-688e0dde.js} +2 -2
  19. package/dist/cli/{chunk-vxv4x1n8.js → chunk-88by27n5.js} +2 -2
  20. package/dist/cli/{chunk-h9ekmtz7.js → chunk-8cd8tj54.js} +28 -35
  21. package/dist/cli/{chunk-h9ekmtz7.js.map → chunk-8cd8tj54.js.map} +2 -2
  22. package/dist/cli/{chunk-8gnpdsn1.js → chunk-9bkjd11x.js} +2 -2
  23. package/dist/cli/{chunk-k0v1f8bb.js → chunk-9he6crym.js} +21 -28
  24. package/dist/cli/{chunk-k0v1f8bb.js.map → chunk-9he6crym.js.map} +2 -2
  25. package/dist/cli/{chunk-aqjvpd03.js → chunk-aztttvb3.js} +27 -33
  26. package/dist/cli/{chunk-aqjvpd03.js.map → chunk-aztttvb3.js.map} +2 -2
  27. package/dist/cli/{chunk-6mq7qkve.js → chunk-cvky9gb2.js} +18 -24
  28. package/dist/cli/{chunk-6mq7qkve.js.map → chunk-cvky9gb2.js.map} +2 -2
  29. package/dist/cli/{chunk-90pdhkpm.js → chunk-eevwt1sc.js} +23 -32
  30. package/dist/cli/{chunk-90pdhkpm.js.map → chunk-eevwt1sc.js.map} +2 -2
  31. package/dist/cli/{chunk-4ae4f395.js → chunk-ejjx8znq.js} +53 -34
  32. package/dist/cli/chunk-ejjx8znq.js.map +15 -0
  33. package/dist/cli/{chunk-8p3xe5jv.js → chunk-exeeb35e.js} +3 -3
  34. package/dist/cli/{chunk-q56730e0.js → chunk-fmceyezb.js} +41 -50
  35. package/dist/cli/{chunk-q56730e0.js.map → chunk-fmceyezb.js.map} +2 -2
  36. package/dist/cli/{chunk-12dzsn9b.js → chunk-hdm2dkd2.js} +72 -77
  37. package/dist/cli/{chunk-12dzsn9b.js.map → chunk-hdm2dkd2.js.map} +2 -2
  38. package/dist/cli/{chunk-j5f2wrj5.js → chunk-hs3gbh8p.js} +10 -15
  39. package/dist/cli/{chunk-j5f2wrj5.js.map → chunk-hs3gbh8p.js.map} +2 -2
  40. package/dist/cli/{chunk-ywn7t0pb.js → chunk-jbj4qhfw.js} +3 -3
  41. package/dist/cli/{chunk-ev67ycx0.js → chunk-jq5n4avg.js} +1 -1
  42. package/dist/cli/{chunk-he2zfgah.js → chunk-mqb2ka8m.js} +22 -30
  43. package/dist/cli/{chunk-he2zfgah.js.map → chunk-mqb2ka8m.js.map} +2 -2
  44. package/dist/cli/{chunk-5gfw0q4j.js → chunk-mt76t7dj.js} +26 -34
  45. package/dist/cli/{chunk-5gfw0q4j.js.map → chunk-mt76t7dj.js.map} +2 -2
  46. package/dist/cli/{chunk-jtb45atp.js → chunk-n9sra6sy.js} +13 -13
  47. package/dist/cli/{chunk-jtb45atp.js.map → chunk-n9sra6sy.js.map} +1 -1
  48. package/dist/cli/{chunk-x66c5yjn.js → chunk-ppfvdcd4.js} +2 -2
  49. package/dist/cli/{chunk-wd27zjcz.js → chunk-q4rae3bg.js} +1 -1
  50. package/dist/cli/{chunk-pxj10x8y.js → chunk-ra1v2nc2.js} +1 -1
  51. package/dist/cli/{chunk-np8dmfb0.js → chunk-t3tj0dgr.js} +26 -33
  52. package/dist/cli/{chunk-np8dmfb0.js.map → chunk-t3tj0dgr.js.map} +2 -2
  53. package/dist/cli/{chunk-qvvpnwaz.js → chunk-tqa1s0k8.js} +4 -4
  54. package/dist/cli/{chunk-cbjnx4s8.js → chunk-vh9w1sgp.js} +1 -1
  55. package/dist/cli/{chunk-82atea4k.js → chunk-vkrsvbr5.js} +13 -17
  56. package/dist/cli/{chunk-82atea4k.js.map → chunk-vkrsvbr5.js.map} +2 -2
  57. package/dist/cli/{chunk-sbdqrjbb.js → chunk-vrfp10qk.js} +1 -1
  58. package/dist/cli/{chunk-ka5k7cz9.js → chunk-wjt80jps.js} +27 -27
  59. package/dist/cli/{chunk-ka5k7cz9.js.map → chunk-wjt80jps.js.map} +2 -2
  60. package/dist/cli/{chunk-pdwg3q9g.js → chunk-xhtpx3ff.js} +21 -30
  61. package/dist/cli/{chunk-pdwg3q9g.js.map → chunk-xhtpx3ff.js.map} +2 -2
  62. package/dist/cli/{chunk-5hs6gb7n.js → chunk-yzhm0j9q.js} +1 -1
  63. package/dist/cli/index.js +397 -34
  64. package/dist/cli/index.js.map +12 -4
  65. package/dist/types/core/config-input.d.ts +26 -0
  66. package/dist/types/core/schema.d.ts +27 -3
  67. package/docs/configuration/ask-ai.mdx +47 -0
  68. package/package.json +1 -1
  69. package/src/ai/cors.ts +87 -0
  70. package/src/astro/generate.ts +2 -0
  71. package/src/astro/templates.ts +88 -23
  72. package/src/components/layout/NavTree.astro +75 -66
  73. package/src/components/layout/RootLayout.astro +4 -1
  74. package/src/components/layout/nav-utils.ts +17 -3
  75. package/src/core/adapter.ts +61 -0
  76. package/src/core/config-input.ts +26 -0
  77. package/src/core/schema.ts +56 -0
  78. package/src/registry/eject.ts +2 -0
  79. package/dist/cli/chunk-2aj8ddew.js +0 -72
  80. package/dist/cli/chunk-2aj8ddew.js.map +0 -10
  81. package/dist/cli/chunk-4ae4f395.js.map +0 -15
  82. package/dist/cli/chunk-4xyggvgf.js +0 -21
  83. package/dist/cli/chunk-4xyggvgf.js.map +0 -10
  84. package/dist/cli/chunk-6kzzpsx8.js +0 -26
  85. package/dist/cli/chunk-6kzzpsx8.js.map +0 -10
  86. package/dist/cli/chunk-bcy492zc.js +0 -16
  87. package/dist/cli/chunk-bcy492zc.js.map +0 -10
  88. package/dist/cli/chunk-btfr9yvw.js +0 -41
  89. package/dist/cli/chunk-btfr9yvw.js.map +0 -10
  90. package/dist/cli/chunk-ey89bjj1.js +0 -209
  91. package/dist/cli/chunk-ey89bjj1.js.map +0 -11
  92. package/dist/cli/chunk-vt8fgygt.js +0 -23
  93. package/dist/cli/chunk-vt8fgygt.js.map +0 -10
  94. package/dist/cli/chunk-vyqj481z.js.map +0 -13
  95. /package/dist/cli/{chunk-27gtm2ym.js.map → chunk-2mzebbbz.js.map} +0 -0
  96. /package/dist/cli/{chunk-s5e5jt53.js.map → chunk-2z47ypj8.js.map} +0 -0
  97. /package/dist/cli/{chunk-3r94j3tc.js.map → chunk-688e0dde.js.map} +0 -0
  98. /package/dist/cli/{chunk-vxv4x1n8.js.map → chunk-88by27n5.js.map} +0 -0
  99. /package/dist/cli/{chunk-8gnpdsn1.js.map → chunk-9bkjd11x.js.map} +0 -0
  100. /package/dist/cli/{chunk-8p3xe5jv.js.map → chunk-exeeb35e.js.map} +0 -0
  101. /package/dist/cli/{chunk-ywn7t0pb.js.map → chunk-jbj4qhfw.js.map} +0 -0
  102. /package/dist/cli/{chunk-ev67ycx0.js.map → chunk-jq5n4avg.js.map} +0 -0
  103. /package/dist/cli/{chunk-x66c5yjn.js.map → chunk-ppfvdcd4.js.map} +0 -0
  104. /package/dist/cli/{chunk-wd27zjcz.js.map → chunk-q4rae3bg.js.map} +0 -0
  105. /package/dist/cli/{chunk-pxj10x8y.js.map → chunk-ra1v2nc2.js.map} +0 -0
  106. /package/dist/cli/{chunk-qvvpnwaz.js.map → chunk-tqa1s0k8.js.map} +0 -0
  107. /package/dist/cli/{chunk-cbjnx4s8.js.map → chunk-vh9w1sgp.js.map} +0 -0
  108. /package/dist/cli/{chunk-sbdqrjbb.js.map → chunk-vrfp10qk.js.map} +0 -0
  109. /package/dist/cli/{chunk-5hs6gb7n.js.map → chunk-yzhm0j9q.js.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ nextFenceState,
3
4
  INLINE_CODE,
4
5
  MD_IMAGE,
5
- expandIncludes,
6
+ targetOffsetIn,
6
7
  hasIncludeStatements,
7
- hashText,
8
- nextFenceState,
9
- targetOffsetIn
10
- } from "./chunk-12dzsn9b.js";
8
+ expandIncludes,
9
+ hashText
10
+ } from "./chunk-hdm2dkd2.js";
11
11
  import {
12
12
  normalizeBasePath
13
- } from "./chunk-27gtm2ym.js";
13
+ } from "./chunk-2mzebbbz.js";
14
14
 
15
15
  // src/core/sources/read.ts
16
16
  import { readFile } from "node:fs/promises";
@@ -181,5 +181,5 @@ var collectContentAssets = async (project) => {
181
181
 
182
182
  export { readExpandedEntryText, isRelativeImageTarget, resolveRelativeImage, rewriteRelativeImages, collectContentAssets };
183
183
 
184
- //# debugId=2D2EF7E4F8223F9E64756E2164756E21
185
- //# sourceMappingURL=chunk-kmx2mydj.js.map
184
+ //# debugId=A36E1E08EE90A10064756E2164756E21
185
+ //# sourceMappingURL=chunk-450a7rcr.js.map
@@ -6,6 +6,6 @@
6
6
  "import { readdirSync, statSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n\nimport {\n basename,\n dirname,\n extname,\n normalize,\n relative,\n resolve,\n} from \"pathe\";\n\nimport { normalizeBasePath } from \"./base-path.ts\";\nimport { nextFenceState } from \"./code-fences.ts\";\nimport type { FenceState } from \"./code-fences.ts\";\nimport { hashText } from \"./sources/cache.ts\";\nimport { INLINE_CODE, MD_IMAGE, targetOffsetIn } from \"./sources/normalize.ts\";\nimport { readExpandedEntryText } from \"./sources/read.ts\";\nimport type { ContentSource } from \"./sources/types.ts\";\nimport type { PageRecord } from \"./types.ts\";\n\n/**\n * Colocated content images — `![alt](./diagram.png)` next to the page that\n * references it. The HTML render optimizes these through `astro:assets` into\n * hashed `_astro/` files, but that mapping doesn't exist yet when the raw\n * agent-facing Markdown (`/<route>.md`, llms-full.txt, MCP) is snapshotted at\n * generate time — so a verbatim relative path would 404 for every agent\n * fetching the page by URL. Instead, the originals are served at\n * `/blume-assets/content/<project-relative path>` by a generated endpoint (see\n * `contentAssetsEndpointTemplate`), and these helpers rewrite the relative\n * references in agent-facing output to that URL.\n */\n\n/** The endpoint route prefix colocated content images are served under. */\nexport const CONTENT_ASSETS_PREFIX = \"/blume-assets/content\";\n\n// The formats Astro's image pipeline accepts, plus the web-safe pass-throughs;\n// anything else referenced relatively (a `.pdf`, a source file) is left alone.\nconst IMAGE_EXTENSIONS = new Set([\n \".apng\",\n \".avif\",\n \".bmp\",\n \".gif\",\n \".ico\",\n \".jpeg\",\n \".jpg\",\n \".png\",\n \".svg\",\n \".tiff\",\n \".webp\",\n]);\n\n/** Whether a link target is a relative filesystem path (not URL/absolute/hash). */\nconst isRelativeTarget = (target: string): boolean =>\n !(target.startsWith(\"/\") || target.startsWith(\"#\")) && !URL.canParse(target);\n\n/**\n * The endpoint param a colocated image is served under: its project-relative\n * path (readable, collision-free — it mirrors the source tree). A file outside\n * the project root can't be addressed that way (`..` segments don't survive a\n * URL), so it falls back to a content-addressed name.\n */\nexport const contentAssetParam = (\n projectRoot: string,\n absPath: string\n): string => {\n const rel = relative(projectRoot, absPath);\n if (rel.startsWith(\"..\")) {\n return `_/${hashText(absPath)}${extname(absPath)}`;\n }\n return rel;\n};\n\n/** Percent-decode an image target; malformed escapes stay verbatim. */\nconst decodeTarget = (target: string): string => {\n try {\n return decodeURI(target);\n } catch {\n return target;\n }\n};\n\n/**\n * Whether a target is *shaped* like a colocated image reference: a relative\n * filesystem path with an image extension. Exported so link validation can\n * tell \"not a colocated candidate\" apart from \"a candidate that resolves\n * nowhere\" — the former falls through to the public-dir probe, the latter is\n * a broken reference beside the page source.\n */\nexport const isRelativeImageTarget = (target: string): boolean =>\n isRelativeTarget(target) &&\n IMAGE_EXTENSIONS.has(extname(decodeTarget(target)).toLowerCase());\n\n/**\n * Whether `abs` is a file whose trailing `segments` names match the on-disk\n * entries exactly. A bare `existsSync` accepts `./Diagram.PNG` for\n * `diagram.png` (or a directory named like an image) on a case-insensitive\n * filesystem — the reference then validates and serves locally but breaks on\n * the case-sensitive Linux build.\n */\nconst existsAsWritten = (abs: string, segments: number): boolean => {\n let current = abs;\n for (let i = 0; i < segments; i += 1) {\n const parent = dirname(current);\n let entries: string[];\n try {\n entries = readdirSync(parent);\n } catch {\n return false;\n }\n if (!entries.includes(basename(current))) {\n return false;\n }\n current = parent;\n }\n const stat = statSync(abs, { throwIfNoEntry: false });\n return stat !== undefined && stat.isFile();\n};\n\n/**\n * Resolve one image target against its page's directory. Returns the absolute\n * file path when the target is relative, is an image, and exists on disk —\n * anything else (remote URLs, `public/` absolutes, broken refs, code-block\n * examples that happen to look like paths) is null and left untouched. Shared\n * with link validation, so what counts as a colocated image is decided once.\n */\nexport const resolveRelativeImage = (\n sourceDir: string,\n target: string\n): string | null => {\n if (!isRelativeImageTarget(target)) {\n return null;\n }\n const decoded = decodeTarget(target);\n // Only the segments the author wrote are checked against on-disk names;\n // `sourceDir`'s own casing is the filesystem's business, not the target's.\n const segments = normalize(decoded)\n .split(\"/\")\n .filter((part) => part !== \"\" && part !== \"..\").length;\n const abs = resolve(sourceDir, decoded);\n return existsAsWritten(abs, segments) ? abs : null;\n};\n\n/** Encode an endpoint param for use in a Markdown URL, keeping `/` separators. */\nconst encodedParam = (param: string): string =>\n param.split(\"/\").map(encodeURIComponent).join(\"/\");\n\n/**\n * Rewrite one line's relative image targets. Matches run on a copy with inline\n * code blanked out (a `` `![x](./y.png)` `` span is syntax being *shown*, not\n * an image), while replacements splice into the real line by index — the mask\n * preserves length, so the indices line up.\n */\nconst rewriteLine = (\n line: string,\n toUrl: (target: string) => string | null\n): string => {\n const masked = line.replaceAll(INLINE_CODE, (span) =>\n \" \".repeat(span.length)\n );\n let out = \"\";\n let cursor = 0;\n for (const match of masked.matchAll(MD_IMAGE)) {\n const target = match.groups?.target ?? \"\";\n const url = toUrl(target);\n if (url === null) {\n continue;\n }\n const offset =\n (match.index ?? 0) +\n targetOffsetIn(match[0], target, match.groups?.title);\n out += line.slice(cursor, offset) + url;\n cursor = offset + target.length;\n }\n return out + line.slice(cursor);\n};\n\n/**\n * Rewrite a page's relative image references to their served\n * `/blume-assets/content/…` URLs (under `deployment.base` when set). Fenced\n * code blocks and inline code are skipped; only references whose file actually\n * exists next to the source are touched. `register` observes each rewritten\n * asset so a caller can accumulate the files the endpoint must serve.\n */\nexport const rewriteRelativeImages = (options: {\n source: string;\n sourcePath: string;\n projectRoot: string;\n deployBase?: string;\n register?: (param: string, absPath: string) => void;\n}): string => {\n const { source, sourcePath, projectRoot, deployBase, register } = options;\n const sourceDir = dirname(sourcePath);\n const prefix = `${normalizeBasePath(deployBase)}${CONTENT_ASSETS_PREFIX}`;\n const toUrl = (target: string): string | null => {\n const abs = resolveRelativeImage(sourceDir, target);\n if (abs === null) {\n return null;\n }\n const param = contentAssetParam(projectRoot, abs);\n register?.(param, abs);\n return `${prefix}/${encodedParam(param)}`;\n };\n\n let fence: FenceState = null;\n const lines = source.split(\"\\n\").map((line) => {\n const next = nextFenceState(line, fence);\n const inFence = fence !== null || next !== null;\n fence = next;\n return inFence ? line : rewriteLine(line, toUrl);\n });\n return lines.join(\"\\n\");\n};\n\n/**\n * Every colocated image the project's pages reference, keyed by endpoint param.\n * Serialized to `generated/content-assets.json`, which the\n * `/blume-assets/[...asset]` endpoint reads to serve the original files. Runs\n * the same rewrite the agent-Markdown builders apply — over the same\n * include-expanded text, so a partial's colocated images (rebased into the\n * including page by the expander) are served too — keeping the served set and\n * the rewritten URLs from drifting apart.\n */\nexport const collectContentAssets = async (project: {\n context: { root: string };\n manifest: { routes: { id: string; sourcePath?: string }[] };\n graph: { pages: PageRecord[] };\n sources?: ContentSource[];\n}): Promise<Record<string, string>> => {\n const pageById = new Map(project.graph.pages.map((page) => [page.id, page]));\n const files: Record<string, string> = {};\n await Promise.all(\n project.manifest.routes.map(async (route) => {\n if (!route.sourcePath) {\n return;\n }\n const page = pageById.get(route.id);\n let source: string;\n try {\n source = page\n ? await readExpandedEntryText(project, page)\n : await readFile(route.sourcePath, \"utf-8\");\n } catch {\n return;\n }\n rewriteRelativeImages({\n projectRoot: project.context.root,\n register: (param, abs) => {\n files[param] = abs;\n },\n source,\n sourcePath: route.sourcePath,\n });\n })\n );\n return files;\n};\n"
7
7
  ],
8
8
  "mappings": "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",
9
- "debugId": "2D2EF7E4F8223F9E64756E2164756E21",
9
+ "debugId": "A36E1E08EE90A10064756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,131 +1,127 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- buildMcpData,
4
- buildRawMarkdown,
5
- buildRssFeeds,
6
- buildSearchDocuments,
7
- markdownRoutePaths,
8
- renderRssFeed
9
- } from "./chunk-ka5k7cz9.js";
3
+ packageRoot,
4
+ getBlumeVersion,
5
+ BlumeError,
6
+ enrichDiagnostic
7
+ } from "./index.js";
10
8
  import {
11
- MCP_TOOLS
12
- } from "./chunk-pxj10x8y.js";
9
+ resolveReferences,
10
+ referenceRoutes,
11
+ hasScalarReferences,
12
+ builtinProxyKinds,
13
+ needsPlaygroundProxy,
14
+ GOOGLE_FONTS,
15
+ isFontSlug,
16
+ fontLocaleCodes,
17
+ buildFontsCss,
18
+ configuredFonts,
19
+ repoUrl,
20
+ editBaseUrl,
21
+ apiUrl,
22
+ EN_UI,
23
+ resolveUIStrings
24
+ } from "./chunk-61j18dwk.js";
13
25
  import {
14
- customOgRoutes,
15
- discoverPages,
16
- hasGeneratedChangelog,
17
- routeIsTaken
18
- } from "./chunk-sbdqrjbb.js";
26
+ resolveFallbackLocale,
27
+ validateSearchPopularIcons,
28
+ validateNavTargets,
29
+ buildIncludeGraph,
30
+ apiNamePhrase,
31
+ isOpenApiSource,
32
+ resolveDocsCollection
33
+ } from "./chunk-hdm2dkd2.js";
19
34
  import {
20
- collectContentAssets,
21
- rewriteRelativeImages
22
- } from "./chunk-kmx2mydj.js";
35
+ siteRoot,
36
+ absoluteUrl
37
+ } from "./chunk-88by27n5.js";
23
38
  import {
24
- writeTextAtomic
25
- } from "./chunk-ev67ycx0.js";
39
+ buildRssFeeds,
40
+ renderRssFeed,
41
+ buildRawMarkdown,
42
+ markdownRoutePaths,
43
+ buildSearchDocuments,
44
+ buildMcpData
45
+ } from "./chunk-wjt80jps.js";
26
46
  import {
27
- registry
28
- } from "./chunk-3r94j3tc.js";
47
+ OPENAPI_PATH,
48
+ API_PAGES_PATH,
49
+ API_PAGE_PATH,
50
+ API_NAVIGATION_PATH,
51
+ API_SEARCH_PATH
52
+ } from "./chunk-tqa1s0k8.js";
29
53
  import {
30
- apiNavigationTemplate,
31
- apiNotFoundTemplate,
32
- apiPageTemplate,
33
- apiPagesIndexTemplate,
34
- apiSearchTemplate,
54
+ rewriteRelativeImages,
55
+ collectContentAssets
56
+ } from "./chunk-450a7rcr.js";
57
+ import {
58
+ resolveAskBackend,
35
59
  askBackendRuntimeDep,
36
- askComponentTemplate,
37
- askEndpointTemplate,
38
- astroConfigTemplate,
39
60
  buildHomeLinkHeader,
40
- catchAllPageTemplate,
41
- changelogIndexTemplate,
42
- contentAssetsEndpointTemplate,
61
+ publishRuntimeModules,
62
+ runtimeDependencies,
63
+ astroConfigTemplate,
64
+ stagedContentDir,
43
65
  contentConfigTemplate,
44
- exampleMapTemplate,
45
- exampleSlug,
46
- exampleWrapperTemplate,
47
- examplesPageTemplate,
66
+ askEndpointTemplate,
67
+ askComponentTemplate,
68
+ searchEndpointTemplate,
48
69
  featuresTemplate,
49
- islandMapTemplate,
50
- islandWrapperTemplate,
51
- mcpEndpointTemplate,
52
- mcpPageFile,
70
+ searchClientTemplate,
53
71
  mixedbreadSearchEndpointTemplate,
54
- navFragmentTemplate,
55
- notFoundJsonTemplate,
56
- notFoundMarkdownTemplate,
57
- notFoundPageTemplate,
58
- ogEndpointTemplate,
59
- playgroundProxyTemplate,
60
- publishRuntimeModules,
61
72
  rawMarkdownEndpointTemplate,
62
- resolveAskBackend,
73
+ contentAssetsEndpointTemplate,
74
+ mcpPageFile,
75
+ mcpEndpointTemplate,
76
+ playgroundProxyTemplate,
77
+ staticJsonEndpointTemplate,
63
78
  rssEndpointTemplate,
64
- runtimeDependencies,
65
- runtimePackageTemplate,
66
- runtimeTsconfigTemplate,
79
+ navFragmentTemplate,
80
+ ogEndpointTemplate,
67
81
  scalarReferenceTemplate,
68
- searchClientTemplate,
69
- searchEndpointTemplate,
70
- stagedContentDir,
71
- staticJsonEndpointTemplate
72
- } from "./chunk-4ae4f395.js";
82
+ catchAllPageTemplate,
83
+ changelogIndexTemplate,
84
+ notFoundPageTemplate,
85
+ notFoundMarkdownTemplate,
86
+ notFoundJsonTemplate,
87
+ apiPagesIndexTemplate,
88
+ apiPageTemplate,
89
+ apiNavigationTemplate,
90
+ apiSearchTemplate,
91
+ apiNotFoundTemplate,
92
+ islandWrapperTemplate,
93
+ islandMapTemplate,
94
+ exampleSlug,
95
+ exampleWrapperTemplate,
96
+ exampleMapTemplate,
97
+ examplesPageTemplate,
98
+ runtimePackageTemplate,
99
+ runtimeTsconfigTemplate
100
+ } from "./chunk-ejjx8znq.js";
73
101
  import {
74
- API_NAVIGATION_PATH,
75
- API_PAGES_PATH,
76
- API_PAGE_PATH,
77
- API_SEARCH_PATH,
78
- OPENAPI_PATH
79
- } from "./chunk-qvvpnwaz.js";
102
+ discoverPages,
103
+ routeIsTaken,
104
+ hasGeneratedChangelog,
105
+ customOgRoutes
106
+ } from "./chunk-vrfp10qk.js";
80
107
  import {
81
- absoluteUrl,
82
- siteRoot
83
- } from "./chunk-vxv4x1n8.js";
108
+ writeTextAtomic
109
+ } from "./chunk-jq5n4avg.js";
84
110
  import {
85
- searchProviderMeta,
86
- servesStaticIndex
87
- } from "./chunk-wd27zjcz.js";
111
+ registry
112
+ } from "./chunk-688e0dde.js";
88
113
  import {
89
- apiNamePhrase,
90
- buildIncludeGraph,
91
- isOpenApiSource,
92
- resolveDocsCollection,
93
- resolveFallbackLocale,
94
- validateNavTargets,
95
- validateSearchPopularIcons
96
- } from "./chunk-12dzsn9b.js";
114
+ MCP_TOOLS
115
+ } from "./chunk-ra1v2nc2.js";
97
116
  import {
98
- EN_UI,
99
- GOOGLE_FONTS,
100
- apiUrl,
101
- buildFontsCss,
102
- builtinProxyKinds,
103
- configuredFonts,
104
- editBaseUrl,
105
- fontLocaleCodes,
106
- hasScalarReferences,
107
- isFontSlug,
108
- needsPlaygroundProxy,
109
- referenceRoutes,
110
- repoUrl,
111
- resolveReferences,
112
- resolveUIStrings
113
- } from "./chunk-r99hynxh.js";
117
+ searchProviderMeta,
118
+ servesStaticIndex
119
+ } from "./chunk-q4rae3bg.js";
114
120
  import {
115
- normalizeBasePath,
116
121
  trimChar,
122
+ normalizeBasePath,
117
123
  withBasePath
118
- } from "./chunk-27gtm2ym.js";
119
- import {
120
- getBlumeVersion
121
- } from "./chunk-4xyggvgf.js";
122
- import {
123
- packageRoot
124
- } from "./chunk-6kzzpsx8.js";
125
- import {
126
- BlumeError,
127
- enrichDiagnostic
128
- } from "./chunk-ey89bjj1.js";
124
+ } from "./chunk-2mzebbbz.js";
129
125
 
130
126
  // src/ai/web-bot-auth.ts
131
127
  var SIGNATURES_DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
@@ -1054,10 +1050,10 @@ var probeExtension = (base) => {
1054
1050
  return null;
1055
1051
  };
1056
1052
  var toImport = (specifier, imported, dir) => {
1057
- const relative2 = specifier.startsWith(".") || isAbsolute(specifier);
1053
+ const relative = specifier.startsWith(".") || isAbsolute(specifier);
1058
1054
  let path = specifier;
1059
1055
  let extension = extname(specifier).slice(1).toLowerCase();
1060
- if (relative2) {
1056
+ if (relative) {
1061
1057
  const absolute = isAbsolute(specifier) ? specifier : resolve3(dir, specifier);
1062
1058
  if (extension) {
1063
1059
  path = absolute;
@@ -1577,10 +1573,10 @@ var resolveOgLogo = (project, source) => {
1577
1573
  if (!source?.toLowerCase().endsWith(".svg")) {
1578
1574
  return;
1579
1575
  }
1580
- const relative2 = source.replace(/^\//u, "");
1576
+ const relative = source.replace(/^\//u, "");
1581
1577
  const file = [
1582
- join7(project.context.root, "public", relative2),
1583
- join7(project.context.root, relative2)
1578
+ join7(project.context.root, "public", relative),
1579
+ join7(project.context.root, relative)
1584
1580
  ].find((path) => existsSync5(path));
1585
1581
  return file ? readFileSync(file, "utf-8") : undefined;
1586
1582
  };
@@ -1693,52 +1689,52 @@ var specConfiguration = async (spec, root) => {
1693
1689
  };
1694
1690
  }
1695
1691
  };
1696
- var acceptScalarReference = (ref2, seen, contentRoutes, warnings) => {
1697
- if (ref2.renderer !== "scalar") {
1692
+ var acceptScalarReference = (ref, seen, contentRoutes, warnings) => {
1693
+ if (ref.renderer !== "scalar") {
1698
1694
  return null;
1699
1695
  }
1700
- if (seen.has(ref2.route)) {
1701
- warnings.push(`Two API reference sources resolve to ${ref2.route}; keeping the first.`);
1696
+ if (seen.has(ref.route)) {
1697
+ warnings.push(`Two API reference sources resolve to ${ref.route}; keeping the first.`);
1702
1698
  return null;
1703
1699
  }
1704
- if (contentRoutes.has(ref2.route)) {
1705
- warnings.push(`API reference route ${ref2.route} collides with a content page; skipping the reference there.`);
1700
+ if (contentRoutes.has(ref.route)) {
1701
+ warnings.push(`API reference route ${ref.route} collides with a content page; skipping the reference there.`);
1706
1702
  return null;
1707
1703
  }
1708
- seen.add(ref2.route);
1709
- return ref2;
1704
+ seen.add(ref.route);
1705
+ return ref;
1710
1706
  };
1711
1707
  var buildReferenceFiles = async (options) => {
1712
1708
  const { config, root, contentRoutes } = options;
1713
1709
  const warnings = [];
1714
1710
  const seen = new Set;
1715
1711
  const accepted = [];
1716
- for (const ref2 of resolveReferences(config)) {
1717
- const next = acceptScalarReference(ref2, seen, contentRoutes, warnings);
1712
+ for (const ref of resolveReferences(config)) {
1713
+ const next = acceptScalarReference(ref, seen, contentRoutes, warnings);
1718
1714
  if (next) {
1719
1715
  accepted.push(next);
1720
1716
  }
1721
1717
  }
1722
- const built = await Promise.all(accepted.map(async (ref2) => ({
1723
- ref: ref2,
1724
- spec: await specConfiguration(ref2.spec, root)
1718
+ const built = await Promise.all(accepted.map(async (ref) => ({
1719
+ ref,
1720
+ spec: await specConfiguration(ref.spec, root)
1725
1721
  })));
1726
1722
  const files = [];
1727
- for (const { ref: ref2, spec } of built) {
1723
+ for (const { ref, spec } of built) {
1728
1724
  if (spec.warning) {
1729
1725
  warnings.push(spec.warning);
1730
1726
  }
1731
- const pagePath = referencePagePath(ref2.route);
1727
+ const pagePath = referencePagePath(ref.route);
1732
1728
  files.push({
1733
1729
  content: scalarReferenceTemplate({
1734
1730
  configuration: {
1735
1731
  ...spec.config,
1736
- ...themeConfiguration(config, ref2.theme),
1737
- ...ref2.scalar
1732
+ ...themeConfiguration(config, ref.theme),
1733
+ ...ref.scalar
1738
1734
  },
1739
- noindex: ref2.noindex,
1740
- route: ref2.route,
1741
- title: ref2.label
1735
+ noindex: ref.noindex,
1736
+ route: ref.route,
1737
+ title: ref.label
1742
1738
  }),
1743
1739
  pagePath
1744
1740
  });
@@ -3762,7 +3758,9 @@ var writeAskFiles = async (project, srcDir, write, modules) => {
3762
3758
  modules.set("blume:ask-data", JSON.stringify(await buildAskData(project)));
3763
3759
  }
3764
3760
  await write(join11(srcDir, "pages", "api", "ask.ts"), askEndpointTemplate(resolveAskBackend(ask), grounded, {
3761
+ cors: ask.cors,
3765
3762
  instructions: ask.instructions,
3763
+ reasoning: ask.reasoning,
3766
3764
  retrieval: ask.retrieval
3767
3765
  }));
3768
3766
  };
@@ -4070,5 +4068,5 @@ var generateRuntime = async (project) => {
4070
4068
 
4071
4069
  export { SIGNATURES_DIRECTORY_PATH, SIGNATURES_DIRECTORY_TYPE, publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildAskData, buildMcpDiscovery, buildMcpServerCard, buildThemeCss, buildReferenceFiles, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, planComponentSlots, discoverIslands, EXAMPLE_SCAN_GLOB, exampleScanRoots, discoverExamples, exampleMarkdownLookup, detectNeedsReact, detectUsesMath, collectStaged, buildRuntimeData, languageIconCssFor, clientFeaturesFor, generateRuntime };
4072
4070
 
4073
- //# debugId=29D4FE8449AF429964756E2164756E21
4074
- //# sourceMappingURL=chunk-x1wvw7a8.js.map
4071
+ //# debugId=851B0C91E17092DD64756E2164756E21
4072
+ //# sourceMappingURL=chunk-5n7t497w.js.map