blume 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +28 -0
  3. package/README.md +2 -2
  4. package/dist/cli/{chunk-f7t03s3g.js → chunk-27g6wdth.js} +2 -2
  5. package/dist/cli/{chunk-mnqj32sj.js → chunk-2hn4b8z7.js} +13 -13
  6. package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
  7. package/dist/cli/{chunk-by2290sx.js → chunk-5shv93fd.js} +2 -2
  8. package/dist/cli/{chunk-a9kptbw5.js → chunk-6crbhc3x.js} +3 -3
  9. package/dist/cli/{chunk-a9kptbw5.js.map → chunk-6crbhc3x.js.map} +1 -1
  10. package/dist/cli/{chunk-mwt1k8n7.js → chunk-6hsn950k.js} +20 -20
  11. package/dist/cli/chunk-6hsn950k.js.map +10 -0
  12. package/dist/cli/{chunk-11j0384y.js → chunk-6vm74dry.js} +13 -13
  13. package/dist/cli/{chunk-11j0384y.js.map → chunk-6vm74dry.js.map} +3 -3
  14. package/dist/cli/{chunk-j8mw0za6.js → chunk-79jhk4py.js} +8 -8
  15. package/dist/cli/{chunk-j8mw0za6.js.map → chunk-79jhk4py.js.map} +2 -2
  16. package/dist/cli/{chunk-nk3ts2xk.js → chunk-82bbrxdn.js} +2 -2
  17. package/dist/cli/{chunk-2q1dwty4.js → chunk-ah61y8py.js} +8 -8
  18. package/dist/cli/{chunk-2q1dwty4.js.map → chunk-ah61y8py.js.map} +4 -4
  19. package/dist/cli/{chunk-zxccj738.js → chunk-ce574jw2.js} +1 -1
  20. package/dist/cli/{chunk-y3e45rc8.js → chunk-ch6g3ar0.js} +3 -3
  21. package/dist/cli/{chunk-beat36xx.js → chunk-dh8cwk36.js} +5 -5
  22. package/dist/cli/{chunk-beat36xx.js.map → chunk-dh8cwk36.js.map} +2 -2
  23. package/dist/cli/{chunk-1w8dp3qb.js → chunk-epjnccmv.js} +13 -13
  24. package/dist/cli/{chunk-ernrthtr.js → chunk-f2z5v128.js} +13 -13
  25. package/dist/cli/{chunk-zg2gtj10.js → chunk-fs23ddbb.js} +2 -2
  26. package/dist/cli/{chunk-7ez8ny0t.js → chunk-fxypxtvm.js} +2 -2
  27. package/dist/cli/{chunk-tzne8qfq.js → chunk-fz5wtpmh.js} +13 -13
  28. package/dist/cli/{chunk-b5aj94ah.js → chunk-hdpx1tax.js} +4 -4
  29. package/dist/cli/{chunk-d80hr03s.js → chunk-jwyddg7y.js} +9 -9
  30. package/dist/cli/{chunk-d80hr03s.js.map → chunk-jwyddg7y.js.map} +2 -2
  31. package/dist/cli/{chunk-fh5hj5jt.js → chunk-kdp5q7ke.js} +15 -15
  32. package/dist/cli/{chunk-6k8vp3ta.js → chunk-kpf8rrjc.js} +9 -9
  33. package/dist/cli/{chunk-6k8vp3ta.js.map → chunk-kpf8rrjc.js.map} +3 -3
  34. package/dist/cli/{chunk-5a2z0198.js → chunk-m3vmjgmq.js} +9 -9
  35. package/dist/cli/{chunk-5a2z0198.js.map → chunk-m3vmjgmq.js.map} +2 -2
  36. package/dist/cli/{chunk-bctazmbk.js → chunk-mb2919y2.js} +4 -4
  37. package/dist/cli/{chunk-79njf86q.js → chunk-q5163e60.js} +13 -13
  38. package/dist/cli/{chunk-xaz13gwg.js → chunk-qkqwkpte.js} +196 -208
  39. package/dist/cli/{chunk-xaz13gwg.js.map → chunk-qkqwkpte.js.map} +48 -48
  40. package/dist/cli/{chunk-sqn5t4q0.js → chunk-qs4q5p4e.js} +3 -3
  41. package/dist/cli/{chunk-bw22s759.js → chunk-qwsrynx5.js} +1 -1
  42. package/dist/cli/{chunk-z01ze5c1.js → chunk-s1p84fyh.js} +15 -15
  43. package/dist/cli/{chunk-pnnvybbk.js → chunk-s6jhgk0q.js} +5 -5
  44. package/dist/cli/{chunk-pnnvybbk.js.map → chunk-s6jhgk0q.js.map} +2 -2
  45. package/dist/cli/{chunk-f2972sbt.js → chunk-vtk4a6dg.js} +1 -1
  46. package/dist/cli/{chunk-z1f5arsg.js → chunk-wgm7m9qk.js} +21 -21
  47. package/dist/cli/{chunk-z1f5arsg.js.map → chunk-wgm7m9qk.js.map} +4 -4
  48. package/dist/cli/{chunk-bnbmcwfb.js → chunk-wm7js3j9.js} +5 -5
  49. package/dist/cli/{chunk-bnbmcwfb.js.map → chunk-wm7js3j9.js.map} +3 -3
  50. package/dist/cli/{chunk-d1tadaw7.js → chunk-yt5n7ppj.js} +3 -3
  51. package/dist/cli/{chunk-pat2zzwc.js → chunk-yw7dm696.js} +1 -1
  52. package/dist/cli/{chunk-pat2zzwc.js.map → chunk-yw7dm696.js.map} +1 -1
  53. package/dist/cli/{chunk-88cpgt6h.js → chunk-zxcczpyx.js} +1 -1
  54. package/dist/cli/{chunk-41za066z.js → chunk-zxh4d9vy.js} +4 -4
  55. package/dist/cli/index.js +17 -17
  56. package/dist/types/ai/agent-readability.d.ts +1 -1
  57. package/dist/types/ai/api/paths.d.ts +1 -1
  58. package/dist/types/ai/ask-context.d.ts +7 -7
  59. package/dist/types/ai/ask.d.ts +43 -43
  60. package/dist/types/ai/index.d.ts +3 -3
  61. package/dist/types/ai/openapi-components.d.ts +1 -1
  62. package/dist/types/ai/serializers.d.ts +1 -1
  63. package/dist/types/ai/visibility.d.ts +1 -1
  64. package/dist/types/core/config-input.d.ts +17 -17
  65. package/dist/types/core/config.d.ts +3 -3
  66. package/dist/types/core/data.d.ts +3 -3
  67. package/dist/types/core/i18n-ui.d.ts +6 -8
  68. package/dist/types/core/schema.d.ts +5 -5
  69. package/dist/types/core/unrecognized-keys.d.ts +1 -1
  70. package/dist/types/search/documents.d.ts +1 -1
  71. package/dist/types/search/orama-index.d.ts +1 -1
  72. package/docs/02-deployment.mdx +4 -4
  73. package/docs/03-upgrading.mdx +22 -9
  74. package/docs/04-migrating.mdx +4 -4
  75. package/docs/08-faq.mdx +3 -3
  76. package/docs/advanced/custom-pages.mdx +2 -2
  77. package/docs/advanced/skills.mdx +1 -1
  78. package/docs/cli/audit.mdx +3 -3
  79. package/docs/cli/doctor.mdx +3 -3
  80. package/docs/cli/evals.mdx +7 -7
  81. package/docs/cli/index.mdx +2 -2
  82. package/docs/cli/translate.mdx +8 -8
  83. package/docs/configuration/{ask-ai.mdx → assistant.mdx} +19 -19
  84. package/docs/configuration/customization.mdx +2 -2
  85. package/docs/configuration/index.mdx +2 -2
  86. package/docs/configuration/meta.ts +1 -1
  87. package/docs/configuration/search.mdx +1 -1
  88. package/docs/content/i18n.mdx +2 -2
  89. package/docs/content/islands.mdx +1 -1
  90. package/docs/discoverability/agent-discovery.mdx +1 -1
  91. package/docs/discoverability/index.mdx +1 -1
  92. package/docs/index.mdx +2 -2
  93. package/package.json +1 -1
  94. package/skills/blume/SKILL.md +5 -5
  95. package/skills/blume-migrate/SKILL.md +2 -2
  96. package/src/ai/agent-readability.ts +4 -4
  97. package/src/ai/api/paths.ts +1 -1
  98. package/src/ai/ask-context.ts +7 -7
  99. package/src/ai/ask-data.ts +2 -2
  100. package/src/ai/ask.ts +84 -71
  101. package/src/ai/cors.ts +3 -3
  102. package/src/ai/index.ts +16 -16
  103. package/src/ai/openapi-components.ts +1 -1
  104. package/src/ai/serializers.ts +1 -1
  105. package/src/ai/visibility.ts +1 -1
  106. package/src/astro/generate.ts +19 -18
  107. package/src/astro/module-types.ts +1 -1
  108. package/src/astro/runtime-deps.ts +6 -6
  109. package/src/astro/templates.ts +26 -26
  110. package/src/blume-modules.d.ts +2 -2
  111. package/src/cli/commands/audit.ts +1 -1
  112. package/src/cli/commands/doctor.ts +7 -5
  113. package/src/cli/commands/eval.ts +3 -3
  114. package/src/cli/commands/migrate.ts +2 -2
  115. package/src/cli/commands/translate.ts +3 -3
  116. package/src/cli/commands/upgrade.ts +2 -2
  117. package/src/cli/required-secrets.ts +3 -3
  118. package/src/components/copy-feedback.ts +1 -1
  119. package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
  120. package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
  121. package/src/components/islands/hooks.ts +14 -12
  122. package/src/components/layout/Header.astro +10 -10
  123. package/src/components/layout/PageLayout.astro +6 -6
  124. package/src/components/layout/Pagination.astro +7 -7
  125. package/src/components/layout/ReferenceLayout.astro +1 -1
  126. package/src/components/layout/RootLayout.astro +6 -6
  127. package/src/components/layout/Search.astro +13 -13
  128. package/src/components/layout/analytics-client.ts +1 -1
  129. package/src/components/layout/drawer-inert.ts +1 -1
  130. package/src/components/openapi/description.ts +2 -2
  131. package/src/core/code-fences.ts +1 -1
  132. package/src/core/config-input.ts +19 -19
  133. package/src/core/config.ts +3 -3
  134. package/src/core/data.ts +3 -3
  135. package/src/core/i18n-ui.ts +35 -9
  136. package/src/core/request-body.ts +1 -1
  137. package/src/core/schema.ts +25 -20
  138. package/src/core/server-features.ts +2 -2
  139. package/src/core/ui-packs/ar.ts +4 -5
  140. package/src/core/ui-packs/bg.ts +4 -5
  141. package/src/core/ui-packs/bn.ts +4 -5
  142. package/src/core/ui-packs/ca.ts +4 -5
  143. package/src/core/ui-packs/cs.ts +4 -5
  144. package/src/core/ui-packs/da.ts +4 -5
  145. package/src/core/ui-packs/de.ts +4 -5
  146. package/src/core/ui-packs/el.ts +4 -5
  147. package/src/core/ui-packs/es.ts +4 -5
  148. package/src/core/ui-packs/fa.ts +4 -5
  149. package/src/core/ui-packs/fi.ts +4 -5
  150. package/src/core/ui-packs/fr.ts +4 -5
  151. package/src/core/ui-packs/he.ts +4 -5
  152. package/src/core/ui-packs/hi.ts +4 -5
  153. package/src/core/ui-packs/hr.ts +4 -5
  154. package/src/core/ui-packs/hu.ts +4 -5
  155. package/src/core/ui-packs/id.ts +4 -5
  156. package/src/core/ui-packs/it.ts +4 -5
  157. package/src/core/ui-packs/ja.ts +4 -5
  158. package/src/core/ui-packs/ko.ts +4 -5
  159. package/src/core/ui-packs/nl.ts +4 -5
  160. package/src/core/ui-packs/no.ts +4 -5
  161. package/src/core/ui-packs/pl.ts +4 -5
  162. package/src/core/ui-packs/pt-br.ts +4 -5
  163. package/src/core/ui-packs/pt.ts +4 -5
  164. package/src/core/ui-packs/ro.ts +4 -5
  165. package/src/core/ui-packs/ru.ts +4 -5
  166. package/src/core/ui-packs/sk.ts +4 -5
  167. package/src/core/ui-packs/sr.ts +4 -5
  168. package/src/core/ui-packs/sv.ts +4 -5
  169. package/src/core/ui-packs/th.ts +4 -5
  170. package/src/core/ui-packs/tr.ts +4 -5
  171. package/src/core/ui-packs/uk.ts +4 -5
  172. package/src/core/ui-packs/vi.ts +4 -5
  173. package/src/core/ui-packs/zh-tw.ts +4 -5
  174. package/src/core/ui-packs/zh.ts +4 -5
  175. package/src/core/unrecognized-keys.ts +1 -1
  176. package/src/registry/eject.ts +19 -18
  177. package/src/search/documents.ts +2 -2
  178. package/src/search/orama-index.ts +1 -1
  179. package/src/translate/report.ts +1 -1
  180. package/src/upgrade/upgrade.ts +1 -1
  181. package/dist/cli/chunk-mnqj32sj.js.map +0 -12
  182. package/dist/cli/chunk-mwt1k8n7.js.map +0 -10
  183. /package/dist/cli/{chunk-f7t03s3g.js.map → chunk-27g6wdth.js.map} +0 -0
  184. /package/dist/cli/{chunk-by2290sx.js.map → chunk-5shv93fd.js.map} +0 -0
  185. /package/dist/cli/{chunk-nk3ts2xk.js.map → chunk-82bbrxdn.js.map} +0 -0
  186. /package/dist/cli/{chunk-zxccj738.js.map → chunk-ce574jw2.js.map} +0 -0
  187. /package/dist/cli/{chunk-y3e45rc8.js.map → chunk-ch6g3ar0.js.map} +0 -0
  188. /package/dist/cli/{chunk-1w8dp3qb.js.map → chunk-epjnccmv.js.map} +0 -0
  189. /package/dist/cli/{chunk-ernrthtr.js.map → chunk-f2z5v128.js.map} +0 -0
  190. /package/dist/cli/{chunk-zg2gtj10.js.map → chunk-fs23ddbb.js.map} +0 -0
  191. /package/dist/cli/{chunk-7ez8ny0t.js.map → chunk-fxypxtvm.js.map} +0 -0
  192. /package/dist/cli/{chunk-tzne8qfq.js.map → chunk-fz5wtpmh.js.map} +0 -0
  193. /package/dist/cli/{chunk-b5aj94ah.js.map → chunk-hdpx1tax.js.map} +0 -0
  194. /package/dist/cli/{chunk-fh5hj5jt.js.map → chunk-kdp5q7ke.js.map} +0 -0
  195. /package/dist/cli/{chunk-bctazmbk.js.map → chunk-mb2919y2.js.map} +0 -0
  196. /package/dist/cli/{chunk-79njf86q.js.map → chunk-q5163e60.js.map} +0 -0
  197. /package/dist/cli/{chunk-sqn5t4q0.js.map → chunk-qs4q5p4e.js.map} +0 -0
  198. /package/dist/cli/{chunk-bw22s759.js.map → chunk-qwsrynx5.js.map} +0 -0
  199. /package/dist/cli/{chunk-z01ze5c1.js.map → chunk-s1p84fyh.js.map} +0 -0
  200. /package/dist/cli/{chunk-f2972sbt.js.map → chunk-vtk4a6dg.js.map} +0 -0
  201. /package/dist/cli/{chunk-d1tadaw7.js.map → chunk-yt5n7ppj.js.map} +0 -0
  202. /package/dist/cli/{chunk-88cpgt6h.js.map → chunk-zxcczpyx.js.map} +0 -0
  203. /package/dist/cli/{chunk-41za066z.js.map → chunk-zxh4d9vy.js.map} +0 -0
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/cli/commands/audit.ts", "../src/audit/run.ts", "../src/audit/locate.ts", "../src/audit/url.ts", "../src/audit/checks/assets.ts", "../src/audit/checks/content.ts", "../src/audit/types.ts", "../src/audit/checks/dns-aid.ts", "../src/audit/checks/duplicates.ts", "../src/audit/checks/i18n.ts", "../src/audit/checks/indexability.ts", "../src/audit/graph.ts", "../src/audit/checks/links.ts", "../src/audit/checks/llms.ts", "../src/audit/checks/network.ts", "../src/audit/checks/og-image.ts", "../src/audit/image-size.ts", "../src/audit/checks/redirects.ts", "../src/audit/checks/robots.ts", "../src/audit/checks/sitemap.ts", "../src/audit/checks/social.ts", "../src/audit/crawl.ts", "../src/audit/snapshot.ts", "../src/audit/html.ts", "../src/audit/redirects.ts", "../src/audit/terms.ts"],
4
4
  "sourcesContent": [
5
- "import { defineCommand } from \"citty\";\n\nimport {\n AGENTS,\n fixPrompt,\n launchInstalledAgent,\n writeAgentReport,\n} from \"../../audit/agent.ts\";\nimport type { AgentKind } from \"../../audit/agent.ts\";\nimport { formatCatalog, formatReport, reportJson } from \"../../audit/report.ts\";\nimport { NoBuildError, runAudit } from \"../../audit/run.ts\";\nimport type { AuditResult } from \"../../audit/run.ts\";\nimport { checkTerms, unknownCheckTerms } from \"../../audit/terms.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport type { DiagnosticSeverity } from \"../../core/types.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport { flushStdout, logger, reportDiagnostics } from \"../log.ts\";\nimport { closestMatch } from \"../unknown-flags.ts\";\n\nconst SEVERITIES: DiagnosticSeverity[] = [\"error\", \"warning\", \"info\"];\n\n/** Severities at or above the gate, e.g. `warning` -> error + warning. */\nconst failingSeverities = (gate: DiagnosticSeverity): Set<DiagnosticSeverity> =>\n new Set(SEVERITIES.slice(0, SEVERITIES.indexOf(gate) + 1));\n\nconst splitTerms = (value: string | undefined): string[] =>\n value\n ? value\n .split(\",\")\n .map((term) => term.trim())\n .filter(Boolean)\n : [];\n\n/**\n * Exit when `--only`/`--skip` name a check or category that doesn't exist,\n * suggesting the closest real one — a typo would otherwise filter every\n * finding out and pass the gate.\n */\nconst rejectUnknownTerms = (terms: string[]): void => {\n const unknown = unknownCheckTerms(terms);\n if (unknown.length === 0) {\n return;\n }\n const known = checkTerms();\n const listed = unknown\n .map((term) => {\n const suggestion = closestMatch(term.trim().toLowerCase(), known);\n return suggestion\n ? `\"${term}\" (did you mean \"${suggestion}\"?)`\n : `\"${term}\"`;\n })\n .join(\", \");\n logger.error(\n `--only/--skip name no check or category: ${listed}. Run \\`blume audit --list-checks\\` for every check id and category.`\n );\n process.exit(1);\n};\n\n/** Whether the run should exit non-zero, given the gate. */\nexport const shouldFail = (\n result: AuditResult,\n gate: DiagnosticSeverity\n): boolean => {\n const failing = failingSeverities(gate);\n return result.diagnostics.some((d) => failing.has(d.severity));\n};\n\n/** Launch the agent CLI, turning a missing executable into the install hint. */\nconst launchAgentCode = async (\n agent: AgentKind,\n prompt: string\n): Promise<number> => {\n const cli = AGENTS[agent];\n const code = await launchInstalledAgent(cli.bin, prompt);\n if (code === null) {\n logger.error(\n `${cli.name} (\\`${cli.bin}\\`) was not found on PATH. Install it with \\`${cli.install}\\`.`\n );\n return process.exit(1);\n }\n return code;\n};\n\nexport const auditCommand = defineCommand({\n args: {\n claude: {\n description: \"Hand the findings to Claude Code to fix interactively.\",\n type: \"boolean\",\n },\n codex: {\n description: \"Hand the findings to Codex to fix interactively.\",\n type: \"boolean\",\n },\n external: {\n description: \"Probe outbound links over the network.\",\n type: \"boolean\",\n },\n \"fail-on\": {\n description:\n \"Exit non-zero at this severity or above: error | warning | info. Defaults to error.\",\n type: \"string\",\n },\n json: {\n description: \"Emit the report as JSON on stdout (for CI/editors).\",\n type: \"boolean\",\n },\n \"list-checks\": {\n description: \"Print every check the audit can report, then exit.\",\n type: \"boolean\",\n },\n only: {\n description: \"Only report these checks or categories (comma-separated).\",\n type: \"string\",\n },\n skip: {\n description: \"Suppress these checks or categories (comma-separated).\",\n type: \"string\",\n },\n strict: {\n description: \"Alias for --fail-on warning.\",\n type: \"boolean\",\n },\n url: {\n description:\n \"Also probe a live deployment (e.g. https://docs.example.com) for status codes, headers, and redirects.\",\n type: \"string\",\n },\n verbose: {\n description: \"List every affected page instead of the first few.\",\n type: \"boolean\",\n },\n },\n meta: commandMeta.audit,\n async run({ args }) {\n if (args[\"list-checks\"]) {\n process.stdout.write(formatCatalog());\n return;\n }\n\n const root = process.cwd();\n const gateInput = args[\"fail-on\"] ?? (args.strict ? \"warning\" : \"error\");\n const gate = SEVERITIES.find((severity) => severity === gateInput);\n if (gate === undefined) {\n logger.error(\n `Invalid --fail-on \"${gateInput}\" (use ${SEVERITIES.join(\" | \")}).`\n );\n process.exit(1);\n }\n // SAFETY: AGENTS is a closed record keyed by AgentKind, so its keys are\n // exactly the agent kinds.\n const agents = (Object.keys(AGENTS) as AgentKind[]).filter(\n (kind) => args[kind]\n );\n if (agents.length > 1) {\n logger.error(\"Pass at most one of --claude or --codex.\");\n process.exit(1);\n }\n const [agent] = agents;\n if (agent && args.json) {\n logger.error(`--json and --${agent} are mutually exclusive.`);\n process.exit(1);\n }\n const only = splitTerms(args.only);\n const skip = splitTerms(args.skip);\n rejectUnknownTerms([...only, ...skip]);\n let result: AuditResult;\n try {\n // `scanProject`, not `prepareProject`: the audit reads the *existing*\n // build and never regenerates the runtime, so it doesn't contend with a\n // running dev server. Same reasoning as `blume validate`.\n const project = await scanProject(root, { mode: \"build\" });\n result = await runAudit({\n external: args.external,\n only,\n origin: args.url,\n project,\n skip,\n });\n } catch (error) {\n if (error instanceof NoBuildError) {\n logger.error(`${error.message} Run \\`blume build\\` first.`);\n process.exit(1);\n }\n if (error instanceof BlumeError) {\n reportDiagnostics([error.diagnostic], root);\n process.exit(1);\n }\n reportInternalError(error);\n process.exit(1);\n }\n\n if (agent) {\n // Show the same report a plain run would, so the terminal records what\n // was handed off before the agent's own UI takes over the screen.\n process.stderr.write(\n formatReport(result, root, { verbose: args.verbose })\n );\n if (result.diagnostics.length === 0) {\n return;\n }\n const cli = AGENTS[agent];\n const report = await writeAgentReport(result, root);\n const count = result.diagnostics.length;\n // Straight to stderr like the report above it, not `logger.info` —\n // consola drops info-level lines in test and CI environments.\n process.stderr.write(\n ` Handing ${count} finding${count === 1 ? \"\" : \"s\"} to ${cli.name}…\\n\\n`\n );\n const code = await launchAgentCode(agent, fixPrompt(report));\n if (code !== 0) {\n process.exit(code);\n }\n // The gate is a CI concern; a handoff run succeeds when the agent\n // session does, not when the pre-fix site was already clean.\n return;\n }\n\n if (args.json) {\n process.stdout.write(reportJson(result, root));\n if (shouldFail(result, gate)) {\n // `process.exit` doesn't flush a piped stdout — without this the JSON is\n // truncated mid-write in exactly the CI setups that consume it.\n await flushStdout();\n process.exit(1);\n }\n return;\n }\n\n process.stderr.write(formatReport(result, root, { verbose: args.verbose }));\n\n if (shouldFail(result, gate)) {\n process.exit(1);\n }\n },\n});\n",
5
+ "import { defineCommand } from \"citty\";\n\nimport {\n AGENTS,\n fixPrompt,\n launchInstalledAgent,\n writeAgentReport,\n} from \"../../audit/agent.ts\";\nimport type { AgentKind } from \"../../audit/agent.ts\";\nimport { formatCatalog, formatReport, reportJson } from \"../../audit/report.ts\";\nimport { NoBuildError, runAudit } from \"../../audit/run.ts\";\nimport type { AuditResult } from \"../../audit/run.ts\";\nimport { checkTerms, unknownCheckTerms } from \"../../audit/terms.ts\";\nimport { BlumeError } from \"../../core/diagnostics.ts\";\nimport { scanProject } from \"../../core/project-graph.ts\";\nimport type { DiagnosticSeverity } from \"../../core/types.ts\";\nimport { commandMeta } from \"../command-meta.ts\";\nimport { reportInternalError } from \"../internal-error.ts\";\nimport { flushStdout, logger, reportDiagnostics } from \"../log.ts\";\nimport { closestMatch } from \"../unknown-flags.ts\";\n\nconst SEVERITIES: DiagnosticSeverity[] = [\"error\", \"warning\", \"info\"];\n\n/** Severities at or above the gate, e.g. `warning` -> error + warning. */\nconst failingSeverities = (gate: DiagnosticSeverity): Set<DiagnosticSeverity> =>\n new Set(SEVERITIES.slice(0, SEVERITIES.indexOf(gate) + 1));\n\nconst splitTerms = (value: string | undefined): string[] =>\n value\n ? value\n .split(\",\")\n .map((term) => term.trim())\n .filter(Boolean)\n : [];\n\n/**\n * Exit when `--only`/`--skip` name a check or category that doesn't exist,\n * suggesting the closest real one — a typo would otherwise filter every\n * finding out and pass the gate.\n */\nconst rejectUnknownTerms = (terms: string[]): void => {\n const unknown = unknownCheckTerms(terms);\n if (unknown.length === 0) {\n return;\n }\n const known = checkTerms();\n const listed = unknown\n .map((term) => {\n const suggestion = closestMatch(term.trim().toLowerCase(), known);\n return suggestion\n ? `\"${term}\" (did you mean \"${suggestion}\"?)`\n : `\"${term}\"`;\n })\n .join(\", \");\n logger.error(\n `--only/--skip name no check or category: ${listed}. Run \\`blume audit --list-checks\\` for every check id and category.`\n );\n process.exit(1);\n};\n\n/** Whether the run should exit non-zero, given the gate. */\nexport const shouldFail = (\n result: AuditResult,\n gate: DiagnosticSeverity\n): boolean => {\n const failing = failingSeverities(gate);\n return result.diagnostics.some((d) => failing.has(d.severity));\n};\n\n/** Launch the agent CLI, turning a missing executable into the install hint. */\nconst launchAgentCode = async (\n agent: AgentKind,\n prompt: string\n): Promise<number> => {\n const cli = AGENTS[agent];\n const code = await launchInstalledAgent(cli.bin, prompt);\n if (code === null) {\n logger.error(\n `${cli.name} (\\`${cli.bin}\\`) was not found on PATH. Install it with \\`${cli.install}\\`.`\n );\n return process.exit(1);\n }\n return code;\n};\n\nexport const auditCommand = defineCommand({\n args: {\n claude: {\n description: \"Hand the findings to Claude Code to fix interactively.\",\n type: \"boolean\",\n },\n codex: {\n description: \"Hand the findings to Codex to fix interactively.\",\n type: \"boolean\",\n },\n external: {\n description: \"Probe outbound links over the network.\",\n type: \"boolean\",\n },\n \"fail-on\": {\n description:\n \"Exit non-zero at this severity or above: error | warning | info. Defaults to error.\",\n type: \"string\",\n },\n json: {\n description: \"Emit the report as JSON on stdout (for CI/editors).\",\n type: \"boolean\",\n },\n \"list-checks\": {\n description: \"Print every check the audit can report, then exit.\",\n type: \"boolean\",\n },\n only: {\n description: \"Only report these checks or categories (comma-separated).\",\n type: \"string\",\n },\n skip: {\n description: \"Suppress these checks or categories (comma-separated).\",\n type: \"string\",\n },\n strict: {\n description: \"Alias for --fail-on warning.\",\n type: \"boolean\",\n },\n url: {\n description:\n \"Also probe a live deployment (e.g. https://docs.example.com) for status codes, headers, and redirects.\",\n type: \"string\",\n },\n verbose: {\n description: \"List every affected page instead of the first few.\",\n type: \"boolean\",\n },\n },\n meta: commandMeta.audit,\n async run({ args }) {\n if (args[\"list-checks\"]) {\n process.stdout.write(formatCatalog());\n return;\n }\n\n const root = process.cwd();\n const gateInput = args[\"fail-on\"] ?? (args.strict ? \"warning\" : \"error\");\n const gate = SEVERITIES.find((severity) => severity === gateInput);\n if (gate === undefined) {\n logger.error(\n `Invalid --fail-on \"${gateInput}\" (use ${SEVERITIES.join(\" | \")}).`\n );\n process.exit(1);\n }\n // SAFETY: AGENTS is a closed record keyed by AgentKind, so its keys are\n // exactly the agent kinds.\n const agents = (Object.keys(AGENTS) as AgentKind[]).filter(\n (kind) => args[kind]\n );\n if (agents.length > 1) {\n logger.error(\"Pass at most one of --codex or --claude.\");\n process.exit(1);\n }\n const [agent] = agents;\n if (agent && args.json) {\n logger.error(`--json and --${agent} are mutually exclusive.`);\n process.exit(1);\n }\n const only = splitTerms(args.only);\n const skip = splitTerms(args.skip);\n rejectUnknownTerms([...only, ...skip]);\n let result: AuditResult;\n try {\n // `scanProject`, not `prepareProject`: the audit reads the *existing*\n // build and never regenerates the runtime, so it doesn't contend with a\n // running dev server. Same reasoning as `blume validate`.\n const project = await scanProject(root, { mode: \"build\" });\n result = await runAudit({\n external: args.external,\n only,\n origin: args.url,\n project,\n skip,\n });\n } catch (error) {\n if (error instanceof NoBuildError) {\n logger.error(`${error.message} Run \\`blume build\\` first.`);\n process.exit(1);\n }\n if (error instanceof BlumeError) {\n reportDiagnostics([error.diagnostic], root);\n process.exit(1);\n }\n reportInternalError(error);\n process.exit(1);\n }\n\n if (agent) {\n // Show the same report a plain run would, so the terminal records what\n // was handed off before the agent's own UI takes over the screen.\n process.stderr.write(\n formatReport(result, root, { verbose: args.verbose })\n );\n if (result.diagnostics.length === 0) {\n return;\n }\n const cli = AGENTS[agent];\n const report = await writeAgentReport(result, root);\n const count = result.diagnostics.length;\n // Straight to stderr like the report above it, not `logger.info` —\n // consola drops info-level lines in test and CI environments.\n process.stderr.write(\n ` Handing ${count} finding${count === 1 ? \"\" : \"s\"} to ${cli.name}…\\n\\n`\n );\n const code = await launchAgentCode(agent, fixPrompt(report));\n if (code !== 0) {\n process.exit(code);\n }\n // The gate is a CI concern; a handoff run succeeds when the agent\n // session does, not when the pre-fix site was already clean.\n return;\n }\n\n if (args.json) {\n process.stdout.write(reportJson(result, root));\n if (shouldFail(result, gate)) {\n // `process.exit` doesn't flush a piped stdout — without this the JSON is\n // truncated mid-write in exactly the CI setups that consume it.\n await flushStdout();\n process.exit(1);\n }\n return;\n }\n\n process.stderr.write(formatReport(result, root, { verbose: args.verbose }));\n\n if (shouldFail(result, gate)) {\n process.exit(1);\n }\n },\n});\n",
6
6
  "import { readFile } from \"node:fs/promises\";\n\nimport pMap from \"p-map\";\n\nimport { normalizeBasePath, withBasePath } from \"../core/base-path.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport { deployStaticDir } from \"../deploy/adapter-output.ts\";\nimport { CHECKS } from \"./catalog.ts\";\nimport type { CheckId } from \"./catalog.ts\";\nimport { assetChecks } from \"./checks/assets.ts\";\nimport { contentChecks } from \"./checks/content.ts\";\nimport { dnsAidChecks } from \"./checks/dns-aid.ts\";\nimport { duplicateChecks } from \"./checks/duplicates.ts\";\nimport { i18nChecks } from \"./checks/i18n.ts\";\nimport { indexabilityChecks } from \"./checks/indexability.ts\";\nimport { linkChecks } from \"./checks/links.ts\";\nimport { llmsChecks } from \"./checks/llms.ts\";\nimport { externalChecks, networkChecks } from \"./checks/network.ts\";\nimport { ogImageChecks } from \"./checks/og-image.ts\";\nimport { redirectChecks } from \"./checks/redirects.ts\";\nimport { robotsChecks } from \"./checks/robots.ts\";\nimport { sitemapChecks } from \"./checks/sitemap.ts\";\nimport {\n socialChecks,\n structuredDataChecks,\n urlChecks,\n} from \"./checks/social.ts\";\nimport { crawlStaticDir } from \"./crawl.ts\";\nimport { buildGraph } from \"./graph.ts\";\nimport { resolveRedirects } from \"./redirects.ts\";\nimport { shortId } from \"./terms.ts\";\nimport { DEFAULT_THRESHOLDS } from \"./types.ts\";\nimport type {\n AuditContext,\n AuditTier,\n CheckModule,\n PageSnapshot,\n} from \"./types.ts\";\nimport { isServed, siteOrigin } from \"./url.ts\";\n\nconst MODULES: CheckModule[] = [\n contentChecks,\n duplicateChecks,\n indexabilityChecks,\n linkChecks,\n redirectChecks,\n socialChecks,\n ogImageChecks,\n i18nChecks,\n assetChecks,\n sitemapChecks,\n robotsChecks,\n llmsChecks,\n structuredDataChecks,\n urlChecks,\n networkChecks,\n dnsAidChecks,\n externalChecks,\n];\n\nexport interface AuditOptions {\n project: BlumeProject;\n /** Origin to probe for the network tier (`--url`). */\n origin?: string;\n /** Probe outbound links (`--external`). */\n external?: boolean;\n /** Only report these check ids or categories. */\n only?: string[];\n /** Suppress these check ids or categories. */\n skip?: string[];\n}\n\nexport interface AuditResult {\n diagnostics: Diagnostic[];\n staticDir: string;\n pages: number;\n origin: string | null;\n /** Which tiers actually ran. A skipped tier is reported, never hidden. */\n tiers: Record<AuditTier, boolean>;\n}\n\n/** Thrown when there's no build to audit. */\nexport class NoBuildError extends Error {\n readonly staticDir: string;\n\n constructor(staticDir: string) {\n super(`No build found at ${staticDir}.`);\n this.name = \"NoBuildError\";\n this.staticDir = staticDir;\n }\n}\n\n/** Ceiling on concurrent source reads; unbounded fan-out risks EMFILE. */\nconst READ_CONCURRENCY = 16;\n\n/** Read every page's source file once, so findings can cite front matter lines. */\nconst readSources = async (\n pages: PageSnapshot[]\n): Promise<Map<string, string>> => {\n const paths = [\n ...new Set(pages.flatMap((page) => (page.source ? [page.source] : []))),\n ];\n const entries = await pMap(\n paths,\n async (path) => {\n try {\n return [path, await readFile(path, \"utf-8\")] as const;\n } catch {\n // A staged (non-filesystem) source may not exist on disk. The finding\n // still names the URL; it just can't cite a line.\n return null;\n }\n },\n { concurrency: READ_CONCURRENCY }\n );\n return new Map(entries.filter((entry) => entry !== null));\n};\n\n/** Does a check id or its category match one of the user's `--only`/`--skip` terms? */\nconst matches = (id: CheckId, terms: string[]): boolean => {\n const meta = CHECKS.find((check) => check.id === id);\n const short = shortId(id);\n return terms.some((raw) => {\n const term = raw.trim().toLowerCase();\n return (\n term === short || term === id.toLowerCase() || term === meta?.category\n );\n });\n};\n\n/** Audit a built site. */\nexport const runAudit = async (options: AuditOptions): Promise<AuditResult> => {\n const { project } = options;\n const staticDir = deployStaticDir(project.config, project.context);\n const basePath = normalizeBasePath(project.config.basePath);\n\n const crawl = await crawlStaticDir({\n basePath,\n manifest: project.manifest,\n staticDir,\n });\n if (crawl.pages.length === 0) {\n throw new NoBuildError(staticDir);\n }\n\n const origin = options.origin ?? null;\n const byUrl = new Map(crawl.pages.map((page) => [page.url, page]));\n const context: AuditContext = {\n byUrl,\n files: crawl.files,\n graph: buildGraph(\n crawl.pages,\n siteOrigin(project.config.deployment.options.site),\n normalizeBasePath(project.config.deployment.options.base)\n ),\n llms: crawl.llms,\n origin,\n pages: crawl.pages,\n project,\n redirects: resolveRedirects(\n // Redirects are authored as if mounted at root; the built page URLs they\n // are checked against carry `basePath` (it's a real directory in the\n // build), so both sides gain it here — mirroring what\n // `applyBaseToAstroRedirects` does at build time. `withBasePath` is\n // idempotent and leaves external `to` URLs untouched.\n project.config.redirects.map((redirect) => ({\n ...redirect,\n from: withBasePath(basePath, redirect.from),\n to: withBasePath(basePath, redirect.to),\n })),\n // Pages, static files, and server routes alike: a redirect may\n // legitimately land on a served asset (`/old-whitepaper` ->\n // `/files/whitepaper.pdf`), and the same predicate the link and llms.txt\n // checks use decides what counts.\n (path) => isServed({ byUrl, files: crawl.files, project }, path)\n ),\n robots: crawl.robots,\n sitemap: crawl.sitemap,\n sources: await readSources(crawl.pages),\n staticDir,\n thresholds: DEFAULT_THRESHOLDS,\n };\n\n const tiers = {\n external: Boolean(options.external),\n network: origin !== null,\n static: true,\n } satisfies Record<AuditTier, boolean>;\n\n const results = await Promise.all(\n MODULES.filter((module) => tiers[module.tier]).map((module) =>\n module.run(context)\n )\n );\n\n let diagnostics = results.flat();\n if (options.only?.length) {\n // SAFETY: audit diagnostics are created through `finding()`, whose codes\n // all come from the check catalog's `CheckId` set.\n diagnostics = diagnostics.filter((d) =>\n matches(d.code as CheckId, options.only ?? [])\n );\n }\n if (options.skip?.length) {\n // SAFETY: same invariant — every audit diagnostic code is a catalog `CheckId`.\n diagnostics = diagnostics.filter(\n (d) => !matches(d.code as CheckId, options.skip ?? [])\n );\n }\n\n return {\n diagnostics,\n origin,\n pages: crawl.pages.length,\n staticDir,\n tiers,\n };\n};\n",
7
7
  "import { locateFrontmatterKey } from \"../core/diagnostics.ts\";\nimport type { FindingSite } from \"./catalog.ts\";\nimport type { AuditContext, PageSnapshot } from \"./types.ts\";\n\n/**\n * Where to report a finding about `page`: the built URL, plus — when the page\n * came from authored content — the source file and the exact front matter line\n * to edit.\n *\n * This is the feature. A crawler can only tell you that `/docs/api` has no\n * description; Blume knows the page was built from `docs/api.mdx` and can put\n * the cursor on the line. Pass the front matter key path a fix would touch\n * (`[\"description\"]`, `[\"seo\", \"canonical\"]`); omit it when the key doesn't\n * exist yet, and the finding anchors to the file instead.\n */\nexport const pageSite = (\n context: AuditContext,\n page: PageSnapshot,\n key?: readonly (string | number)[]\n): FindingSite => {\n const file = page.source;\n if (!file) {\n return { url: page.url };\n }\n const source = key ? context.sources.get(file) : undefined;\n const position = source ? locateFrontmatterKey(source, key ?? []) : undefined;\n return {\n column: position?.column,\n file,\n line: position?.line,\n url: page.url,\n };\n};\n",
8
8
  "import { normalizePath, stripBasePath } from \"../core/base-path.ts\";\nimport type { AuditContext } from \"./types.ts\";\n\n// Re-exported from its home next to the other path helpers; the audit checks\n// (and their tests) import it from here.\nexport { normalizePath } from \"../core/base-path.ts\";\n\n/** The slice of an audit context that says what the build serves. */\nexport type ServedContext = Pick<AuditContext, \"byUrl\" | \"files\" | \"project\">;\n\n/**\n * Routes the server answers that the build writes no file for.\n *\n * The MCP endpoint is streamable HTTP: llms.txt advertises `agents.mcp.route`\n * whenever the server is enabled, but it appears in neither the page snapshots\n * nor the static file index, so a check that only consults those reads the\n * site's own index as broken. The exemption is the configured route while the\n * server is on, and nothing wider — with `agents.mcp` off, a listed `/mcp` is as\n * dead as any other missing target. Any future server route (a search API, a\n * playground proxy) belongs here too, so every check recognizes it at once.\n */\nconst serverRoutes = (context: ServedContext): string[] => {\n const mcp = context.project.config.agents?.mcp;\n return mcp?.enabled ? [normalizePath(mcp.route)] : [];\n};\n\n/**\n * Whether a normalized path is served by the build — as a page, as a static\n * file, or as a route the server answers. The one definition of \"served\" for\n * the link, llms.txt, and redirect checks, so they can never disagree about\n * the same target.\n */\nexport const isServed = (context: ServedContext, path: string): boolean =>\n context.byUrl.has(path) ||\n context.files.has(path) ||\n // Astro's directory format serves `/docs/api` from `/docs/api/index.html`.\n context.files.has(`${path}/index.html`) ||\n serverRoutes(context).includes(path);\n\n/** What an `href` in built HTML turned out to point at. */\nexport type ResolvedHref =\n /** A path on this site. */\n | { kind: \"internal\"; path: string; hash: string }\n /** An absolute URL that resolves back to this site — should have been a path. */\n | { kind: \"self-origin\"; path: string; hash: string }\n /** An absolute URL on another origin. */\n | { kind: \"external\"; url: string }\n /** In-page anchor, `mailto:`, `tel:`, `javascript:`, data URI — not a page link. */\n | { kind: \"ignored\" };\n\nconst NON_HTTP_SCHEME = /^(?!https?:)[a-z][a-z0-9+.-]*:/iu;\n\n/**\n * Percent-decode a pathname for comparison against the built file tree. Page\n * URLs and file-index keys come from raw on-disk names, while `URL#pathname`\n * (and the `encodeURI`'d sitemap `<loc>`s) are percent-encoded — a Japanese\n * route would never match its own page without this. Malformed sequences are\n * kept as-is: they can't have come from our own encoder.\n */\nexport const decodePath = (path: string): string => {\n try {\n return decodeURI(path);\n } catch {\n return path;\n }\n};\n\n/** The origin of `deployment.site`, or null when no site is configured. */\nexport const siteOrigin = (site?: string): string | null => {\n if (!site) {\n return null;\n }\n try {\n return new URL(site).origin;\n } catch {\n return null;\n }\n};\n\n/**\n * Resolve an `href` found on `pageUrl` into something the link graph can use.\n *\n * An absolute URL pointing back at our own origin is reported separately from a\n * genuine external link: it's an internal link that hardcoded the production\n * domain, which silently breaks on preview deploys and under `basePath`.\n *\n * `deployBase` is the normalized `deployment.base`: emitted hrefs carry it, but\n * the built file tree (and so every page URL and file-index key) does not, so it\n * is stripped here to keep resolved paths comparable. `basePath` is different —\n * Blume mounts it as a real directory in the build, so it stays.\n */\nexport const resolveHref = (\n pageUrl: string,\n href: string,\n origin: string | null,\n deployBase = \"\"\n): ResolvedHref => {\n const target = href.trim();\n if (target === \"\" || target.startsWith(\"#\")) {\n return { kind: \"ignored\" };\n }\n if (NON_HTTP_SCHEME.test(target)) {\n return { kind: \"ignored\" };\n }\n\n // Protocol-relative (`//host/x`) is an absolute URL with the page's scheme.\n const absolute = /^https?:\\/\\//iu.test(target) || target.startsWith(\"//\");\n if (absolute) {\n let parsed: URL;\n try {\n parsed = new URL(target.startsWith(\"//\") ? `https:${target}` : target);\n } catch {\n return { kind: \"ignored\" };\n }\n if (origin && parsed.origin === origin) {\n return {\n hash: parsed.hash.slice(1),\n kind: \"self-origin\",\n path: normalizePath(\n stripBasePath(deployBase, decodePath(parsed.pathname))\n ),\n };\n }\n return { kind: \"external\", url: parsed.toString() };\n }\n\n // A relative href resolves the way a browser resolves it from the page's\n // canonical URL. `URL` needs an origin to do that, so borrow a placeholder\n // one and keep only the path. The canonical URL is slashless — the generated\n // config sets `trailingSlash: \"never\"`, Vercel redirects `/docs/api/` onto\n // `/docs/api`, and the dev server 404s the slashed form — so `./auth` there\n // means `/docs/auth`, exactly where a reader's click lands. Content links\n // never hit this: the Markdown pipeline rewrites them root-relative (see\n // `resolveRelativeHref`); what's left is hand-written HTML, which a browser\n // reads this way.\n const base = `https://blume.invalid${pageUrl}`;\n let resolved: URL;\n try {\n resolved = new URL(target, base);\n } catch {\n return { kind: \"ignored\" };\n }\n return {\n hash: resolved.hash.slice(1),\n kind: \"internal\",\n path: normalizePath(\n stripBasePath(deployBase, decodePath(resolved.pathname))\n ),\n };\n};\n",
@@ -30,6 +30,6 @@
30
30
  "import { CHECKS } from \"./catalog.ts\";\nimport type { CheckId } from \"./catalog.ts\";\n\n/** A check id without its `BLUME_AUDIT_` prefix, lowercased: `link_to_broken`. */\nexport const shortId = (id: CheckId): string =>\n id.replace(\"BLUME_AUDIT_\", \"\").toLowerCase();\n\n/**\n * Every term `--only`/`--skip` accept, as the audit's filter compares them:\n * each check's short id and each category. The full `BLUME_AUDIT_…` id is\n * accepted too, but it's the short id with a prefix, so it isn't listed.\n */\nexport const checkTerms = (): string[] => [\n ...new Set([\n ...CHECKS.map((check) => check.category),\n ...CHECKS.map((check) => shortId(check.id)),\n ]),\n];\n\n/**\n * The `--only`/`--skip` terms that name no check and no category. A typo there\n * (`--only link` for `links`) would otherwise match nothing, report nothing,\n * and pass a CI gate that was meant to catch something.\n */\nexport const unknownCheckTerms = (terms: readonly string[]): string[] => {\n const known = new Set(checkTerms());\n return terms.filter((raw) => {\n const term = raw.trim().toLowerCase();\n return !(known.has(term) || known.has(term.replace(/^blume_audit_/u, \"\")));\n });\n};\n"
31
31
  ],
