blume 1.7.3 → 2.0.1

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 (690) hide show
  1. package/AGENTS.md +19 -0
  2. package/CHANGELOG.md +245 -0
  3. package/README.md +34 -21
  4. package/dist/cli/{chunk-vacwm2hv.js → chunk-27g6wdth.js} +2 -2
  5. package/dist/cli/{chunk-ps4m1xh4.js → chunk-2hn4b8z7.js} +513 -550
  6. package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
  7. package/dist/cli/chunk-5shv93fd.js +39 -0
  8. package/dist/cli/chunk-5shv93fd.js.map +10 -0
  9. package/dist/cli/chunk-6crbhc3x.js +361 -0
  10. package/dist/cli/chunk-6crbhc3x.js.map +14 -0
  11. package/dist/cli/{chunk-8cjtbafj.js → chunk-6hsn950k.js} +109 -383
  12. package/dist/cli/chunk-6hsn950k.js.map +10 -0
  13. package/dist/cli/chunk-6vm74dry.js +148 -0
  14. package/dist/cli/chunk-6vm74dry.js.map +10 -0
  15. package/dist/cli/{chunk-yg63d42r.js → chunk-79jhk4py.js} +87 -58
  16. package/dist/cli/chunk-79jhk4py.js.map +35 -0
  17. package/dist/cli/chunk-82bbrxdn.js +51 -0
  18. package/dist/cli/chunk-82bbrxdn.js.map +10 -0
  19. package/dist/cli/chunk-abh8yjkn.js +31 -0
  20. package/dist/cli/chunk-abh8yjkn.js.map +10 -0
  21. package/dist/cli/chunk-ah61y8py.js +75 -0
  22. package/dist/cli/chunk-ah61y8py.js.map +11 -0
  23. package/dist/cli/{chunk-dwgcp5sm.js → chunk-ce574jw2.js} +1 -1
  24. package/dist/cli/chunk-ch6g3ar0.js +102 -0
  25. package/dist/cli/chunk-ch6g3ar0.js.map +10 -0
  26. package/dist/cli/chunk-dh8cwk36.js +279 -0
  27. package/dist/cli/chunk-dh8cwk36.js.map +10 -0
  28. package/dist/cli/{chunk-rqy0s5wh.js → chunk-epjnccmv.js} +17 -16
  29. package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-epjnccmv.js.map} +3 -3
  30. package/dist/cli/chunk-f2z5v128.js +97 -0
  31. package/dist/cli/chunk-f2z5v128.js.map +10 -0
  32. package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
  33. package/dist/cli/chunk-fa25z98p.js.map +11 -0
  34. package/dist/cli/{chunk-1jefwnfs.js → chunk-fs23ddbb.js} +1076 -2592
  35. package/dist/cli/chunk-fs23ddbb.js.map +35 -0
  36. package/dist/cli/{chunk-e7f42gdj.js → chunk-fxypxtvm.js} +2 -2
  37. package/dist/cli/{chunk-bvwwhd84.js → chunk-fz5wtpmh.js} +15 -15
  38. package/dist/cli/{chunk-bvwwhd84.js.map → chunk-fz5wtpmh.js.map} +1 -1
  39. package/dist/cli/chunk-hdpx1tax.js +91 -0
  40. package/dist/cli/chunk-hdpx1tax.js.map +10 -0
  41. package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
  42. package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
  43. package/dist/cli/{chunk-ahnw3kxw.js → chunk-jwyddg7y.js} +27 -22
  44. package/dist/cli/chunk-jwyddg7y.js.map +15 -0
  45. package/dist/cli/{chunk-cjtn640a.js → chunk-kdp5q7ke.js} +43 -20
  46. package/dist/cli/chunk-kdp5q7ke.js.map +10 -0
  47. package/dist/cli/{chunk-5g0w1e2c.js → chunk-kpf8rrjc.js} +28 -16
  48. package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-kpf8rrjc.js.map} +4 -4
  49. package/dist/cli/chunk-m3vmjgmq.js +133 -0
  50. package/dist/cli/chunk-m3vmjgmq.js.map +10 -0
  51. package/dist/cli/{chunk-b27xqwn9.js → chunk-mb2919y2.js} +9 -5
  52. package/dist/cli/chunk-mb2919y2.js.map +10 -0
  53. package/dist/cli/{chunk-5qk08vmp.js → chunk-q5163e60.js} +133 -54
  54. package/dist/cli/chunk-q5163e60.js.map +11 -0
  55. package/dist/cli/chunk-qkqwkpte.js +12437 -0
  56. package/dist/cli/chunk-qkqwkpte.js.map +182 -0
  57. package/dist/cli/{chunk-4x36ddpw.js → chunk-qs4q5p4e.js} +81 -87
  58. package/dist/cli/chunk-qs4q5p4e.js.map +10 -0
  59. package/dist/cli/{chunk-0xjyb285.js → chunk-qwsrynx5.js} +15 -5
  60. package/dist/cli/{chunk-0xjyb285.js.map → chunk-qwsrynx5.js.map} +4 -4
  61. package/dist/cli/chunk-s1p84fyh.js +261 -0
  62. package/dist/cli/chunk-s1p84fyh.js.map +10 -0
  63. package/dist/cli/chunk-s6jhgk0q.js +176 -0
  64. package/dist/cli/chunk-s6jhgk0q.js.map +11 -0
  65. package/dist/cli/chunk-vtk4a6dg.js +374 -0
  66. package/dist/cli/chunk-vtk4a6dg.js.map +10 -0
  67. package/dist/cli/{chunk-k79xp7av.js → chunk-wgm7m9qk.js} +230 -700
  68. package/dist/cli/chunk-wgm7m9qk.js.map +36 -0
  69. package/dist/cli/chunk-wm7js3j9.js +145 -0
  70. package/dist/cli/chunk-wm7js3j9.js.map +11 -0
  71. package/dist/cli/chunk-yt5n7ppj.js +79 -0
  72. package/dist/cli/chunk-yt5n7ppj.js.map +10 -0
  73. package/dist/cli/{chunk-3r45185y.js → chunk-yw7dm696.js} +9 -11
  74. package/dist/cli/{chunk-3r45185y.js.map → chunk-yw7dm696.js.map} +3 -3
  75. package/dist/cli/{chunk-nn13znc2.js → chunk-zxcczpyx.js} +1 -1
  76. package/dist/cli/chunk-zxh4d9vy.js +122 -0
  77. package/dist/cli/chunk-zxh4d9vy.js.map +11 -0
  78. package/dist/cli/index.js +214 -57
  79. package/dist/cli/index.js.map +8 -7
  80. package/dist/types/ai/agent-readability.d.ts +52 -0
  81. package/dist/types/ai/ai-catalog.d.ts +42 -0
  82. package/dist/types/ai/api/paths.d.ts +17 -0
  83. package/dist/types/ai/api-catalog.d.ts +18 -0
  84. package/dist/types/ai/ask-context.d.ts +7 -7
  85. package/dist/types/ai/ask.d.ts +368 -0
  86. package/dist/types/ai/changelog-markdown.d.ts +2 -0
  87. package/dist/types/ai/component-markdown.d.ts +2 -2
  88. package/dist/types/ai/index.d.ts +24 -0
  89. package/dist/types/ai/link-headers.d.ts +24 -0
  90. package/dist/types/ai/llms.d.ts +25 -0
  91. package/dist/types/ai/markdown.d.ts +45 -0
  92. package/dist/types/ai/mcp/discovery.d.ts +68 -0
  93. package/dist/types/ai/mcp/tools.d.ts +16 -0
  94. package/dist/types/ai/openapi-components.d.ts +43 -0
  95. package/dist/types/ai/relative-links.d.ts +26 -0
  96. package/dist/types/ai/serializers.d.ts +15 -0
  97. package/dist/types/ai/skills.d.ts +42 -0
  98. package/dist/types/ai/tar.d.ts +25 -0
  99. package/dist/types/ai/visibility.d.ts +17 -0
  100. package/dist/types/ai/web-bot-auth.d.ts +16 -0
  101. package/dist/types/analytics/adobe.d.ts +35 -0
  102. package/dist/types/analytics/amplitude.d.ts +50 -0
  103. package/dist/types/analytics/clarity.d.ts +31 -0
  104. package/dist/types/analytics/clearbit.d.ts +29 -0
  105. package/dist/types/analytics/cloudflare.d.ts +41 -0
  106. package/dist/types/analytics/fathom.d.ts +41 -0
  107. package/dist/types/analytics/google-analytics.d.ts +44 -0
  108. package/dist/types/analytics/google-tag-manager.d.ts +40 -0
  109. package/dist/types/analytics/head.d.ts +30 -0
  110. package/dist/types/analytics/heap.d.ts +40 -0
  111. package/dist/types/analytics/hightouch.d.ts +44 -0
  112. package/dist/types/analytics/hotjar.d.ts +33 -0
  113. package/dist/types/analytics/index.d.ts +61 -0
  114. package/dist/types/analytics/inline.d.ts +17 -0
  115. package/dist/types/analytics/logrocket.d.ts +44 -0
  116. package/dist/types/analytics/mixpanel.d.ts +67 -0
  117. package/dist/types/analytics/pirsch.d.ts +42 -0
  118. package/dist/types/analytics/plausible.d.ts +56 -0
  119. package/dist/types/analytics/posthog.d.ts +45 -0
  120. package/dist/types/analytics/schema.d.ts +320 -0
  121. package/dist/types/analytics/script.d.ts +46 -0
  122. package/dist/types/analytics/segment.d.ts +50 -0
  123. package/dist/types/analytics/vercel.d.ts +48 -0
  124. package/dist/types/astro/integration.d.ts +76 -0
  125. package/dist/types/astro/markdown-negotiation.d.ts +23 -0
  126. package/dist/types/astro/module-types.d.ts +14 -0
  127. package/dist/types/astro/pages.d.ts +44 -0
  128. package/dist/types/cli/env.d.ts +12 -0
  129. package/dist/types/cli/init/scaffold.d.ts +154 -0
  130. package/dist/types/components/layout/nav-utils.d.ts +11 -0
  131. package/dist/types/core/adapter.d.ts +47 -0
  132. package/dist/types/core/api-name.d.ts +7 -0
  133. package/dist/types/core/changelog-index.d.ts +13 -0
  134. package/dist/types/core/config-input.d.ts +197 -526
  135. package/dist/types/core/config.d.ts +61 -35
  136. package/dist/types/core/content-assets.d.ts +76 -0
  137. package/dist/types/core/custom-pages.d.ts +33 -0
  138. package/dist/types/core/data.d.ts +30 -15
  139. package/dist/types/core/define-components.d.ts +12 -9
  140. package/dist/types/core/deployment-env.d.ts +6 -11
  141. package/dist/types/core/frontmatter.d.ts +10 -0
  142. package/dist/types/core/graph.d.ts +18 -0
  143. package/dist/types/core/heading-markers.d.ts +54 -0
  144. package/dist/types/core/i18n-ui.d.ts +12 -10
  145. package/dist/types/core/i18n.d.ts +87 -0
  146. package/dist/types/core/includes.d.ts +138 -0
  147. package/dist/types/core/last-modified.d.ts +47 -0
  148. package/dist/types/core/links.d.ts +95 -0
  149. package/dist/types/core/locale-links.d.ts +60 -0
  150. package/dist/types/core/manifest.d.ts +17 -0
  151. package/dist/types/core/meta.d.ts +38 -0
  152. package/dist/types/core/nav-diagnostics.d.ts +26 -0
  153. package/dist/types/core/navigation.d.ts +6 -0
  154. package/dist/types/core/node-require.d.ts +19 -0
  155. package/dist/types/core/package-json.d.ts +13 -0
  156. package/dist/types/core/probe.d.ts +42 -0
  157. package/dist/types/core/project-graph.d.ts +51 -0
  158. package/dist/types/core/project.d.ts +2 -0
  159. package/dist/types/core/safe-href.d.ts +2 -0
  160. package/dist/types/core/safe-links.d.ts +26 -0
  161. package/dist/types/core/schema.d.ts +2284 -454
  162. package/dist/types/core/site-url.d.ts +16 -0
  163. package/dist/types/core/sources/assets.d.ts +36 -0
  164. package/dist/types/core/sources/cache.d.ts +37 -0
  165. package/dist/types/core/sources/collection.d.ts +28 -0
  166. package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
  167. package/dist/types/core/sources/contentful.d.ts +40 -0
  168. package/dist/types/core/sources/filesystem.d.ts +24 -0
  169. package/dist/types/core/sources/github-releases.d.ts +31 -0
  170. package/dist/types/core/sources/json.d.ts +30 -0
  171. package/dist/types/core/sources/lexical.d.ts +19 -0
  172. package/dist/types/core/sources/lower.d.ts +75 -0
  173. package/dist/types/core/sources/mdx-remote.d.ts +28 -0
  174. package/dist/types/core/sources/normalize.d.ts +147 -0
  175. package/dist/types/core/sources/notion.d.ts +131 -0
  176. package/dist/types/core/sources/obsidian.d.ts +46 -0
  177. package/dist/types/core/sources/payload.d.ts +39 -0
  178. package/dist/types/core/sources/portable-text.d.ts +42 -0
  179. package/dist/types/core/sources/read.d.ts +23 -0
  180. package/dist/types/core/sources/remote.d.ts +74 -0
  181. package/dist/types/core/sources/resolve.d.ts +19 -0
  182. package/dist/types/core/sources/sanity.d.ts +43 -0
  183. package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
  184. package/dist/types/core/sources/strapi.d.ts +33 -0
  185. package/dist/types/core/sources/types.d.ts +7 -0
  186. package/dist/types/core/sources/watch.d.ts +45 -0
  187. package/dist/types/core/text-width.d.ts +11 -0
  188. package/dist/types/core/types.d.ts +15 -1
  189. package/dist/types/core/unrecognized-keys.d.ts +7 -0
  190. package/dist/types/core/versions.d.ts +72 -0
  191. package/dist/types/core/yaml.d.ts +9 -0
  192. package/dist/types/deploy/adapter-output.d.ts +45 -0
  193. package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
  194. package/dist/types/deploy/adapters/index.d.ts +29 -0
  195. package/dist/types/deploy/adapters/netlify.d.ts +37 -0
  196. package/dist/types/deploy/adapters/node.d.ts +37 -0
  197. package/dist/types/deploy/adapters/registry.d.ts +133 -0
  198. package/dist/types/deploy/adapters/types.d.ts +71 -0
  199. package/dist/types/deploy/adapters/vercel.d.ts +38 -0
  200. package/dist/types/deploy/artifacts.d.ts +65 -0
  201. package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
  202. package/dist/types/deploy/function-bundle.d.ts +80 -0
  203. package/dist/types/deploy/headers.d.ts +50 -0
  204. package/dist/types/deploy/node-headers.d.ts +42 -0
  205. package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
  206. package/dist/types/deploy/platforms/index.d.ts +18 -0
  207. package/dist/types/deploy/platforms/netlify.d.ts +13 -0
  208. package/dist/types/deploy/platforms/node.d.ts +11 -0
  209. package/dist/types/deploy/platforms/paths.d.ts +27 -0
  210. package/dist/types/deploy/platforms/static.d.ts +10 -0
  211. package/dist/types/deploy/platforms/types.d.ts +104 -0
  212. package/dist/types/deploy/platforms/vercel.d.ts +32 -0
  213. package/dist/types/deploy/redirects.d.ts +53 -0
  214. package/dist/types/deploy/robots.d.ts +8 -0
  215. package/dist/types/deploy/rss.d.ts +31 -0
  216. package/dist/types/deploy/sitemap.d.ts +21 -0
  217. package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
  218. package/dist/types/markdown/code-title.d.ts +32 -0
  219. package/dist/types/markdown/fence-meta.d.ts +23 -0
  220. package/dist/types/markdown/themes.d.ts +3 -3
  221. package/dist/types/openapi/asyncapi.d.ts +129 -0
  222. package/dist/types/openapi/graphql-build.d.ts +8 -0
  223. package/dist/types/openapi/graphql.d.ts +122 -0
  224. package/dist/types/openapi/model.d.ts +158 -0
  225. package/dist/types/openapi/parse.d.ts +57 -0
  226. package/dist/types/openapi/references.d.ts +37 -25
  227. package/dist/types/openapi/render-mdx.d.ts +33 -0
  228. package/dist/types/openapi/sentence.d.ts +7 -0
  229. package/dist/types/openapi/signature.d.ts +10 -0
  230. package/dist/types/openapi/source.d.ts +22 -0
  231. package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
  232. package/dist/types/reference/asyncapi.d.ts +166 -0
  233. package/dist/types/reference/graphql.d.ts +181 -0
  234. package/dist/types/reference/index.d.ts +32 -0
  235. package/dist/types/reference/openapi.d.ts +165 -0
  236. package/dist/types/reference/options.d.ts +157 -0
  237. package/dist/types/reference/scalar.d.ts +136 -0
  238. package/dist/types/reference/schema.d.ts +630 -0
  239. package/dist/types/search/adapters/algolia.d.ts +32 -0
  240. package/dist/types/search/adapters/flexsearch.d.ts +12 -0
  241. package/dist/types/search/adapters/index.d.ts +31 -0
  242. package/dist/types/search/adapters/mixedbread.d.ts +22 -0
  243. package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
  244. package/dist/types/search/adapters/orama.d.ts +13 -0
  245. package/dist/types/search/adapters/pagefind.d.ts +12 -0
  246. package/dist/types/search/adapters/registry.d.ts +228 -0
  247. package/dist/types/search/adapters/types.d.ts +34 -0
  248. package/dist/types/search/adapters/typesense.d.ts +42 -0
  249. package/dist/types/search/build.d.ts +23 -0
  250. package/dist/types/search/documents.d.ts +90 -0
  251. package/dist/types/search/facets.d.ts +3 -0
  252. package/dist/types/search/orama-index.d.ts +1 -1
  253. package/dist/types/search/sync/algolia.d.ts +14 -0
  254. package/dist/types/search/sync/index.d.ts +14 -0
  255. package/dist/types/search/sync/orama-cloud.d.ts +10 -0
  256. package/dist/types/search/sync/typesense.d.ts +14 -0
  257. package/dist/types/sources/contentful.d.ts +68 -0
  258. package/dist/types/sources/custom.d.ts +20 -0
  259. package/dist/types/sources/filesystem.d.ts +42 -0
  260. package/dist/types/sources/github-releases.d.ts +46 -0
  261. package/dist/types/sources/index.d.ts +48 -0
  262. package/dist/types/sources/mdx-remote.d.ts +63 -0
  263. package/dist/types/sources/notion.d.ts +65 -0
  264. package/dist/types/sources/obsidian.d.ts +34 -0
  265. package/dist/types/sources/payload.d.ts +68 -0
  266. package/dist/types/sources/registry.d.ts +1414 -0
  267. package/dist/types/sources/sanity.d.ts +69 -0
  268. package/dist/types/sources/shared.d.ts +46 -0
  269. package/dist/types/sources/strapi.d.ts +66 -0
  270. package/dist/types/theme/icon-kind.d.ts +11 -0
  271. package/dist/types/theme/icons.d.ts +20 -0
  272. package/docs/01-quickstart.mdx +18 -18
  273. package/docs/02-deployment.mdx +52 -28
  274. package/docs/03-upgrading.mdx +364 -0
  275. package/docs/04-migrating.mdx +58 -0
  276. package/docs/08-faq.mdx +5 -5
  277. package/docs/advanced/blog.mdx +13 -6
  278. package/docs/advanced/changelog.mdx +23 -35
  279. package/docs/advanced/custom-pages.mdx +22 -10
  280. package/docs/advanced/meta.ts +1 -8
  281. package/docs/advanced/skills.mdx +8 -0
  282. package/docs/cli/audit.mdx +646 -0
  283. package/docs/cli/doctor.mdx +29 -0
  284. package/docs/{reference/eval.mdx → cli/evals.mdx} +12 -11
  285. package/docs/cli/index.mdx +105 -0
  286. package/docs/cli/meta.ts +7 -0
  287. package/docs/{reference → cli}/translate.mdx +9 -9
  288. package/docs/cli/validate.mdx +41 -0
  289. package/docs/cli/version.mdx +40 -0
  290. package/docs/configuration/analytics.mdx +350 -59
  291. package/docs/configuration/assistant.mdx +357 -0
  292. package/docs/configuration/customization.mdx +16 -10
  293. package/docs/configuration/index.mdx +50 -31
  294. package/docs/configuration/meta.ts +1 -1
  295. package/docs/configuration/search.mdx +76 -55
  296. package/docs/configuration/theming.mdx +24 -15
  297. package/docs/content/components.mdx +21 -5
  298. package/docs/{reference → content}/frontmatter.mdx +35 -1
  299. package/docs/content/i18n.mdx +9 -7
  300. package/docs/content/includes.mdx +2 -4
  301. package/docs/content/index.mdx +1 -1
  302. package/docs/content/islands.mdx +11 -6
  303. package/docs/content/meta.mdx +1 -1
  304. package/docs/content/meta.ts +1 -0
  305. package/docs/content/navigation.mdx +9 -7
  306. package/docs/content/sources.mdx +145 -50
  307. package/docs/content/syntax.mdx +16 -12
  308. package/docs/content/versioning.mdx +3 -3
  309. package/docs/discoverability/agent-discovery.mdx +12 -12
  310. package/docs/discoverability/index.mdx +4 -4
  311. package/docs/discoverability/json-api.mdx +4 -4
  312. package/docs/discoverability/llms-txt.mdx +6 -6
  313. package/docs/discoverability/markdown.mdx +4 -4
  314. package/docs/discoverability/mcp.mdx +11 -11
  315. package/docs/discoverability/sitemap-and-robots.mdx +3 -3
  316. package/docs/index.mdx +4 -4
  317. package/docs/references/asyncapi.mdx +59 -0
  318. package/docs/{advanced → references}/graphql.mdx +45 -32
  319. package/docs/{reference → references}/meta.ts +2 -2
  320. package/docs/references/openapi.mdx +171 -0
  321. package/docs/references/scalar.mdx +64 -0
  322. package/package.json +42 -8
  323. package/skills/blume/SKILL.md +23 -10
  324. package/skills/blume-migrate/SKILL.md +22 -21
  325. package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
  326. package/skills/blume-migrate/references/docusaurus.md +5 -4
  327. package/skills/blume-migrate/references/fumadocs.md +4 -4
  328. package/skills/blume-migrate/references/mintlify.md +23 -8
  329. package/skills/blume-migrate/references/monorepo.md +6 -6
  330. package/skills/blume-migrate/references/starlight.md +4 -4
  331. package/src/ai/agent-readability.ts +25 -26
  332. package/src/ai/ai-catalog.ts +50 -32
  333. package/src/ai/api/handlers.ts +46 -11
  334. package/src/ai/api/paths.ts +1 -1
  335. package/src/ai/api-catalog.ts +8 -8
  336. package/src/ai/ask-context.ts +7 -7
  337. package/src/ai/ask-data.ts +3 -3
  338. package/src/ai/ask.ts +637 -100
  339. package/src/ai/changelog-markdown.ts +91 -0
  340. package/src/ai/component-markdown.ts +328 -12
  341. package/src/ai/cors.ts +3 -3
  342. package/src/ai/index.ts +45 -0
  343. package/src/ai/link-headers.ts +7 -6
  344. package/src/ai/llms.ts +20 -15
  345. package/src/ai/markdown.ts +35 -5
  346. package/src/ai/mcp/data.ts +9 -5
  347. package/src/ai/openapi-components.ts +5 -2
  348. package/src/ai/relative-links.ts +170 -0
  349. package/src/ai/serializers.ts +3 -3
  350. package/src/ai/skills.ts +1 -1
  351. package/src/ai/visibility.ts +1 -1
  352. package/src/ai/web-bot-auth.ts +2 -2
  353. package/src/analytics/adobe.ts +46 -0
  354. package/src/analytics/amplitude.ts +79 -0
  355. package/src/analytics/clarity.ts +46 -0
  356. package/src/analytics/clearbit.ts +47 -0
  357. package/src/analytics/cloudflare.ts +67 -0
  358. package/src/analytics/fathom.ts +64 -0
  359. package/src/analytics/google-analytics.ts +84 -0
  360. package/src/analytics/google-tag-manager.ts +61 -0
  361. package/src/analytics/head.ts +130 -0
  362. package/src/analytics/heap.ts +65 -0
  363. package/src/analytics/hightouch.ts +77 -0
  364. package/src/analytics/hotjar.ts +47 -0
  365. package/src/analytics/index.ts +71 -0
  366. package/src/analytics/inline.ts +21 -0
  367. package/src/analytics/logrocket.ts +71 -0
  368. package/src/analytics/mixpanel.ts +92 -0
  369. package/src/analytics/pirsch.ts +66 -0
  370. package/src/analytics/plausible.ts +83 -0
  371. package/src/analytics/posthog.ts +78 -0
  372. package/src/analytics/schema.ts +60 -0
  373. package/src/analytics/script.ts +60 -0
  374. package/src/analytics/segment.ts +85 -0
  375. package/src/analytics/vercel.ts +50 -0
  376. package/src/astro/adapter-root.ts +7 -9
  377. package/src/astro/component-slots.ts +131 -91
  378. package/src/astro/generate.ts +129 -361
  379. package/src/astro/integration.ts +2 -6
  380. package/src/astro/module-types.ts +1 -1
  381. package/src/astro/pages.ts +13 -101
  382. package/src/astro/render-deps.ts +379 -0
  383. package/src/astro/runtime-deps.ts +201 -0
  384. package/src/astro/templates.ts +575 -562
  385. package/src/audit/agent.ts +24 -0
  386. package/src/audit/catalog.ts +2 -2
  387. package/src/audit/checks/assets.ts +2 -2
  388. package/src/audit/checks/dns-aid.ts +1 -1
  389. package/src/audit/checks/duplicates.ts +3 -1
  390. package/src/audit/checks/i18n.ts +1 -1
  391. package/src/audit/checks/indexability.ts +7 -7
  392. package/src/audit/checks/links.ts +2 -2
  393. package/src/audit/checks/llms.ts +6 -6
  394. package/src/audit/checks/network.ts +3 -3
  395. package/src/audit/checks/og-image.ts +2 -2
  396. package/src/audit/checks/robots.ts +1 -1
  397. package/src/audit/checks/sitemap.ts +2 -2
  398. package/src/audit/checks/social.ts +1 -1
  399. package/src/audit/run.ts +4 -3
  400. package/src/audit/terms.ts +31 -0
  401. package/src/audit/url.ts +13 -13
  402. package/src/blume-modules.d.ts +2 -2
  403. package/src/cli/command-meta.ts +10 -0
  404. package/src/cli/commands/audit.ts +40 -21
  405. package/src/cli/commands/build.ts +71 -316
  406. package/src/cli/commands/check.ts +1 -0
  407. package/src/cli/commands/dev.ts +40 -1
  408. package/src/cli/commands/doctor.ts +92 -14
  409. package/src/cli/commands/eject.ts +44 -7
  410. package/src/cli/commands/eval.ts +5 -5
  411. package/src/cli/commands/init.ts +161 -41
  412. package/src/cli/commands/migrate.ts +121 -0
  413. package/src/cli/commands/preview.ts +7 -1
  414. package/src/cli/commands/translate.ts +5 -5
  415. package/src/cli/commands/upgrade.ts +141 -0
  416. package/src/cli/commands/version.ts +57 -44
  417. package/src/cli/eject-scripts.ts +121 -6
  418. package/src/cli/index.ts +11 -1
  419. package/src/cli/init/install.ts +70 -0
  420. package/src/cli/init/questions.ts +7 -0
  421. package/src/cli/init/scaffold.ts +459 -75
  422. package/src/cli/lazy-command.ts +37 -1
  423. package/src/cli/prepare.ts +40 -6
  424. package/src/cli/required-secrets.ts +39 -12
  425. package/src/cli/unknown-flags.ts +266 -0
  426. package/src/cli/yarn-pnp.ts +52 -0
  427. package/src/components/content/AccordionItem.astro +7 -1
  428. package/src/components/content/Card.astro +4 -3
  429. package/src/components/content/ColorItem.astro +22 -4
  430. package/src/components/content/GithubInfo.astro +2 -2
  431. package/src/components/content/Prompt.astro +25 -25
  432. package/src/components/content/Tabs.astro +3 -1
  433. package/src/components/content/Tile.astro +2 -3
  434. package/src/components/content/Tooltip.astro +57 -9
  435. package/src/components/content/content-strings.ts +34 -0
  436. package/src/components/content/diff.ts +1 -1
  437. package/src/components/content/mermaid-element.ts +13 -2
  438. package/src/components/content/prompt-markdown.ts +292 -0
  439. package/src/components/content/tooltip-id.ts +41 -0
  440. package/src/components/copy-feedback.ts +1 -1
  441. package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
  442. package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
  443. package/src/components/islands/hooks.ts +36 -11
  444. package/src/components/layout/Analytics.astro +21 -79
  445. package/src/components/layout/Banner.astro +3 -1
  446. package/src/components/layout/DiscoveryLinks.astro +69 -0
  447. package/src/components/layout/Header.astro +93 -30
  448. package/src/components/layout/LanguageSwitcher.astro +4 -1
  449. package/src/components/layout/Logo.astro +23 -2
  450. package/src/components/layout/NavSelector.astro +13 -2
  451. package/src/components/layout/NavTree.astro +12 -3
  452. package/src/components/layout/NavTreeScript.astro +17 -3
  453. package/src/components/layout/PageActions.astro +3 -3
  454. package/src/components/layout/PageFeedback.astro +11 -1
  455. package/src/components/layout/PageLayout.astro +58 -11
  456. package/src/components/layout/Pagination.astro +7 -7
  457. package/src/components/layout/ReferenceLayout.astro +22 -13
  458. package/src/components/layout/RootLayout.astro +75 -72
  459. package/src/components/layout/Search.astro +43 -19
  460. package/src/components/layout/WebMcp.astro +1 -1
  461. package/src/components/layout/analytics-client.ts +73 -16
  462. package/src/components/layout/drawer-inert.ts +113 -15
  463. package/src/components/layout/dropdown-clamp.ts +105 -0
  464. package/src/components/layout/head-scripts.ts +15 -6
  465. package/src/components/layout/nav-utils.ts +17 -0
  466. package/src/components/layout/search/algolia.ts +8 -8
  467. package/src/components/layout/search/orama-cloud.ts +9 -7
  468. package/src/components/layout/search/typesense.ts +11 -17
  469. package/src/components/openapi/MessageComposer.astro +2 -2
  470. package/src/components/openapi/Playground.astro +2 -2
  471. package/src/components/openapi/description.ts +2 -2
  472. package/src/components/openapi/playground-client.ts +79 -10
  473. package/src/core/changelog-index.ts +24 -0
  474. package/src/core/code-fences.ts +1 -1
  475. package/src/core/component-overrides.ts +399 -154
  476. package/src/core/config-input.ts +201 -566
  477. package/src/core/config.ts +131 -42
  478. package/src/core/custom-pages.ts +105 -0
  479. package/src/core/data.ts +34 -15
  480. package/src/core/define-components.ts +12 -9
  481. package/src/core/deployment-env.ts +18 -74
  482. package/src/core/diagnostics.ts +14 -7
  483. package/src/core/graph.ts +69 -25
  484. package/src/core/i18n-ui.ts +41 -11
  485. package/src/core/i18n.ts +17 -0
  486. package/src/core/includes.ts +156 -38
  487. package/src/core/last-modified.ts +6 -11
  488. package/src/core/links.ts +166 -2
  489. package/src/core/manifest.ts +10 -3
  490. package/src/core/navigation.ts +115 -16
  491. package/src/core/new-tab.ts +35 -0
  492. package/src/core/node-require.ts +21 -0
  493. package/src/core/project-graph.ts +42 -26
  494. package/src/core/project.ts +9 -4
  495. package/src/core/request-body.ts +61 -0
  496. package/src/core/safe-href.ts +28 -0
  497. package/src/core/safe-links.ts +68 -0
  498. package/src/core/schema.ts +528 -745
  499. package/src/core/server-features.ts +10 -11
  500. package/src/core/sources/assets.ts +47 -11
  501. package/src/core/sources/collection.ts +67 -0
  502. package/src/core/sources/contentful-rich-text.ts +285 -0
  503. package/src/core/sources/contentful.ts +173 -0
  504. package/src/core/sources/github-releases.ts +51 -1
  505. package/src/core/sources/json.ts +71 -0
  506. package/src/core/sources/lexical.ts +195 -0
  507. package/src/core/sources/lower.ts +226 -0
  508. package/src/core/sources/normalize.ts +52 -2
  509. package/src/core/sources/notion.ts +39 -28
  510. package/src/core/sources/payload.ts +135 -0
  511. package/src/core/sources/portable-text.ts +11 -16
  512. package/src/core/sources/remote.ts +226 -0
  513. package/src/core/sources/resolve.ts +104 -166
  514. package/src/core/sources/sanity.ts +16 -49
  515. package/src/core/sources/strapi-blocks.ts +124 -0
  516. package/src/core/sources/strapi.ts +191 -0
  517. package/src/core/sources/types.ts +12 -1
  518. package/src/core/types.ts +15 -1
  519. package/src/core/ui-packs/ar.ts +10 -7
  520. package/src/core/ui-packs/bg.ts +10 -7
  521. package/src/core/ui-packs/bn.ts +10 -7
  522. package/src/core/ui-packs/ca.ts +7 -6
  523. package/src/core/ui-packs/cs.ts +10 -7
  524. package/src/core/ui-packs/da.ts +10 -7
  525. package/src/core/ui-packs/de.ts +10 -7
  526. package/src/core/ui-packs/el.ts +7 -6
  527. package/src/core/ui-packs/es.ts +7 -6
  528. package/src/core/ui-packs/fa.ts +10 -7
  529. package/src/core/ui-packs/fi.ts +10 -7
  530. package/src/core/ui-packs/fr.ts +7 -6
  531. package/src/core/ui-packs/he.ts +10 -7
  532. package/src/core/ui-packs/hi.ts +10 -7
  533. package/src/core/ui-packs/hr.ts +10 -7
  534. package/src/core/ui-packs/hu.ts +10 -7
  535. package/src/core/ui-packs/id.ts +10 -7
  536. package/src/core/ui-packs/it.ts +7 -6
  537. package/src/core/ui-packs/ja.ts +7 -6
  538. package/src/core/ui-packs/ko.ts +7 -6
  539. package/src/core/ui-packs/nl.ts +10 -7
  540. package/src/core/ui-packs/no.ts +10 -7
  541. package/src/core/ui-packs/pl.ts +10 -7
  542. package/src/core/ui-packs/pt-br.ts +7 -6
  543. package/src/core/ui-packs/pt.ts +7 -6
  544. package/src/core/ui-packs/ro.ts +10 -7
  545. package/src/core/ui-packs/ru.ts +10 -7
  546. package/src/core/ui-packs/sk.ts +10 -7
  547. package/src/core/ui-packs/sr.ts +10 -7
  548. package/src/core/ui-packs/sv.ts +10 -7
  549. package/src/core/ui-packs/th.ts +7 -6
  550. package/src/core/ui-packs/tr.ts +10 -7
  551. package/src/core/ui-packs/uk.ts +10 -7
  552. package/src/core/ui-packs/vi.ts +7 -6
  553. package/src/core/ui-packs/zh-tw.ts +7 -6
  554. package/src/core/ui-packs/zh.ts +7 -6
  555. package/src/core/unrecognized-keys.ts +10 -0
  556. package/src/core/version-cut.ts +116 -8
  557. package/src/deploy/adapter-output.ts +57 -97
  558. package/src/deploy/adapters/cloudflare.ts +39 -0
  559. package/src/deploy/adapters/index.ts +41 -0
  560. package/src/deploy/adapters/netlify.ts +34 -0
  561. package/src/deploy/adapters/node.ts +34 -0
  562. package/src/deploy/adapters/registry.ts +127 -0
  563. package/src/deploy/adapters/types.ts +92 -0
  564. package/src/deploy/adapters/vercel.ts +35 -0
  565. package/src/deploy/artifacts.ts +55 -27
  566. package/src/deploy/cloudflare-negotiation.ts +179 -100
  567. package/src/deploy/function-bundle.ts +18 -3
  568. package/src/deploy/headers.ts +124 -23
  569. package/src/deploy/node-headers.ts +198 -0
  570. package/src/deploy/platforms/cloudflare.ts +312 -0
  571. package/src/deploy/platforms/index.ts +67 -0
  572. package/src/deploy/platforms/netlify.ts +52 -0
  573. package/src/deploy/platforms/node.ts +40 -0
  574. package/src/deploy/platforms/paths.ts +42 -0
  575. package/src/deploy/platforms/static.ts +29 -0
  576. package/src/deploy/platforms/types.ts +112 -0
  577. package/src/deploy/platforms/vercel.ts +193 -0
  578. package/src/deploy/redirects.ts +30 -18
  579. package/src/deploy/robots.ts +3 -3
  580. package/src/deploy/rss.ts +2 -2
  581. package/src/deploy/sitemap.ts +2 -2
  582. package/src/deploy/vercel-negotiation.ts +2 -2
  583. package/src/eval/agents.ts +32 -1
  584. package/src/eval/findings.ts +19 -11
  585. package/src/eval/report.ts +10 -2
  586. package/src/markdown/external-links.ts +65 -0
  587. package/src/markdown/include.ts +45 -27
  588. package/src/markdown/index.ts +34 -9
  589. package/src/markdown/inline-code.ts +12 -6
  590. package/src/markdown/relative-links.ts +324 -0
  591. package/src/markdown/themes.ts +3 -3
  592. package/src/migrate/migrate.ts +149 -0
  593. package/src/openapi/parse.ts +64 -16
  594. package/src/openapi/proxy.ts +62 -10
  595. package/src/openapi/references.ts +147 -147
  596. package/src/openapi/render-mdx.ts +32 -10
  597. package/src/openapi/scalar.ts +15 -13
  598. package/src/openapi/sentence.ts +14 -0
  599. package/src/openapi/source.ts +37 -21
  600. package/src/openapi/spec-dependency-error.ts +15 -0
  601. package/src/reference/asyncapi.ts +83 -0
  602. package/src/reference/graphql.ts +89 -0
  603. package/src/reference/index.ts +40 -0
  604. package/src/reference/openapi.ts +83 -0
  605. package/src/reference/options.ts +201 -0
  606. package/src/reference/scalar.ts +136 -0
  607. package/src/reference/schema.ts +88 -0
  608. package/src/registry/eject.ts +109 -53
  609. package/src/search/adapters/algolia.ts +46 -0
  610. package/src/search/adapters/flexsearch.ts +29 -0
  611. package/src/search/adapters/index.ts +39 -0
  612. package/src/search/adapters/mixedbread.ts +39 -0
  613. package/src/search/adapters/orama-cloud.ts +51 -0
  614. package/src/search/adapters/orama.ts +24 -0
  615. package/src/search/adapters/pagefind.ts +27 -0
  616. package/src/search/adapters/registry.ts +131 -0
  617. package/src/search/adapters/types.ts +46 -0
  618. package/src/search/adapters/typesense.ts +57 -0
  619. package/src/search/build.ts +8 -4
  620. package/src/search/documents.ts +8 -2
  621. package/src/search/orama-index.ts +1 -1
  622. package/src/search/sync/algolia.ts +12 -11
  623. package/src/search/sync/index.ts +35 -20
  624. package/src/search/sync/orama-cloud.ts +12 -9
  625. package/src/search/sync/typesense.ts +15 -13
  626. package/src/sources/contentful.ts +63 -0
  627. package/src/sources/custom.ts +38 -0
  628. package/src/sources/filesystem.ts +51 -0
  629. package/src/sources/github-releases.ts +52 -0
  630. package/src/sources/index.ts +60 -0
  631. package/src/sources/mdx-remote.ts +76 -0
  632. package/src/sources/notion.ts +63 -0
  633. package/src/sources/obsidian.ts +38 -0
  634. package/src/sources/payload.ts +60 -0
  635. package/src/sources/registry.ts +182 -0
  636. package/src/sources/sanity.ts +66 -0
  637. package/src/sources/shared.ts +52 -0
  638. package/src/sources/strapi.ts +58 -0
  639. package/src/theme/entry.ts +24 -2
  640. package/src/translate/report.ts +40 -7
  641. package/src/upgrade/upgrade.ts +499 -0
  642. package/dist/cli/chunk-0qymqwzz.js +0 -164
  643. package/dist/cli/chunk-0qymqwzz.js.map +0 -15
  644. package/dist/cli/chunk-1jefwnfs.js.map +0 -48
  645. package/dist/cli/chunk-2mzebbbz.js +0 -69
  646. package/dist/cli/chunk-2z47ypj8.js.map +0 -11
  647. package/dist/cli/chunk-4x36ddpw.js.map +0 -11
  648. package/dist/cli/chunk-5093q3n7.js +0 -68
  649. package/dist/cli/chunk-5093q3n7.js.map +0 -10
  650. package/dist/cli/chunk-5qk08vmp.js.map +0 -11
  651. package/dist/cli/chunk-7s8hm3b6.js +0 -5347
  652. package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
  653. package/dist/cli/chunk-8cjtbafj.js.map +0 -13
  654. package/dist/cli/chunk-97r59kpr.js +0 -381
  655. package/dist/cli/chunk-97r59kpr.js.map +0 -12
  656. package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
  657. package/dist/cli/chunk-b27xqwn9.js.map +0 -10
  658. package/dist/cli/chunk-bf6bt1xt.js +0 -185
  659. package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
  660. package/dist/cli/chunk-cjtn640a.js.map +0 -10
  661. package/dist/cli/chunk-ct47dqpx.js.map +0 -11
  662. package/dist/cli/chunk-esphfr8p.js +0 -107
  663. package/dist/cli/chunk-esphfr8p.js.map +0 -11
  664. package/dist/cli/chunk-ex56aa81.js +0 -1016
  665. package/dist/cli/chunk-ex56aa81.js.map +0 -13
  666. package/dist/cli/chunk-garjf5z9.js +0 -30
  667. package/dist/cli/chunk-garjf5z9.js.map +0 -10
  668. package/dist/cli/chunk-js7saxwm.js +0 -1045
  669. package/dist/cli/chunk-js7saxwm.js.map +0 -22
  670. package/dist/cli/chunk-k79xp7av.js.map +0 -39
  671. package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
  672. package/dist/cli/chunk-q4rae3bg.js +0 -60
  673. package/dist/cli/chunk-q4rae3bg.js.map +0 -10
  674. package/dist/cli/chunk-rz9jmfhz.js +0 -108
  675. package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
  676. package/dist/cli/chunk-vh9w1sgp.js +0 -73
  677. package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
  678. package/dist/cli/chunk-vrfp10qk.js +0 -81
  679. package/dist/cli/chunk-vrfp10qk.js.map +0 -10
  680. package/dist/cli/chunk-yg63d42r.js.map +0 -34
  681. package/docs/advanced/api-reference.mdx +0 -240
  682. package/docs/configuration/ask-ai.mdx +0 -256
  683. package/docs/reference/cli.mdx +0 -197
  684. package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
  685. package/src/components/content/changelog-element.ts +0 -69
  686. package/src/search/providers.ts +0 -91
  687. /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-27g6wdth.js.map} +0 -0
  688. /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-ce574jw2.js.map} +0 -0
  689. /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-fxypxtvm.js.map} +0 -0
  690. /package/dist/cli/{chunk-nn13znc2.js.map → chunk-zxcczpyx.js.map} +0 -0
