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
@@ -0,0 +1,368 @@
1
+ import { z } from "zod";
2
+ import type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
3
+ /**
4
+ * The `reasoning` levels the adapters accept: the AI SDK's top-level
5
+ * `reasoning` values minus `provider-default`, which is what omitting the
6
+ * option means.
7
+ */
8
+ export declare const assistantReasoningLevels: readonly ["none", "minimal", "low", "medium", "high", "xhigh"];
9
+ /** How much the model reasons before answering (an adapter's `reasoning`). */
10
+ export type AssistantReasoning = (typeof assistantReasoningLevels)[number];
11
+ /**
12
+ * The AI SDK's `providerOptions` shape, forwarded to `streamText` verbatim:
13
+ * `{ [provider]: { [option]: value } }`. The escape hatch for model controls
14
+ * Blume doesn't name, so a new provider knob never needs a Blume field.
15
+ */
16
+ export type AssistantProviderOptions = Record<string, Record<string, JsonValue>>;
17
+ /** The options every assistant adapter accepts. */
18
+ export interface AssistantAdapterOptions {
19
+ /**
20
+ * Name of the env var holding the provider's API key. Each adapter has its
21
+ * own default; set this only to point at a different variable.
22
+ */
23
+ apiKeyEnv?: string;
24
+ /**
25
+ * Static request headers sent to the provider on every call — a
26
+ * caller-identifying header for a shared backend, for example. Values are
27
+ * written into the generated route as literals, so keep secrets in
28
+ * `apiKeyEnv` rather than here.
29
+ */
30
+ headers?: Record<string, string>;
31
+ /**
32
+ * Options passed to `streamText` as its `providerOptions`, untouched, in the
33
+ * AI SDK's own shape (`{ openai: { textVerbosity: "low" } }`, say).
34
+ */
35
+ providerOptions?: AssistantProviderOptions;
36
+ }
37
+ /** Options for {@link gateway}. */
38
+ export interface AssistantGatewayOptions extends AssistantAdapterOptions {
39
+ /** A `provider/model` id routed by the gateway. Defaults to `openai/gpt-5.5`. */
40
+ model?: string;
41
+ /**
42
+ * How much the model reasons before answering. Sent as the AI SDK's
43
+ * top-level `reasoning` option, which the gateway maps to the model's own
44
+ * control (OpenAI's `reasoning_effort`, for example); the model has to
45
+ * offer the level you pick. Omitted keeps the model's default.
46
+ */
47
+ reasoning?: AssistantReasoning;
48
+ }
49
+ export type AssistantGatewayAdapter = AdapterDescriptor<"gateway", AssistantGatewayOptions>;
50
+ export declare const gatewayAdapterSchema: z.ZodObject<{
51
+ kind: z.ZodLiteral<"gateway">;
52
+ options: z.ZodObject<{
53
+ model: z.ZodDefault<z.ZodString>;
54
+ reasoning: z.ZodOptional<z.ZodEnum<{
55
+ none: "none";
56
+ minimal: "minimal";
57
+ low: "low";
58
+ medium: "medium";
59
+ high: "high";
60
+ xhigh: "xhigh";
61
+ }>>;
62
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
63
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
64
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
65
+ }, z.core.$strict>;
66
+ requiredSecrets: z.ZodArray<z.ZodString>;
67
+ runtimeDeps: z.ZodArray<z.ZodString>;
68
+ }, z.core.$strict>;
69
+ /**
70
+ * Route the assistant through the Vercel AI Gateway (the default). `model` is a
71
+ * `provider/model` string; the key is `AI_GATEWAY_API_KEY`, or Vercel's OIDC
72
+ * token when deployed there. Needs no provider SDK beyond the `ai` package
73
+ * Blume ships.
74
+ */
75
+ export declare const gateway: (options?: AssistantGatewayOptions) => AssistantGatewayAdapter;
76
+ /** Options for {@link openrouter}. */
77
+ export interface AssistantOpenRouterOptions extends AssistantAdapterOptions {
78
+ /** The OpenRouter model id (`anthropic/claude-sonnet-4-5`). */
79
+ model: string;
80
+ /**
81
+ * How much the model reasons before answering. Set on the model as
82
+ * OpenRouter's `reasoning.effort`, because its provider ignores the AI
83
+ * SDK's call-level option. Omitted keeps the model's default.
84
+ */
85
+ reasoning?: AssistantReasoning;
86
+ }
87
+ export type AssistantOpenRouterAdapter = AdapterDescriptor<"openrouter", AssistantOpenRouterOptions>;
88
+ export declare const openrouterAdapterSchema: z.ZodObject<{
89
+ kind: z.ZodLiteral<"openrouter">;
90
+ options: z.ZodObject<{
91
+ model: z.ZodString;
92
+ reasoning: z.ZodOptional<z.ZodEnum<{
93
+ none: "none";
94
+ minimal: "minimal";
95
+ low: "low";
96
+ medium: "medium";
97
+ high: "high";
98
+ xhigh: "xhigh";
99
+ }>>;
100
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
101
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
102
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
103
+ }, z.core.$strict>;
104
+ requiredSecrets: z.ZodArray<z.ZodString>;
105
+ runtimeDeps: z.ZodArray<z.ZodString>;
106
+ }, z.core.$strict>;
107
+ /**
108
+ * Route the assistant through OpenRouter. Reads `OPENROUTER_API_KEY` and needs
109
+ * `@openrouter/ai-sdk-provider` installed in the project.
110
+ */
111
+ export declare const openrouter: (options: AssistantOpenRouterOptions) => AssistantOpenRouterAdapter;
112
+ /** Options for {@link llmgateway}. */
113
+ export interface AssistantLlmGatewayOptions extends AssistantAdapterOptions {
114
+ /** Overrides the preset endpoint (`https://api.llmgateway.io/v1`). */
115
+ baseUrl?: string;
116
+ /** The model id LLMGateway serves. */
117
+ model: string;
118
+ /**
119
+ * How much the model reasons before answering, sent in the request as
120
+ * `reasoning_effort`. Omitted keeps the model's default.
121
+ */
122
+ reasoning?: AssistantReasoning;
123
+ }
124
+ export type AssistantLlmGatewayAdapter = AdapterDescriptor<"llmgateway", AssistantLlmGatewayOptions>;
125
+ export declare const llmgatewayAdapterSchema: z.ZodObject<{
126
+ kind: z.ZodLiteral<"llmgateway">;
127
+ options: z.ZodObject<{
128
+ baseUrl: z.ZodDefault<z.ZodURL>;
129
+ model: z.ZodString;
130
+ reasoning: z.ZodOptional<z.ZodEnum<{
131
+ none: "none";
132
+ minimal: "minimal";
133
+ low: "low";
134
+ medium: "medium";
135
+ high: "high";
136
+ xhigh: "xhigh";
137
+ }>>;
138
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
139
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
140
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
141
+ }, z.core.$strict>;
142
+ requiredSecrets: z.ZodArray<z.ZodString>;
143
+ runtimeDeps: z.ZodArray<z.ZodString>;
144
+ }, z.core.$strict>;
145
+ /**
146
+ * Route the assistant through LLMGateway's OpenAI-compatible endpoint. Reads
147
+ * `LLMGATEWAY_API_KEY` and needs `@ai-sdk/openai-compatible` installed.
148
+ */
149
+ export declare const llmgateway: (options: AssistantLlmGatewayOptions) => AssistantLlmGatewayAdapter;
150
+ /**
151
+ * Options for {@link inkeep}. No `reasoning`: Inkeep runs its own QA pipeline
152
+ * behind an OpenAI-compatible endpoint with no reasoning control.
153
+ */
154
+ export interface AssistantInkeepOptions extends AssistantAdapterOptions {
155
+ /** Overrides the preset endpoint (`https://api.inkeep.com/v1`). */
156
+ baseUrl?: string;
157
+ /** The Inkeep QA model id. */
158
+ model: string;
159
+ }
160
+ export type AssistantInkeepAdapter = AdapterDescriptor<"inkeep", AssistantInkeepOptions>;
161
+ export declare const inkeepAdapterSchema: z.ZodObject<{
162
+ kind: z.ZodLiteral<"inkeep">;
163
+ options: z.ZodObject<{
164
+ baseUrl: z.ZodDefault<z.ZodURL>;
165
+ model: z.ZodString;
166
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
167
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
168
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
169
+ }, z.core.$strict>;
170
+ requiredSecrets: z.ZodArray<z.ZodString>;
171
+ runtimeDeps: z.ZodArray<z.ZodString>;
172
+ }, z.core.$strict>;
173
+ /**
174
+ * Answer with Inkeep, which retrieves from the content indexed in its own
175
+ * dashboard, so Blume leaves it ungrounded and it takes no `reasoning`.
176
+ * Reads `INKEEP_API_KEY` and needs `@ai-sdk/openai-compatible` installed.
177
+ */
178
+ export declare const inkeep: (options: AssistantInkeepOptions) => AssistantInkeepAdapter;
179
+ /** Options for {@link openaiCompatible}. */
180
+ export interface AssistantOpenAICompatibleOptions extends AssistantAdapterOptions {
181
+ /** Name of the env var holding the endpoint's API key. */
182
+ apiKeyEnv: string;
183
+ /** The endpoint's base URL (`https://my-gateway.example.com/v1`). */
184
+ baseUrl: string;
185
+ /** The model id the endpoint serves. */
186
+ model: string;
187
+ /** The provider name the AI SDK reports. Defaults to `openai-compatible`. */
188
+ name?: string;
189
+ /**
190
+ * How much the model reasons before answering, sent in the request as
191
+ * `reasoning_effort`, so the endpoint has to accept that parameter.
192
+ * Omitted keeps the model's default.
193
+ */
194
+ reasoning?: AssistantReasoning;
195
+ }
196
+ export type AssistantOpenAICompatibleAdapter = AdapterDescriptor<"openai-compatible", AssistantOpenAICompatibleOptions>;
197
+ export declare const openaiCompatibleAdapterSchema: z.ZodObject<{
198
+ kind: z.ZodLiteral<"openai-compatible">;
199
+ options: z.ZodObject<{
200
+ apiKeyEnv: z.ZodString;
201
+ baseUrl: z.ZodURL;
202
+ model: z.ZodString;
203
+ name: z.ZodDefault<z.ZodString>;
204
+ reasoning: z.ZodOptional<z.ZodEnum<{
205
+ none: "none";
206
+ minimal: "minimal";
207
+ low: "low";
208
+ medium: "medium";
209
+ high: "high";
210
+ xhigh: "xhigh";
211
+ }>>;
212
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
213
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
214
+ }, z.core.$strict>;
215
+ requiredSecrets: z.ZodArray<z.ZodString>;
216
+ runtimeDeps: z.ZodArray<z.ZodString>;
217
+ }, z.core.$strict>;
218
+ /**
219
+ * Route the assistant through any OpenAI-compatible endpoint: supply its `baseUrl`,
220
+ * the `model` it serves, and the env var holding its key. Needs
221
+ * `@ai-sdk/openai-compatible` installed.
222
+ */
223
+ export declare const openaiCompatible: (options: AssistantOpenAICompatibleOptions) => AssistantOpenAICompatibleAdapter;
224
+ /** Which backend answers the assistant: the value of `gateway()`, `openrouter()`, … */
225
+ export type AssistantAdapter = AssistantGatewayAdapter | AssistantOpenRouterAdapter | AssistantLlmGatewayAdapter | AssistantInkeepAdapter | AssistantOpenAICompatibleAdapter;
226
+ /**
227
+ * Error params for `ai.assistant`: a 1.x flat provider field (`model`, `apiKeyEnv`,
228
+ * `baseUrl`, `headers`, `reasoning`) names the adapter call it moves into —
229
+ * the one the object's `provider` picks, 1.x string or descriptor — instead
230
+ * of Zod's bare "Unrecognized key"; any other unknown key keeps its wording.
231
+ */
232
+ export declare const assistantMovedFieldsHint: {
233
+ error: (issue: z.core.$ZodRawIssue) => string | undefined;
234
+ };
235
+ /**
236
+ * `ai.assistant.provider`: the descriptor an adapter factory returned, validated
237
+ * against that adapter's own option schema. A value that isn't a descriptor
238
+ * at all (a 1.x provider name) names the factory that replaced it.
239
+ */
240
+ export declare const assistantAdapterSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
241
+ kind: z.ZodLiteral<"gateway">;
242
+ options: z.ZodObject<{
243
+ model: z.ZodDefault<z.ZodString>;
244
+ reasoning: z.ZodOptional<z.ZodEnum<{
245
+ none: "none";
246
+ minimal: "minimal";
247
+ low: "low";
248
+ medium: "medium";
249
+ high: "high";
250
+ xhigh: "xhigh";
251
+ }>>;
252
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
253
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
254
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
255
+ }, z.core.$strict>;
256
+ requiredSecrets: z.ZodArray<z.ZodString>;
257
+ runtimeDeps: z.ZodArray<z.ZodString>;
258
+ }, z.core.$strict>, z.ZodObject<{
259
+ kind: z.ZodLiteral<"openrouter">;
260
+ options: z.ZodObject<{
261
+ model: z.ZodString;
262
+ reasoning: z.ZodOptional<z.ZodEnum<{
263
+ none: "none";
264
+ minimal: "minimal";
265
+ low: "low";
266
+ medium: "medium";
267
+ high: "high";
268
+ xhigh: "xhigh";
269
+ }>>;
270
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
271
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
272
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
273
+ }, z.core.$strict>;
274
+ requiredSecrets: z.ZodArray<z.ZodString>;
275
+ runtimeDeps: z.ZodArray<z.ZodString>;
276
+ }, z.core.$strict>, z.ZodObject<{
277
+ kind: z.ZodLiteral<"llmgateway">;
278
+ options: z.ZodObject<{
279
+ baseUrl: z.ZodDefault<z.ZodURL>;
280
+ model: z.ZodString;
281
+ reasoning: z.ZodOptional<z.ZodEnum<{
282
+ none: "none";
283
+ minimal: "minimal";
284
+ low: "low";
285
+ medium: "medium";
286
+ high: "high";
287
+ xhigh: "xhigh";
288
+ }>>;
289
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
290
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
291
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
292
+ }, z.core.$strict>;
293
+ requiredSecrets: z.ZodArray<z.ZodString>;
294
+ runtimeDeps: z.ZodArray<z.ZodString>;
295
+ }, z.core.$strict>, z.ZodObject<{
296
+ kind: z.ZodLiteral<"inkeep">;
297
+ options: z.ZodObject<{
298
+ baseUrl: z.ZodDefault<z.ZodURL>;
299
+ model: z.ZodString;
300
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
301
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
302
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
303
+ }, z.core.$strict>;
304
+ requiredSecrets: z.ZodArray<z.ZodString>;
305
+ runtimeDeps: z.ZodArray<z.ZodString>;
306
+ }, z.core.$strict>, z.ZodObject<{
307
+ kind: z.ZodLiteral<"openai-compatible">;
308
+ options: z.ZodObject<{
309
+ apiKeyEnv: z.ZodString;
310
+ baseUrl: z.ZodURL;
311
+ model: z.ZodString;
312
+ name: z.ZodDefault<z.ZodString>;
313
+ reasoning: z.ZodOptional<z.ZodEnum<{
314
+ none: "none";
315
+ minimal: "minimal";
316
+ low: "low";
317
+ medium: "medium";
318
+ high: "high";
319
+ xhigh: "xhigh";
320
+ }>>;
321
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
322
+ providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
323
+ }, z.core.$strict>;
324
+ requiredSecrets: z.ZodArray<z.ZodString>;
325
+ runtimeDeps: z.ZodArray<z.ZodString>;
326
+ }, z.core.$strict>], "kind">;
327
+ /** A resolved (post-defaults) `ai.assistant.provider` descriptor. */
328
+ export type AssistantAdapterConfig = z.output<typeof assistantAdapterSchema>;
329
+ export type AssistantAdapterKind = AssistantAdapterConfig["kind"];
330
+ /** The provider when `ai.assistant.provider` is unset: the gateway with its defaults. */
331
+ export declare const DEFAULT_ASSISTANT_PROVIDER: AssistantAdapter;
332
+ /** The route fragments an adapter contributes to `askEndpointTemplate`. */
333
+ export interface AskBackendTemplate {
334
+ /**
335
+ * Extra `streamText` fields as `key: value` source lines: the adapter's
336
+ * reasoning mapping (when it is a call option) and `providerOptions`.
337
+ */
338
+ fields: string[];
339
+ /** Import lines after the shared `astro` and `astro:env/server` ones. */
340
+ imports: string[];
341
+ /**
342
+ * The up-front credential guard: a statement that returns a 503, since the
343
+ * endpoint exists but can't answer until the deployment sets its key.
344
+ */
345
+ keyCheck: string;
346
+ /** The `model:` expression passed to `streamText`. */
347
+ model: string;
348
+ /** Module-level provider setup (the provider factory call). */
349
+ setup: string;
350
+ }
351
+ /**
352
+ * What the endpoint template and the diagnostics read from an adapter beyond
353
+ * the descriptor itself (`kind`, `requiredSecrets`, `runtimeDeps` travel on
354
+ * the descriptor; `generate`, `eject`, the required-secrets check, and the
355
+ * runtime-dependency manifest read those directly).
356
+ */
357
+ export interface AskBackend {
358
+ /** Whether Blume grounds answers in the docs (Inkeep retrieves itself). */
359
+ grounded: boolean;
360
+ kind: AssistantAdapterKind;
361
+ /** Human-readable adapter name for diagnostics ("AI Gateway"). */
362
+ label: string;
363
+ /** Appended to the missing-secret warning (an alternative credential, say). */
364
+ secretNote?: string;
365
+ template: AskBackendTemplate;
366
+ }
367
+ /** Resolve a parsed `ai.assistant.provider` descriptor into its backend. */
368
+ export declare const resolveAskBackend: (provider?: AssistantAdapterConfig) => AskBackend;
@@ -0,0 +1,2 @@
1
+ import type { BlumeProject } from "../core/project-graph.ts";
2
+ export declare const buildChangelogIndexMarkdown: (project: BlumeProject) => string;
@@ -126,7 +126,7 @@ export interface DownlevelWalk {
126
126
  registry: Record<string, ComponentMarkdown>;
127
127
  source: string;
128
128
  }