32
32
  "mappings": "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",
33
- "debugId": "938D6EDE48FC146464756E2164756E21",
33
+ "debugId": "5DFBDEAD3AD54A7664756E2164756E21",
34
34
  "names": []
35
35
  }
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  distDir,
4
4
  deployPlatform
5
- } from "./chunk-xaz13gwg.js";
5
+ } from "./chunk-qkqwkpte.js";
6
6
 
7
7
  // src/deploy/adapter-output.ts
8
8
  import { existsSync } from "node:fs";
@@ -48,4 +48,4 @@ var surfaceAdapterOutput = async (config, context) => {
48
48
  export { deployOutputDir, deployStaticDir, surfaceAdapterOutput };
49
49
 
50
50
  //# debugId=8B79889B6B3550F964756E2164756E21
51
- //# sourceMappingURL=chunk-nk3ts2xk.js.map
51
+ //# sourceMappingURL=chunk-82bbrxdn.js.map
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  needsPlaygroundProxy,
4
4
  resolveAskBackend
5
- } from "./chunk-xaz13gwg.js";
5
+ } from "./chunk-qkqwkpte.js";
6
6
 
7
7
  // src/core/server-features.ts
8
8
  var serverFeatures = (config) => {
9
9
  const features = [];
10
- if (config.ai.ask?.enabled && !config.ai.ask.endpoint) {
11
- features.push("Ask AI");
10
+ if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {
11
+ features.push("Assistant");
12
12
  }
13
13
  if (config.agents.mcp.enabled) {
14
14
  features.push("MCP server");
@@ -37,11 +37,11 @@ var checkRequiredSecrets = (config) => {
37
37
  suggestion: `Set ${env} in .env.local for local dev, or in your host's environment for production.`
38
38
  });
39
39
  };
40
- if (config.ai.ask?.enabled && !config.ai.ask.endpoint) {
41
- const { provider } = config.ai.ask;
40
+ if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {
41
+ const { provider } = config.ai.assistant;
42
42
  const backend = resolveAskBackend(provider);
43
43
  for (const env of provider.requiredSecrets) {
44
- requireSecret(`Ask AI (${backend.label})`, env, backend.secretNote);
44
+ requireSecret(`Assistant (${backend.label})`, env, backend.secretNote);
45
45
  }
46
46
  }
47
47
  const { provider } = config.search;
@@ -71,5 +71,5 @@ var checkRequiredSecrets = (config) => {
71
71
 
72
72
  export { serverFeatures, checkRequiredSecrets };
73
73
 
74
- //# debugId=FF74BC88ADA489ED64756E2164756E21
75
- //# sourceMappingURL=chunk-2q1dwty4.js.map
74
+ //# debugId=26CFBC953FC234CC64756E2164756E21
75
+ //# sourceMappingURL=chunk-ah61y8py.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/core/server-features.ts", "../src/cli/required-secrets.ts"],
4
4
  "sourcesContent": [
5
- "import { needsPlaygroundProxy } from \"../openapi/references.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\n\n/**\n * List the enabled features that require Astro server output. Static builds\n * fail clearly when any of these are enabled.\n */\nexport const serverFeatures = (config: ResolvedConfig): string[] => {\n const features: string[] = [];\n if (config.ai.ask?.enabled && !config.ai.ask.endpoint) {\n features.push(\"Ask AI\");\n }\n // The hosted MCP server is a live JSON-RPC endpoint, so it needs a runtime.\n if (config.agents.mcp.enabled) {\n features.push(\"MCP server\");\n }\n // The built-in playground proxy (`playground.proxy: true` on an `openapi()`\n // or `graphql()` adapter) is a live fetch endpoint at `/_api-proxy`; an\n // external proxy URL (string) or a proxy-less playground stays fully static.\n if (needsPlaygroundProxy(config)) {\n features.push(\"API playground proxy\");\n }\n // A `server` adapter (Mixedbread) proxies queries through a secret server\n // endpoint, so it can't run on a static build.\n if (config.search.provider.mode === \"server\") {\n features.push(`Search (${config.search.provider.kind})`);\n }\n return features;\n};\n",
6
- "import { resolveAskBackend } from \"../ai/ask.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\n/**\n * Warn early when an enabled feature needs a secret env var that isn't set, so\n * the failure surfaces at `blume dev`/`build` instead of at the first request in\n * production. These are runtime secrets (the endpoint reads them on the server),\n * so this warns rather than hard-fails — the value may live only in the deploy\n * environment. Build-time secrets (search-index sync) already warn during sync.\n */\nexport const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const requireSecret = (feature: string, env: string, note?: string): void => {\n if (process.env[env]) {\n return;\n }\n const noteSuffix = note ? ` (${note})` : \"\";\n diagnostics.push({\n code: \"BLUME_MISSING_SECRET\",\n message: `${feature} is enabled but ${env} is not set${noteSuffix}.`,\n severity: \"warning\",\n suggestion: `Set ${env} in .env.local for local dev, or in your host's environment for production.`,\n });\n };\n\n if (config.ai.ask?.enabled && !config.ai.ask.endpoint) {\n // The adapter descriptor names the env vars its route reads.\n const { provider } = config.ai.ask;\n const backend = resolveAskBackend(provider);\n for (const env of provider.requiredSecrets) {\n requireSecret(`Ask AI (${backend.label})`, env, backend.secretNote);\n }\n }\n\n // Each search adapter declares the secrets its generated runtime reads.\n const { provider } = config.search;\n for (const env of provider.requiredSecrets) {\n requireSecret(`Search (${provider.kind})`, env);\n }\n\n // Adapters name their own secrets; the built-in analytics adapters ship\n // public tokens in the page and declare none.\n for (const adapter of config.analytics) {\n for (const env of adapter.requiredSecrets) {\n requireSecret(`Analytics (${adapter.kind})`, env);\n }\n }\n\n // Each content source adapter declares the env vars its fetch reads.\n for (const source of config.content.sources) {\n for (const env of source.requiredSecrets) {\n requireSecret(`Content source (${source.kind})`, env);\n }\n }\n\n // Adapters name their own secrets; the built-in reference adapters read\n // public specs and declare none.\n for (const adapter of config.reference) {\n for (const env of adapter.requiredSecrets) {\n requireSecret(`API reference (${adapter.kind})`, env);\n }\n }\n\n // The deployment adapter names its own secrets; the built-in host adapters\n // read platform-injected env and declare none.\n for (const env of config.deployment.requiredSecrets) {\n requireSecret(`Deployment (${config.deployment.kind})`, env);\n }\n\n return diagnostics;\n};\n"
5
+ "import { needsPlaygroundProxy } from \"../openapi/references.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\n\n/**\n * List the enabled features that require Astro server output. Static builds\n * fail clearly when any of these are enabled.\n */\nexport const serverFeatures = (config: ResolvedConfig): string[] => {\n const features: string[] = [];\n if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {\n features.push(\"Assistant\");\n }\n // The hosted MCP server is a live JSON-RPC endpoint, so it needs a runtime.\n if (config.agents.mcp.enabled) {\n features.push(\"MCP server\");\n }\n // The built-in playground proxy (`playground.proxy: true` on an `openapi()`\n // or `graphql()` adapter) is a live fetch endpoint at `/_api-proxy`; an\n // external proxy URL (string) or a proxy-less playground stays fully static.\n if (needsPlaygroundProxy(config)) {\n features.push(\"API playground proxy\");\n }\n // A `server` adapter (Mixedbread) proxies queries through a secret server\n // endpoint, so it can't run on a static build.\n if (config.search.provider.mode === \"server\") {\n features.push(`Search (${config.search.provider.kind})`);\n }\n return features;\n};\n",
6
+ "import { resolveAskBackend } from \"../ai/ask.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\n/**\n * Warn early when an enabled feature needs a secret env var that isn't set, so\n * the failure surfaces at `blume dev`/`build` instead of at the first request in\n * production. These are runtime secrets (the endpoint reads them on the server),\n * so this warns rather than hard-fails — the value may live only in the deploy\n * environment. Build-time secrets (search-index sync) already warn during sync.\n */\nexport const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const requireSecret = (feature: string, env: string, note?: string): void => {\n if (process.env[env]) {\n return;\n }\n const noteSuffix = note ? ` (${note})` : \"\";\n diagnostics.push({\n code: \"BLUME_MISSING_SECRET\",\n message: `${feature} is enabled but ${env} is not set${noteSuffix}.`,\n severity: \"warning\",\n suggestion: `Set ${env} in .env.local for local dev, or in your host's environment for production.`,\n });\n };\n\n if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {\n // The adapter descriptor names the env vars its route reads.\n const { provider } = config.ai.assistant;\n const backend = resolveAskBackend(provider);\n for (const env of provider.requiredSecrets) {\n requireSecret(`Assistant (${backend.label})`, env, backend.secretNote);\n }\n }\n\n // Each search adapter declares the secrets its generated runtime reads.\n const { provider } = config.search;\n for (const env of provider.requiredSecrets) {\n requireSecret(`Search (${provider.kind})`, env);\n }\n\n // Adapters name their own secrets; the built-in analytics adapters ship\n // public tokens in the page and declare none.\n for (const adapter of config.analytics) {\n for (const env of adapter.requiredSecrets) {\n requireSecret(`Analytics (${adapter.kind})`, env);\n }\n }\n\n // Each content source adapter declares the env vars its fetch reads.\n for (const source of config.content.sources) {\n for (const env of source.requiredSecrets) {\n requireSecret(`Content source (${source.kind})`, env);\n }\n }\n\n // Adapters name their own secrets; the built-in reference adapters read\n // public specs and declare none.\n for (const adapter of config.reference) {\n for (const env of adapter.requiredSecrets) {\n requireSecret(`API reference (${adapter.kind})`, env);\n }\n }\n\n // The deployment adapter names its own secrets; the built-in host adapters\n // read platform-injected env and declare none.\n for (const env of config.deployment.requiredSecrets) {\n requireSecret(`Deployment (${config.deployment.kind})`, env);\n }\n\n return diagnostics;\n};\n"
7
7
  ],
8
- "mappings": ";;;;;;;AAOO,IAAM,iBAAiB,CAAC,WAAqC;AAAA,EAClE,MAAM,WAAqB,CAAC;AAAA,EAC5B,IAAI,OAAO,GAAG,KAAK,WAAW,CAAC,OAAO,GAAG,IAAI,UAAU;AAAA,IACrD,SAAS,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,OAAO,OAAO,IAAI,SAAS;AAAA,IAC7B,SAAS,KAAK,YAAY;AAAA,EAC5B;AAAA,EAIA,IAAI,qBAAqB,MAAM,GAAG;AAAA,IAChC,SAAS,KAAK,sBAAsB;AAAA,EACtC;AAAA,EAGA,IAAI,OAAO,OAAO,SAAS,SAAS,UAAU;AAAA,IAC5C,SAAS,KAAK,WAAW,OAAO,OAAO,SAAS,OAAO;AAAA,EACzD;AAAA,EACA,OAAO;AAAA;;;AChBF,IAAM,uBAAuB,CAAC,WAAyC;AAAA,EAC5E,MAAM,cAA4B,CAAC;AAAA,EACnC,MAAM,gBAAgB,CAAC,SAAiB,KAAa,SAAwB;AAAA,IAC3E,IAAI,QAAQ,IAAI,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,aAAa,OAAO,KAAK,UAAU;AAAA,IACzC,YAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,SAAS,GAAG,0BAA0B,iBAAiB;AAAA,MACvD,UAAU;AAAA,MACV,YAAY,OAAO;AAAA,IACrB,CAAC;AAAA;AAAA,EAGH,IAAI,OAAO,GAAG,KAAK,WAAW,CAAC,OAAO,GAAG,IAAI,UAAU;AAAA,IAErD,QAAQ,aAAa,OAAO,GAAG;AAAA,IAC/B,MAAM,UAAU,kBAAkB,QAAQ;AAAA,IAC1C,WAAW,OAAO,SAAS,iBAAiB;AAAA,MAC1C,cAAc,WAAW,QAAQ,UAAU,KAAK,QAAQ,UAAU;AAAA,IACpE;AAAA,EACF;AAAA,EAGA,QAAQ,aAAa,OAAO;AAAA,EAC5B,WAAW,OAAO,SAAS,iBAAiB;AAAA,IAC1C,cAAc,WAAW,SAAS,SAAS,GAAG;AAAA,EAChD;AAAA,EAIA,WAAW,WAAW,OAAO,WAAW;AAAA,IACtC,WAAW,OAAO,QAAQ,iBAAiB;AAAA,MACzC,cAAc,cAAc,QAAQ,SAAS,GAAG;AAAA,IAClD;AAAA,EACF;AAAA,EAGA,WAAW,UAAU,OAAO,QAAQ,SAAS;AAAA,IAC3C,WAAW,OAAO,OAAO,iBAAiB;AAAA,MACxC,cAAc,mBAAmB,OAAO,SAAS,GAAG;AAAA,IACtD;AAAA,EACF;AAAA,EAIA,WAAW,WAAW,OAAO,WAAW;AAAA,IACtC,WAAW,OAAO,QAAQ,iBAAiB;AAAA,MACzC,cAAc,kBAAkB,QAAQ,SAAS,GAAG;AAAA,IACtD;AAAA,EACF;AAAA,EAIA,WAAW,OAAO,OAAO,WAAW,iBAAiB;AAAA,IACnD,cAAc,eAAe,OAAO,WAAW,SAAS,GAAG;AAAA,EAC7D;AAAA,EAEA,OAAO;AAAA;",
9
- "debugId": "FF74BC88ADA489ED64756E2164756E21",
8
+ "mappings": ";;;;;;;AAOO,IAAM,iBAAiB,CAAC,WAAqC;AAAA,EAClE,MAAM,WAAqB,CAAC;AAAA,EAC5B,IAAI,OAAO,GAAG,WAAW,WAAW,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjE,SAAS,KAAK,WAAW;AAAA,EAC3B;AAAA,EAEA,IAAI,OAAO,OAAO,IAAI,SAAS;AAAA,IAC7B,SAAS,KAAK,YAAY;AAAA,EAC5B;AAAA,EAIA,IAAI,qBAAqB,MAAM,GAAG;AAAA,IAChC,SAAS,KAAK,sBAAsB;AAAA,EACtC;AAAA,EAGA,IAAI,OAAO,OAAO,SAAS,SAAS,UAAU;AAAA,IAC5C,SAAS,KAAK,WAAW,OAAO,OAAO,SAAS,OAAO;AAAA,EACzD;AAAA,EACA,OAAO;AAAA;;;AChBF,IAAM,uBAAuB,CAAC,WAAyC;AAAA,EAC5E,MAAM,cAA4B,CAAC;AAAA,EACnC,MAAM,gBAAgB,CAAC,SAAiB,KAAa,SAAwB;AAAA,IAC3E,IAAI,QAAQ,IAAI,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,aAAa,OAAO,KAAK,UAAU;AAAA,IACzC,YAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,SAAS,GAAG,0BAA0B,iBAAiB;AAAA,MACvD,UAAU;AAAA,MACV,YAAY,OAAO;AAAA,IACrB,CAAC;AAAA;AAAA,EAGH,IAAI,OAAO,GAAG,WAAW,WAAW,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IAEjE,QAAQ,aAAa,OAAO,GAAG;AAAA,IAC/B,MAAM,UAAU,kBAAkB,QAAQ;AAAA,IAC1C,WAAW,OAAO,SAAS,iBAAiB;AAAA,MAC1C,cAAc,cAAc,QAAQ,UAAU,KAAK,QAAQ,UAAU;AAAA,IACvE;AAAA,EACF;AAAA,EAGA,QAAQ,aAAa,OAAO;AAAA,EAC5B,WAAW,OAAO,SAAS,iBAAiB;AAAA,IAC1C,cAAc,WAAW,SAAS,SAAS,GAAG;AAAA,EAChD;AAAA,EAIA,WAAW,WAAW,OAAO,WAAW;AAAA,IACtC,WAAW,OAAO,QAAQ,iBAAiB;AAAA,MACzC,cAAc,cAAc,QAAQ,SAAS,GAAG;AAAA,IAClD;AAAA,EACF;AAAA,EAGA,WAAW,UAAU,OAAO,QAAQ,SAAS;AAAA,IAC3C,WAAW,OAAO,OAAO,iBAAiB;AAAA,MACxC,cAAc,mBAAmB,OAAO,SAAS,GAAG;AAAA,IACtD;AAAA,EACF;AAAA,EAIA,WAAW,WAAW,OAAO,WAAW;AAAA,IACtC,WAAW,OAAO,QAAQ,iBAAiB;AAAA,MACzC,cAAc,kBAAkB,QAAQ,SAAS,GAAG;AAAA,IACtD;AAAA,EACF;AAAA,EAIA,WAAW,OAAO,OAAO,WAAW,iBAAiB;AAAA,IACnD,cAAc,eAAe,OAAO,WAAW,SAAS,GAAG;AAAA,EAC7D;AAAA,EAEA,OAAO;AAAA;",
9
+ "debugId": "26CFBC953FC234CC64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -20,4 +20,4 @@ var parsePort = (value) => {
20
20
  export { parsePort };
21
21
 
22
22
  //# debugId=EAEB4015F7DCE38D64756E2164756E21
23
- //# sourceMappingURL=chunk-zxccj738.js.map
23
+ //# sourceMappingURL=chunk-ce574jw2.js.map
@@ -4,7 +4,7 @@ import {
4
4
  customStaticRoutes,
5
5
  hasGeneratedChangelog,
6
6
  validateLinks
7
- } from "./chunk-xaz13gwg.js";
7
+ } from "./chunk-qkqwkpte.js";
8
8
  import {
9
9
  commandMeta,
10
10
  reportInternalError,
@@ -18,7 +18,7 @@ import"./chunk-jts8mvcz.js";
18
18
  import {
19
19
  buildManifest,
20
20
  scanProject
21
- } from "./chunk-zg2gtj10.js";
21
+ } from "./chunk-fs23ddbb.js";
22
22
 
23
23
  // src/cli/commands/validate.ts
24
24
  import { existsSync } from "node:fs";
@@ -99,4 +99,4 @@ export {
99
99
  };
100
100
 
101
101
  //# debugId=1EEBE4960D9C18F364756E2164756E21
102
- //# sourceMappingURL=chunk-y3e45rc8.js.map
102
+ //# sourceMappingURL=chunk-ch6g3ar0.js.map
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  ComponentOverridesError,
8
8
  analyzeComponentOverrides
9
- } from "./chunk-f2972sbt.js";
9
+ } from "./chunk-vtk4a6dg.js";
10
10
  import {
11
11
  frontmatter_default,
12
12
  DEFAULT_CONTENT_INCLUDE,
@@ -17,7 +17,7 @@ import {
17
17
  findComponentsFile,
18
18
  ConfigValidationError,
19
19
  loadConfig
20
- } from "./chunk-xaz13gwg.js";
20
+ } from "./chunk-qkqwkpte.js";
21
21
  import {
22
22
  baselineScanIgnore
23
23
  } from "./chunk-abh8yjkn.js";