@@ -2,19 +2,21 @@ import type { AstroIntegration } from "astro";
2
2
  import type { z } from "zod";
3
3
 
4
4
  import type { AskRetrievalOptions } from "../ai/ask-context.ts";
5
+ import type { AssistantAdapter } from "../ai/ask.ts";
5
6
  import type { ComponentMarkdown } from "../ai/component-markdown.ts";
7
+ import type { AnalyticsAdapter } from "../analytics/schema.ts";
8
+ import type { DeploymentInput } from "../deploy/adapters/registry.ts";
6
9
  import type { CodeTheme } from "../markdown/themes.ts";
10
+ import type { ReferenceAdapter } from "../reference/schema.ts";
11
+ import type { AnySearchAdapter } from "../search/adapters/registry.ts";
12
+ import type { SourceAdapterInput } from "../sources/registry.ts";
7
13
  import type { FontSlug } from "../theme/fonts.ts";
8
14
  import type {
9
15
  blumeConfigSchema,
10
- GraphqlSource,
11
- OpenApiSource,
12
16
  OpenInChatProvider,
13
- SearchProvider,
14
17
  SidebarDisplay,
15
18
  SidebarItemConfig,
16
19
  } from "./schema.ts";
17
- import type { ContentSource } from "./sources/types.ts";
18
20
  import type { StandardSchema } from "./standard-schema.ts";
