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
@@ -1,9 +1,14 @@
1
1
  import type { AstroIntegration } from "astro";
2
+ import type { AssistantAdapter } from "../ai/ask.ts";
2
3
  import type { ComponentMarkdown } from "../ai/component-markdown.ts";
4
+ import type { AnalyticsAdapter } from "../analytics/schema.ts";
5
+ import type { DeploymentInput } from "../deploy/adapters/registry.ts";
3
6
  import type { CodeTheme } from "../markdown/themes.ts";
7
+ import type { ReferenceAdapter } from "../reference/schema.ts";
8
+ import type { AnySearchAdapter } from "../search/adapters/registry.ts";
9
+ import type { SourceAdapterInput } from "../sources/registry.ts";
4
10
  import type { FontSlug } from "../theme/fonts.ts";
5
- import type { GraphqlSource, OpenApiSource, OpenInChatProvider, SearchProvider, SidebarDisplay, SidebarItemConfig } from "./schema.ts";
6
- import type { ContentSource } from "./sources/types.ts";
11
+ import type { OpenInChatProvider, SidebarDisplay, SidebarItemConfig } from "./schema.ts";
7
12
  import type { StandardSchema } from "./standard-schema.ts";
8
13
  /**
9
14
  * The public, hand-documented authoring type for `blume.config.ts`.
@@ -76,172 +81,34 @@ export type BannerConfig = string | {
76
81
  text: string;
77
82
  };
78
83
  };
79
- /** Local Markdown/MDX read from the filesystem. */
80
- export interface FilesystemSource {
81
- type: "filesystem";
82
- /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. */
83
- exclude?: string[];
84
- /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. */
85
- include?: string[];
86
- /** Namespaces this source's routes under `/<prefix>/`. */
87
- prefix?: string;
88
- /** Directory to read from, relative to the project root. Defaults to `docs`. */
89
- root?: string;
90
- }
91
84
  /**
92
- * Remote Markdown/MDX fetched over HTTP. Enumerate files explicitly against a
93
- * raw `url` base, or from a GitHub repo subtree via `github`. A private repo's
94
- * token comes from `GITHUB_TOKEN` — never inline it here.
95
- */
96
- export interface MdxRemoteSource {
97
- type: "mdx-remote";
98
- /** Explicit list of source-relative file paths to fetch from `url`. */
99
- files?: string[];
100
- /** Enumerate a GitHub repo subtree via the git-trees API. */
101
- github?: {
102
- /** Repository owner (user or org). */
103
- owner: string;
104
- /** Subpath within the repo. Defaults to the repo root. */
105
- path?: string;
106
- /** Git ref (branch, tag, or SHA). Defaults to `main`. */
107
- ref?: string;
108
- /** Repository name. */
109
- repo: string;
110
- };
111
- /** Glob patterns applied to enumerated refs. Defaults to `["**\/*.{md,mdx}"]`. */
112
- include?: string[];
113
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
114
- pollInterval?: number;
115
- /** Namespaces this source's routes under `/<prefix>/`. */
116
- prefix?: string;
117
- /** Raw base URL, e.g. `https://raw.githubusercontent.com/acme/sdk/main/docs`. */
118
- url?: string;
119
- }
120
- /**
121
- * A repo's GitHub Releases, materialized as `type: changelog` entries — release
122
- * notes become the changelog with no files to maintain. A private repo reads a
123
- * token from `GITHUB_TOKEN`; never inline it here.
124
- */
125
- export interface GithubReleasesSource {
126
- type: "github-releases";
127
- /** Include draft releases (needs a token with repo write access). */
128
- drafts?: boolean;
129
- /** Cap the number of releases materialized, newest-first. Defaults to 100. */
130
- limit?: number;
131
- /** Repository owner (user or org). */
132
- owner: string;
133
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
134
- pollInterval?: number;
135
- /** Namespaces this source's routes under `/<prefix>/`; e.g. `changelog`. */
136
- prefix?: string;
137
- /** Include prereleases. */
138
- prereleases?: boolean;
139
- /** Repository name. */
140
- repo: string;
141
- }
142
- /** A Sanity dataset queried with GROQ; Portable Text bodies become Markdown. */
143
- export interface SanitySource {
144
- type: "sanity";
145
- /** Sanity API version (a date). Defaults to `2024-01-01`. */
146
- apiVersion?: string;
147
- /** Dataset name to query. */
148
- dataset: string;
149
- /** Field paths mapping a document onto Blume meta + body. */
150
- fields?: {
151
- /** Field holding the renderable body (Portable Text or Markdown). */
152
- body?: string;
153
- /** Field holding the page description. */
154
- description?: string;
155
- /** Field holding the last-modified date. */
156
- lastModified?: string;
157
- /** Field holding the page slug. */
158
- slug?: string;
159
- /** Field holding the page title. */
160
- title?: string;
161
- };
162
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
163
- pollInterval?: number;
164
- /** Namespaces this source's routes under `/<prefix>/`. */
165
- prefix?: string;
166
- /** Sanity project id. */
167
- projectId: string;
168
- /** GROQ query selecting the documents to import. */
169
- query: string;
170
- }
171
- /** A Notion database; pages become entries, blocks become MDX. */
172
- export interface NotionSource {
173
- type: "notion";
174
- /** Max concurrent Notion API requests; default 3 (Notion's per-integration pace). */
175
- concurrency?: number;
176
- /** Notion database id. */
177
- database: string;
178
- /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
179
- pollInterval?: number;
180
- /** Namespaces this source's routes under `/<prefix>/`. */
181
- prefix?: string;
182
- /** Notion property names mapped onto Blume meta. */
183
- properties?: {
184
- /** Property holding the page description. */
185
- description?: string;
186
- /** Property holding the sort order. */
187
- order?: string;
188
- /** Property holding the page slug. */
189
- slug?: string;
190
- /** Property holding the publish status. */
191
- status?: string;
192
- /** Property holding the page title. */
193
- title?: string;
194
- };
195
- /** Status value treated as published; others map to `draft`. Defaults to `Published`. */
196
- publishedValue?: string;
197
- }
198
- /**
199
- * An Obsidian vault, read in place. Wikilinks become route links and
200
- * `%%comments%%` are stripped at load time, so the vault stays the source of
201
- * truth — no export step and no generated notes in the repo.
202
- */
203
- export interface ObsidianSource {
204
- type: "obsidian";
205
- /** Vault folder names to skip at any depth, in addition to dot-folders. */
206
- exclude?: string[];
207
- /** Namespaces this source's routes under `/<prefix>/`; e.g. `vault`. */
208
- prefix?: string;
209
- /** Vault directory, absolute or relative to the project root. */
210
- vault: string;
211
- }
212
- /**
213
- * A user-provided {@link ContentSource} instance, passed straight through. This
214
- * is the extension point for adapters with custom serializers or any other
215
- * backend, without their SDKs touching core.
216
- */
217
- export interface CustomSource {
218
- type: "custom";
219
- /** A `ContentSource` implementation (an object with `name` + `load`). */
220
- source: ContentSource;
221
- }
222
- /** A single configured content source, discriminated by `type`. */
223
- export type ContentSourceInput = FilesystemSource | MdxRemoteSource | GithubReleasesSource | SanitySource | NotionSource | ObsidianSource | CustomSource;
224
- /**
225
- * Where content lives and how it's discovered. When `sources` is omitted, the
226
- * top-level `root`/`include`/`exclude` desugar to one implicit filesystem
227
- * source, so simple sites need nothing here.
85
+ * Where content lives and how it's discovered. `root`/`include`/`exclude` are
86
+ * zero-config shorthand for a single `filesystem()` source; set `sources` to
87
+ * compose adapters instead, and move those fields into its `filesystem()`
88
+ * entry — the two forms can't be combined.
228
89
  */
