@goodandready/dsh-russian-lang 0.2.25 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/README.ru.md +9 -9
- package/lib/client.js +130 -22
- package/lib/locales/plugins/01-token-dashboard.json +1 -1
- package/lib/locales/plugins/10-kanban.json +1 -1
- package/lib/locales/plugins/13-agent-teams.json +1 -1
- package/lib/locales/plugins/16-usage-stats.json +1 -1
- package/lib/locales/plugins/23-moa.json +1 -1
- package/lib/locales/plugins/24-personal-directive.json +1 -1
- package/lib/locales/plugins/33-messenger-gateway.json +1 -1
- package/lib/locales/plugins/35-gitea.json +1 -1
- package/lib/locales/plugins/36-cost-meter.json +1 -1
- package/lib/locales/plugins/37-time-machine.json +1 -1
- package/lib/locales/plugins/38-context-lens.json +1 -1
- package/lib/locales/plugins/39-shadow-auditor.json +1 -1
- package/lib/locales/plugins/40-clinebot.json +1 -1
- package/lib/locales/plugins/41-lanmode.json +1 -1
- package/lib/locales/plugins/42-plugin-console.json +1 -1
- package/lib/locales/plugins/46-memory-brain.json +1 -1
- package/lib/locales/plugins/49-dsml-guard.json +1 -1
- package/lib/locales/plugins/49-usage-guard.json +1 -1
- package/lib/locales/plugins/50-automode.json +1 -1
- package/lib/locales/plugins/54-workshop-market.json +1 -1
- package/lib/locales/plugins/57-live-canvas.json +1 -1
- package/lib/locales/plugins/58-grok-xsearch.json +1 -1
- package/lib/locales/plugins/59-goal.json +1 -1
- package/lib/locales/plugins/62-model-search.json +1 -1
- package/lib/locales/plugins/63-agent-orchestrator.json +1 -1
- package/lib/locales/plugins/64-key-limits.json +1 -1
- package/lib/locales/plugins/66-tts.json +1 -1
- package/lib/locales/plugins/67-voice.json +1 -1
- package/lib/locales/plugins/68-image-gen.json +1 -1
- package/lib/locales/plugins/69-plugin-notify.json +1 -1
- package/lib/locales/plugins/71-memory-meter.json +1 -1
- package/lib/locales/plugins/75-test-pilot.json +1 -0
- package/lib/locales/plugins/76-visualize.json +1 -0
- package/package.json +3 -3
- package/lib/locales/plugins/44-goal.json +0 -1
package/README.md
CHANGED
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
<h3>Полная русская локализация, умная типографика и исправление раскладки клавиатуры для DeepSeek Harness</h3>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@goodandready/dsh-russian-lang"><img src="https://img.shields.io/badge/npm-v0.2.
|
|
8
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-russian-lang"><img src="https://img.shields.io/badge/npm-v0.2.25-6366f1.svg?style=for-the-badge&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
9
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-10b981.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
10
|
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
11
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="https://img.shields.io/badge/DSH-v0.1.
|
|
15
|
+
<img src="https://img.shields.io/badge/DSH-v0.1.6--alpha.2%2B-blue.svg?style=for-the-badge&labelColor=1e1b4b" alt="DSH v0.1.6-alpha.2+">
|
|
16
16
|
<img src="https://img.shields.io/badge/Покрытие-100%25-10b981.svg?style=for-the-badge&labelColor=064e3b" alt="Покрытие 100%">
|
|
17
|
-
<img src="https://img.shields.io/badge/Ключей_UI-
|
|
17
|
+
<img src="https://img.shields.io/badge/Ключей_UI-8735-6366f1.svg?style=for-the-badge&labelColor=1e1b4b" alt="8735 ключей">
|
|
18
18
|
<img src="https://img.shields.io/badge/Ручная_вычитка-100%25-0ea5e9.svg?style=for-the-badge&labelColor=082f49" alt="100% ручная вычитка">
|
|
19
19
|
</p>
|
|
20
20
|
|
|
@@ -55,9 +55,9 @@ graph LR
|
|
|
55
55
|
DSH[Web UI Интерфейс] --> Loader[Загрузчик локализации dsh-russian-lang]
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
subgraph TranslationLayer [Слой перевода и адаптации —
|
|
59
|
-
Loader --> CoreDict[
|
|
60
|
-
Loader --> PluginDict[
|
|
58
|
+
subgraph TranslationLayer [Слой перевода и адаптации — 8735 ключей / 100% вычитано]
|
|
59
|
+
Loader --> CoreDict[49 Пространств имён ядра DSH / 2146 ключей]
|
|
60
|
+
Loader --> PluginDict[60+ Плагинов экосистемы DSH / 6589 ключей]
|
|
61
61
|
Loader --> PluralEngine[Движок грамматических Plural-форм: 1/2/5]
|
|
62
62
|
end
|
|
63
63
|
|
|
@@ -88,7 +88,7 @@ graph LR
|
|
|
88
88
|
|
|
89
89
|
## ✨ Полный обзор возможностей
|
|
90
90
|
|
|
91
|
-
### 1. 🌐 100% покрытие ядра DSH (
|
|
91
|
+
### 1. 🌐 100% покрытие ядра DSH (49 Пространств имён, 2146 ключей)
|
|
92
92
|
* **Диалоги и переписка (`conversation`)**: лента сообщений, ветки обсуждений, карточки вызова инструментов, статус генерации и рассуждений (thinking traces).
|
|
93
93
|
* **Модели и провайдеры (`settings.models`)**: каталог моделей, параметры инференса, управление токенами и ключами API.
|
|
94
94
|
* **Трейсы рассуждений (`trajectory`)**: детальные шаги, параметры вызовов инструментов, временные метки и визуализация размышлений модели.
|
|
@@ -97,9 +97,9 @@ graph LR
|
|
|
97
97
|
* **Планировщик и инвентарь (`schedule.catalog`, `settings.pluginInventory`, `settings.plugins`)**: фоновые задания, периодичность, фильтры и каталог установленных плагинов.
|
|
98
98
|
* **Права доступа и безопасность (`permission.access`, `plan`, `skill`)**: пресеты прав (полный доступ, только чтение, запись в рабочую область), выполнение планов и навыки.
|
|
99
99
|
|
|
100
|
-
> **О качестве перевода.** Все **
|
|
100
|
+
> **О качестве перевода.** Все **8735 ключей интерфейса (2146 ядра + 6589 плагинов) переведены на 100% и вычитаны вручную**. Черновой машинный перевод полностью замещён проверенными формулировками (`draft = 0`). Перевод регулярно валидируется автоматическими линтерами целостности плейсхолдеров, проверкой соблюдения глоссария (`glossary.json`) и детекторами переполнения верстки. Нашли неточность — кнопка «Сообщить о проблеме перевода» в карточке настроек создаёт готовый issue.
|
|
101
101
|
|
|
102
|
-
### 2. 🧩 Встроенный перевод
|
|
102
|
+
### 2. 🧩 Встроенный перевод 60+ плагинов экосистемы DSH (6589 ключей)
|
|
103
103
|
Локализация автоматически распространяется на все ключевые плагины экосистемы DeepSeek Harness:
|
|
104
104
|
* **`dsh-session-control`** — расширенное управление сессиями: закрепление диалогов, архив по периодам, просмотр расшифровок и фильтрация шума;
|
|
105
105
|
* **`dsh-kanban` и `task-board`** — канбан-доски задач, карточки, чек-листы, дедлайны, критерии готовности (DoD) и шлюз приёмки (Acceptance Gate);
|
package/README.ru.md
CHANGED
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
<h3>Полная русская локализация, умная типографика и исправление раскладки клавиатуры для DeepSeek Harness</h3>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@goodandready/dsh-russian-lang"><img src="https://img.shields.io/badge/npm-v0.2.
|
|
8
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-russian-lang"><img src="https://img.shields.io/badge/npm-v0.2.25-6366f1.svg?style=for-the-badge&labelColor=1e1b4b" alt="npm version"></a>
|
|
9
9
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-10b981.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
|
|
10
10
|
<a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
|
|
11
11
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="https://img.shields.io/badge/DSH-v0.1.
|
|
15
|
+
<img src="https://img.shields.io/badge/DSH-v0.1.6--alpha.2%2B-blue.svg?style=for-the-badge&labelColor=1e1b4b" alt="DSH v0.1.6-alpha.2+">
|
|
16
16
|
<img src="https://img.shields.io/badge/Покрытие-100%25-10b981.svg?style=for-the-badge&labelColor=064e3b" alt="Покрытие 100%">
|
|
17
|
-
<img src="https://img.shields.io/badge/Ключей_UI-
|
|
17
|
+
<img src="https://img.shields.io/badge/Ключей_UI-8735-6366f1.svg?style=for-the-badge&labelColor=1e1b4b" alt="8735 ключей">
|
|
18
18
|
<img src="https://img.shields.io/badge/Ручная_вычитка-100%25-0ea5e9.svg?style=for-the-badge&labelColor=082f49" alt="100% ручная вычитка">
|
|
19
19
|
</p>
|
|
20
20
|
|
|
@@ -55,9 +55,9 @@ graph LR
|
|
|
55
55
|
DSH[Web UI Интерфейс] --> Loader[Загрузчик локализации dsh-russian-lang]
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
subgraph TranslationLayer [Слой перевода и адаптации —
|
|
59
|
-
Loader --> CoreDict[
|
|
60
|
-
Loader --> PluginDict[
|
|
58
|
+
subgraph TranslationLayer [Слой перевода и адаптации — 8735 ключей / 100% вычитано]
|
|
59
|
+
Loader --> CoreDict[49 Пространств имён ядра DSH / 2146 ключей]
|
|
60
|
+
Loader --> PluginDict[60+ Плагинов экосистемы DSH / 6589 ключей]
|
|
61
61
|
Loader --> PluralEngine[Движок грамматических Plural-форм: 1/2/5]
|
|
62
62
|
end
|
|
63
63
|
|
|
@@ -88,7 +88,7 @@ graph LR
|
|
|
88
88
|
|
|
89
89
|
## ✨ Полный обзор возможностей
|
|
90
90
|
|
|
91
|
-
### 1. 🌐 100% покрытие ядра DSH (
|
|
91
|
+
### 1. 🌐 100% покрытие ядра DSH (49 Пространств имён, 2146 ключей)
|
|
92
92
|
* **Диалоги и переписка (`conversation`)**: лента сообщений, ветки обсуждений, карточки вызова инструментов, статус генерации и рассуждений (thinking traces).
|
|
93
93
|
* **Модели и провайдеры (`settings.models`)**: каталог моделей, параметры инференса, управление токенами и ключами API.
|
|
94
94
|
* **Трейсы рассуждений (`trajectory`)**: детальные шаги, параметры вызовов инструментов, временные метки и визуализация размышлений модели.
|
|
@@ -97,9 +97,9 @@ graph LR
|
|
|
97
97
|
* **Планировщик и инвентарь (`schedule.catalog`, `settings.pluginInventory`, `settings.plugins`)**: фоновые задания, периодичность, фильтры и каталог установленных плагинов.
|
|
98
98
|
* **Права доступа и безопасность (`permission.access`, `plan`, `skill`)**: пресеты прав (полный доступ, только чтение, запись в рабочую область), выполнение планов и навыки.
|
|
99
99
|
|
|
100
|
-
> **О качестве перевода.** Все **
|
|
100
|
+
> **О качестве перевода.** Все **8735 ключей интерфейса (2146 ядра + 6589 плагинов) переведены на 100% и вычитаны вручную**. Черновой машинный перевод полностью замещён проверенными формулировками (`draft = 0`). Перевод регулярно валидируется автоматическими линтерами целостности плейсхолдеров, проверкой соблюдения глоссария (`glossary.json`) и детекторами переполнения верстки. Нашли неточность — кнопка «Сообщить о проблеме перевода» в карточке настроек создаёт готовый issue.
|
|
101
101
|
|
|
102
|
-
### 2. 🧩 Встроенный перевод
|
|
102
|
+
### 2. 🧩 Встроенный перевод 60+ плагинов экосистемы DSH (6589 ключей)
|
|
103
103
|
Локализация автоматически распространяется на все ключевые плагины экосистемы DeepSeek Harness:
|
|
104
104
|
* **`dsh-session-control`** — расширенное управление сессиями: закрепление диалогов, архив по периодам, просмотр расшифровок и фильтрация шума;
|
|
105
105
|
* **`dsh-kanban` и `task-board`** — канбан-доски задач, карточки, чек-листы, дедлайны, критерии готовности (DoD) и шлюз приёмки (Acceptance Gate);
|
package/lib/client.js
CHANGED
|
@@ -525,6 +525,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
525
525
|
RU['russian-lang'] = {"cardTitle": "Русская локализация", "cardSub": "Язык интерфейса, типографика, раскладка", "badgeRu": "🟢 RU активен", "badgeEn": "⚪ EN активен", "badgeCoverage": "🟢 100% (7,902 ключа)", "badgeSmartUx": "⚡ Smart UX активен", "secLanguage": "🌐 Язык интерфейса", "secLanguageDesc": "Нативное переключение языка интерфейса DSH на русский без перезагрузки страницы.", "enabled": "Русский язык включён", "enabledDesc": "Переключает язык интерфейса DeepSeek Harness на русский.", "quickSwitchNote": "Быстрый переключатель RU ⇄ EN доступен в шапке сессии рядом с кнопками диалога.", "secTypography": "✍️ Умная типографика и ввод (Smart UX)", "secTypographyDesc": "Автоматическое улучшение текстов по нормам русской типографики во время диалога и набора.", "typography": "Типографика вывода", "typographyDesc": "Исправляет типографику ответов модели: кавычки-«ёлочки», тире («—») вместо дефисов, неразрывные пробелы после предлогов.", "yo": "Буква «ё»", "yoDesc": "Восстанавливать «ё» в частых словах (ещё, чёрный, идёт и др.), написанных через «е». Неоднозначные слова (все/всё) не трогаются.", "liveInput": "Живая типографика инпута", "liveInputDesc": "Автоматически заменять \"\" на «» и -- на — прямо во время набора промпта (код в бэктиках игнорируется).", "slashAliases": "Русские алиасы команд", "slashAliasesDesc": "Поддержка русских команд: /цель -> /goal, /сжать -> /compact, /план -> /plan, /справка -> /help, /память -> /memory.", "altLHintText": "Мгновенная конвертация раскладки текущего поля (ghbdtn ⇄ привет, /vjltkm ⇄ /model). В углу поля ввода также отображается метка раскладки.", "secAgentPrompt": "🤖 Системный промпт агента", "secAgentPromptDesc": "Официальная секция расширения DSH systemPrompt для ведения диалога на русском языке.", "agentPrompt": "Русский промпт агента", "agentPromptDesc": "Добавляет в системный промпт инструкцию отвечать по-русски в выбранном стиле.", "agentPromptPreset": "Стиль ответов агента", "presetExpert": "Технический эксперт (строгая терминология, чистый код)", "presetWriter": "Технический писатель (Markdown, таблицы, ГОСТ)", "presetConcise": "Лаконичный режим (кратко, без лишней воды)", "secUpdater": "🔄 Обновление языкового пакета", "secUpdaterDesc": "Проверка наличия новых релизов в реестре npm и обновление в один клик.", "updaterCurrent": "Текущая версия: v{version}", "updaterLatest": "Доступна новая версия: v{version}", "updaterUpToDate": "Установлена актуальная версия", "updaterChecking": "Проверка…", "updaterCheckBtn": "Проверить обновления", "updaterBtn": "Обновить до v{version} в 1 клик", "updaterUpdating": "Установка обновления…", "updaterSuccess": "✅ Плагин успешно обновлён! Перезапустите DSH для применения.", "updaterFailed": "❌ Не удалось проверить/обновить плагин. Проверьте сеть или логи сервера.", "badgeUpdateAvailable": "Доступно обновление", "badgeUpToDate": "Актуальная версия", "secTranslator": "🌐 Перевод сообщений ассистента", "secTranslatorDesc": "Настройка перевода ответов модели в чате на русский язык (локально в Docker или онлайн).", "translateEngine": "Движок перевода", "engineOff": "Выключен (по умолчанию, без сетевых вызовов)", "engineLocal": "Локальный LibreTranslate (приватно, ~600 МБ RAM)", "engineGoogle": "Google Translate (онлайн)", "googleWarn": "⚠️ Внимание: при онлайн-переводе текст сообщений ассистента передаётся на публичные серверы Google для перевода на лету. Не используйте для конфиденциальных данных.", "localStatusRunning": "🟢 Контейнер LibreTranslate активен", "localStatusStopped": "⚪ Контейнер LibreTranslate не запущен", "localStartBtn": "Запустить LibreTranslate в Docker (~600 МБ RAM)", "localStarting": "Запуск контейнера…", "localInfo": "LibreTranslate запускается изолированно в Docker на сервере, потребляет ~500–700 МБ RAM и переводит на 100% локально.", "secSupport": "📊 Покрытие экосистемы и поддержка", "secSupportDesc": "Словари синхронизированы с DSH v0.1.6-alpha.1. 100.0% UI-покрытие ядра и всех установленных плагинов (7,902 ключа) без черновых машинных переводов.", "statNamespaces": "Пространств имён", "statCoreKeys": "Ключей ядра", "statPluginKeys": "Ключей плагинов", "overridesCount": "Своих переопределений", "statusLoading": "Настройки загружаются…", "statusUnavailable": "Настройки недоступны на этом хосте", "translateTurn": "Перевести на русский", "reportIssue": "Сообщить о неточности перевода", "exportMdHint": "Экспорт диалога в Markdown доступен по кнопке [ 📥 MD ] в шапке сессии.", "translateTurnHint": "Перевод ответов ассистента на русский доступен по кнопке [ RU ↗ ] на блоках сообщений."}
|
|
526
526
|
|
|
527
527
|
const SETTINGS_NS_NAME = 'russian-lang'
|
|
528
|
+
const ROW_CONFIG_KEY = '@goodandready/dsh-russian-lang#russian-lang'
|
|
528
529
|
|
|
529
530
|
function apply(ctx) {
|
|
530
531
|
const runtime = ctx.locale
|
|
@@ -862,7 +863,12 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
862
863
|
'Visualization streaming preview': 'Предпросмотр визуализации',
|
|
863
864
|
'Security Auditor Shield': 'Защитный щит аудитора',
|
|
864
865
|
'Shield: Safe': 'Щит: Безопасно',
|
|
865
|
-
'Shield: Alert': 'Щит: Тревога'
|
|
866
|
+
'Shield: Alert': 'Щит: Тревога',
|
|
867
|
+
'e.g. Implement report export and cover with unit tests': 'Например: Реализовать экспорт отчёта и покрыть юнит-тестами',
|
|
868
|
+
'e.g. Implement report export and cover with unit tests...': 'Например: Реализовать экспорт отчёта и покрыть юнит-тестами…',
|
|
869
|
+
'e.g. Implement user profile settings card with theme tokens': 'Например: Реализовать карточку настроек профиля с токенами темы',
|
|
870
|
+
'Detailed functional specs, acceptance criteria, constraints...': 'Детальная функциональная спецификация, критерии приёмки, ограничения…',
|
|
871
|
+
'Specific instructions, questions, or requirements for this specialist...': 'Конкретные инструкции, вопросы или требования для данного специалиста…',
|
|
866
872
|
}
|
|
867
873
|
const DOM_EN_TEXT = {
|
|
868
874
|
'Scheduled tasks': 'Задачи по расписанию',
|
|
@@ -904,6 +910,83 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
904
910
|
'SSH: Remote': 'SSH: Удалённо',
|
|
905
911
|
'7/7 rot': '7/7 рот.',
|
|
906
912
|
'Smoke chat': 'Тестовый чат',
|
|
913
|
+
'Quick Launch Goal': 'Быстрый запуск цели',
|
|
914
|
+
'Define the objective for the agent in autonomous mode:': 'Сформулируйте задачу для автономной работы агента:',
|
|
915
|
+
'Fix Bug': 'Исправление бага',
|
|
916
|
+
'Refactor (YAGNI)': 'Рефакторинг (YAGNI)',
|
|
917
|
+
'Tests & Coverage': 'Тесты и покрытие',
|
|
918
|
+
'Code Review': 'Ревью кода',
|
|
919
|
+
'New Feature': 'Новая функция',
|
|
920
|
+
'Security Audit': 'Аудит безопасности',
|
|
921
|
+
'Docs & Contract': 'Документация и контракт',
|
|
922
|
+
'Upgrade Deps': 'Обновление зависимостей',
|
|
923
|
+
'Dead Code': 'Мёртвый код',
|
|
924
|
+
'Performance': 'Производительность',
|
|
925
|
+
'Start Goal': 'Запустить цель',
|
|
926
|
+
|
|
927
|
+
'Launch Multi-Agent Orchestrator': 'Запуск мультиагентного оркестратора',
|
|
928
|
+
'Full DAG Pipeline': 'Полный DAG-пайплайн',
|
|
929
|
+
'Direct Specialist Subagent': 'Прямой субагент-специалист',
|
|
930
|
+
'Objective Title': 'Название задачи',
|
|
931
|
+
'Scope & Requirements': 'Объём и требования',
|
|
932
|
+
'Topology Scenario': 'Топологический сценарий',
|
|
933
|
+
'Auto (Infer based on prompt complexity)': 'Авто (определить по сложности задачи)',
|
|
934
|
+
'Hotfix (1 Stage: Triage & Minimal Fix)': 'Хотфикс (1 этап: анализ и точечный фикс)',
|
|
935
|
+
'Simple (2 Stages: Spec + Exec)': 'Простой (2 этапа: ТЗ + реализация)',
|
|
936
|
+
'Medium (4 Stages: Spec -> Design -> Code -> QA)': 'Средний (4 этапа: ТЗ -> Дизайн -> Код -> Тестирование)',
|
|
937
|
+
'Complex (6 Stages: Full Engineering Lifecycle)': 'Сложный (6 этапов: полный инженерный цикл)',
|
|
938
|
+
'Enterprise (7 Stages: R&D Spike -> Fullstack -> Gate)': 'Enterprise (7 этапов: R&D исследование -> Фулстек -> Гейт приёмки)',
|
|
939
|
+
'Target Specialist Role': 'Роль целевого специалиста',
|
|
940
|
+
'UI/UX Interface Designer': 'UI/UX дизайнер интерфейсов',
|
|
941
|
+
'System Architect (DESIGN.md / ADR)': 'Системный архитектор (DESIGN.md / ADR)',
|
|
942
|
+
'Technical Spec Analyst': 'Аналитик технических спецификаций',
|
|
943
|
+
'Senior Frontend Developer': 'Ведущий frontend-разработчик',
|
|
944
|
+
'Senior Backend Developer': 'Ведущий backend-разработчик',
|
|
945
|
+
'QA Automation Engineer': 'Инженер автоматизации тестирования',
|
|
946
|
+
'Refactoring & Complexity Specialist': 'Специалист по рефакторингу и сложности',
|
|
947
|
+
'Hotfix & Diagnostic Engineer': 'Инженер хотфиксов и диагностики',
|
|
948
|
+
'Documentation Specialist': 'Технический писатель / Документация',
|
|
949
|
+
'Spike & R&D Researcher': 'Исследователь R&D и прототипирования',
|
|
950
|
+
'DevOps & Tooling Specialist': 'DevOps и инфраструктурный специалист',
|
|
951
|
+
'Instructions for Subagent': 'Инструкции для субагента',
|
|
952
|
+
'Start Pipeline': 'Запустить пайплайн',
|
|
953
|
+
'Delegate Subagent': 'Делегировать субагенту',
|
|
954
|
+
'Dispatching...': 'Отправка…',
|
|
955
|
+
|
|
956
|
+
'Discounted rate active': 'Действует сниженный тариф',
|
|
957
|
+
'off-peak': 'непиковый',
|
|
958
|
+
'peak': 'пиковый',
|
|
959
|
+
'Context cache saved:': 'Сэкономлено на кэше:',
|
|
960
|
+
'1M tokens, $': '1 млн токенов, $',
|
|
961
|
+
'Input (cache hit)': 'Ввод (попадание в кэш)',
|
|
962
|
+
'Input (cache miss)': 'Ввод (промах кэша)',
|
|
963
|
+
'Output': 'Вывод',
|
|
964
|
+
'SESSION TOKENS': 'ТОКЕНЫ СЕССИИ',
|
|
965
|
+
'SPEND BY MODEL': 'РАСХОД ПО МОДЕЛЯМ',
|
|
966
|
+
'Session total:': 'Всего за сессию:',
|
|
967
|
+
'Copy Summary': 'Скопировать сводку',
|
|
968
|
+
|
|
969
|
+
'Context Lens': 'Линза контекста',
|
|
970
|
+
'Saved tokens': 'Сэкономлено токенов',
|
|
971
|
+
'% Saved': '% экономии',
|
|
972
|
+
'ops': 'операций',
|
|
973
|
+
'Budget': 'Бюджет',
|
|
974
|
+
'Active focus': 'Активный фокус',
|
|
975
|
+
'No focus paths set': 'Пути фокусировки не заданы',
|
|
976
|
+
|
|
977
|
+
'Status': 'Статус',
|
|
978
|
+
'Graph & CI': 'Граф и CI',
|
|
979
|
+
'Events & PRs': 'События и PR',
|
|
980
|
+
'Branch': 'Ветка',
|
|
981
|
+
'Sync': 'Синхронизация',
|
|
982
|
+
'Up to date with remote (@{upstream})': 'Синхронизировано с удалённым репозиторием (@{upstream})',
|
|
983
|
+
'Up to date with remote': 'Синхронизировано с удалённым репозиторием',
|
|
984
|
+
'Clean': 'Чисто',
|
|
985
|
+
'No modified or untracked files in the working directory.': 'В рабочем каталоге нет изменённых или неотслеживаемых файлов.',
|
|
986
|
+
'RECENT COMMITS': 'ПОСЛЕДНИЕ КОММИТЫ',
|
|
987
|
+
|
|
988
|
+
'Active jobs': 'Активные задачи',
|
|
989
|
+
'No active jobs': 'Нет активных задач',
|
|
907
990
|
'Register in Models': 'Зарегистрировать в моделях',
|
|
908
991
|
'Base URL': 'Базовый URL',
|
|
909
992
|
'API key env / credential name': 'Имя переменной окружения / ключа API',
|
|
@@ -1297,9 +1380,10 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1297
1380
|
layoutHintEl = document.createElement('div')
|
|
1298
1381
|
layoutHintEl.dataset.russianLangLayout = '1'
|
|
1299
1382
|
Object.assign(layoutHintEl.style, {
|
|
1300
|
-
position: 'fixed', zIndex: '99999', background: '
|
|
1301
|
-
|
|
1302
|
-
|
|
1383
|
+
position: 'fixed', zIndex: '99999', background: 'var(--dsw-alias-bg-layer-3)',
|
|
1384
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1385
|
+
border: '1px solid var(--dsw-alias-border-l2)', borderRadius: '8px', padding: '6px 10px',
|
|
1386
|
+
fontSize: '13px', boxShadow: 'var(--dsw-alias-shadow-l2)', cursor: 'pointer'
|
|
1303
1387
|
})
|
|
1304
1388
|
const label = direction === 'cyr2lat' ? 'Команда, не та раскладка' : 'Не та раскладка'
|
|
1305
1389
|
layoutHintEl.textContent = label + ': ' + converted
|
|
@@ -1328,8 +1412,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1328
1412
|
layoutBadgeEl.type = 'button'
|
|
1329
1413
|
layoutBadgeEl.dataset.russianLangLayoutBadge = '1'
|
|
1330
1414
|
Object.assign(layoutBadgeEl.style, {
|
|
1331
|
-
position: 'fixed', zIndex: '99998', background: 'var(--dsw-alias-bg-layer-3
|
|
1332
|
-
color: 'var(--dsw-alias-label-secondary
|
|
1415
|
+
position: 'fixed', zIndex: '99998', background: 'var(--dsw-alias-bg-layer-3)',
|
|
1416
|
+
color: 'var(--dsw-alias-label-secondary)', border: '1px solid var(--dsw-alias-border-l2)',
|
|
1333
1417
|
borderRadius: '6px', padding: '1px 6px', fontSize: '11px', cursor: 'pointer',
|
|
1334
1418
|
fontFamily: 'monospace', lineHeight: '1.4', fontWeight: '600'
|
|
1335
1419
|
})
|
|
@@ -1523,6 +1607,24 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1523
1607
|
} catch (err) { console.warn('dsh-russian-lang: toggle failed', err) }
|
|
1524
1608
|
}
|
|
1525
1609
|
try {
|
|
1610
|
+
ctx.slots.inject('plugins.item', () =>
|
|
1611
|
+
ctx.slots.register({
|
|
1612
|
+
name: 'plugins.item',
|
|
1613
|
+
id: SETTINGS_NS_NAME,
|
|
1614
|
+
order: 60,
|
|
1615
|
+
label: () => 'Russian language',
|
|
1616
|
+
locale: SETTINGS_NS_NAME,
|
|
1617
|
+
inject: () => ({ scope, runtime, toggleRu }),
|
|
1618
|
+
}, SettingsCard),
|
|
1619
|
+
)
|
|
1620
|
+
ctx.slots.inject('plugins.row.config', () =>
|
|
1621
|
+
ctx.slots.register({
|
|
1622
|
+
name: 'plugins.row.config',
|
|
1623
|
+
key: ROW_CONFIG_KEY,
|
|
1624
|
+
locale: SETTINGS_NS_NAME,
|
|
1625
|
+
inject: () => ({ scope, runtime, toggleRu }),
|
|
1626
|
+
}, SettingsCard),
|
|
1627
|
+
)
|
|
1526
1628
|
ctx.slots.inject('settings.plugin.item', () =>
|
|
1527
1629
|
ctx.slots.register({
|
|
1528
1630
|
name: 'settings.plugin.item',
|
|
@@ -1691,7 +1793,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1691
1793
|
const [loading, setLoading] = React.useState(false)
|
|
1692
1794
|
const [open, setOpen] = React.useState(false)
|
|
1693
1795
|
const [upStatus, setUpStatus] = React.useState({
|
|
1694
|
-
currentVersion: '0.2.
|
|
1796
|
+
currentVersion: '0.2.26',
|
|
1695
1797
|
latestVersion: undefined,
|
|
1696
1798
|
updateAvailable: false
|
|
1697
1799
|
})
|
|
@@ -1851,7 +1953,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1851
1953
|
'<button type="button" class="rl-trans-btn rl-btn-close" title="Закрыть">✕</button>' +
|
|
1852
1954
|
'</div>' +
|
|
1853
1955
|
'</div>' +
|
|
1854
|
-
'<div class="rl-trans-body"' + (isErr ? ' style="color: var(--dsw-alias-
|
|
1956
|
+
'<div class="rl-trans-body"' + (isErr ? ' style="color: var(--dsw-alias-state-warning-primary); font-size: 13px;"' : '') + '></div>'
|
|
1855
1957
|
box.querySelector('.rl-trans-body').textContent = displayText
|
|
1856
1958
|
|
|
1857
1959
|
const copyBtn = box.querySelector('.rl-btn-copy')
|
|
@@ -1971,11 +2073,17 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1971
2073
|
const presetKey = value.agentPromptPreset || 'technical_expert'
|
|
1972
2074
|
const presetInfo = typeof SYSTEM_PROMPT_PRESETS !== 'undefined' ? SYSTEM_PROMPT_PRESETS[presetKey] : null
|
|
1973
2075
|
|
|
1974
|
-
|
|
2076
|
+
if (props && props.view === 'summary') {
|
|
2077
|
+
return React.createElement('div', { className: 'rl-sub' }, statusLine || t('cardSub'))
|
|
2078
|
+
}
|
|
2079
|
+
const page = !!(props && props.view === 'page')
|
|
2080
|
+
|
|
2081
|
+
return React.createElement('div', { className: page ? 'rl-page-seat' : 'rl-card' },
|
|
1975
2082
|
React.createElement('button', {
|
|
1976
2083
|
type: 'button',
|
|
1977
2084
|
className: 'rl-head',
|
|
1978
|
-
'
|
|
2085
|
+
style: page ? { display: 'none' } : undefined,
|
|
2086
|
+
'aria-expanded': page ? 'true' : String(open),
|
|
1979
2087
|
onClick: () => setOpen(!open),
|
|
1980
2088
|
},
|
|
1981
2089
|
React.createElement('span', { className: 'rl-head-main' },
|
|
@@ -1990,7 +2098,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
1990
2098
|
React.createElement('span', {
|
|
1991
2099
|
className: 'rl-chev' + (open ? ' rl-chev-open' : ''),
|
|
1992
2100
|
}, React.createElement(Chevron, null))),
|
|
1993
|
-
open && React.createElement('div', { className: 'rl-body' },
|
|
2101
|
+
(page || open) && React.createElement('div', { className: 'rl-body' },
|
|
1994
2102
|
React.createElement('div', { className: 'rl-page' },
|
|
1995
2103
|
|
|
1996
2104
|
React.createElement('div', { className: 'rl-section-card' },
|
|
@@ -2132,9 +2240,9 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
2132
2240
|
React.createElement('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexWrap: 'wrap', gap: '8px' } },
|
|
2133
2241
|
React.createElement('div', null,
|
|
2134
2242
|
React.createElement('div', { style: { fontWeight: 600, color: 'var(--dsw-alias-label-primary)' } },
|
|
2135
|
-
t('updaterCurrent').replace('{version}', upStatus.currentVersion || '0.2.
|
|
2243
|
+
t('updaterCurrent').replace('{version}', upStatus.currentVersion || '0.2.26')),
|
|
2136
2244
|
upStatus.updateAvailable
|
|
2137
|
-
? React.createElement('div', { style: { color: 'var(--dsw-alias-
|
|
2245
|
+
? React.createElement('div', { style: { color: 'var(--dsw-alias-state-warning-primary)', marginTop: '2px', fontWeight: 500 } },
|
|
2138
2246
|
t('updaterLatest').replace('{version}', upStatus.latestVersion || ''))
|
|
2139
2247
|
: React.createElement('div', { style: { color: 'var(--dsw-alias-label-secondary)', marginTop: '2px' } },
|
|
2140
2248
|
t('updaterUpToDate'))
|
|
@@ -2156,8 +2264,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
2156
2264
|
upMsg ? React.createElement('div', {
|
|
2157
2265
|
style: {
|
|
2158
2266
|
marginTop: '10px', padding: '8px 12px', borderRadius: '8px',
|
|
2159
|
-
background: upMsg.type === 'ok' ? '
|
|
2160
|
-
color: upMsg.type === 'ok' ? '
|
|
2267
|
+
background: upMsg.type === 'ok' ? 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)' : 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)',
|
|
2268
|
+
color: upMsg.type === 'ok' ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-state-error-primary)', fontSize: '12px', fontWeight: 500
|
|
2161
2269
|
}
|
|
2162
2270
|
}, upMsg.text) : null
|
|
2163
2271
|
)
|
|
@@ -2193,8 +2301,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
2193
2301
|
value.translateEngine === 'google' ? React.createElement('div', {
|
|
2194
2302
|
style: {
|
|
2195
2303
|
marginTop: '10px', padding: '8px 12px', borderRadius: '8px',
|
|
2196
|
-
background: '
|
|
2197
|
-
color: 'var(--dsw-alias-
|
|
2304
|
+
background: 'color-mix(in srgb, var(--dsw-alias-state-warning-primary) 12%, transparent)', border: '1px solid color-mix(in srgb, var(--dsw-alias-state-warning-primary) 30%, transparent)',
|
|
2305
|
+
color: 'var(--dsw-alias-state-warning-primary)', fontSize: '12px', fontWeight: 500, lineHeight: 1.4
|
|
2198
2306
|
}
|
|
2199
2307
|
}, t('googleWarn')) : null,
|
|
2200
2308
|
value.translateEngine === 'local' ? React.createElement('div', {
|
|
@@ -2215,8 +2323,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
2215
2323
|
transMsg ? React.createElement('div', {
|
|
2216
2324
|
style: {
|
|
2217
2325
|
marginTop: '6px', padding: '8px 12px', borderRadius: '8px',
|
|
2218
|
-
background: transMsg.type === 'ok' ? '
|
|
2219
|
-
color: transMsg.type === 'ok' ? '
|
|
2326
|
+
background: transMsg.type === 'ok' ? 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)' : 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)',
|
|
2327
|
+
color: transMsg.type === 'ok' ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-state-error-primary)', fontSize: '12px', fontWeight: 500
|
|
2220
2328
|
}
|
|
2221
2329
|
}, transMsg.text) : null
|
|
2222
2330
|
) : null
|
|
@@ -2245,7 +2353,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
2245
2353
|
),
|
|
2246
2354
|
React.createElement('div', { className: 'rl-actions-row' },
|
|
2247
2355
|
React.createElement('a', {
|
|
2248
|
-
href: makeIssueUrl({}, '0.2.
|
|
2356
|
+
href: makeIssueUrl({}, '0.2.26'),
|
|
2249
2357
|
target: '_blank',
|
|
2250
2358
|
rel: 'noopener noreferrer',
|
|
2251
2359
|
className: 'rl-btn rl-btn-primary'
|
|
@@ -2277,8 +2385,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
|
|
|
2277
2385
|
'.rl-grid-2{display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));gap:10px}',
|
|
2278
2386
|
'.rl-grid-3{display:grid;grid-template-columns:repeat(auto-fit, minmax(140px, 1fr));gap:10px}',
|
|
2279
2387
|
'.rl-badge{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);display:inline-flex;align-items:center;gap:4px;font-weight:500}',
|
|
2280
|
-
'.rl-badge-ok{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary);background:
|
|
2281
|
-
'.rl-badge-warn{border-color:var(--dsw-alias-state-warning-primary);color:var(--dsw-alias-state-warning-primary);background:
|
|
2388
|
+
'.rl-badge-ok{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 8%, transparent)}',
|
|
2389
|
+
'.rl-badge-warn{border-color:var(--dsw-alias-state-warning-primary);color:var(--dsw-alias-state-warning-primary);background:color-mix(in srgb, var(--dsw-alias-state-warning-primary) 8%, transparent)}',
|
|
2282
2390
|
'.rl-badge-dim{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3)}',
|
|
2283
2391
|
'.rl-item-card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:4px}',
|
|
2284
2392
|
'.rl-item-head{display:flex;align-items:center;justify-content:space-between;gap:8px}',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"}}
|
|
1
|
+
{"@dsh-external/dsh-token-dashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"dsh-token-dashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"}}
|