blume 2.0.1 → 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 (410) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/dist/cli/{chunk-vtk4a6dg.js → chunk-00gs3wqs.js} +1 -1
  3. package/dist/cli/{chunk-fa25z98p.js → chunk-273ygyr4.js} +4 -3
  4. package/dist/cli/chunk-273ygyr4.js.map +11 -0
  5. package/dist/cli/{chunk-yw7dm696.js → chunk-3yce002v.js} +21 -8
  6. package/dist/cli/{chunk-yw7dm696.js.map → chunk-3yce002v.js.map} +3 -3
  7. package/dist/cli/{chunk-yt5n7ppj.js → chunk-4e9b9ra6.js} +17 -7
  8. package/dist/cli/chunk-4e9b9ra6.js.map +10 -0
  9. package/dist/cli/{chunk-fs23ddbb.js → chunk-5r8g91qn.js} +352 -676
  10. package/dist/cli/chunk-5r8g91qn.js.map +34 -0
  11. package/dist/cli/{chunk-6vm74dry.js → chunk-6dtt0zfn.js} +8 -8
  12. package/dist/cli/{chunk-qwsrynx5.js → chunk-6k4ftwze.js} +38 -19
  13. package/dist/cli/{chunk-qwsrynx5.js.map → chunk-6k4ftwze.js.map} +4 -4
  14. package/dist/cli/{chunk-qs4q5p4e.js → chunk-7mbqtmgb.js} +16 -7
  15. package/dist/cli/chunk-7mbqtmgb.js.map +10 -0
  16. package/dist/cli/{chunk-q5163e60.js → chunk-7vtckvaw.js} +21 -19
  17. package/dist/cli/chunk-7vtckvaw.js.map +11 -0
  18. package/dist/cli/{chunk-kdp5q7ke.js → chunk-8g8ytmgx.js} +17 -18
  19. package/dist/cli/{chunk-kdp5q7ke.js.map → chunk-8g8ytmgx.js.map} +2 -2
  20. package/dist/cli/{chunk-epjnccmv.js → chunk-91ws1n6j.js} +18 -15
  21. package/dist/cli/chunk-91ws1n6j.js.map +10 -0
  22. package/dist/cli/{chunk-fxypxtvm.js → chunk-bbnwccaz.js} +2 -2
  23. package/dist/cli/{chunk-m3vmjgmq.js → chunk-bfwp9vp6.js} +16 -8
  24. package/dist/cli/chunk-bfwp9vp6.js.map +10 -0
  25. package/dist/cli/{chunk-f2z5v128.js → chunk-d1v5rhy0.js} +14 -15
  26. package/dist/cli/{chunk-f2z5v128.js.map → chunk-d1v5rhy0.js.map} +2 -2
  27. package/dist/cli/{chunk-6crbhc3x.js → chunk-ddndchfr.js} +21 -6
  28. package/dist/cli/chunk-ddndchfr.js.map +14 -0
  29. package/dist/cli/{chunk-ce574jw2.js → chunk-esh98wmb.js} +1 -1
  30. package/dist/cli/{chunk-zxcczpyx.js → chunk-fsmrqk8a.js} +1 -1
  31. package/dist/cli/{chunk-hdpx1tax.js → chunk-g698a744.js} +5 -5
  32. package/dist/cli/{chunk-jts8mvcz.js → chunk-gs7r695n.js} +9 -3
  33. package/dist/cli/{chunk-jts8mvcz.js.map → chunk-gs7r695n.js.map} +3 -3
  34. package/dist/cli/{chunk-zxh4d9vy.js → chunk-h2ez8dzb.js} +4 -4
  35. package/dist/cli/{chunk-5shv93fd.js → chunk-h7k3nq3v.js} +2 -2
  36. package/dist/cli/{chunk-79jhk4py.js → chunk-hqp2ajnh.js} +251 -122
  37. package/dist/cli/chunk-hqp2ajnh.js.map +35 -0
  38. package/dist/cli/{chunk-2hn4b8z7.js → chunk-hr8ne106.js} +109 -40
  39. package/dist/cli/chunk-hr8ne106.js.map +13 -0
  40. package/dist/cli/{chunk-6hsn950k.js → chunk-j85scx15.js} +62 -18
  41. package/dist/cli/chunk-j85scx15.js.map +10 -0
  42. package/dist/cli/{chunk-s1p84fyh.js → chunk-k7pj68a8.js} +63 -22
  43. package/dist/cli/chunk-k7pj68a8.js.map +11 -0
  44. package/dist/cli/{chunk-ah61y8py.js → chunk-mqc662a6.js} +2 -2
  45. package/dist/cli/{chunk-ch6g3ar0.js → chunk-n1yg3tj3.js} +4 -4
  46. package/dist/cli/{chunk-mb2919y2.js → chunk-nfcyttvj.js} +17 -6
  47. package/dist/cli/chunk-nfcyttvj.js.map +10 -0
  48. package/dist/cli/{chunk-kpf8rrjc.js → chunk-pbg5a4s3.js} +56 -24
  49. package/dist/cli/chunk-pbg5a4s3.js.map +19 -0
  50. package/dist/cli/{chunk-jwyddg7y.js → chunk-ppzjqwx2.js} +21 -14
  51. package/dist/cli/{chunk-jwyddg7y.js.map → chunk-ppzjqwx2.js.map} +4 -4
  52. package/dist/cli/{chunk-dh8cwk36.js → chunk-qkb5a8sa.js} +24 -9
  53. package/dist/cli/chunk-qkb5a8sa.js.map +10 -0
  54. package/dist/cli/{chunk-wm7js3j9.js → chunk-sqw4ekg1.js} +2 -2
  55. package/dist/cli/{chunk-qkqwkpte.js → chunk-v6ya5kcb.js} +3083 -953
  56. package/dist/cli/chunk-v6ya5kcb.js.map +189 -0
  57. package/dist/cli/{chunk-fz5wtpmh.js → chunk-w4bxdvsa.js} +18 -15
  58. package/dist/cli/chunk-w4bxdvsa.js.map +10 -0
  59. package/dist/cli/{chunk-27g6wdth.js → chunk-wdrt2k2v.js} +2 -2
  60. package/dist/cli/{chunk-wgm7m9qk.js → chunk-xh43dwgw.js} +158 -43
  61. package/dist/cli/chunk-xh43dwgw.js.map +36 -0
  62. package/dist/cli/{chunk-s6jhgk0q.js → chunk-zp79m0ts.js} +2 -2
  63. package/dist/cli/index.js +160 -35
  64. package/dist/cli/index.js.map +4 -4
  65. package/dist/types/ai/agent-surface.d.ts +32 -0
  66. package/dist/types/ai/api-catalog.d.ts +7 -1
  67. package/dist/types/ai/ask-context.d.ts +7 -0
  68. package/dist/types/ai/component-markdown.d.ts +4 -4
  69. package/dist/types/ai/relative-links.d.ts +9 -4
  70. package/dist/types/ai/static-expression.d.ts +28 -0
  71. package/dist/types/analytics/databuddy.d.ts +43 -0
  72. package/dist/types/analytics/index.d.ts +2 -0
  73. package/dist/types/analytics/schema.d.ts +14 -0
  74. package/dist/types/cli/env.d.ts +5 -0
  75. package/dist/types/cli/init/scaffold.d.ts +19 -3
  76. package/dist/types/cli/init/starter-spec.d.ts +11 -0
  77. package/dist/types/core/base-path.d.ts +9 -0
  78. package/dist/types/core/config-input.d.ts +4 -4
  79. package/dist/types/core/config.d.ts +2 -2
  80. package/dist/types/core/graph.d.ts +2 -0
  81. package/dist/types/core/i18n-ui.d.ts +31 -0
  82. package/dist/types/core/i18n.d.ts +7 -1
  83. package/dist/types/core/links.d.ts +3 -1
  84. package/dist/types/core/load-module.d.ts +10 -0
  85. package/dist/types/core/locale-links.d.ts +12 -2
  86. package/dist/types/core/meta.d.ts +5 -1
  87. package/dist/types/core/nav-diagnostics.d.ts +10 -0
  88. package/dist/types/core/navigation.d.ts +38 -0
  89. package/dist/types/core/ordering-prefix.d.ts +4 -0
  90. package/dist/types/core/safe-links.d.ts +3 -1
  91. package/dist/types/core/schema.d.ts +52 -13
  92. package/dist/types/core/sources/github-releases.d.ts +5 -0
  93. package/dist/types/core/sources/lower.d.ts +14 -2
  94. package/dist/types/core/sources/normalize.d.ts +10 -1
  95. package/dist/types/core/sources/remote.d.ts +11 -1
  96. package/dist/types/core/sources/resolve.d.ts +12 -0
  97. package/dist/types/core/sources/types.d.ts +31 -0
  98. package/dist/types/core/types.d.ts +9 -0
  99. package/dist/types/deploy/adapters/node.d.ts +5 -2
  100. package/dist/types/deploy/adapters/types.d.ts +7 -0
  101. package/dist/types/deploy/cloudflare-negotiation.d.ts +3 -2
  102. package/dist/types/deploy/headers.d.ts +31 -7
  103. package/dist/types/deploy/node-headers.d.ts +43 -8
  104. package/dist/types/deploy/platforms/netlify.d.ts +27 -2
  105. package/dist/types/deploy/platforms/node.d.ts +6 -5
  106. package/dist/types/deploy/platforms/types.d.ts +7 -0
  107. package/dist/types/deploy/platforms/vercel.d.ts +3 -2
  108. package/dist/types/deploy/redirects.d.ts +7 -2
  109. package/dist/types/deploy/vercel-negotiation.d.ts +3 -2
  110. package/dist/types/openapi/model.d.ts +20 -6
  111. package/dist/types/search/sync/algolia.d.ts +3 -1
  112. package/docs/01-quickstart.mdx +3 -2
  113. package/docs/02-deployment.mdx +17 -8
  114. package/docs/08-faq.mdx +9 -2
  115. package/docs/advanced/changelog.mdx +1 -1
  116. package/docs/advanced/custom-pages.mdx +4 -2
  117. package/docs/cli/audit.mdx +2 -2
  118. package/docs/cli/doctor.mdx +2 -2
  119. package/docs/cli/evals.mdx +2 -2
  120. package/docs/cli/index.mdx +4 -1
  121. package/docs/cli/translate.mdx +1 -1
  122. package/docs/configuration/analytics.mdx +23 -2
  123. package/docs/configuration/assistant.mdx +1 -1
  124. package/docs/configuration/customization.mdx +4 -3
  125. package/docs/configuration/index.mdx +5 -3
  126. package/docs/configuration/search.mdx +1 -1
  127. package/docs/content/components.mdx +1 -1
  128. package/docs/content/frontmatter.mdx +5 -1
  129. package/docs/content/i18n.mdx +1 -1
  130. package/docs/content/index.mdx +4 -2
  131. package/docs/content/meta.mdx +5 -3
  132. package/docs/content/navigation.mdx +29 -4
  133. package/docs/content/sources.mdx +18 -12
  134. package/docs/content/versioning.mdx +1 -0
  135. package/docs/discoverability/agent-discovery.mdx +21 -7
  136. package/docs/discoverability/index.mdx +2 -2
  137. package/docs/discoverability/llms-txt.mdx +2 -5
  138. package/docs/discoverability/markdown.mdx +5 -3
  139. package/docs/discoverability/mcp.mdx +4 -0
  140. package/docs/discoverability/metadata.mdx +3 -2
  141. package/docs/discoverability/open-graph.mdx +6 -4
  142. package/docs/discoverability/rss.mdx +3 -1
  143. package/docs/references/asyncapi.mdx +1 -1
  144. package/docs/references/graphql.mdx +2 -2
  145. package/docs/references/openapi.mdx +3 -3
  146. package/package.json +1 -1
  147. package/skills/blume-migrate/SKILL.md +6 -6
  148. package/skills/blume-migrate/references/docusaurus.md +6 -6
  149. package/skills/blume-migrate/references/mintlify.md +3 -3
  150. package/skills/blume-migrate/references/monorepo.md +1 -1
  151. package/skills/blume-migrate/references/nextra.md +1 -1
  152. package/skills/blume-migrate/references/starlight.md +5 -5
  153. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +2 -2
  154. package/skills/blume-update-docs/references/audit-checklist.md +1 -1
  155. package/src/ai/agent-surface.ts +56 -0
  156. package/src/ai/api/spec.ts +15 -2
  157. package/src/ai/api-catalog.ts +7 -1
  158. package/src/ai/ask-context.ts +14 -2
  159. package/src/ai/ask-data.ts +26 -12
  160. package/src/ai/component-markdown.ts +43 -37
  161. package/src/ai/link-headers.ts +8 -3
  162. package/src/ai/llms.ts +4 -3
  163. package/src/ai/markdown.ts +23 -11
  164. package/src/ai/mcp/server.ts +78 -7
  165. package/src/ai/relative-links.ts +78 -10
  166. package/src/ai/static-expression.ts +416 -0
  167. package/src/ai/visibility.ts +45 -14
  168. package/src/analytics/databuddy.ts +67 -0
  169. package/src/analytics/head.ts +4 -0
  170. package/src/analytics/index.ts +2 -0
  171. package/src/analytics/posthog.ts +21 -3
  172. package/src/analytics/schema.ts +2 -0
  173. package/src/astro/generate.ts +71 -27
  174. package/src/astro/templates.ts +61 -23
  175. package/src/audit/catalog.ts +2 -2
  176. package/src/audit/checks/assets.ts +25 -5
  177. package/src/audit/checks/content.ts +20 -2
  178. package/src/audit/checks/i18n.ts +46 -8
  179. package/src/audit/checks/indexability.ts +39 -19
  180. package/src/audit/checks/links.ts +14 -0
  181. package/src/audit/checks/llms.ts +6 -3
  182. package/src/audit/checks/network.ts +3 -1
  183. package/src/audit/checks/og-image.ts +10 -0
  184. package/src/audit/checks/robots.ts +6 -1
  185. package/src/audit/checks/sitemap.ts +56 -31
  186. package/src/audit/checks/social.ts +21 -2
  187. package/src/audit/crawl.ts +88 -15
  188. package/src/audit/report.ts +54 -17
  189. package/src/audit/run.ts +1 -0
  190. package/src/audit/types.ts +18 -0
  191. package/src/audit/url.ts +37 -6
  192. package/src/cli/build-failure.ts +50 -0
  193. package/src/cli/commands/audit.ts +7 -0
  194. package/src/cli/commands/build.ts +19 -5
  195. package/src/cli/commands/check.ts +2 -0
  196. package/src/cli/commands/eval.ts +1 -7
  197. package/src/cli/commands/init.ts +15 -5
  198. package/src/cli/commands/preview.ts +15 -0
  199. package/src/cli/commands/sync.ts +2 -0
  200. package/src/cli/commands/translate.ts +9 -6
  201. package/src/cli/commands/upgrade.ts +11 -0
  202. package/src/cli/eject-scripts.ts +32 -7
  203. package/src/cli/env.ts +12 -1
  204. package/src/cli/init/scaffold.ts +117 -11
  205. package/src/cli/init/starter-spec.ts +235 -0
  206. package/src/components/content/AccordionItem.astro +26 -22
  207. package/src/components/content/Badge.astro +2 -9
  208. package/src/components/content/Card.astro +2 -2
  209. package/src/components/content/Component.astro +9 -3
  210. package/src/components/content/Expandable.astro +5 -1
  211. package/src/components/content/Frame.astro +2 -7
  212. package/src/components/content/GithubInfo.astro +12 -2
  213. package/src/components/content/Prompt.astro +2 -7
  214. package/src/components/content/Tabs.astro +54 -5
  215. package/src/components/content/Tile.astro +1 -1
  216. package/src/components/content/Tooltip.astro +69 -7
  217. package/src/components/content/Tree.astro +7 -2
  218. package/src/components/content/TypeTable.astro +10 -5
  219. package/src/components/content/Update.astro +8 -2
  220. package/src/components/content/auto-type-table.ts +4 -1
  221. package/src/components/content/badge-color.ts +17 -0
  222. package/src/components/content/base-href.ts +18 -3
  223. package/src/components/content/inline-markdown.ts +27 -7
  224. package/src/components/copy-feedback.ts +35 -8
  225. package/src/components/islands/assistant.tsx +16 -2
  226. package/src/components/islands/hooks.ts +7 -2
  227. package/src/components/islands/webmcp.ts +12 -8
  228. package/src/components/layout/Banner.astro +23 -4
  229. package/src/components/layout/Header.astro +22 -9
  230. package/src/components/layout/Logo.astro +5 -0
  231. package/src/components/layout/NavSelector.astro +6 -1
  232. package/src/components/layout/NavTabMenu.astro +133 -0
  233. package/src/components/layout/NavTree.astro +15 -6
  234. package/src/components/layout/NavTreeCache.astro +5 -2
  235. package/src/components/layout/NavTreeScript.astro +45 -5
  236. package/src/components/layout/PageLayout.astro +22 -8
  237. package/src/components/layout/ReferenceLayout.astro +4 -1
  238. package/src/components/layout/RootLayout.astro +21 -8
  239. package/src/components/layout/Search.astro +5 -1
  240. package/src/components/layout/analytics-client.ts +2 -0
  241. package/src/components/openapi/GraphqlType.astro +11 -3
  242. package/src/components/openapi/MessageComposer.astro +1 -1
  243. package/src/components/openapi/Operation.astro +21 -5
  244. package/src/components/openapi/PanelTabs.astro +4 -1
  245. package/src/components/openapi/Playground.astro +8 -2
  246. package/src/components/openapi/RequestPanel.astro +9 -5
  247. package/src/components/openapi/SchemaProperty.astro +11 -33
  248. package/src/components/openapi/SchemaTable.astro +27 -52
  249. package/src/components/openapi/helpers.ts +90 -12
  250. package/src/components/openapi/message-composer.ts +8 -0
  251. package/src/components/openapi/message-model.ts +12 -2
  252. package/src/components/openapi/message.ts +4 -1
  253. package/src/components/openapi/operation-model.ts +40 -8
  254. package/src/components/openapi/panel.ts +29 -5
  255. package/src/components/openapi/playground-client.ts +37 -7
  256. package/src/components/openapi/playground-schema.ts +25 -6
  257. package/src/components/openapi/request.ts +2 -0
  258. package/src/components/openapi/schema-tree.ts +203 -0
  259. package/src/components/openapi/snippets.ts +30 -15
  260. package/src/components/openapi/validate-json.ts +1 -1
  261. package/src/core/base-path.ts +15 -0
  262. package/src/core/config-input.ts +4 -4
  263. package/src/core/config.ts +18 -4
  264. package/src/core/diagnostics.ts +217 -30
  265. package/src/core/graph.ts +120 -11
  266. package/src/core/i18n-ui.ts +39 -2
  267. package/src/core/i18n.ts +13 -2
  268. package/src/core/links.ts +7 -4
  269. package/src/core/load-module.ts +20 -0
  270. package/src/core/locale-links.ts +17 -17
  271. package/src/core/manifest.ts +3 -2
  272. package/src/core/meta.ts +69 -6
  273. package/src/core/nav-diagnostics.ts +56 -1
  274. package/src/core/navigation.ts +245 -76
  275. package/src/core/ordering-prefix.ts +27 -0
  276. package/src/core/project-graph.ts +23 -1
  277. package/src/core/safe-href.ts +53 -1
  278. package/src/core/safe-links.ts +11 -2
  279. package/src/core/schema.ts +70 -14
  280. package/src/core/sources/assets.ts +83 -41
  281. package/src/core/sources/contentful-rich-text.ts +3 -2
  282. package/src/core/sources/contentful.ts +25 -12
  283. package/src/core/sources/filesystem.ts +5 -1
  284. package/src/core/sources/github-releases.ts +106 -5
  285. package/src/core/sources/lexical.ts +9 -4
  286. package/src/core/sources/lower.ts +79 -26
  287. package/src/core/sources/mdx-remote.ts +1 -0
  288. package/src/core/sources/normalize.ts +132 -30
  289. package/src/core/sources/notion.ts +26 -10
  290. package/src/core/sources/obsidian.ts +17 -3
  291. package/src/core/sources/payload.ts +1 -0
  292. package/src/core/sources/portable-text.ts +63 -44
  293. package/src/core/sources/remote.ts +18 -2
  294. package/src/core/sources/resolve.ts +52 -33
  295. package/src/core/sources/sanity.ts +1 -0
  296. package/src/core/sources/strapi-blocks.ts +9 -4
  297. package/src/core/sources/strapi.ts +1 -0
  298. package/src/core/sources/types.ts +31 -0
  299. package/src/core/types.ts +9 -0
  300. package/src/core/ui-packs/ar.ts +13 -0
  301. package/src/core/ui-packs/bg.ts +13 -0
  302. package/src/core/ui-packs/bn.ts +13 -0
  303. package/src/core/ui-packs/ca.ts +13 -0
  304. package/src/core/ui-packs/cs.ts +13 -0
  305. package/src/core/ui-packs/da.ts +13 -0
  306. package/src/core/ui-packs/de.ts +13 -0
  307. package/src/core/ui-packs/el.ts +13 -0
  308. package/src/core/ui-packs/es.ts +13 -0
  309. package/src/core/ui-packs/fa.ts +13 -0
  310. package/src/core/ui-packs/fi.ts +13 -0
  311. package/src/core/ui-packs/fr.ts +13 -0
  312. package/src/core/ui-packs/he.ts +13 -0
  313. package/src/core/ui-packs/hi.ts +13 -0
  314. package/src/core/ui-packs/hr.ts +13 -0
  315. package/src/core/ui-packs/hu.ts +13 -0
  316. package/src/core/ui-packs/id.ts +13 -0
  317. package/src/core/ui-packs/it.ts +13 -0
  318. package/src/core/ui-packs/ja.ts +13 -0
  319. package/src/core/ui-packs/ko.ts +13 -0
  320. package/src/core/ui-packs/nl.ts +13 -0
  321. package/src/core/ui-packs/no.ts +13 -0
  322. package/src/core/ui-packs/pl.ts +13 -0
  323. package/src/core/ui-packs/pt-br.ts +13 -0
  324. package/src/core/ui-packs/pt.ts +13 -0
  325. package/src/core/ui-packs/ro.ts +13 -0
  326. package/src/core/ui-packs/ru.ts +13 -0
  327. package/src/core/ui-packs/sk.ts +13 -0
  328. package/src/core/ui-packs/sr.ts +13 -0
  329. package/src/core/ui-packs/sv.ts +13 -0
  330. package/src/core/ui-packs/th.ts +13 -0
  331. package/src/core/ui-packs/tr.ts +13 -0
  332. package/src/core/ui-packs/uk.ts +13 -0
  333. package/src/core/ui-packs/vi.ts +13 -0
  334. package/src/core/ui-packs/zh-tw.ts +13 -0
  335. package/src/core/ui-packs/zh.ts +13 -0
  336. package/src/core/version-cut.ts +17 -2
  337. package/src/core/versions.ts +4 -1
  338. package/src/deploy/adapters/node.ts +5 -2
  339. package/src/deploy/adapters/registry.ts +2 -1
  340. package/src/deploy/adapters/types.ts +13 -1
  341. package/src/deploy/artifacts.ts +25 -5
  342. package/src/deploy/cloudflare-negotiation.ts +23 -4
  343. package/src/deploy/headers.ts +67 -51
  344. package/src/deploy/node-headers.ts +148 -27
  345. package/src/deploy/platforms/cloudflare.ts +1 -0
  346. package/src/deploy/platforms/netlify.ts +82 -5
  347. package/src/deploy/platforms/node.ts +7 -5
  348. package/src/deploy/platforms/static.ts +1 -0
  349. package/src/deploy/platforms/types.ts +7 -0
  350. package/src/deploy/platforms/vercel.ts +9 -3
  351. package/src/deploy/redirects.ts +14 -3
  352. package/src/deploy/vercel-negotiation.ts +35 -3
  353. package/src/eval/agents.ts +10 -2
  354. package/src/eval/run.ts +25 -0
  355. package/src/markdown/base-links.ts +55 -8
  356. package/src/markdown/index.ts +6 -3
  357. package/src/markdown/relative-links.ts +3 -23
  358. package/src/markdown/route-snapshot.ts +37 -0
  359. package/src/og/card.ts +20 -4
  360. package/src/og/derive.ts +145 -4
  361. package/src/openapi/graphql-build.ts +28 -2
  362. package/src/openapi/model.ts +77 -13
  363. package/src/openapi/render-mdx.ts +10 -1
  364. package/src/registry/eject.ts +119 -22
  365. package/src/search/documents.ts +22 -1
  366. package/src/search/sync/algolia.ts +36 -2
  367. package/src/sources/registry.ts +5 -0
  368. package/src/theme/entry.ts +11 -4
  369. package/src/translate/agents.ts +6 -1
  370. package/src/translate/ledger.ts +26 -3
  371. package/src/translate/meta.ts +11 -3
  372. package/src/translate/run.ts +11 -5
  373. package/src/translate/validate.ts +10 -1
  374. package/src/translate/work-list.ts +36 -3
  375. package/src/upgrade/upgrade.ts +36 -4
  376. package/dist/cli/chunk-2hn4b8z7.js.map +0 -12
  377. package/dist/cli/chunk-6crbhc3x.js.map +0 -14
  378. package/dist/cli/chunk-6hsn950k.js.map +0 -10
  379. package/dist/cli/chunk-79jhk4py.js.map +0 -35
  380. package/dist/cli/chunk-82bbrxdn.js +0 -51
  381. package/dist/cli/chunk-82bbrxdn.js.map +0 -10
  382. package/dist/cli/chunk-abh8yjkn.js +0 -31
  383. package/dist/cli/chunk-abh8yjkn.js.map +0 -10
  384. package/dist/cli/chunk-dh8cwk36.js.map +0 -10
  385. package/dist/cli/chunk-epjnccmv.js.map +0 -10
  386. package/dist/cli/chunk-fa25z98p.js.map +0 -11
  387. package/dist/cli/chunk-fs23ddbb.js.map +0 -35
  388. package/dist/cli/chunk-fz5wtpmh.js.map +0 -10
  389. package/dist/cli/chunk-kpf8rrjc.js.map +0 -19
  390. package/dist/cli/chunk-m3vmjgmq.js.map +0 -10
  391. package/dist/cli/chunk-mb2919y2.js.map +0 -10
  392. package/dist/cli/chunk-q5163e60.js.map +0 -11
  393. package/dist/cli/chunk-qkqwkpte.js.map +0 -182
  394. package/dist/cli/chunk-qs4q5p4e.js.map +0 -10
  395. package/dist/cli/chunk-s1p84fyh.js.map +0 -10
  396. package/dist/cli/chunk-wgm7m9qk.js.map +0 -36
  397. package/dist/cli/chunk-yt5n7ppj.js.map +0 -10
  398. /package/dist/cli/{chunk-vtk4a6dg.js.map → chunk-00gs3wqs.js.map} +0 -0
  399. /package/dist/cli/{chunk-6vm74dry.js.map → chunk-6dtt0zfn.js.map} +0 -0
  400. /package/dist/cli/{chunk-fxypxtvm.js.map → chunk-bbnwccaz.js.map} +0 -0
  401. /package/dist/cli/{chunk-ce574jw2.js.map → chunk-esh98wmb.js.map} +0 -0
  402. /package/dist/cli/{chunk-zxcczpyx.js.map → chunk-fsmrqk8a.js.map} +0 -0
  403. /package/dist/cli/{chunk-hdpx1tax.js.map → chunk-g698a744.js.map} +0 -0
  404. /package/dist/cli/{chunk-zxh4d9vy.js.map → chunk-h2ez8dzb.js.map} +0 -0
  405. /package/dist/cli/{chunk-5shv93fd.js.map → chunk-h7k3nq3v.js.map} +0 -0
  406. /package/dist/cli/{chunk-ah61y8py.js.map → chunk-mqc662a6.js.map} +0 -0
  407. /package/dist/cli/{chunk-ch6g3ar0.js.map → chunk-n1yg3tj3.js.map} +0 -0
  408. /package/dist/cli/{chunk-wm7js3j9.js.map → chunk-sqw4ekg1.js.map} +0 -0
  409. /package/dist/cli/{chunk-27g6wdth.js.map → chunk-wdrt2k2v.js.map} +0 -0
  410. /package/dist/cli/{chunk-s6jhgk0q.js.map → chunk-zp79m0ts.js.map} +0 -0
