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
|
@@ -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 assistantReasoningLevels: readonly ["none", "minimal", "low", "medium", "high", "xhigh"];
|
|
9
|
+
/** How much the model reasons before answering (an adapter's `reasoning`). */
|
|
10
|
+
export type AssistantReasoning = (typeof assistantReasoningLevels)[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 AssistantProviderOptions = Record<string, Record<string, JsonValue>>;
|
|
17
|
+
/** The options every assistant adapter accepts. */
|
|
18
|
+
export interface AssistantAdapterOptions {
|
|
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?: AssistantProviderOptions;
|
|
36
|
+
}
|
|
37
|
+
/** Options for {@link gateway}. */
|
|
38
|
+
export interface AssistantGatewayOptions extends AssistantAdapterOptions {
|
|
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?: AssistantReasoning;
|
|
48
|
+
}
|
|
49
|
+
export type AssistantGatewayAdapter = AdapterDescriptor<"gateway", AssistantGatewayOptions>;
|
|
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 the assistant 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?: AssistantGatewayOptions) => AssistantGatewayAdapter;
|
|
76
|
+
/** Options for {@link openrouter}. */
|
|
77
|
+
export interface AssistantOpenRouterOptions extends AssistantAdapterOptions {
|
|
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?: AssistantReasoning;
|
|
86
|
+
}
|
|
87
|
+
export type AssistantOpenRouterAdapter = AdapterDescriptor<"openrouter", AssistantOpenRouterOptions>;
|
|
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 the assistant through OpenRouter. Reads `OPENROUTER_API_KEY` and needs
|
|
109
|
+
* `@openrouter/ai-sdk-provider` installed in the project.
|
|
110
|
+
*/
|
|
111
|
+
export declare const openrouter: (options: AssistantOpenRouterOptions) => AssistantOpenRouterAdapter;
|
|
112
|
+
/** Options for {@link llmgateway}. */
|
|
113
|
+
export interface AssistantLlmGatewayOptions extends AssistantAdapterOptions {
|
|
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?: AssistantReasoning;
|
|
123
|
+
}
|
|
124
|
+
export type AssistantLlmGatewayAdapter = AdapterDescriptor<"llmgateway", AssistantLlmGatewayOptions>;
|
|
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 the assistant 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: AssistantLlmGatewayOptions) => AssistantLlmGatewayAdapter;
|
|
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 AssistantInkeepOptions extends AssistantAdapterOptions {
|
|
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 AssistantInkeepAdapter = AdapterDescriptor<"inkeep", AssistantInkeepOptions>;
|
|
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: AssistantInkeepOptions) => AssistantInkeepAdapter;
|
|
179
|
+
/** Options for {@link openaiCompatible}. */
|
|
180
|
+
export interface AssistantOpenAICompatibleOptions extends AssistantAdapterOptions {
|
|
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?: AssistantReasoning;
|
|
195
|
+
}
|
|
196
|
+
export type AssistantOpenAICompatibleAdapter = AdapterDescriptor<"openai-compatible", AssistantOpenAICompatibleOptions>;
|
|
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 the assistant 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: AssistantOpenAICompatibleOptions) => AssistantOpenAICompatibleAdapter;
|
|
224
|
+
/** Which backend answers the assistant: the value of `gateway()`, `openrouter()`, … */
|
|
225
|
+
export type AssistantAdapter = AssistantGatewayAdapter | AssistantOpenRouterAdapter | AssistantLlmGatewayAdapter | AssistantInkeepAdapter | AssistantOpenAICompatibleAdapter;
|
|
226
|
+
/**
|
|
227
|
+
* Error params for `ai.assistant`: 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 assistantMovedFieldsHint: {
|
|
233
|
+
error: (issue: z.core.$ZodRawIssue) => string | undefined;
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* `ai.assistant.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 assistantAdapterSchema: 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.assistant.provider` descriptor. */
|
|
328
|
+
export type AssistantAdapterConfig = z.output<typeof assistantAdapterSchema>;
|
|
329
|
+
export type AssistantAdapterKind = AssistantAdapterConfig["kind"];
|
|
330
|
+
/** The provider when `ai.assistant.provider` is unset: the gateway with its defaults. */
|
|
331
|
+
export declare const DEFAULT_ASSISTANT_PROVIDER: AssistantAdapter;
|
|
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: AssistantAdapterKind;
|
|
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.assistant.provider` descriptor into its backend. */
|
|
368
|
+
export declare const resolveAskBackend: (provider?: AssistantAdapterConfig) => 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
|
+
* Assistant 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
|
+
* assistant: {
|
|
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 { AssistantAdapter, AssistantAdapterOptions, AssistantGatewayAdapter, AssistantGatewayOptions, AssistantInkeepAdapter, AssistantInkeepOptions, AssistantLlmGatewayAdapter, AssistantLlmGatewayOptions, AssistantOpenAICompatibleAdapter, AssistantOpenAICompatibleOptions, AssistantOpenRouterAdapter, AssistantOpenRouterOptions, AssistantProviderOptions, AssistantReasoning, } 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;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static metadata for the MCP tools Blume exposes. Shared by the server (which
|
|
3
|
+
* pairs each entry with a Zod input schema and handler) and the `.well-known`
|
|
4
|
+
* discovery documents, so tool names and descriptions never drift between the
|
|
5
|
+
* live server and its advertised capabilities.
|
|
6
|
+
*/
|
|
7
|
+
export interface McpToolMeta {
|
|
8
|
+
annotations: {
|
|
9
|
+
openWorldHint: boolean;
|
|
10
|
+
readOnlyHint: boolean;
|
|
11
|
+
};
|
|
12
|
+
description: string;
|
|
13
|
+
name: string;
|
|
14
|
+
title: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const MCP_TOOLS: McpToolMeta[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { OpenApiData } from "../openapi/model.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Agent-facing Markdown for the components a generated reference page is made
|
|
4
|
+
* of: `<Operation>`, `<ApiTagOperations>` and `<ApiOverview>`.
|
|
5
|
+
*
|
|
6
|
+
* `render-mdx.ts` builds each reference page as the operation's description in
|
|
7
|
+
* the body plus one of these components, deliberately: the structured UI is the
|
|
8
|
+
* component's job, and the prose stays Markdown so it indexes. That split is
|
|
9
|
+
* right for the rendered page and lossy everywhere else — `<route>.md`,
|
|
10
|
+
* llms-full.txt, MCP `get_page` and the assistant corpus all downlevel components
|
|
11
|
+
* to Markdown, and these three had no serializer, so an operation page reached
|
|
12
|
+
* an agent as its description followed by a bare tag. On a site whose reference
|
|
13
|
+
* is most of the corpus, that is most of the corpus: measured on one 449-page
|
|
14
|
+
* site, 266 pages and 266 raw `<Operation>` in llms-full.txt, so "which
|
|
15
|
+
* endpoint do I call?" had no answer anywhere in the agent surface.
|
|
16
|
+
*
|
|
17
|
+
* Each serializer emits what its component renders and no more: the endpoint
|
|
18
|
+
* in the spec kind's own notation ({@link operationSignature}), the version and
|
|
19
|
+
* addresses the overview shows ({@link specAddresses}), the linked list a tag
|
|
20
|
+
* section shows. Parameters, schemas and responses are deliberately left out:
|
|
21
|
+
* those are `operation-model.ts` plus each component's own preparation, and a
|
|
22
|
+
* second implementation here would be free to disagree with the page. The
|
|
23
|
+
* endpoint and what it does is the part that was missing altogether.
|
|
24
|
+
*
|
|
25
|
+
* `specs` is the parsed `blume:openapi` data — empty when the project has no
|
|
26
|
+
* API reference, in which case every serializer declines.
|
|
27
|
+
*/
|
|
28
|
+
export declare const openapiComponentSerializers: (specs: OpenApiData) => {
|
|
29
|
+
/**
|
|
30
|
+
* The spec-level block at the top of the overview page: its version and
|
|
31
|
+
* where the API lives. The tag sections that follow are real Markdown
|
|
32
|
+
* headings over `<ApiTagOperations>`, so they downlevel on their own.
|
|
33
|
+
*/
|
|
34
|
+
ApiOverview: ({ props }: import("./component-markdown.ts").ComponentMarkdownContext) => string | null;
|
|
35
|
+
/** One tag's operations, mirroring the list the rendered page shows. */
|
|
36
|
+
ApiTagOperations: ({ props }: import("./component-markdown.ts").ComponentMarkdownContext) => string | null;
|
|
37
|
+
/**
|
|
38
|
+
* One operation. Declines when the spec carries no such key — Blume's own
|
|
39
|
+
* fallback, which leaves the JSX visible rather than publishing a page that
|
|
40
|
+
* silently lost its endpoint.
|
|
41
|
+
*/
|
|
42
|
+
Operation: ({ props }: import("./component-markdown.ts").ComponentMarkdownContext) => string | null;
|
|
43
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Relative page links on the agent surfaces — the `.md`/`.mdx` mirrors,
|
|
4
|
+
* llms-full.txt, MCP `get_page` and `resources/read`. An agent resolves
|
|
5
|
+
* `[Install](./install)` against the URL it fetched (`/guides.md`), so the
|
|
6
|
+
* link lands on `/install`; the rendered page rewrites it to the route it
|
|
7
|
+
* means (`markdown/relative-links.ts`), and the Markdown an agent reads gets
|
|
8
|
+
* the same rewrite from the same resolver (`resolveRelativeHref`), so both
|
|
9
|
+
* point at one page. Inline links and reference definitions are rewritten;
|
|
10
|
+
* fenced and inline code, images, and anything not a relative page link are
|
|
11
|
+
* left as written.
|
|
12
|
+
*/
|
|
13
|
+
/** The page a Markdown text was written for. */
|
|
14
|
+
export interface LinkedPage {
|
|
15
|
+
route: string;
|
|
16
|
+
sourcePath?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Rewrite a page's relative page links to the routes they mean. */
|
|
19
|
+
export type RelativeLinkRewriter = (text: string, page: LinkedPage) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Build the rewriter for a project: the file → route lookup a `.md`/`.mdx`
|
|
22
|
+
* link resolves through is built once. A file shared by every locale
|
|
23
|
+
* publishes once per locale, and the default locale's route stands for it;
|
|
24
|
+
* fallback copies render another locale's file, so they never stand for one.
|
|
25
|
+
*/
|
|
26
|
+
export declare const relativeLinkRewriter: (project: BlumeProject) => RelativeLinkRewriter;
|