229
90
  export interface ContentConfig {
230
91
  /** Default page `type` for content that sets none. Defaults to `doc`. */
231
92
  defaultType?: string;
232
- /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. */
93
+ /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. Shorthand; not allowed beside `sources`. */
233
94
  exclude?: string[];
234
- /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. */
95
+ /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. Shorthand; not allowed beside `sources`. */
235
96
  include?: string[];
236
97
  /** Directory of standalone `pages` (outside the docs tree). Defaults to `pages`. */
237
98
  pages?: string;
238
- /** Content root directory, relative to the project root. Defaults to `docs`. */
99
+ /** Content root directory, relative to the project root. Defaults to `docs`. Shorthand; not allowed beside `sources`. */
239
100
  root?: string;
240
101
  /**
241
- * Pluggable content sources. Mix local files with remote MDX, GitHub
242
- * Releases, Sanity, Notion, or a custom `ContentSource`.
102
+ * Content source adapters from `blume/sources`, read in order:
103
+ * `filesystem({ root })`, `mdxRemote({ github })`, `githubReleases({ owner,
104
+ * repo })`, `sanity({ projectId, dataset, query })`, `notion({ database })`,
105
+ * `contentful({ space, contentType })`, `payload({ url, collection })`,
106
+ * `strapi({ url, contentType })`, `obsidian({ vault })`, or `custom(source)`
107
+ * for any `ContentSource`
108
+ * implementation. When set it replaces the implicit filesystem source, so
109
+ * list a `filesystem()` entry for local docs.
243
110
  */
244
- sources?: ContentSourceInput[];
111
+ sources?: SourceAdapterInput[];
245
112
  /**
246
113
  * Per-type content definitions, keyed by the frontmatter `type` they apply
247
114
  * to (including `defaultType`, for pages that set none):
@@ -484,7 +351,7 @@ type RadiusScaleRound = "md" | "lg";
484
351
  type RadiusScale = RadiusScaleTight | RadiusScaleRound;
485
352
  export interface ThemeConfig {
486
353
  /**
487
- * Accent color. A palette name (`blue`, `violet`, `green`, …) or any CSS
354
+ * Accent color. A palette name (`blue`, `purple`, `green`, …) or any CSS
488
355
  * color applies to both modes; the object form sets each mode. Defaults to
489
356
  * `blue`.
490
357
  */
@@ -500,38 +367,11 @@ export interface ThemeConfig {
500
367
  backgroundImage?: PerModeValue;
501
368
  /** Font selection for body, display, and mono roles. */
502
369
  fonts?: FontsConfig;
503
- /** Overall page layout. Currently only `sidebar`. */
504
- layout?: "sidebar";
505
370
  /** Initial color mode. Defaults to `system`. */
506
371
  mode?: "system" | "light" | "dark";
507
372
  /** Corner radius scale. Defaults to `md`. */
508
373
  radius?: RadiusScale;
509
374
  }
510
- /** Public credentials for the Algolia backend (the sync key stays an env var). */
511
- export interface AlgoliaSearch {
512
- appId: string;
513
- indexName: string;
514
- searchApiKey: string;
515
- }
516
- /** Public credentials for the Orama Cloud backend. */
517
- export interface OramaCloudSearch {
518
- apiKey: string;
519
- endpoint: string;
520
- /** Index id used by the build-time sync (with `ORAMA_PRIVATE_API_KEY`). */
521
- indexId?: string;
522
- }
523
- /** Connection details for a self-hosted or cloud Typesense backend. */
524
- export interface TypesenseSearch {
525
- collection: string;
526
- host: string;
527
- port?: number;
528
- protocol?: "http" | "https";
529
- searchApiKey: string;
530
- }
531
- /** Mixedbread semantic search: the store the server endpoint queries. */
532
- export interface MixedbreadSearch {
533
- storeId: string;
534
- }
535
375
  /** A curated link for the search dialog empty state. */
536
376
  export interface SearchPopularLink {
537
377
  /** Internal route or external URL. */
@@ -545,13 +385,16 @@ export interface SearchPopularLink {
545
385
  label: string;
546
386
  }
547
387
  /**
548
- * Search backend. The default `orama` builds a local index at build time (and
549
- * runs in dev); hosted providers need their credential block below. `none`
550
- * disables search.
388
+ * The search backend: an adapter from `blume/search` — `orama()` (the
389
+ * default), `flexsearch()`, `pagefind()`, `algolia({…})`, `oramaCloud({…})`,
390
+ * `typesense({…})`, `mixedbread({…})` — or `false` to disable search. Each
391
+ * adapter is a plain descriptor carrying its own options, runtime dependency,
392
+ * and required secrets; hosted adapters take public credentials only and read
393
+ * their admin keys from the environment.
551
394
  */
552
- export interface SearchConfig {
553
- /** Algolia credentials (required when `provider` is `algolia`). */
554
- algolia?: AlgoliaSearch;
395
+ export type SearchProviderConfig = AnySearchAdapter | false;
396
+ /** The object form of `search`: the adapter plus adapter-independent settings. */
397
+ export interface SearchOptions {
555
398
  /** Indexing behavior. */
556
399
  indexing?: {
557
400
  /**
@@ -563,35 +406,29 @@ export interface SearchConfig {
563
406
  /** Include pages marked `hidden` in the search index. Defaults to `false`. */
564
407
  includeHiddenPages?: boolean;
565
408
  };
566
- /** Mixedbread store (required when `provider` is `mixedbread`). */
567
- mixedbread?: MixedbreadSearch;
568
- /** Orama Cloud credentials (required when `provider` is `orama-cloud`). */
569
- oramaCloud?: OramaCloudSearch;
570
409
  /**
571
410
  * Curated links for the Cmd+K empty state. When omitted or empty, the first
572
411
  * sidebar pages are shown instead.
573
412
  */
574
413
  popular?: SearchPopularLink[];
575
- /** Which backend powers search. Defaults to `orama`. */
576
- provider?: SearchProvider;
577
- /** Typesense credentials (required when `provider` is `typesense`). */
578
- typesense?: TypesenseSearch;
414
+ /** Which adapter powers search. Defaults to `orama()`. */
415
+ provider?: SearchProviderConfig;
579
416
  }
580
- /** An empty-state prompt shown before the first Ask AI question. */
581
- export interface AskSuggestion {
417
+ /**
418
+ * Search configuration. Pass an adapter directly (`search: algolia({…})`, or
419
+ * `false`) as shorthand for the object form, which also carries `popular`
420
+ * links and `indexing` settings.
421
+ */
422
+ export type SearchConfig = SearchProviderConfig | SearchOptions;
423
+ /** An empty-state prompt shown before the first question to the assistant. */
424
+ export interface AssistantSuggestion {
582
425
  /** Lucide icon name shown beside the suggestion. */
583
426
  icon?: string;
584
427
  /** The clickable suggestion text. */
585
428
  label: string;
586
429
  }
587
- /** The Ask AI chat assistant. */
588
- /** Backends that can route an Ask AI request. */
589
- type AskProviderGateway = "gateway" | "openrouter" | "llmgateway";
590
- type AskProvider = AskProviderGateway | "inkeep" | "openai-compatible";
591
- /** How much the model reasons before answering (`ai.ask.reasoning`). */
592
- type AskReasoning = "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
593
- /** How much retrieved documentation each Ask AI question carries. */
594
- export interface AskRetrievalConfig {
430
+ /** How much retrieved documentation each question to the assistant carries. */
431
+ export interface AssistantRetrievalConfig {
595
432
  /**
596
433
  * Total injected documentation characters, across all excerpts. Defaults to
597
434
  * `10000`. The single biggest lever on time-to-first-token — the model reads
@@ -611,17 +448,8 @@ export interface AskRetrievalConfig {
611
448
  */
612
449
  maxResults?: number;
613
450
  }
614
- export interface AskConfig {
615
- /**
616
- * Name of the env var holding the provider API key. Each provider has a
617
- * sensible default; set this only to override it.
618
- */
619
- apiKeyEnv?: string;
620
- /**
621
- * Backend base URL. Required for `openai-compatible`; for named providers it
622
- * overrides the built-in preset.
623
- */
624
- baseUrl?: string;
451
+ /** The chat assistant. */
452
+ export interface AssistantConfig {
625
453
  /**
626
454
  * Origins allowed to call the generated endpoint from another site — a
627
455
  * marketing page that embeds an ask box, for example — or `"*"` to allow
@@ -634,51 +462,38 @@ export interface AskConfig {
634
462
  * combined with it.
635
463
  */
636
464
  cors?: string[];
637
- /** Turn Ask AI on. Defaults to `false`. */
465
+ /** Turn the assistant on. Defaults to `false`. */
638
466
  enabled?: boolean;
639
467
  /**
640
- * Existing Ask AI endpoint to call instead of generating one. This keeps a
468
+ * Existing assistant endpoint to call instead of generating one. This keeps a
641
469
  * Blume site static while an API backend owns retrieval, model access, rate
642
470
  * limiting, and streaming. Accepts an absolute URL or root-relative path.
643
471
  */
644
472
  endpoint?: string;
645
- /**
646
- * Static request headers sent to the provider on every call — a
647
- * caller-identifying header for a shared backend, for example. Values are
648
- * written into the generated route as literals, so keep secrets in
649
- * `apiKeyEnv` rather than here.
650
- */
651
- headers?: Record<string, string>;
652
473
  /**
653
474
  * Extra system-prompt text appended to the built-in instructions — use it
654
475
  * for identity, language, or tone. The built-in grounding behavior (answer
655
476
  * from the retrieved excerpts, cite pages as Markdown links) is preserved.
656
477
  */
657
478
  instructions?: string;
658
- /** Model id to use. Defaults to `openai/gpt-5.5`. */
659
- model?: string;
660
- /** Which backend routes the request. Defaults to `gateway`. */
661
- provider?: AskProvider;
662
479
  /**
663
- * How much the model reasons before answering, from `"none"` to `"xhigh"`.
664
- * Sent as the backend's own reasoning-effort control: the AI SDK's
665
- * `reasoning` option on the gateway, `reasoning.effort` on OpenRouter, and
666
- * `reasoning_effort` on OpenAI-compatible endpoints. The model has to
667
- * support the level — OpenAI rejects one a model doesn't offer — and the
668
- * endpoint has to accept the parameter; Inkeep has no reasoning control,
669
- * so the field is rejected there. Omitted keeps the model's default.
670
- * `"none"` is the fastest and cheapest for grounded docs Q&A, where the
671
- * retrieved excerpts carry the answer.
480
+ * Which backend answers: the descriptor an adapter factory returns —
481
+ * `gateway({ model })`, `openrouter({ model, reasoning })`,
482
+ * `llmgateway({ model })`, `inkeep({ model })`, or
483
+ * `openaiCompatible({ baseUrl, name, model, apiKeyEnv })`, all exported
484
+ * from `blume/ai`. Each adapter owns its model, key env var, reasoning
485
+ * mapping, and `providerOptions` passthrough. Defaults to
486
+ * `gateway({ model: "openai/gpt-5.5" })`.
672
487
  */
673
- reasoning?: AskReasoning;
488
+ provider?: AssistantAdapter;
674
489
  /**
675
490
  * How much documentation each question carries into the model's prompt.
676
491
  * Lower values cut time-to-first-token — which dominates on a self-hosted
677
492
  * backend — at the cost of recall. Defaults keep the built-in behavior.
678
493
  */
679
- retrieval?: AskRetrievalConfig;
494
+ retrieval?: AssistantRetrievalConfig;
680
495
  /** Starter prompts shown before the first question. */
681
- suggestions?: AskSuggestion[];
496
+ suggestions?: AssistantSuggestion[];
682
497
  }
683
498
  /** What the AI Catalog (ARD) manifest carries. */
684
499
  export interface AiCatalogConfig {
@@ -693,7 +508,7 @@ export interface AiCatalogConfig {
693
508
  * registries embed for semantic search.
694
509
  *
695
510
  * ```ts
696
- * ai: {
511
+ * agents: {
697
512
  * catalog: {
698
513
  * queries: {
699
514
  * "mcp:acme": ["how do I install Acme", "search the Acme docs"],
@@ -714,7 +529,7 @@ export interface LlmsTxtConfig {
714
529
  * dropped.
715
530
  *
716
531
  * ```ts
717
- * ai: {
532
+ * agents: {
718
533
  * llmsTxt: {
719
534
  * details: "## When to use Acme\n\nUse Acme when…",
720
535
  * },
@@ -742,59 +557,10 @@ export interface McpConfig {
742
557
  /** Route the server mounts at. Defaults to `/mcp`. */
743
558
  route?: string;
744
559
  }
745
- /**
746
- * AI-facing features: the Ask AI assistant, an `llms.txt` manifest, and the
747
- * hosted MCP server.
748
- */
560
+ /** Model-facing features: the assistant and the "Open in chat" action. */
749
561
  export interface AiConfig {
750
- /**
751
- * The JSON docs API — the REST twin of the MCP tools. Serves the page index
752
- * (`/api/docs/pages.json`), each page as JSON (`/api/docs/pages/{route}.json`),
753
- * and the navigation tree (`/api/docs/navigation.json`) as prerendered
754
- * files, plus full-text search (`/api/docs/search?q=`) on server output,
755
- * all described by an OpenAPI document at `/openapi.json`. Errors are RFC
756
- * 9457 problem details. Defaults to `true`; set `false` to publish none of it.
757
- */
758
- api?: boolean;
759
- /** The Ask AI chat assistant. */
760
- ask?: AskConfig;
761
- /**
762
- * The AI Catalog / ARD manifest (`/.well-known/ai-catalog.json`, mirrored
763
- * at `/.well-known/ard.json`): a domain-level index of the agent-facing
764
- * resources the site publishes — MCP server, agent skills, the JSON docs
765
- * API, API references, llms.txt — for agent registries. Needs a
766
- * `deployment.site`. Defaults to `true`; the object form overrides the
767
- * generated representative queries per entry.
768
- */
769
- catalog?: boolean | AiCatalogConfig;
770
- /**
771
- * Emit `llms.txt` (an index of the docs for LLMs). Defaults to `true`.
772
- * The object form adds knobs for what the files include.
773
- */
774
- llmsTxt?: boolean | LlmsTxtConfig;
775
- /**
776
- * Markdown serializers for custom components in agent-facing output (the
777
- * `.md` mirror, `llms-full.txt`, MCP `get_page`), keyed by JSX name. Each
778
- * receives the component's statically-evaluated `props` (with the page's
779
- * `frontmatter` in scope, so `prop={frontmatter.status}` resolves), its
780
- * downleveled `children`, and the page's `frontmatter` data, and returns
781
- * replacement Markdown — or `null` to leave the JSX verbatim. A same-name
782
- * entry replaces a built-in serializer.
783
- *
784
- * These live in `blume.config.ts` (which is executed at build time), not in
785
- * `components.tsx` (which is only statically analyzed, never run).
786
- *
787
- * ```ts
788
- * ai: {
789
- * markdownComponents: {
790
- * Chart: ({ props }) => `![${props.title}](/charts/${props.slug}.png)`,
791
- * },
792
- * }
793
- * ```
794
- */
795
- markdownComponents?: Record<string, ComponentMarkdown>;
796
- /** Expose the docs as an MCP server for agents. */
797
- mcp?: McpConfig;
562
+ /** The chat assistant. */
563
+ assistant?: AssistantConfig;
798
564
  /**
799
565
  * The "Open in chat" page action, which opens the current page in an AI
800
566
  * assistant pre-filled with a prompt pointing at its raw Markdown.
@@ -808,75 +574,12 @@ export interface AiConfig {
808
574
  * ```
809
575
  */
810
576
  openInChat?: boolean | OpenInChatProvider[];
811
- /**
812
- * Publish Agent Skills for discovery: a directory (resolved against the
813
- * project root) whose subdirectories each hold a `SKILL.md`. Skills are
814
- * copied under `/.well-known/agent-skills/` — single-file skills verbatim,
815
- * skills with supporting resources as `.tar.gz` archives — and enumerated
816
- * in a discovery index with SHA-256 digests (Agent Skills Discovery RFC).
817
- *
818
- * ```ts
819
- * ai: {
820
- * skills: "./skills",
821
- * }
822
- * ```
823
- */
824
- skills?: string;
825
- /**
826
- * Web Bot Auth: publish the org's HTTP Message Signature public keys at
827
- * `/.well-known/http-message-signatures-directory`, so sites receiving
828
- * requests from your agents can verify them. Public keys only — a key
829
- * containing private material (`d`, `p`, `q`, …) is rejected.
830
- */
831
- webBotAuth?: WebBotAuthConfig;
832
- /**
833
- * WebMCP: register in-page tools (search, page Markdown, the docs index)
834
- * on the browser's model context, so agentic browsers can drive the docs
835
- * without a separate MCP connection. The script is tiny and no-ops in
836
- * browsers without the API. Defaults to `true`; set `false` to opt out.
837
- */
838
- webmcp?: boolean;
839
577
  }
840
578
  /** Web Bot Auth signature directory. Off until at least one key is listed. */
841
579
  export interface WebBotAuthConfig {
842
580
  /** Public JWKs to publish (e.g. an Ed25519 key: `kty: "OKP"`, `crv: "Ed25519"`, `x: …`). */
843
581
  keys?: Record<string, unknown>[];
844
582
  }
845
- /** An arbitrary analytics `<script>`; set exactly one of `src` or `content`. */
846
- export interface AnalyticsScript {
847
- /** Extra attributes spread onto the `<script>` (e.g. `data-domain`, `id`). */
848
- attributes?: Record<string, string>;
849
- /** Inline script body. Mutually exclusive with `src`. */
850
- content?: string;
851
- /** External script URL. Mutually exclusive with `content`. */
852
- src?: string;
853
- /** Load strategy for an external script. */
854
- strategy?: "async" | "defer";
855
- }
856
- /** Analytics providers. Configure one, several, or none. */
857
- export interface AnalyticsConfig {
858
- /**
859
- * Cloudflare Web Analytics, for a site Cloudflare doesn't proxy (manual
860
- * setup). Not needed on a proxied zone with automatic RUM enabled — that
861
- * injects the beacon at the edge, and configuring it here too would count
862
- * every pageview twice.
863
- */
864
- cloudflare?: {
865
- /** Site token from the Web Analytics JS snippet (`data-cf-beacon`). */
866
- token: string;
867
- };
868
- /** PostHog product analytics. */
869
- posthog?: {
870
- /** API host (for self-hosted / EU). Defaults to PostHog cloud. */
871
- host?: string;
872
- /** Project API key. */
873
- key: string;
874
- };
875
- /** Escape hatch for any other provider (Plausible, Fathom, GA, Umami, …). */
876
- scripts?: AnalyticsScript[];
877
- /** Enable Vercel Web Analytics. */
878
- vercel?: boolean;
879
- }
880
583
  /** A configured locale plus display metadata for the switcher. */
881
584
  export interface LocaleConfigInput {
882
585
  /** Locale code, e.g. `en`, `fr`, `pt-BR`. */
@@ -962,25 +665,14 @@ export interface VersionsConfig {
962
665
  };
963
666
  }
964
667
  /**
965
- * Where and how the site deploys. `site` (and `adapter`) are auto-detected from
966
- * the platform env on Vercel, Netlify, and Cloudflare.
668
+ * Where and how the site deploys: a host adapter from `blume/deploy` —
669
+ * `vercel()`, `netlify()`, `cloudflare()`, `node()`, each taking `{ output,
670
+ * site, base }` plus the underlying `@astrojs/*` adapter's own options — for
671
+ * a server build on that host, or the plain `{ site, base }` form for a
672
+ * static build anywhere. `site` is detected from the platform env on Vercel,
673
+ * Netlify, and Cloudflare Pages when unset.
967
674
  */
968
- /** Astro server-output adapters, by hosting platform. */
969
- type CloudDeploymentAdapter = "netlify" | "cloudflare";
970
- type DeploymentAdapter = "vercel" | "node" | CloudDeploymentAdapter;
971
- export interface DeploymentConfig {
972
- /** Astro adapter for server output. `null` (default) keeps a static build. */
973
- adapter?: DeploymentAdapter | null;
974
- /** Base path when the site is served from a subdirectory. */
975
- base?: string;
976
- /** Build output mode. Defaults to `static`. */
977
- output?: "static" | "server";
978
- /**
979
- * Canonical site URL. Needed for absolute links, the sitemap, and OG images;
980
- * auto-detected on supported platforms.
981
- */
982
- site?: string;
983
- }
675
+ export type DeploymentConfig = DeploymentInput;
984
676
  /**
985
677
  * One authorized remote image source, passed through to Astro's
986
678
  * `image.remotePatterns`. Hostnames accept `*.` (one level) and `**.` (any
@@ -1033,6 +725,95 @@ export type ContentSignalsConfig = boolean | {
1033
725
  /** Allow traditional and AI search indexing (`search`). Defaults to `true`. */
1034
726
  search?: boolean;
1035
727
  };
728
+ /**
729
+ * The machine-readable surface agents consume: the JSON API, `llms.txt`, the
730
+ * MCP server, published skills, discovery manifests, and the robots.txt usage
731
+ * policy. The reader-facing model features (the assistant, Open in chat) live under
732
+ * `ai`.
733
+ */
734
+ export interface AgentsConfig {
735
+ /**
736
+ * Emit `agent-readability.json`: a manifest indexing the agent-facing surface
737
+ * (llms.txt, Markdown mirrors, MCP, feeds). Defaults to `true`.
738
+ */
739
+ agentReadability?: boolean;
740
+ /**
741
+ * The JSON docs API — the REST twin of the MCP tools. Serves the page index
742
+ * (`/api/docs/pages.json`), each page as JSON (`/api/docs/pages/{route}.json`),
743
+ * and the navigation tree (`/api/docs/navigation.json`) as prerendered
744
+ * files, plus full-text search (`/api/docs/search?q=`) on server output,
745
+ * all described by an OpenAPI document at `/openapi.json`. Errors are RFC
746
+ * 9457 problem details. Defaults to `true`; set `false` to publish none of it.
747
+ */
748
+ api?: boolean;
749
+ /**
750
+ * The AI Catalog / ARD manifest (`/.well-known/ai-catalog.json`, mirrored
751
+ * at `/.well-known/ard.json`): a domain-level index of the agent-facing
752
+ * resources the site publishes — MCP server, agent skills, the JSON docs
753
+ * API, API references, llms.txt — for agent registries. Needs a
754
+ * `deployment.site`. Defaults to `true`; the object form overrides the
755
+ * generated representative queries per entry.
756
+ */
757
+ catalog?: boolean | AiCatalogConfig;
758
+ /** robots.txt `Content-Signal` usage declaration. Defaults to `true`. */
759
+ contentSignals?: ContentSignalsConfig;
760
+ /**
761
+ * Emit `llms.txt` (an index of the docs for LLMs). Defaults to `true`.
762
+ * The object form adds knobs for what the files include.
763
+ */
764
+ llmsTxt?: boolean | LlmsTxtConfig;
765
+ /**
766
+ * Markdown serializers for custom components in agent-facing output (the
767
+ * `.md` mirror, `llms-full.txt`, MCP `get_page`), keyed by JSX name. Each
768
+ * receives the component's statically-evaluated `props` (with the page's
769
+ * `frontmatter` in scope, so `prop={frontmatter.status}` resolves), its
770
+ * downleveled `children`, and the page's `frontmatter` data, and returns
771
+ * replacement Markdown — or `null` to leave the JSX verbatim. A same-name
772
+ * entry replaces a built-in serializer.
773
+ *
774
+ * These live in `blume.config.ts` (which is executed at build time), not in
775
+ * `components.tsx` (which is only statically analyzed, never run).
776
+ *
777
+ * ```ts
778
+ * agents: {
779
+ * markdownComponents: {
780
+ * Chart: ({ props }) => `![${props.title}](/charts/${props.slug}.png)`,
781
+ * },
782
+ * }
783
+ * ```
784
+ */
785
+ markdownComponents?: Record<string, ComponentMarkdown>;
786
+ /** Expose the docs as an MCP server for agents. */
787
+ mcp?: McpConfig;
788
+ /**
789
+ * Publish Agent Skills for discovery: a directory (resolved against the
790
+ * project root) whose subdirectories each hold a `SKILL.md`. Skills are
791
+ * copied under `/.well-known/agent-skills/` — single-file skills verbatim,
792
+ * skills with supporting resources as `.tar.gz` archives — and enumerated
793
+ * in a discovery index with SHA-256 digests (Agent Skills Discovery RFC).
794
+ *
795
+ * ```ts
796
+ * agents: {
797
+ * skills: "./skills",
798
+ * }
799
+ * ```
800
+ */
801
+ skills?: string;
802
+ /**
803
+ * Web Bot Auth: publish the org's HTTP Message Signature public keys at
804
+ * `/.well-known/http-message-signatures-directory`, so sites receiving
805
+ * requests from your agents can verify them. Public keys only — a key
806
+ * containing private material (`d`, `p`, `q`, …) is rejected.
807
+ */
808
+ webBotAuth?: WebBotAuthConfig;
809
+ /**
810
+ * WebMCP: register in-page tools (search, page Markdown, the docs index)
811
+ * on the browser's model context, so agentic browsers can drive the docs
812
+ * without a separate MCP connection. The script is tiny and no-ops in
813
+ * browsers without the API. Defaults to `true`; set `false` to opt out.
814
+ */
815
+ webmcp?: boolean;
816
+ }
1036
817
  /** RSS/Atom feed generation. */
1037
818
  export interface RssConfig {
1038
819
  /** Generate feeds. Defaults to `true`. */
@@ -1171,13 +952,6 @@ export interface SoftwareConfig {
1171
952
  }
1172
953
  /** Discoverability: OG images, feeds, sitemap, robots, and structured data. */
1173
954
  export interface SeoConfig {
1174
- /**
1175
- * Emit `agent-readability.json`: a manifest indexing the agent-facing surface
1176
- * (llms.txt, Markdown mirrors, MCP, feeds). Defaults to `true`.
1177
- */
1178
- agentReadability?: boolean;
1179
- /** robots.txt `Content-Signal` usage declaration. Defaults to `true`. */
1180
- contentSignals?: ContentSignalsConfig;
1181
955
  /** Per-page Open Graph image generation. */
1182
956
  og?: OgConfig;
1183
957
  /**
@@ -1255,30 +1029,34 @@ export interface GithubConfig {
1255
1029
  /** Repository name. */
1256
1030
  repo: string;
1257
1031
  }
1258
- /** Code-block rendering options. */
1032
+ /** Code rendering options. */
1259
1033
  export interface CodeConfig {
1260
1034
  /** Show a brand language icon in the code-block header. Defaults to `true`. */
1261
1035
  icons?: boolean;
1036
+ /**
1037
+ * Syntax-highlighting themes for every code surface — fenced blocks, inline
1038
+ * `` `code`{:lang} ``, `<CodeBlock>`, and `<Diff>` — as bundled Shiki theme
1039
+ * names or inline custom Shiki themes per color mode.
1040
+ */
1041
+ theme?: {
1042
+ /** Dark-mode theme name or custom theme. Defaults to `github-dark`. */
1043
+ dark?: CodeTheme;
1044
+ /** Light-mode theme name or custom theme. Defaults to `github-light`. */
1045
+ light?: CodeTheme;
1046
+ };
1262
1047
  /** Wrap long lines instead of scrolling horizontally. Defaults to `false`. */
1263
1048
  wrap?: boolean;
1264
1049
  }
1265
1050
  /** Markdown / MDX rendering behavior. */
1266
1051
  export interface MarkdownConfig {
1267
- /** Code-block rendering: language icons, line wrap. */
1052
+ /** Code rendering: language icons, syntax themes, line wrap. */
1268
1053
  code?: CodeConfig;
1269
1054
  /**
1270
- * Syntax-highlighting themes for every code surface — fenced blocks, inline
1271
- * `` `code`{:lang} ``, `<CodeBlock>`, and `<Diff>`.
1055
+ * Open external links (`https://…`, `//host/…`) in a new tab, with an arrow
1056
+ * icon and a screen-reader hint, like Blume's header and sidebar links.
1057
+ * Defaults to `false`.
1272
1058
  */
1273
- codeBlocks?: {
1274
- /** Bundled Shiki theme names or inline custom Shiki themes per color mode. */
1275
- theme?: {
1276
- /** Dark-mode theme name or custom theme. Defaults to `github-dark`. */
1277
- dark?: CodeTheme;
1278
- /** Light-mode theme name or custom theme. Defaults to `github-light`. */
1279
- light?: CodeTheme;
1280
- };
1281
- };
1059
+ externalLinks?: boolean;
1282
1060
  /**
1283
1061
  * Wrap each `##`–`######` heading in a self-anchor link so readers can copy,
1284
1062
  * bookmark, or share a section permalink. Defaults to `true`.
@@ -1296,116 +1074,6 @@ export interface ReactConfig {
1296
1074
  */
1297
1075
  compiler?: boolean;
1298
1076
  }
1299
- /**
1300
- * The shared shape of both API-reference blocks (`openapi`, `asyncapi`). Only
1301
- * the per-block defaults differ; those are documented on the extending
1302
- * interfaces.
1303
- */
1304
- interface ReferenceConfig {
1305
- /** Turn the reference on. Defaults to `false`. */
1306
- enabled?: boolean;
1307
- /** Start nested schema rows expanded (Blume renderer). Defaults to `false`. */
1308
- expandSchemas?: boolean;
1309
- /**
1310
- * The interactive "Try it" panel on operation pages (Blume renderer). On by
1311
- * default; `false` hides it. `proxy` is the CORS escape hatch the OpenAPI
1312
- * Send button routes requests through: a proxy URL, or `true` for the
1313
- * built-in `/_api-proxy` endpoint (which requires
1314
- * `deployment.output: "server"`). `proxy` is OpenAPI-only — an event
1315
- * composer's WebSocket connect is direct.
1316
- */
1317
- playground?: boolean | {
1318
- enabled?: boolean;
1319
- proxy?: boolean | string;
1320
- };
1321
- /** Who renders the reference. Defaults to `blume`. */
1322
- renderer?: "blume" | "scalar";
1323
- /**
1324
- * Extra Scalar options forwarded verbatim to the embedded `<ScalarComponent>`
1325
- * (Scalar renderer only) — e.g. `localization`, `agent`,
1326
- * `hideTestRequestButton`, `orderSchemaPropertiesBy`. These win over Blume's
1327
- * derived spec/theme config, so it's a full escape hatch to Scalar's API.
1328
- */
1329
- scalar?: Record<string, unknown>;
1330
- /** One or more specs; each renders on its own route by default. */
1331
- sources?: OpenApiSource[];
1332
- /** Shorthand for a single source: `sources: [{ spec }]`. */
1333
- spec?: string;
1334
- /** Scalar theme name (Scalar renderer only). */
1335
- theme?: string;
1336
- }
1337
- /**
1338
- * OpenAPI reference. By default (`renderer: "blume"`) Blume renders its own UI:
1339
- * one real page per operation, grouped by tag in the sidebar and included in
1340
- * search, llms.txt, and OG. Set `renderer: "scalar"` for the embedded Scalar
1341
- * SPA (a single self-contained route).
1342
- */
1343
- export interface OpenApiConfig extends ReferenceConfig {
1344
- /**
1345
- * Code-sample languages shown per operation (Blume renderer). Defaults to
1346
- * `["curl", "js", "python"]`.
1347
- */
1348
- codeSamples?: string[];
1349
- /** Where the reference mounts. Defaults to `/reference`. */
1350
- route?: string;
1351
- }
1352
- /**
1353
- * AsyncAPI reference. Same shape as {@link OpenApiConfig}: by default
1354
- * (`renderer: "blume"`) Blume normalizes the spec to AsyncAPI 3.x and renders
1355
- * its own UI — one real page per operation, grouped by tag (or channel) in the
1356
- * sidebar and included in search, llms.txt, and OG. Set `renderer: "scalar"`
1357
- * for the embedded Scalar SPA (a single self-contained route).
1358
- */
1359
- export interface AsyncApiConfig extends ReferenceConfig {
1360
- /**
1361
- * Code-sample tools shown per operation (Blume renderer). Defaults to every
1362
- * tool appropriate to the operation's protocol binding.
1363
- */
1364
- codeSamples?: string[];
1365
- /** Where the reference mounts. Defaults to `/events`. */
1366
- route?: string;
1367
- }
1368
- /**
1369
- * GraphQL reference. Blume lowers the schema — SDL text or an introspection
1370
- * JSON result, local or remote — into one real page per root field (grouped
1371
- * as Queries/Mutations/Subscriptions) plus one page per named type (Objects,
1372
- * Input Objects, Enums, Interfaces, Unions, Scalars), all in the sidebar,
1373
- * search, llms.txt, and OG. Always Blume-rendered — the embedded Scalar SPA
1374
- * reads OpenAPI documents only — so unlike the other reference blocks there
1375
- * is no `renderer` opt-out.
1376
- */
1377
- export interface GraphqlConfig {
1378
- /**
1379
- * Code-sample languages shown per operation. Defaults to
1380
- * `["curl", "js", "python"]`.
1381
- */
1382
- codeSamples?: string[];
1383
- /** Turn the reference on. Defaults to `false`. */
1384
- enabled?: boolean;
1385
- /**
1386
- * URL of the live GraphQL endpoint the playground and code samples target —
1387
- * a schema, unlike an OpenAPI document, names no server. Applies to every
1388
- * source in the block; a per-source `endpoint` wins.
1389
- */
1390
- endpoint?: string;
1391
- /**
1392
- * The interactive "Try it" panel on operation pages. On by default; `false`
1393
- * hides it. The object form keeps it on and sets `proxy`, the CORS escape
1394
- * hatch the Send button routes requests through: a proxy URL, or `true` for
1395
- * the built-in `/_api-proxy` endpoint (which requires
1396
- * `deployment.output: "server"`).
1397
- */
1398
- playground?: boolean | {
1399
- enabled?: boolean;
1400
- proxy?: boolean | string;
1401
- };
1402
- /** Where the reference mounts. Defaults to `/graphql`. */
1403
- route?: string;
1404
- /** One or more schemas; each renders on its own route by default. */
1405
- sources?: GraphqlSource[];
1406
- /** Shorthand for a single source: `sources: [{ spec }]`. */
1407
- spec?: string;
1408
- }
1409
1077
  /** `<Component />` example previews (the object form of `examples`). */
1410
1078
  export interface ExamplesConfig {
1411
1079
  /**
@@ -1467,14 +1135,11 @@ export interface FrontmatterConfig {
1467
1135
  extend?: Record<string, StandardSchema>;
1468
1136
  }
1469
1137
  /**
1470
- * "Last updated" timestamps. `false` (default) disables them; `true` derives
1471
- * each date from git history; the object form selects the source. A page's
1472
- * `lastModified` frontmatter always wins.
1138
+ * "Last updated" timestamps. `false` (default) disables them; `"git"` derives
1139
+ * each date from the repository history; `"frontmatter"` reads only the page's
1140
+ * own field. A page's `lastModified` frontmatter always wins.
1473
1141
  */
1474
- export type LastModifiedConfig = boolean | {
1475
- /** Where the date comes from. Defaults to `git`. */
1476
- type?: "git" | "frontmatter";
1477
- };
1142
+ export type LastModifiedConfig = false | "git" | "frontmatter";
1478
1143
  /**
1479
1144
  * Date presentation for the "last updated" stamp and the changelog timeline —
1480
1145
  * a curated pass-through to `Intl.DateTimeFormat`, shared by both surfaces.
@@ -1517,12 +1182,16 @@ export type TocConfig = boolean | {
1517
1182
  * Markdown/MDX under `docs/` with sensible defaults.
1518
1183
  */
1519
1184
  export interface BlumeConfig {
1520
- /** AI-facing features: the Ask AI assistant and an `llms.txt` manifest. */
1185
+ /** The machine-readable surface for agents: JSON API, `llms.txt`, MCP, skills, discovery. */
1186
+ agents?: AgentsConfig;
1187
+ /** Model-facing features: the assistant and the "Open in chat" action. */
1521
1188
  ai?: AiConfig;
1522
- /** Analytics providers (PostHog, Vercel, or arbitrary scripts). */
1523
- analytics?: AnalyticsConfig;
1524
- /** AsyncAPI reference (native renderer by default, Scalar opt-out). */
1525
- asyncapi?: AsyncApiConfig;
1189
+ /**
1190
+ * Analytics adapters from `blume/analytics`, emitted into `<head>` of every
1191
+ * production page in this order: `[posthog({ key }), vercel(),
1192
+ * cloudflare({ token }), script({ src })]`. Unset or empty injects nothing.
1193
+ */
1194
+ analytics?: AnalyticsAdapter[];
1526
1195
  /** Site-wide announcement banner shown above the header. */
1527
1196
  banner?: BannerConfig;
1528
1197
  /**
@@ -1564,15 +1233,13 @@ export interface BlumeConfig {
1564
1233
  frontmatter?: FrontmatterConfig;
1565
1234
  /** Source repository (Edit-this-page links and the header repo link). */
1566
1235
  github?: GithubConfig;
1567
- /** Native GraphQL reference (root fields and named types as real pages). */
1568
- graphql?: GraphqlConfig;
1569
1236
  /** Internationalization (opt-in multi-locale). */
1570
1237
  i18n?: I18nConfig;
1571
1238
  /** Image optimization: remote-host authorization for the image service. */
1572
1239
  image?: ImageConfig;
1573
1240
  /** Astro integrations appended after Blume's built-ins, in declaration order. */
1574
1241
  integrations?: AstroIntegration[];
1575
- /** "Last updated" timestamps from git history or frontmatter. Defaults to `false`. */
1242
+ /** "Last updated" timestamps: `"git"`, `"frontmatter"`, or `false` (default). */
1576
1243
  lastModified?: LastModifiedConfig;
1577
1244
  /** Site logo / brand mark. */
1578
1245
  logo?: LogoConfig;
@@ -1580,12 +1247,16 @@ export interface BlumeConfig {
1580
1247
  markdown?: MarkdownConfig;
1581
1248
  /** Header, sidebar, tabs, and switchers. */
1582
1249
  navigation?: NavigationConfig;
1583
- /** Native OpenAPI reference. */
1584
- openapi?: OpenApiConfig;
1585
1250
  /** React island behavior (compiler auto-memoization). */
1586
1251
  react?: ReactConfig;
1587
1252
  /** URL redirect rules. */
1588
1253
  redirects?: RedirectConfig[];
1254
+ /**
1255
+ * API references: adapters from `blume/reference`, each rendering one or
1256
+ * more specs — `[openapi({ spec }), asyncapi({ spec }), graphql({ spec,
1257
+ * endpoint })]`. Unset or empty renders none.
1258
+ */
1259
+ reference?: ReferenceAdapter[];
1589
1260
  /** Search backend and credentials. */
1590
1261
  search?: SearchConfig;
1591
1262
  /** Discoverability: OG images, feeds, sitemap, robots, structured data. */