@@ -3,28 +3,30 @@ import {
3
3
  resolveRuntimeDir,
4
4
  resolveProjectContext,
5
5
  loadConfig
6
- } from "./chunk-qkqwkpte.js";
7
- import"./chunk-jts8mvcz.js";
6
+ } from "./chunk-v6ya5kcb.js";
7
+ import"./chunk-gs7r695n.js";
8
8
  import {
9
9
  commandMeta,
10
10
  logger
11
11
  } from "./index.js";
12
12
  import {
13
13
  readDevLock
14
- } from "./chunk-27g6wdth.js";
15
- import"./chunk-wgm7m9qk.js";
16
- import"./chunk-6crbhc3x.js";
17
- import"./chunk-fs23ddbb.js";
18
- import"./chunk-vtk4a6dg.js";
14
+ } from "./chunk-wdrt2k2v.js";
15
+ import"./chunk-hr8ne106.js";
16
+ import {
17
+ refuseIfEjected
18
+ } from "./chunk-4e9b9ra6.js";
19
+ import"./chunk-xh43dwgw.js";
20
+ import"./chunk-ddndchfr.js";
21
+ import"./chunk-00gs3wqs.js";
19
22
  import"./chunk-jq5n4avg.js";
20
- import"./chunk-2hn4b8z7.js";
21
- import"./chunk-zxcczpyx.js";
22
- import"./chunk-wm7js3j9.js";
23
- import"./chunk-82bbrxdn.js";
23
+ import"./chunk-5r8g91qn.js";
24
+ import"./chunk-fsmrqk8a.js";
25
+ import"./chunk-sqw4ekg1.js";
24
26
  import {
25
27
  prepareProject
26
- } from "./chunk-zxh4d9vy.js";
27
- import"./chunk-ah61y8py.js";
28
+ } from "./chunk-h2ez8dzb.js";
29
+ import"./chunk-mqc662a6.js";
28
30
 