@@ -257,7 +257,7 @@ var plainFinding = (finding, root) => {
257
257
  };
258
258
  var upgradePrompt = (options) => `Upgrade this Blume project to Blume ${options.version}. \`blume upgrade\` has bumped the \`blume\` dependency in package.json where it could; what's left is the config.
259
259
 
260
- The upgrade guide is at ${options.guidePath} (online at ${UPGRADE_GUIDE_URL}). It covers every change between Blume 1 and 2 with before-and-after examples: search, deployment, content sources, API references, analytics, and Ask AI become adapters imported from \`blume/*\` subpaths; the machine-readable settings move from \`ai\` to \`agents\`; and \`components.ts\` entries must be one of the static forms.
260
+ The upgrade guide is at ${options.guidePath} (online at ${UPGRADE_GUIDE_URL}). It covers every change between Blume 1 and 2 with before-and-after examples: search, deployment, content sources, API references, analytics, and the assistant's model provider become adapters imported from \`blume/*\` subpaths; the machine-readable settings move from \`ai\` to \`agents\`; Ask AI is renamed the assistant, so \`ai.ask\` becomes \`ai.assistant\`; and \`components.ts\` entries must be one of the static forms.
261
261
 
262
262
  \`blume upgrade\` found:
263
263
 
@@ -275,5 +275,5 @@ When \`${options.runner} blume doctor\` reports no errors, run \`${options.runne
275
275
 
276
276
  export { UPGRADE_GUIDE_URL, UPGRADE_GUIDE_FILE, bumpBlumeDependency, isOutsideBlumeProject, removedBuildFlags, flagList, removedBuildFlagsAdvice, collectUpgradeFindings, upgradePrompt };
277
277
 
278
- //# debugId=BBD151C21AC6C49164756E2164756E21
279
- //# sourceMappingURL=chunk-beat36xx.js.map
278
+ //# debugId=9BE967FC7391289164756E2164756E21
279
+ //# sourceMappingURL=chunk-dh8cwk36.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/upgrade/upgrade.ts"],
4
4
  "sourcesContent": [
5
- "import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nimport { join, relative, resolve } from \"pathe\";\nimport { glob } from \"tinyglobby\";\nimport { z } from \"zod\";\n\nimport {\n analyzeComponentOverrides,\n ComponentOverridesError,\n} from \"../core/component-overrides.ts\";\nimport { ConfigValidationError, loadConfig } from \"../core/config.ts\";\nimport { BlumeError, locateFrontmatterKey } from \"../core/diagnostics.ts\";\nimport matter from \"../core/frontmatter.ts\";\nimport { createModuleLoader } from \"../core/load-module.ts\";\nimport { findComponentsFile, findConfigFile } from \"../core/project.ts\";\nimport { pageMetaSchema } from \"../core/schema.ts\";\nimport { baselineScanIgnore } from \"../core/sources/watch.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport {\n DEFAULT_CONTENT_EXCLUDE,\n DEFAULT_CONTENT_INCLUDE,\n} from \"../sources/filesystem.ts\";\n\n/**\n * `blume upgrade`'s logic, kept out of the command module so it runs (and is\n * covered) in-process: bump the `blume` dependency to the running CLI's major,\n * then check the project against it — the config through the same loader\n * every command uses, which names each removed or renamed field and its\n * replacement, `components.ts` through the same static planner the build\n * runs, and each page's front matter for fields the schema removed. The\n * command prints the findings or hands them to a coding agent.\n */\n\n/** The upgrade guide's route on the Blume docs site. */\nexport const UPGRADE_GUIDE_URL = \"https://useblume.dev/docs/upgrading\";\n\n/** The upgrade guide's file inside the published package's bundled docs. */\nexport const UPGRADE_GUIDE_FILE = join(\"docs\", \"03-upgrading.mdx\");\n\n/** What `bumpBlumeDependency` did to `package.json`. */\nexport type DependencyBump =\n | {\n field: DependencyField;\n from: string;\n status: \"bumped\";\n to: string;\n }\n | { range: string; status: \"current\" }\n | { status: \"missing\" };\n\ntype DependencyField = \"dependencies\" | \"devDependencies\";\n\nconst DEPENDENCY_FIELDS: DependencyField[] = [\n \"dependencies\",\n \"devDependencies\",\n];\n\n/** The slice of `package.json` the bump reads and rewrites. */\ninterface PackageJson {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\n// Leading comparators and a `v` may precede the major (`^1.7.3`, `>=1 <2`,\n// `v1`); a protocol (`workspace:`, `file:`, `npm:`) or a tag (`latest`) names\n// no major at all, and those ranges are left to the user.\nconst RANGE_MAJOR = /^[\\s<=>^~v]*(?<major>\\d+)/u;\n\n/** The major version a dependency range pins, or null when it names none. */\nexport const rangeMajor = (range: string): number | null => {\n const major = RANGE_MAJOR.exec(range)?.groups?.major;\n return major === undefined ? null : Number(major);\n};\n\n// The file's own indentation (two spaces, four, or a tab), so a fallback\n// rewrite doesn't reformat a package.json the user keeps differently.\nconst INDENT = /^(?<indent>[ \\t]+)\"/mu;\n\nconst REGEXP_SPECIAL = /[$()*+.?[\\\\\\]^{|}]/gu;\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(REGEXP_SPECIAL, String.raw`\\$&`);\n\n/**\n * `text` with the `blume` range under `field` replaced in place, so the file\n * keeps its own formatting, key order, and inline objects; null when the entry\n * isn't written the plain way (an escaped key or value).\n */\nconst replaceRange = (\n text: string,\n field: DependencyField,\n from: string,\n to: string\n): string | null => {\n const value = JSON.stringify(from);\n const entry = new RegExp(`\"blume\"\\\\s*:\\\\s*${escapeRegExp(value)}`, \"gu\");\n entry.lastIndex = Math.max(text.indexOf(JSON.stringify(field)), 0);\n const match = entry.exec(text);\n if (!match) {\n return null;\n }\n const end = match.index + match[0].length;\n return `${text.slice(0, end - value.length)}${JSON.stringify(to)}${text.slice(end)}`;\n};\n\n/**\n * Point `package.json`'s `blume` dependency at `^version` when it pins an\n * older major. A range already on this major, or one that names no version\n * (`workspace:*`, `latest`), is reported as current and left alone; a\n * project with no `package.json`, or none that lists `blume`, is `missing`.\n * Only the range changes: the rest of the file is kept byte for byte.\n */\nexport const bumpBlumeDependency = async (\n root: string,\n version: string\n): Promise<DependencyBump> => {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return { status: \"missing\" };\n }\n const text = await readFile(path, \"utf-8\");\n // SAFETY: package.json is a JSON object; only its dependency maps, which\n // map package names to range strings, are read.\n const pkg = JSON.parse(text) as PackageJson;\n const field = DEPENDENCY_FIELDS.find(\n (name) => pkg[name]?.blume !== undefined\n );\n const from = field ? pkg[field]?.blume : undefined;\n if (!(field && from)) {\n return { status: \"missing\" };\n }\n const current = rangeMajor(from);\n const target = rangeMajor(version);\n if (current === null || target === null || current >= target) {\n return { range: from, status: \"current\" };\n }\n const to = `^${version}`;\n const indent = INDENT.exec(text)?.groups?.indent ?? \" \";\n const updated = { ...pkg, [field]: { ...pkg[field], blume: to } };\n await writeFile(\n path,\n replaceRange(text, field, from, to) ??\n `${JSON.stringify(updated, null, indent)}\\n`\n );\n return { field, from, status: \"bumped\", to };\n};\n\n/**\n * Whether `root` is no Blume project at all: no config file and no `blume`\n * dependency, so the upgrade would only check the defaults and report the\n * folder ready. A zero-config project still lists `blume`.\n */\nexport const isOutsideBlumeProject = (\n root: string,\n bump: DependencyBump\n): boolean => bump.status === \"missing\" && findConfigFile(root) === null;\n\n// ---------------------------------------------------------------------------\n// Removed `blume build` flags\n// ---------------------------------------------------------------------------\n\n/** A `blume build` flag Blume 2 removed, bare or with an `=value`. */\nconst REMOVED_BUILD_FLAG = /^--(?<flag>adapter|base|output)(?:=|$)/u;\n\n/** The removed `blume build` flags among `args`, in order, each once. */\nexport const removedBuildFlags = (args: readonly string[]): string[] => [\n ...new Set(\n args.flatMap((arg) => {\n const flag = REMOVED_BUILD_FLAG.exec(arg)?.groups?.flag;\n return flag ? [flag] : [];\n })\n ),\n];\n\n/** The flags as the reader typed them: `--adapter, --output`. */\nexport const flagList = (flags: string[]): string =>\n flags.map((flag) => `--${flag}`).join(\", \");\n\n/** What replaces each removed flag: the `deployment` config. */\nexport const removedBuildFlagsAdvice = (flags: string[]): string => {\n const advice: string[] = [];\n if (flags.includes(\"adapter\") || flags.includes(\"output\")) {\n advice.push(\n 'name the host in blume.config.ts with `deployment: vercel()` (or `netlify()`, `cloudflare()`, `node()`) from \"blume/deploy\" — a host adapter builds for the server, and `output: \"static\"` keeps it static'\n );\n }\n if (flags.includes(\"base\")) {\n advice.push(\n 'set the subpath with `deployment: { base: \"/docs\" }`, or the host adapter\\'s `base` option'\n );\n }\n return `Drop ${flagList(flags)} and ${advice.join(\"; \")}.`;\n};\n\n// A command that runs the Blume CLI: the bare bin, a versioned package\n// (`blume@2`), or a path to it (`./node_modules/.bin/blume`).\nconst BLUME_BIN = /(?:^|[/\\\\])blume(?:@\\S+)?$/u;\nconst COMMAND_SEPARATOR = /&&|\\|\\||[;|]/u;\nconst WHITESPACE = /\\s+/u;\n\n/** The arguments each `blume build` in a script passes, flattened. */\nconst buildArgs = (script: string): string[] =>\n script.split(COMMAND_SEPARATOR).flatMap((command) => {\n const words = command.trim().split(WHITESPACE);\n const at = words.findIndex(\n (word, index) => BLUME_BIN.test(word) && words[index + 1] === \"build\"\n );\n return at === -1 ? [] : words.slice(at + 2);\n });\n\n/** The slice of package.json the script check reads. */\nconst scriptsSchema = z.looseObject({\n scripts: z.record(z.string(), z.string()).default({}),\n});\n\nconst lineOf = (text: string, index: number): number =>\n text.slice(0, index).split(\"\\n\").length;\n\n/**\n * A finding for each package.json script that still passes a removed flag to\n * `blume build` — it would otherwise build a static site without a word.\n */\nconst scriptFindings = async (root: string): Promise<Diagnostic[]> => {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return [];\n }\n const text = await readFile(path, \"utf-8\");\n const pkg = scriptsSchema.safeParse(JSON.parse(text));\n const scripts = pkg.success ? pkg.data.scripts : {};\n const scriptsAt = text.indexOf('\"scripts\"');\n return Object.entries(scripts).flatMap(([name, script]) => {\n const flags = removedBuildFlags(buildArgs(script));\n if (flags.length === 0) {\n return [];\n }\n const at = text.indexOf(JSON.stringify(name), scriptsAt);\n return [\n {\n code: \"BLUME_BUILD_FLAG_REMOVED\",\n file: path,\n line: at === -1 ? undefined : lineOf(text, at),\n message: `The \"${name}\" script passes ${flagList(flags)} to \\`blume build\\`, which Blume 2 removed.`,\n severity: \"error\",\n suggestion: removedBuildFlagsAdvice(flags),\n } satisfies Diagnostic,\n ];\n });\n};\n\n// ---------------------------------------------------------------------------\n// Removed front matter fields\n// ---------------------------------------------------------------------------\n\n/** Where a project's local content lives, as its config names it. */\ninterface ContentGlobs {\n exclude: string[];\n include: string[];\n root: string;\n}\n\nconst globFields = {\n exclude: z.array(z.string()).optional(),\n include: z.array(z.string()).optional(),\n root: z.string().optional(),\n};\n\n/**\n * A filesystem source in either form a config being upgraded may hold: the\n * `filesystem()` descriptor, or Blume 1's `{ type: \"filesystem\" }` object.\n */\nconst rawFilesystemSourceSchema = z.union([\n z\n .looseObject({\n kind: z.literal(\"filesystem\"),\n options: z.looseObject(globFields).default({}),\n })\n .transform((source) => source.options),\n z.looseObject({ type: z.literal(\"filesystem\"), ...globFields }),\n]);\n\n/** The `content` slice of a config as written, before validation. */\nconst rawContentSchema = z.looseObject({\n content: z\n .looseObject({ ...globFields, sources: z.array(z.unknown()).optional() })\n .optional(),\n});\n\n/**\n * The content roots to scan, read from the config as written rather than the\n * validated config: the upgrade runs on configs that don't validate yet. Its\n * filesystem sources when it lists any, else the `content.root` shorthand,\n * else the zero-config `docs` folder.\n */\nexport const contentGlobs = ({\n content,\n}: z.infer<typeof rawContentSchema>): ContentGlobs[] => {\n const sources = (content?.sources ?? []).flatMap((source) => {\n const filesystem = rawFilesystemSourceSchema.safeParse(source);\n return filesystem.success ? [filesystem.data] : [];\n });\n return (sources.length > 0 ? sources : [content ?? {}]).map((globs) => ({\n exclude: globs.exclude ?? DEFAULT_CONTENT_EXCLUDE,\n include: globs.include ?? DEFAULT_CONTENT_INCLUDE,\n root: globs.root ?? \"docs\",\n }));\n};\n\n/** The content roots the project's config names, loaded as written. */\nconst configContentGlobs = async (root: string): Promise<ContentGlobs[]> => {\n const file = findConfigFile(root);\n let raw: z.infer<typeof rawContentSchema> = {};\n if (file) {\n try {\n const parsed = rawContentSchema.safeParse(\n await createModuleLoader()(file)\n );\n raw = parsed.success ? parsed.data : {};\n } catch {\n // A config that won't load is already reported by the config check;\n // its content still gets the zero-config scan.\n }\n }\n return contentGlobs(raw);\n};\n\nconst isPathKey = (segment: PropertyKey): segment is number | string =>\n typeof segment !== \"symbol\";\n\n// Zod's own wording for an unknown key; a removed field's hint replaces it.\nconst PLAIN_UNKNOWN_KEY = \"Unrecognized key\";\n\n/**\n * The removed fields among one page's front matter issues, each at its own\n * line. Only issues the page schema words as a removed-field hint count: a\n * key a project declares through `frontmatter.extend` is unknown to the bare\n * schema, and any other invalid value was already an error on Blume 1.\n */\nconst removedFieldFindings = (\n file: string,\n text: string,\n issues: readonly z.core.$ZodIssue[]\n): Diagnostic[] =>\n issues.flatMap((issue) => {\n if (\n issue.code !== \"unrecognized_keys\" ||\n issue.message.startsWith(PLAIN_UNKNOWN_KEY)\n ) {\n return [];\n }\n const path = issue.path.filter(isPathKey);\n const position =\n locateFrontmatterKey(text, [...path, ...issue.keys.slice(0, 1)]) ??\n locateFrontmatterKey(text, path);\n return [\n {\n code: \"BLUME_FRONTMATTER_INVALID\",\n column: position?.column,\n file,\n line: position?.line,\n message: issue.message,\n severity: \"error\",\n } satisfies Diagnostic,\n ];\n });\n\n/** The removed front matter fields in one page, or none it can't parse. */\nconst pageFindings = async (file: string): Promise<Diagnostic[]> => {\n const text = await readFile(file, \"utf-8\");\n let parsed: ReturnType<typeof pageMetaSchema.safeParse>;\n try {\n parsed = pageMetaSchema.safeParse(matter(text).data);\n } catch {\n // Unparseable front matter fails the build with its own diagnostic.\n return [];\n }\n return parsed.success\n ? []\n : removedFieldFindings(file, text, parsed.error.issues);\n};\n\n/**\n * A finding for each front matter field Blume 2 removed, across the project's\n * local content. A page with one fails validation and drops out of the build,\n * which the config and components checks alone would report as ready.\n */\nconst frontmatterFindings = async (root: string): Promise<Diagnostic[]> => {\n const roots = await configContentGlobs(root);\n const matches = await Promise.all(\n roots.map((globs) => {\n const cwd = resolve(root, globs.root);\n return existsSync(cwd)\n ? glob(globs.include, {\n absolute: true,\n cwd,\n ignore: [...globs.exclude, ...baselineScanIgnore()],\n onlyFiles: true,\n })\n : [];\n })\n );\n // Two sources can share a folder; each page is checked once.\n const files = [...new Set(matches.flat())].toSorted();\n const findings = await Promise.all(files.map(pageFindings));\n return findings.flat();\n};\n\n/**\n * Run one check, turning the {@link BlumeError} it throws into its findings:\n * each config issue or `components.ts` entry on its own, or the one diagnostic\n * any other check has.\n */\nconst findingsOf = async (\n check: () => Promise<void>\n): Promise<Diagnostic[]> => {\n try {\n await check();\n return [];\n } catch (error) {\n if (\n error instanceof ConfigValidationError ||\n error instanceof ComponentOverridesError\n ) {\n return error.issues;\n }\n if (error instanceof BlumeError) {\n return [error.diagnostic];\n }\n throw error;\n }\n};\n\n/**\n * Check a project against this version of Blume: its config through the\n * loader (every invalid field, each with its line and replacement), its\n * `components.ts` through the static override planner (each entry at its\n * line), its pages' front matter for removed fields, and its package.json\n * scripts for `blume build` flags that no longer exist. Returns the failures;\n * an empty list means the project is ready.\n */\nexport const collectUpgradeFindings = async (\n root: string\n): Promise<Diagnostic[]> => {\n const componentsFile = findComponentsFile(root);\n return [\n ...(await findingsOf(async () => {\n await loadConfig(root);\n })),\n ...(componentsFile\n ? await findingsOf(async () => {\n analyzeComponentOverrides(\n await readFile(componentsFile, \"utf-8\"),\n componentsFile\n );\n })\n : []),\n ...(await frontmatterFindings(root)),\n ...(await scriptFindings(root)),\n ];\n};\n\n/** A finding as plain text for the agent: where, what, and the fix. */\nconst plainFinding = (finding: Diagnostic, root: string): string => {\n const where = finding.file\n ? `${relative(root, finding.file)}${finding.line === undefined ? \"\" : `:${finding.line}`}`\n : \"blume.config.ts\";\n const fix = finding.suggestion ? `\\n Fix: ${finding.suggestion}` : \"\";\n return `- ${where} (${finding.code})\\n ${finding.message.replaceAll(\"\\n\", \"\\n \")}${fix}`;\n};\n\n/**\n * The handoff prompt: the findings inline (they're few, and each already\n * names its replacement), where the guide is, and the ground rules — change\n * the config's shape, never the site's behavior, and verify with the site's\n * own checks, run through the project's package runner (`npx`, `pnpm exec`),\n * since a local install puts no `blume` on PATH.\n */\nexport const upgradePrompt = (options: {\n findings: Diagnostic[];\n guidePath: string;\n root: string;\n runner: string;\n version: string;\n}): string =>\n `Upgrade this Blume project to Blume ${options.version}. \\`blume upgrade\\` has bumped the \\`blume\\` dependency in package.json where it could; what's left is the config.\n\nThe upgrade guide is at ${options.guidePath} (online at ${UPGRADE_GUIDE_URL}). It covers every change between Blume 1 and 2 with before-and-after examples: search, deployment, content sources, API references, analytics, and Ask AI become adapters imported from \\`blume/*\\` subpaths; the machine-readable settings move from \\`ai\\` to \\`agents\\`; and \\`components.ts\\` entries must be one of the static forms.\n\n\\`blume upgrade\\` found:\n\n${options.findings.map((finding) => plainFinding(finding, options.root)).join(\"\\n\\n\")}\n\nWork through every finding:\n1. Read the guide section for each change before editing.\n2. Rewrite the config to the Blume 2 form, adding the adapter imports it needs. Keep the site's behavior the same: the same content, routes, search backend, deployment target, analytics, and credentials (keep reading secrets from the same environment variables).\n3. The config loader reports every invalid field at once, but some changes only surface once earlier ones are fixed, so rerun \\`${options.runner} blume doctor\\` after each round of edits.\n4. Never delete content, or remove a setting only to silence an error; if something needs a human decision, leave it and say so in your summary.\n\nWhen \\`${options.runner} blume doctor\\` reports no errors, run \\`${options.runner} blume build\\` and fix anything it reports until it succeeds.`;\n"
5
+ "import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nimport { join, relative, resolve } from \"pathe\";\nimport { glob } from \"tinyglobby\";\nimport { z } from \"zod\";\n\nimport {\n analyzeComponentOverrides,\n ComponentOverridesError,\n} from \"../core/component-overrides.ts\";\nimport { ConfigValidationError, loadConfig } from \"../core/config.ts\";\nimport { BlumeError, locateFrontmatterKey } from \"../core/diagnostics.ts\";\nimport matter from \"../core/frontmatter.ts\";\nimport { createModuleLoader } from \"../core/load-module.ts\";\nimport { findComponentsFile, findConfigFile } from \"../core/project.ts\";\nimport { pageMetaSchema } from \"../core/schema.ts\";\nimport { baselineScanIgnore } from \"../core/sources/watch.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\nimport {\n DEFAULT_CONTENT_EXCLUDE,\n DEFAULT_CONTENT_INCLUDE,\n} from \"../sources/filesystem.ts\";\n\n/**\n * `blume upgrade`'s logic, kept out of the command module so it runs (and is\n * covered) in-process: bump the `blume` dependency to the running CLI's major,\n * then check the project against it — the config through the same loader\n * every command uses, which names each removed or renamed field and its\n * replacement, `components.ts` through the same static planner the build\n * runs, and each page's front matter for fields the schema removed. The\n * command prints the findings or hands them to a coding agent.\n */\n\n/** The upgrade guide's route on the Blume docs site. */\nexport const UPGRADE_GUIDE_URL = \"https://useblume.dev/docs/upgrading\";\n\n/** The upgrade guide's file inside the published package's bundled docs. */\nexport const UPGRADE_GUIDE_FILE = join(\"docs\", \"03-upgrading.mdx\");\n\n/** What `bumpBlumeDependency` did to `package.json`. */\nexport type DependencyBump =\n | {\n field: DependencyField;\n from: string;\n status: \"bumped\";\n to: string;\n }\n | { range: string; status: \"current\" }\n | { status: \"missing\" };\n\ntype DependencyField = \"dependencies\" | \"devDependencies\";\n\nconst DEPENDENCY_FIELDS: DependencyField[] = [\n \"dependencies\",\n \"devDependencies\",\n];\n\n/** The slice of `package.json` the bump reads and rewrites. */\ninterface PackageJson {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\n// Leading comparators and a `v` may precede the major (`^1.7.3`, `>=1 <2`,\n// `v1`); a protocol (`workspace:`, `file:`, `npm:`) or a tag (`latest`) names\n// no major at all, and those ranges are left to the user.\nconst RANGE_MAJOR = /^[\\s<=>^~v]*(?<major>\\d+)/u;\n\n/** The major version a dependency range pins, or null when it names none. */\nexport const rangeMajor = (range: string): number | null => {\n const major = RANGE_MAJOR.exec(range)?.groups?.major;\n return major === undefined ? null : Number(major);\n};\n\n// The file's own indentation (two spaces, four, or a tab), so a fallback\n// rewrite doesn't reformat a package.json the user keeps differently.\nconst INDENT = /^(?<indent>[ \\t]+)\"/mu;\n\nconst REGEXP_SPECIAL = /[$()*+.?[\\\\\\]^{|}]/gu;\nconst escapeRegExp = (value: string): string =>\n value.replaceAll(REGEXP_SPECIAL, String.raw`\\$&`);\n\n/**\n * `text` with the `blume` range under `field` replaced in place, so the file\n * keeps its own formatting, key order, and inline objects; null when the entry\n * isn't written the plain way (an escaped key or value).\n */\nconst replaceRange = (\n text: string,\n field: DependencyField,\n from: string,\n to: string\n): string | null => {\n const value = JSON.stringify(from);\n const entry = new RegExp(`\"blume\"\\\\s*:\\\\s*${escapeRegExp(value)}`, \"gu\");\n entry.lastIndex = Math.max(text.indexOf(JSON.stringify(field)), 0);\n const match = entry.exec(text);\n if (!match) {\n return null;\n }\n const end = match.index + match[0].length;\n return `${text.slice(0, end - value.length)}${JSON.stringify(to)}${text.slice(end)}`;\n};\n\n/**\n * Point `package.json`'s `blume` dependency at `^version` when it pins an\n * older major. A range already on this major, or one that names no version\n * (`workspace:*`, `latest`), is reported as current and left alone; a\n * project with no `package.json`, or none that lists `blume`, is `missing`.\n * Only the range changes: the rest of the file is kept byte for byte.\n */\nexport const bumpBlumeDependency = async (\n root: string,\n version: string\n): Promise<DependencyBump> => {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return { status: \"missing\" };\n }\n const text = await readFile(path, \"utf-8\");\n // SAFETY: package.json is a JSON object; only its dependency maps, which\n // map package names to range strings, are read.\n const pkg = JSON.parse(text) as PackageJson;\n const field = DEPENDENCY_FIELDS.find(\n (name) => pkg[name]?.blume !== undefined\n );\n const from = field ? pkg[field]?.blume : undefined;\n if (!(field && from)) {\n return { status: \"missing\" };\n }\n const current = rangeMajor(from);\n const target = rangeMajor(version);\n if (current === null || target === null || current >= target) {\n return { range: from, status: \"current\" };\n }\n const to = `^${version}`;\n const indent = INDENT.exec(text)?.groups?.indent ?? \" \";\n const updated = { ...pkg, [field]: { ...pkg[field], blume: to } };\n await writeFile(\n path,\n replaceRange(text, field, from, to) ??\n `${JSON.stringify(updated, null, indent)}\\n`\n );\n return { field, from, status: \"bumped\", to };\n};\n\n/**\n * Whether `root` is no Blume project at all: no config file and no `blume`\n * dependency, so the upgrade would only check the defaults and report the\n * folder ready. A zero-config project still lists `blume`.\n */\nexport const isOutsideBlumeProject = (\n root: string,\n bump: DependencyBump\n): boolean => bump.status === \"missing\" && findConfigFile(root) === null;\n\n// ---------------------------------------------------------------------------\n// Removed `blume build` flags\n// ---------------------------------------------------------------------------\n\n/** A `blume build` flag Blume 2 removed, bare or with an `=value`. */\nconst REMOVED_BUILD_FLAG = /^--(?<flag>adapter|base|output)(?:=|$)/u;\n\n/** The removed `blume build` flags among `args`, in order, each once. */\nexport const removedBuildFlags = (args: readonly string[]): string[] => [\n ...new Set(\n args.flatMap((arg) => {\n const flag = REMOVED_BUILD_FLAG.exec(arg)?.groups?.flag;\n return flag ? [flag] : [];\n })\n ),\n];\n\n/** The flags as the reader typed them: `--adapter, --output`. */\nexport const flagList = (flags: string[]): string =>\n flags.map((flag) => `--${flag}`).join(\", \");\n\n/** What replaces each removed flag: the `deployment` config. */\nexport const removedBuildFlagsAdvice = (flags: string[]): string => {\n const advice: string[] = [];\n if (flags.includes(\"adapter\") || flags.includes(\"output\")) {\n advice.push(\n 'name the host in blume.config.ts with `deployment: vercel()` (or `netlify()`, `cloudflare()`, `node()`) from \"blume/deploy\" — a host adapter builds for the server, and `output: \"static\"` keeps it static'\n );\n }\n if (flags.includes(\"base\")) {\n advice.push(\n 'set the subpath with `deployment: { base: \"/docs\" }`, or the host adapter\\'s `base` option'\n );\n }\n return `Drop ${flagList(flags)} and ${advice.join(\"; \")}.`;\n};\n\n// A command that runs the Blume CLI: the bare bin, a versioned package\n// (`blume@2`), or a path to it (`./node_modules/.bin/blume`).\nconst BLUME_BIN = /(?:^|[/\\\\])blume(?:@\\S+)?$/u;\nconst COMMAND_SEPARATOR = /&&|\\|\\||[;|]/u;\nconst WHITESPACE = /\\s+/u;\n\n/** The arguments each `blume build` in a script passes, flattened. */\nconst buildArgs = (script: string): string[] =>\n script.split(COMMAND_SEPARATOR).flatMap((command) => {\n const words = command.trim().split(WHITESPACE);\n const at = words.findIndex(\n (word, index) => BLUME_BIN.test(word) && words[index + 1] === \"build\"\n );\n return at === -1 ? [] : words.slice(at + 2);\n });\n\n/** The slice of package.json the script check reads. */\nconst scriptsSchema = z.looseObject({\n scripts: z.record(z.string(), z.string()).default({}),\n});\n\nconst lineOf = (text: string, index: number): number =>\n text.slice(0, index).split(\"\\n\").length;\n\n/**\n * A finding for each package.json script that still passes a removed flag to\n * `blume build` — it would otherwise build a static site without a word.\n */\nconst scriptFindings = async (root: string): Promise<Diagnostic[]> => {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return [];\n }\n const text = await readFile(path, \"utf-8\");\n const pkg = scriptsSchema.safeParse(JSON.parse(text));\n const scripts = pkg.success ? pkg.data.scripts : {};\n const scriptsAt = text.indexOf('\"scripts\"');\n return Object.entries(scripts).flatMap(([name, script]) => {\n const flags = removedBuildFlags(buildArgs(script));\n if (flags.length === 0) {\n return [];\n }\n const at = text.indexOf(JSON.stringify(name), scriptsAt);\n return [\n {\n code: \"BLUME_BUILD_FLAG_REMOVED\",\n file: path,\n line: at === -1 ? undefined : lineOf(text, at),\n message: `The \"${name}\" script passes ${flagList(flags)} to \\`blume build\\`, which Blume 2 removed.`,\n severity: \"error\",\n suggestion: removedBuildFlagsAdvice(flags),\n } satisfies Diagnostic,\n ];\n });\n};\n\n// ---------------------------------------------------------------------------\n// Removed front matter fields\n// ---------------------------------------------------------------------------\n\n/** Where a project's local content lives, as its config names it. */\ninterface ContentGlobs {\n exclude: string[];\n include: string[];\n root: string;\n}\n\nconst globFields = {\n exclude: z.array(z.string()).optional(),\n include: z.array(z.string()).optional(),\n root: z.string().optional(),\n};\n\n/**\n * A filesystem source in either form a config being upgraded may hold: the\n * `filesystem()` descriptor, or Blume 1's `{ type: \"filesystem\" }` object.\n */\nconst rawFilesystemSourceSchema = z.union([\n z\n .looseObject({\n kind: z.literal(\"filesystem\"),\n options: z.looseObject(globFields).default({}),\n })\n .transform((source) => source.options),\n z.looseObject({ type: z.literal(\"filesystem\"), ...globFields }),\n]);\n\n/** The `content` slice of a config as written, before validation. */\nconst rawContentSchema = z.looseObject({\n content: z\n .looseObject({ ...globFields, sources: z.array(z.unknown()).optional() })\n .optional(),\n});\n\n/**\n * The content roots to scan, read from the config as written rather than the\n * validated config: the upgrade runs on configs that don't validate yet. Its\n * filesystem sources when it lists any, else the `content.root` shorthand,\n * else the zero-config `docs` folder.\n */\nexport const contentGlobs = ({\n content,\n}: z.infer<typeof rawContentSchema>): ContentGlobs[] => {\n const sources = (content?.sources ?? []).flatMap((source) => {\n const filesystem = rawFilesystemSourceSchema.safeParse(source);\n return filesystem.success ? [filesystem.data] : [];\n });\n return (sources.length > 0 ? sources : [content ?? {}]).map((globs) => ({\n exclude: globs.exclude ?? DEFAULT_CONTENT_EXCLUDE,\n include: globs.include ?? DEFAULT_CONTENT_INCLUDE,\n root: globs.root ?? \"docs\",\n }));\n};\n\n/** The content roots the project's config names, loaded as written. */\nconst configContentGlobs = async (root: string): Promise<ContentGlobs[]> => {\n const file = findConfigFile(root);\n let raw: z.infer<typeof rawContentSchema> = {};\n if (file) {\n try {\n const parsed = rawContentSchema.safeParse(\n await createModuleLoader()(file)\n );\n raw = parsed.success ? parsed.data : {};\n } catch {\n // A config that won't load is already reported by the config check;\n // its content still gets the zero-config scan.\n }\n }\n return contentGlobs(raw);\n};\n\nconst isPathKey = (segment: PropertyKey): segment is number | string =>\n typeof segment !== \"symbol\";\n\n// Zod's own wording for an unknown key; a removed field's hint replaces it.\nconst PLAIN_UNKNOWN_KEY = \"Unrecognized key\";\n\n/**\n * The removed fields among one page's front matter issues, each at its own\n * line. Only issues the page schema words as a removed-field hint count: a\n * key a project declares through `frontmatter.extend` is unknown to the bare\n * schema, and any other invalid value was already an error on Blume 1.\n */\nconst removedFieldFindings = (\n file: string,\n text: string,\n issues: readonly z.core.$ZodIssue[]\n): Diagnostic[] =>\n issues.flatMap((issue) => {\n if (\n issue.code !== \"unrecognized_keys\" ||\n issue.message.startsWith(PLAIN_UNKNOWN_KEY)\n ) {\n return [];\n }\n const path = issue.path.filter(isPathKey);\n const position =\n locateFrontmatterKey(text, [...path, ...issue.keys.slice(0, 1)]) ??\n locateFrontmatterKey(text, path);\n return [\n {\n code: \"BLUME_FRONTMATTER_INVALID\",\n column: position?.column,\n file,\n line: position?.line,\n message: issue.message,\n severity: \"error\",\n } satisfies Diagnostic,\n ];\n });\n\n/** The removed front matter fields in one page, or none it can't parse. */\nconst pageFindings = async (file: string): Promise<Diagnostic[]> => {\n const text = await readFile(file, \"utf-8\");\n let parsed: ReturnType<typeof pageMetaSchema.safeParse>;\n try {\n parsed = pageMetaSchema.safeParse(matter(text).data);\n } catch {\n // Unparseable front matter fails the build with its own diagnostic.\n return [];\n }\n return parsed.success\n ? []\n : removedFieldFindings(file, text, parsed.error.issues);\n};\n\n/**\n * A finding for each front matter field Blume 2 removed, across the project's\n * local content. A page with one fails validation and drops out of the build,\n * which the config and components checks alone would report as ready.\n */\nconst frontmatterFindings = async (root: string): Promise<Diagnostic[]> => {\n const roots = await configContentGlobs(root);\n const matches = await Promise.all(\n roots.map((globs) => {\n const cwd = resolve(root, globs.root);\n return existsSync(cwd)\n ? glob(globs.include, {\n absolute: true,\n cwd,\n ignore: [...globs.exclude, ...baselineScanIgnore()],\n onlyFiles: true,\n })\n : [];\n })\n );\n // Two sources can share a folder; each page is checked once.\n const files = [...new Set(matches.flat())].toSorted();\n const findings = await Promise.all(files.map(pageFindings));\n return findings.flat();\n};\n\n/**\n * Run one check, turning the {@link BlumeError} it throws into its findings:\n * each config issue or `components.ts` entry on its own, or the one diagnostic\n * any other check has.\n */\nconst findingsOf = async (\n check: () => Promise<void>\n): Promise<Diagnostic[]> => {\n try {\n await check();\n return [];\n } catch (error) {\n if (\n error instanceof ConfigValidationError ||\n error instanceof ComponentOverridesError\n ) {\n return error.issues;\n }\n if (error instanceof BlumeError) {\n return [error.diagnostic];\n }\n throw error;\n }\n};\n\n/**\n * Check a project against this version of Blume: its config through the\n * loader (every invalid field, each with its line and replacement), its\n * `components.ts` through the static override planner (each entry at its\n * line), its pages' front matter for removed fields, and its package.json\n * scripts for `blume build` flags that no longer exist. Returns the failures;\n * an empty list means the project is ready.\n */\nexport const collectUpgradeFindings = async (\n root: string\n): Promise<Diagnostic[]> => {\n const componentsFile = findComponentsFile(root);\n return [\n ...(await findingsOf(async () => {\n await loadConfig(root);\n })),\n ...(componentsFile\n ? await findingsOf(async () => {\n analyzeComponentOverrides(\n await readFile(componentsFile, \"utf-8\"),\n componentsFile\n );\n })\n : []),\n ...(await frontmatterFindings(root)),\n ...(await scriptFindings(root)),\n ];\n};\n\n/** A finding as plain text for the agent: where, what, and the fix. */\nconst plainFinding = (finding: Diagnostic, root: string): string => {\n const where = finding.file\n ? `${relative(root, finding.file)}${finding.line === undefined ? \"\" : `:${finding.line}`}`\n : \"blume.config.ts\";\n const fix = finding.suggestion ? `\\n Fix: ${finding.suggestion}` : \"\";\n return `- ${where} (${finding.code})\\n ${finding.message.replaceAll(\"\\n\", \"\\n \")}${fix}`;\n};\n\n/**\n * The handoff prompt: the findings inline (they're few, and each already\n * names its replacement), where the guide is, and the ground rules — change\n * the config's shape, never the site's behavior, and verify with the site's\n * own checks, run through the project's package runner (`npx`, `pnpm exec`),\n * since a local install puts no `blume` on PATH.\n */\nexport const upgradePrompt = (options: {\n findings: Diagnostic[];\n guidePath: string;\n root: string;\n runner: string;\n version: string;\n}): string =>\n `Upgrade this Blume project to Blume ${options.version}. \\`blume upgrade\\` has bumped the \\`blume\\` dependency in package.json where it could; what's left is the config.\n\nThe upgrade guide is at ${options.guidePath} (online at ${UPGRADE_GUIDE_URL}). It covers every change between Blume 1 and 2 with before-and-after examples: search, deployment, content sources, API references, analytics, and the assistant's model provider become adapters imported from \\`blume/*\\` subpaths; the machine-readable settings move from \\`ai\\` to \\`agents\\`; Ask AI is renamed the assistant, so \\`ai.ask\\` becomes \\`ai.assistant\\`; and \\`components.ts\\` entries must be one of the static forms.\n\n\\`blume upgrade\\` found:\n\n${options.findings.map((finding) => plainFinding(finding, options.root)).join(\"\\n\\n\")}\n\nWork through every finding:\n1. Read the guide section for each change before editing.\n2. Rewrite the config to the Blume 2 form, adding the adapter imports it needs. Keep the site's behavior the same: the same content, routes, search backend, deployment target, analytics, and credentials (keep reading secrets from the same environment variables).\n3. The config loader reports every invalid field at once, but some changes only surface once earlier ones are fixed, so rerun \\`${options.runner} blume doctor\\` after each round of edits.\n4. Never delete content, or remove a setting only to silence an error; if something needs a human decision, leave it and say so in your summary.\n\nWhen \\`${options.runner} blume doctor\\` reports no errors, run \\`${options.runner} blume build\\` and fix anything it reports until it succeeds.`;\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "BBD151C21AC6C49164756E2164756E21",
8
+ "debugId": "9BE967FC7391289164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,28 +2,28 @@
2
2
  import {
3
3
  ensureGitignore
4
4
  } from "./chunk-yzhm0j9q.js";
