blume 1.7.3 → 2.0.0

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 (673) hide show
  1. package/AGENTS.md +19 -0
  2. package/CHANGELOG.md +217 -0
  3. package/README.md +34 -21
  4. package/dist/cli/chunk-11j0384y.js +148 -0
  5. package/dist/cli/chunk-11j0384y.js.map +10 -0
  6. package/dist/cli/{chunk-rqy0s5wh.js → chunk-1w8dp3qb.js} +17 -16
  7. package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-1w8dp3qb.js.map} +3 -3
  8. package/dist/cli/chunk-2q1dwty4.js +75 -0
  9. package/dist/cli/chunk-2q1dwty4.js.map +11 -0
  10. package/dist/cli/chunk-41za066z.js +122 -0
  11. package/dist/cli/chunk-41za066z.js.map +11 -0
  12. package/dist/cli/chunk-5a2z0198.js +133 -0
  13. package/dist/cli/chunk-5a2z0198.js.map +10 -0
  14. package/dist/cli/{chunk-5g0w1e2c.js → chunk-6k8vp3ta.js} +25 -13
  15. package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-6k8vp3ta.js.map} +4 -4
  16. package/dist/cli/{chunk-5qk08vmp.js → chunk-79njf86q.js} +133 -54
  17. package/dist/cli/chunk-79njf86q.js.map +11 -0
  18. package/dist/cli/{chunk-e7f42gdj.js → chunk-7ez8ny0t.js} +2 -2
  19. package/dist/cli/{chunk-nn13znc2.js → chunk-88cpgt6h.js} +1 -1
  20. package/dist/cli/chunk-a9kptbw5.js +361 -0
  21. package/dist/cli/chunk-a9kptbw5.js.map +14 -0
  22. package/dist/cli/chunk-abh8yjkn.js +31 -0
  23. package/dist/cli/chunk-abh8yjkn.js.map +10 -0
  24. package/dist/cli/chunk-b5aj94ah.js +91 -0
  25. package/dist/cli/chunk-b5aj94ah.js.map +10 -0
  26. package/dist/cli/{chunk-b27xqwn9.js → chunk-bctazmbk.js} +9 -5
  27. package/dist/cli/chunk-bctazmbk.js.map +10 -0
  28. package/dist/cli/chunk-beat36xx.js +279 -0
  29. package/dist/cli/chunk-beat36xx.js.map +10 -0
  30. package/dist/cli/chunk-bnbmcwfb.js +145 -0
  31. package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
  32. package/dist/cli/{chunk-0xjyb285.js → chunk-bw22s759.js} +15 -5
  33. package/dist/cli/{chunk-0xjyb285.js.map → chunk-bw22s759.js.map} +4 -4
  34. package/dist/cli/chunk-by2290sx.js +39 -0
  35. package/dist/cli/chunk-by2290sx.js.map +10 -0
  36. package/dist/cli/chunk-d1tadaw7.js +79 -0
  37. package/dist/cli/chunk-d1tadaw7.js.map +10 -0
  38. package/dist/cli/{chunk-ahnw3kxw.js → chunk-d80hr03s.js} +24 -19
  39. package/dist/cli/chunk-d80hr03s.js.map +15 -0
  40. package/dist/cli/chunk-ernrthtr.js +97 -0
  41. package/dist/cli/chunk-ernrthtr.js.map +10 -0
  42. package/dist/cli/chunk-f2972sbt.js +374 -0
  43. package/dist/cli/chunk-f2972sbt.js.map +10 -0
  44. package/dist/cli/{chunk-vacwm2hv.js → chunk-f7t03s3g.js} +2 -2
  45. package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
  46. package/dist/cli/chunk-fa25z98p.js.map +11 -0
  47. package/dist/cli/{chunk-cjtn640a.js → chunk-fh5hj5jt.js} +43 -20
  48. package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
  49. package/dist/cli/{chunk-yg63d42r.js → chunk-j8mw0za6.js} +86 -57
  50. package/dist/cli/chunk-j8mw0za6.js.map +35 -0
  51. package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
  52. package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
  53. package/dist/cli/{chunk-ps4m1xh4.js → chunk-mnqj32sj.js} +505 -542
  54. package/dist/cli/chunk-mnqj32sj.js.map +12 -0
  55. package/dist/cli/{chunk-8cjtbafj.js → chunk-mwt1k8n7.js} +100 -374
  56. package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
  57. package/dist/cli/chunk-nk3ts2xk.js +51 -0
  58. package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
  59. package/dist/cli/{chunk-3r45185y.js → chunk-pat2zzwc.js} +9 -11
  60. package/dist/cli/{chunk-3r45185y.js.map → chunk-pat2zzwc.js.map} +2 -2
  61. package/dist/cli/chunk-pnnvybbk.js +176 -0
  62. package/dist/cli/chunk-pnnvybbk.js.map +11 -0
  63. package/dist/cli/{chunk-4x36ddpw.js → chunk-sqn5t4q0.js} +81 -87
  64. package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
  65. package/dist/cli/{chunk-bvwwhd84.js → chunk-tzne8qfq.js} +15 -15
  66. package/dist/cli/{chunk-bvwwhd84.js.map → chunk-tzne8qfq.js.map} +1 -1
  67. package/dist/cli/chunk-xaz13gwg.js +12449 -0
  68. package/dist/cli/chunk-xaz13gwg.js.map +182 -0
  69. package/dist/cli/chunk-y3e45rc8.js +102 -0
  70. package/dist/cli/chunk-y3e45rc8.js.map +10 -0
  71. package/dist/cli/chunk-z01ze5c1.js +261 -0
  72. package/dist/cli/chunk-z01ze5c1.js.map +10 -0
  73. package/dist/cli/{chunk-k79xp7av.js → chunk-z1f5arsg.js} +219 -689
  74. package/dist/cli/chunk-z1f5arsg.js.map +36 -0
  75. package/dist/cli/{chunk-1jefwnfs.js → chunk-zg2gtj10.js} +1076 -2592
  76. package/dist/cli/chunk-zg2gtj10.js.map +35 -0
  77. package/dist/cli/{chunk-dwgcp5sm.js → chunk-zxccj738.js} +1 -1
  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.d.ts +368 -0
  85. package/dist/types/ai/changelog-markdown.d.ts +2 -0
  86. package/dist/types/ai/component-markdown.d.ts +2 -2
  87. package/dist/types/ai/index.d.ts +24 -0
  88. package/dist/types/ai/link-headers.d.ts +24 -0
  89. package/dist/types/ai/llms.d.ts +25 -0
  90. package/dist/types/ai/markdown.d.ts +45 -0
  91. package/dist/types/ai/mcp/discovery.d.ts +68 -0
  92. package/dist/types/ai/mcp/tools.d.ts +16 -0
  93. package/dist/types/ai/openapi-components.d.ts +43 -0
  94. package/dist/types/ai/relative-links.d.ts +26 -0
  95. package/dist/types/ai/serializers.d.ts +15 -0
  96. package/dist/types/ai/skills.d.ts +42 -0
  97. package/dist/types/ai/tar.d.ts +25 -0
  98. package/dist/types/ai/visibility.d.ts +17 -0
  99. package/dist/types/ai/web-bot-auth.d.ts +16 -0
  100. package/dist/types/analytics/adobe.d.ts +35 -0
  101. package/dist/types/analytics/amplitude.d.ts +50 -0
  102. package/dist/types/analytics/clarity.d.ts +31 -0
  103. package/dist/types/analytics/clearbit.d.ts +29 -0
  104. package/dist/types/analytics/cloudflare.d.ts +41 -0
  105. package/dist/types/analytics/fathom.d.ts +41 -0
  106. package/dist/types/analytics/google-analytics.d.ts +44 -0
  107. package/dist/types/analytics/google-tag-manager.d.ts +40 -0
  108. package/dist/types/analytics/head.d.ts +30 -0
  109. package/dist/types/analytics/heap.d.ts +40 -0
  110. package/dist/types/analytics/hightouch.d.ts +44 -0
  111. package/dist/types/analytics/hotjar.d.ts +33 -0
  112. package/dist/types/analytics/index.d.ts +61 -0
  113. package/dist/types/analytics/inline.d.ts +17 -0
  114. package/dist/types/analytics/logrocket.d.ts +44 -0
  115. package/dist/types/analytics/mixpanel.d.ts +67 -0
  116. package/dist/types/analytics/pirsch.d.ts +42 -0
  117. package/dist/types/analytics/plausible.d.ts +56 -0
  118. package/dist/types/analytics/posthog.d.ts +45 -0
  119. package/dist/types/analytics/schema.d.ts +320 -0
  120. package/dist/types/analytics/script.d.ts +46 -0
  121. package/dist/types/analytics/segment.d.ts +50 -0
  122. package/dist/types/analytics/vercel.d.ts +48 -0
  123. package/dist/types/astro/integration.d.ts +76 -0
  124. package/dist/types/astro/markdown-negotiation.d.ts +23 -0
  125. package/dist/types/astro/module-types.d.ts +14 -0
  126. package/dist/types/astro/pages.d.ts +44 -0
  127. package/dist/types/cli/env.d.ts +12 -0
  128. package/dist/types/cli/init/scaffold.d.ts +154 -0
  129. package/dist/types/components/layout/nav-utils.d.ts +11 -0
  130. package/dist/types/core/adapter.d.ts +47 -0
  131. package/dist/types/core/api-name.d.ts +7 -0
  132. package/dist/types/core/changelog-index.d.ts +13 -0
  133. package/dist/types/core/config-input.d.ts +186 -515
  134. package/dist/types/core/config.d.ts +60 -34
  135. package/dist/types/core/content-assets.d.ts +76 -0
  136. package/dist/types/core/custom-pages.d.ts +33 -0
  137. package/dist/types/core/data.d.ts +27 -12
  138. package/dist/types/core/define-components.d.ts +12 -9
  139. package/dist/types/core/deployment-env.d.ts +6 -11
  140. package/dist/types/core/frontmatter.d.ts +10 -0
  141. package/dist/types/core/graph.d.ts +18 -0
  142. package/dist/types/core/heading-markers.d.ts +54 -0
  143. package/dist/types/core/i18n-ui.d.ts +6 -2
  144. package/dist/types/core/i18n.d.ts +87 -0
  145. package/dist/types/core/includes.d.ts +138 -0
  146. package/dist/types/core/last-modified.d.ts +47 -0
  147. package/dist/types/core/links.d.ts +95 -0
  148. package/dist/types/core/locale-links.d.ts +60 -0
  149. package/dist/types/core/manifest.d.ts +17 -0
  150. package/dist/types/core/meta.d.ts +38 -0
  151. package/dist/types/core/nav-diagnostics.d.ts +26 -0
  152. package/dist/types/core/navigation.d.ts +6 -0
  153. package/dist/types/core/node-require.d.ts +19 -0
  154. package/dist/types/core/package-json.d.ts +13 -0
  155. package/dist/types/core/probe.d.ts +42 -0
  156. package/dist/types/core/project-graph.d.ts +51 -0
  157. package/dist/types/core/project.d.ts +2 -0
  158. package/dist/types/core/safe-href.d.ts +2 -0
  159. package/dist/types/core/safe-links.d.ts +26 -0
  160. package/dist/types/core/schema.d.ts +2282 -452
  161. package/dist/types/core/site-url.d.ts +16 -0
  162. package/dist/types/core/sources/assets.d.ts +36 -0
  163. package/dist/types/core/sources/cache.d.ts +37 -0
  164. package/dist/types/core/sources/collection.d.ts +28 -0
  165. package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
  166. package/dist/types/core/sources/contentful.d.ts +40 -0
  167. package/dist/types/core/sources/filesystem.d.ts +24 -0
  168. package/dist/types/core/sources/github-releases.d.ts +31 -0
  169. package/dist/types/core/sources/json.d.ts +30 -0
  170. package/dist/types/core/sources/lexical.d.ts +19 -0
  171. package/dist/types/core/sources/lower.d.ts +75 -0
  172. package/dist/types/core/sources/mdx-remote.d.ts +28 -0
  173. package/dist/types/core/sources/normalize.d.ts +147 -0
  174. package/dist/types/core/sources/notion.d.ts +131 -0
  175. package/dist/types/core/sources/obsidian.d.ts +46 -0
  176. package/dist/types/core/sources/payload.d.ts +39 -0
  177. package/dist/types/core/sources/portable-text.d.ts +42 -0
  178. package/dist/types/core/sources/read.d.ts +23 -0
  179. package/dist/types/core/sources/remote.d.ts +74 -0
  180. package/dist/types/core/sources/resolve.d.ts +19 -0
  181. package/dist/types/core/sources/sanity.d.ts +43 -0
  182. package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
  183. package/dist/types/core/sources/strapi.d.ts +33 -0
  184. package/dist/types/core/sources/types.d.ts +7 -0
  185. package/dist/types/core/sources/watch.d.ts +45 -0
  186. package/dist/types/core/text-width.d.ts +11 -0
  187. package/dist/types/core/types.d.ts +15 -1
  188. package/dist/types/core/unrecognized-keys.d.ts +7 -0
  189. package/dist/types/core/versions.d.ts +72 -0
  190. package/dist/types/core/yaml.d.ts +9 -0
  191. package/dist/types/deploy/adapter-output.d.ts +45 -0
  192. package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
  193. package/dist/types/deploy/adapters/index.d.ts +29 -0
  194. package/dist/types/deploy/adapters/netlify.d.ts +37 -0
  195. package/dist/types/deploy/adapters/node.d.ts +37 -0
  196. package/dist/types/deploy/adapters/registry.d.ts +133 -0
  197. package/dist/types/deploy/adapters/types.d.ts +71 -0
  198. package/dist/types/deploy/adapters/vercel.d.ts +38 -0
  199. package/dist/types/deploy/artifacts.d.ts +65 -0
  200. package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
  201. package/dist/types/deploy/function-bundle.d.ts +80 -0
  202. package/dist/types/deploy/headers.d.ts +50 -0
  203. package/dist/types/deploy/node-headers.d.ts +42 -0
  204. package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
  205. package/dist/types/deploy/platforms/index.d.ts +18 -0
  206. package/dist/types/deploy/platforms/netlify.d.ts +13 -0
  207. package/dist/types/deploy/platforms/node.d.ts +11 -0
  208. package/dist/types/deploy/platforms/paths.d.ts +27 -0
  209. package/dist/types/deploy/platforms/static.d.ts +10 -0
  210. package/dist/types/deploy/platforms/types.d.ts +104 -0
  211. package/dist/types/deploy/platforms/vercel.d.ts +32 -0
  212. package/dist/types/deploy/redirects.d.ts +53 -0
  213. package/dist/types/deploy/robots.d.ts +8 -0
  214. package/dist/types/deploy/rss.d.ts +31 -0
  215. package/dist/types/deploy/sitemap.d.ts +21 -0
  216. package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
  217. package/dist/types/markdown/code-title.d.ts +32 -0
  218. package/dist/types/markdown/fence-meta.d.ts +23 -0
  219. package/dist/types/markdown/themes.d.ts +3 -3
  220. package/dist/types/openapi/asyncapi.d.ts +129 -0
  221. package/dist/types/openapi/graphql-build.d.ts +8 -0
  222. package/dist/types/openapi/graphql.d.ts +122 -0
  223. package/dist/types/openapi/model.d.ts +158 -0
  224. package/dist/types/openapi/parse.d.ts +57 -0
  225. package/dist/types/openapi/references.d.ts +37 -25
  226. package/dist/types/openapi/render-mdx.d.ts +33 -0
  227. package/dist/types/openapi/sentence.d.ts +7 -0
  228. package/dist/types/openapi/signature.d.ts +10 -0
  229. package/dist/types/openapi/source.d.ts +22 -0
  230. package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
  231. package/dist/types/reference/asyncapi.d.ts +166 -0
  232. package/dist/types/reference/graphql.d.ts +181 -0
  233. package/dist/types/reference/index.d.ts +32 -0
  234. package/dist/types/reference/openapi.d.ts +165 -0
  235. package/dist/types/reference/options.d.ts +157 -0
  236. package/dist/types/reference/scalar.d.ts +136 -0
  237. package/dist/types/reference/schema.d.ts +630 -0
  238. package/dist/types/search/adapters/algolia.d.ts +32 -0
  239. package/dist/types/search/adapters/flexsearch.d.ts +12 -0
  240. package/dist/types/search/adapters/index.d.ts +31 -0
  241. package/dist/types/search/adapters/mixedbread.d.ts +22 -0
  242. package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
  243. package/dist/types/search/adapters/orama.d.ts +13 -0
  244. package/dist/types/search/adapters/pagefind.d.ts +12 -0
  245. package/dist/types/search/adapters/registry.d.ts +228 -0
  246. package/dist/types/search/adapters/types.d.ts +34 -0
  247. package/dist/types/search/adapters/typesense.d.ts +42 -0
  248. package/dist/types/search/build.d.ts +23 -0
  249. package/dist/types/search/documents.d.ts +90 -0
  250. package/dist/types/search/facets.d.ts +3 -0
  251. package/dist/types/search/sync/algolia.d.ts +14 -0
  252. package/dist/types/search/sync/index.d.ts +14 -0
  253. package/dist/types/search/sync/orama-cloud.d.ts +10 -0
  254. package/dist/types/search/sync/typesense.d.ts +14 -0
  255. package/dist/types/sources/contentful.d.ts +68 -0
  256. package/dist/types/sources/custom.d.ts +20 -0
  257. package/dist/types/sources/filesystem.d.ts +42 -0
  258. package/dist/types/sources/github-releases.d.ts +46 -0
  259. package/dist/types/sources/index.d.ts +48 -0
  260. package/dist/types/sources/mdx-remote.d.ts +63 -0
  261. package/dist/types/sources/notion.d.ts +65 -0
  262. package/dist/types/sources/obsidian.d.ts +34 -0
  263. package/dist/types/sources/payload.d.ts +68 -0
  264. package/dist/types/sources/registry.d.ts +1414 -0
  265. package/dist/types/sources/sanity.d.ts +69 -0
  266. package/dist/types/sources/shared.d.ts +46 -0
  267. package/dist/types/sources/strapi.d.ts +66 -0
  268. package/dist/types/theme/icon-kind.d.ts +11 -0
  269. package/dist/types/theme/icons.d.ts +20 -0
  270. package/docs/01-quickstart.mdx +18 -18
  271. package/docs/02-deployment.mdx +50 -26
  272. package/docs/03-upgrading.mdx +351 -0
  273. package/docs/04-migrating.mdx +58 -0
  274. package/docs/08-faq.mdx +3 -3
  275. package/docs/advanced/blog.mdx +13 -6
  276. package/docs/advanced/changelog.mdx +23 -35
  277. package/docs/advanced/custom-pages.mdx +20 -8
  278. package/docs/advanced/meta.ts +1 -8
  279. package/docs/advanced/skills.mdx +8 -0
  280. package/docs/cli/audit.mdx +646 -0
  281. package/docs/cli/doctor.mdx +29 -0
  282. package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
  283. package/docs/cli/index.mdx +105 -0
  284. package/docs/cli/meta.ts +7 -0
  285. package/docs/{reference → cli}/translate.mdx +1 -1
  286. package/docs/cli/validate.mdx +41 -0
  287. package/docs/cli/version.mdx +40 -0
  288. package/docs/configuration/analytics.mdx +350 -59
  289. package/docs/configuration/ask-ai.mdx +162 -61
  290. package/docs/configuration/customization.mdx +15 -9
  291. package/docs/configuration/index.mdx +50 -31
  292. package/docs/configuration/search.mdx +75 -54
  293. package/docs/configuration/theming.mdx +24 -15
  294. package/docs/content/components.mdx +21 -5
  295. package/docs/{reference → content}/frontmatter.mdx +35 -1
  296. package/docs/content/i18n.mdx +8 -6
  297. package/docs/content/includes.mdx +2 -4
  298. package/docs/content/index.mdx +1 -1
  299. package/docs/content/islands.mdx +10 -5
  300. package/docs/content/meta.mdx +1 -1
  301. package/docs/content/meta.ts +1 -0
  302. package/docs/content/navigation.mdx +9 -7
  303. package/docs/content/sources.mdx +145 -50
  304. package/docs/content/syntax.mdx +16 -12
  305. package/docs/content/versioning.mdx +3 -3
  306. package/docs/discoverability/agent-discovery.mdx +11 -11
  307. package/docs/discoverability/index.mdx +4 -4
  308. package/docs/discoverability/json-api.mdx +4 -4
  309. package/docs/discoverability/llms-txt.mdx +6 -6
  310. package/docs/discoverability/markdown.mdx +4 -4
  311. package/docs/discoverability/mcp.mdx +11 -11
  312. package/docs/discoverability/sitemap-and-robots.mdx +3 -3
  313. package/docs/index.mdx +2 -2
  314. package/docs/references/asyncapi.mdx +59 -0
  315. package/docs/{advanced → references}/graphql.mdx +45 -32
  316. package/docs/{reference → references}/meta.ts +2 -2
  317. package/docs/references/openapi.mdx +171 -0
  318. package/docs/references/scalar.mdx +64 -0
  319. package/package.json +42 -8
  320. package/skills/blume/SKILL.md +21 -8
  321. package/skills/blume-migrate/SKILL.md +22 -21
  322. package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
  323. package/skills/blume-migrate/references/docusaurus.md +5 -4
  324. package/skills/blume-migrate/references/fumadocs.md +4 -4
  325. package/skills/blume-migrate/references/mintlify.md +23 -8
  326. package/skills/blume-migrate/references/monorepo.md +6 -6
  327. package/skills/blume-migrate/references/starlight.md +4 -4
  328. package/src/ai/agent-readability.ts +21 -22
  329. package/src/ai/ai-catalog.ts +50 -32
  330. package/src/ai/api/handlers.ts +46 -11
  331. package/src/ai/api-catalog.ts +8 -8
  332. package/src/ai/ask-data.ts +1 -1
  333. package/src/ai/ask.ts +624 -100
  334. package/src/ai/changelog-markdown.ts +91 -0
  335. package/src/ai/component-markdown.ts +328 -12
  336. package/src/ai/index.ts +45 -0
  337. package/src/ai/link-headers.ts +7 -6
  338. package/src/ai/llms.ts +20 -15
  339. package/src/ai/markdown.ts +35 -5
  340. package/src/ai/mcp/data.ts +9 -5
  341. package/src/ai/openapi-components.ts +4 -1
  342. package/src/ai/relative-links.ts +170 -0
  343. package/src/ai/serializers.ts +2 -2
  344. package/src/ai/skills.ts +1 -1
  345. package/src/ai/web-bot-auth.ts +2 -2
  346. package/src/analytics/adobe.ts +46 -0
  347. package/src/analytics/amplitude.ts +79 -0
  348. package/src/analytics/clarity.ts +46 -0
  349. package/src/analytics/clearbit.ts +47 -0
  350. package/src/analytics/cloudflare.ts +67 -0
  351. package/src/analytics/fathom.ts +64 -0
  352. package/src/analytics/google-analytics.ts +84 -0
  353. package/src/analytics/google-tag-manager.ts +61 -0
  354. package/src/analytics/head.ts +130 -0
  355. package/src/analytics/heap.ts +65 -0
  356. package/src/analytics/hightouch.ts +77 -0
  357. package/src/analytics/hotjar.ts +47 -0
  358. package/src/analytics/index.ts +71 -0
  359. package/src/analytics/inline.ts +21 -0
  360. package/src/analytics/logrocket.ts +71 -0
  361. package/src/analytics/mixpanel.ts +92 -0
  362. package/src/analytics/pirsch.ts +66 -0
  363. package/src/analytics/plausible.ts +83 -0
  364. package/src/analytics/posthog.ts +78 -0
  365. package/src/analytics/schema.ts +60 -0
  366. package/src/analytics/script.ts +60 -0
  367. package/src/analytics/segment.ts +85 -0
  368. package/src/analytics/vercel.ts +50 -0
  369. package/src/astro/adapter-root.ts +7 -9
  370. package/src/astro/component-slots.ts +131 -91
  371. package/src/astro/generate.ts +112 -345
  372. package/src/astro/integration.ts +2 -6
  373. package/src/astro/pages.ts +13 -101
  374. package/src/astro/render-deps.ts +379 -0
  375. package/src/astro/runtime-deps.ts +201 -0
  376. package/src/astro/templates.ts +554 -541
  377. package/src/audit/agent.ts +24 -0
  378. package/src/audit/catalog.ts +2 -2
  379. package/src/audit/checks/assets.ts +2 -2
  380. package/src/audit/checks/dns-aid.ts +1 -1
  381. package/src/audit/checks/duplicates.ts +3 -1
  382. package/src/audit/checks/i18n.ts +1 -1
  383. package/src/audit/checks/indexability.ts +7 -7
  384. package/src/audit/checks/links.ts +2 -2
  385. package/src/audit/checks/llms.ts +6 -6
  386. package/src/audit/checks/network.ts +3 -3
  387. package/src/audit/checks/og-image.ts +2 -2
  388. package/src/audit/checks/robots.ts +1 -1
  389. package/src/audit/checks/sitemap.ts +2 -2
  390. package/src/audit/checks/social.ts +1 -1
  391. package/src/audit/run.ts +4 -3
  392. package/src/audit/terms.ts +31 -0
  393. package/src/audit/url.ts +13 -13
  394. package/src/cli/command-meta.ts +10 -0
  395. package/src/cli/commands/audit.ts +39 -20
  396. package/src/cli/commands/build.ts +71 -316
  397. package/src/cli/commands/check.ts +1 -0
  398. package/src/cli/commands/dev.ts +40 -1
  399. package/src/cli/commands/doctor.ts +90 -14
  400. package/src/cli/commands/eject.ts +44 -7
  401. package/src/cli/commands/eval.ts +2 -2
  402. package/src/cli/commands/init.ts +161 -41
  403. package/src/cli/commands/migrate.ts +121 -0
  404. package/src/cli/commands/preview.ts +7 -1
  405. package/src/cli/commands/translate.ts +2 -2
  406. package/src/cli/commands/upgrade.ts +141 -0
  407. package/src/cli/commands/version.ts +57 -44
  408. package/src/cli/eject-scripts.ts +121 -6
  409. package/src/cli/index.ts +11 -1
  410. package/src/cli/init/install.ts +70 -0
  411. package/src/cli/init/questions.ts +7 -0
  412. package/src/cli/init/scaffold.ts +459 -75
  413. package/src/cli/lazy-command.ts +37 -1
  414. package/src/cli/prepare.ts +40 -6
  415. package/src/cli/required-secrets.ts +38 -11
  416. package/src/cli/unknown-flags.ts +266 -0
  417. package/src/cli/yarn-pnp.ts +52 -0
  418. package/src/components/content/AccordionItem.astro +7 -1
  419. package/src/components/content/Card.astro +4 -3
  420. package/src/components/content/ColorItem.astro +22 -4
  421. package/src/components/content/GithubInfo.astro +2 -2
  422. package/src/components/content/Prompt.astro +25 -25
  423. package/src/components/content/Tabs.astro +3 -1
  424. package/src/components/content/Tile.astro +2 -3
  425. package/src/components/content/Tooltip.astro +57 -9
  426. package/src/components/content/content-strings.ts +34 -0
  427. package/src/components/content/diff.ts +1 -1
  428. package/src/components/content/mermaid-element.ts +13 -2
  429. package/src/components/content/prompt-markdown.ts +292 -0
  430. package/src/components/content/tooltip-id.ts +41 -0
  431. package/src/components/islands/hooks.ts +25 -2
  432. package/src/components/layout/Analytics.astro +21 -79
  433. package/src/components/layout/Banner.astro +3 -1
  434. package/src/components/layout/DiscoveryLinks.astro +69 -0
  435. package/src/components/layout/Header.astro +83 -20
  436. package/src/components/layout/LanguageSwitcher.astro +4 -1
  437. package/src/components/layout/Logo.astro +23 -2
  438. package/src/components/layout/NavSelector.astro +13 -2
  439. package/src/components/layout/NavTree.astro +12 -3
  440. package/src/components/layout/NavTreeScript.astro +17 -3
  441. package/src/components/layout/PageActions.astro +3 -3
  442. package/src/components/layout/PageFeedback.astro +11 -1
  443. package/src/components/layout/PageLayout.astro +52 -5
  444. package/src/components/layout/ReferenceLayout.astro +21 -12
  445. package/src/components/layout/RootLayout.astro +69 -66
  446. package/src/components/layout/Search.astro +30 -6
  447. package/src/components/layout/WebMcp.astro +1 -1
  448. package/src/components/layout/analytics-client.ts +72 -15
  449. package/src/components/layout/drawer-inert.ts +113 -15
  450. package/src/components/layout/dropdown-clamp.ts +105 -0
  451. package/src/components/layout/head-scripts.ts +15 -6
  452. package/src/components/layout/nav-utils.ts +17 -0
  453. package/src/components/layout/search/algolia.ts +8 -8
  454. package/src/components/layout/search/orama-cloud.ts +9 -7
  455. package/src/components/layout/search/typesense.ts +11 -17
  456. package/src/components/openapi/MessageComposer.astro +2 -2
  457. package/src/components/openapi/Playground.astro +2 -2
  458. package/src/components/openapi/playground-client.ts +79 -10
  459. package/src/core/changelog-index.ts +24 -0
  460. package/src/core/component-overrides.ts +399 -154
  461. package/src/core/config-input.ts +188 -553
  462. package/src/core/config.ts +130 -41
  463. package/src/core/custom-pages.ts +105 -0
  464. package/src/core/data.ts +31 -12
  465. package/src/core/define-components.ts +12 -9
  466. package/src/core/deployment-env.ts +18 -74
  467. package/src/core/diagnostics.ts +14 -7
  468. package/src/core/graph.ts +69 -25
  469. package/src/core/i18n-ui.ts +6 -2
  470. package/src/core/i18n.ts +17 -0
  471. package/src/core/includes.ts +156 -38
  472. package/src/core/last-modified.ts +6 -11
  473. package/src/core/links.ts +166 -2
  474. package/src/core/manifest.ts +10 -3
  475. package/src/core/navigation.ts +115 -16
  476. package/src/core/new-tab.ts +35 -0
  477. package/src/core/node-require.ts +21 -0
  478. package/src/core/project-graph.ts +42 -26
  479. package/src/core/project.ts +9 -4
  480. package/src/core/request-body.ts +61 -0
  481. package/src/core/safe-href.ts +28 -0
  482. package/src/core/safe-links.ts +68 -0
  483. package/src/core/schema.ts +517 -739
  484. package/src/core/server-features.ts +8 -9
  485. package/src/core/sources/assets.ts +47 -11
  486. package/src/core/sources/collection.ts +67 -0
  487. package/src/core/sources/contentful-rich-text.ts +285 -0
  488. package/src/core/sources/contentful.ts +173 -0
  489. package/src/core/sources/github-releases.ts +51 -1
  490. package/src/core/sources/json.ts +71 -0
  491. package/src/core/sources/lexical.ts +195 -0
  492. package/src/core/sources/lower.ts +226 -0
  493. package/src/core/sources/normalize.ts +52 -2
  494. package/src/core/sources/notion.ts +39 -28
  495. package/src/core/sources/payload.ts +135 -0
  496. package/src/core/sources/portable-text.ts +11 -16
  497. package/src/core/sources/remote.ts +226 -0
  498. package/src/core/sources/resolve.ts +104 -166
  499. package/src/core/sources/sanity.ts +16 -49
  500. package/src/core/sources/strapi-blocks.ts +124 -0
  501. package/src/core/sources/strapi.ts +191 -0
  502. package/src/core/sources/types.ts +12 -1
  503. package/src/core/types.ts +15 -1
  504. package/src/core/ui-packs/ar.ts +6 -2
  505. package/src/core/ui-packs/bg.ts +6 -2
  506. package/src/core/ui-packs/bn.ts +6 -2
  507. package/src/core/ui-packs/ca.ts +3 -1
  508. package/src/core/ui-packs/cs.ts +6 -2
  509. package/src/core/ui-packs/da.ts +6 -2
  510. package/src/core/ui-packs/de.ts +6 -2
  511. package/src/core/ui-packs/el.ts +3 -1
  512. package/src/core/ui-packs/es.ts +3 -1
  513. package/src/core/ui-packs/fa.ts +6 -2
  514. package/src/core/ui-packs/fi.ts +6 -2
  515. package/src/core/ui-packs/fr.ts +3 -1
  516. package/src/core/ui-packs/he.ts +6 -2
  517. package/src/core/ui-packs/hi.ts +6 -2
  518. package/src/core/ui-packs/hr.ts +6 -2
  519. package/src/core/ui-packs/hu.ts +6 -2
  520. package/src/core/ui-packs/id.ts +6 -2
  521. package/src/core/ui-packs/it.ts +3 -1
  522. package/src/core/ui-packs/ja.ts +3 -1
  523. package/src/core/ui-packs/ko.ts +3 -1
  524. package/src/core/ui-packs/nl.ts +6 -2
  525. package/src/core/ui-packs/no.ts +6 -2
  526. package/src/core/ui-packs/pl.ts +6 -2
  527. package/src/core/ui-packs/pt-br.ts +3 -1
  528. package/src/core/ui-packs/pt.ts +3 -1
  529. package/src/core/ui-packs/ro.ts +6 -2
  530. package/src/core/ui-packs/ru.ts +6 -2
  531. package/src/core/ui-packs/sk.ts +6 -2
  532. package/src/core/ui-packs/sr.ts +6 -2
  533. package/src/core/ui-packs/sv.ts +6 -2
  534. package/src/core/ui-packs/th.ts +3 -1
  535. package/src/core/ui-packs/tr.ts +6 -2
  536. package/src/core/ui-packs/uk.ts +6 -2
  537. package/src/core/ui-packs/vi.ts +3 -1
  538. package/src/core/ui-packs/zh-tw.ts +3 -1
  539. package/src/core/ui-packs/zh.ts +3 -1
  540. package/src/core/unrecognized-keys.ts +10 -0
  541. package/src/core/version-cut.ts +116 -8
  542. package/src/deploy/adapter-output.ts +57 -97
  543. package/src/deploy/adapters/cloudflare.ts +39 -0
  544. package/src/deploy/adapters/index.ts +41 -0
  545. package/src/deploy/adapters/netlify.ts +34 -0
  546. package/src/deploy/adapters/node.ts +34 -0
  547. package/src/deploy/adapters/registry.ts +127 -0
  548. package/src/deploy/adapters/types.ts +92 -0
  549. package/src/deploy/adapters/vercel.ts +35 -0
  550. package/src/deploy/artifacts.ts +55 -27
  551. package/src/deploy/cloudflare-negotiation.ts +179 -100
  552. package/src/deploy/function-bundle.ts +18 -3
  553. package/src/deploy/headers.ts +124 -23
  554. package/src/deploy/node-headers.ts +198 -0
  555. package/src/deploy/platforms/cloudflare.ts +312 -0
  556. package/src/deploy/platforms/index.ts +67 -0
  557. package/src/deploy/platforms/netlify.ts +52 -0
  558. package/src/deploy/platforms/node.ts +40 -0
  559. package/src/deploy/platforms/paths.ts +42 -0
  560. package/src/deploy/platforms/static.ts +29 -0
  561. package/src/deploy/platforms/types.ts +112 -0
  562. package/src/deploy/platforms/vercel.ts +193 -0
  563. package/src/deploy/redirects.ts +30 -18
  564. package/src/deploy/robots.ts +3 -3
  565. package/src/deploy/rss.ts +2 -2
  566. package/src/deploy/sitemap.ts +2 -2
  567. package/src/deploy/vercel-negotiation.ts +2 -2
  568. package/src/eval/agents.ts +32 -1
  569. package/src/eval/findings.ts +19 -11
  570. package/src/eval/report.ts +10 -2
  571. package/src/markdown/external-links.ts +65 -0
  572. package/src/markdown/include.ts +45 -27
  573. package/src/markdown/index.ts +34 -9
  574. package/src/markdown/inline-code.ts +12 -6
  575. package/src/markdown/relative-links.ts +324 -0
  576. package/src/markdown/themes.ts +3 -3
  577. package/src/migrate/migrate.ts +149 -0
  578. package/src/openapi/parse.ts +64 -16
  579. package/src/openapi/proxy.ts +62 -10
  580. package/src/openapi/references.ts +147 -147
  581. package/src/openapi/render-mdx.ts +32 -10
  582. package/src/openapi/scalar.ts +15 -13
  583. package/src/openapi/sentence.ts +14 -0
  584. package/src/openapi/source.ts +37 -21
  585. package/src/openapi/spec-dependency-error.ts +15 -0
  586. package/src/reference/asyncapi.ts +83 -0
  587. package/src/reference/graphql.ts +89 -0
  588. package/src/reference/index.ts +40 -0
  589. package/src/reference/openapi.ts +83 -0
  590. package/src/reference/options.ts +201 -0
  591. package/src/reference/scalar.ts +136 -0
  592. package/src/reference/schema.ts +88 -0
  593. package/src/registry/eject.ts +97 -42
  594. package/src/search/adapters/algolia.ts +46 -0
  595. package/src/search/adapters/flexsearch.ts +29 -0
  596. package/src/search/adapters/index.ts +39 -0
  597. package/src/search/adapters/mixedbread.ts +39 -0
  598. package/src/search/adapters/orama-cloud.ts +51 -0
  599. package/src/search/adapters/orama.ts +24 -0
  600. package/src/search/adapters/pagefind.ts +27 -0
  601. package/src/search/adapters/registry.ts +131 -0
  602. package/src/search/adapters/types.ts +46 -0
  603. package/src/search/adapters/typesense.ts +57 -0
  604. package/src/search/build.ts +8 -4
  605. package/src/search/documents.ts +6 -0
  606. package/src/search/sync/algolia.ts +12 -11
  607. package/src/search/sync/index.ts +35 -20
  608. package/src/search/sync/orama-cloud.ts +12 -9
  609. package/src/search/sync/typesense.ts +15 -13
  610. package/src/sources/contentful.ts +63 -0
  611. package/src/sources/custom.ts +38 -0
  612. package/src/sources/filesystem.ts +51 -0
  613. package/src/sources/github-releases.ts +52 -0
  614. package/src/sources/index.ts +60 -0
  615. package/src/sources/mdx-remote.ts +76 -0
  616. package/src/sources/notion.ts +63 -0
  617. package/src/sources/obsidian.ts +38 -0
  618. package/src/sources/payload.ts +60 -0
  619. package/src/sources/registry.ts +182 -0
  620. package/src/sources/sanity.ts +66 -0
  621. package/src/sources/shared.ts +52 -0
  622. package/src/sources/strapi.ts +58 -0
  623. package/src/theme/entry.ts +24 -2
  624. package/src/translate/report.ts +40 -7
  625. package/src/upgrade/upgrade.ts +499 -0
  626. package/dist/cli/chunk-0qymqwzz.js +0 -164
  627. package/dist/cli/chunk-0qymqwzz.js.map +0 -15
  628. package/dist/cli/chunk-1jefwnfs.js.map +0 -48
  629. package/dist/cli/chunk-2mzebbbz.js +0 -69
  630. package/dist/cli/chunk-2z47ypj8.js.map +0 -11
  631. package/dist/cli/chunk-4x36ddpw.js.map +0 -11
  632. package/dist/cli/chunk-5093q3n7.js +0 -68
  633. package/dist/cli/chunk-5093q3n7.js.map +0 -10
  634. package/dist/cli/chunk-5qk08vmp.js.map +0 -11
  635. package/dist/cli/chunk-7s8hm3b6.js +0 -5347
  636. package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
  637. package/dist/cli/chunk-8cjtbafj.js.map +0 -13
  638. package/dist/cli/chunk-97r59kpr.js +0 -381
  639. package/dist/cli/chunk-97r59kpr.js.map +0 -12
  640. package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
  641. package/dist/cli/chunk-b27xqwn9.js.map +0 -10
  642. package/dist/cli/chunk-bf6bt1xt.js +0 -185
  643. package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
  644. package/dist/cli/chunk-cjtn640a.js.map +0 -10
  645. package/dist/cli/chunk-ct47dqpx.js.map +0 -11
  646. package/dist/cli/chunk-esphfr8p.js +0 -107
  647. package/dist/cli/chunk-esphfr8p.js.map +0 -11
  648. package/dist/cli/chunk-ex56aa81.js +0 -1016
  649. package/dist/cli/chunk-ex56aa81.js.map +0 -13
  650. package/dist/cli/chunk-garjf5z9.js +0 -30
  651. package/dist/cli/chunk-garjf5z9.js.map +0 -10
  652. package/dist/cli/chunk-js7saxwm.js +0 -1045
  653. package/dist/cli/chunk-js7saxwm.js.map +0 -22
  654. package/dist/cli/chunk-k79xp7av.js.map +0 -39
  655. package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
  656. package/dist/cli/chunk-q4rae3bg.js +0 -60
  657. package/dist/cli/chunk-q4rae3bg.js.map +0 -10
  658. package/dist/cli/chunk-rz9jmfhz.js +0 -108
  659. package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
  660. package/dist/cli/chunk-vh9w1sgp.js +0 -73
  661. package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
  662. package/dist/cli/chunk-vrfp10qk.js +0 -81
  663. package/dist/cli/chunk-vrfp10qk.js.map +0 -10
  664. package/dist/cli/chunk-yg63d42r.js.map +0 -34
  665. package/docs/advanced/api-reference.mdx +0 -240
  666. package/docs/reference/cli.mdx +0 -197
  667. package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
  668. package/src/components/content/changelog-element.ts +0 -69
  669. package/src/search/providers.ts +0 -91
  670. /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-7ez8ny0t.js.map} +0 -0
  671. /package/dist/cli/{chunk-nn13znc2.js.map → chunk-88cpgt6h.js.map} +0 -0
  672. /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-f7t03s3g.js.map} +0 -0
  673. /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-zxccj738.js.map} +0 -0
