blume 2.0.0 → 2.0.2
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 +1 -1
- package/CHANGELOG.md +110 -0
- package/README.md +2 -2
- package/dist/cli/{chunk-f2972sbt.js → chunk-00gs3wqs.js} +1 -1
- package/dist/cli/{chunk-fa25z98p.js → chunk-273ygyr4.js} +4 -3
- package/dist/cli/chunk-273ygyr4.js.map +11 -0
- package/dist/cli/{chunk-pat2zzwc.js → chunk-3yce002v.js} +21 -8
- package/dist/cli/{chunk-pat2zzwc.js.map → chunk-3yce002v.js.map} +4 -4
- package/dist/cli/{chunk-d1tadaw7.js → chunk-4e9b9ra6.js} +17 -7
- package/dist/cli/chunk-4e9b9ra6.js.map +10 -0
- package/dist/cli/{chunk-zg2gtj10.js → chunk-5r8g91qn.js} +352 -676
- package/dist/cli/chunk-5r8g91qn.js.map +34 -0
- package/dist/cli/{chunk-11j0384y.js → chunk-6dtt0zfn.js} +14 -14
- package/dist/cli/{chunk-11j0384y.js.map → chunk-6dtt0zfn.js.map} +3 -3
- package/dist/cli/{chunk-bw22s759.js → chunk-6k4ftwze.js} +38 -19
- package/dist/cli/{chunk-bw22s759.js.map → chunk-6k4ftwze.js.map} +4 -4
- package/dist/cli/{chunk-sqn5t4q0.js → chunk-7mbqtmgb.js} +16 -7
- package/dist/cli/chunk-7mbqtmgb.js.map +10 -0
- package/dist/cli/{chunk-79njf86q.js → chunk-7vtckvaw.js} +21 -19
- package/dist/cli/chunk-7vtckvaw.js.map +11 -0
- package/dist/cli/{chunk-fh5hj5jt.js → chunk-8g8ytmgx.js} +17 -18
- package/dist/cli/{chunk-fh5hj5jt.js.map → chunk-8g8ytmgx.js.map} +2 -2
- package/dist/cli/{chunk-1w8dp3qb.js → chunk-91ws1n6j.js} +18 -15
- package/dist/cli/chunk-91ws1n6j.js.map +10 -0
- package/dist/cli/{chunk-7ez8ny0t.js → chunk-bbnwccaz.js} +2 -2
- package/dist/cli/{chunk-5a2z0198.js → chunk-bfwp9vp6.js} +18 -10
- package/dist/cli/chunk-bfwp9vp6.js.map +10 -0
- package/dist/cli/{chunk-ernrthtr.js → chunk-d1v5rhy0.js} +14 -15
- package/dist/cli/{chunk-ernrthtr.js.map → chunk-d1v5rhy0.js.map} +2 -2
- package/dist/cli/{chunk-a9kptbw5.js → chunk-ddndchfr.js} +21 -6
- package/dist/cli/chunk-ddndchfr.js.map +14 -0
- package/dist/cli/{chunk-zxccj738.js → chunk-esh98wmb.js} +1 -1
- package/dist/cli/{chunk-88cpgt6h.js → chunk-fsmrqk8a.js} +1 -1
- package/dist/cli/{chunk-b5aj94ah.js → chunk-g698a744.js} +5 -5
- package/dist/cli/{chunk-jts8mvcz.js → chunk-gs7r695n.js} +9 -3
- package/dist/cli/{chunk-jts8mvcz.js.map → chunk-gs7r695n.js.map} +3 -3
- package/dist/cli/{chunk-41za066z.js → chunk-h2ez8dzb.js} +4 -4
- package/dist/cli/{chunk-by2290sx.js → chunk-h7k3nq3v.js} +2 -2
- package/dist/cli/{chunk-j8mw0za6.js → chunk-hqp2ajnh.js} +252 -123
- package/dist/cli/chunk-hqp2ajnh.js.map +35 -0
- package/dist/cli/{chunk-mnqj32sj.js → chunk-hr8ne106.js} +119 -50
- package/dist/cli/chunk-hr8ne106.js.map +13 -0
- package/dist/cli/{chunk-mwt1k8n7.js → chunk-j85scx15.js} +74 -30
- package/dist/cli/chunk-j85scx15.js.map +10 -0
- package/dist/cli/{chunk-z01ze5c1.js → chunk-k7pj68a8.js} +63 -22
- package/dist/cli/chunk-k7pj68a8.js.map +11 -0
- package/dist/cli/{chunk-2q1dwty4.js → chunk-mqc662a6.js} +8 -8
- package/dist/cli/{chunk-2q1dwty4.js.map → chunk-mqc662a6.js.map} +4 -4
- package/dist/cli/{chunk-y3e45rc8.js → chunk-n1yg3tj3.js} +4 -4
- package/dist/cli/{chunk-bctazmbk.js → chunk-nfcyttvj.js} +17 -6
- package/dist/cli/chunk-nfcyttvj.js.map +10 -0
- package/dist/cli/{chunk-6k8vp3ta.js → chunk-pbg5a4s3.js} +60 -28
- package/dist/cli/chunk-pbg5a4s3.js.map +19 -0
- package/dist/cli/{chunk-d80hr03s.js → chunk-ppzjqwx2.js} +24 -17
- package/dist/cli/{chunk-d80hr03s.js.map → chunk-ppzjqwx2.js.map} +4 -4
- package/dist/cli/{chunk-beat36xx.js → chunk-qkb5a8sa.js} +25 -10
- package/dist/cli/chunk-qkb5a8sa.js.map +10 -0
- package/dist/cli/{chunk-bnbmcwfb.js → chunk-sqw4ekg1.js} +5 -5
- package/dist/cli/{chunk-bnbmcwfb.js.map → chunk-sqw4ekg1.js.map} +3 -3
- package/dist/cli/{chunk-xaz13gwg.js → chunk-v6ya5kcb.js} +3268 -1150
- package/dist/cli/chunk-v6ya5kcb.js.map +189 -0
- package/dist/cli/{chunk-tzne8qfq.js → chunk-w4bxdvsa.js} +18 -15
- package/dist/cli/chunk-w4bxdvsa.js.map +10 -0
- package/dist/cli/{chunk-f7t03s3g.js → chunk-wdrt2k2v.js} +2 -2
- package/dist/cli/{chunk-z1f5arsg.js → chunk-xh43dwgw.js} +170 -55
- package/dist/cli/chunk-xh43dwgw.js.map +36 -0
- package/dist/cli/{chunk-pnnvybbk.js → chunk-zp79m0ts.js} +5 -5
- package/dist/cli/{chunk-pnnvybbk.js.map → chunk-zp79m0ts.js.map} +2 -2
- package/dist/cli/index.js +160 -35
- package/dist/cli/index.js.map +4 -4
- package/dist/types/ai/agent-readability.d.ts +1 -1
- package/dist/types/ai/agent-surface.d.ts +32 -0
- package/dist/types/ai/api/paths.d.ts +1 -1
- package/dist/types/ai/api-catalog.d.ts +7 -1
- package/dist/types/ai/ask-context.d.ts +14 -7
- package/dist/types/ai/ask.d.ts +43 -43
- package/dist/types/ai/component-markdown.d.ts +4 -4
- package/dist/types/ai/index.d.ts +3 -3
- package/dist/types/ai/openapi-components.d.ts +1 -1
- package/dist/types/ai/relative-links.d.ts +9 -4
- package/dist/types/ai/serializers.d.ts +1 -1
- package/dist/types/ai/static-expression.d.ts +28 -0
- package/dist/types/ai/visibility.d.ts +1 -1
- package/dist/types/analytics/databuddy.d.ts +43 -0
- package/dist/types/analytics/index.d.ts +2 -0
- package/dist/types/analytics/schema.d.ts +14 -0
- package/dist/types/cli/env.d.ts +5 -0
- package/dist/types/cli/init/scaffold.d.ts +19 -3
- package/dist/types/cli/init/starter-spec.d.ts +11 -0
- package/dist/types/core/base-path.d.ts +9 -0
- package/dist/types/core/config-input.d.ts +21 -21
- package/dist/types/core/config.d.ts +5 -5
- package/dist/types/core/data.d.ts +3 -3
- package/dist/types/core/graph.d.ts +2 -0
- package/dist/types/core/i18n-ui.d.ts +37 -8
- package/dist/types/core/i18n.d.ts +7 -1
- package/dist/types/core/links.d.ts +3 -1
- package/dist/types/core/load-module.d.ts +10 -0
- package/dist/types/core/locale-links.d.ts +12 -2
- package/dist/types/core/meta.d.ts +5 -1
- package/dist/types/core/nav-diagnostics.d.ts +10 -0
- package/dist/types/core/navigation.d.ts +38 -0
- package/dist/types/core/ordering-prefix.d.ts +4 -0
- package/dist/types/core/safe-links.d.ts +3 -1
- package/dist/types/core/schema.d.ts +57 -18
- package/dist/types/core/sources/github-releases.d.ts +5 -0
- package/dist/types/core/sources/lower.d.ts +14 -2
- package/dist/types/core/sources/normalize.d.ts +10 -1
- package/dist/types/core/sources/remote.d.ts +11 -1
- package/dist/types/core/sources/resolve.d.ts +12 -0
- package/dist/types/core/sources/types.d.ts +31 -0
- package/dist/types/core/types.d.ts +9 -0
- package/dist/types/core/unrecognized-keys.d.ts +1 -1
- package/dist/types/deploy/adapters/node.d.ts +5 -2
- package/dist/types/deploy/adapters/types.d.ts +7 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +3 -2
- package/dist/types/deploy/headers.d.ts +31 -7
- package/dist/types/deploy/node-headers.d.ts +43 -8
- package/dist/types/deploy/platforms/netlify.d.ts +27 -2
- package/dist/types/deploy/platforms/node.d.ts +6 -5
- package/dist/types/deploy/platforms/types.d.ts +7 -0
- package/dist/types/deploy/platforms/vercel.d.ts +3 -2
- package/dist/types/deploy/redirects.d.ts +7 -2
- package/dist/types/deploy/vercel-negotiation.d.ts +3 -2
- package/dist/types/openapi/model.d.ts +20 -6
- package/dist/types/search/documents.d.ts +1 -1
- package/dist/types/search/orama-index.d.ts +1 -1
- package/dist/types/search/sync/algolia.d.ts +3 -1
- package/docs/01-quickstart.mdx +3 -2
- package/docs/02-deployment.mdx +21 -12
- package/docs/03-upgrading.mdx +22 -9
- package/docs/04-migrating.mdx +4 -4
- package/docs/08-faq.mdx +12 -5
- package/docs/advanced/changelog.mdx +1 -1
- package/docs/advanced/custom-pages.mdx +5 -3
- package/docs/advanced/skills.mdx +1 -1
- package/docs/cli/audit.mdx +5 -5
- package/docs/cli/doctor.mdx +4 -4
- package/docs/cli/evals.mdx +9 -9
- package/docs/cli/index.mdx +6 -3
- package/docs/cli/translate.mdx +8 -8
- package/docs/configuration/analytics.mdx +23 -2
- package/docs/configuration/{ask-ai.mdx → assistant.mdx} +20 -20
- package/docs/configuration/customization.mdx +5 -4
- package/docs/configuration/index.mdx +7 -5
- package/docs/configuration/meta.ts +1 -1
- package/docs/configuration/search.mdx +2 -2
- package/docs/content/components.mdx +1 -1
- package/docs/content/frontmatter.mdx +5 -1
- package/docs/content/i18n.mdx +3 -3
- package/docs/content/index.mdx +4 -2
- package/docs/content/islands.mdx +1 -1
- package/docs/content/meta.mdx +5 -3
- package/docs/content/navigation.mdx +29 -4
- package/docs/content/sources.mdx +18 -12
- package/docs/content/versioning.mdx +1 -0
- package/docs/discoverability/agent-discovery.mdx +22 -8
- package/docs/discoverability/index.mdx +3 -3
- package/docs/discoverability/llms-txt.mdx +2 -5
- package/docs/discoverability/markdown.mdx +5 -3
- package/docs/discoverability/mcp.mdx +4 -0
- package/docs/discoverability/metadata.mdx +3 -2
- package/docs/discoverability/open-graph.mdx +6 -4
- package/docs/discoverability/rss.mdx +3 -1
- package/docs/index.mdx +2 -2
- package/docs/references/asyncapi.mdx +1 -1
- package/docs/references/graphql.mdx +2 -2
- package/docs/references/openapi.mdx +3 -3
- package/package.json +1 -1
- package/skills/blume/SKILL.md +5 -5
- package/skills/blume-migrate/SKILL.md +6 -6
- package/skills/blume-migrate/references/docusaurus.md +6 -6
- package/skills/blume-migrate/references/mintlify.md +3 -3
- package/skills/blume-migrate/references/monorepo.md +1 -1
- package/skills/blume-migrate/references/nextra.md +1 -1
- package/skills/blume-migrate/references/starlight.md +5 -5
- package/skills/blume-migrate/scripts/mintlify-codemod.mjs +2 -2
- package/skills/blume-update-docs/references/audit-checklist.md +1 -1
- package/src/ai/agent-readability.ts +4 -4
- package/src/ai/agent-surface.ts +56 -0
- package/src/ai/api/paths.ts +1 -1
- package/src/ai/api/spec.ts +15 -2
- package/src/ai/api-catalog.ts +7 -1
- package/src/ai/ask-context.ts +21 -9
- package/src/ai/ask-data.ts +28 -14
- package/src/ai/ask.ts +84 -71
- package/src/ai/component-markdown.ts +43 -37
- package/src/ai/cors.ts +3 -3
- package/src/ai/index.ts +16 -16
- package/src/ai/link-headers.ts +8 -3
- package/src/ai/llms.ts +4 -3
- package/src/ai/markdown.ts +23 -11
- package/src/ai/mcp/server.ts +78 -7
- package/src/ai/openapi-components.ts +1 -1
- package/src/ai/relative-links.ts +78 -10
- package/src/ai/serializers.ts +1 -1
- package/src/ai/static-expression.ts +416 -0
- package/src/ai/visibility.ts +46 -15
- package/src/analytics/databuddy.ts +67 -0
- package/src/analytics/head.ts +4 -0
- package/src/analytics/index.ts +2 -0
- package/src/analytics/posthog.ts +21 -3
- package/src/analytics/schema.ts +2 -0
- package/src/astro/generate.ts +90 -45
- package/src/astro/module-types.ts +1 -1
- package/src/astro/runtime-deps.ts +6 -6
- package/src/astro/templates.ts +87 -49
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +25 -5
- package/src/audit/checks/content.ts +20 -2
- package/src/audit/checks/i18n.ts +46 -8
- package/src/audit/checks/indexability.ts +39 -19
- package/src/audit/checks/links.ts +14 -0
- package/src/audit/checks/llms.ts +6 -3
- package/src/audit/checks/network.ts +3 -1
- package/src/audit/checks/og-image.ts +10 -0
- package/src/audit/checks/robots.ts +6 -1
- package/src/audit/checks/sitemap.ts +56 -31
- package/src/audit/checks/social.ts +21 -2
- package/src/audit/crawl.ts +88 -15
- package/src/audit/report.ts +54 -17
- package/src/audit/run.ts +1 -0
- package/src/audit/types.ts +18 -0
- package/src/audit/url.ts +37 -6
- package/src/blume-modules.d.ts +2 -2
- package/src/cli/build-failure.ts +50 -0
- package/src/cli/commands/audit.ts +8 -1
- package/src/cli/commands/build.ts +19 -5
- package/src/cli/commands/check.ts +2 -0
- package/src/cli/commands/doctor.ts +7 -5
- package/src/cli/commands/eval.ts +4 -10
- package/src/cli/commands/init.ts +15 -5
- package/src/cli/commands/migrate.ts +2 -2
- package/src/cli/commands/preview.ts +15 -0
- package/src/cli/commands/sync.ts +2 -0
- package/src/cli/commands/translate.ts +12 -9
- package/src/cli/commands/upgrade.ts +13 -2
- package/src/cli/eject-scripts.ts +32 -7
- package/src/cli/env.ts +12 -1
- package/src/cli/init/scaffold.ts +117 -11
- package/src/cli/init/starter-spec.ts +235 -0
- package/src/cli/required-secrets.ts +3 -3
- package/src/components/content/AccordionItem.astro +26 -22
- package/src/components/content/Badge.astro +2 -9
- package/src/components/content/Card.astro +2 -2
- package/src/components/content/Component.astro +9 -3
- package/src/components/content/Expandable.astro +5 -1
- package/src/components/content/Frame.astro +2 -7
- package/src/components/content/GithubInfo.astro +12 -2
- package/src/components/content/Prompt.astro +2 -7
- package/src/components/content/Tabs.astro +54 -5
- package/src/components/content/Tile.astro +1 -1
- package/src/components/content/Tooltip.astro +69 -7
- package/src/components/content/Tree.astro +7 -2
- package/src/components/content/TypeTable.astro +10 -5
- package/src/components/content/Update.astro +8 -2
- package/src/components/content/auto-type-table.ts +4 -1
- package/src/components/content/badge-color.ts +17 -0
- package/src/components/content/base-href.ts +18 -3
- package/src/components/content/inline-markdown.ts +27 -7
- package/src/components/copy-feedback.ts +36 -9
- package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
- package/src/components/islands/{ask-ai.tsx → assistant.tsx} +39 -25
- package/src/components/islands/hooks.ts +21 -14
- package/src/components/islands/webmcp.ts +12 -8
- package/src/components/layout/Banner.astro +23 -4
- package/src/components/layout/Header.astro +32 -19
- package/src/components/layout/Logo.astro +5 -0
- package/src/components/layout/NavSelector.astro +6 -1
- package/src/components/layout/NavTabMenu.astro +133 -0
- package/src/components/layout/NavTree.astro +15 -6
- package/src/components/layout/NavTreeCache.astro +5 -2
- package/src/components/layout/NavTreeScript.astro +45 -5
- package/src/components/layout/PageLayout.astro +28 -14
- package/src/components/layout/Pagination.astro +7 -7
- package/src/components/layout/ReferenceLayout.astro +5 -2
- package/src/components/layout/RootLayout.astro +27 -14
- package/src/components/layout/Search.astro +18 -14
- package/src/components/layout/analytics-client.ts +3 -1
- package/src/components/layout/drawer-inert.ts +1 -1
- package/src/components/openapi/GraphqlType.astro +11 -3
- package/src/components/openapi/MessageComposer.astro +1 -1
- package/src/components/openapi/Operation.astro +21 -5
- package/src/components/openapi/PanelTabs.astro +4 -1
- package/src/components/openapi/Playground.astro +8 -2
- package/src/components/openapi/RequestPanel.astro +9 -5
- package/src/components/openapi/SchemaProperty.astro +11 -33
- package/src/components/openapi/SchemaTable.astro +27 -52
- package/src/components/openapi/description.ts +2 -2
- package/src/components/openapi/helpers.ts +90 -12
- package/src/components/openapi/message-composer.ts +8 -0
- package/src/components/openapi/message-model.ts +12 -2
- package/src/components/openapi/message.ts +4 -1
- package/src/components/openapi/operation-model.ts +40 -8
- package/src/components/openapi/panel.ts +29 -5
- package/src/components/openapi/playground-client.ts +37 -7
- package/src/components/openapi/playground-schema.ts +25 -6
- package/src/components/openapi/request.ts +2 -0
- package/src/components/openapi/schema-tree.ts +203 -0
- package/src/components/openapi/snippets.ts +30 -15
- package/src/components/openapi/validate-json.ts +1 -1
- package/src/core/base-path.ts +15 -0
- package/src/core/code-fences.ts +1 -1
- package/src/core/config-input.ts +23 -23
- package/src/core/config.ts +21 -7
- package/src/core/data.ts +3 -3
- package/src/core/diagnostics.ts +217 -30
- package/src/core/graph.ts +120 -11
- package/src/core/i18n-ui.ts +74 -11
- package/src/core/i18n.ts +13 -2
- package/src/core/links.ts +7 -4
- package/src/core/load-module.ts +20 -0
- package/src/core/locale-links.ts +17 -17
- package/src/core/manifest.ts +3 -2
- package/src/core/meta.ts +69 -6
- package/src/core/nav-diagnostics.ts +56 -1
- package/src/core/navigation.ts +245 -76
- package/src/core/ordering-prefix.ts +27 -0
- package/src/core/project-graph.ts +23 -1
- package/src/core/request-body.ts +1 -1
- package/src/core/safe-href.ts +53 -1
- package/src/core/safe-links.ts +11 -2
- package/src/core/schema.ts +95 -34
- package/src/core/server-features.ts +2 -2
- package/src/core/sources/assets.ts +83 -41
- package/src/core/sources/contentful-rich-text.ts +3 -2
- package/src/core/sources/contentful.ts +25 -12
- package/src/core/sources/filesystem.ts +5 -1
- package/src/core/sources/github-releases.ts +106 -5
- package/src/core/sources/lexical.ts +9 -4
- package/src/core/sources/lower.ts +79 -26
- package/src/core/sources/mdx-remote.ts +1 -0
- package/src/core/sources/normalize.ts +132 -30
- package/src/core/sources/notion.ts +26 -10
- package/src/core/sources/obsidian.ts +17 -3
- package/src/core/sources/payload.ts +1 -0
- package/src/core/sources/portable-text.ts +63 -44
- package/src/core/sources/remote.ts +18 -2
- package/src/core/sources/resolve.ts +52 -33
- package/src/core/sources/sanity.ts +1 -0
- package/src/core/sources/strapi-blocks.ts +9 -4
- package/src/core/sources/strapi.ts +1 -0
- package/src/core/sources/types.ts +31 -0
- package/src/core/types.ts +9 -0
- package/src/core/ui-packs/ar.ts +17 -5
- package/src/core/ui-packs/bg.ts +17 -5
- package/src/core/ui-packs/bn.ts +17 -5
- package/src/core/ui-packs/ca.ts +17 -5
- package/src/core/ui-packs/cs.ts +17 -5
- package/src/core/ui-packs/da.ts +17 -5
- package/src/core/ui-packs/de.ts +17 -5
- package/src/core/ui-packs/el.ts +17 -5
- package/src/core/ui-packs/es.ts +17 -5
- package/src/core/ui-packs/fa.ts +17 -5
- package/src/core/ui-packs/fi.ts +17 -5
- package/src/core/ui-packs/fr.ts +17 -5
- package/src/core/ui-packs/he.ts +17 -5
- package/src/core/ui-packs/hi.ts +17 -5
- package/src/core/ui-packs/hr.ts +17 -5
- package/src/core/ui-packs/hu.ts +17 -5
- package/src/core/ui-packs/id.ts +17 -5
- package/src/core/ui-packs/it.ts +17 -5
- package/src/core/ui-packs/ja.ts +17 -5
- package/src/core/ui-packs/ko.ts +17 -5
- package/src/core/ui-packs/nl.ts +17 -5
- package/src/core/ui-packs/no.ts +17 -5
- package/src/core/ui-packs/pl.ts +17 -5
- package/src/core/ui-packs/pt-br.ts +17 -5
- package/src/core/ui-packs/pt.ts +17 -5
- package/src/core/ui-packs/ro.ts +17 -5
- package/src/core/ui-packs/ru.ts +17 -5
- package/src/core/ui-packs/sk.ts +17 -5
- package/src/core/ui-packs/sr.ts +17 -5
- package/src/core/ui-packs/sv.ts +17 -5
- package/src/core/ui-packs/th.ts +17 -5
- package/src/core/ui-packs/tr.ts +17 -5
- package/src/core/ui-packs/uk.ts +17 -5
- package/src/core/ui-packs/vi.ts +17 -5
- package/src/core/ui-packs/zh-tw.ts +17 -5
- package/src/core/ui-packs/zh.ts +17 -5
- package/src/core/unrecognized-keys.ts +1 -1
- package/src/core/version-cut.ts +17 -2
- package/src/core/versions.ts +4 -1
- package/src/deploy/adapters/node.ts +5 -2
- package/src/deploy/adapters/registry.ts +2 -1
- package/src/deploy/adapters/types.ts +13 -1
- package/src/deploy/artifacts.ts +25 -5
- package/src/deploy/cloudflare-negotiation.ts +23 -4
- package/src/deploy/headers.ts +67 -51
- package/src/deploy/node-headers.ts +148 -27
- package/src/deploy/platforms/cloudflare.ts +1 -0
- package/src/deploy/platforms/netlify.ts +82 -5
- package/src/deploy/platforms/node.ts +7 -5
- package/src/deploy/platforms/static.ts +1 -0
- package/src/deploy/platforms/types.ts +7 -0
- package/src/deploy/platforms/vercel.ts +9 -3
- package/src/deploy/redirects.ts +14 -3
- package/src/deploy/vercel-negotiation.ts +35 -3
- package/src/eval/agents.ts +10 -2
- package/src/eval/run.ts +25 -0
- package/src/markdown/base-links.ts +55 -8
- package/src/markdown/index.ts +6 -3
- package/src/markdown/relative-links.ts +3 -23
- package/src/markdown/route-snapshot.ts +37 -0
- package/src/og/card.ts +20 -4
- package/src/og/derive.ts +145 -4
- package/src/openapi/graphql-build.ts +28 -2
- package/src/openapi/model.ts +77 -13
- package/src/openapi/render-mdx.ts +10 -1
- package/src/registry/eject.ts +135 -37
- package/src/search/documents.ts +24 -3
- package/src/search/orama-index.ts +1 -1
- package/src/search/sync/algolia.ts +36 -2
- package/src/sources/registry.ts +5 -0
- package/src/theme/entry.ts +11 -4
- package/src/translate/agents.ts +6 -1
- package/src/translate/ledger.ts +26 -3
- package/src/translate/meta.ts +11 -3
- package/src/translate/report.ts +1 -1
- package/src/translate/run.ts +11 -5
- package/src/translate/validate.ts +10 -1
- package/src/translate/work-list.ts +36 -3
- package/src/upgrade/upgrade.ts +37 -5
- package/dist/cli/chunk-1w8dp3qb.js.map +0 -10
- package/dist/cli/chunk-5a2z0198.js.map +0 -10
- package/dist/cli/chunk-6k8vp3ta.js.map +0 -19
- package/dist/cli/chunk-79njf86q.js.map +0 -11
- package/dist/cli/chunk-a9kptbw5.js.map +0 -14
- package/dist/cli/chunk-abh8yjkn.js +0 -31
- package/dist/cli/chunk-abh8yjkn.js.map +0 -10
- package/dist/cli/chunk-bctazmbk.js.map +0 -10
- package/dist/cli/chunk-beat36xx.js.map +0 -10
- package/dist/cli/chunk-d1tadaw7.js.map +0 -10
- package/dist/cli/chunk-fa25z98p.js.map +0 -11
- package/dist/cli/chunk-j8mw0za6.js.map +0 -35
- package/dist/cli/chunk-mnqj32sj.js.map +0 -12
- package/dist/cli/chunk-mwt1k8n7.js.map +0 -10
- package/dist/cli/chunk-nk3ts2xk.js +0 -51
- package/dist/cli/chunk-nk3ts2xk.js.map +0 -10
- package/dist/cli/chunk-sqn5t4q0.js.map +0 -10
- package/dist/cli/chunk-tzne8qfq.js.map +0 -10
- package/dist/cli/chunk-xaz13gwg.js.map +0 -182
- package/dist/cli/chunk-z01ze5c1.js.map +0 -10
- package/dist/cli/chunk-z1f5arsg.js.map +0 -36
- package/dist/cli/chunk-zg2gtj10.js.map +0 -35
- /package/dist/cli/{chunk-f2972sbt.js.map → chunk-00gs3wqs.js.map} +0 -0
- /package/dist/cli/{chunk-7ez8ny0t.js.map → chunk-bbnwccaz.js.map} +0 -0
- /package/dist/cli/{chunk-zxccj738.js.map → chunk-esh98wmb.js.map} +0 -0
- /package/dist/cli/{chunk-88cpgt6h.js.map → chunk-fsmrqk8a.js.map} +0 -0
- /package/dist/cli/{chunk-b5aj94ah.js.map → chunk-g698a744.js.map} +0 -0
- /package/dist/cli/{chunk-41za066z.js.map → chunk-h2ez8dzb.js.map} +0 -0
- /package/dist/cli/{chunk-by2290sx.js.map → chunk-h7k3nq3v.js.map} +0 -0
- /package/dist/cli/{chunk-y3e45rc8.js.map → chunk-n1yg3tj3.js.map} +0 -0
- /package/dist/cli/{chunk-f7t03s3g.js.map → chunk-wdrt2k2v.js.map} +0 -0
package/src/astro/generate.ts
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
hasDeferrableGroups,
|
|
32
32
|
navVariants,
|
|
33
33
|
} from "../components/layout/nav-utils.ts";
|
|
34
|
-
import { normalizeBasePath } from "../core/base-path.ts";
|
|
34
|
+
import { normalizeBasePath, withBasePath } from "../core/base-path.ts";
|
|
35
35
|
import { validateUsedComponents } from "../core/component-diagnostics.ts";
|
|
36
36
|
import {
|
|
37
37
|
analyzeComponentOverrides,
|
|
@@ -81,7 +81,9 @@ import { ogCacheDir } from "../og/cache.ts";
|
|
|
81
81
|
import { missingFontFiles, resolveOgFonts } from "../og/derive.ts";
|
|
82
82
|
import type { DerivedOgFonts } from "../og/derive.ts";
|
|
83
83
|
import { resolveOgLogo } from "../og/logo.ts";
|
|
84
|
-
import type {
|
|
84
|
+
import type { AsyncApiSpecValue } from "../openapi/asyncapi.ts";
|
|
85
|
+
import type { ApiSpecData, HttpMethod, OpenApiData } from "../openapi/model.ts";
|
|
86
|
+
import { HTTP_METHODS, withServerDefaults } from "../openapi/model.ts";
|
|
85
87
|
import {
|
|
86
88
|
builtinProxyReferences,
|
|
87
89
|
hasScalarReferences,
|
|
@@ -636,7 +638,7 @@ const writeIfChanged = async (
|
|
|
636
638
|
|
|
637
639
|
/**
|
|
638
640
|
* Delete generated files under `srcDir` that this pass didn't (re)write. The
|
|
639
|
-
* generator emits many files conditionally — an
|
|
641
|
+
* generator emits many files conditionally — an assistant endpoint, OG images, a
|
|
640
642
|
* search index, RSS feeds, reference pages, the MCP server — so toggling a
|
|
641
643
|
* feature off would otherwise leave a stale file behind, and a leftover
|
|
642
644
|
* server-rendered endpoint breaks the static build. `writeIfChanged` only ever
|
|
@@ -954,6 +956,8 @@ const resolveBanner = (config: ResolvedConfig): BlumeBanner | null => {
|
|
|
954
956
|
if (isStringShorthand(banner)) {
|
|
955
957
|
return { content: banner, dismissible: false, key: banner };
|
|
956
958
|
}
|
|
959
|
+
// `link.href` stays as authored; the link the banner renders is the
|
|
960
|
+
// navigation's `bannerHref`, localized and mounted under `basePath`.
|
|
957
961
|
return {
|
|
958
962
|
content: banner.content,
|
|
959
963
|
dismissible: banner.dismissible,
|
|
@@ -1114,10 +1118,10 @@ export const buildRuntimeData = (project: BlumeProject): string => {
|
|
|
1114
1118
|
config: {
|
|
1115
1119
|
analytics: config.analytics,
|
|
1116
1120
|
appleIcon: resolveAppleIcon(project),
|
|
1117
|
-
|
|
1121
|
+
assistant: config.ai.assistant?.enabled
|
|
1118
1122
|
? {
|
|
1119
|
-
endpoint: config.ai.
|
|
1120
|
-
suggestions: config.ai.
|
|
1123
|
+
endpoint: config.ai.assistant.endpoint ?? null,
|
|
1124
|
+
suggestions: config.ai.assistant.suggestions,
|
|
1121
1125
|
}
|
|
1122
1126
|
: null,
|
|
1123
1127
|
banner: resolveBanner(config),
|
|
@@ -1489,28 +1493,41 @@ const writeApiFiles = async (
|
|
|
1489
1493
|
await Promise.all(writes);
|
|
1490
1494
|
};
|
|
1491
1495
|
|
|
1496
|
+
/** The proxy endpoint's file under the Astro `src/` dir (eject writes it too). */
|
|
1497
|
+
export const PLAYGROUND_PROXY_ENTRY = join("blume-openapi", "api-proxy.ts");
|
|
1498
|
+
|
|
1499
|
+
/** The URL the built-in proxy is injected at (see {@link planPlaygroundProxy}). */
|
|
1500
|
+
export const playgroundProxyPattern = (config: ResolvedConfig): string =>
|
|
1501
|
+
withBasePath(config.basePath, "/_api-proxy");
|
|
1502
|
+
|
|
1492
1503
|
/**
|
|
1493
1504
|
* Decide whether to generate the playground's built-in CORS proxy endpoint.
|
|
1494
1505
|
* Only the Blume renderer's playground with `proxy: true` needs it — a proxy
|
|
1495
1506
|
* URL string points at an external service, and `false` sends requests
|
|
1496
1507
|
* directly. Injected at `/_api-proxy` (rather than written under `pages/`)
|
|
1497
1508
|
* because Astro treats `_`-prefixed page files as private; the endpoint's own
|
|
1498
|
-
* `prerender = false` export wins over the injection default.
|
|
1509
|
+
* `prerender = false` export wins over the injection default. Mounted under
|
|
1510
|
+
* the site `basePath`, at the URL the playground sends to (see
|
|
1511
|
+
* openapi/source.ts); Astro layers `deployment.base` onto both.
|
|
1499
1512
|
*/
|
|
1500
1513
|
const planPlaygroundProxy = (config: ResolvedConfig, srcDir: string) => ({
|
|
1501
1514
|
enabled: needsPlaygroundProxy(config),
|
|
1502
|
-
entrypoint: join(srcDir,
|
|
1503
|
-
pattern:
|
|
1515
|
+
entrypoint: join(srcDir, PLAYGROUND_PROXY_ENTRY),
|
|
1516
|
+
pattern: playgroundProxyPattern(config),
|
|
1504
1517
|
});
|
|
1505
1518
|
|
|
1506
1519
|
/**
|
|
1507
1520
|
* The origins the built-in proxy is allowed to reach: one per absolute
|
|
1508
|
-
* `servers[].url` across the parsed specs
|
|
1509
|
-
*
|
|
1510
|
-
*
|
|
1511
|
-
*
|
|
1521
|
+
* `servers[].url` across the parsed specs — the document's, each path item's,
|
|
1522
|
+
* and each operation's, since an operation's playground sends to the most
|
|
1523
|
+
* specific of those. This is the endpoint's whole trust boundary — the client
|
|
1524
|
+
* sends the target as a query parameter, and a reader's custom base URL is not
|
|
1525
|
+
* a documented server — so it is derived here, at build time, from the same
|
|
1526
|
+
* documents the operation pages render.
|
|
1512
1527
|
*
|
|
1513
|
-
*
|
|
1528
|
+
* A templated URL (`https://{env}.api.example.com`) is allowed as the
|
|
1529
|
+
* playground sends it, with each variable at its declared default. Relative
|
|
1530
|
+
* (`/v1`) URLs, and templates with a variable left undefaulted, carry no
|
|
1514
1531
|
* origin to allow and are skipped; AsyncAPI documents declare `servers` as a
|
|
1515
1532
|
* map and contribute nothing (the proxy is OpenAPI-only).
|
|
1516
1533
|
*/
|
|
@@ -1526,27 +1543,53 @@ const specOriginsOf = (spec: ApiSpecData): string[] => {
|
|
|
1526
1543
|
}
|
|
1527
1544
|
}
|
|
1528
1545
|
// SAFETY: `document` is arbitrary parsed JSON; the assertion only names
|
|
1529
|
-
// the optional `servers`
|
|
1530
|
-
// `Array.isArray
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1546
|
+
// the optional `servers` and `paths` shapes, and every access below
|
|
1547
|
+
// re-checks them — `Array.isArray` guards each list, optional chaining each
|
|
1548
|
+
// path item and operation, and `server.url ?? ""` the url.
|
|
1549
|
+
const document = spec.document as {
|
|
1550
|
+
paths?: Record<string, DocumentPathItem | null | undefined>;
|
|
1551
|
+
servers?: DocumentServer[];
|
|
1552
|
+
};
|
|
1553
|
+
const lists = [document.servers];
|
|
1554
|
+
for (const item of Object.values(document.paths ?? {})) {
|
|
1555
|
+
lists.push(item?.servers);
|
|
1556
|
+
for (const method of HTTP_METHODS) {
|
|
1557
|
+
lists.push(item?.[method]?.servers);
|
|
1539
1558
|
}
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1559
|
+
}
|
|
1560
|
+
for (const servers of lists) {
|
|
1561
|
+
for (const server of Array.isArray(servers) ? servers : []) {
|
|
1562
|
+
const url = withServerDefaults(server.url ?? "", server.variables);
|
|
1563
|
+
// `new URL("https://{region}.api.example.com")` parses — the braces land
|
|
1564
|
+
// in the hostname — so a variable with no default needs an explicit
|
|
1565
|
+
// check or its junk literal becomes an allowlist entry no real request
|
|
1566
|
+
// can match.
|
|
1567
|
+
if (url.includes("{")) {
|
|
1568
|
+
continue;
|
|
1569
|
+
}
|
|
1570
|
+
try {
|
|
1571
|
+
origins.add(new URL(url).origin);
|
|
1572
|
+
} catch {
|
|
1573
|
+
// Not an absolute URL: nothing to allow.
|
|
1574
|
+
}
|
|
1544
1575
|
}
|
|
1545
1576
|
}
|
|
1546
1577
|
return [...origins];
|
|
1547
1578
|
};
|
|
1548
1579
|
|
|
1549
|
-
|
|
1580
|
+
/** A `servers[]` entry as a parsed spec document declares it. */
|
|
1581
|
+
interface DocumentServer {
|
|
1582
|
+
url?: string;
|
|
1583
|
+
variables?: AsyncApiSpecValue;
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
/** An OpenAPI path item: its own `servers` plus one per operation. */
|
|
1587
|
+
type DocumentPathItem = { servers?: DocumentServer[] } & Partial<
|
|
1588
|
+
Record<HttpMethod, { servers?: DocumentServer[] } | null>
|
|
1589
|
+
>;
|
|
1590
|
+
|
|
1591
|
+
/** The built-in proxy's allowlist: every spec's origins, deduped and sorted. */
|
|
1592
|
+
export const specOrigins = (data: OpenApiData): string[] =>
|
|
1550
1593
|
[...new Set(Object.values(data).flatMap(specOriginsOf))].toSorted();
|
|
1551
1594
|
|
|
1552
1595
|
/**
|
|
@@ -1558,7 +1601,7 @@ const specOrigins = (data: OpenApiData): string[] =>
|
|
|
1558
1601
|
* whose own origins came out empty (no absolute `servers[].url`, no absolute
|
|
1559
1602
|
* GraphQL `endpoint`) gets a warning naming it.
|
|
1560
1603
|
*/
|
|
1561
|
-
const proxyAllowlistWarnings = (
|
|
1604
|
+
export const proxyAllowlistWarnings = (
|
|
1562
1605
|
config: ResolvedConfig,
|
|
1563
1606
|
data: OpenApiData
|
|
1564
1607
|
): string[] => {
|
|
@@ -1573,16 +1616,16 @@ const proxyAllowlistWarnings = (
|
|
|
1573
1616
|
warnings.push(
|
|
1574
1617
|
spec.kind === "graphql"
|
|
1575
1618
|
? `The "${spec.label}" GraphQL reference (${spec.route}) has playground.proxy: true, but no absolute endpoint is configured for it, so the built-in proxy has no origin to allow and will refuse every request its playground sends. Set \`endpoint\` on the graphql() adapter (or the source) to the live GraphQL URL, or point playground.proxy at an external proxy URL.`
|
|
1576
|
-
: `The "${spec.label}" reference (${spec.route}) has playground.proxy: true, but its spec declares no absolute servers[].url (relative and templated
|
|
1619
|
+
: `The "${spec.label}" reference (${spec.route}) has playground.proxy: true, but its spec declares no absolute servers[].url (relative URLs, and templated ones with a variable missing its default, carry no origin), so the built-in proxy has no origin to allow and will refuse every request its playground sends. Add an absolute server URL to the spec, or point playground.proxy at an external proxy URL.`
|
|
1577
1620
|
);
|
|
1578
1621
|
}
|
|
1579
1622
|
return warnings;
|
|
1580
1623
|
};
|
|
1581
1624
|
|
|
1582
1625
|
/**
|
|
1583
|
-
* Write the
|
|
1626
|
+
* Write the assistant endpoint and, unless the backend runs its own retrieval
|
|
1584
1627
|
* (Inkeep), the grounding snapshot the endpoint queries at request time. A no-op
|
|
1585
|
-
* when
|
|
1628
|
+
* when the assistant is disabled.
|
|
1586
1629
|
*/
|
|
1587
1630
|
const writeAskFiles = async (
|
|
1588
1631
|
project: BlumeProject,
|
|
@@ -1590,20 +1633,20 @@ const writeAskFiles = async (
|
|
|
1590
1633
|
write: (path: string, content: string) => Promise<boolean>,
|
|
1591
1634
|
modules: RuntimeModules
|
|
1592
1635
|
): Promise<void> => {
|
|
1593
|
-
const {
|
|
1594
|
-
if (!(
|
|
1636
|
+
const { assistant } = project.config.ai;
|
|
1637
|
+
if (!(assistant?.enabled && !assistant.endpoint)) {
|
|
1595
1638
|
return;
|
|
1596
1639
|
}
|
|
1597
|
-
const backend = resolveAskBackend(
|
|
1640
|
+
const backend = resolveAskBackend(assistant.provider);
|
|
1598
1641
|
if (backend.grounded) {
|
|
1599
1642
|
modules.set("blume:ask-data", JSON.stringify(await buildAskData(project)));
|
|
1600
1643
|
}
|
|
1601
1644
|
await write(
|
|
1602
1645
|
join(srcDir, "pages", "api", "ask.ts"),
|
|
1603
1646
|
askEndpointTemplate(backend, {
|
|
1604
|
-
cors:
|
|
1605
|
-
instructions:
|
|
1606
|
-
retrieval:
|
|
1647
|
+
cors: assistant.cors,
|
|
1648
|
+
instructions: assistant.instructions,
|
|
1649
|
+
retrieval: assistant.retrieval,
|
|
1607
1650
|
})
|
|
1608
1651
|
);
|
|
1609
1652
|
};
|
|
@@ -1645,7 +1688,7 @@ export const diagnosticWarning = (diagnostic: Diagnostic): string =>
|
|
|
1645
1688
|
|
|
1646
1689
|
/**
|
|
1647
1690
|
* Missing-dependency preflight: the search provider's SDK, content source
|
|
1648
|
-
* SDKs, the
|
|
1691
|
+
* SDKs, the assistant backend's provider SDK, the deployment adapter's package,
|
|
1649
1692
|
* and — since React ships with Blume while Vue/Svelte don't — any island
|
|
1650
1693
|
* framework's Astro integration. A build fails here, before anything is
|
|
1651
1694
|
* written, with the install command for the project's package manager —
|
|
@@ -1699,6 +1742,7 @@ export const analyzeComponentsFile = async (
|
|
|
1699
1742
|
const projectOgFonts = (project: BlumeProject): DerivedOgFonts =>
|
|
1700
1743
|
resolveOgFonts(
|
|
1701
1744
|
{
|
|
1745
|
+
locales: fontLocaleCodes(project.config.i18n),
|
|
1702
1746
|
ogFonts: project.config.seo.og.fonts,
|
|
1703
1747
|
themeFonts: project.config.theme.fonts,
|
|
1704
1748
|
themeFontsConfigured: project.themeFontsConfigured,
|
|
@@ -1845,7 +1889,7 @@ export const generateRuntime = async (
|
|
|
1845
1889
|
const homeLinkHeader =
|
|
1846
1890
|
buildHomeLinkHeader(config, contentRoutes) ?? undefined;
|
|
1847
1891
|
|
|
1848
|
-
const
|
|
1892
|
+
const assistantEnabled = config.ai.assistant?.enabled ?? false;
|
|
1849
1893
|
const exportPdf = config.export.pdf;
|
|
1850
1894
|
const exportEpub = config.export.epub;
|
|
1851
1895
|
// Every route's source Markdown: published as `blume:raw-markdown` below,
|
|
@@ -1897,7 +1941,7 @@ export const generateRuntime = async (
|
|
|
1897
1941
|
project.examples = exampleMarkdownLookup(exampleDiscovery.examples);
|
|
1898
1942
|
|
|
1899
1943
|
// Each island/example framework enables its Astro renderer. React also
|
|
1900
|
-
// switches on for any project `.tsx`/`.jsx` and for
|
|
1944
|
+
// switches on for any project `.tsx`/`.jsx` and for the assistant; Vue/Svelte are
|
|
1901
1945
|
// island/example-driven. `.astro` examples need no renderer. Component
|
|
1902
1946
|
// overrides referencing a framework component enable its renderer too.
|
|
1903
1947
|
const frameworks = new Set<string>([
|
|
@@ -1906,7 +1950,8 @@ export const generateRuntime = async (
|
|
|
1906
1950
|
...slotPlan.frameworks,
|
|
1907
1951
|
]);
|
|
1908
1952
|
const dependencyWarnings = await dependencyPreflight(project, frameworks);
|
|
1909
|
-
const needsReact =
|
|
1953
|
+
const needsReact =
|
|
1954
|
+
detectedReact || assistantEnabled || frameworks.has("react");
|
|
1910
1955
|
const needsVue = frameworks.has("vue");
|
|
1911
1956
|
const needsSvelte = frameworks.has("svelte");
|
|
1912
1957
|
|
|
@@ -2025,7 +2070,7 @@ export const generateRuntime = async (
|
|
|
2025
2070
|
// The header's Ask trigger, behind the `blume:ask` alias. Always written
|
|
2026
2071
|
// (even when Ask is off, as a component that renders nothing) so the alias
|
|
2027
2072
|
// resolves — the same contract as `blume:search-client`.
|
|
2028
|
-
write(askPath, askComponentTemplate(
|
|
2073
|
+
write(askPath, askComponentTemplate(assistantEnabled)),
|
|
2029
2074
|
write(join(srcDir, "generated", "components.ts"), slotPlan.module),
|
|
2030
2075
|
write(
|
|
2031
2076
|
join(srcDir, "generated", "examples.ts"),
|
|
@@ -2288,7 +2333,7 @@ export const generateRuntime = async (
|
|
|
2288
2333
|
writeStagedContent(out, staged),
|
|
2289
2334
|
]);
|
|
2290
2335
|
|
|
2291
|
-
// Remove anything under `.blume/src` this pass didn't write — e.g. an
|
|
2336
|
+
// Remove anything under `.blume/src` this pass didn't write — e.g. an assistant
|
|
2292
2337
|
// endpoint left behind after the feature was switched off.
|
|
2293
2338
|
await pruneOrphans(srcDir, written);
|
|
2294
2339
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
export const runtimeModuleDeclarations = (
|
|
15
15
|
examplesModule: string
|
|
16
16
|
): string => `declare module "blume:ask" {
|
|
17
|
-
const Ask: typeof import("blume/components/islands/
|
|
17
|
+
const Ask: typeof import("blume/components/islands/Assistant.astro").default;
|
|
18
18
|
export default Ask;
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -85,18 +85,18 @@ export const sourceAdapterDependencies = (
|
|
|
85
85
|
);
|
|
86
86
|
|
|
87
87
|
/**
|
|
88
|
-
* The
|
|
88
|
+
* The assistant adapter's provider SDK, when missing — only `gateway` needs
|
|
89
89
|
* nothing beyond the core `ai` package Blume ships. An external `endpoint`
|
|
90
90
|
* means no generated route, so no SDK is imported.
|
|
91
91
|
*/
|
|
92
|
-
export const
|
|
93
|
-
ask: ResolvedConfig["ai"]["
|
|
92
|
+
export const assistantProviderDependencies = (
|
|
93
|
+
ask: ResolvedConfig["ai"]["assistant"],
|
|
94
94
|
root: string,
|
|
95
95
|
pkgDir: string = packageRoot()
|
|
96
96
|
): MissingDependency[] =>
|
|
97
97
|
ask?.enabled && !ask.endpoint
|
|
98
98
|
? unresolved(
|
|
99
|
-
`
|
|
99
|
+
`Assistant provider "${ask.provider.kind}"`,
|
|
100
100
|
ask.provider.runtimeDeps,
|
|
101
101
|
root,
|
|
102
102
|
pkgDir
|
|
@@ -152,7 +152,7 @@ export const islandFrameworkDependencies = (
|
|
|
152
152
|
/**
|
|
153
153
|
* Every package the resolved config's adapters (and the given island
|
|
154
154
|
* frameworks) import that isn't installed: the search SDK, content source
|
|
155
|
-
* SDKs, the
|
|
155
|
+
* SDKs, the assistant provider SDK, the deployment adapter, and island
|
|
156
156
|
* integrations. The adapters' `runtimeDeps` are the one place that knows.
|
|
157
157
|
*/
|
|
158
158
|
export const missingRuntimeDependencies = (
|
|
@@ -163,7 +163,7 @@ export const missingRuntimeDependencies = (
|
|
|
163
163
|
): MissingDependency[] => [
|
|
164
164
|
...searchProviderDependencies(config.search.provider, root, pkgDir),
|
|
165
165
|
...sourceAdapterDependencies(config.content.sources, root, pkgDir),
|
|
166
|
-
...
|
|
166
|
+
...assistantProviderDependencies(config.ai.assistant, root, pkgDir),
|
|
167
167
|
...deploymentAdapterDependencies(config.deployment, root, pkgDir),
|
|
168
168
|
...islandFrameworkDependencies(frameworks, root),
|
|
169
169
|
];
|