blume 2.0.0 → 2.0.2

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 (454) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +110 -0
  3. package/README.md +2 -2
  4. package/dist/cli/{chunk-f2972sbt.js → chunk-00gs3wqs.js} +1 -1
  5. package/dist/cli/{chunk-fa25z98p.js → chunk-273ygyr4.js} +4 -3
  6. package/dist/cli/chunk-273ygyr4.js.map +11 -0
  7. package/dist/cli/{chunk-pat2zzwc.js → chunk-3yce002v.js} +21 -8
  8. package/dist/cli/{chunk-pat2zzwc.js.map → chunk-3yce002v.js.map} +4 -4
  9. package/dist/cli/{chunk-d1tadaw7.js → chunk-4e9b9ra6.js} +17 -7
  10. package/dist/cli/chunk-4e9b9ra6.js.map +10 -0
  11. package/dist/cli/{chunk-zg2gtj10.js → chunk-5r8g91qn.js} +352 -676
  12. package/dist/cli/chunk-5r8g91qn.js.map +34 -0
  13. package/dist/cli/{chunk-11j0384y.js → chunk-6dtt0zfn.js} +14 -14
  14. package/dist/cli/{chunk-11j0384y.js.map → chunk-6dtt0zfn.js.map} +3 -3
  15. package/dist/cli/{chunk-bw22s759.js → chunk-6k4ftwze.js} +38 -19
  16. package/dist/cli/{chunk-bw22s759.js.map → chunk-6k4ftwze.js.map} +4 -4
  17. package/dist/cli/{chunk-sqn5t4q0.js → chunk-7mbqtmgb.js} +16 -7
  18. package/dist/cli/chunk-7mbqtmgb.js.map +10 -0
  19. package/dist/cli/{chunk-79njf86q.js → chunk-7vtckvaw.js} +21 -19
  20. package/dist/cli/chunk-7vtckvaw.js.map +11 -0
  21. package/dist/cli/{chunk-fh5hj5jt.js → chunk-8g8ytmgx.js} +17 -18
  22. package/dist/cli/{chunk-fh5hj5jt.js.map → chunk-8g8ytmgx.js.map} +2 -2
  23. package/dist/cli/{chunk-1w8dp3qb.js → chunk-91ws1n6j.js} +18 -15
  24. package/dist/cli/chunk-91ws1n6j.js.map +10 -0
  25. package/dist/cli/{chunk-7ez8ny0t.js → chunk-bbnwccaz.js} +2 -2
  26. package/dist/cli/{chunk-5a2z0198.js → chunk-bfwp9vp6.js} +18 -10
  27. package/dist/cli/chunk-bfwp9vp6.js.map +10 -0
  28. package/dist/cli/{chunk-ernrthtr.js → chunk-d1v5rhy0.js} +14 -15
  29. package/dist/cli/{chunk-ernrthtr.js.map → chunk-d1v5rhy0.js.map} +2 -2
  30. package/dist/cli/{chunk-a9kptbw5.js → chunk-ddndchfr.js} +21 -6
  31. package/dist/cli/chunk-ddndchfr.js.map +14 -0
  32. package/dist/cli/{chunk-zxccj738.js → chunk-esh98wmb.js} +1 -1
  33. package/dist/cli/{chunk-88cpgt6h.js → chunk-fsmrqk8a.js} +1 -1
  34. package/dist/cli/{chunk-b5aj94ah.js → chunk-g698a744.js} +5 -5
  35. package/dist/cli/{chunk-jts8mvcz.js → chunk-gs7r695n.js} +9 -3
  36. package/dist/cli/{chunk-jts8mvcz.js.map → chunk-gs7r695n.js.map} +3 -3
  37. package/dist/cli/{chunk-41za066z.js → chunk-h2ez8dzb.js} +4 -4
  38. package/dist/cli/{chunk-by2290sx.js → chunk-h7k3nq3v.js} +2 -2
  39. package/dist/cli/{chunk-j8mw0za6.js → chunk-hqp2ajnh.js} +252 -123
  40. package/dist/cli/chunk-hqp2ajnh.js.map +35 -0
  41. package/dist/cli/{chunk-mnqj32sj.js → chunk-hr8ne106.js} +119 -50
  42. package/dist/cli/chunk-hr8ne106.js.map +13 -0
  43. package/dist/cli/{chunk-mwt1k8n7.js → chunk-j85scx15.js} +74 -30
  44. package/dist/cli/chunk-j85scx15.js.map +10 -0
  45. package/dist/cli/{chunk-z01ze5c1.js → chunk-k7pj68a8.js} +63 -22
  46. package/dist/cli/chunk-k7pj68a8.js.map +11 -0
  47. package/dist/cli/{chunk-2q1dwty4.js → chunk-mqc662a6.js} +8 -8
  48. package/dist/cli/{chunk-2q1dwty4.js.map → chunk-mqc662a6.js.map} +4 -4
  49. package/dist/cli/{chunk-y3e45rc8.js → chunk-n1yg3tj3.js} +4 -4
  50. package/dist/cli/{chunk-bctazmbk.js → chunk-nfcyttvj.js} +17 -6
  51. package/dist/cli/chunk-nfcyttvj.js.map +10 -0
  52. package/dist/cli/{chunk-6k8vp3ta.js → chunk-pbg5a4s3.js} +60 -28
  53. package/dist/cli/chunk-pbg5a4s3.js.map +19 -0
  54. package/dist/cli/{chunk-d80hr03s.js → chunk-ppzjqwx2.js} +24 -17
  55. package/dist/cli/{chunk-d80hr03s.js.map → chunk-ppzjqwx2.js.map} +4 -4
  56. package/dist/cli/{chunk-beat36xx.js → chunk-qkb5a8sa.js} +25 -10
  57. package/dist/cli/chunk-qkb5a8sa.js.map +10 -0
  58. package/dist/cli/{chunk-bnbmcwfb.js → chunk-sqw4ekg1.js} +5 -5
  59. package/dist/cli/{chunk-bnbmcwfb.js.map → chunk-sqw4ekg1.js.map} +3 -3
  60. package/dist/cli/{chunk-xaz13gwg.js → chunk-v6ya5kcb.js} +3268 -1150
  61. package/dist/cli/chunk-v6ya5kcb.js.map +189 -0
  62. package/dist/cli/{chunk-tzne8qfq.js → chunk-w4bxdvsa.js} +18 -15
  63. package/dist/cli/chunk-w4bxdvsa.js.map +10 -0
  64. package/dist/cli/{chunk-f7t03s3g.js → chunk-wdrt2k2v.js} +2 -2
  65. package/dist/cli/{chunk-z1f5arsg.js → chunk-xh43dwgw.js} +170 -55
  66. package/dist/cli/chunk-xh43dwgw.js.map +36 -0
  67. package/dist/cli/{chunk-pnnvybbk.js → chunk-zp79m0ts.js} +5 -5
  68. package/dist/cli/{chunk-pnnvybbk.js.map → chunk-zp79m0ts.js.map} +2 -2
  69. package/dist/cli/index.js +160 -35
  70. package/dist/cli/index.js.map +4 -4
  71. package/dist/types/ai/agent-readability.d.ts +1 -1
  72. package/dist/types/ai/agent-surface.d.ts +32 -0
  73. package/dist/types/ai/api/paths.d.ts +1 -1
  74. package/dist/types/ai/api-catalog.d.ts +7 -1
  75. package/dist/types/ai/ask-context.d.ts +14 -7
  76. package/dist/types/ai/ask.d.ts +43 -43
  77. package/dist/types/ai/component-markdown.d.ts +4 -4
  78. package/dist/types/ai/index.d.ts +3 -3
  79. package/dist/types/ai/openapi-components.d.ts +1 -1
  80. package/dist/types/ai/relative-links.d.ts +9 -4
  81. package/dist/types/ai/serializers.d.ts +1 -1
  82. package/dist/types/ai/static-expression.d.ts +28 -0
  83. package/dist/types/ai/visibility.d.ts +1 -1
  84. package/dist/types/analytics/databuddy.d.ts +43 -0
  85. package/dist/types/analytics/index.d.ts +2 -0
  86. package/dist/types/analytics/schema.d.ts +14 -0
  87. package/dist/types/cli/env.d.ts +5 -0
  88. package/dist/types/cli/init/scaffold.d.ts +19 -3
  89. package/dist/types/cli/init/starter-spec.d.ts +11 -0
  90. package/dist/types/core/base-path.d.ts +9 -0
  91. package/dist/types/core/config-input.d.ts +21 -21
  92. package/dist/types/core/config.d.ts +5 -5
  93. package/dist/types/core/data.d.ts +3 -3
  94. package/dist/types/core/graph.d.ts +2 -0
  95. package/dist/types/core/i18n-ui.d.ts +37 -8
  96. package/dist/types/core/i18n.d.ts +7 -1
  97. package/dist/types/core/links.d.ts +3 -1
  98. package/dist/types/core/load-module.d.ts +10 -0
  99. package/dist/types/core/locale-links.d.ts +12 -2
  100. package/dist/types/core/meta.d.ts +5 -1
  101. package/dist/types/core/nav-diagnostics.d.ts +10 -0
  102. package/dist/types/core/navigation.d.ts +38 -0
  103. package/dist/types/core/ordering-prefix.d.ts +4 -0
  104. package/dist/types/core/safe-links.d.ts +3 -1
  105. package/dist/types/core/schema.d.ts +57 -18
  106. package/dist/types/core/sources/github-releases.d.ts +5 -0
  107. package/dist/types/core/sources/lower.d.ts +14 -2
  108. package/dist/types/core/sources/normalize.d.ts +10 -1
  109. package/dist/types/core/sources/remote.d.ts +11 -1
  110. package/dist/types/core/sources/resolve.d.ts +12 -0
  111. package/dist/types/core/sources/types.d.ts +31 -0
  112. package/dist/types/core/types.d.ts +9 -0
  113. package/dist/types/core/unrecognized-keys.d.ts +1 -1
  114. package/dist/types/deploy/adapters/node.d.ts +5 -2
  115. package/dist/types/deploy/adapters/types.d.ts +7 -0
  116. package/dist/types/deploy/cloudflare-negotiation.d.ts +3 -2
  117. package/dist/types/deploy/headers.d.ts +31 -7
  118. package/dist/types/deploy/node-headers.d.ts +43 -8
  119. package/dist/types/deploy/platforms/netlify.d.ts +27 -2
  120. package/dist/types/deploy/platforms/node.d.ts +6 -5
  121. package/dist/types/deploy/platforms/types.d.ts +7 -0
  122. package/dist/types/deploy/platforms/vercel.d.ts +3 -2
  123. package/dist/types/deploy/redirects.d.ts +7 -2
  124. package/dist/types/deploy/vercel-negotiation.d.ts +3 -2
  125. package/dist/types/openapi/model.d.ts +20 -6
  126. package/dist/types/search/documents.d.ts +1 -1
  127. package/dist/types/search/orama-index.d.ts +1 -1
  128. package/dist/types/search/sync/algolia.d.ts +3 -1
  129. package/docs/01-quickstart.mdx +3 -2
  130. package/docs/02-deployment.mdx +21 -12
  131. package/docs/03-upgrading.mdx +22 -9
  132. package/docs/04-migrating.mdx +4 -4
  133. package/docs/08-faq.mdx +12 -5
  134. package/docs/advanced/changelog.mdx +1 -1
  135. package/docs/advanced/custom-pages.mdx +5 -3
  136. package/docs/advanced/skills.mdx +1 -1
  137. package/docs/cli/audit.mdx +5 -5
  138. package/docs/cli/doctor.mdx +4 -4
  139. package/docs/cli/evals.mdx +9 -9
  140. package/docs/cli/index.mdx +6 -3
  141. package/docs/cli/translate.mdx +8 -8
  142. package/docs/configuration/analytics.mdx +23 -2
  143. package/docs/configuration/{ask-ai.mdx → assistant.mdx} +20 -20
  144. package/docs/configuration/customization.mdx +5 -4
  145. package/docs/configuration/index.mdx +7 -5
  146. package/docs/configuration/meta.ts +1 -1
  147. package/docs/configuration/search.mdx +2 -2
  148. package/docs/content/components.mdx +1 -1
  149. package/docs/content/frontmatter.mdx +5 -1
  150. package/docs/content/i18n.mdx +3 -3
  151. package/docs/content/index.mdx +4 -2
  152. package/docs/content/islands.mdx +1 -1
  153. package/docs/content/meta.mdx +5 -3
  154. package/docs/content/navigation.mdx +29 -4
  155. package/docs/content/sources.mdx +18 -12
  156. package/docs/content/versioning.mdx +1 -0
  157. package/docs/discoverability/agent-discovery.mdx +22 -8
  158. package/docs/discoverability/index.mdx +3 -3
  159. package/docs/discoverability/llms-txt.mdx +2 -5
  160. package/docs/discoverability/markdown.mdx +5 -3
  161. package/docs/discoverability/mcp.mdx +4 -0
  162. package/docs/discoverability/metadata.mdx +3 -2
  163. package/docs/discoverability/open-graph.mdx +6 -4
  164. package/docs/discoverability/rss.mdx +3 -1
  165. package/docs/index.mdx +2 -2
  166. package/docs/references/asyncapi.mdx +1 -1
  167. package/docs/references/graphql.mdx +2 -2
  168. package/docs/references/openapi.mdx +3 -3
  169. package/package.json +1 -1
  170. package/skills/blume/SKILL.md +5 -5
  171. package/skills/blume-migrate/SKILL.md +6 -6
  172. package/skills/blume-migrate/references/docusaurus.md +6 -6
  173. package/skills/blume-migrate/references/mintlify.md +3 -3
  174. package/skills/blume-migrate/references/monorepo.md +1 -1
  175. package/skills/blume-migrate/references/nextra.md +1 -1
  176. package/skills/blume-migrate/references/starlight.md +5 -5
  177. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +2 -2
  178. package/skills/blume-update-docs/references/audit-checklist.md +1 -1
  179. package/src/ai/agent-readability.ts +4 -4
  180. package/src/ai/agent-surface.ts +56 -0
  181. package/src/ai/api/paths.ts +1 -1
  182. package/src/ai/api/spec.ts +15 -2
  183. package/src/ai/api-catalog.ts +7 -1
  184. package/src/ai/ask-context.ts +21 -9
  185. package/src/ai/ask-data.ts +28 -14
  186. package/src/ai/ask.ts +84 -71
  187. package/src/ai/component-markdown.ts +43 -37
  188. package/src/ai/cors.ts +3 -3
  189. package/src/ai/index.ts +16 -16
  190. package/src/ai/link-headers.ts +8 -3
  191. package/src/ai/llms.ts +4 -3
  192. package/src/ai/markdown.ts +23 -11
  193. package/src/ai/mcp/server.ts +78 -7
  194. package/src/ai/openapi-components.ts +1 -1
  195. package/src/ai/relative-links.ts +78 -10
  196. package/src/ai/serializers.ts +1 -1
  197. package/src/ai/static-expression.ts +416 -0
  198. package/src/ai/visibility.ts +46 -15
  199. package/src/analytics/databuddy.ts +67 -0
  200. package/src/analytics/head.ts +4 -0
  201. package/src/analytics/index.ts +2 -0
  202. package/src/analytics/posthog.ts +21 -3
  203. package/src/analytics/schema.ts +2 -0
  204. package/src/astro/generate.ts +90 -45
  205. package/src/astro/module-types.ts +1 -1
  206. package/src/astro/runtime-deps.ts +6 -6
  207. package/src/astro/templates.ts +87 -49
  208. package/src/audit/catalog.ts +2 -2
  209. package/src/audit/checks/assets.ts +25 -5
  210. package/src/audit/checks/content.ts +20 -2
  211. package/src/audit/checks/i18n.ts +46 -8
  212. package/src/audit/checks/indexability.ts +39 -19
  213. package/src/audit/checks/links.ts +14 -0
  214. package/src/audit/checks/llms.ts +6 -3
  215. package/src/audit/checks/network.ts +3 -1
  216. package/src/audit/checks/og-image.ts +10 -0
  217. package/src/audit/checks/robots.ts +6 -1
  218. package/src/audit/checks/sitemap.ts +56 -31
  219. package/src/audit/checks/social.ts +21 -2
  220. package/src/audit/crawl.ts +88 -15
  221. package/src/audit/report.ts +54 -17
  222. package/src/audit/run.ts +1 -0
  223. package/src/audit/types.ts +18 -0
  224. package/src/audit/url.ts +37 -6
  225. package/src/blume-modules.d.ts +2 -2
  226. package/src/cli/build-failure.ts +50 -0
  227. package/src/cli/commands/audit.ts +8 -1
  228. package/src/cli/commands/build.ts +19 -5
  229. package/src/cli/commands/check.ts +2 -0
  230. package/src/cli/commands/doctor.ts +7 -5
  231. package/src/cli/commands/eval.ts +4 -10
  232. package/src/cli/commands/init.ts +15 -5
  233. package/src/cli/commands/migrate.ts +2 -2
  234. package/src/cli/commands/preview.ts +15 -0
  235. package/src/cli/commands/sync.ts +2 -0
  236. package/src/cli/commands/translate.ts +12 -9
  237. package/src/cli/commands/upgrade.ts +13 -2
  238. package/src/cli/eject-scripts.ts +32 -7
  239. package/src/cli/env.ts +12 -1
  240. package/src/cli/init/scaffold.ts +117 -11
  241. package/src/cli/init/starter-spec.ts +235 -0
  242. package/src/cli/required-secrets.ts +3 -3
  243. package/src/components/content/AccordionItem.astro +26 -22
  244. package/src/components/content/Badge.astro +2 -9
  245. package/src/components/content/Card.astro +2 -2
  246. package/src/components/content/Component.astro +9 -3
  247. package/src/components/content/Expandable.astro +5 -1
  248. package/src/components/content/Frame.astro +2 -7
  249. package/src/components/content/GithubInfo.astro +12 -2
  250. package/src/components/content/Prompt.astro +2 -7
  251. package/src/components/content/Tabs.astro +54 -5
  252. package/src/components/content/Tile.astro +1 -1
  253. package/src/components/content/Tooltip.astro +69 -7
  254. package/src/components/content/Tree.astro +7 -2
  255. package/src/components/content/TypeTable.astro +10 -5
  256. package/src/components/content/Update.astro +8 -2
  257. package/src/components/content/auto-type-table.ts +4 -1
  258. package/src/components/content/badge-color.ts +17 -0
  259. package/src/components/content/base-href.ts +18 -3
  260. package/src/components/content/inline-markdown.ts +27 -7
  261. package/src/components/copy-feedback.ts +36 -9
  262. package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
  263. package/src/components/islands/{ask-ai.tsx → assistant.tsx} +39 -25
  264. package/src/components/islands/hooks.ts +21 -14
  265. package/src/components/islands/webmcp.ts +12 -8
  266. package/src/components/layout/Banner.astro +23 -4
  267. package/src/components/layout/Header.astro +32 -19
  268. package/src/components/layout/Logo.astro +5 -0
  269. package/src/components/layout/NavSelector.astro +6 -1
  270. package/src/components/layout/NavTabMenu.astro +133 -0
  271. package/src/components/layout/NavTree.astro +15 -6
  272. package/src/components/layout/NavTreeCache.astro +5 -2
  273. package/src/components/layout/NavTreeScript.astro +45 -5
  274. package/src/components/layout/PageLayout.astro +28 -14
  275. package/src/components/layout/Pagination.astro +7 -7
  276. package/src/components/layout/ReferenceLayout.astro +5 -2
  277. package/src/components/layout/RootLayout.astro +27 -14
  278. package/src/components/layout/Search.astro +18 -14
  279. package/src/components/layout/analytics-client.ts +3 -1
  280. package/src/components/layout/drawer-inert.ts +1 -1
  281. package/src/components/openapi/GraphqlType.astro +11 -3
  282. package/src/components/openapi/MessageComposer.astro +1 -1
  283. package/src/components/openapi/Operation.astro +21 -5
  284. package/src/components/openapi/PanelTabs.astro +4 -1
  285. package/src/components/openapi/Playground.astro +8 -2
  286. package/src/components/openapi/RequestPanel.astro +9 -5
  287. package/src/components/openapi/SchemaProperty.astro +11 -33
  288. package/src/components/openapi/SchemaTable.astro +27 -52
  289. package/src/components/openapi/description.ts +2 -2
  290. package/src/components/openapi/helpers.ts +90 -12
  291. package/src/components/openapi/message-composer.ts +8 -0
  292. package/src/components/openapi/message-model.ts +12 -2
  293. package/src/components/openapi/message.ts +4 -1
  294. package/src/components/openapi/operation-model.ts +40 -8
  295. package/src/components/openapi/panel.ts +29 -5
  296. package/src/components/openapi/playground-client.ts +37 -7
  297. package/src/components/openapi/playground-schema.ts +25 -6
  298. package/src/components/openapi/request.ts +2 -0
  299. package/src/components/openapi/schema-tree.ts +203 -0
  300. package/src/components/openapi/snippets.ts +30 -15
  301. package/src/components/openapi/validate-json.ts +1 -1
  302. package/src/core/base-path.ts +15 -0
  303. package/src/core/code-fences.ts +1 -1
  304. package/src/core/config-input.ts +23 -23
  305. package/src/core/config.ts +21 -7
  306. package/src/core/data.ts +3 -3
  307. package/src/core/diagnostics.ts +217 -30
  308. package/src/core/graph.ts +120 -11
  309. package/src/core/i18n-ui.ts +74 -11
  310. package/src/core/i18n.ts +13 -2
  311. package/src/core/links.ts +7 -4
  312. package/src/core/load-module.ts +20 -0
  313. package/src/core/locale-links.ts +17 -17
  314. package/src/core/manifest.ts +3 -2
  315. package/src/core/meta.ts +69 -6
  316. package/src/core/nav-diagnostics.ts +56 -1
  317. package/src/core/navigation.ts +245 -76
  318. package/src/core/ordering-prefix.ts +27 -0
  319. package/src/core/project-graph.ts +23 -1
  320. package/src/core/request-body.ts +1 -1
  321. package/src/core/safe-href.ts +53 -1
  322. package/src/core/safe-links.ts +11 -2
  323. package/src/core/schema.ts +95 -34
  324. package/src/core/server-features.ts +2 -2
  325. package/src/core/sources/assets.ts +83 -41
  326. package/src/core/sources/contentful-rich-text.ts +3 -2
  327. package/src/core/sources/contentful.ts +25 -12
  328. package/src/core/sources/filesystem.ts +5 -1
  329. package/src/core/sources/github-releases.ts +106 -5
  330. package/src/core/sources/lexical.ts +9 -4
  331. package/src/core/sources/lower.ts +79 -26
  332. package/src/core/sources/mdx-remote.ts +1 -0
  333. package/src/core/sources/normalize.ts +132 -30
  334. package/src/core/sources/notion.ts +26 -10
  335. package/src/core/sources/obsidian.ts +17 -3
  336. package/src/core/sources/payload.ts +1 -0
  337. package/src/core/sources/portable-text.ts +63 -44
  338. package/src/core/sources/remote.ts +18 -2
  339. package/src/core/sources/resolve.ts +52 -33
  340. package/src/core/sources/sanity.ts +1 -0
  341. package/src/core/sources/strapi-blocks.ts +9 -4
  342. package/src/core/sources/strapi.ts +1 -0
  343. package/src/core/sources/types.ts +31 -0
  344. package/src/core/types.ts +9 -0
  345. package/src/core/ui-packs/ar.ts +17 -5
  346. package/src/core/ui-packs/bg.ts +17 -5
  347. package/src/core/ui-packs/bn.ts +17 -5
  348. package/src/core/ui-packs/ca.ts +17 -5
  349. package/src/core/ui-packs/cs.ts +17 -5
  350. package/src/core/ui-packs/da.ts +17 -5
  351. package/src/core/ui-packs/de.ts +17 -5
  352. package/src/core/ui-packs/el.ts +17 -5
  353. package/src/core/ui-packs/es.ts +17 -5
  354. package/src/core/ui-packs/fa.ts +17 -5
  355. package/src/core/ui-packs/fi.ts +17 -5
  356. package/src/core/ui-packs/fr.ts +17 -5
  357. package/src/core/ui-packs/he.ts +17 -5
  358. package/src/core/ui-packs/hi.ts +17 -5
  359. package/src/core/ui-packs/hr.ts +17 -5
  360. package/src/core/ui-packs/hu.ts +17 -5
  361. package/src/core/ui-packs/id.ts +17 -5
  362. package/src/core/ui-packs/it.ts +17 -5
  363. package/src/core/ui-packs/ja.ts +17 -5
  364. package/src/core/ui-packs/ko.ts +17 -5
  365. package/src/core/ui-packs/nl.ts +17 -5
  366. package/src/core/ui-packs/no.ts +17 -5
  367. package/src/core/ui-packs/pl.ts +17 -5
  368. package/src/core/ui-packs/pt-br.ts +17 -5
  369. package/src/core/ui-packs/pt.ts +17 -5
  370. package/src/core/ui-packs/ro.ts +17 -5
  371. package/src/core/ui-packs/ru.ts +17 -5
  372. package/src/core/ui-packs/sk.ts +17 -5
  373. package/src/core/ui-packs/sr.ts +17 -5
  374. package/src/core/ui-packs/sv.ts +17 -5
  375. package/src/core/ui-packs/th.ts +17 -5
  376. package/src/core/ui-packs/tr.ts +17 -5
  377. package/src/core/ui-packs/uk.ts +17 -5
  378. package/src/core/ui-packs/vi.ts +17 -5
  379. package/src/core/ui-packs/zh-tw.ts +17 -5
  380. package/src/core/ui-packs/zh.ts +17 -5
  381. package/src/core/unrecognized-keys.ts +1 -1
  382. package/src/core/version-cut.ts +17 -2
  383. package/src/core/versions.ts +4 -1
  384. package/src/deploy/adapters/node.ts +5 -2
  385. package/src/deploy/adapters/registry.ts +2 -1
  386. package/src/deploy/adapters/types.ts +13 -1
  387. package/src/deploy/artifacts.ts +25 -5
  388. package/src/deploy/cloudflare-negotiation.ts +23 -4
  389. package/src/deploy/headers.ts +67 -51
  390. package/src/deploy/node-headers.ts +148 -27
  391. package/src/deploy/platforms/cloudflare.ts +1 -0
  392. package/src/deploy/platforms/netlify.ts +82 -5
  393. package/src/deploy/platforms/node.ts +7 -5
  394. package/src/deploy/platforms/static.ts +1 -0
  395. package/src/deploy/platforms/types.ts +7 -0
  396. package/src/deploy/platforms/vercel.ts +9 -3
  397. package/src/deploy/redirects.ts +14 -3
  398. package/src/deploy/vercel-negotiation.ts +35 -3
  399. package/src/eval/agents.ts +10 -2
  400. package/src/eval/run.ts +25 -0
  401. package/src/markdown/base-links.ts +55 -8
  402. package/src/markdown/index.ts +6 -3
  403. package/src/markdown/relative-links.ts +3 -23
  404. package/src/markdown/route-snapshot.ts +37 -0
  405. package/src/og/card.ts +20 -4
  406. package/src/og/derive.ts +145 -4
  407. package/src/openapi/graphql-build.ts +28 -2
  408. package/src/openapi/model.ts +77 -13
  409. package/src/openapi/render-mdx.ts +10 -1
  410. package/src/registry/eject.ts +135 -37
  411. package/src/search/documents.ts +24 -3
  412. package/src/search/orama-index.ts +1 -1
  413. package/src/search/sync/algolia.ts +36 -2
  414. package/src/sources/registry.ts +5 -0
  415. package/src/theme/entry.ts +11 -4
  416. package/src/translate/agents.ts +6 -1
  417. package/src/translate/ledger.ts +26 -3
  418. package/src/translate/meta.ts +11 -3
  419. package/src/translate/report.ts +1 -1
  420. package/src/translate/run.ts +11 -5
  421. package/src/translate/validate.ts +10 -1
  422. package/src/translate/work-list.ts +36 -3
  423. package/src/upgrade/upgrade.ts +37 -5
  424. package/dist/cli/chunk-1w8dp3qb.js.map +0 -10
  425. package/dist/cli/chunk-5a2z0198.js.map +0 -10
  426. package/dist/cli/chunk-6k8vp3ta.js.map +0 -19
  427. package/dist/cli/chunk-79njf86q.js.map +0 -11
  428. package/dist/cli/chunk-a9kptbw5.js.map +0 -14
  429. package/dist/cli/chunk-abh8yjkn.js +0 -31
  430. package/dist/cli/chunk-abh8yjkn.js.map +0 -10
  431. package/dist/cli/chunk-bctazmbk.js.map +0 -10
  432. package/dist/cli/chunk-beat36xx.js.map +0 -10
  433. package/dist/cli/chunk-d1tadaw7.js.map +0 -10
  434. package/dist/cli/chunk-fa25z98p.js.map +0 -11
  435. package/dist/cli/chunk-j8mw0za6.js.map +0 -35
  436. package/dist/cli/chunk-mnqj32sj.js.map +0 -12
  437. package/dist/cli/chunk-mwt1k8n7.js.map +0 -10
  438. package/dist/cli/chunk-nk3ts2xk.js +0 -51
  439. package/dist/cli/chunk-nk3ts2xk.js.map +0 -10
  440. package/dist/cli/chunk-sqn5t4q0.js.map +0 -10
  441. package/dist/cli/chunk-tzne8qfq.js.map +0 -10
  442. package/dist/cli/chunk-xaz13gwg.js.map +0 -182
  443. package/dist/cli/chunk-z01ze5c1.js.map +0 -10
  444. package/dist/cli/chunk-z1f5arsg.js.map +0 -36
  445. package/dist/cli/chunk-zg2gtj10.js.map +0 -35
  446. /package/dist/cli/{chunk-f2972sbt.js.map → chunk-00gs3wqs.js.map} +0 -0
  447. /package/dist/cli/{chunk-7ez8ny0t.js.map → chunk-bbnwccaz.js.map} +0 -0
  448. /package/dist/cli/{chunk-zxccj738.js.map → chunk-esh98wmb.js.map} +0 -0
  449. /package/dist/cli/{chunk-88cpgt6h.js.map → chunk-fsmrqk8a.js.map} +0 -0
  450. /package/dist/cli/{chunk-b5aj94ah.js.map → chunk-g698a744.js.map} +0 -0
  451. /package/dist/cli/{chunk-41za066z.js.map → chunk-h2ez8dzb.js.map} +0 -0
  452. /package/dist/cli/{chunk-by2290sx.js.map → chunk-h7k3nq3v.js.map} +0 -0
  453. /package/dist/cli/{chunk-y3e45rc8.js.map → chunk-n1yg3tj3.js.map} +0 -0
  454. /package/dist/cli/{chunk-f7t03s3g.js.map → chunk-wdrt2k2v.js.map} +0 -0
