blume 1.7.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. package/AGENTS.md +19 -0
  2. package/CHANGELOG.md +217 -0
  3. package/README.md +34 -21
  4. package/dist/cli/chunk-11j0384y.js +148 -0
  5. package/dist/cli/chunk-11j0384y.js.map +10 -0
  6. package/dist/cli/{chunk-rqy0s5wh.js → chunk-1w8dp3qb.js} +17 -16
  7. package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-1w8dp3qb.js.map} +3 -3
  8. package/dist/cli/chunk-2q1dwty4.js +75 -0
  9. package/dist/cli/chunk-2q1dwty4.js.map +11 -0
  10. package/dist/cli/chunk-41za066z.js +122 -0
  11. package/dist/cli/chunk-41za066z.js.map +11 -0
  12. package/dist/cli/chunk-5a2z0198.js +133 -0
  13. package/dist/cli/chunk-5a2z0198.js.map +10 -0
  14. package/dist/cli/{chunk-5g0w1e2c.js → chunk-6k8vp3ta.js} +25 -13
  15. package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-6k8vp3ta.js.map} +4 -4
  16. package/dist/cli/{chunk-5qk08vmp.js → chunk-79njf86q.js} +133 -54
  17. package/dist/cli/chunk-79njf86q.js.map +11 -0
  18. package/dist/cli/{chunk-e7f42gdj.js → chunk-7ez8ny0t.js} +2 -2
  19. package/dist/cli/{chunk-nn13znc2.js → chunk-88cpgt6h.js} +1 -1
  20. package/dist/cli/chunk-a9kptbw5.js +361 -0
  21. package/dist/cli/chunk-a9kptbw5.js.map +14 -0
  22. package/dist/cli/chunk-abh8yjkn.js +31 -0
  23. package/dist/cli/chunk-abh8yjkn.js.map +10 -0
  24. package/dist/cli/chunk-b5aj94ah.js +91 -0
  25. package/dist/cli/chunk-b5aj94ah.js.map +10 -0
  26. package/dist/cli/{chunk-b27xqwn9.js → chunk-bctazmbk.js} +9 -5
  27. package/dist/cli/chunk-bctazmbk.js.map +10 -0
  28. package/dist/cli/chunk-beat36xx.js +279 -0
  29. package/dist/cli/chunk-beat36xx.js.map +10 -0
  30. package/dist/cli/chunk-bnbmcwfb.js +145 -0
  31. package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
  32. package/dist/cli/{chunk-0xjyb285.js → chunk-bw22s759.js} +15 -5
  33. package/dist/cli/{chunk-0xjyb285.js.map → chunk-bw22s759.js.map} +4 -4
  34. package/dist/cli/chunk-by2290sx.js +39 -0
  35. package/dist/cli/chunk-by2290sx.js.map +10 -0
  36. package/dist/cli/chunk-d1tadaw7.js +79 -0
  37. package/dist/cli/chunk-d1tadaw7.js.map +10 -0
  38. package/dist/cli/{chunk-ahnw3kxw.js → chunk-d80hr03s.js} +24 -19
  39. package/dist/cli/chunk-d80hr03s.js.map +15 -0
  40. package/dist/cli/chunk-ernrthtr.js +97 -0
  41. package/dist/cli/chunk-ernrthtr.js.map +10 -0
  42. package/dist/cli/chunk-f2972sbt.js +374 -0
  43. package/dist/cli/chunk-f2972sbt.js.map +10 -0
  44. package/dist/cli/{chunk-vacwm2hv.js → chunk-f7t03s3g.js} +2 -2
  45. package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
  46. package/dist/cli/chunk-fa25z98p.js.map +11 -0
  47. package/dist/cli/{chunk-cjtn640a.js → chunk-fh5hj5jt.js} +43 -20
  48. package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
  49. package/dist/cli/{chunk-yg63d42r.js → chunk-j8mw0za6.js} +86 -57
  50. package/dist/cli/chunk-j8mw0za6.js.map +35 -0
  51. package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
  52. package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
  53. package/dist/cli/{chunk-ps4m1xh4.js → chunk-mnqj32sj.js} +505 -542
  54. package/dist/cli/chunk-mnqj32sj.js.map +12 -0
  55. package/dist/cli/{chunk-8cjtbafj.js → chunk-mwt1k8n7.js} +100 -374
  56. package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
  57. package/dist/cli/chunk-nk3ts2xk.js +51 -0
  58. package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
  59. package/dist/cli/{chunk-3r45185y.js → chunk-pat2zzwc.js} +9 -11
  60. package/dist/cli/{chunk-3r45185y.js.map → chunk-pat2zzwc.js.map} +2 -2
  61. package/dist/cli/chunk-pnnvybbk.js +176 -0
  62. package/dist/cli/chunk-pnnvybbk.js.map +11 -0
  63. package/dist/cli/{chunk-4x36ddpw.js → chunk-sqn5t4q0.js} +81 -87
  64. package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
  65. package/dist/cli/{chunk-bvwwhd84.js → chunk-tzne8qfq.js} +15 -15
  66. package/dist/cli/{chunk-bvwwhd84.js.map → chunk-tzne8qfq.js.map} +1 -1
  67. package/dist/cli/chunk-xaz13gwg.js +12449 -0
  68. package/dist/cli/chunk-xaz13gwg.js.map +182 -0
  69. package/dist/cli/chunk-y3e45rc8.js +102 -0
  70. package/dist/cli/chunk-y3e45rc8.js.map +10 -0
  71. package/dist/cli/chunk-z01ze5c1.js +261 -0
  72. package/dist/cli/chunk-z01ze5c1.js.map +10 -0
  73. package/dist/cli/{chunk-k79xp7av.js → chunk-z1f5arsg.js} +219 -689
  74. package/dist/cli/chunk-z1f5arsg.js.map +36 -0
  75. package/dist/cli/{chunk-1jefwnfs.js → chunk-zg2gtj10.js} +1076 -2592
  76. package/dist/cli/chunk-zg2gtj10.js.map +35 -0
  77. package/dist/cli/{chunk-dwgcp5sm.js → chunk-zxccj738.js} +1 -1
  78. package/dist/cli/index.js +214 -57
  79. package/dist/cli/index.js.map +8 -7
  80. package/dist/types/ai/agent-readability.d.ts +52 -0
  81. package/dist/types/ai/ai-catalog.d.ts +42 -0
  82. package/dist/types/ai/api/paths.d.ts +17 -0
  83. package/dist/types/ai/api-catalog.d.ts +18 -0
  84. package/dist/types/ai/ask.d.ts +368 -0
  85. package/dist/types/ai/changelog-markdown.d.ts +2 -0
  86. package/dist/types/ai/component-markdown.d.ts +2 -2
  87. package/dist/types/ai/index.d.ts +24 -0
  88. package/dist/types/ai/link-headers.d.ts +24 -0
  89. package/dist/types/ai/llms.d.ts +25 -0
  90. package/dist/types/ai/markdown.d.ts +45 -0
  91. package/dist/types/ai/mcp/discovery.d.ts +68 -0
  92. package/dist/types/ai/mcp/tools.d.ts +16 -0
  93. package/dist/types/ai/openapi-components.d.ts +43 -0
  94. package/dist/types/ai/relative-links.d.ts +26 -0
  95. package/dist/types/ai/serializers.d.ts +15 -0
  96. package/dist/types/ai/skills.d.ts +42 -0
  97. package/dist/types/ai/tar.d.ts +25 -0
  98. package/dist/types/ai/visibility.d.ts +17 -0
  99. package/dist/types/ai/web-bot-auth.d.ts +16 -0
  100. package/dist/types/analytics/adobe.d.ts +35 -0
  101. package/dist/types/analytics/amplitude.d.ts +50 -0
  102. package/dist/types/analytics/clarity.d.ts +31 -0
  103. package/dist/types/analytics/clearbit.d.ts +29 -0
  104. package/dist/types/analytics/cloudflare.d.ts +41 -0
  105. package/dist/types/analytics/fathom.d.ts +41 -0
  106. package/dist/types/analytics/google-analytics.d.ts +44 -0
  107. package/dist/types/analytics/google-tag-manager.d.ts +40 -0
  108. package/dist/types/analytics/head.d.ts +30 -0
  109. package/dist/types/analytics/heap.d.ts +40 -0
  110. package/dist/types/analytics/hightouch.d.ts +44 -0
  111. package/dist/types/analytics/hotjar.d.ts +33 -0
  112. package/dist/types/analytics/index.d.ts +61 -0
  113. package/dist/types/analytics/inline.d.ts +17 -0
  114. package/dist/types/analytics/logrocket.d.ts +44 -0
  115. package/dist/types/analytics/mixpanel.d.ts +67 -0
  116. package/dist/types/analytics/pirsch.d.ts +42 -0
  117. package/dist/types/analytics/plausible.d.ts +56 -0
  118. package/dist/types/analytics/posthog.d.ts +45 -0
  119. package/dist/types/analytics/schema.d.ts +320 -0
  120. package/dist/types/analytics/script.d.ts +46 -0
  121. package/dist/types/analytics/segment.d.ts +50 -0
  122. package/dist/types/analytics/vercel.d.ts +48 -0
  123. package/dist/types/astro/integration.d.ts +76 -0
  124. package/dist/types/astro/markdown-negotiation.d.ts +23 -0
  125. package/dist/types/astro/module-types.d.ts +14 -0
  126. package/dist/types/astro/pages.d.ts +44 -0
  127. package/dist/types/cli/env.d.ts +12 -0
  128. package/dist/types/cli/init/scaffold.d.ts +154 -0
  129. package/dist/types/components/layout/nav-utils.d.ts +11 -0
  130. package/dist/types/core/adapter.d.ts +47 -0
  131. package/dist/types/core/api-name.d.ts +7 -0
  132. package/dist/types/core/changelog-index.d.ts +13 -0
  133. package/dist/types/core/config-input.d.ts +186 -515
  134. package/dist/types/core/config.d.ts +60 -34
  135. package/dist/types/core/content-assets.d.ts +76 -0
  136. package/dist/types/core/custom-pages.d.ts +33 -0
  137. package/dist/types/core/data.d.ts +27 -12
  138. package/dist/types/core/define-components.d.ts +12 -9
  139. package/dist/types/core/deployment-env.d.ts +6 -11
  140. package/dist/types/core/frontmatter.d.ts +10 -0
  141. package/dist/types/core/graph.d.ts +18 -0
  142. package/dist/types/core/heading-markers.d.ts +54 -0
  143. package/dist/types/core/i18n-ui.d.ts +6 -2
  144. package/dist/types/core/i18n.d.ts +87 -0
  145. package/dist/types/core/includes.d.ts +138 -0
  146. package/dist/types/core/last-modified.d.ts +47 -0
  147. package/dist/types/core/links.d.ts +95 -0
  148. package/dist/types/core/locale-links.d.ts +60 -0
  149. package/dist/types/core/manifest.d.ts +17 -0
  150. package/dist/types/core/meta.d.ts +38 -0
  151. package/dist/types/core/nav-diagnostics.d.ts +26 -0
  152. package/dist/types/core/navigation.d.ts +6 -0
  153. package/dist/types/core/node-require.d.ts +19 -0
  154. package/dist/types/core/package-json.d.ts +13 -0
  155. package/dist/types/core/probe.d.ts +42 -0
  156. package/dist/types/core/project-graph.d.ts +51 -0
  157. package/dist/types/core/project.d.ts +2 -0
  158. package/dist/types/core/safe-href.d.ts +2 -0
  159. package/dist/types/core/safe-links.d.ts +26 -0
  160. package/dist/types/core/schema.d.ts +2282 -452
  161. package/dist/types/core/site-url.d.ts +16 -0
  162. package/dist/types/core/sources/assets.d.ts +36 -0
  163. package/dist/types/core/sources/cache.d.ts +37 -0
  164. package/dist/types/core/sources/collection.d.ts +28 -0
  165. package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
  166. package/dist/types/core/sources/contentful.d.ts +40 -0
  167. package/dist/types/core/sources/filesystem.d.ts +24 -0
  168. package/dist/types/core/sources/github-releases.d.ts +31 -0
  169. package/dist/types/core/sources/json.d.ts +30 -0
  170. package/dist/types/core/sources/lexical.d.ts +19 -0
  171. package/dist/types/core/sources/lower.d.ts +75 -0
  172. package/dist/types/core/sources/mdx-remote.d.ts +28 -0
  173. package/dist/types/core/sources/normalize.d.ts +147 -0
  174. package/dist/types/core/sources/notion.d.ts +131 -0
  175. package/dist/types/core/sources/obsidian.d.ts +46 -0
  176. package/dist/types/core/sources/payload.d.ts +39 -0
  177. package/dist/types/core/sources/portable-text.d.ts +42 -0
  178. package/dist/types/core/sources/read.d.ts +23 -0
  179. package/dist/types/core/sources/remote.d.ts +74 -0
  180. package/dist/types/core/sources/resolve.d.ts +19 -0
  181. package/dist/types/core/sources/sanity.d.ts +43 -0
  182. package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
  183. package/dist/types/core/sources/strapi.d.ts +33 -0
  184. package/dist/types/core/sources/types.d.ts +7 -0
  185. package/dist/types/core/sources/watch.d.ts +45 -0
  186. package/dist/types/core/text-width.d.ts +11 -0
  187. package/dist/types/core/types.d.ts +15 -1
  188. package/dist/types/core/unrecognized-keys.d.ts +7 -0
  189. package/dist/types/core/versions.d.ts +72 -0
  190. package/dist/types/core/yaml.d.ts +9 -0
  191. package/dist/types/deploy/adapter-output.d.ts +45 -0
  192. package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
  193. package/dist/types/deploy/adapters/index.d.ts +29 -0
  194. package/dist/types/deploy/adapters/netlify.d.ts +37 -0
  195. package/dist/types/deploy/adapters/node.d.ts +37 -0
  196. package/dist/types/deploy/adapters/registry.d.ts +133 -0
  197. package/dist/types/deploy/adapters/types.d.ts +71 -0
  198. package/dist/types/deploy/adapters/vercel.d.ts +38 -0
  199. package/dist/types/deploy/artifacts.d.ts +65 -0
  200. package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
  201. package/dist/types/deploy/function-bundle.d.ts +80 -0
  202. package/dist/types/deploy/headers.d.ts +50 -0
  203. package/dist/types/deploy/node-headers.d.ts +42 -0
  204. package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
  205. package/dist/types/deploy/platforms/index.d.ts +18 -0
  206. package/dist/types/deploy/platforms/netlify.d.ts +13 -0
  207. package/dist/types/deploy/platforms/node.d.ts +11 -0
  208. package/dist/types/deploy/platforms/paths.d.ts +27 -0
  209. package/dist/types/deploy/platforms/static.d.ts +10 -0
  210. package/dist/types/deploy/platforms/types.d.ts +104 -0
  211. package/dist/types/deploy/platforms/vercel.d.ts +32 -0
  212. package/dist/types/deploy/redirects.d.ts +53 -0
  213. package/dist/types/deploy/robots.d.ts +8 -0
  214. package/dist/types/deploy/rss.d.ts +31 -0
  215. package/dist/types/deploy/sitemap.d.ts +21 -0
  216. package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
  217. package/dist/types/markdown/code-title.d.ts +32 -0
  218. package/dist/types/markdown/fence-meta.d.ts +23 -0
  219. package/dist/types/markdown/themes.d.ts +3 -3
  220. package/dist/types/openapi/asyncapi.d.ts +129 -0
  221. package/dist/types/openapi/graphql-build.d.ts +8 -0
  222. package/dist/types/openapi/graphql.d.ts +122 -0
  223. package/dist/types/openapi/model.d.ts +158 -0
  224. package/dist/types/openapi/parse.d.ts +57 -0
  225. package/dist/types/openapi/references.d.ts +37 -25
  226. package/dist/types/openapi/render-mdx.d.ts +33 -0
  227. package/dist/types/openapi/sentence.d.ts +7 -0
  228. package/dist/types/openapi/signature.d.ts +10 -0
  229. package/dist/types/openapi/source.d.ts +22 -0
  230. package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
  231. package/dist/types/reference/asyncapi.d.ts +166 -0
  232. package/dist/types/reference/graphql.d.ts +181 -0
  233. package/dist/types/reference/index.d.ts +32 -0
  234. package/dist/types/reference/openapi.d.ts +165 -0
  235. package/dist/types/reference/options.d.ts +157 -0
  236. package/dist/types/reference/scalar.d.ts +136 -0
  237. package/dist/types/reference/schema.d.ts +630 -0
  238. package/dist/types/search/adapters/algolia.d.ts +32 -0
  239. package/dist/types/search/adapters/flexsearch.d.ts +12 -0
  240. package/dist/types/search/adapters/index.d.ts +31 -0
  241. package/dist/types/search/adapters/mixedbread.d.ts +22 -0
  242. package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
  243. package/dist/types/search/adapters/orama.d.ts +13 -0
  244. package/dist/types/search/adapters/pagefind.d.ts +12 -0
  245. package/dist/types/search/adapters/registry.d.ts +228 -0
  246. package/dist/types/search/adapters/types.d.ts +34 -0
  247. package/dist/types/search/adapters/typesense.d.ts +42 -0
  248. package/dist/types/search/build.d.ts +23 -0
  249. package/dist/types/search/documents.d.ts +90 -0
  250. package/dist/types/search/facets.d.ts +3 -0
  251. package/dist/types/search/sync/algolia.d.ts +14 -0
  252. package/dist/types/search/sync/index.d.ts +14 -0
  253. package/dist/types/search/sync/orama-cloud.d.ts +10 -0
  254. package/dist/types/search/sync/typesense.d.ts +14 -0
  255. package/dist/types/sources/contentful.d.ts +68 -0
  256. package/dist/types/sources/custom.d.ts +20 -0
  257. package/dist/types/sources/filesystem.d.ts +42 -0
  258. package/dist/types/sources/github-releases.d.ts +46 -0
  259. package/dist/types/sources/index.d.ts +48 -0
  260. package/dist/types/sources/mdx-remote.d.ts +63 -0
  261. package/dist/types/sources/notion.d.ts +65 -0
  262. package/dist/types/sources/obsidian.d.ts +34 -0
  263. package/dist/types/sources/payload.d.ts +68 -0
  264. package/dist/types/sources/registry.d.ts +1414 -0
  265. package/dist/types/sources/sanity.d.ts +69 -0
  266. package/dist/types/sources/shared.d.ts +46 -0
  267. package/dist/types/sources/strapi.d.ts +66 -0
  268. package/dist/types/theme/icon-kind.d.ts +11 -0
  269. package/dist/types/theme/icons.d.ts +20 -0
  270. package/docs/01-quickstart.mdx +18 -18
  271. package/docs/02-deployment.mdx +50 -26
  272. package/docs/03-upgrading.mdx +351 -0
  273. package/docs/04-migrating.mdx +58 -0
  274. package/docs/08-faq.mdx +3 -3
  275. package/docs/advanced/blog.mdx +13 -6
  276. package/docs/advanced/changelog.mdx +23 -35
  277. package/docs/advanced/custom-pages.mdx +20 -8
  278. package/docs/advanced/meta.ts +1 -8
  279. package/docs/advanced/skills.mdx +8 -0
  280. package/docs/cli/audit.mdx +646 -0
  281. package/docs/cli/doctor.mdx +29 -0
  282. package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
  283. package/docs/cli/index.mdx +105 -0
  284. package/docs/cli/meta.ts +7 -0
  285. package/docs/{reference → cli}/translate.mdx +1 -1
  286. package/docs/cli/validate.mdx +41 -0
  287. package/docs/cli/version.mdx +40 -0
  288. package/docs/configuration/analytics.mdx +350 -59
  289. package/docs/configuration/ask-ai.mdx +162 -61
  290. package/docs/configuration/customization.mdx +15 -9
  291. package/docs/configuration/index.mdx +50 -31
  292. package/docs/configuration/search.mdx +75 -54
  293. package/docs/configuration/theming.mdx +24 -15
  294. package/docs/content/components.mdx +21 -5
  295. package/docs/{reference → content}/frontmatter.mdx +35 -1
  296. package/docs/content/i18n.mdx +8 -6
  297. package/docs/content/includes.mdx +2 -4
  298. package/docs/content/index.mdx +1 -1
  299. package/docs/content/islands.mdx +10 -5
  300. package/docs/content/meta.mdx +1 -1
  301. package/docs/content/meta.ts +1 -0
  302. package/docs/content/navigation.mdx +9 -7
  303. package/docs/content/sources.mdx +145 -50
  304. package/docs/content/syntax.mdx +16 -12
  305. package/docs/content/versioning.mdx +3 -3
  306. package/docs/discoverability/agent-discovery.mdx +11 -11
  307. package/docs/discoverability/index.mdx +4 -4
  308. package/docs/discoverability/json-api.mdx +4 -4
  309. package/docs/discoverability/llms-txt.mdx +6 -6
  310. package/docs/discoverability/markdown.mdx +4 -4
  311. package/docs/discoverability/mcp.mdx +11 -11
  312. package/docs/discoverability/sitemap-and-robots.mdx +3 -3
  313. package/docs/index.mdx +2 -2
  314. package/docs/references/asyncapi.mdx +59 -0
  315. package/docs/{advanced → references}/graphql.mdx +45 -32
  316. package/docs/{reference → references}/meta.ts +2 -2
  317. package/docs/references/openapi.mdx +171 -0
  318. package/docs/references/scalar.mdx +64 -0
  319. package/package.json +42 -8
  320. package/skills/blume/SKILL.md +21 -8
  321. package/skills/blume-migrate/SKILL.md +22 -21
  322. package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
  323. package/skills/blume-migrate/references/docusaurus.md +5 -4
  324. package/skills/blume-migrate/references/fumadocs.md +4 -4
  325. package/skills/blume-migrate/references/mintlify.md +23 -8
  326. package/skills/blume-migrate/references/monorepo.md +6 -6
  327. package/skills/blume-migrate/references/starlight.md +4 -4
  328. package/src/ai/agent-readability.ts +21 -22
  329. package/src/ai/ai-catalog.ts +50 -32
  330. package/src/ai/api/handlers.ts +46 -11
  331. package/src/ai/api-catalog.ts +8 -8
  332. package/src/ai/ask-data.ts +1 -1
  333. package/src/ai/ask.ts +624 -100
  334. package/src/ai/changelog-markdown.ts +91 -0
  335. package/src/ai/component-markdown.ts +328 -12
  336. package/src/ai/index.ts +45 -0
  337. package/src/ai/link-headers.ts +7 -6
  338. package/src/ai/llms.ts +20 -15
  339. package/src/ai/markdown.ts +35 -5
  340. package/src/ai/mcp/data.ts +9 -5
  341. package/src/ai/openapi-components.ts +4 -1
  342. package/src/ai/relative-links.ts +170 -0
  343. package/src/ai/serializers.ts +2 -2
  344. package/src/ai/skills.ts +1 -1
  345. package/src/ai/web-bot-auth.ts +2 -2
  346. package/src/analytics/adobe.ts +46 -0
  347. package/src/analytics/amplitude.ts +79 -0
  348. package/src/analytics/clarity.ts +46 -0
  349. package/src/analytics/clearbit.ts +47 -0
  350. package/src/analytics/cloudflare.ts +67 -0
  351. package/src/analytics/fathom.ts +64 -0
  352. package/src/analytics/google-analytics.ts +84 -0
  353. package/src/analytics/google-tag-manager.ts +61 -0
  354. package/src/analytics/head.ts +130 -0
  355. package/src/analytics/heap.ts +65 -0
  356. package/src/analytics/hightouch.ts +77 -0
  357. package/src/analytics/hotjar.ts +47 -0
  358. package/src/analytics/index.ts +71 -0
  359. package/src/analytics/inline.ts +21 -0
  360. package/src/analytics/logrocket.ts +71 -0
  361. package/src/analytics/mixpanel.ts +92 -0
  362. package/src/analytics/pirsch.ts +66 -0
  363. package/src/analytics/plausible.ts +83 -0
  364. package/src/analytics/posthog.ts +78 -0
  365. package/src/analytics/schema.ts +60 -0
  366. package/src/analytics/script.ts +60 -0
  367. package/src/analytics/segment.ts +85 -0
  368. package/src/analytics/vercel.ts +50 -0
  369. package/src/astro/adapter-root.ts +7 -9
  370. package/src/astro/component-slots.ts +131 -91
  371. package/src/astro/generate.ts +112 -345
  372. package/src/astro/integration.ts +2 -6
  373. package/src/astro/pages.ts +13 -101
  374. package/src/astro/render-deps.ts +379 -0
  375. package/src/astro/runtime-deps.ts +201 -0
  376. package/src/astro/templates.ts +554 -541
  377. package/src/audit/agent.ts +24 -0
  378. package/src/audit/catalog.ts +2 -2
  379. package/src/audit/checks/assets.ts +2 -2
  380. package/src/audit/checks/dns-aid.ts +1 -1
  381. package/src/audit/checks/duplicates.ts +3 -1
  382. package/src/audit/checks/i18n.ts +1 -1
  383. package/src/audit/checks/indexability.ts +7 -7
  384. package/src/audit/checks/links.ts +2 -2
  385. package/src/audit/checks/llms.ts +6 -6
  386. package/src/audit/checks/network.ts +3 -3
  387. package/src/audit/checks/og-image.ts +2 -2
  388. package/src/audit/checks/robots.ts +1 -1
  389. package/src/audit/checks/sitemap.ts +2 -2
  390. package/src/audit/checks/social.ts +1 -1
  391. package/src/audit/run.ts +4 -3
  392. package/src/audit/terms.ts +31 -0
  393. package/src/audit/url.ts +13 -13
  394. package/src/cli/command-meta.ts +10 -0
  395. package/src/cli/commands/audit.ts +39 -20
  396. package/src/cli/commands/build.ts +71 -316
  397. package/src/cli/commands/check.ts +1 -0
  398. package/src/cli/commands/dev.ts +40 -1
  399. package/src/cli/commands/doctor.ts +90 -14
  400. package/src/cli/commands/eject.ts +44 -7
  401. package/src/cli/commands/eval.ts +2 -2
  402. package/src/cli/commands/init.ts +161 -41
  403. package/src/cli/commands/migrate.ts +121 -0
  404. package/src/cli/commands/preview.ts +7 -1
  405. package/src/cli/commands/translate.ts +2 -2
  406. package/src/cli/commands/upgrade.ts +141 -0
  407. package/src/cli/commands/version.ts +57 -44
  408. package/src/cli/eject-scripts.ts +121 -6
  409. package/src/cli/index.ts +11 -1
  410. package/src/cli/init/install.ts +70 -0
  411. package/src/cli/init/questions.ts +7 -0
  412. package/src/cli/init/scaffold.ts +459 -75
  413. package/src/cli/lazy-command.ts +37 -1
  414. package/src/cli/prepare.ts +40 -6
  415. package/src/cli/required-secrets.ts +38 -11
  416. package/src/cli/unknown-flags.ts +266 -0
  417. package/src/cli/yarn-pnp.ts +52 -0
  418. package/src/components/content/AccordionItem.astro +7 -1
  419. package/src/components/content/Card.astro +4 -3
  420. package/src/components/content/ColorItem.astro +22 -4
  421. package/src/components/content/GithubInfo.astro +2 -2
  422. package/src/components/content/Prompt.astro +25 -25
  423. package/src/components/content/Tabs.astro +3 -1
  424. package/src/components/content/Tile.astro +2 -3
  425. package/src/components/content/Tooltip.astro +57 -9
  426. package/src/components/content/content-strings.ts +34 -0
  427. package/src/components/content/diff.ts +1 -1
  428. package/src/components/content/mermaid-element.ts +13 -2
  429. package/src/components/content/prompt-markdown.ts +292 -0
  430. package/src/components/content/tooltip-id.ts +41 -0
  431. package/src/components/islands/hooks.ts +25 -2
  432. package/src/components/layout/Analytics.astro +21 -79
  433. package/src/components/layout/Banner.astro +3 -1
  434. package/src/components/layout/DiscoveryLinks.astro +69 -0
  435. package/src/components/layout/Header.astro +83 -20
  436. package/src/components/layout/LanguageSwitcher.astro +4 -1
  437. package/src/components/layout/Logo.astro +23 -2
  438. package/src/components/layout/NavSelector.astro +13 -2
  439. package/src/components/layout/NavTree.astro +12 -3
  440. package/src/components/layout/NavTreeScript.astro +17 -3
  441. package/src/components/layout/PageActions.astro +3 -3
  442. package/src/components/layout/PageFeedback.astro +11 -1
  443. package/src/components/layout/PageLayout.astro +52 -5
  444. package/src/components/layout/ReferenceLayout.astro +21 -12
  445. package/src/components/layout/RootLayout.astro +69 -66
  446. package/src/components/layout/Search.astro +30 -6
  447. package/src/components/layout/WebMcp.astro +1 -1
  448. package/src/components/layout/analytics-client.ts +72 -15
  449. package/src/components/layout/drawer-inert.ts +113 -15
  450. package/src/components/layout/dropdown-clamp.ts +105 -0
  451. package/src/components/layout/head-scripts.ts +15 -6
  452. package/src/components/layout/nav-utils.ts +17 -0
  453. package/src/components/layout/search/algolia.ts +8 -8
  454. package/src/components/layout/search/orama-cloud.ts +9 -7
  455. package/src/components/layout/search/typesense.ts +11 -17
  456. package/src/components/openapi/MessageComposer.astro +2 -2
  457. package/src/components/openapi/Playground.astro +2 -2
  458. package/src/components/openapi/playground-client.ts +79 -10
  459. package/src/core/changelog-index.ts +24 -0
  460. package/src/core/component-overrides.ts +399 -154
  461. package/src/core/config-input.ts +188 -553
  462. package/src/core/config.ts +130 -41
  463. package/src/core/custom-pages.ts +105 -0
  464. package/src/core/data.ts +31 -12
  465. package/src/core/define-components.ts +12 -9
  466. package/src/core/deployment-env.ts +18 -74
  467. package/src/core/diagnostics.ts +14 -7
  468. package/src/core/graph.ts +69 -25
  469. package/src/core/i18n-ui.ts +6 -2
  470. package/src/core/i18n.ts +17 -0
  471. package/src/core/includes.ts +156 -38
  472. package/src/core/last-modified.ts +6 -11
  473. package/src/core/links.ts +166 -2
  474. package/src/core/manifest.ts +10 -3
  475. package/src/core/navigation.ts +115 -16
  476. package/src/core/new-tab.ts +35 -0
  477. package/src/core/node-require.ts +21 -0
  478. package/src/core/project-graph.ts +42 -26
  479. package/src/core/project.ts +9 -4
  480. package/src/core/request-body.ts +61 -0
  481. package/src/core/safe-href.ts +28 -0
  482. package/src/core/safe-links.ts +68 -0
  483. package/src/core/schema.ts +517 -739
  484. package/src/core/server-features.ts +8 -9
  485. package/src/core/sources/assets.ts +47 -11
  486. package/src/core/sources/collection.ts +67 -0
  487. package/src/core/sources/contentful-rich-text.ts +285 -0
  488. package/src/core/sources/contentful.ts +173 -0
  489. package/src/core/sources/github-releases.ts +51 -1
  490. package/src/core/sources/json.ts +71 -0
  491. package/src/core/sources/lexical.ts +195 -0
  492. package/src/core/sources/lower.ts +226 -0
  493. package/src/core/sources/normalize.ts +52 -2
  494. package/src/core/sources/notion.ts +39 -28
  495. package/src/core/sources/payload.ts +135 -0
  496. package/src/core/sources/portable-text.ts +11 -16
  497. package/src/core/sources/remote.ts +226 -0
  498. package/src/core/sources/resolve.ts +104 -166
  499. package/src/core/sources/sanity.ts +16 -49
  500. package/src/core/sources/strapi-blocks.ts +124 -0
  501. package/src/core/sources/strapi.ts +191 -0
  502. package/src/core/sources/types.ts +12 -1
  503. package/src/core/types.ts +15 -1
  504. package/src/core/ui-packs/ar.ts +6 -2
  505. package/src/core/ui-packs/bg.ts +6 -2
  506. package/src/core/ui-packs/bn.ts +6 -2
  507. package/src/core/ui-packs/ca.ts +3 -1
  508. package/src/core/ui-packs/cs.ts +6 -2
  509. package/src/core/ui-packs/da.ts +6 -2
  510. package/src/core/ui-packs/de.ts +6 -2
  511. package/src/core/ui-packs/el.ts +3 -1
  512. package/src/core/ui-packs/es.ts +3 -1
  513. package/src/core/ui-packs/fa.ts +6 -2
  514. package/src/core/ui-packs/fi.ts +6 -2
  515. package/src/core/ui-packs/fr.ts +3 -1
  516. package/src/core/ui-packs/he.ts +6 -2
  517. package/src/core/ui-packs/hi.ts +6 -2
  518. package/src/core/ui-packs/hr.ts +6 -2
  519. package/src/core/ui-packs/hu.ts +6 -2
  520. package/src/core/ui-packs/id.ts +6 -2
  521. package/src/core/ui-packs/it.ts +3 -1
  522. package/src/core/ui-packs/ja.ts +3 -1
  523. package/src/core/ui-packs/ko.ts +3 -1
  524. package/src/core/ui-packs/nl.ts +6 -2
  525. package/src/core/ui-packs/no.ts +6 -2
  526. package/src/core/ui-packs/pl.ts +6 -2
  527. package/src/core/ui-packs/pt-br.ts +3 -1
  528. package/src/core/ui-packs/pt.ts +3 -1
  529. package/src/core/ui-packs/ro.ts +6 -2
  530. package/src/core/ui-packs/ru.ts +6 -2
  531. package/src/core/ui-packs/sk.ts +6 -2
  532. package/src/core/ui-packs/sr.ts +6 -2
  533. package/src/core/ui-packs/sv.ts +6 -2
  534. package/src/core/ui-packs/th.ts +3 -1
  535. package/src/core/ui-packs/tr.ts +6 -2
  536. package/src/core/ui-packs/uk.ts +6 -2
  537. package/src/core/ui-packs/vi.ts +3 -1
  538. package/src/core/ui-packs/zh-tw.ts +3 -1
  539. package/src/core/ui-packs/zh.ts +3 -1
  540. package/src/core/unrecognized-keys.ts +10 -0
  541. package/src/core/version-cut.ts +116 -8
  542. package/src/deploy/adapter-output.ts +57 -97
  543. package/src/deploy/adapters/cloudflare.ts +39 -0
  544. package/src/deploy/adapters/index.ts +41 -0
  545. package/src/deploy/adapters/netlify.ts +34 -0
  546. package/src/deploy/adapters/node.ts +34 -0
  547. package/src/deploy/adapters/registry.ts +127 -0
  548. package/src/deploy/adapters/types.ts +92 -0
  549. package/src/deploy/adapters/vercel.ts +35 -0
  550. package/src/deploy/artifacts.ts +55 -27
  551. package/src/deploy/cloudflare-negotiation.ts +179 -100
  552. package/src/deploy/function-bundle.ts +18 -3
  553. package/src/deploy/headers.ts +124 -23
  554. package/src/deploy/node-headers.ts +198 -0
  555. package/src/deploy/platforms/cloudflare.ts +312 -0
  556. package/src/deploy/platforms/index.ts +67 -0
  557. package/src/deploy/platforms/netlify.ts +52 -0
  558. package/src/deploy/platforms/node.ts +40 -0
  559. package/src/deploy/platforms/paths.ts +42 -0
  560. package/src/deploy/platforms/static.ts +29 -0
  561. package/src/deploy/platforms/types.ts +112 -0
  562. package/src/deploy/platforms/vercel.ts +193 -0
  563. package/src/deploy/redirects.ts +30 -18
  564. package/src/deploy/robots.ts +3 -3
  565. package/src/deploy/rss.ts +2 -2
  566. package/src/deploy/sitemap.ts +2 -2
  567. package/src/deploy/vercel-negotiation.ts +2 -2
  568. package/src/eval/agents.ts +32 -1
  569. package/src/eval/findings.ts +19 -11
  570. package/src/eval/report.ts +10 -2
  571. package/src/markdown/external-links.ts +65 -0
  572. package/src/markdown/include.ts +45 -27
  573. package/src/markdown/index.ts +34 -9
  574. package/src/markdown/inline-code.ts +12 -6
  575. package/src/markdown/relative-links.ts +324 -0
  576. package/src/markdown/themes.ts +3 -3
  577. package/src/migrate/migrate.ts +149 -0
  578. package/src/openapi/parse.ts +64 -16
  579. package/src/openapi/proxy.ts +62 -10
  580. package/src/openapi/references.ts +147 -147
  581. package/src/openapi/render-mdx.ts +32 -10
  582. package/src/openapi/scalar.ts +15 -13
  583. package/src/openapi/sentence.ts +14 -0
  584. package/src/openapi/source.ts +37 -21
  585. package/src/openapi/spec-dependency-error.ts +15 -0
  586. package/src/reference/asyncapi.ts +83 -0
  587. package/src/reference/graphql.ts +89 -0
  588. package/src/reference/index.ts +40 -0
  589. package/src/reference/openapi.ts +83 -0
  590. package/src/reference/options.ts +201 -0
  591. package/src/reference/scalar.ts +136 -0
  592. package/src/reference/schema.ts +88 -0
  593. package/src/registry/eject.ts +97 -42
  594. package/src/search/adapters/algolia.ts +46 -0
  595. package/src/search/adapters/flexsearch.ts +29 -0
  596. package/src/search/adapters/index.ts +39 -0
  597. package/src/search/adapters/mixedbread.ts +39 -0
  598. package/src/search/adapters/orama-cloud.ts +51 -0
  599. package/src/search/adapters/orama.ts +24 -0
  600. package/src/search/adapters/pagefind.ts +27 -0
  601. package/src/search/adapters/registry.ts +131 -0
  602. package/src/search/adapters/types.ts +46 -0
  603. package/src/search/adapters/typesense.ts +57 -0
  604. package/src/search/build.ts +8 -4
  605. package/src/search/documents.ts +6 -0
  606. package/src/search/sync/algolia.ts +12 -11
  607. package/src/search/sync/index.ts +35 -20
  608. package/src/search/sync/orama-cloud.ts +12 -9
  609. package/src/search/sync/typesense.ts +15 -13
  610. package/src/sources/contentful.ts +63 -0
  611. package/src/sources/custom.ts +38 -0
  612. package/src/sources/filesystem.ts +51 -0
  613. package/src/sources/github-releases.ts +52 -0
  614. package/src/sources/index.ts +60 -0
  615. package/src/sources/mdx-remote.ts +76 -0
  616. package/src/sources/notion.ts +63 -0
  617. package/src/sources/obsidian.ts +38 -0
  618. package/src/sources/payload.ts +60 -0
  619. package/src/sources/registry.ts +182 -0
  620. package/src/sources/sanity.ts +66 -0
  621. package/src/sources/shared.ts +52 -0
  622. package/src/sources/strapi.ts +58 -0
  623. package/src/theme/entry.ts +24 -2
  624. package/src/translate/report.ts +40 -7
  625. package/src/upgrade/upgrade.ts +499 -0
  626. package/dist/cli/chunk-0qymqwzz.js +0 -164
  627. package/dist/cli/chunk-0qymqwzz.js.map +0 -15
  628. package/dist/cli/chunk-1jefwnfs.js.map +0 -48
  629. package/dist/cli/chunk-2mzebbbz.js +0 -69
  630. package/dist/cli/chunk-2z47ypj8.js.map +0 -11
  631. package/dist/cli/chunk-4x36ddpw.js.map +0 -11
  632. package/dist/cli/chunk-5093q3n7.js +0 -68
  633. package/dist/cli/chunk-5093q3n7.js.map +0 -10
  634. package/dist/cli/chunk-5qk08vmp.js.map +0 -11
  635. package/dist/cli/chunk-7s8hm3b6.js +0 -5347
  636. package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
  637. package/dist/cli/chunk-8cjtbafj.js.map +0 -13
  638. package/dist/cli/chunk-97r59kpr.js +0 -381
  639. package/dist/cli/chunk-97r59kpr.js.map +0 -12
  640. package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
  641. package/dist/cli/chunk-b27xqwn9.js.map +0 -10
  642. package/dist/cli/chunk-bf6bt1xt.js +0 -185
  643. package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
  644. package/dist/cli/chunk-cjtn640a.js.map +0 -10
  645. package/dist/cli/chunk-ct47dqpx.js.map +0 -11
  646. package/dist/cli/chunk-esphfr8p.js +0 -107
  647. package/dist/cli/chunk-esphfr8p.js.map +0 -11
  648. package/dist/cli/chunk-ex56aa81.js +0 -1016
  649. package/dist/cli/chunk-ex56aa81.js.map +0 -13
  650. package/dist/cli/chunk-garjf5z9.js +0 -30
  651. package/dist/cli/chunk-garjf5z9.js.map +0 -10
  652. package/dist/cli/chunk-js7saxwm.js +0 -1045
  653. package/dist/cli/chunk-js7saxwm.js.map +0 -22
  654. package/dist/cli/chunk-k79xp7av.js.map +0 -39
  655. package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
  656. package/dist/cli/chunk-q4rae3bg.js +0 -60
  657. package/dist/cli/chunk-q4rae3bg.js.map +0 -10
  658. package/dist/cli/chunk-rz9jmfhz.js +0 -108
  659. package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
  660. package/dist/cli/chunk-vh9w1sgp.js +0 -73
  661. package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
  662. package/dist/cli/chunk-vrfp10qk.js +0 -81
  663. package/dist/cli/chunk-vrfp10qk.js.map +0 -10
  664. package/dist/cli/chunk-yg63d42r.js.map +0 -34
  665. package/docs/advanced/api-reference.mdx +0 -240
  666. package/docs/reference/cli.mdx +0 -197
  667. package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
  668. package/src/components/content/changelog-element.ts +0 -69
  669. package/src/search/providers.ts +0 -91
  670. /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-7ez8ny0t.js.map} +0 -0
  671. /package/dist/cli/{chunk-nn13znc2.js.map → chunk-88cpgt6h.js.map} +0 -0
  672. /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-f7t03s3g.js.map} +0 -0
  673. /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-zxccj738.js.map} +0 -0