5
- import"./chunk-xaz13gwg.js";
5
+ import"./chunk-qkqwkpte.js";
6
6
  import {
7
7
  commandMeta,
8
8
  logger
9
9
  } from "./index.js";
10
10
  import {
11
11
  refuseIfDevRunning
12
- } from "./chunk-f7t03s3g.js";
12
+ } from "./chunk-27g6wdth.js";
13
13
  import"./chunk-jts8mvcz.js";
14
- import"./chunk-z1f5arsg.js";
15
- import"./chunk-a9kptbw5.js";
16
- import"./chunk-zg2gtj10.js";
17
- import"./chunk-f2972sbt.js";
14
+ import"./chunk-wgm7m9qk.js";
15
+ import"./chunk-6crbhc3x.js";
16
+ import"./chunk-fs23ddbb.js";
17
+ import"./chunk-vtk4a6dg.js";
18
18
  import"./chunk-jq5n4avg.js";
19
- import"./chunk-mnqj32sj.js";
20
- import"./chunk-88cpgt6h.js";
21
- import"./chunk-bnbmcwfb.js";
22
- import"./chunk-nk3ts2xk.js";
19
+ import"./chunk-2hn4b8z7.js";
20
+ import"./chunk-zxcczpyx.js";
21
+ import"./chunk-wm7js3j9.js";
22
+ import"./chunk-82bbrxdn.js";
23
23
  import {
24
24
  prepareProject
25
- } from "./chunk-41za066z.js";
26
- import"./chunk-2q1dwty4.js";
25
+ } from "./chunk-zxh4d9vy.js";
26
+ import"./chunk-ah61y8py.js";
27
27
 