@@ -31,7 +31,7 @@ import {
31
31
  hasDeferrableGroups,
32
32
  navVariants,
33
33
  } from "../components/layout/nav-utils.ts";
34
- import { normalizeBasePath } from "../core/base-path.ts";
34
+ import { normalizeBasePath, withBasePath } from "../core/base-path.ts";
35
35
  import { validateUsedComponents } from "../core/component-diagnostics.ts";
36
36
  import {
37
37
  analyzeComponentOverrides,
@@ -81,7 +81,9 @@ import { ogCacheDir } from "../og/cache.ts";
81
81
  import { missingFontFiles, resolveOgFonts } from "../og/derive.ts";
82
82
  import type { DerivedOgFonts } from "../og/derive.ts";
83
83
  import { resolveOgLogo } from "../og/logo.ts";
84
- import type { ApiSpecData, OpenApiData } from "../openapi/model.ts";
84
+ import type { AsyncApiSpecValue } from "../openapi/asyncapi.ts";
85
+ import type { ApiSpecData, HttpMethod, OpenApiData } from "../openapi/model.ts";
86
+ import { HTTP_METHODS, withServerDefaults } from "../openapi/model.ts";
85
87
  import {
86
88
  builtinProxyReferences,
87
89
  hasScalarReferences,
@@ -636,7 +638,7 @@ const writeIfChanged = async (
636
638
 
637
639
  /**
638
640
  * Delete generated files under `srcDir` that this pass didn't (re)write. The
639
- * generator emits many files conditionally — an Ask AI endpoint, OG images, a
641
+ * generator emits many files conditionally — an assistant endpoint, OG images, a
640
642
  * search index, RSS feeds, reference pages, the MCP server — so toggling a
641
643
  * feature off would otherwise leave a stale file behind, and a leftover
642
644
  * server-rendered endpoint breaks the static build. `writeIfChanged` only ever
@@ -954,6 +956,8 @@ const resolveBanner = (config: ResolvedConfig): BlumeBanner | null => {
954
956
  if (isStringShorthand(banner)) {
955
957
  return { content: banner, dismissible: false, key: banner };
956
958
  }
959
+ // `link.href` stays as authored; the link the banner renders is the
960
+ // navigation's `bannerHref`, localized and mounted under `basePath`.
957
961
  return {
958
962
  content: banner.content,
959
963
  dismissible: banner.dismissible,
@@ -1114,10 +1118,10 @@ export const buildRuntimeData = (project: BlumeProject): string => {
1114
1118
  config: {
1115
1119
  analytics: config.analytics,
1116
1120
  appleIcon: resolveAppleIcon(project),
1117
- ask: config.ai.ask?.enabled
1121
+ assistant: config.ai.assistant?.enabled
1118
1122
  ? {
1119
- endpoint: config.ai.ask.endpoint ?? null,
1120
- suggestions: config.ai.ask.suggestions,
1123
+ endpoint: config.ai.assistant.endpoint ?? null,
1124
+ suggestions: config.ai.assistant.suggestions,
1121
1125
  }
1122
1126
  : null,
1123
1127
  banner: resolveBanner(config),
@@ -1489,28 +1493,41 @@ const writeApiFiles = async (
1489
1493
  await Promise.all(writes);
1490
1494
  };
1491
1495
 
1496
+ /** The proxy endpoint's file under the Astro `src/` dir (eject writes it too). */
1497
+ export const PLAYGROUND_PROXY_ENTRY = join("blume-openapi", "api-proxy.ts");
1498
+
1499
+ /** The URL the built-in proxy is injected at (see {@link planPlaygroundProxy}). */
1500
+ export const playgroundProxyPattern = (config: ResolvedConfig): string =>
1501
+ withBasePath(config.basePath, "/_api-proxy");
1502
+
1492
1503
  /**
1493
1504
  * Decide whether to generate the playground's built-in CORS proxy endpoint.
1494
1505
  * Only the Blume renderer's playground with `proxy: true` needs it — a proxy
1495
1506
  * URL string points at an external service, and `false` sends requests
1496
1507
  * directly. Injected at `/_api-proxy` (rather than written under `pages/`)
1497
1508
  * because Astro treats `_`-prefixed page files as private; the endpoint's own
1498
- * `prerender = false` export wins over the injection default.
1509
+ * `prerender = false` export wins over the injection default. Mounted under
1510
+ * the site `basePath`, at the URL the playground sends to (see
1511
+ * openapi/source.ts); Astro layers `deployment.base` onto both.
1499
1512
  */
1500
1513
  const planPlaygroundProxy = (config: ResolvedConfig, srcDir: string) => ({
1501
1514
  enabled: needsPlaygroundProxy(config),
1502
- entrypoint: join(srcDir, "blume-openapi", "api-proxy.ts"),
1503
- pattern: "/_api-proxy",
1515
+ entrypoint: join(srcDir, PLAYGROUND_PROXY_ENTRY),
1516
+ pattern: playgroundProxyPattern(config),
1504
1517
  });
1505
1518
 
1506
1519
  /**
1507
1520
  * The origins the built-in proxy is allowed to reach: one per absolute
1508
- * `servers[].url` across the parsed specs. This is the endpoint's whole trust
1509
- * boundary — the client sends the target as a query parameter, and a reader's
1510
- * custom base URL is not a documented server — so it is derived here, at build
1511
- * time, from the same documents the operation pages render.
1521
+ * `servers[].url` across the parsed specs — the document's, each path item's,
1522
+ * and each operation's, since an operation's playground sends to the most
1523
+ * specific of those. This is the endpoint's whole trust boundary — the client
1524
+ * sends the target as a query parameter, and a reader's custom base URL is not
1525
+ * a documented server — so it is derived here, at build time, from the same
1526
+ * documents the operation pages render.
1512
1527
  *
1513
- * Relative (`/v1`) and templated (`{env}.api.example.com`) server URLs carry no
1528
+ * A templated URL (`https://{env}.api.example.com`) is allowed as the
1529
+ * playground sends it, with each variable at its declared default. Relative
1530
+ * (`/v1`) URLs, and templates with a variable left undefaulted, carry no
1514
1531
  * origin to allow and are skipped; AsyncAPI documents declare `servers` as a
1515
1532
  * map and contribute nothing (the proxy is OpenAPI-only).
1516
1533
  */
@@ -1526,27 +1543,53 @@ const specOriginsOf = (spec: ApiSpecData): string[] => {
1526
1543
  }
1527
1544
  }
1528
1545
  // SAFETY: `document` is arbitrary parsed JSON; the assertion only names
1529
- // the optional `servers` shape, and every access below re-checks it —
1530
- // `Array.isArray(servers)` guards the list and `server.url ?? ""` the url.
1531
- const { servers } = spec.document as { servers?: { url?: string }[] };
1532
- for (const server of Array.isArray(servers) ? servers : []) {
1533
- const url = server.url ?? "";
1534
- // `new URL("https://{region}.api.example.com")` parses — the braces land
1535
- // in the hostname — so templated URLs need an explicit check or their
1536
- // junk literal becomes an allowlist entry no real request can match.
1537
- if (url.includes("{")) {
1538
- continue;
1546
+ // the optional `servers` and `paths` shapes, and every access below
1547
+ // re-checks them — `Array.isArray` guards each list, optional chaining each
1548
+ // path item and operation, and `server.url ?? ""` the url.
1549
+ const document = spec.document as {
1550
+ paths?: Record<string, DocumentPathItem | null | undefined>;
1551
+ servers?: DocumentServer[];
1552
+ };
1553
+ const lists = [document.servers];
1554
+ for (const item of Object.values(document.paths ?? {})) {
1555
+ lists.push(item?.servers);
1556
+ for (const method of HTTP_METHODS) {
1557
+ lists.push(item?.[method]?.servers);
1539
1558
  }
1540
- try {
1541
- origins.add(new URL(url).origin);
1542
- } catch {
1543
- // Not an absolute URL: nothing to allow.
1559
+ }
1560
+ for (const servers of lists) {
1561
+ for (const server of Array.isArray(servers) ? servers : []) {
1562
+ const url = withServerDefaults(server.url ?? "", server.variables);
1563
+ // `new URL("https://{region}.api.example.com")` parses — the braces land
1564
+ // in the hostname — so a variable with no default needs an explicit
1565
+ // check or its junk literal becomes an allowlist entry no real request
1566
+ // can match.
1567
+ if (url.includes("{")) {
1568
+ continue;
1569
+ }
1570
+ try {
1571
+ origins.add(new URL(url).origin);
1572
+ } catch {
1573
+ // Not an absolute URL: nothing to allow.
1574
+ }
1544
1575
  }
1545
1576
  }
1546
1577
  return [...origins];
1547
1578
  };
1548
1579
 
1549
- const specOrigins = (data: OpenApiData): string[] =>
1580
+ /** A `servers[]` entry as a parsed spec document declares it. */
1581
+ interface DocumentServer {
1582
+ url?: string;
1583
+ variables?: AsyncApiSpecValue;
1584
+ }
1585
+
1586
+ /** An OpenAPI path item: its own `servers` plus one per operation. */
1587
+ type DocumentPathItem = { servers?: DocumentServer[] } & Partial<
1588
+ Record<HttpMethod, { servers?: DocumentServer[] } | null>
1589
+ >;
1590
+
1591
+ /** The built-in proxy's allowlist: every spec's origins, deduped and sorted. */
1592
+ export const specOrigins = (data: OpenApiData): string[] =>
1550
1593
  [...new Set(Object.values(data).flatMap(specOriginsOf))].toSorted();
1551
1594
 
1552
1595
  /**
@@ -1558,7 +1601,7 @@ const specOrigins = (data: OpenApiData): string[] =>
1558
1601
  * whose own origins came out empty (no absolute `servers[].url`, no absolute
1559
1602
  * GraphQL `endpoint`) gets a warning naming it.
1560
1603
  */
1561
- const proxyAllowlistWarnings = (
1604
+ export const proxyAllowlistWarnings = (
1562
1605
  config: ResolvedConfig,
1563
1606
  data: OpenApiData
1564
1607
  ): string[] => {
@@ -1573,16 +1616,16 @@ const proxyAllowlistWarnings = (
1573
1616
  warnings.push(
1574
1617
  spec.kind === "graphql"
1575
1618
  ? `The "${spec.label}" GraphQL reference (${spec.route}) has playground.proxy: true, but no absolute endpoint is configured for it, so the built-in proxy has no origin to allow and will refuse every request its playground sends. Set \`endpoint\` on the graphql() adapter (or the source) to the live GraphQL URL, or point playground.proxy at an external proxy URL.`
1576
- : `The "${spec.label}" reference (${spec.route}) has playground.proxy: true, but its spec declares no absolute servers[].url (relative and templated URLs carry no origin), so the built-in proxy has no origin to allow and will refuse every request its playground sends. Add an absolute server URL to the spec, or point playground.proxy at an external proxy URL.`
1619
+ : `The "${spec.label}" reference (${spec.route}) has playground.proxy: true, but its spec declares no absolute servers[].url (relative URLs, and templated ones with a variable missing its default, carry no origin), so the built-in proxy has no origin to allow and will refuse every request its playground sends. Add an absolute server URL to the spec, or point playground.proxy at an external proxy URL.`
1577
1620
  );
1578
1621
  }
1579
1622
  return warnings;
1580
1623
  };
1581
1624
 
1582
1625
  /**
1583
- * Write the Ask AI endpoint and, unless the backend runs its own retrieval
1626
+ * Write the assistant endpoint and, unless the backend runs its own retrieval
1584
1627
  * (Inkeep), the grounding snapshot the endpoint queries at request time. A no-op
1585
- * when Ask AI is disabled.
1628
+ * when the assistant is disabled.
1586
1629
  */
1587
1630
  const writeAskFiles = async (
1588
1631
  project: BlumeProject,
@@ -1590,20 +1633,20 @@ const writeAskFiles = async (
1590
1633
  write: (path: string, content: string) => Promise<boolean>,
1591
1634
  modules: RuntimeModules
1592
1635
  ): Promise<void> => {
1593
- const { ask } = project.config.ai;
1594
- if (!(ask?.enabled && !ask.endpoint)) {
1636
+ const { assistant } = project.config.ai;
1637
+ if (!(assistant?.enabled && !assistant.endpoint)) {
1595
1638
  return;
1596
1639
  }
1597
- const backend = resolveAskBackend(ask.provider);
1640
+ const backend = resolveAskBackend(assistant.provider);
1598
1641
  if (backend.grounded) {
1599
1642
  modules.set("blume:ask-data", JSON.stringify(await buildAskData(project)));
1600
1643
  }
1601
1644
  await write(
1602
1645
  join(srcDir, "pages", "api", "ask.ts"),
1603
1646
  askEndpointTemplate(backend, {
1604
- cors: ask.cors,
1605
- instructions: ask.instructions,
1606
- retrieval: ask.retrieval,
1647
+ cors: assistant.cors,
1648
+ instructions: assistant.instructions,
1649
+ retrieval: assistant.retrieval,
1607
1650
  })
1608
1651
  );
1609
1652
  };
@@ -1645,7 +1688,7 @@ export const diagnosticWarning = (diagnostic: Diagnostic): string =>
1645
1688
 
1646
1689
  /**
1647
1690
  * Missing-dependency preflight: the search provider's SDK, content source
1648
- * SDKs, the Ask AI backend's provider SDK, the deployment adapter's package,
1691
+ * SDKs, the assistant backend's provider SDK, the deployment adapter's package,
1649
1692
  * and — since React ships with Blume while Vue/Svelte don't — any island
1650
1693
  * framework's Astro integration. A build fails here, before anything is
1651
1694
  * written, with the install command for the project's package manager —
@@ -1699,6 +1742,7 @@ export const analyzeComponentsFile = async (
1699
1742
  const projectOgFonts = (project: BlumeProject): DerivedOgFonts =>
1700
1743
  resolveOgFonts(
1701
1744
  {
1745
+ locales: fontLocaleCodes(project.config.i18n),
1702
1746
  ogFonts: project.config.seo.og.fonts,
1703
1747
  themeFonts: project.config.theme.fonts,
1704
1748
  themeFontsConfigured: project.themeFontsConfigured,
@@ -1845,7 +1889,7 @@ export const generateRuntime = async (
1845
1889
  const homeLinkHeader =
1846
1890
  buildHomeLinkHeader(config, contentRoutes) ?? undefined;
1847
1891
 
1848
- const askEnabled = config.ai.ask?.enabled ?? false;
1892
+ const assistantEnabled = config.ai.assistant?.enabled ?? false;
1849
1893
  const exportPdf = config.export.pdf;
1850
1894
  const exportEpub = config.export.epub;
1851
1895
  // Every route's source Markdown: published as `blume:raw-markdown` below,
@@ -1897,7 +1941,7 @@ export const generateRuntime = async (
1897
1941
  project.examples = exampleMarkdownLookup(exampleDiscovery.examples);
1898
1942
 
1899
1943
  // Each island/example framework enables its Astro renderer. React also
1900
- // switches on for any project `.tsx`/`.jsx` and for Ask AI; Vue/Svelte are
1944
+ // switches on for any project `.tsx`/`.jsx` and for the assistant; Vue/Svelte are
1901
1945
  // island/example-driven. `.astro` examples need no renderer. Component
1902
1946
  // overrides referencing a framework component enable its renderer too.
1903
1947
  const frameworks = new Set<string>([
@@ -1906,7 +1950,8 @@ export const generateRuntime = async (
1906
1950
  ...slotPlan.frameworks,
1907
1951
  ]);
1908
1952
  const dependencyWarnings = await dependencyPreflight(project, frameworks);
1909
- const needsReact = detectedReact || askEnabled || frameworks.has("react");
1953
+ const needsReact =
1954
+ detectedReact || assistantEnabled || frameworks.has("react");
1910
1955
  const needsVue = frameworks.has("vue");
1911
1956
  const needsSvelte = frameworks.has("svelte");
1912
1957
 
@@ -2025,7 +2070,7 @@ export const generateRuntime = async (
2025
2070
  // The header's Ask trigger, behind the `blume:ask` alias. Always written
2026
2071
  // (even when Ask is off, as a component that renders nothing) so the alias
2027
2072
  // resolves — the same contract as `blume:search-client`.
2028
- write(askPath, askComponentTemplate(askEnabled)),
2073
+ write(askPath, askComponentTemplate(assistantEnabled)),
2029
2074
  write(join(srcDir, "generated", "components.ts"), slotPlan.module),
2030
2075
  write(
2031
2076
  join(srcDir, "generated", "examples.ts"),
@@ -2288,7 +2333,7 @@ export const generateRuntime = async (
2288
2333
  writeStagedContent(out, staged),
2289
2334
  ]);
2290
2335
 
2291
- // Remove anything under `.blume/src` this pass didn't write — e.g. an Ask AI
2336
+ // Remove anything under `.blume/src` this pass didn't write — e.g. an assistant
2292
2337
  // endpoint left behind after the feature was switched off.
2293
2338
  await pruneOrphans(srcDir, written);
2294
2339
 
@@ -14,7 +14,7 @@
14
14
  export const runtimeModuleDeclarations = (
15
15
  examplesModule: string
16
16
  ): string => `declare module "blume:ask" {
17
- const Ask: typeof import("blume/components/islands/AskAI.astro").default;
17
+ const Ask: typeof import("blume/components/islands/Assistant.astro").default;
18
18
  export default Ask;
19
19
  }
20
20
 
@@ -85,18 +85,18 @@ export const sourceAdapterDependencies = (
85
85
  );
86
86
 
87
87
  /**
88
- * The Ask AI adapter's provider SDK, when missing — only `gateway` needs
88
+ * The assistant adapter's provider SDK, when missing — only `gateway` needs
89
89
  * nothing beyond the core `ai` package Blume ships. An external `endpoint`
90
90
  * means no generated route, so no SDK is imported.
91
91
  */
92
- export const askProviderDependencies = (
93
- ask: ResolvedConfig["ai"]["ask"],
92
+ export const assistantProviderDependencies = (
93
+ ask: ResolvedConfig["ai"]["assistant"],
94
94
  root: string,
95
95
  pkgDir: string = packageRoot()
96
96
  ): MissingDependency[] =>
97
97
  ask?.enabled && !ask.endpoint
98
98
  ? unresolved(
99
- `Ask AI provider "${ask.provider.kind}"`,
99
+ `Assistant provider "${ask.provider.kind}"`,
100
100
  ask.provider.runtimeDeps,
101
101
  root,
102
102
  pkgDir
@@ -152,7 +152,7 @@ export const islandFrameworkDependencies = (
152
152
  /**
153
153
  * Every package the resolved config's adapters (and the given island
154
154
  * frameworks) import that isn't installed: the search SDK, content source
155
- * SDKs, the Ask AI provider SDK, the deployment adapter, and island
155
+ * SDKs, the assistant provider SDK, the deployment adapter, and island
156
156
  * integrations. The adapters' `runtimeDeps` are the one place that knows.
157
157
  */
158
158
  export const missingRuntimeDependencies = (
@@ -163,7 +163,7 @@ export const missingRuntimeDependencies = (
163
163
  ): MissingDependency[] => [
164
164
  ...searchProviderDependencies(config.search.provider, root, pkgDir),
165
165
  ...sourceAdapterDependencies(config.content.sources, root, pkgDir),
166
- ...askProviderDependencies(config.ai.ask, root, pkgDir),
166
+ ...assistantProviderDependencies(config.ai.assistant, root, pkgDir),
167
167
  ...deploymentAdapterDependencies(config.deployment, root, pkgDir),
168
168
  ...islandFrameworkDependencies(frameworks, root),
169
169
  ];