@@ -0,0 +1,646 @@
1
+ ---
2
+ title: Audit
3
+ description: blume audit crawls the built site and reports SEO and site-health issues — every finding names the source file and front matter line that fixes it.
4
+ ---
5
+
6
+ [`blume validate`](/docs/cli/validate) reads your _content_; `blume audit` reads the _built site_. It crawls the HTML in `dist/` after a build and reports SEO and site-health issues — titles, meta descriptions, canonicals, Open Graph and X cards, headings, hreflang, images, the sitemap, `robots.txt`, and structured data.
7
+
8
+ Because Blume built the site, every finding names the source file **and the front matter line** that fixes it, not just the URL a crawler would see:
9
+
10
+ ```
11
+ ⚠ Meta description too long or too short 5 pages
12
+ /docs/configuration/export content/docs/configuration/export.mdx:3
13
+ fix: Rewrite `description` in the frontmatter to fit the length range.
14
+ ```
15
+
16
+ Run it after a build:
17
+
18
+ ```bash
19
+ blume build
20
+ blume audit
21
+ ```
22
+
23
+ Findings are grouped by check rather than listed per page, so the report reads as a to-do list. Use `--verbose` to expand every affected page with its full detail, and `--only`/`--skip` to work through one category at a time. `blume audit --list-checks` prints the full catalog, which is also the [check catalog](#check-catalog) at the end of this page — every finding's `docsUrl` links to its entry there.
24
+
25
+ ## Flags
26
+
27
+ - `--fail-on error|warning|info` — the CI gate: exit non-zero at this severity or above. Defaults to `error`; `--strict` is an alias for `--fail-on warning`.
28
+ - `--url <origin>` — also probe a live deployment for status codes, response headers, and redirect chains.
29
+ - `--external` — probe outbound links over the network.
30
+ - `--only <check|category>` / `--skip <check|category>` — narrow the report to, or away from, these checks or categories (comma-separated). A term that names no check or category is an error that suggests the closest one, so a typo can't quietly empty the report.
31
+ - `--list-checks` — print every check the audit can report, then exit.
32
+ - `--verbose` — list every affected page with each finding's full detail, instead of the first few.
33
+ - `--json` — emit the report as JSON on stdout.
34
+ - `--claude` / `--codex` — hand the findings to Claude Code or Codex to fix interactively.
35
+
36
+ ## Failing CI
37
+
38
+ The exit code is the contract. By default `blume audit` fails only on errors — things that are definitely broken, like a link to a page that was never built, a redirect loop, or an invalid sitemap. Advisory findings (a short description, a duplicate title) are warnings and do not fail the build:
39
+
40
+ ```bash
41
+ blume audit # fails on errors
42
+ blume audit --fail-on warning # also fails on warnings
43
+ ```
44
+
45
+ ## Checking a live deployment
46
+
47
+ Some things only the real server can tell you: whether a page that exists in `dist/` actually 404s behind a bad rewrite, whether responses are compressed, and whether an `X-Robots-Tag` header is quietly deindexing a page whose HTML looks perfectly fine. Point the audit at a deployment to add those checks:
48
+
49
+ ```bash
50
+ blume audit --url https://docs.example.com
51
+ blume audit --url https://docs.example.com --external # also probe outbound links
52
+ ```
53
+
54
+ Outbound links are graded rather than flatly failed: a 404 is a broken link you can fix, while a 403 or 5xx is usually rate limiting or someone else's outage and is reported as a warning.
55
+
56
+ ## Fixing the findings with an agent
57
+
58
+ If you use [Claude Code](https://claude.com/claude-code) or [Codex](https://developers.openai.com/codex/cli), the audit can hand its findings straight to it:
59
+
60
+ ```bash
61
+ blume audit --claude # or --codex
62
+ ```
63
+
64
+ This writes the complete JSON report — every affected page, not the terminal's three-page preview — to a file and opens the agent interactively with a prompt that walks it through the findings: edit the source file each finding names, apply its suggested fix, then run `blume build` and `blume audit` again until the report is clean. The session is interactive by design: you review the edits through the agent's own permission flow, and the agent is told never to fix a finding by deleting content.
65
+
66
+ `--only` and `--skip` narrow the handoff the same way they narrow the report, so you can send one category at a time.
67
+
68
+ ## What it does and doesn't check
69
+
70
+ The check set is deliberately narrower than a general-purpose SEO crawler's. Much of what such a crawler reports cannot happen to a Blume site — it never emits `rel=nofollow`, and Vite's content-hashed bundles are never missing or redirecting — and reporting those as permanent zeroes would just teach you to ignore the report.
71
+
72
+ Two limits worth stating plainly:
73
+
74
+ - **Structured data** is validated for well-formedness (valid JSON, a `@context`, a `@type` on every node). Blume does not validate against the full schema.org vocabulary or Google's rich-results rules.
75
+ - **Core Web Vitals** are not checked. They need a real browser, and a flag that quietly measured nothing would be worse than not having one — so `blume audit` reports the layout-shift causes it _can_ see offline (images with no `width`/`height`, oversized assets) and leaves the rest alone for now.
76
+
77
+ Anything the audit did not run is reported as skipped rather than silently passing:
78
+
79
+ ```
80
+ ⊘ network skipped — pass --url <origin> (11 checks)
81
+ ⊘ external skipped — pass --external (2 checks)
82
+ ```
83
+
84
+ ## Check catalog
85
+
86
+ Every check `blume audit` can report, grouped by category, with its default severity, the tier it runs in, and the fix the report suggests. `--only` and `--skip` accept these ids (without the `BLUME_AUDIT_` prefix is fine too) or the category names.
87
+
88
+ ### Content
89
+
90
+ #### Title tag missing or empty [#title-missing]
91
+
92
+ `BLUME_AUDIT_TITLE_MISSING` · error · from the built HTML
93
+
94
+ Fix: Add a `title` to the page's frontmatter.
95
+
96
+ #### Multiple title tags [#title-multiple]
97
+
98
+ `BLUME_AUDIT_TITLE_MULTIPLE` · error · from the built HTML
99
+
100
+ Fix: Remove the extra `<title>` from the page's layout or MDX.
101
+
102
+ #### Title too long or too short [#title-length]
103
+
104
+ `BLUME_AUDIT_TITLE_LENGTH` · warning · from the built HTML
105
+
106
+ Fix: Rewrite `title` in the frontmatter to fit the length range.
107
+
108
+ #### Meta description missing or empty [#description-missing]
109
+
110
+ `BLUME_AUDIT_DESCRIPTION_MISSING` · warning · from the built HTML
111
+
112
+ Fix: Add a `description` to the page's frontmatter.
113
+
114
+ #### Multiple meta description tags [#description-multiple]
115
+
116
+ `BLUME_AUDIT_DESCRIPTION_MULTIPLE` · error · from the built HTML
117
+
118
+ Fix: Remove the extra description `<meta>` from the page's layout or MDX.
119
+
120
+ #### Meta description too long or too short [#description-length]
121
+
122
+ `BLUME_AUDIT_DESCRIPTION_LENGTH` · warning · from the built HTML
123
+
124
+ Fix: Rewrite `description` in the frontmatter to fit the length range.
125
+
126
+ #### H1 tag missing or empty [#h1-missing]
127
+
128
+ `BLUME_AUDIT_H1_MISSING` · warning · from the built HTML
129
+
130
+ Fix: Give the page a `title` — Blume renders it as the page's `<h1>`.
131
+
132
+ #### Multiple H1 tags [#h1-multiple]
133
+
134
+ `BLUME_AUDIT_H1_MULTIPLE` · warning · from the built HTML
135
+
136
+ Fix: Demote the extra `# Heading` in the body to `##` — Blume already renders `title` as the h1.
137
+
138
+ #### Low word count [#low-word-count]
139
+
140
+ `BLUME_AUDIT_LOW_WORD_COUNT` · info · from the built HTML
141
+
142
+ Fix: Expand the page, or fold it into a larger one.
143
+
144
+ #### Heading levels skip (e.g. h2 to h4) [#heading-skip]
145
+
146
+ `BLUME_AUDIT_HEADING_SKIP` · info · from the built HTML
147
+
148
+ Fix: Adjust the heading to the next level down — skipped levels break table-of-contents nesting and screen-reader outlines.
149
+
150
+ #### Page is dated in the future [#future-dated-page]
151
+
152
+ `BLUME_AUDIT_FUTURE_DATED_PAGE` · info · from the built HTML
153
+
154
+ Fix: Correct the `date`, or hold the page back until it is meant to be live.
155
+
156
+ #### Viewport not set [#viewport-missing]
157
+
158
+ `BLUME_AUDIT_VIEWPORT_MISSING` · error · from the built HTML
159
+
160
+ Fix: Restore the viewport `<meta>` in your ejected layout.
161
+
162
+ ### Duplicates
163
+
164
+ #### Duplicate title [#duplicate-title]
165
+
166
+ `BLUME_AUDIT_DUPLICATE_TITLE` · warning · from the built HTML
167
+
168
+ Fix: Give each page a distinct `title` — search engines show it as the result headline.
169
+
170
+ #### Duplicate meta description [#duplicate-description]
171
+
172
+ `BLUME_AUDIT_DUPLICATE_DESCRIPTION` · warning · from the built HTML
173
+
174
+ Fix: Give each page a distinct `description`.
175
+
176
+ #### Duplicate pages without canonical [#duplicate-content]
177
+
178
+ `BLUME_AUDIT_DUPLICATE_CONTENT` · warning · from the built HTML
179
+
180
+ Fix: Merge the pages, or set `seo.canonical` on all but one.
181
+
182
+ ### Indexability
183
+
184
+ #### deployment.site is not set [#site-not-set]
185
+
186
+ `BLUME_AUDIT_SITE_NOT_SET` · warning · from the built HTML
187
+
188
+ Fix: Set `deployment.site` in blume.config.ts to the site's public URL.
189
+
190
+ #### deployment.site is inferred at deploy time [#site-inferred-at-deploy]
191
+
192
+ `BLUME_AUDIT_SITE_INFERRED_AT_DEPLOY` · info · from the built HTML
193
+
194
+ Fix: Audit a production-like build (e.g. `VERCEL=1 VERCEL_PROJECT_PRODUCTION_URL=<host> blume build`) or the deployment itself with `--url <origin>`. Do not hardcode `deployment.site` — the platform sets it on every deploy.
195
+
196
+ #### Page is noindex but declares a canonical [#canonical-on-noindex]
197
+
198
+ `BLUME_AUDIT_CANONICAL_ON_NOINDEX` · warning · from the built HTML
199
+
200
+ Fix: Drop the canonical from noindex pages — Google treats the pairing as contradictory and may ignore one of the two.
201
+
202
+ #### Draft page is in the build [#draft-page-published]
203
+
204
+ `BLUME_AUDIT_DRAFT_PAGE_PUBLISHED` · warning · from the built HTML
205
+
206
+ Fix: Rebuild without `--preview` before deploying, or remove `draft: true` if the page is ready to ship.
207
+
208
+ #### Canonical URL missing [#canonical-missing]
209
+
210
+ `BLUME_AUDIT_CANONICAL_MISSING` · warning · from the built HTML
211
+
212
+ Fix: Set `deployment.site` so Blume can emit absolute canonical URLs.
213
+
214
+ #### Non-canonical page [#canonical-not-self]
215
+
216
+ `BLUME_AUDIT_CANONICAL_NOT_SELF` · info · from the built HTML
217
+
218
+ Fix: Point `seo.canonical` at this page, or remove it to use the default self-canonical.
219
+
220
+ #### Canonical points to a broken or redirecting page [#canonical-bad-target]
221
+
222
+ `BLUME_AUDIT_CANONICAL_BAD_TARGET` · error · from the built HTML
223
+
224
+ Fix: Point `seo.canonical` at a page that exists and doesn't redirect.
225
+
226
+ #### Canonical protocol does not match the site [#canonical-protocol-mismatch]
227
+
228
+ `BLUME_AUDIT_CANONICAL_PROTOCOL_MISMATCH` · error · from the built HTML
229
+
230
+ Fix: Use the same protocol in `seo.canonical` as in `deployment.site`.
231
+
232
+ #### Page is not indexable [#robots-meta-unexpected]
233
+
234
+ `BLUME_AUDIT_ROBOTS_META_UNEXPECTED` · info · from the built HTML
235
+
236
+ Fix: Remove `noindex` from the page's frontmatter if it should be indexed.
237
+
238
+ #### Page exceeds Googlebot's 2 MB crawl limit [#html-too-large]
239
+
240
+ `BLUME_AUDIT_HTML_TOO_LARGE` · error · from the built HTML
241
+
242
+ Fix: Split the page — Googlebot stops reading an HTML document at 2 MB.
243
+
244
+ #### X-Robots-Tag header conflicts with the page's robots meta [#robots-header-conflict]
245
+
246
+ `BLUME_AUDIT_ROBOTS_HEADER_CONFLICT` · error · needs `--url`
247
+
248
+ Fix: Remove the X-Robots-Tag header, or align it with the page's robots meta.
249
+
250
+ ### Links
251
+
252
+ #### Page has links to a broken page [#link-to-broken]
253
+
254
+ `BLUME_AUDIT_LINK_TO_BROKEN` · error · from the built HTML
255
+
256
+ Fix: Fix the link target, or create the page it points at.
257
+
258
+ #### Page has links to a redirect [#link-to-redirect]
259
+
260
+ `BLUME_AUDIT_LINK_TO_REDIRECT` · warning · from the built HTML
261
+
262
+ Fix: Link straight to the destination instead of through the redirect.
263
+
264
+ #### Orphan page (only reachable from navigation) [#orphan-page]
265
+
266
+ `BLUME_AUDIT_ORPHAN_PAGE` · warning · from the built HTML
267
+
268
+ Fix: Link to this page from the body of a related page.
269
+
270
+ #### Internal link hardcodes the site's own origin [#internal-link-absolute]
271
+
272
+ `BLUME_AUDIT_INTERNAL_LINK_ABSOLUTE` · warning · from the built HTML
273
+
274
+ Fix: Use a root-relative path (`/docs/x`) so the link survives previews and `basePath`.
275
+
276
+ #### Page has nofollow outgoing internal links [#internal-link-nofollow]
277
+
278
+ `BLUME_AUDIT_INTERNAL_LINK_NOFOLLOW` · info · from the built HTML
279
+
280
+ Fix: Drop `rel="nofollow"` — it stops this page passing authority internally.
281
+
282
+ #### Double slash in URL [#double-slash-url]
283
+
284
+ `BLUME_AUDIT_DOUBLE_SLASH_URL` · error · from the built HTML
285
+
286
+ Fix: Check `basePath` / `deployment.base` — a trailing slash there produces `//`.
287
+
288
+ #### Link fragment matches no id on the target page [#anchor-broken]
289
+
290
+ `BLUME_AUDIT_ANCHOR_BROKEN` · warning · from the built HTML
291
+
292
+ Fix: Point the fragment at a heading that exists on the target page, or fix the heading it meant.
293
+
294
+ #### URL contains uppercase, underscores, or spaces [#url-style]
295
+
296
+ `BLUME_AUDIT_URL_STYLE` · info · from the built HTML
297
+
298
+ Fix: Rename the source file to a lowercase, hyphenated slug — and add a redirect from the old URL if it was already published.
299
+
300
+ ### Redirects
301
+
302
+ #### Broken redirect [#redirect-broken]
303
+
304
+ `BLUME_AUDIT_REDIRECT_BROKEN` · error · from the built HTML
305
+
306
+ Fix: Point the redirect at a page that exists.
307
+
308
+ #### Redirect loop [#redirect-loop]
309
+
310
+ `BLUME_AUDIT_REDIRECT_LOOP` · error · from the built HTML
311
+
312
+ Fix: Break the cycle in `redirects` — it never resolves.
313
+
314
+ #### Redirect chain [#redirect-chain]
315
+
316
+ `BLUME_AUDIT_REDIRECT_CHAIN` · warning · from the built HTML
317
+
318
+ Fix: Point every hop straight at the final destination.
319
+
320
+ #### Meta refresh redirect [#meta-refresh]
321
+
322
+ `BLUME_AUDIT_META_REFRESH` · warning · from the built HTML
323
+
324
+ Fix: Use a real redirect in `blume.config.ts` instead of a meta refresh.
325
+
326
+ #### Redirect source is also a real page [#redirect-source-is-page]
327
+
328
+ `BLUME_AUDIT_REDIRECT_SOURCE_IS_PAGE` · error · from the built HTML
329
+
330
+ Fix: Remove the redirect, or delete the page it shadows — the page wins and the redirect never fires.
331
+
332
+ #### HTTPS to HTTP redirect [#redirect-to-http]
333
+
334
+ `BLUME_AUDIT_REDIRECT_TO_HTTP` · error · needs `--url`
335
+
336
+ Fix: Redirect to the HTTPS URL.
337
+
338
+ ### Social cards
339
+
340
+ #### Open Graph tags missing or incomplete [#og-incomplete]
341
+
342
+ `BLUME_AUDIT_OG_INCOMPLETE` · warning · from the built HTML
343
+
344
+ Fix: Add a `description` — Blume fills the rest of the Open Graph tags for you.
345
+
346
+ #### Open Graph image missing [#og-image-missing]
347
+
348
+ `BLUME_AUDIT_OG_IMAGE_MISSING` · warning · from the built HTML
349
+
350
+ Fix: Set `deployment.site` to turn on generated OG images, or set `seo.image` on the page.
351
+
352
+ #### Open Graph image is not in the build [#og-image-broken]
353
+
354
+ `BLUME_AUDIT_OG_IMAGE_BROKEN` · warning · from the built HTML
355
+
356
+ Fix: Point `seo.image` at a file that exists, or rebuild — a dead og:image renders as a blank card everywhere the page is shared.
357
+
358
+ #### Open Graph image is too small for large cards [#og-image-small]
359
+
360
+ `BLUME_AUDIT_OG_IMAGE_SMALL` · warning · from the built HTML
361
+
362
+ Fix: Use an image of at least 1200×630 — smaller ones render blurry or get cropped into small-card layouts.
363
+
364
+ #### Open Graph URL not matching canonical [#og-url-mismatch]
365
+
366
+ `BLUME_AUDIT_OG_URL_MISMATCH` · warning · from the built HTML
367
+
368
+ Fix: Align `og:url` with the page's canonical URL.
369
+
370
+ #### X (Twitter) card missing or incomplete [#twitter-card-incomplete]
371
+
372
+ `BLUME_AUDIT_TWITTER_CARD_INCOMPLETE` · warning · from the built HTML
373
+
374
+ Fix: Set `seo.x.handle` in blume.config.ts so X can attribute the card.
375
+
376
+ ### Internationalization
377
+
378
+ #### HTML lang attribute missing [#html-lang-missing]
379
+
380
+ `BLUME_AUDIT_HTML_LANG_MISSING` · error · from the built HTML
381
+
382
+ Fix: Restore the `lang` attribute on `<html>` in your ejected layout.
383
+
384
+ #### HTML lang attribute invalid [#html-lang-invalid]
385
+
386
+ `BLUME_AUDIT_HTML_LANG_INVALID` · error · from the built HTML
387
+
388
+ Fix: Use a valid BCP 47 tag (e.g. `en`, `en-GB`) for the locale.
389
+
390
+ #### Hreflang and HTML lang mismatch [#hreflang-lang-mismatch]
391
+
392
+ `BLUME_AUDIT_HREFLANG_LANG_MISMATCH` · error · from the built HTML
393
+
394
+ Fix: The page's `<html lang>` must match its own hreflang annotation.
395
+
396
+ #### Hreflang annotation invalid [#hreflang-invalid]
397
+
398
+ `BLUME_AUDIT_HREFLANG_INVALID` · error · from the built HTML
399
+
400
+ Fix: Use a valid BCP 47 tag in the hreflang annotation.
401
+
402
+ #### Self-reference hreflang annotation missing [#hreflang-self-missing]
403
+
404
+ `BLUME_AUDIT_HREFLANG_SELF_MISSING` · warning · from the built HTML
405
+
406
+ Fix: A page's hreflang set must include a self-reference.
407
+
408
+ #### X-default hreflang annotation missing [#hreflang-xdefault-missing]
409
+
410
+ `BLUME_AUDIT_HREFLANG_XDEFAULT_MISSING` · info · from the built HTML
411
+
412
+ Fix: Add an `x-default` alternate pointing at the default-locale page.
413
+
414
+ #### Missing reciprocal hreflang (no return-tag) [#hreflang-no-return-tag]
415
+
416
+ `BLUME_AUDIT_HREFLANG_NO_RETURN_TAG` · error · from the built HTML
417
+
418
+ Fix: Every page in an hreflang group must link back to every other one.
419
+
420
+ #### Hreflang points to a broken, redirecting, or non-canonical page [#hreflang-bad-target]
421
+
422
+ `BLUME_AUDIT_HREFLANG_BAD_TARGET` · error · from the built HTML
423
+
424
+ Fix: Point the hreflang alternate at a page that exists and is canonical.
425
+
426
+ #### Hreflang group has a language conflict [#hreflang-conflict]
427
+
428
+ `BLUME_AUDIT_HREFLANG_CONFLICT` · error · from the built HTML
429
+
430
+ Fix: Each language in an hreflang group must name exactly one page.
431
+
432
+ ### Assets
433
+
434
+ #### Missing alt text [#image-alt-missing]
435
+
436
+ `BLUME_AUDIT_IMAGE_ALT_MISSING` · warning · from the built HTML
437
+
438
+ Fix: Add descriptive `alt` text, or `alt=""` if the image is decorative.
439
+
440
+ #### Image broken [#image-broken]
441
+
442
+ `BLUME_AUDIT_IMAGE_BROKEN` · error · from the built HTML
443
+
444
+ Fix: Fix the image path, or add the file to public/.
445
+
446
+ #### Asset file size too large [#asset-too-large]
447
+
448
+ `BLUME_AUDIT_ASSET_TOO_LARGE` · warning · from the built HTML
449
+
450
+ Fix: Compress the asset, or serve a modern format (WebP/AVIF).
451
+
452
+ #### Image has no width/height [#image-missing-dimensions]
453
+
454
+ `BLUME_AUDIT_IMAGE_MISSING_DIMENSIONS` · warning · from the built HTML
455
+
456
+ Fix: Set `width` and `height` so the browser can reserve space (avoids layout shift).
457
+
458
+ #### Referenced script, style, or asset is missing from the build [#subresource-missing]
459
+
460
+ `BLUME_AUDIT_SUBRESOURCE_MISSING` · error · from the built HTML
461
+
462
+ Fix: Fix the reference, or restore the missing file.
463
+
464
+ #### HTTPS/HTTP mixed content [#mixed-content]
465
+
466
+ `BLUME_AUDIT_MIXED_CONTENT` · error · from the built HTML
467
+
468
+ Fix: Load the subresource over HTTPS — browsers block mixed content.
469
+
470
+ ### Sitemap
471
+
472
+ #### Indexable page not in sitemap [#indexable-page-not-in-sitemap]
473
+
474
+ `BLUME_AUDIT_INDEXABLE_PAGE_NOT_IN_SITEMAP` · warning · from the built HTML
475
+
476
+ Fix: Remove `draft`/`hidden`/`noindex` from the page's frontmatter if it should be indexed.
477
+
478
+ #### Noindex page in sitemap [#noindex-in-sitemap]
479
+
480
+ `BLUME_AUDIT_NOINDEX_IN_SITEMAP` · error · from the built HTML
481
+
482
+ Fix: A noindex page should not be advertised in the sitemap.
483
+
484
+ #### Non-canonical page in sitemap [#non-canonical-in-sitemap]
485
+
486
+ `BLUME_AUDIT_NON_CANONICAL_IN_SITEMAP` · error · from the built HTML
487
+
488
+ Fix: List only canonical URLs in the sitemap.
489
+
490
+ #### Sitemap names a page that does not exist or redirects [#sitemap-bad-url]
491
+
492
+ `BLUME_AUDIT_SITEMAP_BAD_URL` · error · from the built HTML
493
+
494
+ Fix: Remove the URL from the sitemap, or build the page it names.
495
+
496
+ #### Sitemap has a syntax error or wrong format [#sitemap-invalid]
497
+
498
+ `BLUME_AUDIT_SITEMAP_INVALID` · error · from the built HTML
499
+
500
+ Fix: Sitemaps must be valid XML in the sitemaps.org urlset format.
501
+
502
+ #### Sitemap exceeds 50 MB or 50,000 URLs [#sitemap-too-large]
503
+
504
+ `BLUME_AUDIT_SITEMAP_TOO_LARGE` · error · from the built HTML
505
+
506
+ Fix: Split the sitemap — the limits are 50 MB and 50,000 URLs.
507
+
508
+ #### Sitemap lastmod is invalid or in the future [#sitemap-lastmod-invalid]
509
+
510
+ `BLUME_AUDIT_SITEMAP_LASTMOD_INVALID` · warning · from the built HTML
511
+
512
+ Fix: Use a real W3C date that is not in the future — search engines that catch a sitemap lying about freshness stop trusting its lastmod entirely.
513
+
514
+ #### Sitemap includes URLs out of its scope [#sitemap-out-of-scope]
515
+
516
+ `BLUME_AUDIT_SITEMAP_OUT_OF_SCOPE` · warning · from the built HTML
517
+
518
+ Fix: A sitemap may only list URLs on its own origin.
519
+
520
+ #### Sitemap is not accessible [#sitemap-not-accessible]
521
+
522
+ `BLUME_AUDIT_SITEMAP_NOT_ACCESSIBLE` · error · needs `--url`
523
+
524
+ Fix: Make sitemap.xml reachable at the site root.
525
+
526
+ ### robots.txt
527
+
528
+ #### robots.txt missing [#robots-missing]
529
+
530
+ `BLUME_AUDIT_ROBOTS_MISSING` · warning · from the built HTML
531
+
532
+ Fix: Set `seo.robots: true` to generate robots.txt.
533
+
534
+ #### robots.txt has a syntax error [#robots-invalid]
535
+
536
+ `BLUME_AUDIT_ROBOTS_INVALID` · error · from the built HTML
537
+
538
+ Fix: Every robots.txt line must be a `Field: value` directive or a comment.
539
+
540
+ #### robots.txt disallows a page that is in the sitemap [#robots-disallows-indexable]
541
+
542
+ `BLUME_AUDIT_ROBOTS_DISALLOWS_INDEXABLE` · error · from the built HTML
543
+
544
+ Fix: A page can't be both disallowed in robots.txt and advertised in the sitemap.
545
+
546
+ #### robots.txt does not reference the sitemap [#robots-sitemap-missing]
547
+
548
+ `BLUME_AUDIT_ROBOTS_SITEMAP_MISSING` · info · from the built HTML
549
+
550
+ Fix: Set `deployment.site` so robots.txt can reference the sitemap.
551
+
552
+ #### robots.txt is not accessible [#robots-not-accessible]
553
+
554
+ `BLUME_AUDIT_ROBOTS_NOT_ACCESSIBLE` · error · needs `--url`
555
+
556
+ Fix: Make robots.txt reachable at the site root.
557
+
558
+ ### AI discoverability
559
+
560
+ #### llms.txt missing from the build [#llms-txt-missing]
561
+
562
+ `BLUME_AUDIT_LLMS_TXT_MISSING` · warning · from the built HTML
563
+
564
+ Fix: Rebuild — `agents.llmsTxt` is enabled but the build has no llms.txt. If that's intentional, set `agents.llmsTxt: false`.
565
+
566
+ #### llms.txt lists a page the build does not serve [#llms-txt-stale-entry]
567
+
568
+ `BLUME_AUDIT_LLMS_TXT_STALE_ENTRY` · warning · from the built HTML
569
+
570
+ Fix: Rebuild so llms.txt matches the site — a stale entry sends an AI agent to a page that is not there.
571
+
572
+ #### Indexable page missing from llms.txt [#llms-txt-page-missing]
573
+
574
+ `BLUME_AUDIT_LLMS_TXT_PAGE_MISSING` · warning · from the built HTML
575
+
576
+ Fix: Rebuild so llms.txt matches the site; if the page is deliberately excluded, mark it `seo.noindex` or `sidebar.hidden`.
577
+
578
+ #### No DNS-AID agent-discovery records [#dns-aid-missing]
579
+
580
+ `BLUME_AUDIT_DNS_AID_MISSING` · info · needs `--url`
581
+
582
+ Fix: Publish a ServiceMode SVCB or HTTPS record at `_index._agents.<host>` with your DNS provider so agents can discover the site via DNS (DNS-AID).
583
+
584
+ #### DNS-AID records are not DNSSEC-authenticated [#dns-aid-unsigned]
585
+
586
+ `BLUME_AUDIT_DNS_AID_UNSIGNED` · info · needs `--url`
587
+
588
+ Fix: Enable DNSSEC for the zone so validating resolvers return authenticated DNS-AID answers; if your DNS provider doesn't support DNSSEC, the records still work unsigned.
589
+
590
+ ### Structured data
591
+
592
+ #### Structured data is not valid JSON [#jsonld-invalid]
593
+
594
+ `BLUME_AUDIT_JSONLD_INVALID` · error · from the built HTML
595
+
596
+ Fix: The JSON-LD block must be valid JSON.
597
+
598
+ #### Structured data is missing required properties [#jsonld-incomplete]
599
+
600
+ `BLUME_AUDIT_JSONLD_INCOMPLETE` · warning · from the built HTML
601
+
602
+ Fix: Every JSON-LD node needs `@context` and `@type`.
603
+
604
+ ### Live deployment
605
+
606
+ #### 4XX page [#http-4xx]
607
+
608
+ `BLUME_AUDIT_HTTP_4XX` · error · needs `--url`
609
+
610
+ Fix: The page is linked or in the sitemap but the deployment 404s it.
611
+
612
+ #### 5XX page [#http-5xx]
613
+
614
+ `BLUME_AUDIT_HTTP_5XX` · error · needs `--url`
615
+
616
+ Fix: The deployment is erroring on this page.
617
+
618
+ #### Timed out [#http-timeout]
619
+
620
+ `BLUME_AUDIT_HTTP_TIMEOUT` · error · needs `--url`
621
+
622
+ Fix: The page did not respond in time.
623
+
624
+ #### Not compressed [#not-compressed]
625
+
626
+ `BLUME_AUDIT_NOT_COMPRESSED` · warning · needs `--url`
627
+
628
+ Fix: Enable gzip or brotli on the host.
629
+
630
+ #### Slow page [#slow-response]
631
+
632
+ `BLUME_AUDIT_SLOW_RESPONSE` · warning · needs `--url`
633
+
634
+ Fix: The page was slow to respond.
635
+
636
+ #### External link is broken [#external-link-broken]
637
+
638
+ `BLUME_AUDIT_EXTERNAL_LINK_BROKEN` · error · needs `--external`
639
+
640
+ Fix: Fix or remove the outbound link.
641
+
642
+ #### External link redirects [#external-link-redirect]
643
+
644
+ `BLUME_AUDIT_EXTERNAL_LINK_REDIRECT` · info · needs `--external`
645
+
646
+ Fix: Link straight to the destination.
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: Doctor
3
+ description: blume doctor diagnoses configuration and content problems before you build — the config, every page, the Node version, and features that need a server.
4
+ ---
5
+
6
+ `blume doctor` scans the project exactly as `blume build` would and reports what it finds, without generating or building anything. It's the first thing to run when a build fails for a reason that isn't obvious, and a cheap gate to keep in CI:
7
+
8
+ ```bash
9
+ blume doctor
10
+ ```
11
+
12
+ ## What it checks
13
+
14
+ - **The Node version** against the range the installed `blume` package supports, read from its own `engines` field. A version outside it is a warning: things may work, but it isn't a combination Blume tests.
15
+ - **`blume.config.ts`**, with the same validation a build runs. A removed or renamed key fails with a hint naming its replacement rather than a bare "unrecognized key".
16
+ - **Every content page and folder meta**: the diagnostics `blume dev` and `blume build` print as they load the project — invalid frontmatter, navigation problems, missing include targets, and the rest — collected in one report.
17
+ - **Features that need a server** on a site configured for static output — Ask AI, the MCP server, or the Try it playground's built-in proxy: an error naming the feature, with the deployment adapter to switch to (or, when a host adapter is set to `output: "static"`, telling you to drop that option).
18
+ - **Packages your config needs** that aren't installed — the SDK a search, content source, or Ask AI adapter imports, a deployment adapter's `@astrojs/*` package, or the renderer for Vue or Svelte islands: an error naming each package, with the install command for your package manager. `blume build` stops on the same check.
19
+ - **`components.ts` overrides** Blume can't plan — an inline or computed entry, or an import whose file doesn't exist: an error for each, at its line.
20
+ - **A version-shaped folder** (`v1.0/`) on a site with no `versions` configured, which would otherwise build as ordinary content: a warning pointing at [`blume version`](/docs/cli/version).
21
+ - **Secrets an enabled feature reads** that aren't set, such as `ALGOLIA_ADMIN_API_KEY` or `OPENROUTER_API_KEY`: a warning naming the variable. Doctor loads `.env` and `.env.local` first, like `blume dev` and `blume build`.
22
+
23
+ ## The summary
24
+
25
+ After the diagnostics, doctor prints what the project resolved to, so a mismatch between what you think is configured and what Blume sees is visible at a glance: the page count, the output mode and deployment adapter, the search provider, the configured reference, analytics, and content source adapters, and whether Ask AI is on and which backend it uses.
26
+
27
+ ## Exit code and JSON
28
+
29
+ Doctor exits non-zero when there are error diagnostics, so it fails CI on the same problems a build would; warnings are reported and don't fail. `--json` emits the diagnostics as JSON on stdout instead of the terminal report, in the same shape [`blume validate --json`](/docs/cli/validate#json-output) uses.