29
31
  // src/cli/commands/sync.ts
30
32
  import { rm } from "node:fs/promises";
@@ -45,6 +47,7 @@ var syncCommand = defineCommand({
45
47
  meta: commandMeta.sync,
46
48
  async run({ args }) {
47
49
  const root = process.cwd();
50
+ await refuseIfEjected(root, "sync");
48
51
  if (args.force) {
49
52
  const { config } = await loadConfig(root);
50
53
  const context = resolveProjectContext(root, config);
@@ -68,5 +71,5 @@ export {
68
71
  syncCommand
69
72
  };
70
73
 
71
- //# debugId=A65A4348F141B1A664756E2164756E21
72
- //# sourceMappingURL=chunk-fz5wtpmh.js.map
74
+ //# debugId=F5C42A750ABEF23664756E2164756E21
75
+ //# sourceMappingURL=chunk-w4bxdvsa.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/commands/sync.ts"],
4
+ "sourcesContent": [
5
+ "import { rm } from \"node:fs/promises\";\n\nimport { defineCommand } from \"citty\";\nimport { join } from \"pathe\";\n\nimport { loadConfig } from \"../../core/config.ts\";\nimport {\n resolveProjectContext,\n resolveRuntimeDir,\n} from \"../../core/project.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { readDevLock } from \"../dev-lock.ts\";\nimport { refuseIfEjected } from \"../eject-scripts.ts\";\nimport { logger } from \"../log.ts\";\nimport { prepareProject } from \"../prepare.ts\";\n\nexport const syncCommand = defineCommand({\n args: {\n force: {\n description: \"Clear the source cache before refetching.\",\n type: \"boolean\",\n },\n preview: {\n description: \"Include drafts and unpublished CMS content.\",\n type: \"boolean\",\n },\n strict: { description: \"Fail on diagnostics.\", type: \"boolean\" },\n },\n meta: commandMeta.sync,\n async run({ args }) {\n const root = process.cwd();\n await refuseIfEjected(root, \"sync\");\n\n // `--force` drops the snapshots so a stale or corrupt cache can't be served;\n // scoped to `.blume/cache`, so a running dev server's runtime is untouched.\n if (args.force) {\n const { config } = await loadConfig(root);\n const context = resolveProjectContext(root, config);\n await rm(join(context.outDir, \"cache\"), { force: true, recursive: true });\n logger.info(\"Cleared source cache.\");\n }\n\n // Dev mode keeps drafts and skips the static-build gate; `refresh` forces\n // remote sources to re-fetch rather than serve their cached snapshot. A\n // running dev server hot-reloads from the regenerated runtime — so when one\n // is live, regenerate with the same site fallback (its URL) it used, else\n // its astro.config loses `site` (dropping OG and canonicals) and Astro\n // restarts cold.\n const lock = readDevLock(resolveRuntimeDir(root));\n const devServerUrl = lock?.port\n ? `http://localhost:${lock.port}`\n : undefined;\n await prepareProject({\n devServerUrl,\n mode: \"dev\",\n preview: args.preview,\n refresh: true,\n root,\n strict: args.strict,\n });\n\n logger.success(\"Synced content sources.\");\n },\n});\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACA;AAaO,IAAM,cAAc,cAAc;AAAA,EACvC,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,QAAQ,EAAE,aAAa,wBAAwB,MAAM,UAAU;AAAA,EACjE;AAAA,EACA,MAAM,YAAY;AAAA,OACZ,IAAG,GAAG,QAAQ;AAAA,IAClB,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,MAAM,gBAAgB,MAAM,MAAM;AAAA,IAIlC,IAAI,KAAK,OAAO;AAAA,MACd,QAAQ,WAAW,MAAM,WAAW,IAAI;AAAA,MACxC,MAAM,UAAU,sBAAsB,MAAM,MAAM;AAAA,MAClD,MAAM,GAAG,KAAK,QAAQ,QAAQ,OAAO,GAAG,EAAE,OAAO,MAAM,WAAW,KAAK,CAAC;AAAA,MACxE,OAAO,KAAK,uBAAuB;AAAA,IACrC;AAAA,IAQA,MAAM,OAAO,YAAY,kBAAkB,IAAI,CAAC;AAAA,IAChD,MAAM,eAAe,MAAM,OACvB,oBAAoB,KAAK,SACzB;AAAA,IACJ,MAAM,eAAe;AAAA,MACnB;AAAA,MACA,MAAM;AAAA,MACN,SAAS,KAAK;AAAA,MACd,SAAS;AAAA,MACT;AAAA,MACA,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,IAED,OAAO,QAAQ,yBAAyB;AAAA;AAE5C,CAAC;",
8
+ "debugId": "F5C42A750ABEF23664756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveRuntimeDir
4
- } from "./chunk-qkqwkpte.js";
4
+ } from "./chunk-v6ya5kcb.js";
5
5
  import {
6
6
  logger
7
7
  } from "./index.js";
@@ -133,4 +133,4 @@ var refuseIfDevRunning = (root, action, options = {}) => {
133
133
  export { readDevLock, DevLockHeldError, acquireDevLock, updateDevLockPort, describeDevLock, refuseIfDevRunning };
134
134
 
135
135
  //# debugId=1007843429DAE30664756E2164756E21
136
- //# sourceMappingURL=chunk-27g6wdth.js.map
136
+ //# sourceMappingURL=chunk-wdrt2k2v.js.map
@@ -31,6 +31,7 @@ import {
31
31
  GOOGLE_FONTS,
32
32
  isFontSlug,
33
33
  fontLocaleCodes,
34
+ localeFontSubsets,
34
35
  buildFontsCss,
35
36
  configuredFonts,
36
37
  repoUrl,
@@ -43,32 +44,27 @@ import {
43
44
  collectContentAssets,
44
45
  buildRssFeeds,
45
46
  renderRssFeed,
47
+ HTTP_METHODS,
48
+ withServerDefaults,
46
49
  isOpenApiSource,
47
50
  buildRawMarkdown,
48
51
  markdownRoutePaths
49
- } from "./chunk-qkqwkpte.js";
52
+ } from "./chunk-v6ya5kcb.js";
50
53
  import {
51
54
  trimChar,
52
55
  normalizeBasePath,
53
56
  withBasePath,
54
57
  siteRoot,
55
58
  absoluteUrl2
56
- } from "./chunk-jts8mvcz.js";
59
+ } from "./chunk-gs7r695n.js";
57
60
  import {
58
61
  validateSearchPopularIcons,
59
62
  validateNavTargets
60
- } from "./chunk-fs23ddbb.js";
63
+ } from "./chunk-5r8g91qn.js";
61
64
  import {
62
65
  buildSearchDocuments,
63
66
  buildMcpData
64
- } from "./chunk-6crbhc3x.js";
65
- import {
66
- emptyComponentOverrides,
67
- analyzeComponentOverrides
68
- } from "./chunk-vtk4a6dg.js";
69
- import {
70
- writeTextAtomic
71
- } from "./chunk-jq5n4avg.js";
67
+ } from "./chunk-ddndchfr.js";
72
68
  import {
73
69
  planComponentSlots,
74
70
  publishRuntimeModules,
@@ -108,15 +104,22 @@ import {
108
104
  examplesPageTemplate,
109
105
  runtimePackageTemplate,
110
106
  runtimeTsconfigTemplate
111
- } from "./chunk-2hn4b8z7.js";
107
+ } from "./chunk-hr8ne106.js";
108
+ import {
109
+ emptyComponentOverrides,
110
+ analyzeComponentOverrides
111
+ } from "./chunk-00gs3wqs.js";
112
+ import {
113
+ writeTextAtomic
114
+ } from "./chunk-jq5n4avg.js";
112
115
  import {
113
116
  registry
114
- } from "./chunk-zxcczpyx.js";
117
+ } from "./chunk-fsmrqk8a.js";
115
118
  import {
116
119
  readClientMode,
117
120
  discoverIslands,
118
121
  missingDependencyDiagnostic
119
- } from "./chunk-wm7js3j9.js";
122
+ } from "./chunk-sqw4ekg1.js";
120
123
 