129
- /** The serializer registry for a site: built-ins under a user's `ai.markdownComponents`. */
129
+ /** The serializer registry for a site: built-ins under a user's `agents.markdownComponents`. */
130
130
  export declare const componentRegistry: (components?: Record<string, ComponentMarkdown>) => Record<string, ComponentMarkdown>;
131
131
  /**
132
132
  * Walk the tree collecting replacements. A replaced element's subtree is
@@ -145,7 +145,7 @@ export declare const downlevelComponentNode: (node: MdastNode, walk: DownlevelWa
145
145
  * with no supported components — and sources Satteri can't parse as MDX, e.g.
146
146
  * plain `.md` with literal `<`/`{` — are returned byte-identical.
147
147
  *
148
- * `components` adds user serializers from `ai.markdownComponents`, layered
148
+ * `components` adds user serializers from `agents.markdownComponents`, layered
149
149
  * over the built-ins: a same-name entry replaces the built-in serializer, and
150
150
  * one that always returns `null` effectively opts that component out.
151
151
  *
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Assistant provider adapters for `blume.config.ts`:
3
+ *
4
+ * ```ts
5
+ * import { defineConfig } from "blume";
6
+ * import { openrouter } from "blume/ai";
7
+ *
8
+ * export default defineConfig({
9
+ * ai: {
10
+ * assistant: {
11
+ * enabled: true,
12
+ * provider: openrouter({ model: "anthropic/claude-sonnet-4-5" }),
13
+ * },
14
+ * },
15
+ * });
16
+ * ```
17
+ *
18
+ * Each factory returns a plain descriptor (see `core/adapter.ts`) that the
19
+ * schema validates and the generated `/api/ask` route inlines as literals;
20
+ * nothing here runs at request time.
21
+ */
22
+ export { gateway, inkeep, llmgateway, openaiCompatible, openrouter, } from "./ask.ts";
23
+ export type { AssistantAdapter, AssistantAdapterOptions, AssistantGatewayAdapter, AssistantGatewayOptions, AssistantInkeepAdapter, AssistantInkeepOptions, AssistantLlmGatewayAdapter, AssistantLlmGatewayOptions, AssistantOpenAICompatibleAdapter, AssistantOpenAICompatibleOptions, AssistantOpenRouterAdapter, AssistantOpenRouterOptions, AssistantProviderOptions, AssistantReasoning, } from "./ask.ts";
24
+ export type { AdapterDescriptor } from "../core/adapter.ts";
@@ -0,0 +1,24 @@
1
+ import type { ResolvedConfig } from "../core/schema.ts";
2
+ /**
3
+ * The homepage `Link` response header (RFC 8288) — agent discovery for the
4
+ * machine-readable surface Blume already publishes. Agents probing a site read
5
+ * this header off `GET /` to find the resources without scraping HTML:
6
+ * `agent-readability.json` and `llms.txt` as `rel="describedby"`, the OpenAPI
7
+ * description of the JSON docs API as `rel="service-desc"`, and the
8
+ * homepage's raw-Markdown mirror as `rel="alternate"` (only when the home
9
+ * route is a content page — a user landing page has no mirror). Every rel
10
+ * value is IANA-registered, which agent-readiness checkers require.
11
+ *
12
+ * The header is homepage-only by design: the root response is what agents
13
+ * probe, and `agent-readability.json` indexes the rest of the surface (the
14
+ * per-route Markdown pattern, MCP, feeds) far better than per-page headers
15
+ * could. An agent that enters on a deep page (a search result, a shared link)
16
+ * never sees this header at all — that path is covered in the HTML instead:
17
+ * every page's `<head>` carries the same `describedby` links plus its own
18
+ * Markdown mirror as an `alternate` (the `DiscoveryLinks.astro` partial every
19
+ * layout renders), which also reaches hosts where Blume can't set response
20
+ * headers. Targets are
21
+ * root-relative under `deployment.base` — RFC 8288 resolves them against the
22
+ * request URL. Returns null when nothing is advertisable.
23
+ */
24
+ export declare const buildHomeLinkHeader: (config: ResolvedConfig, routePaths: readonly string[]) => string | null;
@@ -0,0 +1,25 @@
1
+ import type { BlumeProject } from "../core/project-graph.ts";
2
+ import type { SkillArtifact } from "./skills.ts";
3
+ /** Inputs only the build has: the published skills, collected once per build. */
4
+ export interface LlmsIndexOptions {
5
+ /**
6
+ * The Agent Skills the build publishes under `/.well-known/agent-skills/`,
7
+ * listed in their own section with each skill's description — which is
8
+ * where a skill says when to use it. Absent (empty) for the homepage
9
+ * Markdown mirror, which is synthesized before the skills are collected.
10
+ */
11
+ skills?: readonly SkillArtifact[];
12
+ }
13
+ /**
14
+ * Build the compact `llms.txt` index: title and summary, then the sidebar tree
15
+ * rendered as sections — group labels become headings, pages become link lists —
16
+ * so the file mirrors how the docs are organized rather than one flat blob.
17
+ * Also serves as the homepage's synthesized Markdown mirror when the home
18
+ * route is a landing page (see `buildRawMarkdown`).
19
+ */
20
+ export declare const buildLlmsIndex: (project: BlumeProject, options?: LlmsIndexOptions) => string;
21
+ /** Build both LLM text artifacts for a project. */
22
+ export declare const buildLlmsFiles: (project: BlumeProject, options?: LlmsIndexOptions) => Promise<{
23
+ index: string;
24
+ full: string;
25
+ }>;
@@ -0,0 +1,45 @@
1
+ import type { BlumeProject } from "../core/project-graph.ts";
2
+ /** One route's raw-Markdown variants. */
3
+ export interface RawMarkdownEntry {
4
+ /**
5
+ * The agent-facing Markdown served at `/<route>.md`: supported components
6
+ * downleveled to plain Markdown (`<TypeTable>` → table, `<Callout>` →
7
+ * blockquote, …). Present only when downleveling changed something, so
8
+ * component-free pages aren't stored twice.
9
+ */
10
+ md?: string;
11
+ /** The original source, served verbatim at `/<route>.mdx`. */
12
+ mdx: string;
13
+ }
14
+ /** The Markdown an agent should read for a route. */
15
+ export declare const agentMarkdown: (entry: RawMarkdownEntry) => string;
16
+ /**
17
+ * Estimated token count of a Markdown document, for the `x-markdown-tokens`
18
+ * response header (the convention Cloudflare's Markdown for Agents ships; the
19
+ * tokenizer is unspecified there too, so this is the common ~4-characters-
20
+ * per-token estimate). Kept in sync with the inline computation in
21
+ * `rawMarkdownEndpointTemplate`, which can't import build-time code.
22
+ */
23
+ export declare const markdownTokenCount: (text: string) => number;
24
+ /**
25
+ * Map every route to its raw source Markdown. Powers the `<route>.md` and
26
+ * `<route>.mdx` endpoints: `.mdx` serves the original source so tools can see
27
+ * exactly what the author wrote, while `.md` downlevels supported components
28
+ * to plain Markdown for consumers that can't interpret JSX. `<Visibility>`
29
+ * audiences are resolved for agents in both variants: web-only content is
30
+ * removed, agents-only unwrapped. Relative image references are rewritten to
31
+ * their served `/blume-assets/content/…` URLs in both variants too — an agent
32
+ * fetches these endpoints by URL, where a colocated `./diagram.png` resolves
33
+ * to nothing — and relative page links to the routes they mean, as the
34
+ * rendered page's are (see `relative-links.ts`).
35
+ */
36
+ export declare const buildRawMarkdown: (project: BlumeProject) => Promise<Record<string, RawMarkdownEntry>>;
37
+ /**
38
+ * Every route path with a raw-Markdown mirror: the manifest routes, plus the
39
+ * homepage when its mirror is the synthesized llms.txt fallback and the
40
+ * generated changelog index (see `buildRawMarkdown`). This is the route list the negotiation surfaces (dev
41
+ * middleware, Vercel routing config) and the homepage `Link` header build
42
+ * from, so `Accept: text/markdown` on `/` resolves even when the homepage is
43
+ * a landing page.
44
+ */
45
+ export declare const markdownRoutePaths: (project: BlumeProject) => string[];
@@ -0,0 +1,68 @@
1
+ import type { McpToolMeta } from "./tools.ts";
2
+ /** Inputs needed to describe the MCP server in discovery documents. */
3
+ export interface McpDiscoveryInput {
4
+ /** Normalized `deployment.base` (`""` or `/seg`); the route is base-less. */
5
+ base: string;
6
+ name: string;
7
+ route: string;
8
+ site: string | null;
9
+ version: string;
10
+ }
11
+ /**
12
+ * The `/.well-known/mcp.json` discovery document: the minimal pointer agents use
13
+ * to find the server and its transport.
14
+ */
15
+ export declare const buildMcpDiscovery: (input: McpDiscoveryInput) => {
16
+ servers: {
17
+ name: string;
18
+ transport: string;
19
+ url: string;
20
+ }[];
21
+ };
22
+ export declare const asciiSlugify: (text: string) => string;
23
+ /**
24
+ * The `/.well-known/mcp/server-card.json` document. The core follows the
25
+ * SEP-2127 Server Card extension schema (`$schema`, reverse-DNS `name`,
26
+ * `remotes` — which the schema requires to be absolute, so it appears only
27
+ * when a `site` is configured). Alongside it ride initialize-shaped compat
28
+ * fields (`serverInfo`, `capabilities`, `transports`) for scanners built
29
+ * against the SEP's earlier revision, plus Blume's advertised tool set —
30
+ * schema-legal extras (`additionalProperties` is open), and the tool list is
31
+ * genuinely static for a docs server, unlike the dynamic servers the spec
32
+ * excludes primitives for. Full input schemas are served live via
33
+ * `tools/list`.
34
+ */
35
+ export interface McpServerCard {
36
+ $schema: string;
37
+ capabilities: {
38
+ resources: {
39
+ listChanged: boolean;
40
+ subscribe: boolean;
41
+ };
42
+ tools: {
43
+ listChanged: boolean;
44
+ };
45
+ };
46
+ description: string;
47
+ name: string;
48
+ /** Absolute endpoints only — present when a `site` is configured. */
49
+ remotes?: {
50
+ type: string;
51
+ url: string;
52
+ }[];
53
+ serverInfo: {
54
+ name: string;
55
+ version: string;
56
+ };
57
+ title: string;
58
+ tools: McpToolMeta[];
59
+ transport: string;
60
+ transports: {
61
+ endpoint: string;
62
+ type: string;
63
+ }[];
64
+ url: string;
65
+ version: string;
66
+ websiteUrl?: string;
67
+ }
68
+ export declare const buildMcpServerCard: (input: McpDiscoveryInput) => McpServerCard;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Static metadata for the MCP tools Blume exposes. Shared by the server (which
3
+ * pairs each entry with a Zod input schema and handler) and the `.well-known`
4
+ * discovery documents, so tool names and descriptions never drift between the
5
+ * live server and its advertised capabilities.
6
+ */
7
+ export interface McpToolMeta {
8
+ annotations: {
9
+ openWorldHint: boolean;
10
+ readOnlyHint: boolean;
11
+ };
12
+ description: string;
13
+ name: string;
14
+ title: string;
15
+ }
16
+ export declare const MCP_TOOLS: McpToolMeta[];
@@ -0,0 +1,43 @@
1
+ import type { OpenApiData } from "../openapi/model.ts";
2
+ /**
3
+ * Agent-facing Markdown for the components a generated reference page is made
4
+ * of: `<Operation>`, `<ApiTagOperations>` and `<ApiOverview>`.
5
+ *
6
+ * `render-mdx.ts` builds each reference page as the operation's description in
7
+ * the body plus one of these components, deliberately: the structured UI is the
8
+ * component's job, and the prose stays Markdown so it indexes. That split is
9
+ * right for the rendered page and lossy everywhere else — `<route>.md`,
10
+ * llms-full.txt, MCP `get_page` and the assistant corpus all downlevel components
11
+ * to Markdown, and these three had no serializer, so an operation page reached
12
+ * an agent as its description followed by a bare tag. On a site whose reference
13
+ * is most of the corpus, that is most of the corpus: measured on one 449-page
14
+ * site, 266 pages and 266 raw `<Operation>` in llms-full.txt, so "which
15
+ * endpoint do I call?" had no answer anywhere in the agent surface.
16
+ *
17
+ * Each serializer emits what its component renders and no more: the endpoint
18
+ * in the spec kind's own notation ({@link operationSignature}), the version and
19
+ * addresses the overview shows ({@link specAddresses}), the linked list a tag
20
+ * section shows. Parameters, schemas and responses are deliberately left out:
21
+ * those are `operation-model.ts` plus each component's own preparation, and a
22
+ * second implementation here would be free to disagree with the page. The
23
+ * endpoint and what it does is the part that was missing altogether.
24
+ *
25
+ * `specs` is the parsed `blume:openapi` data — empty when the project has no
26
+ * API reference, in which case every serializer declines.
27
+ */
28
+ export declare const openapiComponentSerializers: (specs: OpenApiData) => {
29
+ /**
30
+ * The spec-level block at the top of the overview page: its version and
31
+ * where the API lives. The tag sections that follow are real Markdown
32
+ * headings over `<ApiTagOperations>`, so they downlevel on their own.
33
+ */
34
+ ApiOverview: ({ props }: import("./component-markdown.ts").ComponentMarkdownContext) => string | null;
35
+ /** One tag's operations, mirroring the list the rendered page shows. */
36
+ ApiTagOperations: ({ props }: import("./component-markdown.ts").ComponentMarkdownContext) => string | null;
37
+ /**
38
+ * One operation. Declines when the spec carries no such key — Blume's own
39
+ * fallback, which leaves the JSX visible rather than publishing a page that
40
+ * silently lost its endpoint.
41
+ */
42
+ Operation: ({ props }: import("./component-markdown.ts").ComponentMarkdownContext) => string | null;
43
+ };
@@ -0,0 +1,26 @@
1
+ import type { BlumeProject } from "../core/project-graph.ts";
2
+ /**
3
+ * Relative page links on the agent surfaces — the `.md`/`.mdx` mirrors,
4
+ * llms-full.txt, MCP `get_page` and `resources/read`. An agent resolves
5
+ * `[Install](./install)` against the URL it fetched (`/guides.md`), so the
6
+ * link lands on `/install`; the rendered page rewrites it to the route it
7
+ * means (`markdown/relative-links.ts`), and the Markdown an agent reads gets
8
+ * the same rewrite from the same resolver (`resolveRelativeHref`), so both
9
+ * point at one page. Inline links and reference definitions are rewritten;
10
+ * fenced and inline code, images, and anything not a relative page link are
11
+ * left as written.
12
+ */
13
+ /** The page a Markdown text was written for. */
14
+ export interface LinkedPage {
15
+ route: string;
16
+ sourcePath?: string;
17
+ }
18
+ /** Rewrite a page's relative page links to the routes they mean. */
19
+ export type RelativeLinkRewriter = (text: string, page: LinkedPage) => string;
20
+ /**
21
+ * Build the rewriter for a project: the file → route lookup a `.md`/`.mdx`
22
+ * link resolves through is built once. A file shared by every locale
23
+ * publishes once per locale, and the default locale's route stands for it;
24
+ * fallback copies render another locale's file, so they never stand for one.
25
+ */
26
+ export declare const relativeLinkRewriter: (project: BlumeProject) => RelativeLinkRewriter;