28
28
  // src/cli/commands/check.ts
29
29
  import { existsSync } from "node:fs";
@@ -85,4 +85,4 @@ export {
85
85
  };
86
86
 
87
87
  //# debugId=DC0C35E4A8FB3C3E64756E2164756E21
88
- //# sourceMappingURL=chunk-1w8dp3qb.js.map
88
+ //# sourceMappingURL=chunk-epjnccmv.js.map
@@ -8,27 +8,27 @@ import {
8
8
  import {
9
9
  commandsFor,
10
10
  detectProjectPackageManager
11
- } from "./chunk-xaz13gwg.js";
12
- import"./chunk-a9kptbw5.js";
11
+ } from "./chunk-qkqwkpte.js";
12
+ import"./chunk-6crbhc3x.js";
13
13
  import"./chunk-jts8mvcz.js";
14
- import"./chunk-mnqj32sj.js";
15
- import"./chunk-bnbmcwfb.js";
16
- import"./chunk-z1f5arsg.js";
17
- import"./chunk-zg2gtj10.js";
18
- import"./chunk-f2972sbt.js";
14
+ import"./chunk-2hn4b8z7.js";
15
+ import"./chunk-wm7js3j9.js";
16
+ import"./chunk-wgm7m9qk.js";
17
+ import"./chunk-fs23ddbb.js";
18
+ import"./chunk-vtk4a6dg.js";
19
19
  import"./chunk-jq5n4avg.js";
20
- import"./chunk-88cpgt6h.js";
21
- import"./chunk-nk3ts2xk.js";
20
+ import"./chunk-zxcczpyx.js";
21
+ import"./chunk-82bbrxdn.js";
22
22
  import {
23
23
  eject
24
- } from "./chunk-mwt1k8n7.js";
24
+ } from "./chunk-6hsn950k.js";
25
25
  import {
26
26
  refuseIfDevRunning
27
- } from "./chunk-f7t03s3g.js";
27
+ } from "./chunk-27g6wdth.js";
28
28
  import {
29
29
  updatePackageScripts,
30
30
  isEjectedProject
31
- } from "./chunk-d1tadaw7.js";
31
+ } from "./chunk-yt5n7ppj.js";
32
32
 
33
33
  // src/cli/commands/eject.ts
34
34
  import { defineCommand } from "citty";
@@ -94,4 +94,4 @@ export {
94
94
  };
95
95
 
96
96
  //# debugId=7CEB23581B9B638D64756E2164756E21
97
- //# sourceMappingURL=chunk-ernrthtr.js.map
97
+ //# sourceMappingURL=chunk-f2z5v128.js.map