@goodandready/dsh-russian-lang 0.2.13 → 0.2.15
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 +17 -8
- package/README.ru.md +220 -0
- package/docs/media/banner.jpg +0 -0
- package/lib/client.js +4 -4
- package/package.json +2 -2
- package/ru-plugins/07-better-sidebar.json +3 -1
- package/ru-plugins/10-kanban.json +21 -1
- package/ru-plugins/12-skills-manager.json +34 -2
- package/ru-plugins/17-dsh-context.json +16 -1
- package/ru-plugins/26-config-manager.json +147 -2
- package/ru-plugins/27-config-manager-sync.json +27 -2
- package/ru-plugins/28-config-manager-market.json +9 -2
- package/ru-plugins/32-vision-bridge.json +19 -2
- package/ru-plugins/34-key-rotation.json +45 -1
- package/ru-plugins/36-cost-meter.json +26 -1
- package/ru-plugins/37-time-machine.json +8 -2
- package/ru-plugins/38-context-lens.json +6 -2
- package/ru-plugins/39-shadow-auditor.json +24 -1
- package/ru-plugins/50-automode.json +16 -0
- package/ru-plugins/53-remote-workspace.json +59 -1
- package/ru-plugins/56-cron.json +323 -0
- package/ru-plugins/57-live-canvas.json +121 -0
- package/ru-plugins/58-grok-xsearch.json +77 -0
- package/ru-plugins/59-goal.json +54 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-russian-lang",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Russian localization for DeepSeek Harness (DSH v0.1.5-rc.1+) web UI: adds Русский as the native language option in Settings - General - Language. 100.0% coverage across
|
|
3
|
+
"version": "0.2.15",
|
|
4
|
+
"description": "Russian localization for DeepSeek Harness (DSH v0.1.5-rc.1+) web UI: adds Русский as the native language option in Settings - General - Language. 100.0% coverage across 6,629 keys (1,225 core UI keys + 5,404 keys across 40+ ecosystem plugins) with zero machine drafts. Features unified dsh-clinebot visual design standard for Settings Card, full translations for updated ecosystem plugins (dsh-cron Task Scheduler & Preflight checks, Live Canvas Interactive Preview & AI Refine, dsh-goal Autonomous Loop & Live Steering, Grok X Search, Skills Manager, Shadow Auditor, Kanban Epics, Key Rotation, Loop Guard, Remote Workspace, Cost Meter, Vision Bridge, Context, Time Machine), Smart Russian UX (localized Markdown export, turn translation, live typography, slash command aliases, Alt+L layout fix), expanded error humanizer (POSIX, HTTP 4xx/5xx), Skin Center & Wallpaper Engine support, Workshop market integration, sidebar previewers, and runtime snapshot extension without modifying core files.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -483,6 +483,8 @@
|
|
|
483
483
|
"guideDescSidechat": "Независимая ветка диалога, наследующая контекст текущей сессии",
|
|
484
484
|
"guideDescTerminal": "Полноценный терминал (xterm + pty) с автоматическим переподключением",
|
|
485
485
|
"guideDescBrowser": "Встроенный браузер для открытия ссылок непосредственно из чата",
|
|
486
|
-
"terminalShellNotFound": "Настроенный командный шелл не найден: {name} — проверьте путь к шеллу в Настройки → Боковая карточка → Терминал"
|
|
486
|
+
"terminalShellNotFound": "Настроенный командный шелл не найден: {name} — проверьте путь к шеллу в Настройки → Боковая карточка → Терминал",
|
|
487
|
+
"terminalWaitBanner": "Агент ожидает {needle}",
|
|
488
|
+
"terminalSkipWait": "Пропустить ожидание"
|
|
487
489
|
}
|
|
488
490
|
}
|
|
@@ -435,6 +435,26 @@
|
|
|
435
435
|
"template.none": "Без шаблона (пусто)",
|
|
436
436
|
"template.refactor": "Рефакторинг (Refactor)",
|
|
437
437
|
"template.release": "Релиз (Подготовка выпуска)",
|
|
438
|
-
"template.security": "Безопасность (Аудит и CVE)"
|
|
438
|
+
"template.security": "Безопасность (Аудит и CVE)",
|
|
439
|
+
"epic.badge": "Эпик",
|
|
440
|
+
"epic.progress": "Подзадач: {done}/{total}",
|
|
441
|
+
"epic.triage": "Декомпозировать",
|
|
442
|
+
"epic.triageTitle": "Декомпозиция задачи на подзадачи",
|
|
443
|
+
"epic.triageHelp": "Введите по одному названию подзадачи в строке. Дочерние задачи будут привязаны к этому эпику.",
|
|
444
|
+
"epic.triageSubmit": "Создать подзадачи",
|
|
445
|
+
"epic.createGiteaIssues": "Также создать связанные задачи в Gitea",
|
|
446
|
+
"epic.subtasks": "Подзадачи",
|
|
447
|
+
"epic.addSubtask": "Добавить подзадачу",
|
|
448
|
+
"epic.noSubtasks": "Подзадач пока нет.",
|
|
449
|
+
"console.tab": "Живая консоль",
|
|
450
|
+
"console.empty": "Вывод агента пока не записан.",
|
|
451
|
+
"filter.active": "Активные",
|
|
452
|
+
"filter.review": "На проверке",
|
|
453
|
+
"filter.epics": "Эпики",
|
|
454
|
+
"filter.stale": "Без активности",
|
|
455
|
+
"pr.create": "Создать PR в Gitea",
|
|
456
|
+
"pr.creating": "Создание PR…",
|
|
457
|
+
"pr.created": "PR #{n} создан",
|
|
458
|
+
"pr.view": "Открыть PR"
|
|
439
459
|
}
|
|
440
460
|
}
|
|
@@ -185,6 +185,38 @@
|
|
|
185
185
|
"trash.count.other": "{count} навыков в корзине",
|
|
186
186
|
"error.skill.notLoadable": "Структура навыка неполная, невозможно выполнить {action}: {name}",
|
|
187
187
|
"root.ccswitch": "CC Switch",
|
|
188
|
-
"root.cursor": "Cursor"
|
|
188
|
+
"root.cursor": "Cursor",
|
|
189
|
+
"format.locale": "ru-RU",
|
|
190
|
+
"format.warningSeparator": "; ",
|
|
191
|
+
"summary.shadowed.one": "перекрыт: {count}",
|
|
192
|
+
"summary.shadowed.other": "перекрыто: {count}",
|
|
193
|
+
"summary.invalid.one": "диагностика: {count}",
|
|
194
|
+
"summary.invalid.other": "диагностик: {count}",
|
|
195
|
+
"create.globalTarget": "Глобальный DSH",
|
|
196
|
+
"warning.scan.truncated": "Некоторые навыки не показаны из-за слишком большого каталога или глубокой вложенности: {path}",
|
|
197
|
+
"scope.user": "Глобальные навыки",
|
|
198
|
+
"scope.project": "Навыки проекта",
|
|
199
|
+
"scope.trash": "Корзина",
|
|
200
|
+
"scope.label": "Режимы менеджера навыков",
|
|
201
|
+
"scope.userHint": "Доступны во всех проектах. Переключатели влияют только на вызов внутри DSH.",
|
|
202
|
+
"scope.projectHint": "Применяются к проекту текущей сессии. Переключатели не меняют исходные файлы других агентов. Импорт записывает в глобальный DSH.",
|
|
203
|
+
"project.empty": "В текущей сессии проект не распознан. Откройте сессию внутри проекта Git.",
|
|
204
|
+
"filter.status": "Статус вызова",
|
|
205
|
+
"filter.statusAll": "Все статусы",
|
|
206
|
+
"status.shadowedBy": "Перекрыт одноимённым навыком в {source}",
|
|
207
|
+
"status.fallback.user": "Сейчас используется глобальная копия из {source}.",
|
|
208
|
+
"status.fallback.project": "Сейчас используется копия проекта из {source}.",
|
|
209
|
+
"root.copilot": "Copilot",
|
|
210
|
+
"source.selectHint": "Выберите источник для просмотра его каталога или отключения источника целиком. Отключение влияет только на вызов в DSH и не меняет файлы.",
|
|
211
|
+
"import.global": "Импорт в глобальный DSH",
|
|
212
|
+
"root.projectSkills": "Навыки проекта",
|
|
213
|
+
"root.windsurf": "Windsurf",
|
|
214
|
+
"root.windsurfUser": "Windsurf (домашний)",
|
|
215
|
+
"root.trae": "Trae",
|
|
216
|
+
"root.traeCn": "Trae CN",
|
|
217
|
+
"root.openclaw": "OpenClaw",
|
|
218
|
+
"root.clawdbot": "OpenClaw (legacy)",
|
|
219
|
+
"root.roo": "Roo",
|
|
220
|
+
"root.codebuddy": "CodeBuddy"
|
|
189
221
|
}
|
|
190
|
-
}
|
|
222
|
+
}
|
|
@@ -296,6 +296,21 @@
|
|
|
296
296
|
"timing.text": "Ответ",
|
|
297
297
|
"timing.toolArgs": "Аргументы инструментов",
|
|
298
298
|
"rich.copy": "Скопировать исходный текст",
|
|
299
|
-
"rich.copied": "Скопировано"
|
|
299
|
+
"rich.copied": "Скопировано",
|
|
300
|
+
"stats.humanInputs": "Сообщения пользователя",
|
|
301
|
+
"stats.humanInputsTip": "Сообщения пользователя и ответы на вопросы в текущей сессии.",
|
|
302
|
+
"tokens.total": "Всего",
|
|
303
|
+
"settings.placement": "Варианты размещения",
|
|
304
|
+
"placement.tab": "Вкладка",
|
|
305
|
+
"placement.sidebar": "Боковая панель",
|
|
306
|
+
"placement.all": "Везде",
|
|
307
|
+
"files.preview": "Предпросмотр в боковой панели",
|
|
308
|
+
"stats.costTipDeepseek": "DeepSeek тарифицирует пиковые окна (будни 09:00–12:00, 14:00–18:00 по Пекину) по полному прайсу; в остальные часы действует скидка 50%.",
|
|
309
|
+
"stats.costPriceHeadPair": "Ставки за 1 млн токенов (пик|скидка):",
|
|
310
|
+
"stats.costWrite": "запись",
|
|
311
|
+
"stats.costUnavailable": "Цены моделей недоступны (повторяем запрос) — стоимость пока не может быть рассчитана.",
|
|
312
|
+
"settings.toolSort": "Схемы инструментов · Сортировка по умолчанию",
|
|
313
|
+
"tool.sort.count": "По числу вызовов",
|
|
314
|
+
"tool.hitsTip": "Сколько раз этот инструмент вызывался и возвращал ответ в контексте текущего шага"
|
|
300
315
|
}
|
|
301
316
|
}
|
|
@@ -303,6 +303,151 @@
|
|
|
303
303
|
"nextSteps.secrets.title": "Re-enter credentials ({count})",
|
|
304
304
|
"nextSteps.secrets.hint": "These credentials were not exported with the backup; re-enter them on this machine:",
|
|
305
305
|
"nextSteps.unresolved.title": "Failed / skipped ({count})",
|
|
306
|
-
"nextSteps.unresolved.hint": "These items were not applied; you can retry them from the result page:"
|
|
306
|
+
"nextSteps.unresolved.hint": "These items were not applied; you can retry them from the result page:",
|
|
307
|
+
"view.overview": "Обзор",
|
|
308
|
+
"toast.copied": "Скопировано в буфер обмена",
|
|
309
|
+
"toast.copyFailed": "Не удалось скопировать — выделите текст и скопируйте вручную",
|
|
310
|
+
"toast.refreshed": "Обновлено",
|
|
311
|
+
"overview.subtitle": "Здоровье конфигурации и быстрые действия (данные только для чтения из каждого раздела)",
|
|
312
|
+
"overview.refresh": "Обновить",
|
|
313
|
+
"overview.loading": "Загрузка обзора…",
|
|
314
|
+
"overview.health.ok": "Конфигурация в полном порядке",
|
|
315
|
+
"overview.health.noBackup": "Резервных копий пока нет — сначала создайте бэкап или снимок",
|
|
316
|
+
"overview.health.scheduleFailed": "Последний бэкап по расписанию не удался — проверьте настройки",
|
|
317
|
+
"overview.health.recovery": "Неразрешённые элементы восстановления требуют внимания",
|
|
318
|
+
"overview.health.recoveryAction": "Перейти к восстановлению инцидентов",
|
|
319
|
+
"overview.metric.backups": "Файлы бэкапов",
|
|
320
|
+
"overview.metric.snapshots": "Снимки безопасности",
|
|
321
|
+
"overview.metric.schedule": "Бэкап по расписанию",
|
|
322
|
+
"overview.metric.sync": "Удалённая синхронизация",
|
|
323
|
+
"overview.state.on": "Вкл.",
|
|
324
|
+
"overview.state.off": "Выкл.",
|
|
325
|
+
"overview.meta.lastBackup": "Посл.: {time}",
|
|
326
|
+
"overview.meta.noBackup": "Записей пока нет",
|
|
327
|
+
"overview.meta.scheduleOn": "Включено · посл. запуск {time}",
|
|
328
|
+
"overview.meta.scheduleOff": "Отключено (включите для автозащиты)",
|
|
329
|
+
"overview.meta.scheduleFail": "Сбой последнего бэкапа",
|
|
330
|
+
"overview.meta.syncOn": "Настроено · посл. синхронизация {time}",
|
|
331
|
+
"overview.meta.syncOff": "Не настроено",
|
|
332
|
+
"overview.meta.never": "Никогда не запускалось",
|
|
333
|
+
"overview.time.now": "только что",
|
|
334
|
+
"overview.time.min": "{n} мин назад",
|
|
335
|
+
"overview.time.hour": "{n} ч назад",
|
|
336
|
+
"overview.time.day": "{n} дн назад",
|
|
337
|
+
"overview.quick.title": "Быстрые действия",
|
|
338
|
+
"overview.quick.backup": "Создать бэкап",
|
|
339
|
+
"overview.quick.backupHint": "Полный снимок (без секретов), доступный для отката в любой момент",
|
|
340
|
+
"overview.quick.backupDone": "Резервное копирование завершено",
|
|
341
|
+
"overview.quick.backupFailed": "Сбой резервного копирования",
|
|
342
|
+
"overview.quick.export": "Экспорт бэкапа",
|
|
343
|
+
"overview.quick.exportHint": "Создать переносимый ZIP-архив резервной копии",
|
|
344
|
+
"overview.quick.import": "Импорт / восстановление",
|
|
345
|
+
"overview.quick.importHint": "Восстановить конфигурацию из файла бэкапа на этом компьютере",
|
|
346
|
+
"overview.quick.sync": "Удалённая синхронизация",
|
|
347
|
+
"overview.quick.syncHint": "Поддерживать одинаковые настройки на разных устройствах (Git / WebDAV)",
|
|
348
|
+
"overview.activity.title": "Недавняя активность",
|
|
349
|
+
"overview.activity.empty": "Активности пока нет (здесь появятся бэкапы, импорты и синхронизации)",
|
|
350
|
+
"overview.suggest.title": "Рекомендации",
|
|
351
|
+
"overview.suggest.schedule": "Включите бэкап по расписанию для автоматической защиты настроек",
|
|
352
|
+
"overview.suggest.sync": "Настройте удалённую синхронизацию для лёгкого переноса между устройствами",
|
|
353
|
+
"overview.empty.title": "Начните защиту своей конфигурации",
|
|
354
|
+
"overview.empty.body": "После создания первого бэкапа или снимка здесь отобразятся статус здоровья и недавняя активность.",
|
|
355
|
+
"overview.running": "Задач выполняется: {count}",
|
|
356
|
+
"overview.kind.import": "Импорт",
|
|
357
|
+
"overview.kind.restore": "Восстановление",
|
|
358
|
+
"overview.kind.rollback": "Откат",
|
|
359
|
+
"overview.kind.profile-switch": "Переключение профиля",
|
|
360
|
+
"overview.kind.profile-delete": "Удаление профиля",
|
|
361
|
+
"overview.kind.profile-rename": "Переименование профиля",
|
|
362
|
+
"overview.kind.profile-save": "Сохранение профиля",
|
|
363
|
+
"overview.kind.profile-import": "Импорт профиля",
|
|
364
|
+
"overview.kind.sync-apply": "Применение синхронизации",
|
|
365
|
+
"overview.kind.autosync": "Автосинхронизация",
|
|
366
|
+
"overview.kind.recovery": "Восстановление",
|
|
367
|
+
"overview.kind.backup": "Резервное копирование",
|
|
368
|
+
"overview.kind.snapshot-delete": "Удаление снимка",
|
|
369
|
+
"overview.kind.snapshot-prune": "Очистка снимков",
|
|
370
|
+
"overview.kind.other": "Другая операция",
|
|
371
|
+
"import.stage.select": "Выбор",
|
|
372
|
+
"import.stage.analyze": "Анализ",
|
|
373
|
+
"import.stage.decide": "Предпросмотр и решение",
|
|
374
|
+
"import.stage.confirm": "Подтверждение",
|
|
375
|
+
"import.stage.execute": "Выполнение",
|
|
376
|
+
"import.stage.done": "Готово",
|
|
377
|
+
"import.stepper.label": "Шаг {current} из {total}: {label}",
|
|
378
|
+
"snapshots.subTab.schedule": "Расписание",
|
|
379
|
+
"snapshots.empty.title": "Снимков пока нет",
|
|
380
|
+
"snapshots.empty.body": "Снимки создаются автоматически перед импортом и восстановлением для отката в один клик. Вы также можете сделать снимок прямо сейчас.",
|
|
381
|
+
"snapshots.empty.viewFiles": "Просмотр файлов бэкапов",
|
|
382
|
+
"snapshots.empty.runBackup": "Создать снимок сейчас",
|
|
383
|
+
"backupFiles.noteUnreadable": "(примечание не читается)",
|
|
384
|
+
"snapshots.deleted": "Снимок удалён",
|
|
385
|
+
"backupFiles.name": "Файл",
|
|
386
|
+
"backupFiles.source": "Источник",
|
|
387
|
+
"backupFiles.size": "Размер",
|
|
388
|
+
"backupFiles.time": "Изменён",
|
|
389
|
+
"backupFiles.deleted": "Удалён файл бэкапа «{name}»",
|
|
390
|
+
"about.diag.label": "Источник списка плагинов",
|
|
391
|
+
"about.diag.profileDir": "Каталог: {path}",
|
|
392
|
+
"about.diag.profile": "Профиль: {profile}",
|
|
393
|
+
"about.diag.pluginCount": "Обнаружено плагинов: {count}",
|
|
394
|
+
"about.diag.manifestUnreadable": "В каталоге отсутствует читаемый package.json — список плагинов пуст. Проверьте соответствие профиля DSH и переменной DSH_HOME этому пути.",
|
|
395
|
+
"about.diag.bundles": "бандлы: {bundles}",
|
|
396
|
+
"about.diag.hint": "Если данные не совпадают с вашей конфигурацией, проверьте аргумент DSH --profile и переменную DSH_HOME.",
|
|
397
|
+
"profiles.save.done": "Сохранён профиль «{name}»",
|
|
398
|
+
"profiles.delete.done": "Удалён профиль «{name}»",
|
|
399
|
+
"profiles.import.done": "Импортирован профиль «{name}»",
|
|
400
|
+
"import.compatibility.sections": "Разделов: {count}",
|
|
401
|
+
"import.compatibility.plugins": "установлено {installed} · к установке {toInstall}",
|
|
402
|
+
"import.compatibility.paths": "Проблем с путями: {count}",
|
|
403
|
+
"import.compatibility.secrets": "Секретов для повторного ввода: {count}",
|
|
404
|
+
"import.compatibility.score.excellent": "Отличная",
|
|
405
|
+
"import.compatibility.score.good": "Хорошая",
|
|
406
|
+
"import.compatibility.score.partial": "Частичная",
|
|
407
|
+
"import.compatibility.score.unsupported": "Не поддерживается",
|
|
408
|
+
"import.compatibility.sectionsTitle": "Разделы в этой резервной копии",
|
|
409
|
+
"sync.status.lastSync": "Последняя синхронизация",
|
|
410
|
+
"sync.status.sections": "Синхронизируемые разделы",
|
|
411
|
+
"nav.overview": "Обзор",
|
|
412
|
+
"nav.backups": "Бэкапы",
|
|
413
|
+
"nav.export": "Экспорт",
|
|
414
|
+
"nav.import": "Импорт",
|
|
415
|
+
"nav.sync": "Синхронизация",
|
|
416
|
+
"nav.market": "Витрина",
|
|
417
|
+
"nav.profiles": "Профили",
|
|
418
|
+
"nav.activity": "Активность",
|
|
419
|
+
"nav.about": "О плагине",
|
|
420
|
+
"nav.refresh": "Обновить",
|
|
421
|
+
"shell.status.idle": "Ожидание",
|
|
422
|
+
"shell.status.running": "Задач выполняется: {count}",
|
|
423
|
+
"shell.status.recovery": "Ожидает восстановления",
|
|
424
|
+
"shell.version": "Плагин {plugin} · DSH {dsh}",
|
|
425
|
+
"shell.drawer.title": "Активность и информация",
|
|
426
|
+
"overview.result.success": "Успешно",
|
|
427
|
+
"overview.result.failed": "Сбой",
|
|
428
|
+
"overview.result.skipped": "Пропущено",
|
|
429
|
+
"overview.activity.viewAll": "Смотреть все",
|
|
430
|
+
"overview.activity.copy": "Копировать",
|
|
431
|
+
"overview.activity.redacted": "(имя файла скрыто)",
|
|
432
|
+
"overview.location.title": "Хранилище бэкапов",
|
|
433
|
+
"overview.location.dir": "Каталог бэкапов",
|
|
434
|
+
"overview.location.totalSize": "Общий объём",
|
|
435
|
+
"overview.location.retention": "Снимки",
|
|
436
|
+
"overview.location.retentionValue": "{used} / {limit}",
|
|
437
|
+
"overview.location.schedule": "Расписание",
|
|
438
|
+
"overview.location.scheduleOn": "{interval} · посл. {time}",
|
|
439
|
+
"overview.location.scheduleOff": "Выкл.",
|
|
440
|
+
"overview.location.nextRun": "Следующий запуск",
|
|
441
|
+
"overview.location.lastRun": "Последний запуск",
|
|
442
|
+
"overview.sections.title": "Состав разделов",
|
|
443
|
+
"overview.sections.hint": "Оценено по текущей конфигурации (предпросмотр только для чтения, без записи)",
|
|
444
|
+
"overview.sections.total": "Всего",
|
|
445
|
+
"overview.sections.entries": "Элементов: {count}",
|
|
446
|
+
"overview.quick.exportTitle": "Сформировать переносимый ZIP-бэкап и скачать его",
|
|
447
|
+
"overview.quick.importTitle": "Восстановить из файла бэкапа или перенести на этот компьютер",
|
|
448
|
+
"overview.quick.syncTitle": "Синхронизировать конфигурации между устройствами (Git / WebDAV)",
|
|
449
|
+
"overview.quick.backupTitle": "Полный снимок с возможностью отката в любой момент",
|
|
450
|
+
"overview.nav.activity": "Активность",
|
|
451
|
+
"overview.nav.about": "О плагине"
|
|
307
452
|
}
|
|
308
|
-
}
|
|
453
|
+
}
|
|
@@ -172,6 +172,31 @@
|
|
|
172
172
|
"history.channelWebdav": "WebDAV",
|
|
173
173
|
"common.close": "Закрыть",
|
|
174
174
|
"common.retry": "Повторить",
|
|
175
|
-
"common.loading": "Загрузка…"
|
|
175
|
+
"common.loading": "Загрузка…",
|
|
176
|
+
"syncStatus.lastSync": "Последняя синхронизация",
|
|
177
|
+
"syncStatus.sections": "Синхронизируемые разделы",
|
|
178
|
+
"syncStatus.state": "Состояние",
|
|
179
|
+
"toast.autosyncLoadFailed": "Не удалось загрузить статус автосинхронизации",
|
|
180
|
+
"toast.configSaveFailed": "Не удалось сохранить настройки канала",
|
|
181
|
+
"toast.configSaved": "Настройки канала сохранены",
|
|
182
|
+
"toast.configNothingToSave": "Введите URL канала перед сохранением",
|
|
183
|
+
"toast.selectionSaveFailed": "Не удалось сохранить настройки синхронизации",
|
|
184
|
+
"toast.pushPreviewFailed": "Не удалось сформировать предпросмотр отправки",
|
|
185
|
+
"toast.pushFailed": "Ошибка отправки",
|
|
186
|
+
"toast.pushDone": "Отправка завершена",
|
|
187
|
+
"toast.pullFailed": "Ошибка получения",
|
|
188
|
+
"toast.pullDone": "Получение завершено",
|
|
189
|
+
"toast.syncStartFailed": "Синхронизация в один клик не удалась",
|
|
190
|
+
"toast.autosyncUpdateFailed": "Не удалось обновить параметры автосинхронизации",
|
|
191
|
+
"toast.autosyncUpdated": "Параметры автосинхронизации обновлены",
|
|
192
|
+
"toast.snapshotsLoadFailed": "Не удалось загрузить удалённые снимки",
|
|
193
|
+
"toast.snapshotsRefreshed": "Список удалённых снимков обновлён",
|
|
194
|
+
"load.failed": "Не удалось загрузить статус синхронизации",
|
|
195
|
+
"history.stats.total": "Всего: {count}",
|
|
196
|
+
"history.stats.snapshots": "Снимков: {count}",
|
|
197
|
+
"history.stats.autosync": "Автосинхронизаций: {count}",
|
|
198
|
+
"history.stats.failed": "Сбоев: {count}",
|
|
199
|
+
"history.stats.skipped": "Пропущено: {count}",
|
|
200
|
+
"history.stats.summary": "Статистика истории синхронизации"
|
|
176
201
|
}
|
|
177
|
-
}
|
|
202
|
+
}
|
|
@@ -130,6 +130,13 @@
|
|
|
130
130
|
"common.close": "Закрыть",
|
|
131
131
|
"common.retry": "Повторить",
|
|
132
132
|
"common.loading": "Загрузка…",
|
|
133
|
-
"common.unknownError": "Неизвестная ошибка"
|
|
133
|
+
"common.unknownError": "Неизвестная ошибка",
|
|
134
|
+
"config.refreshed": "Индекс витрины обновлён",
|
|
135
|
+
"list.browsed": "Витрина обновлена",
|
|
136
|
+
"import.done": "Импорт завершён: записано элементов: {count}",
|
|
137
|
+
"import.failed": "Ошибка импорта (сбоев: {count})",
|
|
138
|
+
"import.needsRestart": "Некоторые изменения требуют перезапуска DSH",
|
|
139
|
+
"detail.failed": "Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)",
|
|
140
|
+
"myconfigs.install.failed": "Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)"
|
|
134
141
|
}
|
|
135
|
-
}
|
|
142
|
+
}
|
|
@@ -194,6 +194,23 @@
|
|
|
194
194
|
"testing": "Тестирование…",
|
|
195
195
|
"tileLargeImages": "Фрагментировать большие изображения",
|
|
196
196
|
"type": "Тип",
|
|
197
|
-
"vllm": "vLLM"
|
|
197
|
+
"vllm": "vLLM",
|
|
198
|
+
"secRouting": "Маршрутизация",
|
|
199
|
+
"secImage": "Качество изображений",
|
|
200
|
+
"attachments": "Вложения",
|
|
201
|
+
"attachmentsHint": "Сколько изображений можно опубликовать за один вызов attach, и нужно ли скрывать инструменты бриджа от моделей с нативным зрением.",
|
|
202
|
+
"attachMaxItems": "Макс. вложений за вызов",
|
|
203
|
+
"attachMaxItemsRange": "Количество вложений за вызов должно быть целым числом от 1 до 32",
|
|
204
|
+
"hideRedundantTools": "Скрывать инструменты бриджа у моделей со зрением",
|
|
205
|
+
"telemetry": "Телеметрия канала",
|
|
206
|
+
"telemetryHint": "Задержка канала (RTT) в реальном времени, объём запросов и статус работоспособности.",
|
|
207
|
+
"requests": "Запросов",
|
|
208
|
+
"healthy": "В норме",
|
|
209
|
+
"degraded": "Деградация",
|
|
210
|
+
"offline": "Офлайн",
|
|
211
|
+
"qualityAnalysis": "Анализ качества и детекция размытия",
|
|
212
|
+
"qualityAnalysisHint": "Определение резкости (дисперсия Лапласа) и извлечение цветовой палитры.",
|
|
213
|
+
"pixelDiff": "Попиксельное сравнение (Pixel Diff)",
|
|
214
|
+
"pixelDiffHint": "Точное отслеживание изменений интерфейса «до / после» на уровне пикселей."
|
|
198
215
|
}
|
|
199
|
-
}
|
|
216
|
+
}
|
|
@@ -168,6 +168,50 @@
|
|
|
168
168
|
"confirmRemoveProvDesc": "Вы уверены, что хотите удалить этого провайдера и все настроенные ключи из ротации?",
|
|
169
169
|
"undoProvider": "Провайдер удалён",
|
|
170
170
|
"undoKey": "Ключ удалён",
|
|
171
|
-
"undo": "Отменить"
|
|
171
|
+
"undo": "Отменить",
|
|
172
|
+
"header.title": "Ротация ключей и отказоустойчивость",
|
|
173
|
+
"header.sub": "Автоматическая круговая (round-robin) ротация нескольких ключей, экспоненциальные таймауты при ошибках 429/5xx, защита цепи failover и безопасность учётных данных (~/.dsh/.credentials.yaml).",
|
|
174
|
+
"header.pools_badge": "активных пулов",
|
|
175
|
+
"header.keys_badge": "настроенных ключей",
|
|
176
|
+
"emptyTitle": "Пулов пока нет",
|
|
177
|
+
"emptyDesc": "Добавьте провайдера и хотя бы одно имя API-ключа для запуска ротации.",
|
|
178
|
+
"errorTitle": "Не удалось загрузить настройки",
|
|
179
|
+
"retry": "Повторить",
|
|
180
|
+
"unavailableTitle": "Мост настроек недоступен",
|
|
181
|
+
"unavailableDesc": "Хост не предоставил пространство настроек dsh-key-rotation. Откройте «Настройки» заново или проверьте, включён ли плагин.",
|
|
182
|
+
"modalClose": "Закрыть диалог",
|
|
183
|
+
"dialogLabel": "Подтверждение",
|
|
184
|
+
"loadChartAria": "Распределение трафика по ключам",
|
|
185
|
+
"bulkCooldownPlaceholder": "Массовый таймаут (мс)",
|
|
186
|
+
"bulkApply": "Применить к выбранным",
|
|
187
|
+
"bulkRemove": "Удалить выбранные",
|
|
188
|
+
"confirmBulkRemoveTitle": "Удалить выбранных провайдеров ({n})?",
|
|
189
|
+
"confirmBulkRemoveDesc": "Выбранные провайдеры и все их ключи будут исключены из ротации. Действие можно отменить один раз сразу после удаления.",
|
|
190
|
+
"selectProvider": "Выбрать провайдера {p}",
|
|
191
|
+
"activeBadge": "активен",
|
|
192
|
+
"healthScoreTitle": "рейтинг надёжности",
|
|
193
|
+
"totalRequestsTitle": "всего запросов",
|
|
194
|
+
"exportProvider": "Экспортировать этого провайдера",
|
|
195
|
+
"recentFailures": "Недавние сбои ({n})",
|
|
196
|
+
"noActivePools": "Нет активных пулов",
|
|
197
|
+
"headerPoolsTitle": "Пулы ротации ключей",
|
|
198
|
+
"pausedBudget": "приостановлен",
|
|
199
|
+
"sortUsage": "Сортировать по нагрузке",
|
|
200
|
+
"testingAllProgress": "Проверка {n} из {total}…",
|
|
201
|
+
"liveEventStream": "Лента событий в реальном времени",
|
|
202
|
+
"liveEventStreamEmpty": "События ротации пока не зафиксированы",
|
|
203
|
+
"eventAt": "Время",
|
|
204
|
+
"eventKey": "Ключ",
|
|
205
|
+
"eventReason": "Причина",
|
|
206
|
+
"eventCooldown": "Таймаут",
|
|
207
|
+
"quotaResetIn": "Сброс через {time}",
|
|
208
|
+
"routingStrategyLabel": "Стратегия маршрутизации",
|
|
209
|
+
"routingStrategyRoundRobin": "Круговой перебор (Round-Robin, по умолчанию)",
|
|
210
|
+
"routingStrategyLeastLoaded": "Минимальная нагрузка (по параллелизму)",
|
|
211
|
+
"routingStrategyLowestLatency": "Минимальная задержка (p95)",
|
|
212
|
+
"proactiveGuardLabel": "Превентивная защита от лимитов (Rate-Limit Guard)",
|
|
213
|
+
"proactiveGuardHint": "Заранее ставить ключи на паузу при приближении к квоте или заголовку Retry-After до получения 429",
|
|
214
|
+
"selfHealingLabel": "Интервал автовосстановления (мин)",
|
|
215
|
+
"selfHealingHint": "Периодическая проверка бесплатной моделью для возврата вышедших из строя ключей (0 — отключено)"
|
|
172
216
|
}
|
|
173
217
|
}
|
|
@@ -60,6 +60,31 @@
|
|
|
60
60
|
"field.refreshHours": "Интервал обновления каталога (в часах)",
|
|
61
61
|
"hint.refreshHours": "Интервал фонового запроса каталога в часах (от 1 до 168).",
|
|
62
62
|
"settings.retry": "Повторить попытку",
|
|
63
|
-
"offpeak": "ночной тариф"
|
|
63
|
+
"offpeak": "ночной тариф",
|
|
64
|
+
"badge.catalog_stale": "Кэш: офлайн",
|
|
65
|
+
"field.budgetThreshold": "Порог бюджета сессии (USD)",
|
|
66
|
+
"hint.budgetThreshold": "Предупреждать цветом плашки при превышении расходов в сессии (0 — выключено).",
|
|
67
|
+
"action.sync_now": "Синхронизировать сейчас",
|
|
68
|
+
"action.syncing": "Синхронизация…",
|
|
69
|
+
"action.sync_ok": "Каталог обновлён",
|
|
70
|
+
"action.sync_err": "Синхронизация не удалась",
|
|
71
|
+
"action.sync_rate_limited": "Подождите {seconds} с",
|
|
72
|
+
"action.copy_report": "Скопировать сводку",
|
|
73
|
+
"action.copied": "Скопировано!",
|
|
74
|
+
"savings.hint": "💡 Скидка 50% начнётся через {time} ({clock} {zone})",
|
|
75
|
+
"budget.exceeded": "⚠️ Лимит бюджета превышен: {limit}",
|
|
76
|
+
"savings.cache_saved": "⚡ Сэкономлено на кэше контекста: ≈ {amount} ({percent}%)",
|
|
77
|
+
"models.show_more": "Показать все модели ({count})",
|
|
78
|
+
"models.show_less": "Свернуть",
|
|
79
|
+
"rate.per_1m": "1 млн токенов, $",
|
|
80
|
+
"rate.cache_hit": "Вход (попадание в кэш)",
|
|
81
|
+
"rate.cache_write": "Вход (запись в кэш)",
|
|
82
|
+
"tokens.session": "Токены сессии",
|
|
83
|
+
"tokens.tokens_col": "Токены",
|
|
84
|
+
"tokens.models_spent": "Расходы по моделям",
|
|
85
|
+
"tokens.session_total": "Всего за сессию:",
|
|
86
|
+
"tokens.no_usage_yet": "Провайдер пока не передал статистику использования для этой сессии.",
|
|
87
|
+
"tokens.not_priced": "Тариф не задан",
|
|
88
|
+
"tz.invalid": "Недопустимый идентификатор часового пояса IANA"
|
|
64
89
|
}
|
|
65
90
|
}
|
|
@@ -27,6 +27,12 @@
|
|
|
27
27
|
"unavailable": "Настройки недоступны",
|
|
28
28
|
"sidebarNotice": "Снимки состояния рабочей области сохраняются автоматически перед каждым крупным действием агента.",
|
|
29
29
|
"guideTitle": "Машина времени",
|
|
30
|
-
"guideDesc": "Контрольные точки, визуальные диффы и мгновенный откат рабочей области."
|
|
30
|
+
"guideDesc": "Контрольные точки, визуальные диффы и мгновенный откат рабочей области.",
|
|
31
|
+
"restoreFile": "Восстановить файл",
|
|
32
|
+
"confirmRestoreFile": "Восстановить этот файл к состоянию контрольной точки?",
|
|
33
|
+
"fileRestored": "Файл успешно восстановлен.",
|
|
34
|
+
"filesChanged": "Изменённые файлы",
|
|
35
|
+
"allFiles": "Все файлы",
|
|
36
|
+
"selectFile": "Выберите файл для просмотра различий"
|
|
31
37
|
}
|
|
32
|
-
}
|
|
38
|
+
}
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
"previewApprox": "Предпросмотр на сервере",
|
|
28
28
|
"readyState": "Готов к сжатию",
|
|
29
29
|
"refresh": "Обновить",
|
|
30
|
-
"threshold": "Порог автосжатия (символов)"
|
|
30
|
+
"threshold": "Порог автосжатия (символов)",
|
|
31
|
+
"budgetAlertPercent": "Порог предупреждения о бюджете (%)",
|
|
32
|
+
"focusPaths": "Активный фокус",
|
|
33
|
+
"noFocus": "Пути фокуса не заданы",
|
|
34
|
+
"clearFocus": "Очистить фокус"
|
|
31
35
|
}
|
|
32
|
-
}
|
|
36
|
+
}
|
|
@@ -39,6 +39,29 @@
|
|
|
39
39
|
"enablePromptInjectionDesc": "Сканирование diff-изменений на попытки переопределения системного промпта и джейлбрейка",
|
|
40
40
|
"shield.green": "Безопасно",
|
|
41
41
|
"shield.yellow": "Внимание",
|
|
42
|
-
"shield.red": "Тревога"
|
|
42
|
+
"shield.red": "Тревога",
|
|
43
|
+
"sec.file_integrity_title": "Контроль целостности файлов и чувствительных путей",
|
|
44
|
+
"sec.file_integrity_desc": "Защита от несанкционированного чтения или изменения критических учётных данных, конфигураций и якорей.",
|
|
45
|
+
"sec.feed_title": "Недавние перехваты и журнал аудита",
|
|
46
|
+
"sec.feed_desc": "Живой журнал вызовов инструментов, перехватов защитника и оценки рисков с фильтрацией угроз.",
|
|
47
|
+
"shellGuardMode": "Политика Shell Guard",
|
|
48
|
+
"shellGuardModeDesc": "Режим Enforce блокирует опасные команды; Audit Only только логирует предупреждения без блокировки.",
|
|
49
|
+
"shellGuard.enforce": "Блокировка (Enforce: запрет выполнения)",
|
|
50
|
+
"shellGuard.audit_only": "Только аудит (Audit Only: логирование)",
|
|
51
|
+
"customBlockedCommands": "Шаблоны блокируемых команд",
|
|
52
|
+
"customBlockedCommandsDesc": "Регулярные выражения или подстроки команд для запрета (по одному шаблону в строке).",
|
|
53
|
+
"sensitivePathPatterns": "Шаблоны чувствительных путей",
|
|
54
|
+
"sensitivePathPatternsDesc": "Отслеживаемые маски файлов или регулярные выражения (по одному в строке, напр. .env*, *credentials*, id_rsa, settings.yaml).",
|
|
55
|
+
"action.export_json": "Экспорт в JSON",
|
|
56
|
+
"action.export_bill": "Экспорт отчёта (MD)",
|
|
57
|
+
"filter.all": "Все",
|
|
58
|
+
"filter.guard": "Shell Guard",
|
|
59
|
+
"filter.diff_gate": "Diff Gate",
|
|
60
|
+
"filter.high_risk": "Высокий риск",
|
|
61
|
+
"feed.refresh": "Обновить",
|
|
62
|
+
"feed.blocked": "ЗАБЛОКИРОВАНО",
|
|
63
|
+
"feed.empty": "Журнал аудита для этого фильтра пуст.",
|
|
64
|
+
"diffInspector.title": "Активное срабатывание Diff Gate: ",
|
|
65
|
+
"diffInspector.remediation": "Рекомендуемое безопасное действие: "
|
|
43
66
|
}
|
|
44
67
|
}
|
|
@@ -8,5 +8,21 @@
|
|
|
8
8
|
"dialog.title": "Разрешение автономного режима",
|
|
9
9
|
"preset.description": "Шаблон прав и политик безопасности для автоматического цикла",
|
|
10
10
|
"preset.label": "Пресет автономного режима"
|
|
11
|
+
},
|
|
12
|
+
"@goodandready/dsh-agent-loop-guard": {
|
|
13
|
+
"title": "Agent Loop Guard",
|
|
14
|
+
"sub": "Защитные лимиты циклов вызова инструментов и ответов ассистента (fail-closed)",
|
|
15
|
+
"maxToolAttemptsPerTurn": "Макс. попыток вызова инструментов за ход",
|
|
16
|
+
"maxProgressToolCallsPerTurn": "Макс. вызовов инструментов прогресса за ход",
|
|
17
|
+
"maxCallsPerRepeatGroup": "Макс. вызовов в группе повторений",
|
|
18
|
+
"blockExactDuplicates": "Блокировать точные дубликаты вызовов инструментов",
|
|
19
|
+
"assistantOutputGuard": "Защита вывода ассистента",
|
|
20
|
+
"maxRepeatedAssistantLines": "Макс. повторяющихся строк ассистента",
|
|
21
|
+
"maxRepeatedAssistantBlocks": "Макс. повторяющихся блоков ассистента",
|
|
22
|
+
"maxAssistantBlockChars": "Макс. символов в блоке ассистента",
|
|
23
|
+
"progressToolNames": "Имена инструментов прогресса (через запятую)",
|
|
24
|
+
"saving": "Сохранение…",
|
|
25
|
+
"ready": "Сохранить",
|
|
26
|
+
"saved": "Сохранено"
|
|
11
27
|
}
|
|
12
28
|
}
|
|
@@ -77,6 +77,64 @@
|
|
|
77
77
|
"tunnelsColRoute": "Маршрут проброса",
|
|
78
78
|
"tunnelsColActions": "Действия",
|
|
79
79
|
"tOpenOk": "Туннель открыт: 127.0.0.1:{localPort} -> Удалённый:{remotePort}",
|
|
80
|
-
"tOpenErr": "Не удалось открыть туннель: {err}"
|
|
80
|
+
"tOpenErr": "Не удалось открыть туннель: {err}",
|
|
81
|
+
"tabProfiles": "🖥️ Профили хостов",
|
|
82
|
+
"tabContainers": "🐳 Контейнеры",
|
|
83
|
+
"containersTitle": "Удалённый Docker / Podman Engine",
|
|
84
|
+
"containerName": "Контейнер",
|
|
85
|
+
"containerImage": "Образ",
|
|
86
|
+
"containerStatus": "Статус",
|
|
87
|
+
"containerPorts": "Порты",
|
|
88
|
+
"btnLogs": "Логи",
|
|
89
|
+
"btnRestart": "Перезапустить",
|
|
90
|
+
"btnStop": "Остановить",
|
|
91
|
+
"noContainers": "Активных контейнеров не найдено или демон Docker не запущен.",
|
|
92
|
+
"healthCpu": "ЦП: {val}%",
|
|
93
|
+
"healthMem": "ОЗУ: {val}% ({used}/{total} МБ)",
|
|
94
|
+
"healthDisk": "Диск: {val}%",
|
|
95
|
+
"healthUptime": "Аптайм: {val}",
|
|
96
|
+
"autoSyncTitle": "Автосинхронизация при сохранении",
|
|
97
|
+
"autoSyncDesc": "Автоматически отправлять изменённые файлы в удалённое рабочее пространство при локальном сохранении.",
|
|
98
|
+
"btnTransfer": "Передать на хост…",
|
|
99
|
+
"transferTitle": "Прямая передача сервер-сервер",
|
|
100
|
+
"transferDestHost": "Целевой сервер",
|
|
101
|
+
"transferDestPath": "Целевой путь к файлу",
|
|
102
|
+
"transferBtnExec": "Передать напрямую",
|
|
103
|
+
"transferSuccess": "Успешно передано {bytes} байт на {host}:{path}",
|
|
104
|
+
"fJumpHost": "Jump-хост (бастион)",
|
|
105
|
+
"fJumpHostNone": "Прямое подключение (без jump-хоста)",
|
|
106
|
+
"tabTerminal": "⚡ Веб-терминал",
|
|
107
|
+
"tabExplorer": "📂 Проводник файлов",
|
|
108
|
+
"tabTunnels": "🔗 Порт-туннели",
|
|
109
|
+
"tabSync": "🔄 Станция синхронизации",
|
|
110
|
+
"vaultProtectedBadge": "🛡️ Защищено .env Vault",
|
|
111
|
+
"termStart": "Подключить терминал",
|
|
112
|
+
"termStop": "Отключить",
|
|
113
|
+
"termClear": "Очистить",
|
|
114
|
+
"termPlaceholder": "Введите команду и нажмите Enter (напр. htop, ls, docker ps)…",
|
|
115
|
+
"termConnected": "Подключено к PTY-сессии {id} на {host}",
|
|
116
|
+
"termDisconnected": "Терминал отключён.",
|
|
117
|
+
"explorerTitle": "Удалённый файловый менеджер",
|
|
118
|
+
"filePreviewTitle": "Просмотр файла: {path}",
|
|
119
|
+
"fileSize": "{size} КБ",
|
|
120
|
+
"btnSaveFile": "Сохранить изменения",
|
|
121
|
+
"fileSaved": "Файл успешно сохранён.",
|
|
122
|
+
"tunnelTraffic": "Вход: {rx} | Выход: {tx}",
|
|
123
|
+
"tunnelUptime": "Работает: {sec} с",
|
|
124
|
+
"openLocalLink": "🌐 Открыть локальный порт",
|
|
125
|
+
"tabEnv": "🗃️ Менеджер .env",
|
|
126
|
+
"btnImportSsh": "Импорт из ~/.ssh/config",
|
|
127
|
+
"envTitle": "Удалённые переменные окружения (.env)",
|
|
128
|
+
"envKey": "Ключ",
|
|
129
|
+
"envVal": "Значение",
|
|
130
|
+
"envSaveVar": "Сохранить",
|
|
131
|
+
"envShowVal": "Показать",
|
|
132
|
+
"envHideVal": "Скрыть",
|
|
133
|
+
"tarSyncFast": "🚀 Быстрый поток архива (Tarball Stream)",
|
|
134
|
+
"diagnoseTitle": "Экспресс-диагностика",
|
|
135
|
+
"diagnosePorts": "Открытые порты",
|
|
136
|
+
"diagnoseOom": "Проверка OOM Killer",
|
|
137
|
+
"diagnoseDisk": "Использование диска",
|
|
138
|
+
"alertLabel": "Оповещения ({count})"
|
|
81
139
|
}
|
|
82
140
|
}
|