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,259 @@
|
|
|
1
|
+
import { apiNamePhrase } from "../core/api-name.ts";
|
|
2
|
+
import { normalizeBasePath, withBasePath } from "../core/base-path.ts";
|
|
3
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
4
|
+
import { absoluteUrl } from "../core/site-url.ts";
|
|
5
|
+
import { resolveReferences } from "../openapi/references.ts";
|
|
6
|
+
import { API_CATALOG_PATH, hasApiCatalog } from "./api-catalog.ts";
|
|
7
|
+
import { OPENAPI_PATH } from "./api/paths.ts";
|
|
8
|
+
import { asciiSlugify } from "./mcp/discovery.ts";
|
|
9
|
+
import { AGENT_SKILLS_DIR } from "./skills.ts";
|
|
10
|
+
import type { SkillArtifact } from "./skills.ts";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The AI Catalog (Agent-Card/ai-catalog data model, `specVersion` 1.0) at
|
|
14
|
+
* `/.well-known/ai-catalog.json`, which is also the Agentic Resource
|
|
15
|
+
* Discovery (ARD) manifest: one entry per agent-facing resource the site
|
|
16
|
+
* publishes, each an `urn:air:<host>:<namespace>:<name>` identifier, a
|
|
17
|
+
* display name, the artifact's media type, a URL, and the
|
|
18
|
+
* `representativeQueries` registries embed for semantic search. Like the
|
|
19
|
+
* RFC 9727 catalog next to it, everything is derived from `blume.config.ts`
|
|
20
|
+
* and the build's published skills — nothing is hand-written.
|
|
21
|
+
*
|
|
22
|
+
* ARD v0.91 moved its manifest to `/.well-known/ard.json` and calls
|
|
23
|
+
* `ai-catalog.json` the predecessor path that consumers only *may* consult,
|
|
24
|
+
* while the ai-catalog spec and today's agent-readiness scanners key on
|
|
25
|
+
* `ai-catalog.json`. The ARD manifest is just an `entries` array (other
|
|
26
|
+
* members are ignored), so the one document is written to both paths.
|
|
27
|
+
*
|
|
28
|
+
* Served as plain `application/json`: the `.json` extension gets it from
|
|
29
|
+
* every static host with no header rule, and the scanners that gate on the
|
|
30
|
+
* file ask for exactly that type. The registered `application/ai-catalog+json`
|
|
31
|
+
* is what the `Link`/`<link>` advertisements declare the document to be.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
export const AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
|
|
35
|
+
export const ARD_MANIFEST_PATH = "/.well-known/ard.json";
|
|
36
|
+
export const AI_CATALOG_TYPE = "application/ai-catalog+json";
|
|
37
|
+
const SPEC_VERSION = "1.0";
|
|
38
|
+
|
|
39
|
+
/** One catalog entry, restricted to the terms Blume emits. */
|
|
40
|
+
interface CatalogEntry {
|
|
41
|
+
identifier: string;
|
|
42
|
+
displayName: string;
|
|
43
|
+
type: string;
|
|
44
|
+
url: string;
|
|
45
|
+
description?: string;
|
|
46
|
+
capabilities?: string[];
|
|
47
|
+
representativeQueries: string[];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** An entry before its identifier and queries are resolved against the host. */
|
|
51
|
+
interface EntrySeed {
|
|
52
|
+
/** `<namespace>:<name>` — the identifier's tail and the `queries` key. */
|
|
53
|
+
key: string;
|
|
54
|
+
displayName: string;
|
|
55
|
+
type: string;
|
|
56
|
+
url: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
capabilities?: string[];
|
|
59
|
+
/** Generated queries, replaced wholesale by a configured `queries[key]`. */
|
|
60
|
+
queries: string[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const REFERENCE_KIND_LABEL = {
|
|
64
|
+
asyncapi: "AsyncAPI",
|
|
65
|
+
graphql: "GraphQL",
|
|
66
|
+
openapi: "OpenAPI",
|
|
67
|
+
scalar: "API",
|
|
68
|
+
} as const;
|
|
69
|
+
|
|
70
|
+
/** The `urn:air` publisher: the configured site's hostname. */
|
|
71
|
+
const publisherHost = (site: string): string => new URL(site).hostname;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Whether the site publishes a catalog: the feature is on, a `deployment.site`
|
|
75
|
+
* anchors the identifiers, and at least one entry exists. Every entry source
|
|
76
|
+
* is a config flag, so the answer needs no build output — the same gate the
|
|
77
|
+
* header rules, the `Link` header, and the head links read.
|
|
78
|
+
*/
|
|
79
|
+
export const hasAiCatalog = (config: ResolvedConfig): boolean =>
|
|
80
|
+
config.agents.catalog.enabled &&
|
|
81
|
+
Boolean(config.deployment.options.site) &&
|
|
82
|
+
(config.agents.mcp.enabled ||
|
|
83
|
+
config.agents.api ||
|
|
84
|
+
config.agents.llmsTxt.enabled ||
|
|
85
|
+
Boolean(config.agents.skills) ||
|
|
86
|
+
resolveReferences(config).length > 0);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The `.well-known` documents agent registries fetch cross-origin (browser
|
|
90
|
+
* agents, hosted registries reading through a page). Each needs
|
|
91
|
+
* `Access-Control-Allow-Origin: *` on the static surface; the MCP endpoint
|
|
92
|
+
* itself already sets it at runtime.
|
|
93
|
+
*/
|
|
94
|
+
export const crossOriginDiscoveryPaths = (config: ResolvedConfig): string[] => {
|
|
95
|
+
const paths: string[] = [];
|
|
96
|
+
if (hasAiCatalog(config)) {
|
|
97
|
+
paths.push(AI_CATALOG_PATH, ARD_MANIFEST_PATH);
|
|
98
|
+
}
|
|
99
|
+
if (hasApiCatalog(config)) {
|
|
100
|
+
paths.push(API_CATALOG_PATH);
|
|
101
|
+
}
|
|
102
|
+
if (config.agents.mcp.enabled) {
|
|
103
|
+
paths.push("/.well-known/mcp.json", "/.well-known/mcp/server-card.json");
|
|
104
|
+
}
|
|
105
|
+
return paths;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/** A site title that already names its docs: "Acme Docs", "Acme Documentation". */
|
|
109
|
+
const NAMES_DOCS = /\b(?:docs|documentation)$/iu;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The docs as "the ___" in generated prose: the title followed by `noun`,
|
|
113
|
+
* unless the title already ends in "Docs" or "Documentation" — so "Acme"
|
|
114
|
+
* reads "the Acme documentation" and "Acme Docs" reads "the Acme Docs", not
|
|
115
|
+
* "the Acme Docs docs".
|
|
116
|
+
*/
|
|
117
|
+
const docsPhrase = (title: string, noun: "docs" | "documentation"): string =>
|
|
118
|
+
NAMES_DOCS.test(title.trim()) ? `the ${title}` : `the ${title} ${noun}`;
|
|
119
|
+
|
|
120
|
+
const entrySeeds = (
|
|
121
|
+
config: ResolvedConfig,
|
|
122
|
+
skills: readonly SkillArtifact[],
|
|
123
|
+
abs: (path: string) => string
|
|
124
|
+
): EntrySeed[] => {
|
|
125
|
+
const { title } = config;
|
|
126
|
+
const documentation = docsPhrase(title, "documentation");
|
|
127
|
+
const docs = docsPhrase(title, "docs");
|
|
128
|
+
const seeds: EntrySeed[] = [];
|
|
129
|
+
|
|
130
|
+
if (config.agents.mcp.enabled) {
|
|
131
|
+
const name = config.agents.mcp.name ?? title;
|
|
132
|
+
seeds.push({
|
|
133
|
+
capabilities: ["search_docs", "get_page", "list_pages", "get_navigation"],
|
|
134
|
+
description:
|
|
135
|
+
config.agents.mcp.instructions ??
|
|
136
|
+
`Model Context Protocol server over ${documentation}: full-text search, page Markdown, the page index, and the navigation tree.`,
|
|
137
|
+
displayName: name,
|
|
138
|
+
key: `mcp:${asciiSlugify(name) || "docs"}`,
|
|
139
|
+
queries: [
|
|
140
|
+
`search ${documentation}`,
|
|
141
|
+
`get a page of ${docs} as Markdown`,
|
|
142
|
+
`list every page in ${docs}`,
|
|
143
|
+
],
|
|
144
|
+
type: "application/mcp-server-card+json",
|
|
145
|
+
url: abs("/.well-known/mcp/server-card.json"),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
for (const skill of skills) {
|
|
150
|
+
seeds.push({
|
|
151
|
+
description: skill.description,
|
|
152
|
+
displayName: skill.name,
|
|
153
|
+
key: `skill:${skill.name}`,
|
|
154
|
+
queries: [
|
|
155
|
+
`load the ${skill.name} agent skill`,
|
|
156
|
+
`how do I use ${skill.name}`,
|
|
157
|
+
],
|
|
158
|
+
type:
|
|
159
|
+
skill.type === "archive"
|
|
160
|
+
? "application/agent-skills+gzip"
|
|
161
|
+
: "application/agent-skills+md",
|
|
162
|
+
url: abs(`${AGENT_SKILLS_DIR}/${skill.path}`),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (config.agents.api) {
|
|
167
|
+
seeds.push({
|
|
168
|
+
description: `REST API over ${documentation}: the page index, each page as JSON or Markdown, and the navigation tree, described by this OpenAPI document.`,
|
|
169
|
+
displayName: NAMES_DOCS.test(title.trim())
|
|
170
|
+
? `${title} API`
|
|
171
|
+
: `${title} docs API`,
|
|
172
|
+
key: "api:docs",
|
|
173
|
+
queries: [
|
|
174
|
+
`fetch a page of ${docs} as JSON`,
|
|
175
|
+
`list the pages in ${docs}`,
|
|
176
|
+
`get the navigation tree of ${docs}`,
|
|
177
|
+
],
|
|
178
|
+
type: "application/vnd.oai.openapi+json",
|
|
179
|
+
url: abs(OPENAPI_PATH),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
for (const reference of resolveReferences(config)) {
|
|
184
|
+
// Blume-rendered pages mount under `basePath`; Scalar pages stay at the
|
|
185
|
+
// raw route (see `referenceRoutes`). The rendered reference is the
|
|
186
|
+
// resource this publisher owns — the spec itself is catalogued by URL in
|
|
187
|
+
// the RFC 9727 linkset.
|
|
188
|
+
const docRoute =
|
|
189
|
+
reference.kind === "scalar"
|
|
190
|
+
? reference.route
|
|
191
|
+
: withBasePath(reference.basePath, reference.route);
|
|
192
|
+
seeds.push({
|
|
193
|
+
description: `${reference.label}: rendered ${REFERENCE_KIND_LABEL[reference.kind]} reference in ${documentation}.`,
|
|
194
|
+
displayName: reference.label,
|
|
195
|
+
key: `reference:${reference.slug}`,
|
|
196
|
+
queries: [
|
|
197
|
+
`what operations does the ${apiNamePhrase(reference.label)} expose`,
|
|
198
|
+
`how do I call the ${apiNamePhrase(reference.label)}`,
|
|
199
|
+
],
|
|
200
|
+
type: "text/html",
|
|
201
|
+
url: abs(docRoute),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (config.agents.llmsTxt.enabled) {
|
|
206
|
+
seeds.push({
|
|
207
|
+
description: `llms.txt index of ${documentation}: every page with a one-line summary, plus the agent-facing resources on this site.`,
|
|
208
|
+
displayName: `${title} llms.txt`,
|
|
209
|
+
key: "docs:llms-txt",
|
|
210
|
+
queries: [`what is ${title}`, `overview of ${documentation}`],
|
|
211
|
+
type: "text/plain",
|
|
212
|
+
url: abs("/llms.txt"),
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return seeds;
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
/** The catalog document, or null when the site publishes none. */
|
|
220
|
+
export const buildAiCatalog = (
|
|
221
|
+
config: ResolvedConfig,
|
|
222
|
+
skills: readonly SkillArtifact[]
|
|
223
|
+
): string | null => {
|
|
224
|
+
const site = config.deployment.options.site ?? null;
|
|
225
|
+
if (!(site && hasAiCatalog(config))) {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
const deployBase = normalizeBasePath(config.deployment.options.base);
|
|
229
|
+
const abs = (path: string): string =>
|
|
230
|
+
absoluteUrl(site, withBasePath(deployBase, path));
|
|
231
|
+
const host = publisherHost(site);
|
|
232
|
+
const entries = entrySeeds(config, skills, abs).map((seed): CatalogEntry => {
|
|
233
|
+
const entry: CatalogEntry = {
|
|
234
|
+
displayName: seed.displayName,
|
|
235
|
+
identifier: `urn:air:${host}:${seed.key}`,
|
|
236
|
+
representativeQueries:
|
|
237
|
+
config.agents.catalog.queries[seed.key] ?? seed.queries,
|
|
238
|
+
type: seed.type,
|
|
239
|
+
url: seed.url,
|
|
240
|
+
};
|
|
241
|
+
if (seed.description) {
|
|
242
|
+
entry.description = seed.description;
|
|
243
|
+
}
|
|
244
|
+
if (seed.capabilities) {
|
|
245
|
+
entry.capabilities = seed.capabilities;
|
|
246
|
+
}
|
|
247
|
+
return entry;
|
|
248
|
+
});
|
|
249
|
+
const catalog = {
|
|
250
|
+
entries,
|
|
251
|
+
host: {
|
|
252
|
+
displayName: config.title,
|
|
253
|
+
documentationUrl: abs("/"),
|
|
254
|
+
identifier: `did:web:${host}`,
|
|
255
|
+
},
|
|
256
|
+
specVersion: SPEC_VERSION,
|
|
257
|
+
};
|
|
258
|
+
return `${JSON.stringify(catalog, null, 2)}\n`;
|
|
259
|
+
};
|
package/src/ai/api/handlers.ts
CHANGED
|
@@ -154,19 +154,43 @@ export const buildPage = (data: McpData, route: string): ApiPage | null => {
|
|
|
154
154
|
return { ...summarize(entry, data), markdown };
|
|
155
155
|
};
|
|
156
156
|
|
|
157
|
+
/** The 404 for a route no page has, at its per-page JSON path. */
|
|
158
|
+
const pageNotFoundResponse = (
|
|
159
|
+
route: string,
|
|
160
|
+
context: ApiSiteContext
|
|
161
|
+
): Response =>
|
|
162
|
+
problemResponse({
|
|
163
|
+
code: "PAGE_NOT_FOUND",
|
|
164
|
+
detail: `No documentation page has the route "${route}".`,
|
|
165
|
+
instance: siteUrl(pageJsonPath(route), context),
|
|
166
|
+
resolution: `List every page at ${siteUrl(API_PAGES_PATH, context)}, or discover the API through ${siteUrl(OPENAPI_PATH, context)}.`,
|
|
167
|
+
status: 404,
|
|
168
|
+
title: "Page not found",
|
|
169
|
+
});
|
|
170
|
+
|
|
157
171
|
export const pageResponse = (data: McpData, route: string): Response => {
|
|
158
172
|
const page = buildPage(data, route);
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
173
|
+
return page ? jsonResponse(page) : pageNotFoundResponse(route, data);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const PAGE_JSON_PATH = /^\/api\/docs\/pages\/(?<param>.+)\.json$/u;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The route a base-less `pages/{route}.json` path asks for (`index` is the
|
|
180
|
+
* home page), or `undefined` for any other path.
|
|
181
|
+
*/
|
|
182
|
+
const requestedPageRoute = (path: string): string | undefined => {
|
|
183
|
+
const param = PAGE_JSON_PATH.exec(path)?.groups?.param;
|
|
184
|
+
if (param === undefined) {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
let decoded = param;
|
|
188
|
+
try {
|
|
189
|
+
decoded = decodeURIComponent(param);
|
|
190
|
+
} catch {
|
|
191
|
+
// A malformed escape names no page either; report it as written.
|
|
168
192
|
}
|
|
169
|
-
return
|
|
193
|
+
return decoded === "index" ? "/" : `/${decoded}`;
|
|
170
194
|
};
|
|
171
195
|
|
|
172
196
|
/** The default navigation tree (default locale, current docs). */
|
|
@@ -248,13 +272,24 @@ export const createSearchHandler = (
|
|
|
248
272
|
/**
|
|
249
273
|
* The 404 for anything under `/api/` that no endpoint answers — the catch-all
|
|
250
274
|
* behind every live route on server output, so an agent probing the API
|
|
251
|
-
* namespace gets a problem document instead of the HTML not-found page.
|
|
275
|
+
* namespace gets a problem document instead of the HTML not-found page. A
|
|
276
|
+
* `pages/{route}.json` miss gets the per-page `PAGE_NOT_FOUND` problem.
|
|
252
277
|
*/
|
|
253
278
|
export const apiNotFoundResponse = (
|
|
254
279
|
request: Request,
|
|
255
280
|
context: ApiSiteContext
|
|
256
281
|
): Response => {
|
|
257
282
|
const { pathname } = new URL(request.url);
|
|
283
|
+
// Per-page JSON is prerendered, so a route no page has falls through to
|
|
284
|
+
// this catch-all on server output; answer it as the page miss it is.
|
|
285
|
+
const baseless =
|
|
286
|
+
context.base && pathname.startsWith(`${context.base}/`)
|
|
287
|
+
? pathname.slice(context.base.length)
|
|
288
|
+
: pathname;
|
|
289
|
+
const route = requestedPageRoute(baseless);
|
|
290
|
+
if (route !== undefined) {
|
|
291
|
+
return pageNotFoundResponse(route, context);
|
|
292
|
+
}
|
|
258
293
|
return problemResponse({
|
|
259
294
|
code: "API_ROUTE_NOT_FOUND",
|
|
260
295
|
detail: `No API route exists at ${pathname}.`,
|
package/src/ai/api-catalog.ts
CHANGED
|
@@ -30,8 +30,8 @@ const HTTP_URL = /^https?:\/\//u;
|
|
|
30
30
|
|
|
31
31
|
/** The catalog's linkset entries; empty when the site publishes no APIs. */
|
|
32
32
|
const linksetEntries = (config: ResolvedConfig): LinksetEntry[] => {
|
|
33
|
-
const site = config.deployment.site ?? null;
|
|
34
|
-
const deployBase = normalizeBasePath(config.deployment.base);
|
|
33
|
+
const site = config.deployment.options.site ?? null;
|
|
34
|
+
const deployBase = normalizeBasePath(config.deployment.options.base);
|
|
35
35
|
const abs = (path: string): string => {
|
|
36
36
|
const based = withBasePath(deployBase, path);
|
|
37
37
|
return site ? absoluteUrl(site, based) : based;
|
|
@@ -42,9 +42,9 @@ const linksetEntries = (config: ResolvedConfig): LinksetEntry[] => {
|
|
|
42
42
|
// Blume-rendered pages mount under `basePath`; Scalar pages stay at the
|
|
43
43
|
// raw route (see `referenceRoutes`).
|
|
44
44
|
const docRoute =
|
|
45
|
-
reference.
|
|
46
|
-
?
|
|
47
|
-
: reference.route;
|
|
45
|
+
reference.kind === "scalar"
|
|
46
|
+
? reference.route
|
|
47
|
+
: withBasePath(reference.basePath, reference.route);
|
|
48
48
|
const entry: LinksetEntry = {
|
|
49
49
|
anchor: abs(docRoute),
|
|
50
50
|
"service-doc": [{ href: abs(docRoute), type: "text/html" }],
|
|
@@ -57,7 +57,7 @@ const linksetEntries = (config: ResolvedConfig): LinksetEntry[] => {
|
|
|
57
57
|
entries.push(entry);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
if (config.
|
|
60
|
+
if (config.agents.api) {
|
|
61
61
|
entries.push({
|
|
62
62
|
anchor: abs(API_BASE),
|
|
63
63
|
"service-desc": [{ href: abs(OPENAPI_PATH), type: "application/json" }],
|
|
@@ -65,9 +65,9 @@ const linksetEntries = (config: ResolvedConfig): LinksetEntry[] => {
|
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
if (config.
|
|
68
|
+
if (config.agents.mcp.enabled) {
|
|
69
69
|
entries.push({
|
|
70
|
-
anchor: abs(config.
|
|
70
|
+
anchor: abs(config.agents.mcp.route),
|
|
71
71
|
"service-desc": [
|
|
72
72
|
{ href: abs("/.well-known/mcp.json"), type: "application/json" },
|
|
73
73
|
],
|
package/src/ai/ask-data.ts
CHANGED