19
21
 
20
22
  /**
@@ -105,191 +107,34 @@ export type BannerConfig =
105
107
  };
106
108
  };
107
109
 
108
- // ---------------------------------------------------------------------------
109
- // Content sources
110
- // ---------------------------------------------------------------------------
111
-
112
- /** Local Markdown/MDX read from the filesystem. */
113
- export interface FilesystemSource {
114
- type: "filesystem";
115
- /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. */
116
- exclude?: string[];
117
- /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. */
118
- include?: string[];
119
- /** Namespaces this source's routes under `/<prefix>/`. */
120
- prefix?: string;
121
- /** Directory to read from, relative to the project root. Defaults to `docs`. */
122
- root?: string;
123
- }
124
-
125
- /**
126
- * Remote Markdown/MDX fetched over HTTP. Enumerate files explicitly against a
127
- * raw `url` base, or from a GitHub repo subtree via `github`. A private repo's
128
- * token comes from `GITHUB_TOKEN` — never inline it here.
129
- */
130
- export interface MdxRemoteSource {
131
- type: "mdx-remote";
132
- /** Explicit list of source-relative file paths to fetch from `url`. */
133
- files?: string[];
134
- /** Enumerate a GitHub repo subtree via the git-trees API. */
135
- github?: {
136
- /** Repository owner (user or org). */
137
- owner: string;
138
- /** Subpath within the repo. Defaults to the repo root. */
139
- path?: string;
140
- /** Git ref (branch, tag, or SHA). Defaults to `main`. */
141
- ref?: string;
142
- /** Repository name. */
143
- repo: string;
144
- };
145
- /** Glob patterns applied to enumerated refs. Defaults to `["**\/*.{md,mdx}"]`. */
146
- include?: string[];
147
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
148
- pollInterval?: number;
149
- /** Namespaces this source's routes under `/<prefix>/`. */
150
- prefix?: string;
151
- /** Raw base URL, e.g. `https://raw.githubusercontent.com/acme/sdk/main/docs`. */
152
- url?: string;
153
- }
154
-
155
- /**
156
- * A repo's GitHub Releases, materialized as `type: changelog` entries — release
157
- * notes become the changelog with no files to maintain. A private repo reads a
158
- * token from `GITHUB_TOKEN`; never inline it here.
159
- */
160
- export interface GithubReleasesSource {
161
- type: "github-releases";
162
- /** Include draft releases (needs a token with repo write access). */
163
- drafts?: boolean;
164
- /** Cap the number of releases materialized, newest-first. Defaults to 100. */
165
- limit?: number;
166
- /** Repository owner (user or org). */
167
- owner: string;
168
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
169
- pollInterval?: number;
170
- /** Namespaces this source's routes under `/<prefix>/`; e.g. `changelog`. */
171
- prefix?: string;
172
- /** Include prereleases. */
173
- prereleases?: boolean;
174
- /** Repository name. */
175
- repo: string;
176
- }
177
-
178
- /** A Sanity dataset queried with GROQ; Portable Text bodies become Markdown. */
179
- export interface SanitySource {
180
- type: "sanity";
181
- /** Sanity API version (a date). Defaults to `2024-01-01`. */
182
- apiVersion?: string;
183
- /** Dataset name to query. */
184
- dataset: string;
185
- /** Field paths mapping a document onto Blume meta + body. */
186
- fields?: {
187
- /** Field holding the renderable body (Portable Text or Markdown). */
188
- body?: string;
189
- /** Field holding the page description. */
190
- description?: string;
191
- /** Field holding the last-modified date. */
192
- lastModified?: string;
193
- /** Field holding the page slug. */
194
- slug?: string;
195
- /** Field holding the page title. */
196
- title?: string;
197
- };
198
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
199
- pollInterval?: number;
200
- /** Namespaces this source's routes under `/<prefix>/`. */
201
- prefix?: string;
202
- /** Sanity project id. */
203
- projectId: string;
204
- /** GROQ query selecting the documents to import. */
205
- query: string;
206
- }
207
-
208
- /** A Notion database; pages become entries, blocks become MDX. */
209
- export interface NotionSource {
210
- type: "notion";
211
- /** Max concurrent Notion API requests; default 3 (Notion's per-integration pace). */
212
- concurrency?: number;
213
- /** Notion database id. */
214
- database: string;
215
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
216
- pollInterval?: number;
217
- /** Namespaces this source's routes under `/<prefix>/`. */
218
- prefix?: string;
219
- /** Notion property names mapped onto Blume meta. */
220
- properties?: {
221
- /** Property holding the page description. */
222
- description?: string;
223
- /** Property holding the sort order. */
224
- order?: string;
225
- /** Property holding the page slug. */
226
- slug?: string;
227
- /** Property holding the publish status. */
228
- status?: string;
229
- /** Property holding the page title. */
230
- title?: string;
231
- };
232
- /** Status value treated as published; others map to `draft`. Defaults to `Published`. */
233
- publishedValue?: string;
234
- }
235
-
236
- /**
237
- * An Obsidian vault, read in place. Wikilinks become route links and
238
- * `%%comments%%` are stripped at load time, so the vault stays the source of
239
- * truth — no export step and no generated notes in the repo.
240
- */
241
- export interface ObsidianSource {
242
- type: "obsidian";
243
- /** Vault folder names to skip at any depth, in addition to dot-folders. */
244
- exclude?: string[];
245
- /** Namespaces this source's routes under `/<prefix>/`; e.g. `vault`. */
246
- prefix?: string;
247
- /** Vault directory, absolute or relative to the project root. */
248
- vault: string;
249
- }
250
-
251
- /**
252
- * A user-provided {@link ContentSource} instance, passed straight through. This
253
- * is the extension point for adapters with custom serializers or any other
254
- * backend, without their SDKs touching core.
255
- */
256
- export interface CustomSource {
257
- type: "custom";
258
- /** A `ContentSource` implementation (an object with `name` + `load`). */
259
- source: ContentSource;
260
- }
261
-
262
- /** A single configured content source, discriminated by `type`. */
263
- export type ContentSourceInput =
264
- | FilesystemSource
265
- | MdxRemoteSource
266
- | GithubReleasesSource
267
- | SanitySource
268
- | NotionSource
269
- | ObsidianSource
270
- | CustomSource;
271
-
272
110
  /**
273
- * Where content lives and how it's discovered. When `sources` is omitted, the
274
- * top-level `root`/`include`/`exclude` desugar to one implicit filesystem
275
- * source, so simple sites need nothing here.
111
+ * Where content lives and how it's discovered. `root`/`include`/`exclude` are
112
+ * zero-config shorthand for a single `filesystem()` source; set `sources` to
113
+ * compose adapters instead, and move those fields into its `filesystem()`
114
+ * entry — the two forms can't be combined.
276
115
  */
