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,31 @@
1
+ /**
2
+ * Search adapters for `blume.config.ts`:
3
+ *
4
+ * ```ts
5
+ * import { defineConfig } from "blume";
6
+ * import { algolia } from "blume/search";
7
+ *
8
+ * export default defineConfig({
9
+ * search: algolia({ appId: "…", apiKey: "…", indexName: "docs" }),
10
+ * });
11
+ * ```
12
+ *
13
+ * Each factory returns a plain, JSON-serializable descriptor — never a live
14
+ * client — that the generated runtime inlines as a literal.
15
+ */
16
+ export { algolia } from "./algolia.ts";
17
+ export type { AlgoliaAdapter, AlgoliaOptions } from "./algolia.ts";
18
+ export { flexsearch } from "./flexsearch.ts";
19
+ export type { FlexsearchAdapter, FlexsearchOptions } from "./flexsearch.ts";
20
+ export { mixedbread } from "./mixedbread.ts";
21
+ export type { MixedbreadAdapter, MixedbreadOptions } from "./mixedbread.ts";
22
+ export { orama } from "./orama.ts";
23
+ export type { OramaAdapter, OramaOptions } from "./orama.ts";
24
+ export { oramaCloud } from "./orama-cloud.ts";
25
+ export type { OramaCloudAdapter, OramaCloudOptions } from "./orama-cloud.ts";
26
+ export { pagefind } from "./pagefind.ts";
27
+ export type { PagefindAdapter, PagefindOptions } from "./pagefind.ts";
28
+ export type { AnySearchAdapter, ResolvedSearchAdapter, SearchAdapterKind, } from "./registry.ts";
29
+ export type { KeylessSearchOptions, SearchAdapter, SearchAdapterMode, } from "./types.ts";
30
+ export { typesense } from "./typesense.ts";
31
+ export type { TypesenseAdapter, TypesenseOptions } from "./typesense.ts";
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import type { JsonValue } from "../../core/adapter.ts";
3
+ import type { SearchAdapter } from "./types.ts";
4
+ /**
5
+ * The Mixedbread store the generated `/api/search` endpoint queries, plus any
6
+ * other option, forwarded to the endpoint verbatim. JSON values only.
7
+ */
8
+ export interface MixedbreadOptions {
9
+ storeId: string;
10
+ [option: string]: JsonValue;
11
+ }
12
+ export type MixedbreadAdapter = SearchAdapter<"mixedbread", "server", MixedbreadOptions>;
13
+ export declare const mixedbreadOptionsSchema: z.ZodObject<{
14
+ storeId: z.ZodString;
15
+ }, z.core.$catchall<z.ZodJSONSchema>>;
16
+ /**
17
+ * Semantic search on Mixedbread. Queries go through a generated `/api/search`
18
+ * endpoint that holds `MIXEDBREAD_API_KEY`, so the adapter requires server
19
+ * output. Content is synced to the store out-of-band with the `mxbai` CLI,
20
+ * not by the build.
21
+ */
22
+ export declare const mixedbread: (options: MixedbreadOptions) => MixedbreadAdapter;
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import type { JsonValue } from "../../core/adapter.ts";
3
+ import type { SearchAdapter } from "./types.ts";
4
+ /**
5
+ * Public Orama Cloud credentials. The browser queries `endpoint` with the
6
+ * public `apiKey`; the build-time sync pushes records to `indexId` with
7
+ * `ORAMA_PRIVATE_API_KEY`, which never enters the config.
8
+ */
9
+ export interface OramaCloudNamedOptions {
10
+ /** The public API key (it ships to the browser). */
11
+ apiKey: string;
12
+ endpoint: string;
13
+ /** Index id used by the build-time sync; omit to skip syncing. */
14
+ indexId?: string;
15
+ }
16
+ /**
17
+ * Options for {@link oramaCloud}: the named options plus any other client
18
+ * option, forwarded to the browser verbatim. JSON values only.
19
+ */
20
+ export type OramaCloudOptions = OramaCloudNamedOptions & {
21
+ [option: string]: JsonValue;
22
+ };
23
+ export type OramaCloudAdapter = SearchAdapter<"orama-cloud", "hosted", OramaCloudOptions>;
24
+ export declare const oramaCloudOptionsSchema: z.ZodObject<{
25
+ apiKey: z.ZodString;
26
+ endpoint: z.ZodString;
27
+ indexId: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$catchall<z.ZodJSONSchema>>;
29
+ /**
30
+ * Hosted Orama. The browser queries your index endpoint directly; each
31
+ * `blume build` snapshots the records into the index and deploys it.
32
+ */
33
+ export declare const oramaCloud: (options: OramaCloudOptions) => OramaCloudAdapter;
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import type { KeylessSearchOptions, SearchAdapter } from "./types.ts";
3
+ /** Orama takes no options; unknown keys fail config validation. */
4
+ export type OramaOptions = KeylessSearchOptions;
5
+ export type OramaAdapter = SearchAdapter<"orama", "static", OramaOptions>;
6
+ export declare const oramaOptionsSchema: z.ZodObject<{}, z.core.$strict>;
7
+ /**
8
+ * Blume's default search: a JSON index built from the source files, served
9
+ * at `/blume-search.json` and queried in the browser. Keyless, and live in
10
+ * `blume dev`. The tokenizer follows `i18n.defaultLocale`, so non-Latin
11
+ * scripts are word-segmented.
12
+ */
13
+ export declare const orama: (options?: OramaOptions) => OramaAdapter;
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ import type { KeylessSearchOptions, SearchAdapter } from "./types.ts";
3
+ /** Pagefind takes no options; unknown keys fail config validation. */
4
+ export type PagefindOptions = KeylessSearchOptions;
5
+ export type PagefindAdapter = SearchAdapter<"pagefind", "pagefind", PagefindOptions>;
6
+ export declare const pagefindOptionsSchema: z.ZodObject<{}, z.core.$strict>;
7
+ /**
8
+ * Pagefind indexes the built HTML after `blume build` and loads the index in
9
+ * shards on demand, so the initial payload stays small on very large sites.
10
+ * The index only exists in the production build, not in `blume dev`.
11
+ */
12
+ export declare const pagefind: (options?: PagefindOptions) => PagefindAdapter;
@@ -0,0 +1,228 @@
1
+ import { z } from "zod";
2
+ import type { AlgoliaAdapter } from "./algolia.ts";
3
+ import type { FlexsearchAdapter } from "./flexsearch.ts";
4
+ import type { MixedbreadAdapter } from "./mixedbread.ts";
5
+ import type { OramaCloudAdapter } from "./orama-cloud.ts";
6
+ import type { OramaAdapter } from "./orama.ts";
7
+ import type { PagefindAdapter } from "./pagefind.ts";
8
+ import type { KeylessSearchOptions, SearchAdapter } from "./types.ts";
9
+ import type { TypesenseAdapter } from "./typesense.ts";
10
+ /** Every descriptor a factory can return. */
11
+ export type AnySearchAdapter = AlgoliaAdapter | FlexsearchAdapter | MixedbreadAdapter | OramaAdapter | OramaCloudAdapter | PagefindAdapter | TypesenseAdapter;
12
+ /** The resolved form of `search: false`: search is disabled. */
13
+ export type NoneSearchAdapter = SearchAdapter<"none", "none", KeylessSearchOptions>;
14
+ /** What `config.search.provider` resolves to: an adapter, or `none`. */
15
+ export type ResolvedSearchAdapter = AnySearchAdapter | NoneSearchAdapter;
16
+ /** Every adapter identity, including the resolved `none`. */
17
+ export type SearchAdapterKind = ResolvedSearchAdapter["kind"];
18
+ export declare const NONE_SEARCH_ADAPTER: NoneSearchAdapter;
19
+ /** One variant per public adapter factory. */
20
+ declare const adapterVariants: readonly [z.ZodObject<{
21
+ kind: z.ZodLiteral<"algolia">;
22
+ options: z.ZodObject<{
23
+ apiKey: z.ZodString;
24
+ appId: z.ZodString;
25
+ indexName: z.ZodString;
26
+ }, z.core.$catchall<z.ZodJSONSchema>>;
27
+ requiredSecrets: z.ZodArray<z.ZodString>;
28
+ runtimeDeps: z.ZodArray<z.ZodString>;
29
+ mode: z.ZodLiteral<"hosted">;
30
+ }, z.core.$strict>, z.ZodObject<{
31
+ kind: z.ZodLiteral<"flexsearch">;
32
+ options: z.ZodObject<{}, z.core.$strict>;
33
+ requiredSecrets: z.ZodArray<z.ZodString>;
34
+ runtimeDeps: z.ZodArray<z.ZodString>;
35
+ mode: z.ZodLiteral<"static">;
36
+ }, z.core.$strict>, z.ZodObject<{
37
+ kind: z.ZodLiteral<"mixedbread">;
38
+ options: z.ZodObject<{
39
+ storeId: z.ZodString;
40
+ }, z.core.$catchall<z.ZodJSONSchema>>;
41
+ requiredSecrets: z.ZodArray<z.ZodString>;
42
+ runtimeDeps: z.ZodArray<z.ZodString>;
43
+ mode: z.ZodLiteral<"server">;
44
+ }, z.core.$strict>, z.ZodObject<{
45
+ kind: z.ZodLiteral<"orama">;
46
+ options: z.ZodObject<{}, z.core.$strict>;
47
+ requiredSecrets: z.ZodArray<z.ZodString>;
48
+ runtimeDeps: z.ZodArray<z.ZodString>;
49
+ mode: z.ZodLiteral<"static">;
50
+ }, z.core.$strict>, z.ZodObject<{
51
+ kind: z.ZodLiteral<"orama-cloud">;
52
+ options: z.ZodObject<{
53
+ apiKey: z.ZodString;
54
+ endpoint: z.ZodString;
55
+ indexId: z.ZodOptional<z.ZodString>;
56
+ }, z.core.$catchall<z.ZodJSONSchema>>;
57
+ requiredSecrets: z.ZodArray<z.ZodString>;
58
+ runtimeDeps: z.ZodArray<z.ZodString>;
59
+ mode: z.ZodLiteral<"hosted">;
60
+ }, z.core.$strict>, z.ZodObject<{
61
+ kind: z.ZodLiteral<"pagefind">;
62
+ options: z.ZodObject<{}, z.core.$strict>;
63
+ requiredSecrets: z.ZodArray<z.ZodString>;
64
+ runtimeDeps: z.ZodArray<z.ZodString>;
65
+ mode: z.ZodLiteral<"pagefind">;
66
+ }, z.core.$strict>, z.ZodObject<{
67
+ kind: z.ZodLiteral<"typesense">;
68
+ options: z.ZodObject<{
69
+ apiKey: z.ZodString;
70
+ collection: z.ZodString;
71
+ host: z.ZodString;
72
+ port: z.ZodOptional<z.ZodNumber>;
73
+ protocol: z.ZodOptional<z.ZodEnum<{
74
+ http: "http";
75
+ https: "https";
76
+ }>>;
77
+ }, z.core.$catchall<z.ZodJSONSchema>>;
78
+ requiredSecrets: z.ZodArray<z.ZodString>;
79
+ runtimeDeps: z.ZodArray<z.ZodString>;
80
+ mode: z.ZodLiteral<"hosted">;
81
+ }, z.core.$strict>];
82
+ /** What a public factory returns, as the config schema accepts it. */
83
+ export type SearchAdapterInput = z.input<(typeof adapterVariants)[number]>;
84
+ /**
85
+ * Validates a descriptor — one a factory returned, or the `none` descriptor
86
+ * the config schema substitutes for `false` — and resolves it to the
87
+ * canonical form, so every consumer reads `mode`, `runtimeDeps`, and
88
+ * `requiredSecrets` straight off the descriptor. `none` is internal: it is
89
+ * not part of {@link SearchAdapterInput}, so `search: { kind: "none" }` is a
90
+ * type error even though the runtime schema admits it.
91
+ */
92
+ export declare const resolvedSearchAdapterSchema: z.ZodPipe<z.ZodDiscriminatedUnion<[z.ZodObject<{
93
+ kind: z.ZodLiteral<"algolia">;
94
+ options: z.ZodObject<{
95
+ apiKey: z.ZodString;
96
+ appId: z.ZodString;
97
+ indexName: z.ZodString;
98
+ }, z.core.$catchall<z.ZodJSONSchema>>;
99
+ requiredSecrets: z.ZodArray<z.ZodString>;
100
+ runtimeDeps: z.ZodArray<z.ZodString>;
101
+ mode: z.ZodLiteral<"hosted">;
102
+ }, z.core.$strict>, z.ZodObject<{
103
+ kind: z.ZodLiteral<"flexsearch">;
104
+ options: z.ZodObject<{}, z.core.$strict>;
105
+ requiredSecrets: z.ZodArray<z.ZodString>;
106
+ runtimeDeps: z.ZodArray<z.ZodString>;
107
+ mode: z.ZodLiteral<"static">;
108
+ }, z.core.$strict>, z.ZodObject<{
109
+ kind: z.ZodLiteral<"mixedbread">;
110
+ options: z.ZodObject<{
111
+ storeId: z.ZodString;
112
+ }, z.core.$catchall<z.ZodJSONSchema>>;
113
+ requiredSecrets: z.ZodArray<z.ZodString>;
114
+ runtimeDeps: z.ZodArray<z.ZodString>;
115
+ mode: z.ZodLiteral<"server">;
116
+ }, z.core.$strict>, z.ZodObject<{
117
+ kind: z.ZodLiteral<"orama">;
118
+ options: z.ZodObject<{}, z.core.$strict>;
119
+ requiredSecrets: z.ZodArray<z.ZodString>;
120
+ runtimeDeps: z.ZodArray<z.ZodString>;
121
+ mode: z.ZodLiteral<"static">;
122
+ }, z.core.$strict>, z.ZodObject<{
123
+ kind: z.ZodLiteral<"orama-cloud">;
124
+ options: z.ZodObject<{
125
+ apiKey: z.ZodString;
126
+ endpoint: z.ZodString;
127
+ indexId: z.ZodOptional<z.ZodString>;
128
+ }, z.core.$catchall<z.ZodJSONSchema>>;
129
+ requiredSecrets: z.ZodArray<z.ZodString>;
130
+ runtimeDeps: z.ZodArray<z.ZodString>;
131
+ mode: z.ZodLiteral<"hosted">;
132
+ }, z.core.$strict>, z.ZodObject<{
133
+ kind: z.ZodLiteral<"pagefind">;
134
+ options: z.ZodObject<{}, z.core.$strict>;
135
+ requiredSecrets: z.ZodArray<z.ZodString>;
136
+ runtimeDeps: z.ZodArray<z.ZodString>;
137
+ mode: z.ZodLiteral<"pagefind">;
138
+ }, z.core.$strict>, z.ZodObject<{
139
+ kind: z.ZodLiteral<"typesense">;
140
+ options: z.ZodObject<{
141
+ apiKey: z.ZodString;
142
+ collection: z.ZodString;
143
+ host: z.ZodString;
144
+ port: z.ZodOptional<z.ZodNumber>;
145
+ protocol: z.ZodOptional<z.ZodEnum<{
146
+ http: "http";
147
+ https: "https";
148
+ }>>;
149
+ }, z.core.$catchall<z.ZodJSONSchema>>;
150
+ requiredSecrets: z.ZodArray<z.ZodString>;
151
+ runtimeDeps: z.ZodArray<z.ZodString>;
152
+ mode: z.ZodLiteral<"hosted">;
153
+ }, z.core.$strict>, z.ZodObject<{
154
+ kind: z.ZodLiteral<"none">;
155
+ options: z.ZodObject<{}, z.core.$strict>;
156
+ requiredSecrets: z.ZodArray<z.ZodString>;
157
+ runtimeDeps: z.ZodArray<z.ZodString>;
158
+ mode: z.ZodLiteral<"none">;
159
+ }, z.core.$strict>], "kind">, z.ZodTransform<NoneSearchAdapter | AlgoliaAdapter | FlexsearchAdapter | MixedbreadAdapter | OramaAdapter | OramaCloudAdapter | PagefindAdapter | TypesenseAdapter, {
160
+ kind: "algolia";
161
+ options: {
162
+ [x: string]: z.core.util.JSONType;
163
+ apiKey: string;
164
+ appId: string;
165
+ indexName: string;
166
+ };
167
+ requiredSecrets: string[];
168
+ runtimeDeps: string[];
169
+ mode: "hosted";
170
+ } | {
171
+ kind: "flexsearch";
172
+ options: Record<string, never>;
173
+ requiredSecrets: string[];
174
+ runtimeDeps: string[];
175
+ mode: "static";
176
+ } | {
177
+ kind: "mixedbread";
178
+ options: {
179
+ [x: string]: z.core.util.JSONType;
180
+ storeId: string;
181
+ };
182
+ requiredSecrets: string[];
183
+ runtimeDeps: string[];
184
+ mode: "server";
185
+ } | {
186
+ kind: "orama";
187
+ options: Record<string, never>;
188
+ requiredSecrets: string[];
189
+ runtimeDeps: string[];
190
+ mode: "static";
191
+ } | {
192
+ kind: "orama-cloud";
193
+ options: {
194
+ [x: string]: z.core.util.JSONType;
195
+ apiKey: string;
196
+ endpoint: string;
197
+ indexId?: string | undefined;
198
+ };
199
+ requiredSecrets: string[];
200
+ runtimeDeps: string[];
201
+ mode: "hosted";
202
+ } | {
203
+ kind: "pagefind";
204
+ options: Record<string, never>;
205
+ requiredSecrets: string[];
206
+ runtimeDeps: string[];
207
+ mode: "pagefind";
208
+ } | {
209
+ kind: "typesense";
210
+ options: {
211
+ [x: string]: z.core.util.JSONType;
212
+ apiKey: string;
213
+ collection: string;
214
+ host: string;
215
+ port?: number | undefined;
216
+ protocol?: "http" | "https" | undefined;
217
+ };
218
+ requiredSecrets: string[];
219
+ runtimeDeps: string[];
220
+ mode: "hosted";
221
+ } | {
222
+ kind: "none";
223
+ options: Record<string, never>;
224
+ requiredSecrets: string[];
225
+ runtimeDeps: string[];
226
+ mode: "none";
227
+ }>>;
228
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { AdapterDescriptor } from "../../core/adapter.ts";
2
+ /**
3
+ * How a search adapter integrates with the generated runtime.
4
+ *
5
+ * - `static` adapters ship a client-side index (`blume-search.json`) that the
6
+ * browser loads and queries — Orama, FlexSearch.
7
+ * - `pagefind` builds its own index from the rendered HTML after the build.
8
+ * - `hosted` adapters are queried directly from the browser against an
9
+ * external service, with a build-time sync uploading the index — Algolia,
10
+ * Orama Cloud, Typesense.
11
+ * - `server` adapters proxy queries through a generated `/api/search` endpoint
12
+ * that holds a secret key, so they require server output — Mixedbread.
13
+ * - `none` is the resolved form of `search: false`: search is disabled.
14
+ */
15
+ export type SearchAdapterMode = "static" | "pagefind" | "hosted" | "server" | "none";
16
+ /**
17
+ * Options for an adapter that takes none. The generated client never reads
18
+ * them — the static engines are configured from `i18n`, and Pagefind indexes
19
+ * the built HTML — so unknown keys fail config validation instead of passing
20
+ * silently. Adding a real option later is then additive, never a behavior
21
+ * change for a key that used to be ignored.
22
+ */
23
+ export type KeylessSearchOptions = Record<string, never>;
24
+ /**
25
+ * The descriptor a search adapter factory returns and `blume.config.ts`
26
+ * carries under `search`: the shared {@link AdapterDescriptor} contract plus
27
+ * the adapter's integration `mode`. It is plain data, never a live client —
28
+ * the runtime templates inline it as a literal into `.blume/` and ejected
29
+ * files, so every field must survive a JSON round-trip.
30
+ */
31
+ export interface SearchAdapter<Kind extends string = string, Mode extends SearchAdapterMode = SearchAdapterMode, Options = object> extends AdapterDescriptor<Kind, Options> {
32
+ /** How the generated runtime queries this adapter. */
33
+ mode: Mode;
34
+ }
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import type { JsonValue } from "../../core/adapter.ts";
3
+ import type { SearchAdapter } from "./types.ts";
4
+ /**
5
+ * Connection details for a self-hosted or cloud Typesense node. The browser
6
+ * queries the collection with the search-only `apiKey`; the build-time sync
7
+ * recreates the collection with `TYPESENSE_ADMIN_API_KEY`, which never enters
8
+ * the config.
9
+ */
10
+ export interface TypesenseNamedOptions {
11
+ /** The search-only API key (public — it ships to the browser). */
12
+ apiKey: string;
13
+ collection: string;
14
+ host: string;
15
+ /** Defaults to 443. */
16
+ port?: number;
17
+ /** Defaults to `https`. */
18
+ protocol?: "http" | "https";
19
+ }
20
+ /**
21
+ * Options for {@link typesense}: the named options plus any other client
22
+ * option, forwarded to the browser verbatim. JSON values only.
23
+ */
24
+ export type TypesenseOptions = TypesenseNamedOptions & {
25
+ [option: string]: JsonValue;
26
+ };
27
+ export type TypesenseAdapter = SearchAdapter<"typesense", "hosted", TypesenseOptions>;
28
+ export declare const typesenseOptionsSchema: z.ZodObject<{
29
+ apiKey: z.ZodString;
30
+ collection: z.ZodString;
31
+ host: z.ZodString;
32
+ port: z.ZodOptional<z.ZodNumber>;
33
+ protocol: z.ZodOptional<z.ZodEnum<{
34
+ http: "http";
35
+ https: "https";
36
+ }>>;
37
+ }, z.core.$catchall<z.ZodJSONSchema>>;
38
+ /**
39
+ * Hosted search on Typesense. Each `blume build` drops and recreates the
40
+ * collection so deleted or renamed pages don't linger as stale hits.
41
+ */
42
+ export declare const typesense: (options: TypesenseOptions) => TypesenseAdapter;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Build a local Pagefind search index over the built site. Pagefind indexes
3
+ * every rendered page except those whose `<html>` carries
4
+ * `data-pagefind-ignore`, which Blume stamps on non-indexable pages
5
+ * (search-excluded, or hidden without the opt-in), so those stay out.
6
+ *
7
+ * Pagefind is imported statically, not with `import()`: this runs in the
8
+ * `astro:build:done` hook, after Astro has closed the module runner an
9
+ * installed Blume's config was evaluated in (see `core/node-require.ts`), and
10
+ * Pagefind ships only an `import` export, so `require` can't load it either.
11
+ *
12
+ * The index files are fetched with `getFiles()` and written here rather than
13
+ * with Pagefind's `writeFiles()`: in service mode Pagefind acknowledges
14
+ * `writeFiles()` once tokio has buffered the writes, not once they are on
15
+ * disk, and `close()` kills the backend, so a loaded CI host can ship a
16
+ * truncated `pagefind-entry.json` (Pagefind/pagefind#1271). Writing the bytes
17
+ * ourselves puts them on disk before the backend goes away. Fixed upstream in
18
+ * Pagefind/pagefind#1272; switch back to `writeFiles()` once a release ships
19
+ * that fix.
20
+ *
21
+ * Returns the number of pages indexed.
22
+ */
23
+ export declare const buildSearchIndex: (outDir: string) => Promise<number>;
@@ -0,0 +1,90 @@
1
+ import type { VisibilityAudience } from "../ai/visibility.ts";
2
+ import type { BlumeProject } from "../core/project-graph.ts";
3
+ /** A document indexed by the client-side search providers (Orama, FlexSearch). */
4
+ export interface SearchDocument {
5
+ route: string;
6
+ title: string;
7
+ description: string;
8
+ content: string;
9
+ /** Ancestor section labels for the result breadcrumb, e.g. `["Guides"]`. */
10
+ breadcrumb: string[];
11
+ /** Top-level section label, used by the search filter pills. */
12
+ section: string;
13
+ /** Locale code, so the dialog can filter results to the active language. */
14
+ locale: string;
15
+ /** Resolved page `type` (`doc`, `blog`, a custom `rfc`…), for type filters. */
16
+ contentType: string;
17
+ /** Docs version (`""` for the current docs), so results scope to the viewed version. */
18
+ version: string;
19
+ /** Frontmatter `search.tags`, surfaced for hosted-provider faceting. */
20
+ tags?: string[];
21
+ /**
22
+ * Declared facet values (`content.types.<type>.facets`), key → value.
23
+ * Filterable through the MCP tools' `filters` input.
24
+ */
25
+ facets?: Record<string, string>;
26
+ }
27
+ /**
28
+ * A record uploaded to a hosted search backend (Algolia, Orama Cloud,
29
+ * Typesense, Mixedbread). `_id` is the stable per-page key; each sync adapts it
30
+ * to the backend's own id field (`objectID`, `id`, …).
31
+ */
32
+ export interface SearchRecord {
33
+ _id: string;
34
+ url: string;
35
+ title: string;
36
+ description: string;
37
+ content: string;
38
+ /** Locale code, carried as a facet for per-language filtering. */
39
+ locale: string;
40
+ /**
41
+ * Docs version, carried as a facet for per-version filtering. The current
42
+ * docs upload as `"current"` — hosted backends treat an empty facet value
43
+ * unreliably, so the sentinel stands in for the empty version id.
44
+ */
45
+ version: string;
46
+ /** Single faceting tag (the first frontmatter tag, when present). */
47
+ tag?: string;
48
+ }
49
+ interface BuildOptions {
50
+ includeWhenDisabled?: boolean;
51
+ content?: "markdown" | "plain";
52
+ audience?: VisibilityAudience;
53
+ }
54
+ /**
55
+ * Build search documents from the content graph. Only indexable pages are
56
+ * included (per the route manifest), and content comes from the source files,
57
+ * so the index is identical in dev and build.
58
+ *
59
+ * Pass `includeWhenDisabled` to index pages on their content merits even when
60
+ * the search provider is `none` — used by the MCP server, which is a separate
61
+ * feature from on-page search.
62
+ *
63
+ * `content` selects the extraction: `"plain"` (default) strips Markdown to bare
64
+ * searchable text; `"markdown"` keeps the body's Markdown — code blocks, lists,
65
+ * headings — for assistant grounding, where fenced examples are often the answer
66
+ * and stripping them makes the model unable to cite content the docs do contain.
67
+ * The `"markdown"` body is agent-facing, so components are downleveled with the
68
+ * same serializers the `.md` mirror, llms-full.txt and MCP `get_page` use: a
69
+ * page whose body is a `<CardGroup>` of `<Card>`s is prose to a reader and bare
70
+ * JSX to anything reading the source, and section landing pages are exactly
71
+ * that shape.
72
+ *
73
+ * `audience` resolves `<Visibility>` blocks before extraction: `"web"`
74
+ * (default) keeps web-only content and drops agents-only blocks — the site
75
+ * search and hosted syncs must not surface content the page hides — while
76
+ * `"agents"` mirrors llms-full.txt/MCP `get_page` (web removed, agents kept).
77
+ *
78
+ * Whether fenced code joins the plain extraction is site-wide policy, read
79
+ * from `search.indexing.includeCodeBlocks` here rather than threaded by each
80
+ * caller, so the client index, hosted syncs, eject, and the MCP `search_docs`
81
+ * index can't drift apart.
82
+ */
83
+ export declare const buildSearchDocuments: (project: BlumeProject, options?: BuildOptions) => Promise<SearchDocument[]>;
84
+ /**
85
+ * Map per-page search documents to the flat record shape hosted backends
86
+ * ingest. One record per page, keyed by route; the first tag becomes the
87
+ * faceting `tag`.
88
+ */
89
+ export declare const toSearchRecords: (documents: SearchDocument[]) => SearchRecord[];
90
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { ResolvedConfig } from "../core/schema.ts";
2
+ import type { PageRecord } from "../core/types.ts";
3
+ export declare const pageFacets: (page: Pick<PageRecord, "contentType" | "custom">, config: ResolvedConfig) => Record<string, string> | undefined;
@@ -27,7 +27,7 @@ export interface OramaDoc {
27
27
  }
28
28
  /**
29
29
  * Build an in-memory Orama full-text index from search documents. Shared by the
30
- * Orama client loader (browser), the MCP server, and Ask AI grounding (Node),
30
+ * Orama client loader (browser), the MCP server, and assistant grounding (Node),
31
31
  * so ranking is identical wherever docs are queried. `locale` — the site's
32
32
  * `i18n.defaultLocale` — swaps in a word-segmenting tokenizer for every
33
33
  * non-Latin script, all of which Orama's default tokenizer reduces to zero
@@ -0,0 +1,14 @@
1
+ import type { AlgoliaOptions } from "../adapters/algolia.ts";
2
+ import type { SearchRecord } from "../documents.ts";
3
+ /** The adapter options the sync reads (the public `apiKey` is never used). */
4
+ export type AlgoliaSyncConfig = Pick<AlgoliaOptions, "appId" | "indexName">;
5
+ /**
6
+ * Upload the search records to Algolia. Uses the admin key from
7
+ * `ALGOLIA_ADMIN_API_KEY` (never the adapter options, which hold only the
8
+ * public, search-only key). Throws on a missing key so the caller can warn.
9
+ *
10
+ * Uses `replaceAllObjects`, which atomically replaces the index contents, so
11
+ * pages deleted or renamed since the last sync don't linger as stale search
12
+ * hits that 404 when clicked.
13
+ */
14
+ export declare const syncAlgolia: (records: SearchRecord[], config: AlgoliaSyncConfig) => Promise<void>;
@@ -0,0 +1,14 @@
1
+ import type { BlumeProject } from "../../core/project-graph.ts";
2
+ /** Minimal logger surface the build command provides. */
3
+ export interface SyncReporter {
4
+ start: (message: string) => void;
5
+ success: (message: string) => void;
6
+ warn: (message: string) => void;
7
+ }
8
+ /**
9
+ * After a build, upload the per-page records to the configured hosted adapter.
10
+ * Reads secret admin keys from the environment; if a key (or option) is
11
+ * missing the sync is skipped with a warning rather than failing the build —
12
+ * CI may sync in a separate step.
13
+ */
14
+ export declare const syncSearchProvider: (project: BlumeProject, reporter: SyncReporter) => Promise<void>;
@@ -0,0 +1,10 @@
1
+ import type { OramaCloudOptions } from "../adapters/orama-cloud.ts";
2
+ import type { SearchRecord } from "../documents.ts";
3
+ /** The adapter options the sync reads (the public credentials are never used). */
4
+ export type OramaCloudSyncConfig = Pick<OramaCloudOptions, "indexId">;
5
+ /**
6
+ * Push the search records to an Orama Cloud index via `CloudManager`, using the
7
+ * private key from `ORAMA_PRIVATE_API_KEY`. Snapshots the full record set, then
8
+ * deploys. Throws on a missing key/index so the caller can warn.
9
+ */
10
+ export declare const syncOramaCloud: (records: SearchRecord[], config: OramaCloudSyncConfig) => Promise<void>;
@@ -0,0 +1,14 @@
1
+ import type { TypesenseOptions } from "../adapters/typesense.ts";
2
+ import type { SearchRecord } from "../documents.ts";
3
+ /** The adapter options the sync reads (the public `apiKey` is never used). */
4
+ export type TypesenseSyncConfig = Pick<TypesenseOptions, "collection" | "host" | "port" | "protocol">;
5
+ /**
6
+ * Import the search records into a Typesense collection. Uses the admin key
7
+ * from `TYPESENSE_ADMIN_API_KEY`. Throws on a missing key so the caller can
8
+ * warn.
9
+ *
10
+ * The collection is dropped and recreated on each sync so that pages deleted or
11
+ * renamed since the last sync don't linger as stale search hits that 404 when
12
+ * clicked (an upsert alone never removes them).
13
+ */
14
+ export declare const syncTypesense: (records: SearchRecord[], config: TypesenseSyncConfig) => Promise<void>;