Releases: GooDAnDReaDY/dsh-russian-lang
Release list
v0.1.28
@goodandready/dsh-russian-lang@0.1.28 — adapt to DSH v0.1.2-alpha.2 + skills plugins in Russian
Why. After the DSH core upgrade to v0.1.2-alpha.2 the plugin's settings card broke (checkboxes did not stick), and two installed plugins (dsh-skill-hub, @michengai/dsh-skills-manager) kept showing Chinese UI with an active Russian locale.
Fixed
- Settings card on v0.1.2-alpha.2 (#99, #97, PR #100/#101):
scope.setis now async (Promise<void>) — both the promise-rejection and sync-throw channels are handled; the staleruntime.hostmonkey-patch that clashed with the new settings-mirror is removed; the card reads slot props per the new inject contract (props.scope/props.runtime/props.toggleRuspread by the renderer, with a fallback to the oldprops.inject()for older cores). - Russian dictionaries for
dsh-skill-hub(~170 keys) and@michengai/dsh-skills-manager(~170 keys) (#102, PR #103), translated from their own English dictionaries with placeholders preserved. Bundle: 51 namespaces, 3700 keys. - DOM-translation pass (PR #113): the dsh-skill-hub panel picks its dictionary by
documentElement.langand only understands en/zh, so the registered ru dictionary can never reach it. When Russian is active, CJK text nodes and title/placeholder/aria-label attributes are rewritten using a ZH_RU map (348 pairs) built from vendored zh references (zh-refs/*.json) paired with our translations; placeholder pairs become regexes, so rendered values map to the Russian template (共 56 个技能 → «Всего навыков: 56»). A MutationObserver keeps React re-renders translated.
Checks. node --check OK; node --test 31/31; user-verified in production (settings checkboxes stick; both skills UIs render in Russian).
Compatibility. Targets DSH v0.1.2-alpha.2; older cores keep working via contract fallbacks. Known limitation: the v0.3.4 version badge in the skill-hub panel title comes from plugin metadata and stays as-is.
Refs: Gitea issues #99, #102, #97 (goodandready/dsh-russian-lang).
0.1.27 — adapt to DSH v0.1.2-alpha.2
Adapt to DSH v0.1.2-alpha.2.
scope.setnow returnsPromise<void>; oldtry/catchsilently swallowed both sync throw and promise rejection. Now.catch(...)is wired in for the promise channel and outertry/catchkeeps the sync channel.- Removed the
runtime.host.getSnapshotmonkey-patch; the new settings mirror clashed with it, killing the namespace write path. DSH now readspreferencefrom the scope snapshot directly. agentPromptmoved underscope.overrides. The top-level field was rejected by the host schema;overridesis always accepted.
Tests: 31/31 pass. Bundle validates through node --check and acorn.
Refs: #97, #98
v0.1.26-hotfix-lookup-chain-crash
v0.1.26 — hotfix: lookup chain crash on DSH 0.1.2
Зачем выпускаем
Issue #93: на DSH 0.1.2-alpha.2 список бесед в боковой панели исчезал полностью. Причина — плагин подменял runtime.translate и звал this.lookup(ns, key) с двумя доводами, а в 0.1.2 lookup(ns, key, chain) требует третий довод (цепочку языков) и перебирает её. chain === undefined бросал chain is not iterable, что роняло timeLabel → SessionNodeItem → весь слот sidebar.workspaces. Наружу это выглядело как «интерфейс сломался» без единого упоминания русского языка.
Что добавлено/исправлено
- Wrapper теперь спрашивает арность метода (
lookup.length >= 3) и передаёт цепочку только там, где ядро её ждёт. - Цепочку берёт из
runtime.fallbackChain(active)(приватный, но доступен в собранном бандле), иначе минимальная[active]. - Старые двухдоводные ядра продолжают работать (лишний довод безвреден).
- Новый тест
test/test_lookup_chain.mjs— 4 теста на 2-arg и 3-arg lookup.
Почему
Плагин лезет во внутренности ядра — подменяет метод и зовёт приватный lookup. Это работает ровно до следующего обновления ядра, и обновление уже произошло. Правка делает вызов устойчивым к арности метода, не ломая старые ядра.
Влияние на пользователя
Список бесед снова отрисовывается на DSH 0.1.2. Русские формы числительных («1 беседа», «2 беседы», «5 бесед») работают как раньше.
Совместимость, миграции и ограничения
- Совместим с ядрами, где
lookupпринимает 2 или 3 довода. fallbackChainприватный — если ядро его переименует, откат на[active]сохраняет работоспособность.- Плагин по-прежнему подменяет внутренний метод ядра; это хрупко до следующего обновления ядра. Отдельная задача — найти объявленный способ дать языку свои формы числительных.
Связанные issues/PR
- Issue #93
- PR #94 (фикс), PR #95 (релиз)
Версия/commit
Проверки
node --check lib/client.js— OK.node --test test/*.mjs— 31/31 pass.- Test server (192.168.1.123): установлен 0.1.26 из
.tgz, плагин в boot-entries, журнал безchain is not iterable/slot entry crashed,dsh-test-plugin status→DSH_TEST_OK. После проверки плагин и артефакт удалены.
Deploy/rollback notes
- Production:
dsh plugin --profile web add @goodandready/dsh-russian-lang@0.1.26, затемsystemctl restart dsh-web. - Rollback:
dsh plugin --profile web add @goodandready/dsh-russian-lang@0.1.25.
v0.1.25 — alpha.2 fix + kanban-ru (hotfix)
Зачем выпускаем
Hotfix: production DSH на alpha.2 падает при загрузке плагина, потому что npm 0.1.24 импортирует удалённый settingsNamespace из @deepseek-ai/dsh-settings. Прод на сломанной 0.1.24, плагин выключен из bundles. Нужна рабочая версия для alpha.2.
Что добавлено/изменено/исправлено
- Фикс alpha.2 (PR #90): убран runtime-импорт
settingsNamespaceизlib/index.js; namespacerussian-langрегистрируется строкой черезsettings.register('russian-lang', schema).peerDependencies['@deepseek-ai/dsh-settings']→^0.1.2-alpha.2. - Reconcile (PR #91): объединены две разошедшиеся линии
main— фикс alpha.2 (origin/main) + словарь dsh-kanban и документация (локальный main). Добавленru-plugins/10-kanban.json, обновленыlib/client.js,README.md,CHANGELOG.md,self-ru.json. - Bump (PR #92): версия 0.1.24 → 0.1.25 (npm 0.1.24 занят сломанной версией, переопубликовать нельзя).
Почему
settingsNamespace удалён из экспортов @deepseek-ai/dsh-settings в canonical alpha.2. Плагин импортировал его и передавал в settings.register(), что вызывало SyntaxError и restart-loop. Контракт alpha.2 принимает строку напрямую.
Влияние на пользователя
Плагин снова загружается на DSH alpha.2; русская локализация и переключатель языка работают. Словарь dsh-kanban добавлен.
Совместимость, миграции и ограничения
- Требуется DSH
@deepseek-ai/dsh-settings^0.1.2-alpha.2. - Никаких миграций данных нет.
Связанные issues/PR
- Issue #89 (alpha.2 settingsNamespace)
- PR #90 (фикс alpha.2)
- PR #91 (reconcile kanban-ru)
- PR #92 (bump 0.1.25)
Точная версия/commit
- Version: 0.1.25
- Commit: deb26f1 (origin/main)
Проверки
node --check lib/index.js,lib/client.js— OKnode --testвсе 7 файлов — PASS (включая test_index_alpha2: 2 pass)python3 build.py— OK (50 namespace, 3530 ключей)- Test server 0.1.25 (192.168.1.123):
dsh-test-plugin status→active/DSH_TEST_OK,settingsNamespace= 0, журнал чист.
Deploy/rollback notes
Production обновляется только опубликованной npm-версией 0.1.25. Rollback: вернуться на предыдущую рабочую версию (0.1.22) через dsh plugin add @goodandready/dsh-russian-lang@0.1.22.
v0.1.22
Corrected build: real LocaleRuntime API (addLanguage/setLocale) for RU switch (PR #88). 0.1.21 was published from stale local main and missed the fix.
v0.1.21
Real LocaleRuntime API (addLanguage/setLocale) for RU switch (PR #88).
v0.1.20
Settings card now registers via slots.inject (PR #87) - real fix for 'slot is not declared' on DSH 0.1.2-alpha.
v0.1.19
self-ru: dsh-key-limits (private) excluded, slot guard. Prod smoke OK (russian-lang loads).
v0.1.18
0.1.18 — hotfix
fix(client): drop the@deepseek-ai/dsh-client-ui-primitivesrequire and use a pure SVG chevron. That module is not registered in the module table of the current DSH core, so requiring it aborted our plugin's loader entry and broke production. Our bundle now requires onlyreact. (#81)
v0.1.17
0.1.17
Ships all pending features since 0.1.16:
fix(client): settings-card checkboxes update instantly (optimistic local state instead of async host revert); Russian switch reacts to locale changes; descriptive captions for typography and ё settings. (#62)fix(client): settings card uses the core chevron icon (IconChevronDownOutline14 with SVG fallback). (#65)feat(client): RU/EN layout indicator near the chat input; click converts current text. (#66)feat(client): layout fixer learns from accepted corrections (per-session dictionary). (#67)feat(host): optional Russian agent system prompt (russian-lang.agentPrompt), toggled from the settings card. (#68)feat(tools): auto-fill new plugin keys into the MT queue (tools/mt_autofill.py, daily cron). (#69)fix(mt): corrected 39 placeholder mismatches in shipped translations.feat(dict): full MT coverage for ALL installed plugins (50 ns / 3346 keys).ci: npm .tgz artifact for the isolated test server (upload-artifact@v3, mkdir fix).