@@ -0,0 +1,42 @@
1
+ import type { ResolvedConfig } from "../core/schema.ts";
2
+ import type { SkillArtifact } from "./skills.ts";
3
+ /**
4
+ * The AI Catalog (Agent-Card/ai-catalog data model, `specVersion` 1.0) at
5
+ * `/.well-known/ai-catalog.json`, which is also the Agentic Resource
6
+ * Discovery (ARD) manifest: one entry per agent-facing resource the site
7
+ * publishes, each an `urn:air:<host>:<namespace>:<name>` identifier, a
8
+ * display name, the artifact's media type, a URL, and the
9
+ * `representativeQueries` registries embed for semantic search. Like the
10
+ * RFC 9727 catalog next to it, everything is derived from `blume.config.ts`
11
+ * and the build's published skills — nothing is hand-written.
12
+ *
13
+ * ARD v0.91 moved its manifest to `/.well-known/ard.json` and calls
14
+ * `ai-catalog.json` the predecessor path that consumers only *may* consult,
15
+ * while the ai-catalog spec and today's agent-readiness scanners key on
16
+ * `ai-catalog.json`. The ARD manifest is just an `entries` array (other
17
+ * members are ignored), so the one document is written to both paths.
18
+ *
19
+ * Served as plain `application/json`: the `.json` extension gets it from
20
+ * every static host with no header rule, and the scanners that gate on the
21
+ * file ask for exactly that type. The registered `application/ai-catalog+json`
22
+ * is what the `Link`/`<link>` advertisements declare the document to be.
23
+ */
24
+ export declare const AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
25
+ export declare const ARD_MANIFEST_PATH = "/.well-known/ard.json";
26
+ export declare const AI_CATALOG_TYPE = "application/ai-catalog+json";
27
+ /**
28
+ * Whether the site publishes a catalog: the feature is on, a `deployment.site`
29
+ * anchors the identifiers, and at least one entry exists. Every entry source
30
+ * is a config flag, so the answer needs no build output — the same gate the
31
+ * header rules, the `Link` header, and the head links read.
32
+ */
33
+ export declare const hasAiCatalog: (config: ResolvedConfig) => boolean;
34
+ /**
35
+ * The `.well-known` documents agent registries fetch cross-origin (browser
36
+ * agents, hosted registries reading through a page). Each needs
37
+ * `Access-Control-Allow-Origin: *` on the static surface; the MCP endpoint
38
+ * itself already sets it at runtime.
39
+ */
40
+ export declare const crossOriginDiscoveryPaths: (config: ResolvedConfig) => string[];
41
+ /** The catalog document, or null when the site publishes none. */
42
+ export declare const buildAiCatalog: (config: ResolvedConfig, skills: readonly SkillArtifact[]) => string | null;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Where the JSON docs API and its OpenAPI description are served. Base-less
3
+ * (like every route Blume emits); callers layer `deployment.base` on top.
4
+ * Under `/api/` alongside the Ask AI endpoint (`/api/ask`) so the namespace a
5
+ * Blume site reserves for live endpoints stays one prefix, and under its own
6
+ * `docs` segment so a search provider's proxy at `/api/search` never collides.
7
+ */
8
+ export declare const OPENAPI_PATH = "/openapi.json";
9
+ export declare const API_BASE = "/api/docs";
10
+ export declare const API_PAGES_PATH = "/api/docs/pages.json";
11
+ export declare const API_PAGE_PATH = "/api/docs/pages/{route}.json";
12
+ export declare const API_NAVIGATION_PATH = "/api/docs/navigation.json";
13
+ export declare const API_SEARCH_PATH = "/api/docs/search";
14
+ /** The `pages/{route}.json` path segment for a route (`index` for home). */
15
+ export declare const pageParam: (route: string) => string;
16
+ /** The base-less served path of a route's per-page JSON document. */
17
+ export declare const pageJsonPath: (route: string) => string;
@@ -0,0 +1,18 @@
1
+ import type { ResolvedConfig } from "../core/schema.ts";
2
+ /**
3
+ * RFC 9727 API catalog: a linkset (RFC 9264) at `/.well-known/api-catalog`
4
+ * enumerating the APIs a publisher offers, so agents can discover them from
5
+ * the domain alone. Blume already knows the site's APIs — the configured
6
+ * OpenAPI/AsyncAPI references and the hosted MCP server — so the catalog is
7
+ * generated, never hand-written: one entry per API, anchored at its docs
8
+ * route (the RFC's own examples anchor on developer-portal pages), with
9
+ * `service-doc` pointing at the rendered reference and `service-desc` at the
10
+ * spec when it lives at a fetchable URL. The site's own JSON docs API is an
11
+ * entry too, described by its generated `/openapi.json`.
12
+ */
13
+ export declare const API_CATALOG_PATH = "/.well-known/api-catalog";
14
+ export declare const API_CATALOG_TYPE = "application/linkset+json";
15
+ /** Whether the site has anything to catalog — gates every emission surface. */
16
+ export declare const hasApiCatalog: (config: ResolvedConfig) => boolean;
17
+ /** The `application/linkset+json` document, or null when there are no APIs. */
18
+ export declare const buildApiCatalog: (config: ResolvedConfig) => string | null;
@@ -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 askReasoningLevels: readonly ["none", "minimal", "low", "medium", "high", "xhigh"];
9
+ /** How much the model reasons before answering (an adapter's `reasoning`). */
10
+ export type AskReasoning = (typeof askReasoningLevels)[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 AskProviderOptions = Record<string, Record<string, JsonValue>>;
17
+ /** The options every Ask AI adapter accepts. */
18
+ export interface AskAdapterOptions {
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?: AskProviderOptions;
36
+ }
37
+ /** Options for {@link gateway}. */
38
+ export interface AskGatewayOptions extends AskAdapterOptions {
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?: AskReasoning;
48
+ }
49
+ export type AskGatewayAdapter = AdapterDescriptor<"gateway", AskGatewayOptions>;
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 Ask AI 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?: AskGatewayOptions) => AskGatewayAdapter;
76
+ /** Options for {@link openrouter}. */
77
+ export interface AskOpenRouterOptions extends AskAdapterOptions {
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?: AskReasoning;
86
+ }
87
+ export type AskOpenRouterAdapter = AdapterDescriptor<"openrouter", AskOpenRouterOptions>;
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 Ask AI through OpenRouter. Reads `OPENROUTER_API_KEY` and needs
109
+ * `@openrouter/ai-sdk-provider` installed in the project.
110
+ */
111
+ export declare const openrouter: (options: AskOpenRouterOptions) => AskOpenRouterAdapter;
112
+ /** Options for {@link llmgateway}. */
113
+ export interface AskLlmGatewayOptions extends AskAdapterOptions {
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?: AskReasoning;
123
+ }
124
+ export type AskLlmGatewayAdapter = AdapterDescriptor<"llmgateway", AskLlmGatewayOptions>;
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 Ask AI 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: AskLlmGatewayOptions) => AskLlmGatewayAdapter;
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 AskInkeepOptions extends AskAdapterOptions {
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 AskInkeepAdapter = AdapterDescriptor<"inkeep", AskInkeepOptions>;
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: AskInkeepOptions) => AskInkeepAdapter;
179
+ /** Options for {@link openaiCompatible}. */
180
+ export interface AskOpenAICompatibleOptions extends AskAdapterOptions {
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?: AskReasoning;
195
+ }
196
+ export type AskOpenAICompatibleAdapter = AdapterDescriptor<"openai-compatible", AskOpenAICompatibleOptions>;
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 Ask AI 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: AskOpenAICompatibleOptions) => AskOpenAICompatibleAdapter;
224
+ /** Which backend answers Ask AI: the value of `gateway()`, `openrouter()`, … */
225
+ export type AskAdapter = AskGatewayAdapter | AskOpenRouterAdapter | AskLlmGatewayAdapter | AskInkeepAdapter | AskOpenAICompatibleAdapter;
226
+ /**
227
+ * Error params for `ai.ask`: 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 askMovedFieldsHint: {
233
+ error: (issue: z.core.$ZodRawIssue) => string | undefined;
234
+ };
235
+ /**
236
+ * `ai.ask.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 askAdapterSchema: 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.ask.provider` descriptor. */
328
+ export type AskAdapterConfig = z.output<typeof askAdapterSchema>;
329
+ export type AskAdapterKind = AskAdapterConfig["kind"];
330
+ /** The provider when `ai.ask.provider` is unset: the gateway with its defaults. */
331
+ export declare const DEFAULT_ASK_PROVIDER: AskAdapter;
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: AskAdapterKind;
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.ask.provider` descriptor into its backend. */
368
+ export declare const resolveAskBackend: (provider?: AskAdapterConfig) => 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
+ * Ask AI 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
+ * ask: {
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 { AskAdapter, AskAdapterOptions, AskGatewayAdapter, AskGatewayOptions, AskInkeepAdapter, AskInkeepOptions, AskLlmGatewayAdapter, AskLlmGatewayOptions, AskOpenAICompatibleAdapter, AskOpenAICompatibleOptions, AskOpenRouterAdapter, AskOpenRouterOptions, AskProviderOptions, AskReasoning, } 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;