277
116
  export interface ContentConfig {
278
117
  /** Default page `type` for content that sets none. Defaults to `doc`. */
279
118
  defaultType?: string;
280
- /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. */
119
+ /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. Shorthand; not allowed beside `sources`. */
281
120
  exclude?: string[];
282
- /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. */
121
+ /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. Shorthand; not allowed beside `sources`. */
283
122
  include?: string[];
284
123
  /** Directory of standalone `pages` (outside the docs tree). Defaults to `pages`. */
285
124
  pages?: string;
286
- /** Content root directory, relative to the project root. Defaults to `docs`. */
125
+ /** Content root directory, relative to the project root. Defaults to `docs`. Shorthand; not allowed beside `sources`. */
287
126
  root?: string;
288
127
  /**
289
- * Pluggable content sources. Mix local files with remote MDX, GitHub
290
- * Releases, Sanity, Notion, or a custom `ContentSource`.
128
+ * Content source adapters from `blume/sources`, read in order:
129
+ * `filesystem({ root })`, `mdxRemote({ github })`, `githubReleases({ owner,
130
+ * repo })`, `sanity({ projectId, dataset, query })`, `notion({ database })`,
131
+ * `contentful({ space, contentType })`, `payload({ url, collection })`,
132
+ * `strapi({ url, contentType })`, `obsidian({ vault })`, or `custom(source)`
133
+ * for any `ContentSource`
134
+ * implementation. When set it replaces the implicit filesystem source, so
135
+ * list a `filesystem()` entry for local docs.
291
136
  */
292
- sources?: ContentSourceInput[];
137
+ sources?: SourceAdapterInput[];
293
138
  /**
294
139
  * Per-type content definitions, keyed by the frontmatter `type` they apply
295
140
  * to (including `defaultType`, for pages that set none):
@@ -564,7 +409,7 @@ type RadiusScale = RadiusScaleTight | RadiusScaleRound;
564
409
 
565
410
  export interface ThemeConfig {
566
411
  /**
567
- * Accent color. A palette name (`blue`, `violet`, `green`, …) or any CSS
412
+ * Accent color. A palette name (`blue`, `purple`, `green`, …) or any CSS
568
413
  * color applies to both modes; the object form sets each mode. Defaults to
569
414
  * `blue`.
570
415
  */
@@ -577,8 +422,6 @@ export interface ThemeConfig {
577
422
  backgroundImage?: PerModeValue;
578
423
  /** Font selection for body, display, and mono roles. */
579
424
  fonts?: FontsConfig;
580
- /** Overall page layout. Currently only `sidebar`. */
581
- layout?: "sidebar";
582
425
  /** Initial color mode. Defaults to `system`. */
583
426
  mode?: "system" | "light" | "dark";
584
427
  /** Corner radius scale. Defaults to `md`. */
@@ -589,35 +432,6 @@ export interface ThemeConfig {
589
432
  // Search
590
433
  // ---------------------------------------------------------------------------
591
434
 
592
- /** Public credentials for the Algolia backend (the sync key stays an env var). */
593
- export interface AlgoliaSearch {
594
- appId: string;
595
- indexName: string;
596
- searchApiKey: string;
597
- }
598
-
599
- /** Public credentials for the Orama Cloud backend. */
600
- export interface OramaCloudSearch {
601
- apiKey: string;
602
- endpoint: string;
603
- /** Index id used by the build-time sync (with `ORAMA_PRIVATE_API_KEY`). */
604
- indexId?: string;
605
- }
606
-
607
- /** Connection details for a self-hosted or cloud Typesense backend. */
608
- export interface TypesenseSearch {
609
- collection: string;
610
- host: string;
611
- port?: number;
612
- protocol?: "http" | "https";
613
- searchApiKey: string;
614
- }
615
-
616
- /** Mixedbread semantic search: the store the server endpoint queries. */
617
- export interface MixedbreadSearch {
618
- storeId: string;
619
- }
620
-
621
435
  /** A curated link for the search dialog empty state. */
622
436
  export interface SearchPopularLink {
623
437
  /** Internal route or external URL. */
@@ -632,13 +446,17 @@ export interface SearchPopularLink {
632
446
  }
633
447
 
634
448
  /**
635
- * Search backend. The default `orama` builds a local index at build time (and
636
- * runs in dev); hosted providers need their credential block below. `none`
637
- * disables search.
449
+ * The search backend: an adapter from `blume/search` — `orama()` (the
450
+ * default), `flexsearch()`, `pagefind()`, `algolia({…})`, `oramaCloud({…})`,
451
+ * `typesense({…})`, `mixedbread({…})` — or `false` to disable search. Each
452
+ * adapter is a plain descriptor carrying its own options, runtime dependency,
453
+ * and required secrets; hosted adapters take public credentials only and read
454
+ * their admin keys from the environment.
638
455
  */
639
- export interface SearchConfig {
640
- /** Algolia credentials (required when `provider` is `algolia`). */
641
- algolia?: AlgoliaSearch;
456
+ export type SearchProviderConfig = AnySearchAdapter | false;
457
+
458
+ /** The object form of `search`: the adapter plus adapter-independent settings. */
459
+ export interface SearchOptions {
642
460
  /** Indexing behavior. */
643
461
  indexing?: {
644
462
  /**
@@ -650,42 +468,36 @@ export interface SearchConfig {
650
468
  /** Include pages marked `hidden` in the search index. Defaults to `false`. */
651
469
  includeHiddenPages?: boolean;
652
470
  };
653
- /** Mixedbread store (required when `provider` is `mixedbread`). */
654
- mixedbread?: MixedbreadSearch;
655
- /** Orama Cloud credentials (required when `provider` is `orama-cloud`). */
656
- oramaCloud?: OramaCloudSearch;
657
471
  /**
658
472
  * Curated links for the Cmd+K empty state. When omitted or empty, the first
659
473
  * sidebar pages are shown instead.
660
474
  */
661
475
  popular?: SearchPopularLink[];
662
- /** Which backend powers search. Defaults to `orama`. */
663
- provider?: SearchProvider;
664
- /** Typesense credentials (required when `provider` is `typesense`). */
665
- typesense?: TypesenseSearch;
476
+ /** Which adapter powers search. Defaults to `orama()`. */
477
+ provider?: SearchProviderConfig;
666
478
  }
667
479
 
480
+ /**
481
+ * Search configuration. Pass an adapter directly (`search: algolia({…})`, or
482
+ * `false`) as shorthand for the object form, which also carries `popular`
483
+ * links and `indexing` settings.
484
+ */
485
+ export type SearchConfig = SearchProviderConfig | SearchOptions;
486
+
668
487
  // ---------------------------------------------------------------------------
669
488
  // AI
670
489
  // ---------------------------------------------------------------------------
671
490
 
672
- /** An empty-state prompt shown before the first Ask AI question. */
673
- export interface AskSuggestion {
491
+ /** An empty-state prompt shown before the first question to the assistant. */
492
+ export interface AssistantSuggestion {
674
493
  /** Lucide icon name shown beside the suggestion. */
675
494
  icon?: string;
676
495
  /** The clickable suggestion text. */
677
496
  label: string;
678
497
  }
679
498
 
680
- /** The Ask AI chat assistant. */
681
- /** Backends that can route an Ask AI request. */
682
- type AskProviderGateway = "gateway" | "openrouter" | "llmgateway";
683
- type AskProvider = AskProviderGateway | "inkeep" | "openai-compatible";
684
- /** How much the model reasons before answering (`ai.ask.reasoning`). */
685
- type AskReasoning = "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
686
-
687
- /** How much retrieved documentation each Ask AI question carries. */
688
- export interface AskRetrievalConfig {
499
+ /** How much retrieved documentation each question to the assistant carries. */
500
+ export interface AssistantRetrievalConfig {
689
501
  /**
690
502
  * Total injected documentation characters, across all excerpts. Defaults to
691
503
  * `10000`. The single biggest lever on time-to-first-token — the model reads
@@ -706,17 +518,8 @@ export interface AskRetrievalConfig {
706
518
  maxResults?: number;
707
519
  }
708
520
 
709
- export interface AskConfig {
710
- /**
711
- * Name of the env var holding the provider API key. Each provider has a
712
- * sensible default; set this only to override it.
713
- */
714
- apiKeyEnv?: string;
715
- /**
716
- * Backend base URL. Required for `openai-compatible`; for named providers it
717
- * overrides the built-in preset.
718
- */
719
- baseUrl?: string;
521
+ /** The chat assistant. */
522
+ export interface AssistantConfig {
720
523
  /**
721
524
  * Origins allowed to call the generated endpoint from another site — a
722
525
  * marketing page that embeds an ask box, for example — or `"*"` to allow
@@ -729,51 +532,38 @@ export interface AskConfig {
729
532
  * combined with it.
730
533
  */
731
534
  cors?: string[];
732
- /** Turn Ask AI on. Defaults to `false`. */
535
+ /** Turn the assistant on. Defaults to `false`. */
733
536
  enabled?: boolean;
734
537
  /**
735
- * Existing Ask AI endpoint to call instead of generating one. This keeps a
538
+ * Existing assistant endpoint to call instead of generating one. This keeps a
736
539
  * Blume site static while an API backend owns retrieval, model access, rate
737
540
  * limiting, and streaming. Accepts an absolute URL or root-relative path.
738
541
  */
739
542
  endpoint?: string;
740
- /**
741
- * Static request headers sent to the provider on every call — a
742
- * caller-identifying header for a shared backend, for example. Values are
743
- * written into the generated route as literals, so keep secrets in
744
- * `apiKeyEnv` rather than here.
745
- */
746
- headers?: Record<string, string>;
747
543
  /**
748
544
  * Extra system-prompt text appended to the built-in instructions — use it
749
545
  * for identity, language, or tone. The built-in grounding behavior (answer
750
546
  * from the retrieved excerpts, cite pages as Markdown links) is preserved.
751
547
  */
752
548
  instructions?: string;
753
- /** Model id to use. Defaults to `openai/gpt-5.5`. */
754
- model?: string;
755
- /** Which backend routes the request. Defaults to `gateway`. */
756
- provider?: AskProvider;
757
549
  /**
758
- * How much the model reasons before answering, from `"none"` to `"xhigh"`.
759
- * Sent as the backend's own reasoning-effort control: the AI SDK's
760
- * `reasoning` option on the gateway, `reasoning.effort` on OpenRouter, and
761
- * `reasoning_effort` on OpenAI-compatible endpoints. The model has to
762
- * support the level — OpenAI rejects one a model doesn't offer — and the
763
- * endpoint has to accept the parameter; Inkeep has no reasoning control,
764
- * so the field is rejected there. Omitted keeps the model's default.
765
- * `"none"` is the fastest and cheapest for grounded docs Q&A, where the
766
- * retrieved excerpts carry the answer.
550
+ * Which backend answers: the descriptor an adapter factory returns —
551
+ * `gateway({ model })`, `openrouter({ model, reasoning })`,
552
+ * `llmgateway({ model })`, `inkeep({ model })`, or
553
+ * `openaiCompatible({ baseUrl, name, model, apiKeyEnv })`, all exported
554
+ * from `blume/ai`. Each adapter owns its model, key env var, reasoning
555
+ * mapping, and `providerOptions` passthrough. Defaults to
556
+ * `gateway({ model: "openai/gpt-5.5" })`.
767
557
  */
768
- reasoning?: AskReasoning;
558
+ provider?: AssistantAdapter;
769
559
  /**
770
560
  * How much documentation each question carries into the model's prompt.
771
561
  * Lower values cut time-to-first-token — which dominates on a self-hosted
772
562
  * backend — at the cost of recall. Defaults keep the built-in behavior.
773
563
  */
774
- retrieval?: AskRetrievalConfig;
564
+ retrieval?: AssistantRetrievalConfig;
775
565
  /** Starter prompts shown before the first question. */
776
- suggestions?: AskSuggestion[];
566
+ suggestions?: AssistantSuggestion[];
777
567
  }
778
568
 
779
569
  /** What the AI Catalog (ARD) manifest carries. */
@@ -789,7 +579,7 @@ export interface AiCatalogConfig {
789
579
  * registries embed for semantic search.
790
580
  *
791
581
  * ```ts
792
- * ai: {
582
+ * agents: {
793
583
  * catalog: {
794
584
  * queries: {
795
585
  * "mcp:acme": ["how do I install Acme", "search the Acme docs"],
@@ -811,7 +601,7 @@ export interface LlmsTxtConfig {
811
601
  * dropped.
812
602
  *
813
603
  * ```ts
814
- * ai: {
604
+ * agents: {
815
605
  * llmsTxt: {
816
606
  * details: "## When to use Acme\n\nUse Acme when…",
817
607
  * },
@@ -841,59 +631,10 @@ export interface McpConfig {
841
631
  route?: string;
842
632
  }
843
633
 
844
- /**
845
- * AI-facing features: the Ask AI assistant, an `llms.txt` manifest, and the
846
- * hosted MCP server.
847
- */
634
+ /** Model-facing features: the assistant and the "Open in chat" action. */
848
635
  export interface AiConfig {
849
- /**
850
- * The JSON docs API — the REST twin of the MCP tools. Serves the page index
851
- * (`/api/docs/pages.json`), each page as JSON (`/api/docs/pages/{route}.json`),
852
- * and the navigation tree (`/api/docs/navigation.json`) as prerendered
853
- * files, plus full-text search (`/api/docs/search?q=`) on server output,
854
- * all described by an OpenAPI document at `/openapi.json`. Errors are RFC
855
- * 9457 problem details. Defaults to `true`; set `false` to publish none of it.
856
- */
857
- api?: boolean;
858
- /** The Ask AI chat assistant. */
859
- ask?: AskConfig;
860
- /**
861
- * The AI Catalog / ARD manifest (`/.well-known/ai-catalog.json`, mirrored
862
- * at `/.well-known/ard.json`): a domain-level index of the agent-facing
863
- * resources the site publishes — MCP server, agent skills, the JSON docs
864
- * API, API references, llms.txt — for agent registries. Needs a
865
- * `deployment.site`. Defaults to `true`; the object form overrides the
866
- * generated representative queries per entry.
867
- */
868
- catalog?: boolean | AiCatalogConfig;
869
- /**
870
- * Emit `llms.txt` (an index of the docs for LLMs). Defaults to `true`.
871
- * The object form adds knobs for what the files include.
872
- */
873
- llmsTxt?: boolean | LlmsTxtConfig;
874
- /**
875
- * Markdown serializers for custom components in agent-facing output (the
876
- * `.md` mirror, `llms-full.txt`, MCP `get_page`), keyed by JSX name. Each
877
- * receives the component's statically-evaluated `props` (with the page's
878
- * `frontmatter` in scope, so `prop={frontmatter.status}` resolves), its
879
- * downleveled `children`, and the page's `frontmatter` data, and returns
880
- * replacement Markdown — or `null` to leave the JSX verbatim. A same-name
881
- * entry replaces a built-in serializer.
882
- *
883
- * These live in `blume.config.ts` (which is executed at build time), not in
884
- * `components.tsx` (which is only statically analyzed, never run).
885
- *
886
- * ```ts
887
- * ai: {
888
- * markdownComponents: {
889
- * Chart: ({ props }) => `![${props.title}](/charts/${props.slug}.png)`,
890
- * },
891
- * }
892
- * ```
893
- */
894
- markdownComponents?: Record<string, ComponentMarkdown>;
895
- /** Expose the docs as an MCP server for agents. */
896
- mcp?: McpConfig;
636
+ /** The chat assistant. */
637
+ assistant?: AssistantConfig;
897
638
  /**
898
639
  * The "Open in chat" page action, which opens the current page in an AI
899
640
  * assistant pre-filled with a prompt pointing at its raw Markdown.
@@ -907,34 +648,6 @@ export interface AiConfig {
907
648
  * ```
908
649
  */
909
650
  openInChat?: boolean | OpenInChatProvider[];
910
- /**
911
- * Publish Agent Skills for discovery: a directory (resolved against the
912
- * project root) whose subdirectories each hold a `SKILL.md`. Skills are
913
- * copied under `/.well-known/agent-skills/` — single-file skills verbatim,
914
- * skills with supporting resources as `.tar.gz` archives — and enumerated
915
- * in a discovery index with SHA-256 digests (Agent Skills Discovery RFC).
916
- *
917
- * ```ts
918
- * ai: {
919
- * skills: "./skills",
920
- * }
921
- * ```
922
- */
923
- skills?: string;
924
- /**
925
- * Web Bot Auth: publish the org's HTTP Message Signature public keys at
926
- * `/.well-known/http-message-signatures-directory`, so sites receiving
927
- * requests from your agents can verify them. Public keys only — a key
928
- * containing private material (`d`, `p`, `q`, …) is rejected.
929
- */
930
- webBotAuth?: WebBotAuthConfig;
931
- /**
932
- * WebMCP: register in-page tools (search, page Markdown, the docs index)
933
- * on the browser's model context, so agentic browsers can drive the docs
934
- * without a separate MCP connection. The script is tiny and no-ops in
935
- * browsers without the API. Defaults to `true`; set `false` to opt out.
936
- */
937
- webmcp?: boolean;
938
651
  }
939
652
 
940
653
  /** Web Bot Auth signature directory. Off until at least one key is listed. */
@@ -944,47 +657,6 @@ export interface WebBotAuthConfig {
944
657
  keys?: Record<string, unknown>[];
945
658
  }
946
659
 
947
- // ---------------------------------------------------------------------------
948
- // Analytics
949
- // ---------------------------------------------------------------------------
950
-
951
- /** An arbitrary analytics `<script>`; set exactly one of `src` or `content`. */
952
- export interface AnalyticsScript {
953
- /** Extra attributes spread onto the `<script>` (e.g. `data-domain`, `id`). */
954
- attributes?: Record<string, string>;
955
- /** Inline script body. Mutually exclusive with `src`. */
956
- content?: string;
957
- /** External script URL. Mutually exclusive with `content`. */
958
- src?: string;
959
- /** Load strategy for an external script. */
960
- strategy?: "async" | "defer";
961
- }
962
-
963
- /** Analytics providers. Configure one, several, or none. */
964
- export interface AnalyticsConfig {
965
- /**
966
- * Cloudflare Web Analytics, for a site Cloudflare doesn't proxy (manual
967
- * setup). Not needed on a proxied zone with automatic RUM enabled — that
968
- * injects the beacon at the edge, and configuring it here too would count
969
- * every pageview twice.
970
- */
971
- cloudflare?: {
972
- /** Site token from the Web Analytics JS snippet (`data-cf-beacon`). */
973
- token: string;
974
- };
975
- /** PostHog product analytics. */
976
- posthog?: {
977
- /** API host (for self-hosted / EU). Defaults to PostHog cloud. */
978
- host?: string;
979
- /** Project API key. */
980
- key: string;
981
- };
982
- /** Escape hatch for any other provider (Plausible, Fathom, GA, Umami, …). */
983
- scripts?: AnalyticsScript[];
984
- /** Enable Vercel Web Analytics. */
985
- vercel?: boolean;
986
- }
987
-
988
660
  // ---------------------------------------------------------------------------
989
661
  // i18n
990
662
  // ---------------------------------------------------------------------------
@@ -1086,26 +758,14 @@ export interface VersionsConfig {
1086
758
  // ---------------------------------------------------------------------------
1087
759
 
1088
760
  /**
1089
- * Where and how the site deploys. `site` (and `adapter`) are auto-detected from
1090
- * the platform env on Vercel, Netlify, and Cloudflare.
761
+ * Where and how the site deploys: a host adapter from `blume/deploy` —
762
+ * `vercel()`, `netlify()`, `cloudflare()`, `node()`, each taking `{ output,
763
+ * site, base }` plus the underlying `@astrojs/*` adapter's own options — for
764
+ * a server build on that host, or the plain `{ site, base }` form for a
765
+ * static build anywhere. `site` is detected from the platform env on Vercel,
766
+ * Netlify, and Cloudflare Pages when unset.
1091
767
  */
1092
- /** Astro server-output adapters, by hosting platform. */
1093
- type CloudDeploymentAdapter = "netlify" | "cloudflare";
1094
- type DeploymentAdapter = "vercel" | "node" | CloudDeploymentAdapter;
1095
-
1096
- export interface DeploymentConfig {
1097
- /** Astro adapter for server output. `null` (default) keeps a static build. */
1098
- adapter?: DeploymentAdapter | null;
1099
- /** Base path when the site is served from a subdirectory. */
1100
- base?: string;
1101
- /** Build output mode. Defaults to `static`. */
1102
- output?: "static" | "server";
1103
- /**
1104
- * Canonical site URL. Needed for absolute links, the sitemap, and OG images;
1105
- * auto-detected on supported platforms.
1106
- */
1107
- site?: string;
1108
- }
768
+ export type DeploymentConfig = DeploymentInput;
1109
769
 
1110
770
  /**
1111
771
  * One authorized remote image source, passed through to Astro's
@@ -1170,6 +830,96 @@ export type ContentSignalsConfig =
1170
830
  search?: boolean;
1171
831
  };
1172
832
 
833
+ /**
834
+ * The machine-readable surface agents consume: the JSON API, `llms.txt`, the
835
+ * MCP server, published skills, discovery manifests, and the robots.txt usage
836
+ * policy. The reader-facing model features (the assistant, Open in chat) live under
837
+ * `ai`.
838
+ */
839
+ export interface AgentsConfig {
840
+ /**
841
+ * Emit `agent-readability.json`: a manifest indexing the agent-facing surface
842
+ * (llms.txt, Markdown mirrors, MCP, feeds). Defaults to `true`.
843
+ */
844
+ agentReadability?: boolean;
845
+ /**
846
+ * The JSON docs API — the REST twin of the MCP tools. Serves the page index
847
+ * (`/api/docs/pages.json`), each page as JSON (`/api/docs/pages/{route}.json`),
848
+ * and the navigation tree (`/api/docs/navigation.json`) as prerendered
849
+ * files, plus full-text search (`/api/docs/search?q=`) on server output,
850
+ * all described by an OpenAPI document at `/openapi.json`. Errors are RFC
851
+ * 9457 problem details. Defaults to `true`; set `false` to publish none of it.
852
+ */
853
+ api?: boolean;
854
+ /**
855
+ * The AI Catalog / ARD manifest (`/.well-known/ai-catalog.json`, mirrored
856
+ * at `/.well-known/ard.json`): a domain-level index of the agent-facing
857
+ * resources the site publishes — MCP server, agent skills, the JSON docs
858
+ * API, API references, llms.txt — for agent registries. Needs a
859
+ * `deployment.site`. Defaults to `true`; the object form overrides the
860
+ * generated representative queries per entry.
861
+ */
862
+ catalog?: boolean | AiCatalogConfig;
863
+ /** robots.txt `Content-Signal` usage declaration. Defaults to `true`. */
864
+ contentSignals?: ContentSignalsConfig;
865
+ /**
866
+ * Emit `llms.txt` (an index of the docs for LLMs). Defaults to `true`.
867
+ * The object form adds knobs for what the files include.
868
+ */
869
+ llmsTxt?: boolean | LlmsTxtConfig;
870
+ /**
871
+ * Markdown serializers for custom components in agent-facing output (the
872
+ * `.md` mirror, `llms-full.txt`, MCP `get_page`), keyed by JSX name. Each
873
+ * receives the component's statically-evaluated `props` (with the page's
874
+ * `frontmatter` in scope, so `prop={frontmatter.status}` resolves), its
875
+ * downleveled `children`, and the page's `frontmatter` data, and returns
876
+ * replacement Markdown — or `null` to leave the JSX verbatim. A same-name
877
+ * entry replaces a built-in serializer.
878
+ *
879
+ * These live in `blume.config.ts` (which is executed at build time), not in
880
+ * `components.tsx` (which is only statically analyzed, never run).
881
+ *
882
+ * ```ts
883
+ * agents: {
884
+ * markdownComponents: {
885
+ * Chart: ({ props }) => `![${props.title}](/charts/${props.slug}.png)`,
886
+ * },
887
+ * }
888
+ * ```
889
+ */
890
+ markdownComponents?: Record<string, ComponentMarkdown>;
891
+ /** Expose the docs as an MCP server for agents. */
892
+ mcp?: McpConfig;
893
+ /**
894
+ * Publish Agent Skills for discovery: a directory (resolved against the
895
+ * project root) whose subdirectories each hold a `SKILL.md`. Skills are
896
+ * copied under `/.well-known/agent-skills/` — single-file skills verbatim,
897
+ * skills with supporting resources as `.tar.gz` archives — and enumerated
898
+ * in a discovery index with SHA-256 digests (Agent Skills Discovery RFC).
899
+ *
900
+ * ```ts
901
+ * agents: {
902
+ * skills: "./skills",
903
+ * }
904
+ * ```
905
+ */
906
+ skills?: string;
907
+ /**
908
+ * Web Bot Auth: publish the org's HTTP Message Signature public keys at
909
+ * `/.well-known/http-message-signatures-directory`, so sites receiving
910
+ * requests from your agents can verify them. Public keys only — a key
911
+ * containing private material (`d`, `p`, `q`, …) is rejected.
912
+ */
913
+ webBotAuth?: WebBotAuthConfig;
914
+ /**
915
+ * WebMCP: register in-page tools (search, page Markdown, the docs index)
916
+ * on the browser's model context, so agentic browsers can drive the docs
917
+ * without a separate MCP connection. The script is tiny and no-ops in
918
+ * browsers without the API. Defaults to `true`; set `false` to opt out.
919
+ */
920
+ webmcp?: boolean;
921
+ }
922
+
1173
923
  /** RSS/Atom feed generation. */
1174
924
  export interface RssConfig {
1175
925
  /** Generate feeds. Defaults to `true`. */
@@ -1318,13 +1068,6 @@ export interface SoftwareConfig {
1318
1068
 
1319
1069
  /** Discoverability: OG images, feeds, sitemap, robots, and structured data. */
1320
1070
  export interface SeoConfig {
1321
- /**
1322
- * Emit `agent-readability.json`: a manifest indexing the agent-facing surface
1323
- * (llms.txt, Markdown mirrors, MCP, feeds). Defaults to `true`.
1324
- */
1325
- agentReadability?: boolean;
1326
- /** robots.txt `Content-Signal` usage declaration. Defaults to `true`. */
1327
- contentSignals?: ContentSignalsConfig;
1328
1071
  /** Per-page Open Graph image generation. */
1329
1072
  og?: OgConfig;
1330
1073
  /**
@@ -1412,31 +1155,35 @@ export interface GithubConfig {
1412
1155
  // Markdown
1413
1156
  // ---------------------------------------------------------------------------
1414
1157
 
1415
- /** Code-block rendering options. */
1158
+ /** Code rendering options. */
1416
1159
  export interface CodeConfig {
1417
1160
  /** Show a brand language icon in the code-block header. Defaults to `true`. */
1418
1161
  icons?: boolean;
1162
+ /**
1163
+ * Syntax-highlighting themes for every code surface — fenced blocks, inline
1164
+ * `` `code`{:lang} ``, `<CodeBlock>`, and `<Diff>` — as bundled Shiki theme
1165
+ * names or inline custom Shiki themes per color mode.
1166
+ */
1167
+ theme?: {
1168
+ /** Dark-mode theme name or custom theme. Defaults to `github-dark`. */
1169
+ dark?: CodeTheme;
1170
+ /** Light-mode theme name or custom theme. Defaults to `github-light`. */
1171
+ light?: CodeTheme;
1172
+ };
1419
1173
  /** Wrap long lines instead of scrolling horizontally. Defaults to `false`. */
1420
1174
  wrap?: boolean;
1421
1175
  }
1422
1176
 
1423
1177
  /** Markdown / MDX rendering behavior. */
1424
1178
  export interface MarkdownConfig {
1425
- /** Code-block rendering: language icons, line wrap. */
1179
+ /** Code rendering: language icons, syntax themes, line wrap. */
1426
1180
  code?: CodeConfig;
1427
1181
  /**
1428
- * Syntax-highlighting themes for every code surface — fenced blocks, inline
1429
- * `` `code`{:lang} ``, `<CodeBlock>`, and `<Diff>`.
1182
+ * Open external links (`https://…`, `//host/…`) in a new tab, with an arrow
1183
+ * icon and a screen-reader hint, like Blume's header and sidebar links.
1184
+ * Defaults to `false`.
1430
1185
  */
1431
- codeBlocks?: {
1432
- /** Bundled Shiki theme names or inline custom Shiki themes per color mode. */
1433
- theme?: {
1434
- /** Dark-mode theme name or custom theme. Defaults to `github-dark`. */
1435
- dark?: CodeTheme;
1436
- /** Light-mode theme name or custom theme. Defaults to `github-light`. */
1437
- light?: CodeTheme;
1438
- };
1439
- };
1186
+ externalLinks?: boolean;
1440
1187
  /**
1441
1188
  * Wrap each `##`–`######` heading in a self-anchor link so readers can copy,
1442
1189
  * bookmark, or share a section permalink. Defaults to `true`.
@@ -1456,119 +1203,6 @@ export interface ReactConfig {
1456
1203
  compiler?: boolean;
1457
1204
  }
1458
1205
 
1459
- // ---------------------------------------------------------------------------
1460
- // OpenAPI / AsyncAPI
1461
- // ---------------------------------------------------------------------------
1462
-
1463
- /**
1464
- * The shared shape of both API-reference blocks (`openapi`, `asyncapi`). Only
1465
- * the per-block defaults differ; those are documented on the extending
1466
- * interfaces.
1467
- */
1468
- interface ReferenceConfig {
1469
- /** Turn the reference on. Defaults to `false`. */
1470
- enabled?: boolean;
1471
- /** Start nested schema rows expanded (Blume renderer). Defaults to `false`. */
1472
- expandSchemas?: boolean;
1473
- /**
1474
- * The interactive "Try it" panel on operation pages (Blume renderer). On by
1475
- * default; `false` hides it. `proxy` is the CORS escape hatch the OpenAPI
1476
- * Send button routes requests through: a proxy URL, or `true` for the
1477
- * built-in `/_api-proxy` endpoint (which requires
1478
- * `deployment.output: "server"`). `proxy` is OpenAPI-only — an event
1479
- * composer's WebSocket connect is direct.
1480
- */
1481
- playground?: boolean | { enabled?: boolean; proxy?: boolean | string };
1482
- /** Who renders the reference. Defaults to `blume`. */
1483
- renderer?: "blume" | "scalar";
1484
- /**
1485
- * Extra Scalar options forwarded verbatim to the embedded `<ScalarComponent>`
1486
- * (Scalar renderer only) — e.g. `localization`, `agent`,
1487
- * `hideTestRequestButton`, `orderSchemaPropertiesBy`. These win over Blume's
1488
- * derived spec/theme config, so it's a full escape hatch to Scalar's API.
1489
- */
1490
- // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type -- mirrors the schema's `z.record(z.unknown())` (the drift guard requires it); the values are Scalar's own API surface, deliberately unmodeled.
1491
- scalar?: Record<string, unknown>;
1492
- /** One or more specs; each renders on its own route by default. */
1493
- sources?: OpenApiSource[];
1494
- /** Shorthand for a single source: `sources: [{ spec }]`. */
1495
- spec?: string;
1496
- /** Scalar theme name (Scalar renderer only). */
1497
- theme?: string;
1498
- }
1499
-
1500
- /**
1501
- * OpenAPI reference. By default (`renderer: "blume"`) Blume renders its own UI:
1502
- * one real page per operation, grouped by tag in the sidebar and included in
1503
- * search, llms.txt, and OG. Set `renderer: "scalar"` for the embedded Scalar
1504
- * SPA (a single self-contained route).
1505
- */
1506
- export interface OpenApiConfig extends ReferenceConfig {
1507
- /**
1508
- * Code-sample languages shown per operation (Blume renderer). Defaults to
1509
- * `["curl", "js", "python"]`.
1510
- */
1511
- codeSamples?: string[];
1512
- /** Where the reference mounts. Defaults to `/reference`. */
1513
- route?: string;
1514
- }
1515
-
1516
- /**
1517
- * AsyncAPI reference. Same shape as {@link OpenApiConfig}: by default
1518
- * (`renderer: "blume"`) Blume normalizes the spec to AsyncAPI 3.x and renders
1519
- * its own UI — one real page per operation, grouped by tag (or channel) in the
1520
- * sidebar and included in search, llms.txt, and OG. Set `renderer: "scalar"`
1521
- * for the embedded Scalar SPA (a single self-contained route).
1522
- */
1523
- export interface AsyncApiConfig extends ReferenceConfig {
1524
- /**
1525
- * Code-sample tools shown per operation (Blume renderer). Defaults to every
1526
- * tool appropriate to the operation's protocol binding.
1527
- */
1528
- codeSamples?: string[];
1529
- /** Where the reference mounts. Defaults to `/events`. */
1530
- route?: string;
1531
- }
1532
-
1533
- /**
1534
- * GraphQL reference. Blume lowers the schema — SDL text or an introspection
1535
- * JSON result, local or remote — into one real page per root field (grouped
1536
- * as Queries/Mutations/Subscriptions) plus one page per named type (Objects,
1537
- * Input Objects, Enums, Interfaces, Unions, Scalars), all in the sidebar,
1538
- * search, llms.txt, and OG. Always Blume-rendered — the embedded Scalar SPA
1539
- * reads OpenAPI documents only — so unlike the other reference blocks there
1540
- * is no `renderer` opt-out.
1541
- */
1542
- export interface GraphqlConfig {
1543
- /**
1544
- * Code-sample languages shown per operation. Defaults to
1545
- * `["curl", "js", "python"]`.
1546
- */
1547
- codeSamples?: string[];
1548
- /** Turn the reference on. Defaults to `false`. */
1549
- enabled?: boolean;
1550
- /**
1551
- * URL of the live GraphQL endpoint the playground and code samples target —
1552
- * a schema, unlike an OpenAPI document, names no server. Applies to every
1553
- * source in the block; a per-source `endpoint` wins.
1554
- */
1555
- endpoint?: string;
1556
- /**
1557
- * The interactive "Try it" panel on operation pages. On by default; `false`
1558
- * hides it. The object form keeps it on and sets `proxy`, the CORS escape
1559
- * hatch the Send button routes requests through: a proxy URL, or `true` for
1560
- * the built-in `/_api-proxy` endpoint (which requires
1561
- * `deployment.output: "server"`).
1562
- */
1563
- playground?: boolean | { enabled?: boolean; proxy?: boolean | string };
1564
- /** Where the reference mounts. Defaults to `/graphql`. */
1565
- route?: string;
1566
- /** One or more schemas; each renders on its own route by default. */
1567
- sources?: GraphqlSource[];
1568
- /** Shorthand for a single source: `sources: [{ spec }]`. */
1569
- spec?: string;
1570
- }
1571
-
1572
1206
  // ---------------------------------------------------------------------------
1573
1207
  // Misc top-level unions
1574
1208
  // ---------------------------------------------------------------------------
@@ -1639,16 +1273,11 @@ export interface FrontmatterConfig {
1639
1273
  }
1640
1274
 
1641
1275
  /**
1642
- * "Last updated" timestamps. `false` (default) disables them; `true` derives
1643
- * each date from git history; the object form selects the source. A page's
1644
- * `lastModified` frontmatter always wins.
1276
+ * "Last updated" timestamps. `false` (default) disables them; `"git"` derives
1277
+ * each date from the repository history; `"frontmatter"` reads only the page's
1278
+ * own field. A page's `lastModified` frontmatter always wins.
1645
1279
  */
1646
- export type LastModifiedConfig =
1647
- | boolean
1648
- | {
1649
- /** Where the date comes from. Defaults to `git`. */
1650
- type?: "git" | "frontmatter";
1651
- };
1280
+ export type LastModifiedConfig = false | "git" | "frontmatter";
1652
1281
 
1653
1282
  /**
1654
1283
  * Date presentation for the "last updated" stamp and the changelog timeline —
@@ -1700,12 +1329,16 @@ export type TocConfig =
1700
1329
  * Markdown/MDX under `docs/` with sensible defaults.
1701
1330
  */
1702
1331
  export interface BlumeConfig {
1703
- /** AI-facing features: the Ask AI assistant and an `llms.txt` manifest. */
1332
+ /** The machine-readable surface for agents: JSON API, `llms.txt`, MCP, skills, discovery. */
1333
+ agents?: AgentsConfig;
1334
+ /** Model-facing features: the assistant and the "Open in chat" action. */
1704
1335
  ai?: AiConfig;
1705
- /** Analytics providers (PostHog, Vercel, or arbitrary scripts). */
1706
- analytics?: AnalyticsConfig;
1707
- /** AsyncAPI reference (native renderer by default, Scalar opt-out). */
1708
- asyncapi?: AsyncApiConfig;
1336
+ /**
1337
+ * Analytics adapters from `blume/analytics`, emitted into `<head>` of every
1338
+ * production page in this order: `[posthog({ key }), vercel(),
1339
+ * cloudflare({ token }), script({ src })]`. Unset or empty injects nothing.
1340
+ */
1341
+ analytics?: AnalyticsAdapter[];
1709
1342
  /** Site-wide announcement banner shown above the header. */
1710
1343
  banner?: BannerConfig;
1711
1344
  /**
@@ -1747,15 +1380,13 @@ export interface BlumeConfig {
1747
1380
  frontmatter?: FrontmatterConfig;
1748
1381
  /** Source repository (Edit-this-page links and the header repo link). */
1749
1382
  github?: GithubConfig;
1750
- /** Native GraphQL reference (root fields and named types as real pages). */
1751
- graphql?: GraphqlConfig;
1752
1383
  /** Internationalization (opt-in multi-locale). */
1753
1384
  i18n?: I18nConfig;
1754
1385
  /** Image optimization: remote-host authorization for the image service. */
1755
1386
  image?: ImageConfig;
1756
1387
  /** Astro integrations appended after Blume's built-ins, in declaration order. */
1757
1388
  integrations?: AstroIntegration[];
1758
- /** "Last updated" timestamps from git history or frontmatter. Defaults to `false`. */
1389
+ /** "Last updated" timestamps: `"git"`, `"frontmatter"`, or `false` (default). */
1759
1390
  lastModified?: LastModifiedConfig;
1760
1391
  /** Site logo / brand mark. */
1761
1392
  logo?: LogoConfig;
@@ -1763,12 +1394,16 @@ export interface BlumeConfig {
1763
1394
  markdown?: MarkdownConfig;
1764
1395
  /** Header, sidebar, tabs, and switchers. */
1765
1396
  navigation?: NavigationConfig;
1766
- /** Native OpenAPI reference. */
1767
- openapi?: OpenApiConfig;
1768
1397
  /** React island behavior (compiler auto-memoization). */
1769
1398
  react?: ReactConfig;
1770
1399
  /** URL redirect rules. */
1771
1400
  redirects?: RedirectConfig[];
1401
+ /**
1402
+ * API references: adapters from `blume/reference`, each rendering one or
1403
+ * more specs — `[openapi({ spec }), asyncapi({ spec }), graphql({ spec,
1404
+ * endpoint })]`. Unset or empty renders none.
1405
+ */
1406
+ reference?: ReferenceAdapter[];
1772
1407
  /** Search backend and credentials. */
1773
1408
  search?: SearchConfig;
1774
1409
  /** Discoverability: OG images, feeds, sitemap, robots, structured data. */
@@ -1817,10 +1452,10 @@ type _NoExtraOrMissingKeys = AssertExtends<
1817
1452
  // endpoint and silently ignored at request time). `Required` makes a rename in
1818
1453
  // either copy a missing property, which stops compiling.
1819
1454
  type _AskRetrievalMatchesRuntime = AssertExtends<
1820
- Required<AskRetrievalConfig>,
1455
+ Required<AssistantRetrievalConfig>,
1821
1456
  Required<AskRetrievalOptions>
1822
1457
  >;
1823
1458
  type _AskRuntimeMatchesRetrieval = AssertExtends<
1824
1459
  Required<AskRetrievalOptions>,
1825
- Required<AskRetrievalConfig>
1460
+ Required<AssistantRetrievalConfig>
1826
1461
  >;