blume 1.7.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +19 -0
- package/CHANGELOG.md +245 -0
- package/README.md +34 -21
- package/dist/cli/{chunk-vacwm2hv.js → chunk-27g6wdth.js} +2 -2
- package/dist/cli/{chunk-ps4m1xh4.js → chunk-2hn4b8z7.js} +513 -550
- package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
- package/dist/cli/chunk-5shv93fd.js +39 -0
- package/dist/cli/chunk-5shv93fd.js.map +10 -0
- package/dist/cli/chunk-6crbhc3x.js +361 -0
- package/dist/cli/chunk-6crbhc3x.js.map +14 -0
- package/dist/cli/{chunk-8cjtbafj.js → chunk-6hsn950k.js} +109 -383
- package/dist/cli/chunk-6hsn950k.js.map +10 -0
- package/dist/cli/chunk-6vm74dry.js +148 -0
- package/dist/cli/chunk-6vm74dry.js.map +10 -0
- package/dist/cli/{chunk-yg63d42r.js → chunk-79jhk4py.js} +87 -58
- package/dist/cli/chunk-79jhk4py.js.map +35 -0
- package/dist/cli/chunk-82bbrxdn.js +51 -0
- package/dist/cli/chunk-82bbrxdn.js.map +10 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-ah61y8py.js +75 -0
- package/dist/cli/chunk-ah61y8py.js.map +11 -0
- package/dist/cli/{chunk-dwgcp5sm.js → chunk-ce574jw2.js} +1 -1
- package/dist/cli/chunk-ch6g3ar0.js +102 -0
- package/dist/cli/chunk-ch6g3ar0.js.map +10 -0
- package/dist/cli/chunk-dh8cwk36.js +279 -0
- package/dist/cli/chunk-dh8cwk36.js.map +10 -0
- package/dist/cli/{chunk-rqy0s5wh.js → chunk-epjnccmv.js} +17 -16
- package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-epjnccmv.js.map} +3 -3
- package/dist/cli/chunk-f2z5v128.js +97 -0
- package/dist/cli/chunk-f2z5v128.js.map +10 -0
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-1jefwnfs.js → chunk-fs23ddbb.js} +1076 -2592
- package/dist/cli/chunk-fs23ddbb.js.map +35 -0
- package/dist/cli/{chunk-e7f42gdj.js → chunk-fxypxtvm.js} +2 -2
- package/dist/cli/{chunk-bvwwhd84.js → chunk-fz5wtpmh.js} +15 -15
- package/dist/cli/{chunk-bvwwhd84.js.map → chunk-fz5wtpmh.js.map} +1 -1
- package/dist/cli/chunk-hdpx1tax.js +91 -0
- package/dist/cli/chunk-hdpx1tax.js.map +10 -0
- package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ahnw3kxw.js → chunk-jwyddg7y.js} +27 -22
- package/dist/cli/chunk-jwyddg7y.js.map +15 -0
- package/dist/cli/{chunk-cjtn640a.js → chunk-kdp5q7ke.js} +43 -20
- package/dist/cli/chunk-kdp5q7ke.js.map +10 -0
- package/dist/cli/{chunk-5g0w1e2c.js → chunk-kpf8rrjc.js} +28 -16
- package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-kpf8rrjc.js.map} +4 -4
- package/dist/cli/chunk-m3vmjgmq.js +133 -0
- package/dist/cli/chunk-m3vmjgmq.js.map +10 -0
- package/dist/cli/{chunk-b27xqwn9.js → chunk-mb2919y2.js} +9 -5
- package/dist/cli/chunk-mb2919y2.js.map +10 -0
- package/dist/cli/{chunk-5qk08vmp.js → chunk-q5163e60.js} +133 -54
- package/dist/cli/chunk-q5163e60.js.map +11 -0
- package/dist/cli/chunk-qkqwkpte.js +12437 -0
- package/dist/cli/chunk-qkqwkpte.js.map +182 -0
- package/dist/cli/{chunk-4x36ddpw.js → chunk-qs4q5p4e.js} +81 -87
- package/dist/cli/chunk-qs4q5p4e.js.map +10 -0
- package/dist/cli/{chunk-0xjyb285.js → chunk-qwsrynx5.js} +15 -5
- package/dist/cli/{chunk-0xjyb285.js.map → chunk-qwsrynx5.js.map} +4 -4
- package/dist/cli/chunk-s1p84fyh.js +261 -0
- package/dist/cli/chunk-s1p84fyh.js.map +10 -0
- package/dist/cli/chunk-s6jhgk0q.js +176 -0
- package/dist/cli/chunk-s6jhgk0q.js.map +11 -0
- package/dist/cli/chunk-vtk4a6dg.js +374 -0
- package/dist/cli/chunk-vtk4a6dg.js.map +10 -0
- package/dist/cli/{chunk-k79xp7av.js → chunk-wgm7m9qk.js} +230 -700
- package/dist/cli/chunk-wgm7m9qk.js.map +36 -0
- package/dist/cli/chunk-wm7js3j9.js +145 -0
- package/dist/cli/chunk-wm7js3j9.js.map +11 -0
- package/dist/cli/chunk-yt5n7ppj.js +79 -0
- package/dist/cli/chunk-yt5n7ppj.js.map +10 -0
- package/dist/cli/{chunk-3r45185y.js → chunk-yw7dm696.js} +9 -11
- package/dist/cli/{chunk-3r45185y.js.map → chunk-yw7dm696.js.map} +3 -3
- package/dist/cli/{chunk-nn13znc2.js → chunk-zxcczpyx.js} +1 -1
- package/dist/cli/chunk-zxh4d9vy.js +122 -0
- package/dist/cli/chunk-zxh4d9vy.js.map +11 -0
- package/dist/cli/index.js +214 -57
- package/dist/cli/index.js.map +8 -7
- package/dist/types/ai/agent-readability.d.ts +52 -0
- package/dist/types/ai/ai-catalog.d.ts +42 -0
- package/dist/types/ai/api/paths.d.ts +17 -0
- package/dist/types/ai/api-catalog.d.ts +18 -0
- package/dist/types/ai/ask-context.d.ts +7 -7
- package/dist/types/ai/ask.d.ts +368 -0
- package/dist/types/ai/changelog-markdown.d.ts +2 -0
- package/dist/types/ai/component-markdown.d.ts +2 -2
- package/dist/types/ai/index.d.ts +24 -0
- package/dist/types/ai/link-headers.d.ts +24 -0
- package/dist/types/ai/llms.d.ts +25 -0
- package/dist/types/ai/markdown.d.ts +45 -0
- package/dist/types/ai/mcp/discovery.d.ts +68 -0
- package/dist/types/ai/mcp/tools.d.ts +16 -0
- package/dist/types/ai/openapi-components.d.ts +43 -0
- package/dist/types/ai/relative-links.d.ts +26 -0
- package/dist/types/ai/serializers.d.ts +15 -0
- package/dist/types/ai/skills.d.ts +42 -0
- package/dist/types/ai/tar.d.ts +25 -0
- package/dist/types/ai/visibility.d.ts +17 -0
- package/dist/types/ai/web-bot-auth.d.ts +16 -0
- package/dist/types/analytics/adobe.d.ts +35 -0
- package/dist/types/analytics/amplitude.d.ts +50 -0
- package/dist/types/analytics/clarity.d.ts +31 -0
- package/dist/types/analytics/clearbit.d.ts +29 -0
- package/dist/types/analytics/cloudflare.d.ts +41 -0
- package/dist/types/analytics/fathom.d.ts +41 -0
- package/dist/types/analytics/google-analytics.d.ts +44 -0
- package/dist/types/analytics/google-tag-manager.d.ts +40 -0
- package/dist/types/analytics/head.d.ts +30 -0
- package/dist/types/analytics/heap.d.ts +40 -0
- package/dist/types/analytics/hightouch.d.ts +44 -0
- package/dist/types/analytics/hotjar.d.ts +33 -0
- package/dist/types/analytics/index.d.ts +61 -0
- package/dist/types/analytics/inline.d.ts +17 -0
- package/dist/types/analytics/logrocket.d.ts +44 -0
- package/dist/types/analytics/mixpanel.d.ts +67 -0
- package/dist/types/analytics/pirsch.d.ts +42 -0
- package/dist/types/analytics/plausible.d.ts +56 -0
- package/dist/types/analytics/posthog.d.ts +45 -0
- package/dist/types/analytics/schema.d.ts +320 -0
- package/dist/types/analytics/script.d.ts +46 -0
- package/dist/types/analytics/segment.d.ts +50 -0
- package/dist/types/analytics/vercel.d.ts +48 -0
- package/dist/types/astro/integration.d.ts +76 -0
- package/dist/types/astro/markdown-negotiation.d.ts +23 -0
- package/dist/types/astro/module-types.d.ts +14 -0
- package/dist/types/astro/pages.d.ts +44 -0
- package/dist/types/cli/env.d.ts +12 -0
- package/dist/types/cli/init/scaffold.d.ts +154 -0
- package/dist/types/components/layout/nav-utils.d.ts +11 -0
- package/dist/types/core/adapter.d.ts +47 -0
- package/dist/types/core/api-name.d.ts +7 -0
- package/dist/types/core/changelog-index.d.ts +13 -0
- package/dist/types/core/config-input.d.ts +197 -526
- package/dist/types/core/config.d.ts +61 -35
- package/dist/types/core/content-assets.d.ts +76 -0
- package/dist/types/core/custom-pages.d.ts +33 -0
- package/dist/types/core/data.d.ts +30 -15
- package/dist/types/core/define-components.d.ts +12 -9
- package/dist/types/core/deployment-env.d.ts +6 -11
- package/dist/types/core/frontmatter.d.ts +10 -0
- package/dist/types/core/graph.d.ts +18 -0
- package/dist/types/core/heading-markers.d.ts +54 -0
- package/dist/types/core/i18n-ui.d.ts +12 -10
- package/dist/types/core/i18n.d.ts +87 -0
- package/dist/types/core/includes.d.ts +138 -0
- package/dist/types/core/last-modified.d.ts +47 -0
- package/dist/types/core/links.d.ts +95 -0
- package/dist/types/core/locale-links.d.ts +60 -0
- package/dist/types/core/manifest.d.ts +17 -0
- package/dist/types/core/meta.d.ts +38 -0
- package/dist/types/core/nav-diagnostics.d.ts +26 -0
- package/dist/types/core/navigation.d.ts +6 -0
- package/dist/types/core/node-require.d.ts +19 -0
- package/dist/types/core/package-json.d.ts +13 -0
- package/dist/types/core/probe.d.ts +42 -0
- package/dist/types/core/project-graph.d.ts +51 -0
- package/dist/types/core/project.d.ts +2 -0
- package/dist/types/core/safe-href.d.ts +2 -0
- package/dist/types/core/safe-links.d.ts +26 -0
- package/dist/types/core/schema.d.ts +2284 -454
- package/dist/types/core/site-url.d.ts +16 -0
- package/dist/types/core/sources/assets.d.ts +36 -0
- package/dist/types/core/sources/cache.d.ts +37 -0
- package/dist/types/core/sources/collection.d.ts +28 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
- package/dist/types/core/sources/contentful.d.ts +40 -0
- package/dist/types/core/sources/filesystem.d.ts +24 -0
- package/dist/types/core/sources/github-releases.d.ts +31 -0
- package/dist/types/core/sources/json.d.ts +30 -0
- package/dist/types/core/sources/lexical.d.ts +19 -0
- package/dist/types/core/sources/lower.d.ts +75 -0
- package/dist/types/core/sources/mdx-remote.d.ts +28 -0
- package/dist/types/core/sources/normalize.d.ts +147 -0
- package/dist/types/core/sources/notion.d.ts +131 -0
- package/dist/types/core/sources/obsidian.d.ts +46 -0
- package/dist/types/core/sources/payload.d.ts +39 -0
- package/dist/types/core/sources/portable-text.d.ts +42 -0
- package/dist/types/core/sources/read.d.ts +23 -0
- package/dist/types/core/sources/remote.d.ts +74 -0
- package/dist/types/core/sources/resolve.d.ts +19 -0
- package/dist/types/core/sources/sanity.d.ts +43 -0
- package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
- package/dist/types/core/sources/strapi.d.ts +33 -0
- package/dist/types/core/sources/types.d.ts +7 -0
- package/dist/types/core/sources/watch.d.ts +45 -0
- package/dist/types/core/text-width.d.ts +11 -0
- package/dist/types/core/types.d.ts +15 -1
- package/dist/types/core/unrecognized-keys.d.ts +7 -0
- package/dist/types/core/versions.d.ts +72 -0
- package/dist/types/core/yaml.d.ts +9 -0
- package/dist/types/deploy/adapter-output.d.ts +45 -0
- package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
- package/dist/types/deploy/adapters/index.d.ts +29 -0
- package/dist/types/deploy/adapters/netlify.d.ts +37 -0
- package/dist/types/deploy/adapters/node.d.ts +37 -0
- package/dist/types/deploy/adapters/registry.d.ts +133 -0
- package/dist/types/deploy/adapters/types.d.ts +71 -0
- package/dist/types/deploy/adapters/vercel.d.ts +38 -0
- package/dist/types/deploy/artifacts.d.ts +65 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
- package/dist/types/deploy/function-bundle.d.ts +80 -0
- package/dist/types/deploy/headers.d.ts +50 -0
- package/dist/types/deploy/node-headers.d.ts +42 -0
- package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
- package/dist/types/deploy/platforms/index.d.ts +18 -0
- package/dist/types/deploy/platforms/netlify.d.ts +13 -0
- package/dist/types/deploy/platforms/node.d.ts +11 -0
- package/dist/types/deploy/platforms/paths.d.ts +27 -0
- package/dist/types/deploy/platforms/static.d.ts +10 -0
- package/dist/types/deploy/platforms/types.d.ts +104 -0
- package/dist/types/deploy/platforms/vercel.d.ts +32 -0
- package/dist/types/deploy/redirects.d.ts +53 -0
- package/dist/types/deploy/robots.d.ts +8 -0
- package/dist/types/deploy/rss.d.ts +31 -0
- package/dist/types/deploy/sitemap.d.ts +21 -0
- package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
- package/dist/types/markdown/code-title.d.ts +32 -0
- package/dist/types/markdown/fence-meta.d.ts +23 -0
- package/dist/types/markdown/themes.d.ts +3 -3
- package/dist/types/openapi/asyncapi.d.ts +129 -0
- package/dist/types/openapi/graphql-build.d.ts +8 -0
- package/dist/types/openapi/graphql.d.ts +122 -0
- package/dist/types/openapi/model.d.ts +158 -0
- package/dist/types/openapi/parse.d.ts +57 -0
- package/dist/types/openapi/references.d.ts +37 -25
- package/dist/types/openapi/render-mdx.d.ts +33 -0
- package/dist/types/openapi/sentence.d.ts +7 -0
- package/dist/types/openapi/signature.d.ts +10 -0
- package/dist/types/openapi/source.d.ts +22 -0
- package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
- package/dist/types/reference/asyncapi.d.ts +166 -0
- package/dist/types/reference/graphql.d.ts +181 -0
- package/dist/types/reference/index.d.ts +32 -0
- package/dist/types/reference/openapi.d.ts +165 -0
- package/dist/types/reference/options.d.ts +157 -0
- package/dist/types/reference/scalar.d.ts +136 -0
- package/dist/types/reference/schema.d.ts +630 -0
- package/dist/types/search/adapters/algolia.d.ts +32 -0
- package/dist/types/search/adapters/flexsearch.d.ts +12 -0
- package/dist/types/search/adapters/index.d.ts +31 -0
- package/dist/types/search/adapters/mixedbread.d.ts +22 -0
- package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
- package/dist/types/search/adapters/orama.d.ts +13 -0
- package/dist/types/search/adapters/pagefind.d.ts +12 -0
- package/dist/types/search/adapters/registry.d.ts +228 -0
- package/dist/types/search/adapters/types.d.ts +34 -0
- package/dist/types/search/adapters/typesense.d.ts +42 -0
- package/dist/types/search/build.d.ts +23 -0
- package/dist/types/search/documents.d.ts +90 -0
- package/dist/types/search/facets.d.ts +3 -0
- package/dist/types/search/orama-index.d.ts +1 -1
- package/dist/types/search/sync/algolia.d.ts +14 -0
- package/dist/types/search/sync/index.d.ts +14 -0
- package/dist/types/search/sync/orama-cloud.d.ts +10 -0
- package/dist/types/search/sync/typesense.d.ts +14 -0
- package/dist/types/sources/contentful.d.ts +68 -0
- package/dist/types/sources/custom.d.ts +20 -0
- package/dist/types/sources/filesystem.d.ts +42 -0
- package/dist/types/sources/github-releases.d.ts +46 -0
- package/dist/types/sources/index.d.ts +48 -0
- package/dist/types/sources/mdx-remote.d.ts +63 -0
- package/dist/types/sources/notion.d.ts +65 -0
- package/dist/types/sources/obsidian.d.ts +34 -0
- package/dist/types/sources/payload.d.ts +68 -0
- package/dist/types/sources/registry.d.ts +1414 -0
- package/dist/types/sources/sanity.d.ts +69 -0
- package/dist/types/sources/shared.d.ts +46 -0
- package/dist/types/sources/strapi.d.ts +66 -0
- package/dist/types/theme/icon-kind.d.ts +11 -0
- package/dist/types/theme/icons.d.ts +20 -0
- package/docs/01-quickstart.mdx +18 -18
- package/docs/02-deployment.mdx +52 -28
- package/docs/03-upgrading.mdx +364 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +5 -5
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +22 -10
- package/docs/advanced/meta.ts +1 -8
- package/docs/advanced/skills.mdx +8 -0
- package/docs/cli/audit.mdx +646 -0
- package/docs/cli/doctor.mdx +29 -0
- package/docs/{reference/eval.mdx → cli/evals.mdx} +12 -11
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +9 -9
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/assistant.mdx +357 -0
- package/docs/configuration/customization.mdx +16 -10
- package/docs/configuration/index.mdx +50 -31
- package/docs/configuration/meta.ts +1 -1
- package/docs/configuration/search.mdx +76 -55
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +35 -1
- package/docs/content/i18n.mdx +9 -7
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +11 -6
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +9 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +16 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +12 -12
- package/docs/discoverability/index.mdx +4 -4
- package/docs/discoverability/json-api.mdx +4 -4
- package/docs/discoverability/llms-txt.mdx +6 -6
- package/docs/discoverability/markdown.mdx +4 -4
- package/docs/discoverability/mcp.mdx +11 -11
- package/docs/discoverability/sitemap-and-robots.mdx +3 -3
- package/docs/index.mdx +4 -4
- package/docs/references/asyncapi.mdx +59 -0
- package/docs/{advanced → references}/graphql.mdx +45 -32
- package/docs/{reference → references}/meta.ts +2 -2
- package/docs/references/openapi.mdx +171 -0
- package/docs/references/scalar.mdx +64 -0
- package/package.json +42 -8
- package/skills/blume/SKILL.md +23 -10
- package/skills/blume-migrate/SKILL.md +22 -21
- package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
- package/skills/blume-migrate/references/docusaurus.md +5 -4
- package/skills/blume-migrate/references/fumadocs.md +4 -4
- package/skills/blume-migrate/references/mintlify.md +23 -8
- package/skills/blume-migrate/references/monorepo.md +6 -6
- package/skills/blume-migrate/references/starlight.md +4 -4
- package/src/ai/agent-readability.ts +25 -26
- package/src/ai/ai-catalog.ts +50 -32
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api/paths.ts +1 -1
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-context.ts +7 -7
- package/src/ai/ask-data.ts +3 -3
- package/src/ai/ask.ts +637 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/cors.ts +3 -3
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +7 -6
- package/src/ai/llms.ts +20 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/openapi-components.ts +5 -2
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +3 -3
- package/src/ai/skills.ts +1 -1
- package/src/ai/visibility.ts +1 -1
- package/src/ai/web-bot-auth.ts +2 -2
- package/src/analytics/adobe.ts +46 -0
- package/src/analytics/amplitude.ts +79 -0
- package/src/analytics/clarity.ts +46 -0
- package/src/analytics/clearbit.ts +47 -0
- package/src/analytics/cloudflare.ts +67 -0
- package/src/analytics/fathom.ts +64 -0
- package/src/analytics/google-analytics.ts +84 -0
- package/src/analytics/google-tag-manager.ts +61 -0
- package/src/analytics/head.ts +130 -0
- package/src/analytics/heap.ts +65 -0
- package/src/analytics/hightouch.ts +77 -0
- package/src/analytics/hotjar.ts +47 -0
- package/src/analytics/index.ts +71 -0
- package/src/analytics/inline.ts +21 -0
- package/src/analytics/logrocket.ts +71 -0
- package/src/analytics/mixpanel.ts +92 -0
- package/src/analytics/pirsch.ts +66 -0
- package/src/analytics/plausible.ts +83 -0
- package/src/analytics/posthog.ts +78 -0
- package/src/analytics/schema.ts +60 -0
- package/src/analytics/script.ts +60 -0
- package/src/analytics/segment.ts +85 -0
- package/src/analytics/vercel.ts +50 -0
- package/src/astro/adapter-root.ts +7 -9
- package/src/astro/component-slots.ts +131 -91
- package/src/astro/generate.ts +129 -361
- package/src/astro/integration.ts +2 -6
- package/src/astro/module-types.ts +1 -1
- package/src/astro/pages.ts +13 -101
- package/src/astro/render-deps.ts +379 -0
- package/src/astro/runtime-deps.ts +201 -0
- package/src/astro/templates.ts +575 -562
- package/src/audit/agent.ts +24 -0
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +2 -2
- package/src/audit/checks/dns-aid.ts +1 -1
- package/src/audit/checks/duplicates.ts +3 -1
- package/src/audit/checks/i18n.ts +1 -1
- package/src/audit/checks/indexability.ts +7 -7
- package/src/audit/checks/links.ts +2 -2
- package/src/audit/checks/llms.ts +6 -6
- package/src/audit/checks/network.ts +3 -3
- package/src/audit/checks/og-image.ts +2 -2
- package/src/audit/checks/robots.ts +1 -1
- package/src/audit/checks/sitemap.ts +2 -2
- package/src/audit/checks/social.ts +1 -1
- package/src/audit/run.ts +4 -3
- package/src/audit/terms.ts +31 -0
- package/src/audit/url.ts +13 -13
- package/src/blume-modules.d.ts +2 -2
- package/src/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +40 -21
- package/src/cli/commands/build.ts +71 -316
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +92 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +5 -5
- package/src/cli/commands/init.ts +161 -41
- package/src/cli/commands/migrate.ts +121 -0
- package/src/cli/commands/preview.ts +7 -1
- package/src/cli/commands/translate.ts +5 -5
- package/src/cli/commands/upgrade.ts +141 -0
- package/src/cli/commands/version.ts +57 -44
- package/src/cli/eject-scripts.ts +121 -6
- package/src/cli/index.ts +11 -1
- package/src/cli/init/install.ts +70 -0
- package/src/cli/init/questions.ts +7 -0
- package/src/cli/init/scaffold.ts +459 -75
- package/src/cli/lazy-command.ts +37 -1
- package/src/cli/prepare.ts +40 -6
- package/src/cli/required-secrets.ts +39 -12
- package/src/cli/unknown-flags.ts +266 -0
- package/src/cli/yarn-pnp.ts +52 -0
- package/src/components/content/AccordionItem.astro +7 -1
- package/src/components/content/Card.astro +4 -3
- package/src/components/content/ColorItem.astro +22 -4
- package/src/components/content/GithubInfo.astro +2 -2
- package/src/components/content/Prompt.astro +25 -25
- package/src/components/content/Tabs.astro +3 -1
- package/src/components/content/Tile.astro +2 -3
- package/src/components/content/Tooltip.astro +57 -9
- package/src/components/content/content-strings.ts +34 -0
- package/src/components/content/diff.ts +1 -1
- package/src/components/content/mermaid-element.ts +13 -2
- package/src/components/content/prompt-markdown.ts +292 -0
- package/src/components/content/tooltip-id.ts +41 -0
- package/src/components/copy-feedback.ts +1 -1
- package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
- package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
- package/src/components/islands/hooks.ts +36 -11
- package/src/components/layout/Analytics.astro +21 -79
- package/src/components/layout/Banner.astro +3 -1
- package/src/components/layout/DiscoveryLinks.astro +69 -0
- package/src/components/layout/Header.astro +93 -30
- package/src/components/layout/LanguageSwitcher.astro +4 -1
- package/src/components/layout/Logo.astro +23 -2
- package/src/components/layout/NavSelector.astro +13 -2
- package/src/components/layout/NavTree.astro +12 -3
- package/src/components/layout/NavTreeScript.astro +17 -3
- package/src/components/layout/PageActions.astro +3 -3
- package/src/components/layout/PageFeedback.astro +11 -1
- package/src/components/layout/PageLayout.astro +58 -11
- package/src/components/layout/Pagination.astro +7 -7
- package/src/components/layout/ReferenceLayout.astro +22 -13
- package/src/components/layout/RootLayout.astro +75 -72
- package/src/components/layout/Search.astro +43 -19
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +73 -16
- package/src/components/layout/drawer-inert.ts +113 -15
- package/src/components/layout/dropdown-clamp.ts +105 -0
- package/src/components/layout/head-scripts.ts +15 -6
- package/src/components/layout/nav-utils.ts +17 -0
- package/src/components/layout/search/algolia.ts +8 -8
- package/src/components/layout/search/orama-cloud.ts +9 -7
- package/src/components/layout/search/typesense.ts +11 -17
- package/src/components/openapi/MessageComposer.astro +2 -2
- package/src/components/openapi/Playground.astro +2 -2
- package/src/components/openapi/description.ts +2 -2
- package/src/components/openapi/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/code-fences.ts +1 -1
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +201 -566
- package/src/core/config.ts +131 -42
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +34 -15
- package/src/core/define-components.ts +12 -9
- package/src/core/deployment-env.ts +18 -74
- package/src/core/diagnostics.ts +14 -7
- package/src/core/graph.ts +69 -25
- package/src/core/i18n-ui.ts +41 -11
- package/src/core/i18n.ts +17 -0
- package/src/core/includes.ts +156 -38
- package/src/core/last-modified.ts +6 -11
- package/src/core/links.ts +166 -2
- package/src/core/manifest.ts +10 -3
- package/src/core/navigation.ts +115 -16
- package/src/core/new-tab.ts +35 -0
- package/src/core/node-require.ts +21 -0
- package/src/core/project-graph.ts +42 -26
- package/src/core/project.ts +9 -4
- package/src/core/request-body.ts +61 -0
- package/src/core/safe-href.ts +28 -0
- package/src/core/safe-links.ts +68 -0
- package/src/core/schema.ts +528 -745
- package/src/core/server-features.ts +10 -11
- package/src/core/sources/assets.ts +47 -11
- package/src/core/sources/collection.ts +67 -0
- package/src/core/sources/contentful-rich-text.ts +285 -0
- package/src/core/sources/contentful.ts +173 -0
- package/src/core/sources/github-releases.ts +51 -1
- package/src/core/sources/json.ts +71 -0
- package/src/core/sources/lexical.ts +195 -0
- package/src/core/sources/lower.ts +226 -0
- package/src/core/sources/normalize.ts +52 -2
- package/src/core/sources/notion.ts +39 -28
- package/src/core/sources/payload.ts +135 -0
- package/src/core/sources/portable-text.ts +11 -16
- package/src/core/sources/remote.ts +226 -0
- package/src/core/sources/resolve.ts +104 -166
- package/src/core/sources/sanity.ts +16 -49
- package/src/core/sources/strapi-blocks.ts +124 -0
- package/src/core/sources/strapi.ts +191 -0
- package/src/core/sources/types.ts +12 -1
- package/src/core/types.ts +15 -1
- package/src/core/ui-packs/ar.ts +10 -7
- package/src/core/ui-packs/bg.ts +10 -7
- package/src/core/ui-packs/bn.ts +10 -7
- package/src/core/ui-packs/ca.ts +7 -6
- package/src/core/ui-packs/cs.ts +10 -7
- package/src/core/ui-packs/da.ts +10 -7
- package/src/core/ui-packs/de.ts +10 -7
- package/src/core/ui-packs/el.ts +7 -6
- package/src/core/ui-packs/es.ts +7 -6
- package/src/core/ui-packs/fa.ts +10 -7
- package/src/core/ui-packs/fi.ts +10 -7
- package/src/core/ui-packs/fr.ts +7 -6
- package/src/core/ui-packs/he.ts +10 -7
- package/src/core/ui-packs/hi.ts +10 -7
- package/src/core/ui-packs/hr.ts +10 -7
- package/src/core/ui-packs/hu.ts +10 -7
- package/src/core/ui-packs/id.ts +10 -7
- package/src/core/ui-packs/it.ts +7 -6
- package/src/core/ui-packs/ja.ts +7 -6
- package/src/core/ui-packs/ko.ts +7 -6
- package/src/core/ui-packs/nl.ts +10 -7
- package/src/core/ui-packs/no.ts +10 -7
- package/src/core/ui-packs/pl.ts +10 -7
- package/src/core/ui-packs/pt-br.ts +7 -6
- package/src/core/ui-packs/pt.ts +7 -6
- package/src/core/ui-packs/ro.ts +10 -7
- package/src/core/ui-packs/ru.ts +10 -7
- package/src/core/ui-packs/sk.ts +10 -7
- package/src/core/ui-packs/sr.ts +10 -7
- package/src/core/ui-packs/sv.ts +10 -7
- package/src/core/ui-packs/th.ts +7 -6
- package/src/core/ui-packs/tr.ts +10 -7
- package/src/core/ui-packs/uk.ts +10 -7
- package/src/core/ui-packs/vi.ts +7 -6
- package/src/core/ui-packs/zh-tw.ts +7 -6
- package/src/core/ui-packs/zh.ts +7 -6
- package/src/core/unrecognized-keys.ts +10 -0
- package/src/core/version-cut.ts +116 -8
- package/src/deploy/adapter-output.ts +57 -97
- package/src/deploy/adapters/cloudflare.ts +39 -0
- package/src/deploy/adapters/index.ts +41 -0
- package/src/deploy/adapters/netlify.ts +34 -0
- package/src/deploy/adapters/node.ts +34 -0
- package/src/deploy/adapters/registry.ts +127 -0
- package/src/deploy/adapters/types.ts +92 -0
- package/src/deploy/adapters/vercel.ts +35 -0
- package/src/deploy/artifacts.ts +55 -27
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +124 -23
- package/src/deploy/node-headers.ts +198 -0
- package/src/deploy/platforms/cloudflare.ts +312 -0
- package/src/deploy/platforms/index.ts +67 -0
- package/src/deploy/platforms/netlify.ts +52 -0
- package/src/deploy/platforms/node.ts +40 -0
- package/src/deploy/platforms/paths.ts +42 -0
- package/src/deploy/platforms/static.ts +29 -0
- package/src/deploy/platforms/types.ts +112 -0
- package/src/deploy/platforms/vercel.ts +193 -0
- package/src/deploy/redirects.ts +30 -18
- package/src/deploy/robots.ts +3 -3
- package/src/deploy/rss.ts +2 -2
- package/src/deploy/sitemap.ts +2 -2
- package/src/deploy/vercel-negotiation.ts +2 -2
- package/src/eval/agents.ts +32 -1
- package/src/eval/findings.ts +19 -11
- package/src/eval/report.ts +10 -2
- package/src/markdown/external-links.ts +65 -0
- package/src/markdown/include.ts +45 -27
- package/src/markdown/index.ts +34 -9
- package/src/markdown/inline-code.ts +12 -6
- package/src/markdown/relative-links.ts +324 -0
- package/src/markdown/themes.ts +3 -3
- package/src/migrate/migrate.ts +149 -0
- package/src/openapi/parse.ts +64 -16
- package/src/openapi/proxy.ts +62 -10
- package/src/openapi/references.ts +147 -147
- package/src/openapi/render-mdx.ts +32 -10
- package/src/openapi/scalar.ts +15 -13
- package/src/openapi/sentence.ts +14 -0
- package/src/openapi/source.ts +37 -21
- package/src/openapi/spec-dependency-error.ts +15 -0
- package/src/reference/asyncapi.ts +83 -0
- package/src/reference/graphql.ts +89 -0
- package/src/reference/index.ts +40 -0
- package/src/reference/openapi.ts +83 -0
- package/src/reference/options.ts +201 -0
- package/src/reference/scalar.ts +136 -0
- package/src/reference/schema.ts +88 -0
- package/src/registry/eject.ts +109 -53
- package/src/search/adapters/algolia.ts +46 -0
- package/src/search/adapters/flexsearch.ts +29 -0
- package/src/search/adapters/index.ts +39 -0
- package/src/search/adapters/mixedbread.ts +39 -0
- package/src/search/adapters/orama-cloud.ts +51 -0
- package/src/search/adapters/orama.ts +24 -0
- package/src/search/adapters/pagefind.ts +27 -0
- package/src/search/adapters/registry.ts +131 -0
- package/src/search/adapters/types.ts +46 -0
- package/src/search/adapters/typesense.ts +57 -0
- package/src/search/build.ts +8 -4
- package/src/search/documents.ts +8 -2
- package/src/search/orama-index.ts +1 -1
- package/src/search/sync/algolia.ts +12 -11
- package/src/search/sync/index.ts +35 -20
- package/src/search/sync/orama-cloud.ts +12 -9
- package/src/search/sync/typesense.ts +15 -13
- package/src/sources/contentful.ts +63 -0
- package/src/sources/custom.ts +38 -0
- package/src/sources/filesystem.ts +51 -0
- package/src/sources/github-releases.ts +52 -0
- package/src/sources/index.ts +60 -0
- package/src/sources/mdx-remote.ts +76 -0
- package/src/sources/notion.ts +63 -0
- package/src/sources/obsidian.ts +38 -0
- package/src/sources/payload.ts +60 -0
- package/src/sources/registry.ts +182 -0
- package/src/sources/sanity.ts +66 -0
- package/src/sources/shared.ts +52 -0
- package/src/sources/strapi.ts +58 -0
- package/src/theme/entry.ts +24 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-0qymqwzz.js +0 -164
- package/dist/cli/chunk-0qymqwzz.js.map +0 -15
- package/dist/cli/chunk-1jefwnfs.js.map +0 -48
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-4x36ddpw.js.map +0 -11
- package/dist/cli/chunk-5093q3n7.js +0 -68
- package/dist/cli/chunk-5093q3n7.js.map +0 -10
- package/dist/cli/chunk-5qk08vmp.js.map +0 -11
- package/dist/cli/chunk-7s8hm3b6.js +0 -5347
- package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
- package/dist/cli/chunk-8cjtbafj.js.map +0 -13
- package/dist/cli/chunk-97r59kpr.js +0 -381
- package/dist/cli/chunk-97r59kpr.js.map +0 -12
- package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
- package/dist/cli/chunk-b27xqwn9.js.map +0 -10
- package/dist/cli/chunk-bf6bt1xt.js +0 -185
- package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
- package/dist/cli/chunk-cjtn640a.js.map +0 -10
- package/dist/cli/chunk-ct47dqpx.js.map +0 -11
- package/dist/cli/chunk-esphfr8p.js +0 -107
- package/dist/cli/chunk-esphfr8p.js.map +0 -11
- package/dist/cli/chunk-ex56aa81.js +0 -1016
- package/dist/cli/chunk-ex56aa81.js.map +0 -13
- package/dist/cli/chunk-garjf5z9.js +0 -30
- package/dist/cli/chunk-garjf5z9.js.map +0 -10
- package/dist/cli/chunk-js7saxwm.js +0 -1045
- package/dist/cli/chunk-js7saxwm.js.map +0 -22
- package/dist/cli/chunk-k79xp7av.js.map +0 -39
- package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-rz9jmfhz.js +0 -108
- package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-yg63d42r.js.map +0 -34
- package/docs/advanced/api-reference.mdx +0 -240
- package/docs/configuration/ask-ai.mdx +0 -256
- package/docs/reference/cli.mdx +0 -197
- package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
- package/src/components/content/changelog-element.ts +0 -69
- package/src/search/providers.ts +0 -91
- /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-27g6wdth.js.map} +0 -0
- /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-ce574jw2.js.map} +0 -0
- /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-fxypxtvm.js.map} +0 -0
- /package/dist/cli/{chunk-nn13znc2.js.map → chunk-zxcczpyx.js.map} +0 -0
package/src/audit/agent.ts
CHANGED
|
@@ -97,3 +97,27 @@ export const launchAgent = async (
|
|
|
97
97
|
`Read ${promptPath} and follow its instructions exactly.`,
|
|
98
98
|
]);
|
|
99
99
|
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* {@link launchAgent}, but resolving `null` instead of rejecting when the
|
|
103
|
+
* executable isn't on PATH, so each command can print its own install hint.
|
|
104
|
+
* Only `ENOENT` means "not installed" — any other spawn failure (`EACCES`,
|
|
105
|
+
* `EMFILE`, …) must surface as itself, not be masked by an irrelevant hint.
|
|
106
|
+
*/
|
|
107
|
+
export const launchInstalledAgent = async (
|
|
108
|
+
bin: string,
|
|
109
|
+
prompt: string,
|
|
110
|
+
platform: NodeJS.Platform = process.platform
|
|
111
|
+
): Promise<number | null> => {
|
|
112
|
+
try {
|
|
113
|
+
return await launchAgent(bin, prompt, platform);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
// SAFETY: only the `code` tag is inspected; a spawn failure throws an
|
|
116
|
+
// ErrnoException, and any other thrown value fails the comparison and
|
|
117
|
+
// rethrows unchanged.
|
|
118
|
+
if ((error as NodeJS.ErrnoException)?.code !== "ENOENT") {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
};
|
package/src/audit/catalog.ts
CHANGED
|
@@ -668,7 +668,7 @@ export const CHECKS = [
|
|
|
668
668
|
// audits it — they audit for Google. Blume emits it, so Blume checks it.
|
|
669
669
|
{
|
|
670
670
|
category: "ai",
|
|
671
|
-
fix: "Rebuild — `
|
|
671
|
+
fix: "Rebuild — `agents.llmsTxt` is enabled but the build has no llms.txt. If that's intentional, set `agents.llmsTxt: false`.",
|
|
672
672
|
id: "BLUME_AUDIT_LLMS_TXT_MISSING",
|
|
673
673
|
severity: "warning",
|
|
674
674
|
tier: "static",
|
|
@@ -806,7 +806,7 @@ export const checkMeta = (id: CheckId): CheckMeta => {
|
|
|
806
806
|
return meta;
|
|
807
807
|
};
|
|
808
808
|
|
|
809
|
-
const DOCS_BASE = "https://useblume.dev/docs/
|
|
809
|
+
const DOCS_BASE = "https://useblume.dev/docs/cli/audit";
|
|
810
810
|
|
|
811
811
|
/** `BLUME_AUDIT_TITLE_TOO_LONG` -> `…/audit#title-too-long`. */
|
|
812
812
|
export const checkDocsUrl = (id: CheckId): string =>
|
|
@@ -43,12 +43,12 @@ const resolveAsset = (
|
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
const origin = siteOrigin(context.project.config.deployment.site);
|
|
46
|
+
const origin = siteOrigin(context.project.config.deployment.options.site);
|
|
47
47
|
const resolved = resolveHref(
|
|
48
48
|
page.url,
|
|
49
49
|
asset.src,
|
|
50
50
|
origin,
|
|
51
|
-
normalizeBasePath(context.project.config.deployment.base)
|
|
51
|
+
normalizeBasePath(context.project.config.deployment.options.base)
|
|
52
52
|
);
|
|
53
53
|
// A subresource on another origin (a CDN, an analytics script) is outside the
|
|
54
54
|
// build; we can't check whether it exists without the network.
|
|
@@ -181,7 +181,7 @@ export const dnsAidChecks: CheckModule = {
|
|
|
181
181
|
if (!context.origin) {
|
|
182
182
|
return [];
|
|
183
183
|
}
|
|
184
|
-
const host = dnsAidHost(context.project.config.deployment.site);
|
|
184
|
+
const host = dnsAidHost(context.project.config.deployment.options.site);
|
|
185
185
|
if (!host) {
|
|
186
186
|
return [];
|
|
187
187
|
}
|
|
@@ -27,7 +27,9 @@ const isNonCanonical = (page: PageSnapshot, deployBase: string): boolean => {
|
|
|
27
27
|
|
|
28
28
|
/** Pages that can meaningfully be compared against each other for duplication. */
|
|
29
29
|
const comparable = (context: AuditContext): PageSnapshot[] => {
|
|
30
|
-
const deployBase = normalizeBasePath(
|
|
30
|
+
const deployBase = normalizeBasePath(
|
|
31
|
+
context.project.config.deployment.options.base
|
|
32
|
+
);
|
|
31
33
|
return context.pages.filter(
|
|
32
34
|
(page) =>
|
|
33
35
|
page.indexable &&
|
package/src/audit/checks/i18n.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { normalizePath } from "../url.ts";
|
|
|
7
7
|
|
|
8
8
|
/** The normalized `deployment.base` — hreflang hrefs carry it, page URLs don't. */
|
|
9
9
|
const deployBaseOf = (context: AuditContext): string =>
|
|
10
|
-
normalizeBasePath(context.project.config.deployment.base);
|
|
10
|
+
normalizeBasePath(context.project.config.deployment.options.base);
|
|
11
11
|
|
|
12
12
|
/** The hreflang value meaning "use this when nothing else matches". Not a locale. */
|
|
13
13
|
const X_DEFAULT = "x-default";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { normalizeBasePath, stripBasePath } from "../../core/base-path.ts";
|
|
2
|
-
import { SITE_INFERRING_ADAPTERS } from "../../core/deployment-env.ts";
|
|
3
2
|
import type { Diagnostic } from "../../core/types.ts";
|
|
3
|
+
import { deployPlatform } from "../../deploy/platforms/index.ts";
|
|
4
4
|
import { finding } from "../catalog.ts";
|
|
5
5
|
import { pageSite } from "../locate.ts";
|
|
6
6
|
import { ERROR_ROUTES } from "../types.ts";
|
|
@@ -20,7 +20,7 @@ const canonicalChecks = (
|
|
|
20
20
|
context: AuditContext,
|
|
21
21
|
page: PageSnapshot
|
|
22
22
|
): Diagnostic[] => {
|
|
23
|
-
const { site } = context.project.config.deployment;
|
|
23
|
+
const { site } = context.project.config.deployment.options;
|
|
24
24
|
const origin = siteOrigin(site);
|
|
25
25
|
|
|
26
26
|
// Error routes are noindex by design, so a canonical on them is meaningless
|
|
@@ -79,7 +79,7 @@ const canonicalChecks = (
|
|
|
79
79
|
// comparing.
|
|
80
80
|
const target = normalizePath(
|
|
81
81
|
stripBasePath(
|
|
82
|
-
normalizeBasePath(context.project.config.deployment.base),
|
|
82
|
+
normalizeBasePath(context.project.config.deployment.options.base),
|
|
83
83
|
decodePath(canonical.pathname)
|
|
84
84
|
)
|
|
85
85
|
);
|
|
@@ -151,8 +151,8 @@ export const indexabilityChecks: CheckModule = {
|
|
|
151
151
|
// cannot emit a canonical, an Open Graph image, or a sitemap on *any* page.
|
|
152
152
|
// That's one fact about the config, not a defect on each of 200 pages —
|
|
153
153
|
// report it once, and let the checks that depend on it stay quiet.
|
|
154
|
-
if (!context.project.config.deployment.site) {
|
|
155
|
-
const {
|
|
154
|
+
if (!context.project.config.deployment.options.site) {
|
|
155
|
+
const { deployment } = context.project.config;
|
|
156
156
|
const site = {
|
|
157
157
|
file: context.project.context.configFile ?? undefined,
|
|
158
158
|
url: "/",
|
|
@@ -163,11 +163,11 @@ export const indexabilityChecks: CheckModule = {
|
|
|
163
163
|
// would duplicate state the platform owns, so the finding (which agents
|
|
164
164
|
// apply verbatim via `--claude`/`--codex`) must not suggest it.
|
|
165
165
|
found.push(
|
|
166
|
-
|
|
166
|
+
deployPlatform(deployment).env
|
|
167
167
|
? finding(
|
|
168
168
|
"BLUME_AUDIT_SITE_INFERRED_AT_DEPLOY",
|
|
169
169
|
site,
|
|
170
|
-
`deployment.site is not set in this build — on ${
|
|
170
|
+
`deployment.site is not set in this build — on ${deployment.kind} it is inferred from the platform env at deploy time, so canonical URLs, Open Graph images, and the sitemap are only missing from this local artifact.`
|
|
171
171
|
)
|
|
172
172
|
: finding(
|
|
173
173
|
"BLUME_AUDIT_SITE_NOT_SET",
|
|
@@ -45,9 +45,9 @@ export const linkChecks: CheckModule = {
|
|
|
45
45
|
category: "links",
|
|
46
46
|
run(context) {
|
|
47
47
|
const found: Diagnostic[] = [];
|
|
48
|
-
const origin = siteOrigin(context.project.config.deployment.site);
|
|
48
|
+
const origin = siteOrigin(context.project.config.deployment.options.site);
|
|
49
49
|
const deployBase = normalizeBasePath(
|
|
50
|
-
context.project.config.deployment.base
|
|
50
|
+
context.project.config.deployment.options.base
|
|
51
51
|
);
|
|
52
52
|
/** Broken chrome targets, and the first page each was seen on. */
|
|
53
53
|
const brokenChrome = new Map<string, PageSnapshot>();
|
package/src/audit/checks/llms.ts
CHANGED
|
@@ -6,16 +6,16 @@ import { ERROR_ROUTES } from "../types.ts";
|
|
|
6
6
|
import type { AuditContext, CheckModule } from "../types.ts";
|
|
7
7
|
import { isServed, normalizePath, siteOrigin } from "../url.ts";
|
|
8
8
|
|
|
9
|
-
/** The object form of `
|
|
9
|
+
/** The object form of `agents.llmsTxt`. The schema always emits it, but hand-built
|
|
10
10
|
* audit contexts (tests, partial configs) may still carry the raw boolean. */
|
|
11
11
|
const isLlmsToggleObject = (
|
|
12
12
|
value: boolean | { enabled: boolean; openapi: boolean } | undefined
|
|
13
13
|
): value is { enabled: boolean; openapi: boolean } =>
|
|
14
14
|
typeof value === "object" && value !== null;
|
|
15
15
|
|
|
16
|
-
/** The `
|
|
16
|
+
/** The `agents.llmsTxt` config normalized to what the checks need. */
|
|
17
17
|
const llmsConfig = (context: AuditContext) => {
|
|
18
|
-
const value = context.project.config.
|
|
18
|
+
const value = context.project.config.agents?.llmsTxt;
|
|
19
19
|
if (isLlmsToggleObject(value)) {
|
|
20
20
|
return { enabled: value.enabled, openapi: value.openapi };
|
|
21
21
|
}
|
|
@@ -82,9 +82,9 @@ export const llmsChecks: CheckModule = {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
const found: Diagnostic[] = [];
|
|
85
|
-
const origin = siteOrigin(context.project.config.deployment.site);
|
|
85
|
+
const origin = siteOrigin(context.project.config.deployment.options.site);
|
|
86
86
|
const deployBase = normalizeBasePath(
|
|
87
|
-
context.project.config.deployment.base
|
|
87
|
+
context.project.config.deployment.options.base
|
|
88
88
|
);
|
|
89
89
|
|
|
90
90
|
const listed = new Set<string>();
|
|
@@ -114,7 +114,7 @@ export const llmsChecks: CheckModule = {
|
|
|
114
114
|
// The reverse direction, mirroring INDEXABLE_PAGE_NOT_IN_SITEMAP: a page
|
|
115
115
|
// that is built, indexable, and in the nav belongs in the index. Pages the
|
|
116
116
|
// generator deliberately skips — hidden, drafts, error routes, API
|
|
117
|
-
// reference when `
|
|
117
|
+
// reference when `agents.llmsTxt.openapi` is off, custom pages with no
|
|
118
118
|
// manifest route — are skipped here for the same reasons.
|
|
119
119
|
for (const page of context.pages) {
|
|
120
120
|
const { route } = page;
|
|
@@ -153,7 +153,7 @@ export const networkChecks: CheckModule = {
|
|
|
153
153
|
|
|
154
154
|
const found: Diagnostic[] = [];
|
|
155
155
|
const deployBase = normalizeBasePath(
|
|
156
|
-
context.project.config.deployment.base
|
|
156
|
+
context.project.config.deployment.options.base
|
|
157
157
|
);
|
|
158
158
|
const targets = context.pages.map((page) =>
|
|
159
159
|
liveUrl(origin, page, deployBase)
|
|
@@ -217,9 +217,9 @@ export const networkChecks: CheckModule = {
|
|
|
217
217
|
export const externalChecks: CheckModule = {
|
|
218
218
|
category: "network",
|
|
219
219
|
async run(context) {
|
|
220
|
-
const origin = siteOrigin(context.project.config.deployment.site);
|
|
220
|
+
const origin = siteOrigin(context.project.config.deployment.options.site);
|
|
221
221
|
const deployBase = normalizeBasePath(
|
|
222
|
-
context.project.config.deployment.base
|
|
222
|
+
context.project.config.deployment.options.base
|
|
223
223
|
);
|
|
224
224
|
|
|
225
225
|
/** Every outbound URL, and the pages that link to it. */
|
|
@@ -53,9 +53,9 @@ export const ogImageChecks: CheckModule = {
|
|
|
53
53
|
return pending;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
const origin = siteOrigin(context.project.config.deployment.site);
|
|
56
|
+
const origin = siteOrigin(context.project.config.deployment.options.site);
|
|
57
57
|
const deployBase = normalizeBasePath(
|
|
58
|
-
context.project.config.deployment.base
|
|
58
|
+
context.project.config.deployment.options.base
|
|
59
59
|
);
|
|
60
60
|
const candidates: { page: PageSnapshot; path: string }[] = [];
|
|
61
61
|
|
|
@@ -23,7 +23,7 @@ export const robotsChecks: CheckModule = {
|
|
|
23
23
|
category: "robots",
|
|
24
24
|
run(context) {
|
|
25
25
|
const { robots } = context;
|
|
26
|
-
const { site } = context.project.config.deployment;
|
|
26
|
+
const { site } = context.project.config.deployment.options;
|
|
27
27
|
|
|
28
28
|
if (!context.project.config.seo.robots) {
|
|
29
29
|
return [];
|
|
@@ -150,7 +150,7 @@ export const sitemapChecks: CheckModule = {
|
|
|
150
150
|
category: "sitemap",
|
|
151
151
|
run(context) {
|
|
152
152
|
const { sitemap } = context;
|
|
153
|
-
const { site } = context.project.config.deployment;
|
|
153
|
+
const { site } = context.project.config.deployment.options;
|
|
154
154
|
|
|
155
155
|
// Without `deployment.site` Blume can't emit a sitemap at all (absolute URLs
|
|
156
156
|
// are required), and that's a config choice, not a defect. Stay quiet.
|
|
@@ -220,7 +220,7 @@ export const sitemapChecks: CheckModule = {
|
|
|
220
220
|
|
|
221
221
|
const origin = siteOrigin(site);
|
|
222
222
|
const deployBase = normalizeBasePath(
|
|
223
|
-
context.project.config.deployment.base
|
|
223
|
+
context.project.config.deployment.options.base
|
|
224
224
|
);
|
|
225
225
|
const listed = sitemapPaths(context, deployBase);
|
|
226
226
|
|
|
@@ -27,7 +27,7 @@ export const socialChecks: CheckModule = {
|
|
|
27
27
|
category: "social",
|
|
28
28
|
run(context) {
|
|
29
29
|
const found: Diagnostic[] = [];
|
|
30
|
-
const hasSite = Boolean(context.project.config.deployment.site);
|
|
30
|
+
const hasSite = Boolean(context.project.config.deployment.options.site);
|
|
31
31
|
const required = ogRequired(hasSite);
|
|
32
32
|
|
|
33
33
|
for (const page of context.pages) {
|
package/src/audit/run.ts
CHANGED
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
import { crawlStaticDir } from "./crawl.ts";
|
|
30
30
|
import { buildGraph } from "./graph.ts";
|
|
31
31
|
import { resolveRedirects } from "./redirects.ts";
|
|
32
|
+
import { shortId } from "./terms.ts";
|
|
32
33
|
import { DEFAULT_THRESHOLDS } from "./types.ts";
|
|
33
34
|
import type {
|
|
34
35
|
AuditContext,
|
|
@@ -119,7 +120,7 @@ const readSources = async (
|
|
|
119
120
|
/** Does a check id or its category match one of the user's `--only`/`--skip` terms? */
|
|
120
121
|
const matches = (id: CheckId, terms: string[]): boolean => {
|
|
121
122
|
const meta = CHECKS.find((check) => check.id === id);
|
|
122
|
-
const short = id
|
|
123
|
+
const short = shortId(id);
|
|
123
124
|
return terms.some((raw) => {
|
|
124
125
|
const term = raw.trim().toLowerCase();
|
|
125
126
|
return (
|
|
@@ -150,8 +151,8 @@ export const runAudit = async (options: AuditOptions): Promise<AuditResult> => {
|
|
|
150
151
|
files: crawl.files,
|
|
151
152
|
graph: buildGraph(
|
|
152
153
|
crawl.pages,
|
|
153
|
-
siteOrigin(project.config.deployment.site),
|
|
154
|
-
normalizeBasePath(project.config.deployment.base)
|
|
154
|
+
siteOrigin(project.config.deployment.options.site),
|
|
155
|
+
normalizeBasePath(project.config.deployment.options.base)
|
|
155
156
|
),
|
|
156
157
|
llms: crawl.llms,
|
|
157
158
|
origin,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CHECKS } from "./catalog.ts";
|
|
2
|
+
import type { CheckId } from "./catalog.ts";
|
|
3
|
+
|
|
4
|
+
/** A check id without its `BLUME_AUDIT_` prefix, lowercased: `link_to_broken`. */
|
|
5
|
+
export const shortId = (id: CheckId): string =>
|
|
6
|
+
id.replace("BLUME_AUDIT_", "").toLowerCase();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Every term `--only`/`--skip` accept, as the audit's filter compares them:
|
|
10
|
+
* each check's short id and each category. The full `BLUME_AUDIT_…` id is
|
|
11
|
+
* accepted too, but it's the short id with a prefix, so it isn't listed.
|
|
12
|
+
*/
|
|
13
|
+
export const checkTerms = (): string[] => [
|
|
14
|
+
...new Set([
|
|
15
|
+
...CHECKS.map((check) => check.category),
|
|
16
|
+
...CHECKS.map((check) => shortId(check.id)),
|
|
17
|
+
]),
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The `--only`/`--skip` terms that name no check and no category. A typo there
|
|
22
|
+
* (`--only link` for `links`) would otherwise match nothing, report nothing,
|
|
23
|
+
* and pass a CI gate that was meant to catch something.
|
|
24
|
+
*/
|
|
25
|
+
export const unknownCheckTerms = (terms: readonly string[]): string[] => {
|
|
26
|
+
const known = new Set(checkTerms());
|
|
27
|
+
return terms.filter((raw) => {
|
|
28
|
+
const term = raw.trim().toLowerCase();
|
|
29
|
+
return !(known.has(term) || known.has(term.replace(/^blume_audit_/u, "")));
|
|
30
|
+
});
|
|
31
|
+
};
|
package/src/audit/url.ts
CHANGED
|
@@ -11,16 +11,16 @@ export type ServedContext = Pick<AuditContext, "byUrl" | "files" | "project">;
|
|
|
11
11
|
/**
|
|
12
12
|
* Routes the server answers that the build writes no file for.
|
|
13
13
|
*
|
|
14
|
-
* The MCP endpoint is streamable HTTP: llms.txt advertises `
|
|
14
|
+
* The MCP endpoint is streamable HTTP: llms.txt advertises `agents.mcp.route`
|
|
15
15
|
* whenever the server is enabled, but it appears in neither the page snapshots
|
|
16
16
|
* nor the static file index, so a check that only consults those reads the
|
|
17
17
|
* site's own index as broken. The exemption is the configured route while the
|
|
18
|
-
* server is on, and nothing wider — with `
|
|
18
|
+
* server is on, and nothing wider — with `agents.mcp` off, a listed `/mcp` is as
|
|
19
19
|
* dead as any other missing target. Any future server route (a search API, a
|
|
20
20
|
* playground proxy) belongs here too, so every check recognizes it at once.
|
|
21
21
|
*/
|
|
22
22
|
const serverRoutes = (context: ServedContext): string[] => {
|
|
23
|
-
const mcp = context.project.config.
|
|
23
|
+
const mcp = context.project.config.agents?.mcp;
|
|
24
24
|
return mcp?.enabled ? [normalizePath(mcp.route)] : [];
|
|
25
25
|
};
|
|
26
26
|
|
|
@@ -124,16 +124,16 @@ export const resolveHref = (
|
|
|
124
124
|
return { kind: "external", url: parsed.toString() };
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
// A relative href resolves
|
|
128
|
-
// to do that, so borrow a placeholder
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
// `/docs/
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
127
|
+
// A relative href resolves the way a browser resolves it from the page's
|
|
128
|
+
// canonical URL. `URL` needs an origin to do that, so borrow a placeholder
|
|
129
|
+
// one and keep only the path. The canonical URL is slashless — the generated
|
|
130
|
+
// config sets `trailingSlash: "never"`, Vercel redirects `/docs/api/` onto
|
|
131
|
+
// `/docs/api`, and the dev server 404s the slashed form — so `./auth` there
|
|
132
|
+
// means `/docs/auth`, exactly where a reader's click lands. Content links
|
|
133
|
+
// never hit this: the Markdown pipeline rewrites them root-relative (see
|
|
134
|
+
// `resolveRelativeHref`); what's left is hand-written HTML, which a browser
|
|
135
|
+
// reads this way.
|
|
136
|
+
const base = `https://blume.invalid${pageUrl}`;
|
|
137
137
|
let resolved: URL;
|
|
138
138
|
try {
|
|
139
139
|
resolved = new URL(target, base);
|
package/src/blume-modules.d.ts
CHANGED
|
@@ -18,9 +18,9 @@ declare module "blume:search-client" {
|
|
|
18
18
|
declare module "blume:ask" {
|
|
19
19
|
/** The generated Ask trigger (see `askComponentTemplate`); empty when Ask is off. */
|
|
20
20
|
// Mirrors the generated `.blume/src/env.d.ts` declaration: the trigger's type
|
|
21
|
-
// is the
|
|
21
|
+
// is the Assistant island the enabled template re-exports.
|
|
22
22
|
// oxlint-disable-next-line typescript/consistent-type-imports
|
|
23
|
-
const Ask: typeof import("./components/islands/
|
|
23
|
+
const Ask: typeof import("./components/islands/Assistant.astro").default;
|
|
24
24
|
export default Ask;
|
|
25
25
|
}
|
|
26
26
|
|
package/src/cli/command-meta.ts
CHANGED
|
@@ -53,6 +53,11 @@ export const commandMeta = {
|
|
|
53
53
|
"Serve an MCP data snapshot over stdio (internal, used by `blume eval`).",
|
|
54
54
|
name: "mcp-stdio",
|
|
55
55
|
},
|
|
56
|
+
migrate: {
|
|
57
|
+
description:
|
|
58
|
+
"Migrate a docs site from Mintlify, Fumadocs, Docusaurus, Starlight, or Nextra with a coding agent.",
|
|
59
|
+
name: "migrate",
|
|
60
|
+
},
|
|
56
61
|
preview: {
|
|
57
62
|
description: "Preview the last production build.",
|
|
58
63
|
name: "preview",
|
|
@@ -66,6 +71,11 @@ export const commandMeta = {
|
|
|
66
71
|
"Translate docs into the configured locales with a local agent CLI.",
|
|
67
72
|
name: "translate",
|
|
68
73
|
},
|
|
74
|
+
upgrade: {
|
|
75
|
+
description:
|
|
76
|
+
"Upgrade to this version of Blume: bump the dependency and list the config changes left.",
|
|
77
|
+
name: "upgrade",
|
|
78
|
+
},
|
|
69
79
|
validate: {
|
|
70
80
|
description: "Validate internal, anchor, asset, and external links.",
|
|
71
81
|
name: "validate",
|
|
@@ -3,19 +3,21 @@ import { defineCommand } from "citty";
|
|
|
3
3
|
import {
|
|
4
4
|
AGENTS,
|
|
5
5
|
fixPrompt,
|
|
6
|
-
|
|
6
|
+
launchInstalledAgent,
|
|
7
7
|
writeAgentReport,
|
|
8
8
|
} from "../../audit/agent.ts";
|
|
9
9
|
import type { AgentKind } from "../../audit/agent.ts";
|
|
10
10
|
import { formatCatalog, formatReport, reportJson } from "../../audit/report.ts";
|
|
11
11
|
import { NoBuildError, runAudit } from "../../audit/run.ts";
|
|
12
12
|
import type { AuditResult } from "../../audit/run.ts";
|
|
13
|
+
import { checkTerms, unknownCheckTerms } from "../../audit/terms.ts";
|
|
13
14
|
import { BlumeError } from "../../core/diagnostics.ts";
|
|
14
15
|
import { scanProject } from "../../core/project-graph.ts";
|
|
15
16
|
import type { DiagnosticSeverity } from "../../core/types.ts";
|
|
16
17
|
import { commandMeta } from "../command-meta.ts";
|
|
17
18
|
import { reportInternalError } from "../internal-error.ts";
|
|
18
|
-
import { flushStdout, logger } from "../log.ts";
|
|
19
|
+
import { flushStdout, logger, reportDiagnostics } from "../log.ts";
|
|
20
|
+
import { closestMatch } from "../unknown-flags.ts";
|
|
19
21
|
|
|
20
22
|
const SEVERITIES: DiagnosticSeverity[] = ["error", "warning", "info"];
|
|
21
23
|
|
|
@@ -31,6 +33,31 @@ const splitTerms = (value: string | undefined): string[] =>
|
|
|
31
33
|
.filter(Boolean)
|
|
32
34
|
: [];
|
|
33
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Exit when `--only`/`--skip` name a check or category that doesn't exist,
|
|
38
|
+
* suggesting the closest real one — a typo would otherwise filter every
|
|
39
|
+
* finding out and pass the gate.
|
|
40
|
+
*/
|
|
41
|
+
const rejectUnknownTerms = (terms: string[]): void => {
|
|
42
|
+
const unknown = unknownCheckTerms(terms);
|
|
43
|
+
if (unknown.length === 0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const known = checkTerms();
|
|
47
|
+
const listed = unknown
|
|
48
|
+
.map((term) => {
|
|
49
|
+
const suggestion = closestMatch(term.trim().toLowerCase(), known);
|
|
50
|
+
return suggestion
|
|
51
|
+
? `"${term}" (did you mean "${suggestion}"?)`
|
|
52
|
+
: `"${term}"`;
|
|
53
|
+
})
|
|
54
|
+
.join(", ");
|
|
55
|
+
logger.error(
|
|
56
|
+
`--only/--skip name no check or category: ${listed}. Run \`blume audit --list-checks\` for every check id and category.`
|
|
57
|
+
);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
};
|
|
60
|
+
|
|
34
61
|
/** Whether the run should exit non-zero, given the gate. */
|
|
35
62
|
export const shouldFail = (
|
|
36
63
|
result: AuditResult,
|
|
@@ -40,31 +67,20 @@ export const shouldFail = (
|
|
|
40
67
|
return result.diagnostics.some((d) => failing.has(d.severity));
|
|
41
68
|
};
|
|
42
69
|
|
|
43
|
-
/**
|
|
44
|
-
* Launch the agent CLI, turning a missing executable into the install hint.
|
|
45
|
-
* Only `ENOENT` means "not installed" — any other spawn failure (`EACCES`,
|
|
46
|
-
* `EMFILE`, …) must surface as itself, not be masked by an irrelevant
|
|
47
|
-
* install hint.
|
|
48
|
-
*/
|
|
70
|
+
/** Launch the agent CLI, turning a missing executable into the install hint. */
|
|
49
71
|
const launchAgentCode = async (
|
|
50
72
|
agent: AgentKind,
|
|
51
73
|
prompt: string
|
|
52
74
|
): Promise<number> => {
|
|
53
75
|
const cli = AGENTS[agent];
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
} catch (error) {
|
|
57
|
-
// SAFETY: only the `code` tag is inspected; a spawn failure throws an
|
|
58
|
-
// ErrnoException, and any other thrown value fails the comparison and
|
|
59
|
-
// rethrows unchanged.
|
|
60
|
-
if ((error as NodeJS.ErrnoException)?.code !== "ENOENT") {
|
|
61
|
-
throw error;
|
|
62
|
-
}
|
|
76
|
+
const code = await launchInstalledAgent(cli.bin, prompt);
|
|
77
|
+
if (code === null) {
|
|
63
78
|
logger.error(
|
|
64
79
|
`${cli.name} (\`${cli.bin}\`) was not found on PATH. Install it with \`${cli.install}\`.`
|
|
65
80
|
);
|
|
66
81
|
return process.exit(1);
|
|
67
82
|
}
|
|
83
|
+
return code;
|
|
68
84
|
};
|
|
69
85
|
|
|
70
86
|
export const auditCommand = defineCommand({
|
|
@@ -138,7 +154,7 @@ export const auditCommand = defineCommand({
|
|
|
138
154
|
(kind) => args[kind]
|
|
139
155
|
);
|
|
140
156
|
if (agents.length > 1) {
|
|
141
|
-
logger.error("Pass at most one of --
|
|
157
|
+
logger.error("Pass at most one of --codex or --claude.");
|
|
142
158
|
process.exit(1);
|
|
143
159
|
}
|
|
144
160
|
const [agent] = agents;
|
|
@@ -146,6 +162,9 @@ export const auditCommand = defineCommand({
|
|
|
146
162
|
logger.error(`--json and --${agent} are mutually exclusive.`);
|
|
147
163
|
process.exit(1);
|
|
148
164
|
}
|
|
165
|
+
const only = splitTerms(args.only);
|
|
166
|
+
const skip = splitTerms(args.skip);
|
|
167
|
+
rejectUnknownTerms([...only, ...skip]);
|
|
149
168
|
let result: AuditResult;
|
|
150
169
|
try {
|
|
151
170
|
// `scanProject`, not `prepareProject`: the audit reads the *existing*
|
|
@@ -154,10 +173,10 @@ export const auditCommand = defineCommand({
|
|
|
154
173
|
const project = await scanProject(root, { mode: "build" });
|
|
155
174
|
result = await runAudit({
|
|
156
175
|
external: args.external,
|
|
157
|
-
only
|
|
176
|
+
only,
|
|
158
177
|
origin: args.url,
|
|
159
178
|
project,
|
|
160
|
-
skip
|
|
179
|
+
skip,
|
|
161
180
|
});
|
|
162
181
|
} catch (error) {
|
|
163
182
|
if (error instanceof NoBuildError) {
|
|
@@ -165,7 +184,7 @@ export const auditCommand = defineCommand({
|
|
|
165
184
|
process.exit(1);
|
|
166
185
|
}
|
|
167
186
|
if (error instanceof BlumeError) {
|
|
168
|
-
|
|
187
|
+
reportDiagnostics([error.diagnostic], root);
|
|
169
188
|
process.exit(1);
|
|
170
189
|
}
|
|
171
190
|
reportInternalError(error);
|