121
124
  // src/astro/integration.ts
122
125
  import { join as join3, relative, resolve as resolve2 } from "pathe";
@@ -261,6 +264,7 @@ var PROBLEM_TYPE = "application/problem+json";
261
264
 
262
265
  // src/ai/api/spec.ts
263
266
  var JSON_TYPE = "application/json";
267
+ var EVENT_STREAM_TYPE = "text/event-stream";
264
268
  var MARKDOWN_TYPE = "text/markdown";
265
269
  var TEXT_TYPE = "text/plain";
266
270
  var ref = (name) => ({
@@ -717,14 +721,21 @@ var buildApiSpec = (input) => {
717
721
  input.mcpRoute,
718
722
  {
719
723
  post: {
720
- description: "The Model Context Protocol server (Streamable HTTP, stateless, JSON responses). Tools: `search_docs`, `get_page`, `list_pages`, `get_navigation` — the same operations this API exposes — plus every page as a `text/markdown` resource. Discovery document at `/.well-known/mcp.json`.",
724
+ description: "The Model Context Protocol server (Streamable HTTP, stateless, JSON responses). Send `Accept: application/json, text/event-stream`: the Streamable HTTP transport requires a client to accept both and answers `406` otherwise, though this server always replies with JSON. Tools: `search_docs`, `get_page`, `list_pages`, `get_navigation` — the same operations this API exposes — plus every page as a `text/markdown` resource. Discovery document at `/.well-known/mcp.json`.",
721
725
  operationId: "mcp",
722
726
  requestBody: {
723
727
  content: { [JSON_TYPE]: { schema: ref("JsonRpcRequest") } },
724
728
  required: true
725
729
  },
726
730
  responses: {
727
- "200": jsonResponse("The JSON-RPC response.", "JsonRpcResponse")
731
+ "200": {
732
+ content: {
733
+ [JSON_TYPE]: { schema: ref("JsonRpcResponse") },
734
+ [EVENT_STREAM_TYPE]: { schema: { type: "string" } }
735
+ },
736
+ description: "The JSON-RPC response."
737
+ },
738
+ "406": jsonResponse("The request's `Accept` header doesn't list both `application/json` and `text/event-stream`.", "JsonRpcResponse")
728
739
  },
729
740
  summary: "Call the MCP server",
730
741
  tags: ["MCP"]
@@ -776,17 +787,28 @@ var buildAskData = async (project) => {
776
787
  content: "markdown",
777
788
  includeWhenDisabled: true
778
789
  });
779
- return {
790
+ const versioned = Boolean(project.config.versions);
791
+ const data = {
780
792
  defaultLocale: project.config.i18n?.defaultLocale,
781
- documents: documents.map((doc) => ({
782
- content: doc.content,
783
- description: doc.description,
784
- locale: doc.locale,
785
- route: doc.route,
786
- title: doc.title
787
- })),
793
+ documents: documents.map((doc) => {
794
+ const document = {
795
+ content: doc.content,
796
+ description: doc.description,
797
+ locale: doc.locale,
798
+ route: doc.route,
799
+ title: doc.title
800
+ };
801
+ if (versioned) {
802
+ document.version = doc.version;
803
+ }
804
+ return document;
805
+ }),
788
806
  site: project.config.deployment.options.site ?? null
789
807
  };
808
+ if (versioned) {
809
+ data.versioned = true;
810
+ }
811
+ return data;
790
812
  };
791
813
 
792
814
  // src/components/layout/nav-utils.ts
@@ -1201,12 +1223,86 @@ var deriveOgFonts = (fonts, root) => {
1201
1223
  }
1202
1224
  return result;
1203
1225
  };
1226
+ var BUILT_IN_FAMILY = "Geist";
1227
+ var SCRIPT_FAMILIES = {
1228
+ am: "Noto Sans Ethiopic",
1229
+ ar: "Noto Sans Arabic",
1230
+ as: "Noto Sans Bengali",
1231
+ bn: "Noto Sans Bengali",
1232
+ ckb: "Noto Sans Arabic",
1233
+ fa: "Noto Sans Arabic",
1234
+ gu: "Noto Sans Gujarati",
1235
+ he: "Noto Sans Hebrew",
1236
+ hi: "Noto Sans Devanagari",
1237
+ hy: "Noto Sans Armenian",
1238
+ ja: "Noto Sans JP",
1239
+ ka: "Noto Sans Georgian",
1240
+ km: "Noto Sans Khmer",
1241
+ kn: "Noto Sans Kannada",
1242
+ ko: "Noto Sans KR",
1243
+ lo: "Noto Sans Lao",
1244
+ ml: "Noto Sans Malayalam",
1245
+ mr: "Noto Sans Devanagari",
1246
+ my: "Noto Sans Myanmar",
1247
+ ne: "Noto Sans Devanagari",
1248
+ or: "Noto Sans Oriya",
1249
+ pa: "Noto Sans Gurmukhi",
1250
+ ps: "Noto Sans Arabic",
1251
+ sa: "Noto Sans Devanagari",
1252
+ si: "Noto Sans Sinhala",
1253
+ ta: "Noto Sans Tamil",
1254
+ te: "Noto Sans Telugu",
1255
+ th: "Noto Sans Thai",
1256
+ ti: "Noto Sans Ethiopic",
1257
+ ur: "Noto Sans Arabic",
1258
+ yi: "Noto Sans Hebrew",
1259
+ zh: "Noto Sans SC"
1260
+ };
1261
+ var isScriptLanguage = (language) => Object.hasOwn(SCRIPT_FAMILIES, language);
1262
+ var TRADITIONAL_CHINESE = new Set(["hant", "hk", "mo", "tw"]);
1263
+ var localeFamily = (locale) => {
1264
+ const [language = "", ...subtags] = locale.toLowerCase().split("-");
1265
+ if (language === "zh" && subtags.some((tag) => TRADITIONAL_CHINESE.has(tag))) {
1266
+ return "Noto Sans TC";
1267
+ }
1268
+ if (isScriptLanguage(language)) {
1269
+ return SCRIPT_FAMILIES[language];
1270
+ }
1271
+ return localeFontSubsets([locale]).length > 1 ? "Noto Sans" : null;
1272
+ };
1273
+ var localeOgFonts = (locales) => {
1274
+ const names = new Set;
1275
+ for (const locale of locales) {
1276
+ const family = localeFamily(locale);
1277
+ if (family) {
1278
+ names.add(family);
1279
+ }
1280
+ }
1281
+ return [...names].map((name) => ({ name, weight: CARD_WEIGHTS }));
1282
+ };
1283
+ var isGoogleFamilyName = (font) => typeof font === "string";
1284
+ var ogFontName = (font) => isGoogleFamilyName(font) ? font : font.name;
1285
+ var withLocaleFonts = (derived, locales) => {
1286
+ const loaded = new Set(derived.fonts.map(ogFontName));
1287
+ const fallbacks = localeOgFonts(locales).filter((font) => !loaded.has(ogFontName(font)));
1288
+ if (fallbacks.length === 0) {
1289
+ return derived;
1290
+ }
1291
+ return {
1292
+ families: derived.families ?? {
1293
+ body: BUILT_IN_FAMILY,
1294
+ title: BUILT_IN_FAMILY
1295
+ },
1296
+ fonts: [...derived.fonts, ...fallbacks]
1297
+ };
1298
+ };
1204
1299
  var resolveOgFontSources = (fonts, root) => fonts.map((font) => isLocalOgFont(font) ? { ...font, src: absoluteSrc(root, font.src) } : font);
1205
1300
  var resolveOgFonts = (options, root) => {
1206
1301
  if (options.ogFonts) {
1207
1302
  return { fonts: resolveOgFontSources(options.ogFonts, root) };
1208
1303
  }
1209
- return options.themeFontsConfigured ? deriveOgFonts(options.themeFonts, root) : { fonts: [] };
1304
+ const derived = options.themeFontsConfigured ? deriveOgFonts(options.themeFonts, root) : { fonts: [] };
1305
+ return withLocaleFonts(derived, options.locales ?? []);
1210
1306
  };
1211
1307
  var missingFontFiles = (options, root) => {
1212
1308
  const sources = [];
@@ -1635,7 +1731,7 @@ ${THEME_MAPPING}
1635
1731
  @apply block rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:font-medium aria-[current=page]:text-foreground;
1636
1732
  }
1637
1733
  @utility blume-nav-drill {
1638
- @apply flex w-full items-center gap-2 rounded-[0.65rem] px-2.5 py-1.5 text-left font-medium text-foreground text-sm transition-colors hover:bg-muted;
1734
+ @apply flex w-full items-center gap-2 rounded-[0.65rem] px-2.5 py-1.5 text-start font-medium text-foreground text-sm transition-colors hover:bg-muted;
1639
1735
  }
1640
1736
  @utility blume-nav-summary {
1641
1737
  @apply flex cursor-pointer list-none items-center gap-1.5 rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground [&::-webkit-details-marker]:hidden;
@@ -2251,11 +2347,18 @@ pre:has(.line.focused):hover .line:not(.focused) {
2251
2347
  }
2252
2348
 
2253
2349
  /* Print / "Save as PDF" (the page-actions Export → PDF runs window.print()).
2254
- Strip the surrounding chrome so the printout is just the article. */
2350
+ Strip the surrounding chrome so the printout is just the article. Scoped to
2351
+ the chrome itself, never bare \`header\`/\`aside\`: content renders those too
2352
+ (every Callout and Panel is an <aside>, every changelog Update has a
2353
+ <header>), and they belong in the printout. \`body > header\` keeps a
2354
+ \`layout.Header\` override out as well. */
2255
2355
  @media print {
2256
2356
  [data-blume-banner],
2257
- header,
2258
- aside,
2357
+ [data-blume-header],
2358
+ body > header,
2359
+ [data-blume-nav-drawer],
2360
+ [data-blume-toc],
2361
+ [data-blume-assistant-panel],
2259
2362
  [data-blume-page-actions],
2260
2363
  #blume-content > nav,
2261
2364
  #blume-content > details {
@@ -3205,10 +3308,12 @@ var writeApiFiles = async (project, plan, write, data, mcp) => {
3205
3308
  }
3206
3309
  await Promise.all(writes);
3207
3310
  };
3311
+ var PLAYGROUND_PROXY_ENTRY = join11("blume-openapi", "api-proxy.ts");
3312
+ var playgroundProxyPattern = (config) => withBasePath(config.basePath, "/_api-proxy");
3208
3313
  var planPlaygroundProxy = (config, srcDir) => ({
3209
3314
  enabled: needsPlaygroundProxy(config),
3210
- entrypoint: join11(srcDir, "blume-openapi", "api-proxy.ts"),
3211
- pattern: "/_api-proxy"
3315
+ entrypoint: join11(srcDir, PLAYGROUND_PROXY_ENTRY),
3316
+ pattern: playgroundProxyPattern(config)
3212
3317
  });
3213
3318
  var specOriginsOf = (spec) => {
3214
3319
  const origins = new Set;
@@ -3217,15 +3322,24 @@ var specOriginsOf = (spec) => {
3217
3322
  origins.add(new URL(spec.endpoint).origin);
3218
3323
  } catch {}
3219
3324
  }
3220
- const { servers } = spec.document;
3221
- for (const server of Array.isArray(servers) ? servers : []) {
3222
- const url = server.url ?? "";
3223
- if (url.includes("{")) {
3224
- continue;
3325
+ const document = spec.document;
3326
+ const lists = [document.servers];
3327
+ for (const item of Object.values(document.paths ?? {})) {
3328
+ lists.push(item?.servers);
3329
+ for (const method of HTTP_METHODS) {
3330
+ lists.push(item?.[method]?.servers);
3331
+ }
3332
+ }
3333
+ for (const servers of lists) {
3334
+ for (const server of Array.isArray(servers) ? servers : []) {
3335
+ const url = withServerDefaults(server.url ?? "", server.variables);
3336
+ if (url.includes("{")) {
3337
+ continue;
3338
+ }
3339
+ try {
3340
+ origins.add(new URL(url).origin);
3341
+ } catch {}
3225
3342
  }
3226
- try {
3227
- origins.add(new URL(url).origin);
3228
- } catch {}
3229
3343
  }
3230
3344
  return [...origins];
3231
3345
  };
@@ -3237,7 +3351,7 @@ var proxyAllowlistWarnings = (config, data) => {
3237
3351
  if (!proxied.has(spec.slug) || specOriginsOf(spec).length > 0) {
3238
3352
  continue;
3239
3353
  }
3240
- warnings.push(spec.kind === "graphql" ? `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.` : `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.`);
3354
+ warnings.push(spec.kind === "graphql" ? `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.` : `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.`);
3241
3355
  }
3242
3356
  return warnings;
3243
3357
  };
@@ -3280,6 +3394,7 @@ var dependencyPreflight = async (project, frameworks) => {
3280
3394
  };
3281
3395
  var analyzeComponentsFile = async (componentsFile) => componentsFile ? analyzeComponentOverrides(await readFile4(componentsFile, "utf-8"), componentsFile) : emptyComponentOverrides();
3282
3396
  var projectOgFonts = (project) => resolveOgFonts({
3397
+ locales: fontLocaleCodes(project.config.i18n),
3283
3398
  ogFonts: project.config.seo.og.fonts,
3284
3399
  themeFonts: project.config.theme.fonts,
3285
3400
  themeFontsConfigured: project.themeFontsConfigured
@@ -3558,7 +3673,7 @@ var generateRuntime = async (project) => {
3558
3673
  return { structuralChange: structural.some(Boolean), warnings };
3559
3674
  };
3560
3675
 
3561
- export { publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildAskData, buildThemeCss, buildReferenceFiles, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, EXAMPLE_SCAN_GLOB, exampleScanRoots, discoverExamples, exampleMarkdownLookup, packageDirFrom, detectNeedsReact, detectUsesMath, collectStaged, buildRuntimeData, analyzeComponentsFile, languageIconCssFor, clientFeaturesFor, generateRuntime };
3676
+ export { publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildAskData, buildThemeCss, buildReferenceFiles, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, EXAMPLE_SCAN_GLOB, exampleScanRoots, discoverExamples, exampleMarkdownLookup, packageDirFrom, detectNeedsReact, detectUsesMath, collectStaged, buildRuntimeData, PLAYGROUND_PROXY_ENTRY, playgroundProxyPattern, specOrigins, proxyAllowlistWarnings, analyzeComponentsFile, languageIconCssFor, clientFeaturesFor, generateRuntime };
3562
3677
 
3563
- //# debugId=35E2A04C63CD05BF64756E2164756E21
3564
- //# sourceMappingURL=chunk-wgm7m9qk.js.map
3678
+ //# debugId=0D8B04D4ECFE76CE64756E2164756E21
3679
+ //# sourceMappingURL=chunk-xh43dwgw.js.map