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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { join } from "pathe";
|
|
2
2
|
|
|
3
3
|
import matter from "../frontmatter.ts";
|
|
4
|
+
import { neutralizeUnsafeLinks } from "../safe-links.ts";
|
|
4
5
|
import {
|
|
5
6
|
hashText,
|
|
6
7
|
loadWithCache,
|
|
@@ -19,12 +20,21 @@ import type {
|
|
|
19
20
|
|
|
20
21
|
/** What every REST-backed CMS source needs to be a staged, cached source. */
|
|
21
22
|
export interface RemoteSourceOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Throw a `BlumeError` when the source cannot load as configured. Runs
|
|
25
|
+
* before the cache is consulted: thrown from `fetchEntries` instead, a
|
|
26
|
+
* misconfiguration would be served over by a stale snapshot with only an
|
|
27
|
+
* offline warning.
|
|
28
|
+
*/
|
|
29
|
+
assertConfigured?: () => void;
|
|
22
30
|
/** Pull every entry from the API; called on refresh and on each poll. */
|
|
23
31
|
fetchEntries: () => Promise<SourceEntry[]>;
|
|
24
32
|
name: string;
|
|
25
33
|
/** Opt-in dev polling interval (seconds); omit to freeze for the session. */
|
|
26
34
|
pollInterval?: number;
|
|
27
35
|
prefix?: string;
|
|
36
|
+
/** The adapter rebuilt on another context (`ContentSource.withContext`). */
|
|
37
|
+
withContext?: (ctx: SourceContext) => ContentSource;
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
/**
|
|
@@ -45,6 +55,7 @@ export const remoteSource = (
|
|
|
45
55
|
const load = async (
|
|
46
56
|
refresh = ctx?.refresh ?? true
|
|
47
57
|
): Promise<SourceLoadResult> => {
|
|
58
|
+
options.assertConfigured?.();
|
|
48
59
|
const result = await loadWithCache(
|
|
49
60
|
options.name,
|
|
50
61
|
cache,
|
|
@@ -77,6 +88,7 @@ export const remoteSource = (
|
|
|
77
88
|
() => load()
|
|
78
89
|
)
|
|
79
90
|
: undefined,
|
|
91
|
+
withContext: options.withContext,
|
|
80
92
|
};
|
|
81
93
|
};
|
|
82
94
|
|
|
@@ -182,7 +194,8 @@ export interface RemoteFieldMap {
|
|
|
182
194
|
* when the slug field is missing or slugifies to nothing (pure punctuation),
|
|
183
195
|
* so distinct documents never collapse onto one `untitled.md`; a slashed
|
|
184
196
|
* slug keeps its segments. A string body is Markdown and passes through as
|
|
185
|
-
* `.md
|
|
197
|
+
* `.md`, its unsafe links reduced to their labels; any other shape goes to
|
|
198
|
+
* the CMS's lowerer, and is written as `.mdx`
|
|
186
199
|
* when `lowersToMdx` (the source has serializers, see `writesMdx`).
|
|
187
200
|
*/
|
|
188
201
|
export const documentEntry = (
|
|
@@ -211,7 +224,10 @@ export const documentEntry = (
|
|
|
211
224
|
let markdown = "";
|
|
212
225
|
let format: "md" | "mdx" = "md";
|
|
213
226
|
if (isStringValue(body)) {
|
|
214
|
-
|
|
227
|
+
// The CMS's Markdown is its editors', not the site author's: a link whose
|
|
228
|
+
// destination isn't a web, mail, or relative address (`javascript:`)
|
|
229
|
+
// keeps only its label, as release notes do (see `safe-links.ts`).
|
|
230
|
+
markdown = neutralizeUnsafeLinks(`${body.trimEnd()}\n`);
|
|
215
231
|
} else if (body !== undefined) {
|
|
216
232
|
markdown = lower(body);
|
|
217
233
|
format = lowersToMdx ? "mdx" : "md";
|
|
@@ -4,7 +4,9 @@ import { blumeReferences } from "../../openapi/references.ts";
|
|
|
4
4
|
import { openApiSource } from "../../openapi/source.ts";
|
|
5
5
|
import type { ContentSourceAdapter } from "../../sources/registry.ts";
|
|
6
6
|
import type { ResolvedConfig } from "../schema.ts";
|
|
7
|
+
import { trimChar } from "../trim.ts";
|
|
7
8
|
import type { ProjectContext } from "../types.ts";
|
|
9
|
+
import { hashText } from "./cache.ts";
|
|
8
10
|
import { contentfulSource } from "./contentful.ts";
|
|
9
11
|
import { filesystemSource } from "./filesystem.ts";
|
|
10
12
|
import { githubReleasesSource } from "./github-releases.ts";
|
|
@@ -45,14 +47,40 @@ export interface SourceRuntime {
|
|
|
45
47
|
refresh?: boolean;
|
|
46
48
|
}
|
|
47
49
|
|
|
50
|
+
/**
|
|
51
|
+
* The directory under `.blume/cache/<source>/` a source keeps its snapshot in:
|
|
52
|
+
* one per preview mode and set of adapter options. A preview snapshot holds
|
|
53
|
+
* drafts, so a published load must never read it, neither as dev's cache-first
|
|
54
|
+
* snapshot nor as a build's offline fallback; and a snapshot fetched with
|
|
55
|
+
* another `query` or `fields` is another result, not a cached copy of this
|
|
56
|
+
* one. `pollInterval` only paces dev re-fetches, so it is left out. A
|
|
57
|
+
* `custom()` source is a live instance rather than options, so its snapshot
|
|
58
|
+
* is keyed by preview mode alone.
|
|
59
|
+
*/
|
|
60
|
+
export const snapshotKey = (
|
|
61
|
+
adapter: ContentSourceAdapter,
|
|
62
|
+
runtime: SourceRuntime
|
|
63
|
+
): string => {
|
|
64
|
+
const mode = runtime.preview ? "preview" : "published";
|
|
65
|
+
if (adapter.kind === "custom") {
|
|
66
|
+
return mode;
|
|
67
|
+
}
|
|
68
|
+
const { pollInterval: _paced, ...fetched } = adapter.options;
|
|
69
|
+
return `${mode}-${hashText(JSON.stringify(fetched))}`;
|
|
70
|
+
};
|
|
71
|
+
|
|
48
72
|
const sourceContext = (
|
|
49
73
|
context: ProjectContext,
|
|
50
74
|
name: string,
|
|
51
|
-
runtime: SourceRuntime
|
|
75
|
+
runtime: SourceRuntime,
|
|
76
|
+
snapshot?: string
|
|
52
77
|
): SourceContext => ({
|
|
53
78
|
assetsBaseUrl: `/blume-assets/${name}`,
|
|
54
79
|
assetsDir: join(context.outDir, "public", "blume-assets", name),
|
|
55
|
-
cacheDir:
|
|
80
|
+
cacheDir:
|
|
81
|
+
snapshot === undefined
|
|
82
|
+
? join(context.outDir, "cache", name)
|
|
83
|
+
: join(context.outDir, "cache", name, snapshot),
|
|
56
84
|
mode: runtime.mode,
|
|
57
85
|
preview: runtime.preview,
|
|
58
86
|
projectRoot: context.root,
|
|
@@ -86,46 +114,37 @@ const buildSource = (
|
|
|
86
114
|
context: ProjectContext,
|
|
87
115
|
runtime: SourceRuntime
|
|
88
116
|
): ContentSource => {
|
|
117
|
+
const ctx = (): SourceContext =>
|
|
118
|
+
sourceContext(context, name, runtime, snapshotKey(adapter, runtime));
|
|
89
119
|
switch (adapter.kind) {
|
|
90
120
|
case "filesystem": {
|
|
91
121
|
const { pollInterval: _ignored, ...options } = adapter.options;
|
|
92
122
|
return filesystemSource({ ...options, name, projectRoot: context.root });
|
|
93
123
|
}
|
|
94
124
|
case "custom": {
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
|
|
125
|
+
// An instance built by one of Blume's engine factories rebuilds itself
|
|
126
|
+
// on this scan's context, so `custom(sanitySource({…}))` reads drafts
|
|
127
|
+
// under `--preview` and caches in the runtime directory like the
|
|
128
|
+
// built-in adapter. Any other instance manages its own context and
|
|
129
|
+
// caching. Either way its name is made unique across the project for
|
|
130
|
+
// id namespacing.
|
|
131
|
+
const source = adapter.options.withContext?.(ctx()) ?? adapter.options;
|
|
98
132
|
return source.name === name ? source : { ...source, name };
|
|
99
133
|
}
|
|
100
134
|
case "sanity": {
|
|
101
|
-
return sanitySource(
|
|
102
|
-
{ ...adapter.options, name },
|
|
103
|
-
sourceContext(context, name, runtime)
|
|
104
|
-
);
|
|
135
|
+
return sanitySource({ ...adapter.options, name }, ctx());
|
|
105
136
|
}
|
|
106
137
|
case "notion": {
|
|
107
|
-
return notionSource(
|
|
108
|
-
{ ...adapter.options, name },
|
|
109
|
-
sourceContext(context, name, runtime)
|
|
110
|
-
);
|
|
138
|
+
return notionSource({ ...adapter.options, name }, ctx());
|
|
111
139
|
}
|
|
112
140
|
case "contentful": {
|
|
113
|
-
return contentfulSource(
|
|
114
|
-
{ ...adapter.options, name },
|
|
115
|
-
sourceContext(context, name, runtime)
|
|
116
|
-
);
|
|
141
|
+
return contentfulSource({ ...adapter.options, name }, ctx());
|
|
117
142
|
}
|
|
118
143
|
case "payload": {
|
|
119
|
-
return payloadSource(
|
|
120
|
-
{ ...adapter.options, name },
|
|
121
|
-
sourceContext(context, name, runtime)
|
|
122
|
-
);
|
|
144
|
+
return payloadSource({ ...adapter.options, name }, ctx());
|
|
123
145
|
}
|
|
124
146
|
case "strapi": {
|
|
125
|
-
return strapiSource(
|
|
126
|
-
{ ...adapter.options, name },
|
|
127
|
-
sourceContext(context, name, runtime)
|
|
128
|
-
);
|
|
147
|
+
return strapiSource({ ...adapter.options, name }, ctx());
|
|
129
148
|
}
|
|
130
149
|
case "obsidian": {
|
|
131
150
|
const { pollInterval: _ignored, ...options } = adapter.options;
|
|
@@ -139,13 +158,13 @@ const buildSource = (
|
|
|
139
158
|
typeFrontmatterKeys: typeFrontmatterKeys(config),
|
|
140
159
|
versions: config.versions,
|
|
141
160
|
},
|
|
142
|
-
|
|
161
|
+
ctx()
|
|
143
162
|
);
|
|
144
163
|
}
|
|
145
164
|
case "github-releases": {
|
|
146
165
|
return githubReleasesSource(
|
|
147
|
-
{ ...adapter.options, name },
|
|
148
|
-
|
|
166
|
+
{ ...adapter.options, name, site: config.deployment.options.site },
|
|
167
|
+
ctx()
|
|
149
168
|
);
|
|
150
169
|
}
|
|
151
170
|
default: {
|
|
@@ -156,10 +175,7 @@ const buildSource = (
|
|
|
156
175
|
break;
|
|
157
176
|
}
|
|
158
177
|
}
|
|
159
|
-
return mdxRemoteSource(
|
|
160
|
-
{ ...adapter.options, name },
|
|
161
|
-
sourceContext(context, name, runtime)
|
|
162
|
-
);
|
|
178
|
+
return mdxRemoteSource({ ...adapter.options, name }, ctx());
|
|
163
179
|
};
|
|
164
180
|
|
|
165
181
|
/** The base name to allocate for a descriptor (before deduplication). */
|
|
@@ -167,7 +183,10 @@ const baseName = (adapter: ContentSourceAdapter): string => {
|
|
|
167
183
|
if (adapter.kind === "custom") {
|
|
168
184
|
return adapter.options.name;
|
|
169
185
|
}
|
|
170
|
-
|
|
186
|
+
// The name is the prefix as a route spells it: `/guides` and `guides/`
|
|
187
|
+
// route under `guides`, so the source's staged entry ids, cache directory,
|
|
188
|
+
// and asset URLs must use `guides` too.
|
|
189
|
+
return trimChar(adapter.options.prefix ?? "", "/") || adapter.kind;
|
|
171
190
|
};
|
|
172
191
|
|
|
173
192
|
/**
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
absoluteUrl,
|
|
10
10
|
blockquote,
|
|
11
11
|
codeFence,
|
|
12
|
+
guardBlockStart,
|
|
12
13
|
headingPrefix,
|
|
13
14
|
image,
|
|
14
15
|
listItem,
|
|
@@ -52,12 +53,16 @@ const renderInlineNode = (node: JsonObject): string => {
|
|
|
52
53
|
}
|
|
53
54
|
};
|
|
54
55
|
|
|
56
|
+
/** A text block's inline nodes, joined and guarded as one block. */
|
|
57
|
+
const blockText = (nodes: JsonObject[]): string =>
|
|
58
|
+
guardBlockStart(renderInlines(nodes));
|
|
59
|
+
|
|
55
60
|
const renderList = (node: JsonObject): string => {
|
|
56
61
|
const ordered = asString(node.format) === "ordered";
|
|
57
62
|
return children(node)
|
|
58
63
|
.map((item, index) => {
|
|
59
64
|
const kids = children(item);
|
|
60
|
-
const line =
|
|
65
|
+
const line = blockText(kids.filter((kid) => typeOf(kid) !== "list"));
|
|
61
66
|
const sub = kids
|
|
62
67
|
.filter((kid) => typeOf(kid) === "list")
|
|
63
68
|
.map((list) => renderList(list))
|
|
@@ -89,13 +94,13 @@ const renderBlock = (
|
|
|
89
94
|
): string => {
|
|
90
95
|
switch (typeOf(node)) {
|
|
91
96
|
case "paragraph": {
|
|
92
|
-
return
|
|
97
|
+
return blockText(children(node));
|
|
93
98
|
}
|
|
94
99
|
case "heading": {
|
|
95
|
-
return `${headingPrefix(asNumber(node.level) ?? 1)}${
|
|
100
|
+
return `${headingPrefix(asNumber(node.level) ?? 1)}${blockText(children(node))}`;
|
|
96
101
|
}
|
|
97
102
|
case "quote": {
|
|
98
|
-
return blockquote(
|
|
103
|
+
return blockquote(blockText(children(node)));
|
|
99
104
|
}
|
|
100
105
|
case "list": {
|
|
101
106
|
return renderList(node);
|
|
@@ -39,6 +39,13 @@ export interface SourceEntry {
|
|
|
39
39
|
* the owning source to expose a `contentRoot` to bound the log's pathspec.
|
|
40
40
|
*/
|
|
41
41
|
sourcePath?: string;
|
|
42
|
+
/**
|
|
43
|
+
* How many lines of the file at `sourcePath` sit above `body.text`, when
|
|
44
|
+
* `raw` is not that file's text: a source that rewrites a local file's
|
|
45
|
+
* front matter (an Obsidian note) sets it, so a diagnostic points at the
|
|
46
|
+
* line the author wrote. Otherwise the height of `raw`'s front matter.
|
|
47
|
+
*/
|
|
48
|
+
bodyLineOffset?: number;
|
|
42
49
|
/** Optional provenance for "edit this page". */
|
|
43
50
|
editUrl?: string;
|
|
44
51
|
/** Optional last-modified ISO date supplied by the adapter (non-filesystem). */
|
|
@@ -123,6 +130,14 @@ export interface ContentSource {
|
|
|
123
130
|
* switcher, since every other locale would only repeat the same text.
|
|
124
131
|
*/
|
|
125
132
|
readonly monolingual?: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* True for a staged source whose entry refs are file and folder names (an
|
|
135
|
+
* Obsidian vault), so their ordering prefixes (`01 Intro`) sort the sidebar
|
|
136
|
+
* and drop from the route the way a filesystem source's do. Filesystem
|
|
137
|
+
* sources always do; other staged refs are slugs and release tags, kept
|
|
138
|
+
* whole.
|
|
139
|
+
*/
|
|
140
|
+
readonly orderedNames?: boolean;
|
|
126
141
|
/**
|
|
127
142
|
* Resolved on-disk root, set by sources whose entries live on disk. For
|
|
128
143
|
* filesystem sources it drives folder-meta discovery (scan under this root)
|
|
@@ -132,6 +147,13 @@ export interface ContentSource {
|
|
|
132
147
|
* no local tree.
|
|
133
148
|
*/
|
|
134
149
|
readonly contentRoot?: string;
|
|
150
|
+
/**
|
|
151
|
+
* The globs a filesystem source reads under `contentRoot`, and the ones it
|
|
152
|
+
* skips. Folder-meta discovery honors them, so a `meta.ts` outside the
|
|
153
|
+
* content the source reads is never imported.
|
|
154
|
+
*/
|
|
155
|
+
readonly include?: readonly string[];
|
|
156
|
+
readonly exclude?: readonly string[];
|
|
135
157
|
/** Pull every entry. Called once per scan. */
|
|
136
158
|
load: () => Promise<SourceLoadResult>;
|
|
137
159
|
/** Validate the source is usable; throws a BlumeError when not. */
|
|
@@ -143,6 +165,14 @@ export interface ContentSource {
|
|
|
143
165
|
* remote/static sources omit it (content is frozen for the session).
|
|
144
166
|
*/
|
|
145
167
|
watch?: (onChange: () => void) => () => void;
|
|
168
|
+
/**
|
|
169
|
+
* This source rebuilt on another runtime context. A source passed to
|
|
170
|
+
* `custom()` is constructed before Blume knows the scan's preview flag,
|
|
171
|
+
* refresh policy, or runtime directory; Blume rebuilds it on them through
|
|
172
|
+
* this, so it previews and caches the way the built-in adapter does. The
|
|
173
|
+
* engine factories (`sanitySource`, `contentfulSource`, …) all set it.
|
|
174
|
+
*/
|
|
175
|
+
withContext?: (ctx: SourceContext) => ContentSource;
|
|
146
176
|
}
|
|
147
177
|
|
|
148
178
|
/** Context passed to `normalizeEntry`, describing the owning source. */
|
|
@@ -150,6 +180,7 @@ export interface NormalizeContext {
|
|
|
150
180
|
source: {
|
|
151
181
|
monolingual?: boolean;
|
|
152
182
|
name: string;
|
|
183
|
+
orderedNames?: boolean;
|
|
153
184
|
prefix?: string;
|
|
154
185
|
staged: boolean;
|
|
155
186
|
};
|
package/src/core/types.ts
CHANGED
|
@@ -325,6 +325,13 @@ export interface Navigation {
|
|
|
325
325
|
* locale trees.
|
|
326
326
|
*/
|
|
327
327
|
brandHref?: string;
|
|
328
|
+
/**
|
|
329
|
+
* Where the banner's link points in this locale: `banner.link.href`
|
|
330
|
+
* localized like a featured link, then mounted under `basePath` (a route
|
|
331
|
+
* served outside the content tree keeps its own path). Set when the banner
|
|
332
|
+
* has a link.
|
|
333
|
+
*/
|
|
334
|
+
bannerHref?: string;
|
|
328
335
|
}
|
|
329
336
|
|
|
330
337
|
/** The full content graph: the source of truth for generated modules. */
|
|
@@ -413,6 +420,8 @@ export interface RouteManifestEntry {
|
|
|
413
420
|
fallback?: boolean;
|
|
414
421
|
/** True when the page's source publishes one language only (no switcher). */
|
|
415
422
|
monolingual?: boolean;
|
|
423
|
+
/** True when front matter `ai.exclude` keeps the page out of llms.txt. */
|
|
424
|
+
aiExclude?: boolean;
|
|
416
425
|
/** Resolved "last updated" ISO date, when the feature is enabled. */
|
|
417
426
|
lastModified?: string;
|
|
418
427
|
}
|
package/src/core/ui-packs/ar.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const ar: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "إضافة إلى Cursor",
|
|
7
7
|
addToVscode: "إضافة إلى VS Code",
|
|
8
|
-
askAI: "اسأل الذكاء الاصطناعي عن هذه الصفحة",
|
|
9
8
|
connectMcp: "الاتصال بـ MCP",
|
|
10
9
|
copied: "تم النسخ!",
|
|
11
10
|
copyClaudeCode: "نسخ أمر Claude Code",
|
|
@@ -24,7 +23,7 @@ export const ar: UIStringsOverride = {
|
|
|
24
23
|
openInChatPrompt: "اقرأ {url} حتى أتمكن من طرح أسئلة حول هذه الصفحة.",
|
|
25
24
|
scrollToTop: "العودة إلى الأعلى",
|
|
26
25
|
},
|
|
27
|
-
|
|
26
|
+
assistant: {
|
|
28
27
|
ai: "الذكاء الاصطناعي",
|
|
29
28
|
clear: "مسح المحادثة",
|
|
30
29
|
close: "إغلاق",
|
|
@@ -35,7 +34,7 @@ export const ar: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "اطرح سؤالاً…",
|
|
36
35
|
send: "إرسال",
|
|
37
36
|
tip: "نصيحة: يمكنك فتح المحادثة وإغلاقها باستخدام",
|
|
38
|
-
title: "
|
|
37
|
+
title: "المساعد",
|
|
39
38
|
you: "أنت",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "إغلاق الإعلان" },
|
|
@@ -44,9 +43,20 @@ export const ar: UIStringsOverride = {
|
|
|
44
43
|
title: "سجل التغييرات",
|
|
45
44
|
},
|
|
46
45
|
content: {
|
|
46
|
+
code: "الكود",
|
|
47
47
|
copyColor: "نسخ اللون {name} {value}",
|
|
48
48
|
copyPrompt: "نسخ الموجّه",
|
|
49
|
+
default: "الافتراضي",
|
|
49
50
|
diagramError: "تعذّر عرض هذا المخطط.",
|
|
51
|
+
forks: "التفرعات",
|
|
52
|
+
preview: "معاينة",
|
|
53
|
+
prop: "الخاصية",
|
|
54
|
+
selectTab: "اختيار علامة تبويب",
|
|
55
|
+
showMore: "عرض المزيد",
|
|
56
|
+
stars: "النجوم",
|
|
57
|
+
tab: "علامة التبويب {n}",
|
|
58
|
+
type: "النوع",
|
|
59
|
+
update: "تحديث",
|
|
50
60
|
},
|
|
51
61
|
feedback: {
|
|
52
62
|
no: "لا",
|
|
@@ -84,12 +94,14 @@ export const ar: UIStringsOverride = {
|
|
|
84
94
|
search: {
|
|
85
95
|
all: "الكل",
|
|
86
96
|
allLanguages: "جميع اللغات",
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
assistant: "المساعد",
|
|
98
|
+
assistantHint: "احصل على إجابة فورية من الذكاء الاصطناعي",
|
|
89
99
|
button: "بحث",
|
|
90
100
|
devOnly: "البحث متاح في إصدار الإنتاج.",
|
|
101
|
+
docs: "الوثائق",
|
|
91
102
|
error: "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
|
|
92
103
|
label: "البحث في الوثائق",
|
|
104
|
+
latest: "الأحدث",
|
|
93
105
|
navigate: "تنقل",
|
|
94
106
|
noResults: "لم يتم العثور على نتائج.",
|
|
95
107
|
open: "فتح",
|
package/src/core/ui-packs/bg.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const bg: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Добави в Cursor",
|
|
7
7
|
addToVscode: "Добави във VS Code",
|
|
8
|
-
askAI: "Попитай ИИ за тази страница",
|
|
9
8
|
connectMcp: "Свържи се с MCP",
|
|
10
9
|
copied: "Копирано!",
|
|
11
10
|
copyClaudeCode: "Копирай командата на Claude Code",
|
|
@@ -25,7 +24,7 @@ export const bg: UIStringsOverride = {
|
|
|
25
24
|
"Прочетете {url}, за да мога да задавам въпроси за тази страница.",
|
|
26
25
|
scrollToTop: "Нагоре",
|
|
27
26
|
},
|
|
28
|
-
|
|
27
|
+
assistant: {
|
|
29
28
|
ai: "ИИ",
|
|
30
29
|
clear: "Изчисти разговора",
|
|
31
30
|
close: "Затвори",
|
|
@@ -36,7 +35,7 @@ export const bg: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Задайте въпрос…",
|
|
37
36
|
send: "Изпрати",
|
|
38
37
|
tip: "Съвет: Можете да отваряте и затваряте чата с",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Асистент",
|
|
40
39
|
you: "Вие",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Затваряне на съобщението" },
|
|
@@ -45,9 +44,20 @@ export const bg: UIStringsOverride = {
|
|
|
45
44
|
title: "Дневник на промените",
|
|
46
45
|
},
|
|
47
46
|
content: {
|
|
47
|
+
code: "Код",
|
|
48
48
|
copyColor: "Копирай цвета {name} {value}",
|
|
49
49
|
copyPrompt: "Копирай подканата",
|
|
50
|
+
default: "По подразбиране",
|
|
50
51
|
diagramError: "Тази диаграма не можа да бъде показана.",
|
|
52
|
+
forks: "Разклонения",
|
|
53
|
+
preview: "Преглед",
|
|
54
|
+
prop: "Свойство",
|
|
55
|
+
selectTab: "Избери раздел",
|
|
56
|
+
showMore: "Покажи още",
|
|
57
|
+
stars: "Звезди",
|
|
58
|
+
tab: "Раздел {n}",
|
|
59
|
+
type: "Тип",
|
|
60
|
+
update: "Актуализация",
|
|
51
61
|
},
|
|
52
62
|
feedback: {
|
|
53
63
|
no: "Не",
|
|
@@ -85,12 +95,14 @@ export const bg: UIStringsOverride = {
|
|
|
85
95
|
search: {
|
|
86
96
|
all: "Всички",
|
|
87
97
|
allLanguages: "Всички езици",
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
assistant: "Асистент",
|
|
99
|
+
assistantHint: "Получете незабавен отговор от ИИ",
|
|
90
100
|
button: "Търсене",
|
|
91
101
|
devOnly: "Търсенето е достъпно в производствената компилация.",
|
|
102
|
+
docs: "Документация",
|
|
92
103
|
error: "Нещо се обърка. Моля, опитайте отново.",
|
|
93
104
|
label: "Търсене в документацията",
|
|
105
|
+
latest: "най-нова",
|
|
94
106
|
navigate: "навигация",
|
|
95
107
|
noResults: "Няма намерени резултати.",
|
|
96
108
|
open: "отвори",
|
package/src/core/ui-packs/bn.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const bn: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Cursor-এ যোগ করুন",
|
|
7
7
|
addToVscode: "VS Code-এ যোগ করুন",
|
|
8
|
-
askAI: "এই পৃষ্ঠা সম্পর্কে AI-কে জিজ্ঞাসা করুন",
|
|
9
8
|
connectMcp: "MCP-তে সংযোগ করুন",
|
|
10
9
|
copied: "অনুলিপি করা হয়েছে!",
|
|
11
10
|
copyClaudeCode: "Claude Code কমান্ড অনুলিপি করুন",
|
|
@@ -24,7 +23,7 @@ export const bn: UIStringsOverride = {
|
|
|
24
23
|
openInChatPrompt: "{url} পড়ুন, যাতে আমি এই পৃষ্ঠা সম্পর্কে প্রশ্ন করতে পারি।",
|
|
25
24
|
scrollToTop: "উপরে যান",
|
|
26
25
|
},
|
|
27
|
-
|
|
26
|
+
assistant: {
|
|
28
27
|
ai: "AI",
|
|
29
28
|
clear: "কথোপকথন মুছুন",
|
|
30
29
|
close: "বন্ধ করুন",
|
|
@@ -35,7 +34,7 @@ export const bn: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "একটি প্রশ্ন করুন…",
|
|
36
35
|
send: "পাঠান",
|
|
37
36
|
tip: "টিপ: চ্যাট খুলতে ও বন্ধ করতে চাপুন",
|
|
38
|
-
title: "
|
|
37
|
+
title: "সহকারী",
|
|
39
38
|
you: "আপনি",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "ঘোষণা বন্ধ করুন" },
|
|
@@ -44,9 +43,20 @@ export const bn: UIStringsOverride = {
|
|
|
44
43
|
title: "পরিবর্তন লগ",
|
|
45
44
|
},
|
|
46
45
|
content: {
|
|
46
|
+
code: "কোড",
|
|
47
47
|
copyColor: "{name} রং {value} অনুলিপি করুন",
|
|
48
48
|
copyPrompt: "প্রম্পট অনুলিপি করুন",
|
|
49
|
+
default: "ডিফল্ট",
|
|
49
50
|
diagramError: "এই ডায়াগ্রামটি রেন্ডার করা যায়নি।",
|
|
51
|
+
forks: "ফর্ক",
|
|
52
|
+
preview: "প্রিভিউ",
|
|
53
|
+
prop: "প্রপ",
|
|
54
|
+
selectTab: "ট্যাব নির্বাচন করুন",
|
|
55
|
+
showMore: "আরও দেখান",
|
|
56
|
+
stars: "স্টার",
|
|
57
|
+
tab: "ট্যাব {n}",
|
|
58
|
+
type: "টাইপ",
|
|
59
|
+
update: "আপডেট",
|
|
50
60
|
},
|
|
51
61
|
feedback: {
|
|
52
62
|
no: "না",
|
|
@@ -84,12 +94,14 @@ export const bn: UIStringsOverride = {
|
|
|
84
94
|
search: {
|
|
85
95
|
all: "সব",
|
|
86
96
|
allLanguages: "সব ভাষা",
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
assistant: "সহকারী",
|
|
98
|
+
assistantHint: "AI থেকে তাৎক্ষণিক উত্তর পান",
|
|
89
99
|
button: "অনুসন্ধান",
|
|
90
100
|
devOnly: "অনুসন্ধান প্রোডাকশন বিল্ডে উপলব্ধ।",
|
|
101
|
+
docs: "ডকুমেন্টেশন",
|
|
91
102
|
error: "কিছু একটা ভুল হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।",
|
|
92
103
|
label: "ডকুমেন্টেশন অনুসন্ধান করুন",
|
|
104
|
+
latest: "সর্বশেষ",
|
|
93
105
|
navigate: "নেভিগেট",
|
|
94
106
|
noResults: "কোনো ফলাফল পাওয়া যায়নি।",
|
|
95
107
|
open: "খুলুন",
|
package/src/core/ui-packs/ca.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const ca: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Afegeix a Cursor",
|
|
7
7
|
addToVscode: "Afegeix a VS Code",
|
|
8
|
-
askAI: "Pregunta a la IA sobre aquesta pàgina",
|
|
9
8
|
connectMcp: "Connecta a MCP",
|
|
10
9
|
copied: "Copiat!",
|
|
11
10
|
copyClaudeCode: "Copia l'ordre de Claude Code",
|
|
@@ -25,7 +24,7 @@ export const ca: UIStringsOverride = {
|
|
|
25
24
|
"Llegeix {url} perquè pugui fer-te preguntes sobre aquesta pàgina.",
|
|
26
25
|
scrollToTop: "Torna a dalt",
|
|
27
26
|
},
|
|
28
|
-
|
|
27
|
+
assistant: {
|
|
29
28
|
ai: "IA",
|
|
30
29
|
clear: "Esborra la conversa",
|
|
31
30
|
close: "Tanca",
|
|
@@ -36,7 +35,7 @@ export const ca: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Fes una pregunta…",
|
|
37
36
|
send: "Envia",
|
|
38
37
|
tip: "Consell: pots obrir i tancar el xat amb",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Assistent",
|
|
40
39
|
you: "Tu",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Tanca l'anunci" },
|
|
@@ -45,9 +44,20 @@ export const ca: UIStringsOverride = {
|
|
|
45
44
|
title: "Registre de canvis",
|
|
46
45
|
},
|
|
47
46
|
content: {
|
|
47
|
+
code: "Codi",
|
|
48
48
|
copyColor: "Copia el color {name} {value}",
|
|
49
49
|
copyPrompt: "Copia la indicació",
|
|
50
|
+
default: "Per defecte",
|
|
50
51
|
diagramError: "No s'ha pogut mostrar aquest diagrama.",
|
|
52
|
+
forks: "Forks",
|
|
53
|
+
preview: "Previsualització",
|
|
54
|
+
prop: "Propietat",
|
|
55
|
+
selectTab: "Selecciona una pestanya",
|
|
56
|
+
showMore: "Mostra'n més",
|
|
57
|
+
stars: "Estrelles",
|
|
58
|
+
tab: "Pestanya {n}",
|
|
59
|
+
type: "Tipus",
|
|
60
|
+
update: "Actualització",
|
|
51
61
|
},
|
|
52
62
|
feedback: {
|
|
53
63
|
no: "No",
|
|
@@ -85,12 +95,14 @@ export const ca: UIStringsOverride = {
|
|
|
85
95
|
search: {
|
|
86
96
|
all: "Tots",
|
|
87
97
|
allLanguages: "Tots els idiomes",
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
assistant: "Assistent",
|
|
99
|
+
assistantHint: "Obtén una resposta instantània de la IA",
|
|
90
100
|
button: "Cerca",
|
|
91
101
|
devOnly: "La cerca està disponible a la compilació de producció.",
|
|
102
|
+
docs: "Documentació",
|
|
92
103
|
error: "Alguna cosa ha anat malament. Torna-ho a provar.",
|
|
93
104
|
label: "Cerca a la documentació",
|
|
105
|
+
latest: "darrera",
|
|
94
106
|
navigate: "navega",
|
|
95
107
|
noResults: "No s'ha trobat cap resultat.",
|
|
96
108
|
open: "obre",
|