blume 1.7.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +19 -0
- package/CHANGELOG.md +227 -0
- package/README.md +34 -21
- package/dist/cli/chunk-11j0384y.js +148 -0
- package/dist/cli/chunk-11j0384y.js.map +10 -0
- package/dist/cli/{chunk-xhtpx3ff.js → chunk-1w8dp3qb.js} +17 -16
- package/dist/cli/{chunk-xhtpx3ff.js.map → chunk-1w8dp3qb.js.map} +3 -3
- package/dist/cli/chunk-2q1dwty4.js +75 -0
- package/dist/cli/chunk-2q1dwty4.js.map +11 -0
- package/dist/cli/chunk-41za066z.js +122 -0
- package/dist/cli/chunk-41za066z.js.map +11 -0
- package/dist/cli/chunk-5a2z0198.js +133 -0
- package/dist/cli/chunk-5a2z0198.js.map +10 -0
- package/dist/cli/{chunk-9he6crym.js → chunk-6k8vp3ta.js} +25 -13
- package/dist/cli/{chunk-9he6crym.js.map → chunk-6k8vp3ta.js.map} +4 -4
- package/dist/cli/{chunk-mt76t7dj.js → chunk-79njf86q.js} +133 -54
- package/dist/cli/chunk-79njf86q.js.map +11 -0
- package/dist/cli/{chunk-3w7b2vcx.js → chunk-7ez8ny0t.js} +2 -2
- package/dist/cli/{chunk-688e0dde.js → chunk-88cpgt6h.js} +1 -1
- package/dist/cli/chunk-a9kptbw5.js +361 -0
- package/dist/cli/chunk-a9kptbw5.js.map +14 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-b5aj94ah.js +91 -0
- package/dist/cli/chunk-b5aj94ah.js.map +10 -0
- package/dist/cli/{chunk-hs3gbh8p.js → chunk-bctazmbk.js} +9 -5
- package/dist/cli/chunk-bctazmbk.js.map +10 -0
- package/dist/cli/chunk-beat36xx.js +279 -0
- package/dist/cli/chunk-beat36xx.js.map +10 -0
- package/dist/cli/chunk-bnbmcwfb.js +145 -0
- package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
- package/dist/cli/{chunk-9bkjd11x.js → chunk-bw22s759.js} +15 -5
- package/dist/cli/{chunk-9bkjd11x.js.map → chunk-bw22s759.js.map} +4 -4
- package/dist/cli/chunk-by2290sx.js +39 -0
- package/dist/cli/chunk-by2290sx.js.map +10 -0
- package/dist/cli/chunk-d1tadaw7.js +79 -0
- package/dist/cli/chunk-d1tadaw7.js.map +10 -0
- package/dist/cli/{chunk-t3tj0dgr.js → chunk-d80hr03s.js} +24 -19
- package/dist/cli/chunk-d80hr03s.js.map +15 -0
- package/dist/cli/chunk-ernrthtr.js +97 -0
- package/dist/cli/chunk-ernrthtr.js.map +10 -0
- package/dist/cli/chunk-f2972sbt.js +374 -0
- package/dist/cli/chunk-f2972sbt.js.map +10 -0
- package/dist/cli/{chunk-exeeb35e.js → chunk-f7t03s3g.js} +2 -2
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-12dxjqk7.js → chunk-fh5hj5jt.js} +44 -21
- package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
- package/dist/cli/{chunk-8cd8tj54.js → chunk-j8mw0za6.js} +86 -57
- package/dist/cli/chunk-j8mw0za6.js.map +35 -0
- package/dist/cli/chunk-jts8mvcz.js +106 -0
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ejjx8znq.js → chunk-mnqj32sj.js} +505 -536
- package/dist/cli/chunk-mnqj32sj.js.map +12 -0
- package/dist/cli/{chunk-196vjxp9.js → chunk-mwt1k8n7.js} +100 -372
- package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
- package/dist/cli/chunk-nk3ts2xk.js +51 -0
- package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
- package/dist/cli/{chunk-n9sra6sy.js → chunk-pat2zzwc.js} +10 -14
- package/dist/cli/{chunk-n9sra6sy.js.map → chunk-pat2zzwc.js.map} +2 -2
- package/dist/cli/chunk-pnnvybbk.js +176 -0
- package/dist/cli/chunk-pnnvybbk.js.map +11 -0
- package/dist/cli/{chunk-cvky9gb2.js → chunk-sqn5t4q0.js} +81 -87
- package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
- package/dist/cli/{chunk-eevwt1sc.js → chunk-tzne8qfq.js} +15 -15
- package/dist/cli/{chunk-eevwt1sc.js.map → chunk-tzne8qfq.js.map} +1 -1
- package/dist/cli/chunk-xaz13gwg.js +12449 -0
- package/dist/cli/chunk-xaz13gwg.js.map +182 -0
- package/dist/cli/chunk-y3e45rc8.js +102 -0
- package/dist/cli/chunk-y3e45rc8.js.map +10 -0
- package/dist/cli/chunk-z01ze5c1.js +261 -0
- package/dist/cli/chunk-z01ze5c1.js.map +10 -0
- package/dist/cli/{chunk-5n7t497w.js → chunk-z1f5arsg.js} +247 -755
- package/dist/cli/chunk-z1f5arsg.js.map +36 -0
- package/dist/cli/{chunk-hdm2dkd2.js → chunk-zg2gtj10.js} +1086 -2596
- package/dist/cli/chunk-zg2gtj10.js.map +35 -0
- package/dist/cli/{chunk-ppfvdcd4.js → chunk-zxccj738.js} +1 -1
- 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.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 +209 -505
- package/dist/types/core/config.d.ts +60 -34
- 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 +28 -11
- 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 +6 -2
- 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 +2291 -441
- 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 +20 -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/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 +50 -26
- package/docs/03-upgrading.mdx +351 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +3 -3
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +20 -8
- 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} +9 -8
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +1 -1
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/ask-ai.mdx +176 -61
- package/docs/configuration/customization.mdx +15 -9
- package/docs/configuration/index.mdx +52 -31
- package/docs/configuration/search.mdx +75 -54
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +37 -1
- package/docs/content/i18n.mdx +8 -6
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +10 -5
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +12 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +26 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +91 -10
- package/docs/discoverability/index.mdx +5 -5
- 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 +2 -2
- 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 +21 -8
- 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 +26 -22
- package/src/ai/ai-catalog.ts +259 -0
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-data.ts +1 -1
- package/src/ai/ask.ts +624 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +19 -6
- package/src/ai/llms.ts +26 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/mcp/discovery.ts +1 -1
- package/src/ai/openapi-components.ts +4 -1
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +2 -2
- package/src/ai/skills.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 +114 -345
- package/src/astro/integration.ts +2 -6
- 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 +554 -541
- 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/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +39 -20
- package/src/cli/commands/build.ts +71 -314
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +90 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +2 -2
- 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 +2 -2
- 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 +38 -11
- 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/islands/hooks.ts +75 -3
- 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 +83 -20
- 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 +52 -5
- package/src/components/layout/ReferenceLayout.astro +21 -12
- package/src/components/layout/RootLayout.astro +69 -43
- package/src/components/layout/Search.astro +30 -6
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +101 -15
- 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/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +212 -543
- package/src/core/config.ts +130 -41
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +32 -11
- 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 +6 -2
- 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 +137 -19
- 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 +531 -721
- package/src/core/server-features.ts +8 -9
- 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 +20 -1
- package/src/core/ui-packs/ar.ts +6 -2
- package/src/core/ui-packs/bg.ts +6 -2
- package/src/core/ui-packs/bn.ts +6 -2
- package/src/core/ui-packs/ca.ts +3 -1
- package/src/core/ui-packs/cs.ts +6 -2
- package/src/core/ui-packs/da.ts +6 -2
- package/src/core/ui-packs/de.ts +6 -2
- package/src/core/ui-packs/el.ts +3 -1
- package/src/core/ui-packs/es.ts +3 -1
- package/src/core/ui-packs/fa.ts +6 -2
- package/src/core/ui-packs/fi.ts +6 -2
- package/src/core/ui-packs/fr.ts +3 -1
- package/src/core/ui-packs/he.ts +6 -2
- package/src/core/ui-packs/hi.ts +6 -2
- package/src/core/ui-packs/hr.ts +6 -2
- package/src/core/ui-packs/hu.ts +6 -2
- package/src/core/ui-packs/id.ts +6 -2
- package/src/core/ui-packs/it.ts +3 -1
- package/src/core/ui-packs/ja.ts +3 -1
- package/src/core/ui-packs/ko.ts +3 -1
- package/src/core/ui-packs/nl.ts +6 -2
- package/src/core/ui-packs/no.ts +6 -2
- package/src/core/ui-packs/pl.ts +6 -2
- package/src/core/ui-packs/pt-br.ts +3 -1
- package/src/core/ui-packs/pt.ts +3 -1
- package/src/core/ui-packs/ro.ts +6 -2
- package/src/core/ui-packs/ru.ts +6 -2
- package/src/core/ui-packs/sk.ts +6 -2
- package/src/core/ui-packs/sr.ts +6 -2
- package/src/core/ui-packs/sv.ts +6 -2
- package/src/core/ui-packs/th.ts +3 -1
- package/src/core/ui-packs/tr.ts +6 -2
- package/src/core/ui-packs/uk.ts +6 -2
- package/src/core/ui-packs/vi.ts +3 -1
- package/src/core/ui-packs/zh-tw.ts +3 -1
- package/src/core/ui-packs/zh.ts +3 -1
- 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 +67 -28
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +129 -22
- 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 +27 -4
- 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 +97 -42
- 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 +33 -7
- package/src/search/documents.ts +6 -0
- 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 +47 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-12dxjqk7.js.map +0 -10
- package/dist/cli/chunk-196vjxp9.js.map +0 -13
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-30e87n55.js +0 -108
- package/dist/cli/chunk-30e87n55.js.map +0 -10
- package/dist/cli/chunk-450a7rcr.js +0 -185
- package/dist/cli/chunk-450a7rcr.js.map +0 -11
- package/dist/cli/chunk-5n7t497w.js.map +0 -40
- package/dist/cli/chunk-61j18dwk.js +0 -5342
- package/dist/cli/chunk-61j18dwk.js.map +0 -58
- package/dist/cli/chunk-88by27n5.js +0 -17
- package/dist/cli/chunk-88by27n5.js.map +0 -10
- package/dist/cli/chunk-8cd8tj54.js.map +0 -34
- package/dist/cli/chunk-aztttvb3.js +0 -381
- package/dist/cli/chunk-aztttvb3.js.map +0 -12
- package/dist/cli/chunk-cvky9gb2.js.map +0 -11
- package/dist/cli/chunk-ejjx8znq.js.map +0 -15
- package/dist/cli/chunk-fmceyezb.js +0 -1007
- package/dist/cli/chunk-fmceyezb.js.map +0 -13
- package/dist/cli/chunk-hdm2dkd2.js.map +0 -48
- package/dist/cli/chunk-hs3gbh8p.js.map +0 -10
- package/dist/cli/chunk-jbj4qhfw.js +0 -30
- package/dist/cli/chunk-jbj4qhfw.js.map +0 -10
- package/dist/cli/chunk-mqb2ka8m.js +0 -68
- package/dist/cli/chunk-mqb2ka8m.js.map +0 -10
- package/dist/cli/chunk-mt76t7dj.js.map +0 -11
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-ra1v2nc2.js +0 -35
- package/dist/cli/chunk-ra1v2nc2.js.map +0 -10
- package/dist/cli/chunk-t3tj0dgr.js.map +0 -15
- package/dist/cli/chunk-tqa1s0k8.js +0 -69
- package/dist/cli/chunk-tqa1s0k8.js.map +0 -11
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vkrsvbr5.js +0 -107
- package/dist/cli/chunk-vkrsvbr5.js.map +0 -11
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-wjt80jps.js +0 -1049
- package/dist/cli/chunk-wjt80jps.js.map +0 -24
- package/docs/advanced/api-reference.mdx +0 -240
- 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-3w7b2vcx.js.map → chunk-7ez8ny0t.js.map} +0 -0
- /package/dist/cli/{chunk-688e0dde.js.map → chunk-88cpgt6h.js.map} +0 -0
- /package/dist/cli/{chunk-exeeb35e.js.map → chunk-f7t03s3g.js.map} +0 -0
- /package/dist/cli/{chunk-ppfvdcd4.js.map → chunk-zxccj738.js.map} +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
2
|
+
import type { SkillArtifact } from "./skills.ts";
|
|
3
|
+
/**
|
|
4
|
+
* The AI Catalog (Agent-Card/ai-catalog data model, `specVersion` 1.0) at
|
|
5
|
+
* `/.well-known/ai-catalog.json`, which is also the Agentic Resource
|
|
6
|
+
* Discovery (ARD) manifest: one entry per agent-facing resource the site
|
|
7
|
+
* publishes, each an `urn:air:<host>:<namespace>:<name>` identifier, a
|
|
8
|
+
* display name, the artifact's media type, a URL, and the
|
|
9
|
+
* `representativeQueries` registries embed for semantic search. Like the
|
|
10
|
+
* RFC 9727 catalog next to it, everything is derived from `blume.config.ts`
|
|
11
|
+
* and the build's published skills — nothing is hand-written.
|
|
12
|
+
*
|
|
13
|
+
* ARD v0.91 moved its manifest to `/.well-known/ard.json` and calls
|
|
14
|
+
* `ai-catalog.json` the predecessor path that consumers only *may* consult,
|
|
15
|
+
* while the ai-catalog spec and today's agent-readiness scanners key on
|
|
16
|
+
* `ai-catalog.json`. The ARD manifest is just an `entries` array (other
|
|
17
|
+
* members are ignored), so the one document is written to both paths.
|
|
18
|
+
*
|
|
19
|
+
* Served as plain `application/json`: the `.json` extension gets it from
|
|
20
|
+
* every static host with no header rule, and the scanners that gate on the
|
|
21
|
+
* file ask for exactly that type. The registered `application/ai-catalog+json`
|
|
22
|
+
* is what the `Link`/`<link>` advertisements declare the document to be.
|
|
23
|
+
*/
|
|
24
|
+
export declare const AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
|
|
25
|
+
export declare const ARD_MANIFEST_PATH = "/.well-known/ard.json";
|
|
26
|
+
export declare const AI_CATALOG_TYPE = "application/ai-catalog+json";
|
|
27
|
+
/**
|
|
28
|
+
* Whether the site publishes a catalog: the feature is on, a `deployment.site`
|
|
29
|
+
* anchors the identifiers, and at least one entry exists. Every entry source
|
|
30
|
+
* is a config flag, so the answer needs no build output — the same gate the
|
|
31
|
+
* header rules, the `Link` header, and the head links read.
|
|
32
|
+
*/
|
|
33
|
+
export declare const hasAiCatalog: (config: ResolvedConfig) => boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The `.well-known` documents agent registries fetch cross-origin (browser
|
|
36
|
+
* agents, hosted registries reading through a page). Each needs
|
|
37
|
+
* `Access-Control-Allow-Origin: *` on the static surface; the MCP endpoint
|
|
38
|
+
* itself already sets it at runtime.
|
|
39
|
+
*/
|
|
40
|
+
export declare const crossOriginDiscoveryPaths: (config: ResolvedConfig) => string[];
|
|
41
|
+
/** The catalog document, or null when the site publishes none. */
|
|
42
|
+
export declare const buildAiCatalog: (config: ResolvedConfig, skills: readonly SkillArtifact[]) => string | null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the JSON docs API and its OpenAPI description are served. Base-less
|
|
3
|
+
* (like every route Blume emits); callers layer `deployment.base` on top.
|
|
4
|
+
* Under `/api/` alongside the Ask AI endpoint (`/api/ask`) so the namespace a
|
|
5
|
+
* Blume site reserves for live endpoints stays one prefix, and under its own
|
|
6
|
+
* `docs` segment so a search provider's proxy at `/api/search` never collides.
|
|
7
|
+
*/
|
|
8
|
+
export declare const OPENAPI_PATH = "/openapi.json";
|
|
9
|
+
export declare const API_BASE = "/api/docs";
|
|
10
|
+
export declare const API_PAGES_PATH = "/api/docs/pages.json";
|
|
11
|
+
export declare const API_PAGE_PATH = "/api/docs/pages/{route}.json";
|
|
12
|
+
export declare const API_NAVIGATION_PATH = "/api/docs/navigation.json";
|
|
13
|
+
export declare const API_SEARCH_PATH = "/api/docs/search";
|
|
14
|
+
/** The `pages/{route}.json` path segment for a route (`index` for home). */
|
|
15
|
+
export declare const pageParam: (route: string) => string;
|
|
16
|
+
/** The base-less served path of a route's per-page JSON document. */
|
|
17
|
+
export declare const pageJsonPath: (route: string) => string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
2
|
+
/**
|
|
3
|
+
* RFC 9727 API catalog: a linkset (RFC 9264) at `/.well-known/api-catalog`
|
|
4
|
+
* enumerating the APIs a publisher offers, so agents can discover them from
|
|
5
|
+
* the domain alone. Blume already knows the site's APIs — the configured
|
|
6
|
+
* OpenAPI/AsyncAPI references and the hosted MCP server — so the catalog is
|
|
7
|
+
* generated, never hand-written: one entry per API, anchored at its docs
|
|
8
|
+
* route (the RFC's own examples anchor on developer-portal pages), with
|
|
9
|
+
* `service-doc` pointing at the rendered reference and `service-desc` at the
|
|
10
|
+
* spec when it lives at a fetchable URL. The site's own JSON docs API is an
|
|
11
|
+
* entry too, described by its generated `/openapi.json`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const API_CATALOG_PATH = "/.well-known/api-catalog";
|
|
14
|
+
export declare const API_CATALOG_TYPE = "application/linkset+json";
|
|
15
|
+
/** Whether the site has anything to catalog — gates every emission surface. */
|
|
16
|
+
export declare const hasApiCatalog: (config: ResolvedConfig) => boolean;
|
|
17
|
+
/** The `application/linkset+json` document, or null when there are no APIs. */
|
|
18
|
+
export declare const buildApiCatalog: (config: ResolvedConfig) => string | null;
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
|
|
3
|
+
/**
|
|
4
|
+
* The `reasoning` levels the adapters accept: the AI SDK's top-level
|
|
5
|
+
* `reasoning` values minus `provider-default`, which is what omitting the
|
|
6
|
+
* option means.
|
|
7
|
+
*/
|
|
8
|
+
export declare const askReasoningLevels: readonly ["none", "minimal", "low", "medium", "high", "xhigh"];
|
|
9
|
+
/** How much the model reasons before answering (an adapter's `reasoning`). */
|
|
10
|
+
export type AskReasoning = (typeof askReasoningLevels)[number];
|
|
11
|
+
/**
|
|
12
|
+
* The AI SDK's `providerOptions` shape, forwarded to `streamText` verbatim:
|
|
13
|
+
* `{ [provider]: { [option]: value } }`. The escape hatch for model controls
|
|
14
|
+
* Blume doesn't name, so a new provider knob never needs a Blume field.
|
|
15
|
+
*/
|
|
16
|
+
export type AskProviderOptions = Record<string, Record<string, JsonValue>>;
|
|
17
|
+
/** The options every Ask AI adapter accepts. */
|
|
18
|
+
export interface AskAdapterOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Name of the env var holding the provider's API key. Each adapter has its
|
|
21
|
+
* own default; set this only to point at a different variable.
|
|
22
|
+
*/
|
|
23
|
+
apiKeyEnv?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Static request headers sent to the provider on every call — a
|
|
26
|
+
* caller-identifying header for a shared backend, for example. Values are
|
|
27
|
+
* written into the generated route as literals, so keep secrets in
|
|
28
|
+
* `apiKeyEnv` rather than here.
|
|
29
|
+
*/
|
|
30
|
+
headers?: Record<string, string>;
|
|
31
|
+
/**
|
|
32
|
+
* Options passed to `streamText` as its `providerOptions`, untouched, in the
|
|
33
|
+
* AI SDK's own shape (`{ openai: { textVerbosity: "low" } }`, say).
|
|
34
|
+
*/
|
|
35
|
+
providerOptions?: AskProviderOptions;
|
|
36
|
+
}
|
|
37
|
+
/** Options for {@link gateway}. */
|
|
38
|
+
export interface AskGatewayOptions extends AskAdapterOptions {
|
|
39
|
+
/** A `provider/model` id routed by the gateway. Defaults to `openai/gpt-5.5`. */
|
|
40
|
+
model?: string;
|
|
41
|
+
/**
|
|
42
|
+
* How much the model reasons before answering. Sent as the AI SDK's
|
|
43
|
+
* top-level `reasoning` option, which the gateway maps to the model's own
|
|
44
|
+
* control (OpenAI's `reasoning_effort`, for example); the model has to
|
|
45
|
+
* offer the level you pick. Omitted keeps the model's default.
|
|
46
|
+
*/
|
|
47
|
+
reasoning?: AskReasoning;
|
|
48
|
+
}
|
|
49
|
+
export type AskGatewayAdapter = AdapterDescriptor<"gateway", AskGatewayOptions>;
|
|
50
|
+
export declare const gatewayAdapterSchema: z.ZodObject<{
|
|
51
|
+
kind: z.ZodLiteral<"gateway">;
|
|
52
|
+
options: z.ZodObject<{
|
|
53
|
+
model: z.ZodDefault<z.ZodString>;
|
|
54
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
55
|
+
none: "none";
|
|
56
|
+
minimal: "minimal";
|
|
57
|
+
low: "low";
|
|
58
|
+
medium: "medium";
|
|
59
|
+
high: "high";
|
|
60
|
+
xhigh: "xhigh";
|
|
61
|
+
}>>;
|
|
62
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
63
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
64
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
65
|
+
}, z.core.$strict>;
|
|
66
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
67
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
68
|
+
}, z.core.$strict>;
|
|
69
|
+
/**
|
|
70
|
+
* Route Ask AI through the Vercel AI Gateway (the default). `model` is a
|
|
71
|
+
* `provider/model` string; the key is `AI_GATEWAY_API_KEY`, or Vercel's OIDC
|
|
72
|
+
* token when deployed there. Needs no provider SDK beyond the `ai` package
|
|
73
|
+
* Blume ships.
|
|
74
|
+
*/
|
|
75
|
+
export declare const gateway: (options?: AskGatewayOptions) => AskGatewayAdapter;
|
|
76
|
+
/** Options for {@link openrouter}. */
|
|
77
|
+
export interface AskOpenRouterOptions extends AskAdapterOptions {
|
|
78
|
+
/** The OpenRouter model id (`anthropic/claude-sonnet-4-5`). */
|
|
79
|
+
model: string;
|
|
80
|
+
/**
|
|
81
|
+
* How much the model reasons before answering. Set on the model as
|
|
82
|
+
* OpenRouter's `reasoning.effort`, because its provider ignores the AI
|
|
83
|
+
* SDK's call-level option. Omitted keeps the model's default.
|
|
84
|
+
*/
|
|
85
|
+
reasoning?: AskReasoning;
|
|
86
|
+
}
|
|
87
|
+
export type AskOpenRouterAdapter = AdapterDescriptor<"openrouter", AskOpenRouterOptions>;
|
|
88
|
+
export declare const openrouterAdapterSchema: z.ZodObject<{
|
|
89
|
+
kind: z.ZodLiteral<"openrouter">;
|
|
90
|
+
options: z.ZodObject<{
|
|
91
|
+
model: z.ZodString;
|
|
92
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
93
|
+
none: "none";
|
|
94
|
+
minimal: "minimal";
|
|
95
|
+
low: "low";
|
|
96
|
+
medium: "medium";
|
|
97
|
+
high: "high";
|
|
98
|
+
xhigh: "xhigh";
|
|
99
|
+
}>>;
|
|
100
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
101
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
102
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
103
|
+
}, z.core.$strict>;
|
|
104
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
105
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
106
|
+
}, z.core.$strict>;
|
|
107
|
+
/**
|
|
108
|
+
* Route Ask AI through OpenRouter. Reads `OPENROUTER_API_KEY` and needs
|
|
109
|
+
* `@openrouter/ai-sdk-provider` installed in the project.
|
|
110
|
+
*/
|
|
111
|
+
export declare const openrouter: (options: AskOpenRouterOptions) => AskOpenRouterAdapter;
|
|
112
|
+
/** Options for {@link llmgateway}. */
|
|
113
|
+
export interface AskLlmGatewayOptions extends AskAdapterOptions {
|
|
114
|
+
/** Overrides the preset endpoint (`https://api.llmgateway.io/v1`). */
|
|
115
|
+
baseUrl?: string;
|
|
116
|
+
/** The model id LLMGateway serves. */
|
|
117
|
+
model: string;
|
|
118
|
+
/**
|
|
119
|
+
* How much the model reasons before answering, sent in the request as
|
|
120
|
+
* `reasoning_effort`. Omitted keeps the model's default.
|
|
121
|
+
*/
|
|
122
|
+
reasoning?: AskReasoning;
|
|
123
|
+
}
|
|
124
|
+
export type AskLlmGatewayAdapter = AdapterDescriptor<"llmgateway", AskLlmGatewayOptions>;
|
|
125
|
+
export declare const llmgatewayAdapterSchema: z.ZodObject<{
|
|
126
|
+
kind: z.ZodLiteral<"llmgateway">;
|
|
127
|
+
options: z.ZodObject<{
|
|
128
|
+
baseUrl: z.ZodDefault<z.ZodURL>;
|
|
129
|
+
model: z.ZodString;
|
|
130
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
131
|
+
none: "none";
|
|
132
|
+
minimal: "minimal";
|
|
133
|
+
low: "low";
|
|
134
|
+
medium: "medium";
|
|
135
|
+
high: "high";
|
|
136
|
+
xhigh: "xhigh";
|
|
137
|
+
}>>;
|
|
138
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
139
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
140
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
141
|
+
}, z.core.$strict>;
|
|
142
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
143
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
144
|
+
}, z.core.$strict>;
|
|
145
|
+
/**
|
|
146
|
+
* Route Ask AI through LLMGateway's OpenAI-compatible endpoint. Reads
|
|
147
|
+
* `LLMGATEWAY_API_KEY` and needs `@ai-sdk/openai-compatible` installed.
|
|
148
|
+
*/
|
|
149
|
+
export declare const llmgateway: (options: AskLlmGatewayOptions) => AskLlmGatewayAdapter;
|
|
150
|
+
/**
|
|
151
|
+
* Options for {@link inkeep}. No `reasoning`: Inkeep runs its own QA pipeline
|
|
152
|
+
* behind an OpenAI-compatible endpoint with no reasoning control.
|
|
153
|
+
*/
|
|
154
|
+
export interface AskInkeepOptions extends AskAdapterOptions {
|
|
155
|
+
/** Overrides the preset endpoint (`https://api.inkeep.com/v1`). */
|
|
156
|
+
baseUrl?: string;
|
|
157
|
+
/** The Inkeep QA model id. */
|
|
158
|
+
model: string;
|
|
159
|
+
}
|
|
160
|
+
export type AskInkeepAdapter = AdapterDescriptor<"inkeep", AskInkeepOptions>;
|
|
161
|
+
export declare const inkeepAdapterSchema: z.ZodObject<{
|
|
162
|
+
kind: z.ZodLiteral<"inkeep">;
|
|
163
|
+
options: z.ZodObject<{
|
|
164
|
+
baseUrl: z.ZodDefault<z.ZodURL>;
|
|
165
|
+
model: z.ZodString;
|
|
166
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
167
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
168
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
169
|
+
}, z.core.$strict>;
|
|
170
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
171
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
172
|
+
}, z.core.$strict>;
|
|
173
|
+
/**
|
|
174
|
+
* Answer with Inkeep, which retrieves from the content indexed in its own
|
|
175
|
+
* dashboard, so Blume leaves it ungrounded and it takes no `reasoning`.
|
|
176
|
+
* Reads `INKEEP_API_KEY` and needs `@ai-sdk/openai-compatible` installed.
|
|
177
|
+
*/
|
|
178
|
+
export declare const inkeep: (options: AskInkeepOptions) => AskInkeepAdapter;
|
|
179
|
+
/** Options for {@link openaiCompatible}. */
|
|
180
|
+
export interface AskOpenAICompatibleOptions extends AskAdapterOptions {
|
|
181
|
+
/** Name of the env var holding the endpoint's API key. */
|
|
182
|
+
apiKeyEnv: string;
|
|
183
|
+
/** The endpoint's base URL (`https://my-gateway.example.com/v1`). */
|
|
184
|
+
baseUrl: string;
|
|
185
|
+
/** The model id the endpoint serves. */
|
|
186
|
+
model: string;
|
|
187
|
+
/** The provider name the AI SDK reports. Defaults to `openai-compatible`. */
|
|
188
|
+
name?: string;
|
|
189
|
+
/**
|
|
190
|
+
* How much the model reasons before answering, sent in the request as
|
|
191
|
+
* `reasoning_effort`, so the endpoint has to accept that parameter.
|
|
192
|
+
* Omitted keeps the model's default.
|
|
193
|
+
*/
|
|
194
|
+
reasoning?: AskReasoning;
|
|
195
|
+
}
|
|
196
|
+
export type AskOpenAICompatibleAdapter = AdapterDescriptor<"openai-compatible", AskOpenAICompatibleOptions>;
|
|
197
|
+
export declare const openaiCompatibleAdapterSchema: z.ZodObject<{
|
|
198
|
+
kind: z.ZodLiteral<"openai-compatible">;
|
|
199
|
+
options: z.ZodObject<{
|
|
200
|
+
apiKeyEnv: z.ZodString;
|
|
201
|
+
baseUrl: z.ZodURL;
|
|
202
|
+
model: z.ZodString;
|
|
203
|
+
name: z.ZodDefault<z.ZodString>;
|
|
204
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
205
|
+
none: "none";
|
|
206
|
+
minimal: "minimal";
|
|
207
|
+
low: "low";
|
|
208
|
+
medium: "medium";
|
|
209
|
+
high: "high";
|
|
210
|
+
xhigh: "xhigh";
|
|
211
|
+
}>>;
|
|
212
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
213
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
214
|
+
}, z.core.$strict>;
|
|
215
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
216
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
217
|
+
}, z.core.$strict>;
|
|
218
|
+
/**
|
|
219
|
+
* Route Ask AI through any OpenAI-compatible endpoint: supply its `baseUrl`,
|
|
220
|
+
* the `model` it serves, and the env var holding its key. Needs
|
|
221
|
+
* `@ai-sdk/openai-compatible` installed.
|
|
222
|
+
*/
|
|
223
|
+
export declare const openaiCompatible: (options: AskOpenAICompatibleOptions) => AskOpenAICompatibleAdapter;
|
|
224
|
+
/** Which backend answers Ask AI: the value of `gateway()`, `openrouter()`, … */
|
|
225
|
+
export type AskAdapter = AskGatewayAdapter | AskOpenRouterAdapter | AskLlmGatewayAdapter | AskInkeepAdapter | AskOpenAICompatibleAdapter;
|
|
226
|
+
/**
|
|
227
|
+
* Error params for `ai.ask`: a 1.x flat provider field (`model`, `apiKeyEnv`,
|
|
228
|
+
* `baseUrl`, `headers`, `reasoning`) names the adapter call it moves into —
|
|
229
|
+
* the one the object's `provider` picks, 1.x string or descriptor — instead
|
|
230
|
+
* of Zod's bare "Unrecognized key"; any other unknown key keeps its wording.
|
|
231
|
+
*/
|
|
232
|
+
export declare const askMovedFieldsHint: {
|
|
233
|
+
error: (issue: z.core.$ZodRawIssue) => string | undefined;
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* `ai.ask.provider`: the descriptor an adapter factory returned, validated
|
|
237
|
+
* against that adapter's own option schema. A value that isn't a descriptor
|
|
238
|
+
* at all (a 1.x provider name) names the factory that replaced it.
|
|
239
|
+
*/
|
|
240
|
+
export declare const askAdapterSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
241
|
+
kind: z.ZodLiteral<"gateway">;
|
|
242
|
+
options: z.ZodObject<{
|
|
243
|
+
model: z.ZodDefault<z.ZodString>;
|
|
244
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
245
|
+
none: "none";
|
|
246
|
+
minimal: "minimal";
|
|
247
|
+
low: "low";
|
|
248
|
+
medium: "medium";
|
|
249
|
+
high: "high";
|
|
250
|
+
xhigh: "xhigh";
|
|
251
|
+
}>>;
|
|
252
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
253
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
254
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
255
|
+
}, z.core.$strict>;
|
|
256
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
257
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
258
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
259
|
+
kind: z.ZodLiteral<"openrouter">;
|
|
260
|
+
options: z.ZodObject<{
|
|
261
|
+
model: z.ZodString;
|
|
262
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
263
|
+
none: "none";
|
|
264
|
+
minimal: "minimal";
|
|
265
|
+
low: "low";
|
|
266
|
+
medium: "medium";
|
|
267
|
+
high: "high";
|
|
268
|
+
xhigh: "xhigh";
|
|
269
|
+
}>>;
|
|
270
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
271
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
272
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
273
|
+
}, z.core.$strict>;
|
|
274
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
275
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
276
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
277
|
+
kind: z.ZodLiteral<"llmgateway">;
|
|
278
|
+
options: z.ZodObject<{
|
|
279
|
+
baseUrl: z.ZodDefault<z.ZodURL>;
|
|
280
|
+
model: z.ZodString;
|
|
281
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
282
|
+
none: "none";
|
|
283
|
+
minimal: "minimal";
|
|
284
|
+
low: "low";
|
|
285
|
+
medium: "medium";
|
|
286
|
+
high: "high";
|
|
287
|
+
xhigh: "xhigh";
|
|
288
|
+
}>>;
|
|
289
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
290
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
291
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
292
|
+
}, z.core.$strict>;
|
|
293
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
294
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
295
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
296
|
+
kind: z.ZodLiteral<"inkeep">;
|
|
297
|
+
options: z.ZodObject<{
|
|
298
|
+
baseUrl: z.ZodDefault<z.ZodURL>;
|
|
299
|
+
model: z.ZodString;
|
|
300
|
+
apiKeyEnv: z.ZodDefault<z.ZodString>;
|
|
301
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
302
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
303
|
+
}, z.core.$strict>;
|
|
304
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
305
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
306
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
307
|
+
kind: z.ZodLiteral<"openai-compatible">;
|
|
308
|
+
options: z.ZodObject<{
|
|
309
|
+
apiKeyEnv: z.ZodString;
|
|
310
|
+
baseUrl: z.ZodURL;
|
|
311
|
+
model: z.ZodString;
|
|
312
|
+
name: z.ZodDefault<z.ZodString>;
|
|
313
|
+
reasoning: z.ZodOptional<z.ZodEnum<{
|
|
314
|
+
none: "none";
|
|
315
|
+
minimal: "minimal";
|
|
316
|
+
low: "low";
|
|
317
|
+
medium: "medium";
|
|
318
|
+
high: "high";
|
|
319
|
+
xhigh: "xhigh";
|
|
320
|
+
}>>;
|
|
321
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
322
|
+
providerOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
|
|
323
|
+
}, z.core.$strict>;
|
|
324
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
325
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
326
|
+
}, z.core.$strict>], "kind">;
|
|
327
|
+
/** A resolved (post-defaults) `ai.ask.provider` descriptor. */
|
|
328
|
+
export type AskAdapterConfig = z.output<typeof askAdapterSchema>;
|
|
329
|
+
export type AskAdapterKind = AskAdapterConfig["kind"];
|
|
330
|
+
/** The provider when `ai.ask.provider` is unset: the gateway with its defaults. */
|
|
331
|
+
export declare const DEFAULT_ASK_PROVIDER: AskAdapter;
|
|
332
|
+
/** The route fragments an adapter contributes to `askEndpointTemplate`. */
|
|
333
|
+
export interface AskBackendTemplate {
|
|
334
|
+
/**
|
|
335
|
+
* Extra `streamText` fields as `key: value` source lines: the adapter's
|
|
336
|
+
* reasoning mapping (when it is a call option) and `providerOptions`.
|
|
337
|
+
*/
|
|
338
|
+
fields: string[];
|
|
339
|
+
/** Import lines after the shared `astro` and `astro:env/server` ones. */
|
|
340
|
+
imports: string[];
|
|
341
|
+
/**
|
|
342
|
+
* The up-front credential guard: a statement that returns a 503, since the
|
|
343
|
+
* endpoint exists but can't answer until the deployment sets its key.
|
|
344
|
+
*/
|
|
345
|
+
keyCheck: string;
|
|
346
|
+
/** The `model:` expression passed to `streamText`. */
|
|
347
|
+
model: string;
|
|
348
|
+
/** Module-level provider setup (the provider factory call). */
|
|
349
|
+
setup: string;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* What the endpoint template and the diagnostics read from an adapter beyond
|
|
353
|
+
* the descriptor itself (`kind`, `requiredSecrets`, `runtimeDeps` travel on
|
|
354
|
+
* the descriptor; `generate`, `eject`, the required-secrets check, and the
|
|
355
|
+
* runtime-dependency manifest read those directly).
|
|
356
|
+
*/
|
|
357
|
+
export interface AskBackend {
|
|
358
|
+
/** Whether Blume grounds answers in the docs (Inkeep retrieves itself). */
|
|
359
|
+
grounded: boolean;
|
|
360
|
+
kind: AskAdapterKind;
|
|
361
|
+
/** Human-readable adapter name for diagnostics ("AI Gateway"). */
|
|
362
|
+
label: string;
|
|
363
|
+
/** Appended to the missing-secret warning (an alternative credential, say). */
|
|
364
|
+
secretNote?: string;
|
|
365
|
+
template: AskBackendTemplate;
|
|
366
|
+
}
|
|
367
|
+
/** Resolve a parsed `ai.ask.provider` descriptor into its backend. */
|
|
368
|
+
export declare const resolveAskBackend: (provider?: AskAdapterConfig) => AskBackend;
|
|
@@ -126,7 +126,7 @@ export interface DownlevelWalk {
|
|
|
126
126
|
registry: Record<string, ComponentMarkdown>;
|
|
127
127
|
source: string;
|
|
128
128
|
}
|
|
129
|
-
/** The serializer registry for a site: built-ins under a user's `
|
|
129
|
+
/** The serializer registry for a site: built-ins under a user's `agents.markdownComponents`. */
|
|
130
130
|
export declare const componentRegistry: (components?: Record<string, ComponentMarkdown>) => Record<string, ComponentMarkdown>;
|
|
131
131
|
/**
|
|
132
132
|
* Walk the tree collecting replacements. A replaced element's subtree is
|
|
@@ -145,7 +145,7 @@ export declare const downlevelComponentNode: (node: MdastNode, walk: DownlevelWa
|
|
|
145
145
|
* with no supported components — and sources Satteri can't parse as MDX, e.g.
|
|
146
146
|
* plain `.md` with literal `<`/`{` — are returned byte-identical.
|
|
147
147
|
*
|
|
148
|
-
* `components` adds user serializers from `
|
|
148
|
+
* `components` adds user serializers from `agents.markdownComponents`, layered
|
|
149
149
|
* over the built-ins: a same-name entry replaces the built-in serializer, and
|
|
150
150
|
* one that always returns `null` effectively opts that component out.
|
|
151
151
|
*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ask AI provider adapters for `blume.config.ts`:
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { defineConfig } from "blume";
|
|
6
|
+
* import { openrouter } from "blume/ai";
|
|
7
|
+
*
|
|
8
|
+
* export default defineConfig({
|
|
9
|
+
* ai: {
|
|
10
|
+
* ask: {
|
|
11
|
+
* enabled: true,
|
|
12
|
+
* provider: openrouter({ model: "anthropic/claude-sonnet-4-5" }),
|
|
13
|
+
* },
|
|
14
|
+
* },
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Each factory returns a plain descriptor (see `core/adapter.ts`) that the
|
|
19
|
+
* schema validates and the generated `/api/ask` route inlines as literals;
|
|
20
|
+
* nothing here runs at request time.
|
|
21
|
+
*/
|
|
22
|
+
export { gateway, inkeep, llmgateway, openaiCompatible, openrouter, } from "./ask.ts";
|
|
23
|
+
export type { AskAdapter, AskAdapterOptions, AskGatewayAdapter, AskGatewayOptions, AskInkeepAdapter, AskInkeepOptions, AskLlmGatewayAdapter, AskLlmGatewayOptions, AskOpenAICompatibleAdapter, AskOpenAICompatibleOptions, AskOpenRouterAdapter, AskOpenRouterOptions, AskProviderOptions, AskReasoning, } from "./ask.ts";
|
|
24
|
+
export type { AdapterDescriptor } from "../core/adapter.ts";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
2
|
+
/**
|
|
3
|
+
* The homepage `Link` response header (RFC 8288) — agent discovery for the
|
|
4
|
+
* machine-readable surface Blume already publishes. Agents probing a site read
|
|
5
|
+
* this header off `GET /` to find the resources without scraping HTML:
|
|
6
|
+
* `agent-readability.json` and `llms.txt` as `rel="describedby"`, the OpenAPI
|
|
7
|
+
* description of the JSON docs API as `rel="service-desc"`, and the
|
|
8
|
+
* homepage's raw-Markdown mirror as `rel="alternate"` (only when the home
|
|
9
|
+
* route is a content page — a user landing page has no mirror). Every rel
|
|
10
|
+
* value is IANA-registered, which agent-readiness checkers require.
|
|
11
|
+
*
|
|
12
|
+
* The header is homepage-only by design: the root response is what agents
|
|
13
|
+
* probe, and `agent-readability.json` indexes the rest of the surface (the
|
|
14
|
+
* per-route Markdown pattern, MCP, feeds) far better than per-page headers
|
|
15
|
+
* could. An agent that enters on a deep page (a search result, a shared link)
|
|
16
|
+
* never sees this header at all — that path is covered in the HTML instead:
|
|
17
|
+
* every page's `<head>` carries the same `describedby` links plus its own
|
|
18
|
+
* Markdown mirror as an `alternate` (the `DiscoveryLinks.astro` partial every
|
|
19
|
+
* layout renders), which also reaches hosts where Blume can't set response
|
|
20
|
+
* headers. Targets are
|
|
21
|
+
* root-relative under `deployment.base` — RFC 8288 resolves them against the
|
|
22
|
+
* request URL. Returns null when nothing is advertisable.
|
|
23
|
+
*/
|
|
24
|
+
export declare const buildHomeLinkHeader: (config: ResolvedConfig, routePaths: readonly string[]) => string | null;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
import type { SkillArtifact } from "./skills.ts";
|
|
3
|
+
/** Inputs only the build has: the published skills, collected once per build. */
|
|
4
|
+
export interface LlmsIndexOptions {
|
|
5
|
+
/**
|
|
6
|
+
* The Agent Skills the build publishes under `/.well-known/agent-skills/`,
|
|
7
|
+
* listed in their own section with each skill's description — which is
|
|
8
|
+
* where a skill says when to use it. Absent (empty) for the homepage
|
|
9
|
+
* Markdown mirror, which is synthesized before the skills are collected.
|
|
10
|
+
*/
|
|
11
|
+
skills?: readonly SkillArtifact[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build the compact `llms.txt` index: title and summary, then the sidebar tree
|
|
15
|
+
* rendered as sections — group labels become headings, pages become link lists —
|
|
16
|
+
* so the file mirrors how the docs are organized rather than one flat blob.
|
|
17
|
+
* Also serves as the homepage's synthesized Markdown mirror when the home
|
|
18
|
+
* route is a landing page (see `buildRawMarkdown`).
|
|
19
|
+
*/
|
|
20
|
+
export declare const buildLlmsIndex: (project: BlumeProject, options?: LlmsIndexOptions) => string;
|
|
21
|
+
/** Build both LLM text artifacts for a project. */
|
|
22
|
+
export declare const buildLlmsFiles: (project: BlumeProject, options?: LlmsIndexOptions) => Promise<{
|
|
23
|
+
index: string;
|
|
24
|
+
full: string;
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
/** One route's raw-Markdown variants. */
|
|
3
|
+
export interface RawMarkdownEntry {
|
|
4
|
+
/**
|
|
5
|
+
* The agent-facing Markdown served at `/<route>.md`: supported components
|
|
6
|
+
* downleveled to plain Markdown (`<TypeTable>` → table, `<Callout>` →
|
|
7
|
+
* blockquote, …). Present only when downleveling changed something, so
|
|
8
|
+
* component-free pages aren't stored twice.
|
|
9
|
+
*/
|
|
10
|
+
md?: string;
|
|
11
|
+
/** The original source, served verbatim at `/<route>.mdx`. */
|
|
12
|
+
mdx: string;
|
|
13
|
+
}
|
|
14
|
+
/** The Markdown an agent should read for a route. */
|
|
15
|
+
export declare const agentMarkdown: (entry: RawMarkdownEntry) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Estimated token count of a Markdown document, for the `x-markdown-tokens`
|
|
18
|
+
* response header (the convention Cloudflare's Markdown for Agents ships; the
|
|
19
|
+
* tokenizer is unspecified there too, so this is the common ~4-characters-
|
|
20
|
+
* per-token estimate). Kept in sync with the inline computation in
|
|
21
|
+
* `rawMarkdownEndpointTemplate`, which can't import build-time code.
|
|
22
|
+
*/
|
|
23
|
+
export declare const markdownTokenCount: (text: string) => number;
|
|
24
|
+
/**
|
|
25
|
+
* Map every route to its raw source Markdown. Powers the `<route>.md` and
|
|
26
|
+
* `<route>.mdx` endpoints: `.mdx` serves the original source so tools can see
|
|
27
|
+
* exactly what the author wrote, while `.md` downlevels supported components
|
|
28
|
+
* to plain Markdown for consumers that can't interpret JSX. `<Visibility>`
|
|
29
|
+
* audiences are resolved for agents in both variants: web-only content is
|
|
30
|
+
* removed, agents-only unwrapped. Relative image references are rewritten to
|
|
31
|
+
* their served `/blume-assets/content/…` URLs in both variants too — an agent
|
|
32
|
+
* fetches these endpoints by URL, where a colocated `./diagram.png` resolves
|
|
33
|
+
* to nothing — and relative page links to the routes they mean, as the
|
|
34
|
+
* rendered page's are (see `relative-links.ts`).
|
|
35
|
+
*/
|
|
36
|
+
export declare const buildRawMarkdown: (project: BlumeProject) => Promise<Record<string, RawMarkdownEntry>>;
|
|
37
|
+
/**
|
|
38
|
+
* Every route path with a raw-Markdown mirror: the manifest routes, plus the
|
|
39
|
+
* homepage when its mirror is the synthesized llms.txt fallback and the
|
|
40
|
+
* generated changelog index (see `buildRawMarkdown`). This is the route list the negotiation surfaces (dev
|
|
41
|
+
* middleware, Vercel routing config) and the homepage `Link` header build
|
|
42
|
+
* from, so `Accept: text/markdown` on `/` resolves even when the homepage is
|
|
43
|
+
* a landing page.
|
|
44
|
+
*/
|
|
45
|
+
export declare const markdownRoutePaths: (project: BlumeProject) => string[];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { McpToolMeta } from "./tools.ts";
|
|
2
|
+
/** Inputs needed to describe the MCP server in discovery documents. */
|
|
3
|
+
export interface McpDiscoveryInput {
|
|
4
|
+
/** Normalized `deployment.base` (`""` or `/seg`); the route is base-less. */
|
|
5
|
+
base: string;
|
|
6
|
+
name: string;
|
|
7
|
+
route: string;
|
|
8
|
+
site: string | null;
|
|
9
|
+
version: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The `/.well-known/mcp.json` discovery document: the minimal pointer agents use
|
|
13
|
+
* to find the server and its transport.
|
|
14
|
+
*/
|
|
15
|
+
export declare const buildMcpDiscovery: (input: McpDiscoveryInput) => {
|
|
16
|
+
servers: {
|
|
17
|
+
name: string;
|
|
18
|
+
transport: string;
|
|
19
|
+
url: string;
|
|
20
|
+
}[];
|
|
21
|
+
};
|
|
22
|
+
export declare const asciiSlugify: (text: string) => string;
|
|
23
|
+
/**
|
|
24
|
+
* The `/.well-known/mcp/server-card.json` document. The core follows the
|
|
25
|
+
* SEP-2127 Server Card extension schema (`$schema`, reverse-DNS `name`,
|
|
26
|
+
* `remotes` — which the schema requires to be absolute, so it appears only
|
|
27
|
+
* when a `site` is configured). Alongside it ride initialize-shaped compat
|
|
28
|
+
* fields (`serverInfo`, `capabilities`, `transports`) for scanners built
|
|
29
|
+
* against the SEP's earlier revision, plus Blume's advertised tool set —
|
|
30
|
+
* schema-legal extras (`additionalProperties` is open), and the tool list is
|
|
31
|
+
* genuinely static for a docs server, unlike the dynamic servers the spec
|
|
32
|
+
* excludes primitives for. Full input schemas are served live via
|
|
33
|
+
* `tools/list`.
|
|
34
|
+
*/
|
|
35
|
+
export interface McpServerCard {
|
|
36
|
+
$schema: string;
|
|
37
|
+
capabilities: {
|
|
38
|
+
resources: {
|
|
39
|
+
listChanged: boolean;
|
|
40
|
+
subscribe: boolean;
|
|
41
|
+
};
|
|
42
|
+
tools: {
|
|
43
|
+
listChanged: boolean;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
description: string;
|
|
47
|
+
name: string;
|
|
48
|
+
/** Absolute endpoints only — present when a `site` is configured. */
|
|
49
|
+
remotes?: {
|
|
50
|
+
type: string;
|
|
51
|
+
url: string;
|
|
52
|
+
}[];
|
|
53
|
+
serverInfo: {
|
|
54
|
+
name: string;
|
|
55
|
+
version: string;
|
|
56
|
+
};
|
|
57
|
+
title: string;
|
|
58
|
+
tools: McpToolMeta[];
|
|
59
|
+
transport: string;
|
|
60
|
+
transports: {
|
|
61
|
+
endpoint: string;
|
|
62
|
+
type: string;
|
|
63
|
+
}[];
|
|
64
|
+
url: string;
|
|
65
|
+
version: string;
|
|
66
|
+
websiteUrl?: string;
|
|
67
|
+
}
|
|
68
|
+
export declare const buildMcpServerCard: (input: McpDiscoveryInput) => McpServerCard;
|