blume 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +28 -0
- package/README.md +2 -2
- package/dist/cli/{chunk-f7t03s3g.js → chunk-27g6wdth.js} +2 -2
- package/dist/cli/{chunk-mnqj32sj.js → chunk-2hn4b8z7.js} +13 -13
- package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
- package/dist/cli/{chunk-by2290sx.js → chunk-5shv93fd.js} +2 -2
- package/dist/cli/{chunk-a9kptbw5.js → chunk-6crbhc3x.js} +3 -3
- package/dist/cli/{chunk-a9kptbw5.js.map → chunk-6crbhc3x.js.map} +1 -1
- package/dist/cli/{chunk-mwt1k8n7.js → chunk-6hsn950k.js} +20 -20
- package/dist/cli/chunk-6hsn950k.js.map +10 -0
- package/dist/cli/{chunk-11j0384y.js → chunk-6vm74dry.js} +13 -13
- package/dist/cli/{chunk-11j0384y.js.map → chunk-6vm74dry.js.map} +3 -3
- package/dist/cli/{chunk-j8mw0za6.js → chunk-79jhk4py.js} +8 -8
- package/dist/cli/{chunk-j8mw0za6.js.map → chunk-79jhk4py.js.map} +2 -2
- package/dist/cli/{chunk-nk3ts2xk.js → chunk-82bbrxdn.js} +2 -2
- package/dist/cli/{chunk-2q1dwty4.js → chunk-ah61y8py.js} +8 -8
- package/dist/cli/{chunk-2q1dwty4.js.map → chunk-ah61y8py.js.map} +4 -4
- package/dist/cli/{chunk-zxccj738.js → chunk-ce574jw2.js} +1 -1
- package/dist/cli/{chunk-y3e45rc8.js → chunk-ch6g3ar0.js} +3 -3
- package/dist/cli/{chunk-beat36xx.js → chunk-dh8cwk36.js} +5 -5
- package/dist/cli/{chunk-beat36xx.js.map → chunk-dh8cwk36.js.map} +2 -2
- package/dist/cli/{chunk-1w8dp3qb.js → chunk-epjnccmv.js} +13 -13
- package/dist/cli/{chunk-ernrthtr.js → chunk-f2z5v128.js} +13 -13
- package/dist/cli/{chunk-zg2gtj10.js → chunk-fs23ddbb.js} +2 -2
- package/dist/cli/{chunk-7ez8ny0t.js → chunk-fxypxtvm.js} +2 -2
- package/dist/cli/{chunk-tzne8qfq.js → chunk-fz5wtpmh.js} +13 -13
- package/dist/cli/{chunk-b5aj94ah.js → chunk-hdpx1tax.js} +4 -4
- package/dist/cli/{chunk-d80hr03s.js → chunk-jwyddg7y.js} +9 -9
- package/dist/cli/{chunk-d80hr03s.js.map → chunk-jwyddg7y.js.map} +2 -2
- package/dist/cli/{chunk-fh5hj5jt.js → chunk-kdp5q7ke.js} +15 -15
- package/dist/cli/{chunk-6k8vp3ta.js → chunk-kpf8rrjc.js} +9 -9
- package/dist/cli/{chunk-6k8vp3ta.js.map → chunk-kpf8rrjc.js.map} +3 -3
- package/dist/cli/{chunk-5a2z0198.js → chunk-m3vmjgmq.js} +9 -9
- package/dist/cli/{chunk-5a2z0198.js.map → chunk-m3vmjgmq.js.map} +2 -2
- package/dist/cli/{chunk-bctazmbk.js → chunk-mb2919y2.js} +4 -4
- package/dist/cli/{chunk-79njf86q.js → chunk-q5163e60.js} +13 -13
- package/dist/cli/{chunk-xaz13gwg.js → chunk-qkqwkpte.js} +196 -208
- package/dist/cli/{chunk-xaz13gwg.js.map → chunk-qkqwkpte.js.map} +48 -48
- package/dist/cli/{chunk-sqn5t4q0.js → chunk-qs4q5p4e.js} +3 -3
- package/dist/cli/{chunk-bw22s759.js → chunk-qwsrynx5.js} +1 -1
- package/dist/cli/{chunk-z01ze5c1.js → chunk-s1p84fyh.js} +15 -15
- package/dist/cli/{chunk-pnnvybbk.js → chunk-s6jhgk0q.js} +5 -5
- package/dist/cli/{chunk-pnnvybbk.js.map → chunk-s6jhgk0q.js.map} +2 -2
- package/dist/cli/{chunk-f2972sbt.js → chunk-vtk4a6dg.js} +1 -1
- package/dist/cli/{chunk-z1f5arsg.js → chunk-wgm7m9qk.js} +21 -21
- package/dist/cli/{chunk-z1f5arsg.js.map → chunk-wgm7m9qk.js.map} +4 -4
- package/dist/cli/{chunk-bnbmcwfb.js → chunk-wm7js3j9.js} +5 -5
- package/dist/cli/{chunk-bnbmcwfb.js.map → chunk-wm7js3j9.js.map} +3 -3
- package/dist/cli/{chunk-d1tadaw7.js → chunk-yt5n7ppj.js} +3 -3
- package/dist/cli/{chunk-pat2zzwc.js → chunk-yw7dm696.js} +1 -1
- package/dist/cli/{chunk-pat2zzwc.js.map → chunk-yw7dm696.js.map} +1 -1
- package/dist/cli/{chunk-88cpgt6h.js → chunk-zxcczpyx.js} +1 -1
- package/dist/cli/{chunk-41za066z.js → chunk-zxh4d9vy.js} +4 -4
- package/dist/cli/index.js +17 -17
- package/dist/types/ai/agent-readability.d.ts +1 -1
- package/dist/types/ai/api/paths.d.ts +1 -1
- package/dist/types/ai/ask-context.d.ts +7 -7
- package/dist/types/ai/ask.d.ts +43 -43
- package/dist/types/ai/index.d.ts +3 -3
- package/dist/types/ai/openapi-components.d.ts +1 -1
- package/dist/types/ai/serializers.d.ts +1 -1
- package/dist/types/ai/visibility.d.ts +1 -1
- package/dist/types/core/config-input.d.ts +17 -17
- package/dist/types/core/config.d.ts +3 -3
- package/dist/types/core/data.d.ts +3 -3
- package/dist/types/core/i18n-ui.d.ts +6 -8
- package/dist/types/core/schema.d.ts +5 -5
- package/dist/types/core/unrecognized-keys.d.ts +1 -1
- package/dist/types/search/documents.d.ts +1 -1
- package/dist/types/search/orama-index.d.ts +1 -1
- package/docs/02-deployment.mdx +4 -4
- package/docs/03-upgrading.mdx +22 -9
- package/docs/04-migrating.mdx +4 -4
- package/docs/08-faq.mdx +3 -3
- package/docs/advanced/custom-pages.mdx +2 -2
- package/docs/advanced/skills.mdx +1 -1
- package/docs/cli/audit.mdx +3 -3
- package/docs/cli/doctor.mdx +3 -3
- package/docs/cli/evals.mdx +7 -7
- package/docs/cli/index.mdx +2 -2
- package/docs/cli/translate.mdx +8 -8
- package/docs/configuration/{ask-ai.mdx → assistant.mdx} +19 -19
- package/docs/configuration/customization.mdx +2 -2
- package/docs/configuration/index.mdx +2 -2
- package/docs/configuration/meta.ts +1 -1
- package/docs/configuration/search.mdx +1 -1
- package/docs/content/i18n.mdx +2 -2
- package/docs/content/islands.mdx +1 -1
- package/docs/discoverability/agent-discovery.mdx +1 -1
- package/docs/discoverability/index.mdx +1 -1
- package/docs/index.mdx +2 -2
- package/package.json +1 -1
- package/skills/blume/SKILL.md +5 -5
- package/skills/blume-migrate/SKILL.md +2 -2
- package/src/ai/agent-readability.ts +4 -4
- package/src/ai/api/paths.ts +1 -1
- package/src/ai/ask-context.ts +7 -7
- package/src/ai/ask-data.ts +2 -2
- package/src/ai/ask.ts +84 -71
- package/src/ai/cors.ts +3 -3
- package/src/ai/index.ts +16 -16
- package/src/ai/openapi-components.ts +1 -1
- package/src/ai/serializers.ts +1 -1
- package/src/ai/visibility.ts +1 -1
- package/src/astro/generate.ts +19 -18
- package/src/astro/module-types.ts +1 -1
- package/src/astro/runtime-deps.ts +6 -6
- package/src/astro/templates.ts +26 -26
- package/src/blume-modules.d.ts +2 -2
- package/src/cli/commands/audit.ts +1 -1
- package/src/cli/commands/doctor.ts +7 -5
- package/src/cli/commands/eval.ts +3 -3
- package/src/cli/commands/migrate.ts +2 -2
- package/src/cli/commands/translate.ts +3 -3
- package/src/cli/commands/upgrade.ts +2 -2
- package/src/cli/required-secrets.ts +3 -3
- package/src/components/copy-feedback.ts +1 -1
- package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
- package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
- package/src/components/islands/hooks.ts +14 -12
- package/src/components/layout/Header.astro +10 -10
- package/src/components/layout/PageLayout.astro +6 -6
- package/src/components/layout/Pagination.astro +7 -7
- package/src/components/layout/ReferenceLayout.astro +1 -1
- package/src/components/layout/RootLayout.astro +6 -6
- package/src/components/layout/Search.astro +13 -13
- package/src/components/layout/analytics-client.ts +1 -1
- package/src/components/layout/drawer-inert.ts +1 -1
- package/src/components/openapi/description.ts +2 -2
- package/src/core/code-fences.ts +1 -1
- package/src/core/config-input.ts +19 -19
- package/src/core/config.ts +3 -3
- package/src/core/data.ts +3 -3
- package/src/core/i18n-ui.ts +35 -9
- package/src/core/request-body.ts +1 -1
- package/src/core/schema.ts +25 -20
- package/src/core/server-features.ts +2 -2
- package/src/core/ui-packs/ar.ts +4 -5
- package/src/core/ui-packs/bg.ts +4 -5
- package/src/core/ui-packs/bn.ts +4 -5
- package/src/core/ui-packs/ca.ts +4 -5
- package/src/core/ui-packs/cs.ts +4 -5
- package/src/core/ui-packs/da.ts +4 -5
- package/src/core/ui-packs/de.ts +4 -5
- package/src/core/ui-packs/el.ts +4 -5
- package/src/core/ui-packs/es.ts +4 -5
- package/src/core/ui-packs/fa.ts +4 -5
- package/src/core/ui-packs/fi.ts +4 -5
- package/src/core/ui-packs/fr.ts +4 -5
- package/src/core/ui-packs/he.ts +4 -5
- package/src/core/ui-packs/hi.ts +4 -5
- package/src/core/ui-packs/hr.ts +4 -5
- package/src/core/ui-packs/hu.ts +4 -5
- package/src/core/ui-packs/id.ts +4 -5
- package/src/core/ui-packs/it.ts +4 -5
- package/src/core/ui-packs/ja.ts +4 -5
- package/src/core/ui-packs/ko.ts +4 -5
- package/src/core/ui-packs/nl.ts +4 -5
- package/src/core/ui-packs/no.ts +4 -5
- package/src/core/ui-packs/pl.ts +4 -5
- package/src/core/ui-packs/pt-br.ts +4 -5
- package/src/core/ui-packs/pt.ts +4 -5
- package/src/core/ui-packs/ro.ts +4 -5
- package/src/core/ui-packs/ru.ts +4 -5
- package/src/core/ui-packs/sk.ts +4 -5
- package/src/core/ui-packs/sr.ts +4 -5
- package/src/core/ui-packs/sv.ts +4 -5
- package/src/core/ui-packs/th.ts +4 -5
- package/src/core/ui-packs/tr.ts +4 -5
- package/src/core/ui-packs/uk.ts +4 -5
- package/src/core/ui-packs/vi.ts +4 -5
- package/src/core/ui-packs/zh-tw.ts +4 -5
- package/src/core/ui-packs/zh.ts +4 -5
- package/src/core/unrecognized-keys.ts +1 -1
- package/src/registry/eject.ts +19 -18
- package/src/search/documents.ts +2 -2
- package/src/search/orama-index.ts +1 -1
- package/src/translate/report.ts +1 -1
- package/src/upgrade/upgrade.ts +1 -1
- package/dist/cli/chunk-mnqj32sj.js.map +0 -12
- package/dist/cli/chunk-mwt1k8n7.js.map +0 -10
- /package/dist/cli/{chunk-f7t03s3g.js.map → chunk-27g6wdth.js.map} +0 -0
- /package/dist/cli/{chunk-by2290sx.js.map → chunk-5shv93fd.js.map} +0 -0
- /package/dist/cli/{chunk-nk3ts2xk.js.map → chunk-82bbrxdn.js.map} +0 -0
- /package/dist/cli/{chunk-zxccj738.js.map → chunk-ce574jw2.js.map} +0 -0
- /package/dist/cli/{chunk-y3e45rc8.js.map → chunk-ch6g3ar0.js.map} +0 -0
- /package/dist/cli/{chunk-1w8dp3qb.js.map → chunk-epjnccmv.js.map} +0 -0
- /package/dist/cli/{chunk-ernrthtr.js.map → chunk-f2z5v128.js.map} +0 -0
- /package/dist/cli/{chunk-zg2gtj10.js.map → chunk-fs23ddbb.js.map} +0 -0
- /package/dist/cli/{chunk-7ez8ny0t.js.map → chunk-fxypxtvm.js.map} +0 -0
- /package/dist/cli/{chunk-tzne8qfq.js.map → chunk-fz5wtpmh.js.map} +0 -0
- /package/dist/cli/{chunk-b5aj94ah.js.map → chunk-hdpx1tax.js.map} +0 -0
- /package/dist/cli/{chunk-fh5hj5jt.js.map → chunk-kdp5q7ke.js.map} +0 -0
- /package/dist/cli/{chunk-bctazmbk.js.map → chunk-mb2919y2.js.map} +0 -0
- /package/dist/cli/{chunk-79njf86q.js.map → chunk-q5163e60.js.map} +0 -0
- /package/dist/cli/{chunk-sqn5t4q0.js.map → chunk-qs4q5p4e.js.map} +0 -0
- /package/dist/cli/{chunk-bw22s759.js.map → chunk-qwsrynx5.js.map} +0 -0
- /package/dist/cli/{chunk-z01ze5c1.js.map → chunk-s1p84fyh.js.map} +0 -0
- /package/dist/cli/{chunk-f2972sbt.js.map → chunk-vtk4a6dg.js.map} +0 -0
- /package/dist/cli/{chunk-d1tadaw7.js.map → chunk-yt5n7ppj.js.map} +0 -0
- /package/dist/cli/{chunk-88cpgt6h.js.map → chunk-zxcczpyx.js.map} +0 -0
- /package/dist/cli/{chunk-41za066z.js.map → chunk-zxh4d9vy.js.map} +0 -0
package/src/core/ui-packs/ro.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const ro: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Adaugă în Cursor",
|
|
7
7
|
addToVscode: "Adaugă în VS Code",
|
|
8
|
-
askAI: "Întreabă AI despre această pagină",
|
|
9
8
|
connectMcp: "Conectează-te la MCP",
|
|
10
9
|
copied: "Copiat!",
|
|
11
10
|
copyClaudeCode: "Copiază comanda Claude Code",
|
|
@@ -25,7 +24,7 @@ export const ro: UIStringsOverride = {
|
|
|
25
24
|
"Citește {url} ca să îți pot pune întrebări despre această pagină.",
|
|
26
25
|
scrollToTop: "Sus de tot",
|
|
27
26
|
},
|
|
28
|
-
|
|
27
|
+
assistant: {
|
|
29
28
|
ai: "AI",
|
|
30
29
|
clear: "Șterge conversația",
|
|
31
30
|
close: "Închide",
|
|
@@ -36,7 +35,7 @@ export const ro: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Pune o întrebare…",
|
|
37
36
|
send: "Trimite",
|
|
38
37
|
tip: "Sfat: Poți deschide și închide chatul cu",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Asistent",
|
|
40
39
|
you: "Tu",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Închide anunțul" },
|
|
@@ -85,8 +84,8 @@ export const ro: UIStringsOverride = {
|
|
|
85
84
|
search: {
|
|
86
85
|
all: "Toate",
|
|
87
86
|
allLanguages: "Toate limbile",
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
assistant: "Asistent",
|
|
88
|
+
assistantHint: "Primește un răspuns instantaneu de la AI",
|
|
90
89
|
button: "Caută",
|
|
91
90
|
devOnly: "Căutarea este disponibilă în versiunea de producție.",
|
|
92
91
|
error: "Ceva nu a mers bine. Încearcă din nou.",
|
package/src/core/ui-packs/ru.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const ru: 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 ru: 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 ru: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Задайте вопрос…",
|
|
37
36
|
send: "Отправить",
|
|
38
37
|
tip: "Совет: чат можно открыть и закрыть с помощью",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Ассистент",
|
|
40
39
|
you: "Вы",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Закрыть объявление" },
|
|
@@ -85,8 +84,8 @@ export const ru: UIStringsOverride = {
|
|
|
85
84
|
search: {
|
|
86
85
|
all: "Все",
|
|
87
86
|
allLanguages: "Все языки",
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
assistant: "Ассистент",
|
|
88
|
+
assistantHint: "Получите мгновенный ответ от ИИ",
|
|
90
89
|
button: "Поиск",
|
|
91
90
|
devOnly: "Поиск доступен в production-сборке.",
|
|
92
91
|
error: "Что-то пошло не так. Попробуйте ещё раз.",
|
package/src/core/ui-packs/sk.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const sk: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Pridať do Cursoru",
|
|
7
7
|
addToVscode: "Pridať do VS Code",
|
|
8
|
-
askAI: "Opýtať sa AI na túto stránku",
|
|
9
8
|
connectMcp: "Pripojiť k MCP",
|
|
10
9
|
copied: "Skopírované!",
|
|
11
10
|
copyClaudeCode: "Kopírovať príkaz Claude Code",
|
|
@@ -24,7 +23,7 @@ export const sk: UIStringsOverride = {
|
|
|
24
23
|
openInChatPrompt: "Prečítajte si {url} — budem sa pýtať na túto stránku.",
|
|
25
24
|
scrollToTop: "Späť nahor",
|
|
26
25
|
},
|
|
27
|
-
|
|
26
|
+
assistant: {
|
|
28
27
|
ai: "AI",
|
|
29
28
|
clear: "Vymazať konverzáciu",
|
|
30
29
|
close: "Zavrieť",
|
|
@@ -35,7 +34,7 @@ export const sk: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "Položiť otázku…",
|
|
36
35
|
send: "Odoslať",
|
|
37
36
|
tip: "Tip: Chat môžete otvoriť a zavrieť pomocou",
|
|
38
|
-
title: "
|
|
37
|
+
title: "Asistent",
|
|
39
38
|
you: "Vy",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "Zavrieť oznámenie" },
|
|
@@ -84,8 +83,8 @@ export const sk: UIStringsOverride = {
|
|
|
84
83
|
search: {
|
|
85
84
|
all: "Všetko",
|
|
86
85
|
allLanguages: "Všetky jazyky",
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
assistant: "Asistent",
|
|
87
|
+
assistantHint: "Získajte okamžitú odpoveď od AI",
|
|
89
88
|
button: "Hľadať",
|
|
90
89
|
devOnly: "Vyhľadávanie je dostupné v produkčnom builde.",
|
|
91
90
|
error: "Niečo sa pokazilo. Skúste to znova.",
|
package/src/core/ui-packs/sr.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const sr: 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 sr: 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 sr: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "Поставите питање…",
|
|
36
35
|
send: "Пошаљи",
|
|
37
36
|
tip: "Савет: Ћаскање можете отворити и затворити помоћу",
|
|
38
|
-
title: "
|
|
37
|
+
title: "Асистент",
|
|
39
38
|
you: "Ви",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "Затвори обавештење" },
|
|
@@ -84,8 +83,8 @@ export const sr: UIStringsOverride = {
|
|
|
84
83
|
search: {
|
|
85
84
|
all: "Све",
|
|
86
85
|
allLanguages: "Сви језици",
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
assistant: "Асистент",
|
|
87
|
+
assistantHint: "Добијте тренутан одговор од AI-ја",
|
|
89
88
|
button: "Претражи",
|
|
90
89
|
devOnly: "Претрага је доступна у продукцијској верзији.",
|
|
91
90
|
error: "Нешто је пошло наопако. Покушајте поново.",
|
package/src/core/ui-packs/sv.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const sv: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Lägg till i Cursor",
|
|
7
7
|
addToVscode: "Lägg till i VS Code",
|
|
8
|
-
askAI: "Fråga AI om den här sidan",
|
|
9
8
|
connectMcp: "Anslut till MCP",
|
|
10
9
|
copied: "Kopierat!",
|
|
11
10
|
copyClaudeCode: "Kopiera Claude Code-kommando",
|
|
@@ -25,7 +24,7 @@ export const sv: UIStringsOverride = {
|
|
|
25
24
|
"Läs {url} så att jag kan ställa frågor om den här sidan.",
|
|
26
25
|
scrollToTop: "Till toppen",
|
|
27
26
|
},
|
|
28
|
-
|
|
27
|
+
assistant: {
|
|
29
28
|
ai: "AI",
|
|
30
29
|
clear: "Rensa konversationen",
|
|
31
30
|
close: "Stäng",
|
|
@@ -36,7 +35,7 @@ export const sv: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Ställ en fråga…",
|
|
37
36
|
send: "Skicka",
|
|
38
37
|
tip: "Tips: Du kan öppna och stänga chatten med",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Assistent",
|
|
40
39
|
you: "Du",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Stäng meddelandet" },
|
|
@@ -85,8 +84,8 @@ export const sv: UIStringsOverride = {
|
|
|
85
84
|
search: {
|
|
86
85
|
all: "Alla",
|
|
87
86
|
allLanguages: "Alla språk",
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
assistant: "Assistent",
|
|
88
|
+
assistantHint: "Få ett omedelbart svar från AI",
|
|
90
89
|
button: "Sök",
|
|
91
90
|
devOnly: "Sökning är tillgänglig i produktionsbygget.",
|
|
92
91
|
error: "Något gick fel. Försök igen.",
|
package/src/core/ui-packs/th.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const th: 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 th: 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 th: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "ถามคำถาม…",
|
|
36
35
|
send: "ส่ง",
|
|
37
36
|
tip: "เคล็ดลับ: คุณสามารถเปิดและปิดแชทได้ด้วย",
|
|
38
|
-
title: "
|
|
37
|
+
title: "ผู้ช่วย",
|
|
39
38
|
you: "คุณ",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "ปิดประกาศ" },
|
|
@@ -84,8 +83,8 @@ export const th: UIStringsOverride = {
|
|
|
84
83
|
search: {
|
|
85
84
|
all: "ทั้งหมด",
|
|
86
85
|
allLanguages: "ทุกภาษา",
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
assistant: "ผู้ช่วย",
|
|
87
|
+
assistantHint: "รับคำตอบทันทีจาก AI",
|
|
89
88
|
button: "ค้นหา",
|
|
90
89
|
devOnly: "การค้นหาพร้อมใช้งานในบิลด์โปรดักชัน",
|
|
91
90
|
error: "เกิดข้อผิดพลาดบางอย่าง โปรดลองอีกครั้ง",
|
package/src/core/ui-packs/tr.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const tr: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Cursor'a ekle",
|
|
7
7
|
addToVscode: "VS Code'a ekle",
|
|
8
|
-
askAI: "Bu sayfa hakkında yapay zekâya sor",
|
|
9
8
|
connectMcp: "MCP'ye bağlan",
|
|
10
9
|
copied: "Kopyalandı!",
|
|
11
10
|
copyClaudeCode: "Claude Code komutunu kopyala",
|
|
@@ -25,7 +24,7 @@ export const tr: UIStringsOverride = {
|
|
|
25
24
|
"Bu sayfa hakkında sorular sorabilmem için {url} adresini okuyun.",
|
|
26
25
|
scrollToTop: "Başa dön",
|
|
27
26
|
},
|
|
28
|
-
|
|
27
|
+
assistant: {
|
|
29
28
|
ai: "Yapay zekâ",
|
|
30
29
|
clear: "Konuşmayı temizle",
|
|
31
30
|
close: "Kapat",
|
|
@@ -36,7 +35,7 @@ export const tr: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Bir soru sorun…",
|
|
37
36
|
send: "Gönder",
|
|
38
37
|
tip: "İpucu: Sohbeti şu tuşla açıp kapatabilirsiniz:",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Asistan",
|
|
40
39
|
you: "Siz",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Duyuruyu kapat" },
|
|
@@ -85,8 +84,8 @@ export const tr: UIStringsOverride = {
|
|
|
85
84
|
search: {
|
|
86
85
|
all: "Tümü",
|
|
87
86
|
allLanguages: "Tüm diller",
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
assistant: "Asistan",
|
|
88
|
+
assistantHint: "Yapay zekâdan anında yanıt alın",
|
|
90
89
|
button: "Ara",
|
|
91
90
|
devOnly: "Arama, üretim derlemesinde kullanılabilir.",
|
|
92
91
|
error: "Bir şeyler ters gitti. Lütfen tekrar deneyin.",
|
package/src/core/ui-packs/uk.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const uk: 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 uk: 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 uk: UIStringsOverride = {
|
|
|
36
35
|
placeholder: "Поставте запитання…",
|
|
37
36
|
send: "Надіслати",
|
|
38
37
|
tip: "Порада: чат можна відкрити й закрити за допомогою",
|
|
39
|
-
title: "
|
|
38
|
+
title: "Асистент",
|
|
40
39
|
you: "Ви",
|
|
41
40
|
},
|
|
42
41
|
banner: { dismiss: "Закрити оголошення" },
|
|
@@ -85,8 +84,8 @@ export const uk: UIStringsOverride = {
|
|
|
85
84
|
search: {
|
|
86
85
|
all: "Усі",
|
|
87
86
|
allLanguages: "Усі мови",
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
assistant: "Асистент",
|
|
88
|
+
assistantHint: "Отримайте миттєву відповідь від ШІ",
|
|
90
89
|
button: "Пошук",
|
|
91
90
|
devOnly: "Пошук доступний у production-збірці.",
|
|
92
91
|
error: "Щось пішло не так. Спробуйте ще раз.",
|
package/src/core/ui-packs/vi.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const vi: UIStringsOverride = {
|
|
|
5
5
|
actions: {
|
|
6
6
|
addToCursor: "Thêm vào Cursor",
|
|
7
7
|
addToVscode: "Thêm vào VS Code",
|
|
8
|
-
askAI: "Hỏi AI về trang này",
|
|
9
8
|
connectMcp: "Kết nối với MCP",
|
|
10
9
|
copied: "Đã sao chép!",
|
|
11
10
|
copyClaudeCode: "Sao chép lệnh Claude Code",
|
|
@@ -24,7 +23,7 @@ export const vi: UIStringsOverride = {
|
|
|
24
23
|
openInChatPrompt: "Hãy đọc {url} để tôi có thể đặt câu hỏi về trang này.",
|
|
25
24
|
scrollToTop: "Lên đầu trang",
|
|
26
25
|
},
|
|
27
|
-
|
|
26
|
+
assistant: {
|
|
28
27
|
ai: "AI",
|
|
29
28
|
clear: "Xóa cuộc trò chuyện",
|
|
30
29
|
close: "Đóng",
|
|
@@ -35,7 +34,7 @@ export const vi: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "Đặt câu hỏi…",
|
|
36
35
|
send: "Gửi",
|
|
37
36
|
tip: "Mẹo: Bạn có thể mở và đóng trò chuyện bằng",
|
|
38
|
-
title: "
|
|
37
|
+
title: "Trợ lý",
|
|
39
38
|
you: "Bạn",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "Đóng thông báo" },
|
|
@@ -84,8 +83,8 @@ export const vi: UIStringsOverride = {
|
|
|
84
83
|
search: {
|
|
85
84
|
all: "Tất cả",
|
|
86
85
|
allLanguages: "Tất cả ngôn ngữ",
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
assistant: "Trợ lý",
|
|
87
|
+
assistantHint: "Nhận câu trả lời tức thì từ AI",
|
|
89
88
|
button: "Tìm kiếm",
|
|
90
89
|
devOnly: "Tìm kiếm có sẵn trong bản dựng production.",
|
|
91
90
|
error: "Đã xảy ra sự cố. Vui lòng thử lại.",
|
|
@@ -5,7 +5,6 @@ export const zhTW: 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 zhTW: 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 zhTW: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "提出問題…",
|
|
36
35
|
send: "傳送",
|
|
37
36
|
tip: "提示:可透過以下快捷鍵開啟和關閉聊天",
|
|
38
|
-
title: "
|
|
37
|
+
title: "助理",
|
|
39
38
|
you: "你",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "關閉公告" },
|
|
@@ -84,8 +83,8 @@ export const zhTW: UIStringsOverride = {
|
|
|
84
83
|
search: {
|
|
85
84
|
all: "全部",
|
|
86
85
|
allLanguages: "所有語言",
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
assistant: "助理",
|
|
87
|
+
assistantHint: "從 AI 即時取得解答",
|
|
89
88
|
button: "搜尋",
|
|
90
89
|
devOnly: "搜尋在正式版組建中可用。",
|
|
91
90
|
error: "發生了一些問題,請再試一次。",
|
package/src/core/ui-packs/zh.ts
CHANGED
|
@@ -5,7 +5,6 @@ export const zh: 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 zh: 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 zh: UIStringsOverride = {
|
|
|
35
34
|
placeholder: "提出问题…",
|
|
36
35
|
send: "发送",
|
|
37
36
|
tip: "提示:可通过以下快捷键打开和关闭聊天",
|
|
38
|
-
title: "
|
|
37
|
+
title: "助手",
|
|
39
38
|
you: "你",
|
|
40
39
|
},
|
|
41
40
|
banner: { dismiss: "关闭公告" },
|
|
@@ -84,8 +83,8 @@ export const zh: UIStringsOverride = {
|
|
|
84
83
|
search: {
|
|
85
84
|
all: "全部",
|
|
86
85
|
allLanguages: "所有语言",
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
assistant: "助手",
|
|
87
|
+
assistantHint: "从 AI 即时获取答案",
|
|
89
88
|
button: "搜索",
|
|
90
89
|
devOnly: "搜索在生产构建中可用。",
|
|
91
90
|
error: "出了点问题,请重试。",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Zod's own wording for unknown keys no removed-key hint covers, appended to
|
|
3
3
|
* a hint so an unrelated typo isn't silently dropped from the diagnostic
|
|
4
4
|
* beside it. Shared by every config object that names a removed field's
|
|
5
|
-
* replacement (the root config, `ai.
|
|
5
|
+
* replacement (the root config, `ai.assistant`, `openapi()`/`asyncapi()`, …).
|
|
6
6
|
*/
|
|
7
7
|
export const unrecognizedKeysMessage = (keys: string[]): string =>
|
|
8
8
|
`Unrecognized key${keys.length > 1 ? "s" : ""}: ${keys
|
package/src/registry/eject.ts
CHANGED
|
@@ -116,16 +116,16 @@ const ejectOpenApiData = (project: BlumeProject): OpenApiData => {
|
|
|
116
116
|
};
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
|
-
* The
|
|
120
|
-
* its grounding snapshot. Empty when
|
|
119
|
+
* The assistant endpoint plus, unless the backend runs its own retrieval (Inkeep),
|
|
120
|
+
* its grounding snapshot. Empty when the assistant is disabled.
|
|
121
121
|
*/
|
|
122
122
|
const askFiles = async (
|
|
123
123
|
project: BlumeProject,
|
|
124
124
|
srcDir: string,
|
|
125
125
|
genDir: string
|
|
126
126
|
): Promise<{ content: string; path: string }[]> => {
|
|
127
|
-
const {
|
|
128
|
-
if (!(
|
|
127
|
+
const { assistant } = project.config.ai;
|
|
128
|
+
if (!(assistant?.enabled && !assistant.endpoint)) {
|
|
129
129
|
const endpointPath = join(srcDir, "pages", "api", "ask.ts");
|
|
130
130
|
if (existsSync(endpointPath)) {
|
|
131
131
|
const content = await readFile(endpointPath, "utf-8");
|
|
@@ -136,13 +136,13 @@ const askFiles = async (
|
|
|
136
136
|
await rm(join(genDir, "ask-data.json"), { force: true });
|
|
137
137
|
return [];
|
|
138
138
|
}
|
|
139
|
-
const backend = resolveAskBackend(
|
|
139
|
+
const backend = resolveAskBackend(assistant.provider);
|
|
140
140
|
const files = [
|
|
141
141
|
{
|
|
142
142
|
content: askEndpointTemplate(backend, {
|
|
143
|
-
cors:
|
|
144
|
-
instructions:
|
|
145
|
-
retrieval:
|
|
143
|
+
cors: assistant.cors,
|
|
144
|
+
instructions: assistant.instructions,
|
|
145
|
+
retrieval: assistant.retrieval,
|
|
146
146
|
}),
|
|
147
147
|
path: join(srcDir, "pages", "api", "ask.ts"),
|
|
148
148
|
},
|
|
@@ -310,20 +310,20 @@ const examplesPreviewFiles = (
|
|
|
310
310
|
/**
|
|
311
311
|
* The packages the ejected app imports by bare name: Astro, Tailwind's Vite
|
|
312
312
|
* plugin, `blume` itself, the integrations the config wires in, whatever the
|
|
313
|
-
* configured adapters declare, and React when islands, examples, or
|
|
313
|
+
* configured adapters declare, and React when islands, examples, or the assistant
|
|
314
314
|
* render with it (Blume ships React, so projects rarely list it). They have
|
|
315
315
|
* to be the project's own dependencies after eject — under a strict linker
|
|
316
316
|
* such as pnpm nothing else makes them resolvable, and `astro build` fails.
|
|
317
317
|
* The hidden runtime reaches the same packages through its `node_modules`
|
|
318
318
|
* junction into Blume's own, so only eject declares the ones its generated
|
|
319
|
-
* files import directly: the AI SDK the
|
|
320
|
-
* `ai.
|
|
319
|
+
* files import directly: the AI SDK the assistant route streams through (unless
|
|
320
|
+
* `ai.assistant.endpoint` points elsewhere, when no route is written) and the EPUB
|
|
321
321
|
* generator's browser bundle `features.ts` loads.
|
|
322
322
|
*/
|
|
323
323
|
const ejectDependencies = (
|
|
324
324
|
options: Parameters<typeof runtimeDependencies>[0]
|
|
325
325
|
): string[] => {
|
|
326
|
-
const {
|
|
326
|
+
const { assistant } = options.config.ai;
|
|
327
327
|
return [
|
|
328
328
|
...new Set([
|
|
329
329
|
"astro",
|
|
@@ -331,7 +331,7 @@ const ejectDependencies = (
|
|
|
331
331
|
"blume",
|
|
332
332
|
...runtimeDependencies(options),
|
|
333
333
|
...(options.needsReact ? ["react", "react-dom"] : []),
|
|
334
|
-
...(
|
|
334
|
+
...(assistant?.enabled && !assistant.endpoint ? ["ai"] : []),
|
|
335
335
|
...(options.config.export.epub ? ["epub-gen-memory"] : []),
|
|
336
336
|
]),
|
|
337
337
|
];
|
|
@@ -364,7 +364,7 @@ export const eject = async (
|
|
|
364
364
|
|
|
365
365
|
const srcDir = join(root, "src");
|
|
366
366
|
const genDir = join(srcDir, "generated");
|
|
367
|
-
const
|
|
367
|
+
const assistantEnabled = config.ai.assistant?.enabled ?? false;
|
|
368
368
|
const exportPdf = config.export.pdf;
|
|
369
369
|
const exportEpub = config.export.epub;
|
|
370
370
|
|
|
@@ -402,13 +402,14 @@ export const eject = async (
|
|
|
402
402
|
relativeTo: genDir,
|
|
403
403
|
});
|
|
404
404
|
// Island/example/override frameworks drive which Astro renderers the ejected
|
|
405
|
-
// config wires in; React also switches on for project `.tsx`/`.jsx` and
|
|
405
|
+
// config wires in; React also switches on for project `.tsx`/`.jsx` and the assistant.
|
|
406
406
|
const frameworks = new Set<string>([
|
|
407
407
|
...islands.islands.map((island) => island.framework),
|
|
408
408
|
...examples.examples.map((example) => example.framework),
|
|
409
409
|
...slotPlan.frameworks,
|
|
410
410
|
]);
|
|
411
|
-
const needsReact =
|
|
411
|
+
const needsReact =
|
|
412
|
+
needsReactRaw || assistantEnabled || frameworks.has("react");
|
|
412
413
|
const needsVue = frameworks.has("vue");
|
|
413
414
|
const needsSvelte = frameworks.has("svelte");
|
|
414
415
|
|
|
@@ -550,7 +551,7 @@ export const eject = async (
|
|
|
550
551
|
// The header's Ask trigger behind the `blume:ask` alias. Always written — it
|
|
551
552
|
// renders nothing when Ask is off — so the alias always resolves.
|
|
552
553
|
{
|
|
553
|
-
content: askComponentTemplate(
|
|
554
|
+
content: askComponentTemplate(assistantEnabled),
|
|
554
555
|
path: join(genDir, "Ask.astro"),
|
|
555
556
|
},
|
|
556
557
|
{
|
|
@@ -580,7 +581,7 @@ export const eject = async (
|
|
|
580
581
|
},
|
|
581
582
|
];
|
|
582
583
|
|
|
583
|
-
if (
|
|
584
|
+
if (assistantEnabled) {
|
|
584
585
|
files.push(...(await askFiles(project, srcDir, genDir)));
|
|
585
586
|
}
|
|
586
587
|
|
package/src/search/documents.ts
CHANGED
|
@@ -149,7 +149,7 @@ const parseMarkdown = (
|
|
|
149
149
|
format === "mdx" ? parseMdx(markdown) : markdownToMdast(markdown, MD_PARSE);
|
|
150
150
|
|
|
151
151
|
// Fenced code is excluded from the plain index by default (ranking noise) —
|
|
152
|
-
// the "markdown" extraction keeps it for
|
|
152
|
+
// the "markdown" extraction keeps it for assistant grounding. Code-heavy docs opt
|
|
153
153
|
// in via `search.indexing.includeCodeBlocks`, which indexes the fence body and
|
|
154
154
|
// its rendered title (```ts blume.config.ts) but never the fence markers,
|
|
155
155
|
// language, or other meta keywords.
|
|
@@ -383,7 +383,7 @@ const pageBody = async (
|
|
|
383
383
|
*
|
|
384
384
|
* `content` selects the extraction: `"plain"` (default) strips Markdown to bare
|
|
385
385
|
* searchable text; `"markdown"` keeps the body's Markdown — code blocks, lists,
|
|
386
|
-
* headings — for
|
|
386
|
+
* headings — for assistant grounding, where fenced examples are often the answer
|
|
387
387
|
* and stripping them makes the model unable to cite content the docs do contain.
|
|
388
388
|
* The `"markdown"` body is agent-facing, so components are downleveled with the
|
|
389
389
|
* same serializers the `.md` mirror, llms-full.txt and MCP `get_page` use: a
|
|
@@ -298,7 +298,7 @@ const segmentingTokenizer = (locale?: string): Tokenizer | undefined => {
|
|
|
298
298
|
|
|
299
299
|
/**
|
|
300
300
|
* Build an in-memory Orama full-text index from search documents. Shared by the
|
|
301
|
-
* Orama client loader (browser), the MCP server, and
|
|
301
|
+
* Orama client loader (browser), the MCP server, and assistant grounding (Node),
|
|
302
302
|
* so ranking is identical wherever docs are queried. `locale` — the site's
|
|
303
303
|
* `i18n.defaultLocale` — swaps in a word-segmenting tokenizer for every
|
|
304
304
|
* non-Latin script, all of which Orama's default tokenizer reduces to zero
|
package/src/translate/report.ts
CHANGED
|
@@ -185,7 +185,7 @@ const driftDiagnostics = (workList: TranslateWorkList): Diagnostic[] =>
|
|
|
185
185
|
: `The "${row.locale}" translation of ${row.sourceRel} is stale: its source changed since it was translated.`,
|
|
186
186
|
severity: "error",
|
|
187
187
|
suggestion:
|
|
188
|
-
"Run `blume translate --
|
|
188
|
+
"Run `blume translate --codex` (or `--claude`) to bring the translations up to date.",
|
|
189
189
|
}));
|
|
190
190
|
|
|
191
191
|
/** One line per missing/stale pair, plus dim lines for untracked adoptions. */
|
package/src/upgrade/upgrade.ts
CHANGED
|
@@ -484,7 +484,7 @@ export const upgradePrompt = (options: {
|
|
|
484
484
|
}): string =>
|
|
485
485
|
`Upgrade this Blume project to Blume ${options.version}. \`blume upgrade\` has bumped the \`blume\` dependency in package.json where it could; what's left is the config.
|
|
486
486
|
|
|
487
|
-
The upgrade guide is at ${options.guidePath} (online at ${UPGRADE_GUIDE_URL}). It covers every change between Blume 1 and 2 with before-and-after examples: search, deployment, content sources, API references, analytics, and
|
|
487
|
+
The upgrade guide is at ${options.guidePath} (online at ${UPGRADE_GUIDE_URL}). It covers every change between Blume 1 and 2 with before-and-after examples: search, deployment, content sources, API references, analytics, and the assistant's model provider become adapters imported from \`blume/*\` subpaths; the machine-readable settings move from \`ai\` to \`agents\`; Ask AI is renamed the assistant, so \`ai.ask\` becomes \`ai.assistant\`; and \`components.ts\` entries must be one of the static forms.
|
|
488
488
|
|
|
489
489
|
\`blume upgrade\` found:
|
|
490
490
|
|