@ragnoryok1/dsh-client-locale-ru 0.2.14 → 0.2.16
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/CHANGELOG.md +51 -0
- package/NAMESPACES.md +3 -3
- package/README.en.md +33 -39
- package/README.md +38 -54
- package/README.zh.md +34 -37
- package/lib/client.js +545 -535
- package/lib/index.d.ts +46 -7
- package/lib/index.js +101 -7
- package/package.json +2 -2
package/lib/client.js
CHANGED
|
@@ -1804,7 +1804,7 @@ window.__ModuleLoader__.load({
|
|
|
1804
1804
|
"image.dialog": "Просмотр изображения",
|
|
1805
1805
|
"image.close": "Закрыть просмотр изображения",
|
|
1806
1806
|
"settings.transcript.standard": "Стандартный",
|
|
1807
|
-
"settings.transcript.verbose": "
|
|
1807
|
+
"settings.transcript.verbose": "Развёрнутый",
|
|
1808
1808
|
"message.toolAdded": "Инструмент добавлен: {name}",
|
|
1809
1809
|
"message.toolRemoved": "Инструмент удалён: {name}",
|
|
1810
1810
|
"message.toolsAdded": "Добавлены: {names}",
|
|
@@ -62775,536 +62775,6 @@ window.__ModuleLoader__.load({
|
|
|
62775
62775
|
"files.few": "Файлов: {count}",
|
|
62776
62776
|
"files.many": "Файлов: {count}"
|
|
62777
62777
|
},
|
|
62778
|
-
"acp_turn_sep_": {
|
|
62779
|
-
"advisory.desc": ": в текущей версии есть серьёзный дефект; bili сам обновляет её до безопасной версии. Причина:",
|
|
62780
|
-
"advisory.hint": ". Если обновление не завершилось автоматически, выполните его вручную:",
|
|
62781
|
-
"advisory.on": "Уведомление о критическом дефекте",
|
|
62782
|
-
"advisory.restartDesc": ": безопасная версия уже установлена на диске, но этот процесс всё ещё работает на затронутой версии. Причина:",
|
|
62783
|
-
"advisory.restartHint": ". Перезапустите bili, чтобы она вступила в силу.",
|
|
62784
|
-
"alert.dismiss": "Понятно",
|
|
62785
|
-
"alert.hint.connect_refused": "TCP отклонён (через прокси, если он настроен, иначе напрямую к апстриму) — эндпоинт недоступен или указан неверный порт",
|
|
62786
|
-
"alert.hint.connect_timeout": "Рукопожатие TCP так и не завершилось — апстрим или прокси недоступен либо трафик уходит в никуда; возможна ограниченная повторная попытка отправки (BILI_REPLAY_RETRY_MAX)",
|
|
62787
|
-
"alert.hint.dns": "не удалось разрешить имя — ошибка DNS-сервера или опечатка в имени узла; возможна ограниченная повторная попытка отправки (BILI_REPLAY_RETRY_MAX)",
|
|
62788
|
-
"alert.hint.proxy_reset": "прокси разорвал соединение до получения ответа — проверьте ограничения прокси на простой и на размер передаваемых данных (BILI_PROXY_KEEPALIVE_MAX_MS может сократить окно переиспользования соединения); возможна ограниченная повторная попытка отправки (BILI_REPLAY_RETRY_MAX)",
|
|
62789
|
-
"alert.hint.tls": "Сбой TLS или сертификата на шаге CONNECT или рукопожатия с апстримом — проверьте настройки CA и MITM в прокси; если цепочку считают недоверенной или самоподписанной, переподписать апстрим может защитное ПО со сканированием HTTPS (Kaspersky, корпоративный DLP) или корпоративный прокси — выгрузите корневой CA в PEM и задайте NODE_EXTRA_CA_CERTS=/path/to/ca.pem (или network.caFile в настройках bili), либо исключите node.exe из сканирования",
|
|
62790
|
-
"alert.hint.unknown": "неклассифицированный сбой транспорта — сообщите с полной цепочкой ошибок",
|
|
62791
|
-
"alert.hint.upstream_reset": "апстрим или сеть сбросили соединение до получения ответа — проверьте апстрим и локальную сеть; возможна ограниченная повторная попытка отправки (BILI_REPLAY_RETRY_MAX)",
|
|
62792
|
-
"alert.item": "Не удаётся связаться с {host} ({kind} ×{count}, с {first}) — {hint}",
|
|
62793
|
-
"alert.note.skipped_proxy": "доступный прокси {proxy} ({source}) пропущен — upstreamProxyMode не задан (прямое подключение предусмотрено по умолчанию, #346/#357); задайте «upstreamProxyMode»: «auto» или BILI_UPSTREAM_PROXY_MODE=auto либо назначьте этому провайдеру канал «proxy», чтобы включить его",
|
|
62794
|
-
"alert.title": "Проблемы с подключением к апстриму",
|
|
62795
|
-
"ca.not_ready": "(ещё не создан; появится при первом MITM)",
|
|
62796
|
-
"card.claude_key": "Claude Code",
|
|
62797
|
-
"card.codex_key": "Codex",
|
|
62798
|
-
"card.codex_login": "Codex (вход через ChatGPT)",
|
|
62799
|
-
"card.opencode": "OpenCode",
|
|
62800
|
-
"card.other": "Другие клиенты",
|
|
62801
|
-
"card.pi": "Pi",
|
|
62802
|
-
"cfg.file": "Файл конфигурации",
|
|
62803
|
-
"cfg.file_desc": "Эта карточка правит файл конфигурации напрямую — действуют все поля верхнего уровня в этом JSON (маршруты, сжатие, сеть, проброс, promptPack, ccr, …). Сохранение применяется сразу",
|
|
62804
|
-
"cfg.invalid_json": "Некорректный JSON — не сохранено",
|
|
62805
|
-
"cfg.parse_error": "Файл конфигурации не содержит корректный JSON — вместо него показан пустой вид",
|
|
62806
|
-
"cfg.passthrough": "Проброс",
|
|
62807
|
-
"cfg.passthrough_desc": "Определяет, проходит ли трафик, не подпадающий ни под один маршрут, в целевую службу без изменений (без перехвата и без переписывания). Состояние хранится в файле конфигурации; если его принудительно задала переменная окружения ACP_PASSTHROUGH, интерфейс помечает источник, и вам нужно сбросить переменную и перезапустить, прежде чем менять её здесь",
|
|
62808
|
-
"cfg.pt_clear": "Отключить проброс",
|
|
62809
|
-
"cfg.pt_off": "Выключено",
|
|
62810
|
-
"cfg.pt_on": "Включено",
|
|
62811
|
-
"cfg.q_absorb": "Мгновенное поглощение результатов инструментов (absorb) — крупные результаты модель перерабатывает сразу при получении; оригиналы скрыты до следующего раунда сжатия (по умолчанию выключено)",
|
|
62812
|
-
"cfg.q_absorb_hint": "по умолчанию поглощаются только результаты с изображениями (#3422); задайте mediaOnly: false, чтобы поглощать и текст целиком. Подполя (minToolTokens, contextThresholdPct, excludeTools) указываются в редакторе JSON ниже",
|
|
62813
|
-
"cfg.q_debug": "Отладочный журнал (debug)",
|
|
62814
|
-
"cfg.q_imgrescale": "Уменьшение исходящих изображений (imageRescale) — крупные исходящие изображения сжимаются до отправки модели; оригиналы остаются в локальном хранилище сессии (по умолчанию включено)",
|
|
62815
|
-
"cfg.q_imgrescale_hint": "порог по длинной стороне через переменную окружения BILI_IMAGE_RESCALE_MAX_DIM (по умолчанию 1600)",
|
|
62816
|
-
"cfg.q_mitm": "Домены для расшифровки MITM, через запятую (mitm.domains)",
|
|
62817
|
-
"cfg.q_mitm_ph": "api.anthropic.com, open.bigmodel.cn",
|
|
62818
|
-
"cfg.q_more": "Другие настройки (полный справочник полей)",
|
|
62819
|
-
"cfg.q_more_url": "https://github.com/ranxianglei/billion-context/blob/master/CONFIGURATION.md",
|
|
62820
|
-
"cfg.q_never": "Исключить инструменты из сохранения недавних сообщений (compress.neverPreserveRecentTools)",
|
|
62821
|
-
"cfg.q_never_note": "По умолчанию исключаются decompress, search_context, read, bash — при массовом чтении уберите read из списка, чтобы только что прочитанные файлы не сжимались сразу",
|
|
62822
|
-
"cfg.q_never_ph": "через запятую, допускаются маски *; пусто — встроенный список ядра (включая read, bash)",
|
|
62823
|
-
"cfg.q_nudge": "Порог прироста для сжатия, токены (compress.nudgeGrowthTokens)",
|
|
62824
|
-
"cfg.q_nudge_high": "выше 100000: слишком длинный контекст между сжатиями может ослабить внимание модели",
|
|
62825
|
-
"cfg.q_nudge_low": "ниже 20000: слишком частое сжатие ухудшает качество сводки (по умолчанию ядра 50000)",
|
|
62826
|
-
"cfg.q_nudge_step": "шаг 5000",
|
|
62827
|
-
"cfg.q_pack": "Набор промптов для сжатия (compress.promptPack)",
|
|
62828
|
-
"cfg.q_pack_custom": "свой набор — загружается по имени из ~/.config/billion-context/packs/ (или из каталога проекта .billion-context/packs/)",
|
|
62829
|
-
"cfg.q_pack_default_desc": "по умолчанию (полный набор): подробные описания инструментов и полные правила сжатия — самые полные указания. Замерено ≈2 900+ токенов на запрос (токенизатор qwen)",
|
|
62830
|
-
"cfg.q_pack_lean_desc": "краткий: однострочные описания инструментов, сжатые правила — более краткие указания. Замерено ≈1 400 токенов на запрос (токенизатор qwen), примерно вдвое меньше, чем в наборе по умолчанию",
|
|
62831
|
-
"cfg.q_parse_err": "Расширенный JSON сейчас не разбирается — быстрые настройки приостановлены, пока он снова не станет корректным",
|
|
62832
|
-
"cfg.q_passthrough": "Режим проброса (passthrough) — только проксирование, без внедрения и без сжатия",
|
|
62833
|
-
"cfg.q_prm": "Сохранение недавних сообщений (compress.preserveRecentMessages)",
|
|
62834
|
-
"cfg.q_prm_ph": "пусто — по умолчанию ядра",
|
|
62835
|
-
"cfg.q_ptools": "Имена защищённых инструментов (protectedTools, никогда не сжимаются)",
|
|
62836
|
-
"cfg.q_ptools_ph": "через запятую, допускаются маски *, например skill, skill_*; по умолчанию пусто",
|
|
62837
|
-
"cfg.q_ptools_warn": "Не защищайте многословные инструменты вроде read / bash / edit — их вывод занимает большую часть токенов большинства сессий; защита означает, что он никогда не сжимается, и контекст продолжает расти",
|
|
62838
|
-
"cfg.q_tiers": "Пороги срабатывания сжатия по уровням, токены (compress.tierNudgeTokens; предзаполнены расчётными значениями по умолчанию, сохраняются только изменённые)",
|
|
62839
|
-
"cfg.q_tiers_auto": "авто",
|
|
62840
|
-
"cfg.q_tiers_desc": "Предзаполнены текущими расчётными значениями по умолчанию (T1 = шаг роста, T2/T3 = ×1.5); неизменённые значения не сохраняются. Обратите внимание: T2/T3 считают токены СВОДКИ нижнего уровня, а не сырые — при значении по умолчанию 75K и коэффициенте сжатия сводки примерно 10:1 один блок T2 несёт около 750K сырого контекста; для длинных проектов увеличьте T2.",
|
|
62841
|
-
"cfg.q_tiers_step": "шаг 5000",
|
|
62842
|
-
"cfg.q_tiers_tip_t1": "Порог сжатия сырых сообщений T1 (измеряется в сырых токенах) — по умолчанию равен порогу роста для сжатия выше",
|
|
62843
|
-
"cfg.q_tiers_tip_t2": "Порог повторной переработки T2 (измеряется в токенах сводки T1) — по умолчанию равен порогу роста × 1.5; увеличьте его, чтобы каждый блок T2 содержал больше истории проекта",
|
|
62844
|
-
"cfg.q_tiers_tip_t3": "Порог уплотнения T3 (измеряется в токенах сводки T2) — по умолчанию равен порогу роста × 1.5",
|
|
62845
|
-
"cfg.quick": "Быстрые настройки",
|
|
62846
|
-
"cfg.quick_desc": "Переключайте частые параметры, не трогая JSON — каждое изменение сразу попадает в редактор ниже (тот же файл, новых полей конфигурации нет); сложные структуры вроде таблицы провайдеров остаются в JSON",
|
|
62847
|
-
"cfg.relay_warn": "Черновик включает security.adminRelay (админ-релей): любой, кто доберётся до веб-точки входа dsh, получит через неё ПОЛНУЮ админ-панель bili — включая правку конфигурации и запись учётных данных. Убедитесь, что эта точка входа закрыта аутентификацией или обратным прокси; чтобы вернуть всё как было, удалите поле.",
|
|
62848
|
-
"cfg.resign": "Подписанные апстримы (переподпись)",
|
|
62849
|
-
"cfg.resign_awaiting": "ожидание поддержки переподписи в bili (по контракту «сжать или отказать» никакая конфигурация не может пропустить это)",
|
|
62850
|
-
"cfg.resign_builtin": "Встроенная схема {scheme} ({label}): bili переподписывает автоматически (обычное сжатие), когда срабатывает служба учётных данных dsh; иначе — локальный отказ",
|
|
62851
|
-
"cfg.resign_copy_hint": "Скопируйте этот фрагмент в файл конфигурации: эта ссылка передаётся без изменений байтов и БЕЗ сжатия (только для встроенной схемы)",
|
|
62852
|
-
"cfg.resign_desc": "Апстримы, подписывающие тело запроса: любое переписывание ломает их проверку подписи (401). По контракту «сжать или отказать» у подписанного запроса ровно два исхода — переподписан и сжат либо отклонён локально (403); режима передачи без подписи нет. Встроенная схема может включить проброс (явно согласившись на передачу без сжатия), если учётные данные не найдены; любая другая схема остаётся недоступной, пока bili не поставит переподписант (никакая конфигурация это не обойдёт). Записи появляются по подписям, наблюдаемым во время работы",
|
|
62853
|
-
"cfg.resign_disabled": "защита отключена (поведение до переподписи: тело переписывается, апстрим может вернуть 401)",
|
|
62854
|
-
"cfg.resign_loading": "Загрузка…",
|
|
62855
|
-
"cfg.resign_none": "Отказов по подписи нет — подписанных запросов, которые нельзя переподписать, не наблюдалось",
|
|
62856
|
-
"cfg.resign_passthrough": "напрямую (без сжатия)",
|
|
62857
|
-
"cfg.resign_refusing": "отказ по умолчанию",
|
|
62858
|
-
"cfg.resign_row": "{origin} · отказов {count}× (с {firstSeen})",
|
|
62859
|
-
"cfg.save": "Сохранить",
|
|
62860
|
-
"cfg.saved": "Сохранено в файл конфигурации ✓",
|
|
62861
|
-
"cfg.state": "Состояние подключения",
|
|
62862
|
-
"cfg.state_reached": "HTTP {status} · доступен (аутентификацию берёт на себя клиент)",
|
|
62863
|
-
"cfg.sub": "Правки сразу попадают в файл конфигурации и применяются на ходу — проверьте синтаксис JSON перед сохранением",
|
|
62864
|
-
"cfg.test_btn": "Проверить подключение",
|
|
62865
|
-
"cfg.test_hint": "Отправляет один минимальный запрос, чтобы проверить доступность; ничего не меняет",
|
|
62866
|
-
"cfg.title": "Конфигурация",
|
|
62867
|
-
"cfg.unsaved": "⚠ Есть несохранённые изменения — ничего не записывается, пока вы не нажмёте «Сохранить»",
|
|
62868
|
-
"cfg.untested": "Ещё не проверено",
|
|
62869
|
-
"cfg.up_auto": "авто (следовать системному прокси)",
|
|
62870
|
-
"cfg.up_direct": "напрямую (принудительно напрямую)",
|
|
62871
|
-
"cfg.up_manual": "вручную (явный прокси)",
|
|
62872
|
-
"cfg.upstream_net": "Сеть апстрима",
|
|
62873
|
-
"common.back": "← К списку сессий",
|
|
62874
|
-
"common.context": "контекст",
|
|
62875
|
-
"common.copied_hint": "Скопировано ✓",
|
|
62876
|
-
"common.copy": "Копировать",
|
|
62877
|
-
"common.ctx_est": "оценка",
|
|
62878
|
-
"common.ctx_est_calib": "оценка·с калибровкой",
|
|
62879
|
-
"common.ctx_est_raw": "оценка·без калибровки",
|
|
62880
|
-
"common.ctx_meas": "замерено",
|
|
62881
|
-
"common.ctx_upper": "оценка·верхняя граница",
|
|
62882
|
-
"common.empty": "Данных пока нет",
|
|
62883
|
-
"common.label": "метка",
|
|
62884
|
-
"common.live": "активно",
|
|
62885
|
-
"common.loading": "Загрузка…",
|
|
62886
|
-
"common.none": "—",
|
|
62887
|
-
"common.protocol": "протокол",
|
|
62888
|
-
"common.requests": "запросы",
|
|
62889
|
-
"common.saved": "сохранено",
|
|
62890
|
-
"common.sessions": "сессии",
|
|
62891
|
-
"common.title": "заголовок",
|
|
62892
|
-
"common.upstream": "апстрим",
|
|
62893
|
-
"common.window": "окно",
|
|
62894
|
-
"con.launcher_help_pre": "Полный список:",
|
|
62895
|
-
"con.launcher_mitm": "Добавьте домены в белый список для расшифровки по сертификату MITM (например, собственный релей): bili pi --mitm-domain api.foo.com",
|
|
62896
|
-
"con.method_a": "Способ 3 · Универсальный прокси (маршрутизация по префиксу URL)",
|
|
62897
|
-
"con.method_a_hint": "Только для клиентов, у которых можно изменить baseURL (добавьте указанный ниже адрес к их базовому URL); для большинства клиентов лучше средство запуска выше",
|
|
62898
|
-
"con.method_b": "Альтернатива: маршрутизация через сертификат MITM",
|
|
62899
|
-
"con.method_b_hint": "Клиенты с жёстко заданными эндпоинтами используют перехват HTTPS; сначала доверьте сертификату CA",
|
|
62900
|
-
"con.method_launcher": "Способ 2 · Средство запуска bili (без установки — заменяет привычную команду запуска)",
|
|
62901
|
-
"con.method_launcher_hint": "Когда billion-context установлен, запускайте клиент одной из команд ниже вместо обычного способа: bili proxy + состояние сжатия подставляется автоматически, правки конфигурации клиента не нужны",
|
|
62902
|
-
"con.method_plugin": "Способ 1 · Установить плагин (рекомендуется · нативный режим)",
|
|
62903
|
-
"con.method_plugin_hint": "Рекомендуется — после установки просто запускайте агента как обычно; он автоматически пойдёт через billion-context и получит самый полный набор возможностей. Частые команды управления:",
|
|
62904
|
-
"con.note_aider": "Aider (парное программирование на Python): сертификат MITM через HTTPS_PROXY + SSL_CERT_FILE/REQUESTS_CA_BUNDLE; адрес берётся из унаследованного окружения, из --openai-api-base или из .aider.conf.yml; локальные адреса напрямую через NO_PROXY (#1048)",
|
|
62905
|
-
"con.note_amp": "Amp CLI (Sourcegraph, закрытый бинарник на Go) — сертификат MITM; ampcode.com в белом списке (#1049)",
|
|
62906
|
-
"con.note_antigravity": "Antigravity CLI (agy, Google, преемник Gemini CLI): CLOUD_CODE_URL /bili/ переписан в daily-cloudcode-pa.googleapis.com — реальный апстрим по умолчанию (чистый cloudcode-pa отвечает 400 на /v1internal:*, #3129; недокументированный переопределитель окружения языкового сервера, проверен в бинарнике v2.19.1; обмен распознаётся как нативный Google по пути) (#2115)",
|
|
62907
|
-
"con.note_claude": "Запустите claude",
|
|
62908
|
-
"con.note_codebuddy": "Tencent CodeBuddy Code CLI: переписывание CODEBUDDY_BASE_URL /bili/ (протокол OpenAI chat-completions); бюджет согласован через CODEBUDDY_AUTO_COMPACT_WINDOW; настоящий ~/.codebuddy не затрагивается",
|
|
62909
|
-
"con.note_codex": "Запустите codex",
|
|
62910
|
-
"con.note_copilot": "Copilot CLI (GitHub, закрытый бинарник на Go) — сертификат MITM; api.githubcopilot.com и поддомены уровней в белом списке (#1049)",
|
|
62911
|
-
"con.note_dsh": "deepseek-harness: полный нативный плагин внедряется через --patch (#941) — compress/decompress/acp_status регистрируются как настоящие инструменты dsh; нелокальный апстрим через переменные окружения прокси, локальный сохраняет подмены DSH_HOME; встроенный маршрут deepseek через DEEPSEEK_BASE_URL; нативное автосжатие отключено",
|
|
62912
|
-
"con.note_gemini": "Gemini CLI (Google): GOOGLE_GEMINI_BASE_URL /bili/ переписывается в generativelanguage.googleapis.com (нативный протокол Google); настоящий ~/.gemini не затрагивается",
|
|
62913
|
-
"con.note_goose": "Goose (Block, Rust/reqwest): сборки rustls не доверяют файлам CA — переменных окружения прокси нет вовсе; встроенные ветки openai/anthropic перенаправляются через OPENAI_HOST/ANTHROPIC_HOST; собственные декларативные провайдеры получают заново созданный наложенный каталог GOOSE_PATH_ROOT, который переписывает base_url в /bili/; сторонние провайдеры с фиксированным адресом вызывают предупреждение (#1049)",
|
|
62914
|
-
"con.note_hermes": "без файлов (#535): HTTPS_PROXY + SSL_CERT_FILE с объединённым пакетом CA — https через CONNECT MITM, http с пересылкой в абсолютной форме; настоящий ~/.hermes не затрагивается",
|
|
62915
|
-
"con.note_iflow": "iFlow CLI: IFLOW_BASE_URL /bili/ переписывается в apis.iflow.cn/v1 (протокол OpenAI chat-completions); настоящий ~/.iflow не затрагивается",
|
|
62916
|
-
"con.note_jcode": "Терминальный агент для кода на Rust — запуск с сертификатом MITM через переменные окружения; api.z.ai по умолчанию в белом списке; локальный провайдер напрямую через NO_PROXY",
|
|
62917
|
-
"con.note_kimi": "Kimi Code CLI (Moonshot): кроме безусловного обхода локальных адресов весь трафик идёт по стандартным переменным окружения прокси — для нелокальных адресов https идёт через сертификат MITM, http пересылается в абсолютной форме; узлы берутся из ~/.kimi-code/config.toml; локальные адреса собраны с ручными подсказками о префиксе /bili/ (#757)",
|
|
62918
|
-
"con.note_mcode": "MiniMax Code CLI: кроме безусловного обхода локальных адресов — стандартные переменные окружения прокси; для нелокальных адресов https идёт через сертификат MITM, http пересылается в абсолютной форме; узлы берутся из ~/.minimax*/config.yaml; сессии связываются заголовком X-Mavis-Session-Id (#1050)",
|
|
62919
|
-
"con.note_omp": "Тот же подход, что и у pi, без файлов (#535): переменные окружения + расширение registerProvider; настоящий ~/.omp не затрагивается",
|
|
62920
|
-
"con.note_opencode": "OpenCode (1.x и 2.x): подробное руководство в разделе OpenCode ниже",
|
|
62921
|
-
"con.note_pi": "Запустите pi через прокси — без файлов (#535): переменные окружения + расширение registerProvider; настоящий ~/.pi не затрагивается",
|
|
62922
|
-
"con.note_qoder": "адрес модели жёстко задан по https (переписать на /bili/ нельзя) — сертификат MITM (HTTPS_PROXY + NODE_EXTRA_CA_CERTS); узел модели по умолчанию заранее в белом списке (#653)",
|
|
62923
|
-
"con.note_qwen": "Qwen Code (форк gemini-cli с несколькими протоколами, без перехвата базового URL): сертификат MITM через HTTPS_PROXY + NODE_EXTRA_CA_CERTS; узлы моделей DashScope/Qwen по умолчанию в белом списке; собственные релеи добавляются через --mitm-domain",
|
|
62924
|
-
"con.note_trae": "Trae CLI (ByteDance, закрытый бинарник на Go, без переопределения базового URL) — сертификат MITM; узел модели берётся из TRAE_CLI_API_HOST или из корпоративного шлюза по умолчанию (#655)",
|
|
62925
|
-
"con.origin": "Адрес прокси",
|
|
62926
|
-
"con.plugin_note": "Режим плагина сейчас охватывает эти 9 агентов: pi · omp · claude · codex · opencode · dsh · kimi · hermes · zcode — остальные клиенты используют способ 2 или способ 3. Для opencode добавьте --with-mcp при установке, чтобы зарегистрировать и его инструменты MCP",
|
|
62927
|
-
"con.sub": "Направьте ИИ-клиентов на этот прокси",
|
|
62928
|
-
"con.title": "Подключение клиентов",
|
|
62929
|
-
"conflict.age_active": "Последние 7 дней: {n}",
|
|
62930
|
-
"conflict.age_historical": "Старше: {n}",
|
|
62931
|
-
"conflict.clear_btn": "Очистить записи",
|
|
62932
|
-
"conflict.cleared": "Записи о конфликтах очищены",
|
|
62933
|
-
"conflict.dismiss": "Больше не показывать",
|
|
62934
|
-
"conflict.dismissed": "Скрыто — баннер появится снова, если произойдёт новое событие конфликта",
|
|
62935
|
-
"conflict.docs": "полная матрица: CONFIGURATION.md → «Определение других плагинов сжатия (#1206)»",
|
|
62936
|
-
"conflict.found": ": следы ",
|
|
62937
|
-
"conflict.hint_label": "Что делать (для каждого клиента):",
|
|
62938
|
-
"conflict.hint_more": "Ещё клиентов: {n} — смотрите страницу «Сессии» ниже",
|
|
62939
|
-
"conflict.hint.claude": "claude: запускайте через bili claude — он сам выравнивает CLAUDE_CODE_AUTO_COMPACT_WINDOW; либо задайте CLAUDE_CODE_AUTO_COMPACT_WINDOW равным действующему окну bili",
|
|
62940
|
-
"conflict.hint.codex": "codex: bili по умолчанию перехватывает штатное сжатие (BILI_CODEX_COMPACT=intercept) — если вы задали pass, уберите переопределение, чтобы остановить перехват; иначе сообщите версию bili",
|
|
62941
|
-
"conflict.hint.generic": "отключите собственное автосжатие клиента (или направьте эту сессию в обход bili), затем начните новую сессию — реестр ведётся по сессиям, поэтому старые записи исчезают вместе со старой сессией",
|
|
62942
|
-
"conflict.hint.omp": "omp: расширение bili отменяет штатное автосжатие клиента, пока ведёт беседу — если это видно, вероятно, не хватает подтверждения переноса или версия устарела; сообщите версию клиента и bili",
|
|
62943
|
-
"conflict.hint.opencode": "opencode: отключите автосжатие в конфигурации opencode (в секции compaction задайте auto: false) — либо используйте bili opencode / установку плагина opencode через bili, оба варианта настроят всё сами",
|
|
62944
|
-
"conflict.hint.pi": "pi: расширение bili отменяет штатное автосжатие клиента, пока ведёт беседу — если это видно, вероятно, не хватает подтверждения переноса или версия устарела; сообщите версию клиента и bili",
|
|
62945
|
-
"conflict.on": "Обнаружен конфликт сжатия",
|
|
62946
|
-
"conflict.on_suspected": "Обнаружен возможный плагин сжатия",
|
|
62947
|
-
"conflict.on_unconfirmed": "Обнаружены неподтверждённые признаки, связанные со сжатием",
|
|
62948
|
-
"conflict.risk_active": " были найдены. Два сжимателя в одной беседе сжимают дважды и портят ссылки на сообщения, из-за чего контекст может перемешаться — оставьте ровно один сжиматель.",
|
|
62949
|
-
"conflict.risk_historical": " были найдены (за последние 7 дней событий не было — только штатные записи) — как только вы убедитесь, что второй сжиматель удалён или заблокирован bili, очистите их кнопкой.",
|
|
62950
|
-
"conflict.risk_sibling": " были найдены. Это СОБСТВЕННЫЕ расширения bili, а не сторонние сжиматели: пока сессию ведёт bili, они автоматически бездействуют (метка BILLION_CONTEXT_NATIVE в штатном режиме, иначе — самопроверка baseUrl по /bili/), поэтому второй сжиматель не активен — проверьте, что версии свежие, и очистите эту запись; ничего удалять не нужно.",
|
|
62951
|
-
"conflict.risk_suspected": " — это лишь сигнал по имени [подозрение], а не наблюдаемое свидетельство двойного сжатия. Прежде чем действовать, убедитесь, что он действительно переписывает контекст модели; плагин, который только сворачивает вывод инструментов (например, pi-compact-transcript), дважды не сжимает и удаления не требует.",
|
|
62952
|
-
"conflict.risk_unconfirmed": " — все перечисленные выше сигналы НЕПОДТВЕРЖДЁННЫ: они не доказывают, что существует второй сжиматель (возможные причины: правки на стороне клиента, нераспознанная форма сжатия или другой плагин). Прежде чем действовать, проверьте; просмотрщик контекста только для чтения или плагин, который сворачивает вывод инструментов, сжимателем не является и удаления не требует.",
|
|
62953
|
-
"conflict.what_join": " и ",
|
|
62954
|
-
"conflict.what_native": "штатное автосжатие клиента, переписывающее историю беседы",
|
|
62955
|
-
"conflict.what_plugin": "сторонний плагин сжатия, работающий рядом с bili",
|
|
62956
|
-
"conflict.what_signal": "переписывание истории беседы (изменение замечено, причина пока не установлена)",
|
|
62957
|
-
"conflict.what_suspected": "плагин, имя которого совпадает с ключевыми словами сжатия (ещё не подтверждено, что он действительно сжимает контекст)",
|
|
62958
|
-
"conflict.where": "Подробности: страница «Сессии» ниже или поле conflicts в ответе GET /__bili/stats.",
|
|
62959
|
-
"copy.ca": "Скопировать путь к CA",
|
|
62960
|
-
"data.error": "Не удалось загрузить данные: {msg} · идёт автоматический повтор с задержкой",
|
|
62961
|
-
"data.generic": "сетевая ошибка или истекло время ожидания запроса",
|
|
62962
|
-
"data.timeout": "истекло время ожидания запроса (20 с)",
|
|
62963
|
-
"det.active_pack": "Набор промптов",
|
|
62964
|
-
"det.attr_abort": "⏻ Связано с прерыванием",
|
|
62965
|
-
"det.attr_abort_tip": "Пропущенные выборки закрылись в течение 30 с после прерывания клиента в середине потока — повторы переписывают отправляемый хвост; это корреляция, а не причина (метка наложения, а не отдельная группа)",
|
|
62966
|
-
"det.attr_client": "✎ Переписывание истории клиентом",
|
|
62967
|
-
"det.attr_client_tip": "Собственная переотправленная история клиента разошлась в середине списка (вставка или переписывание — другой плагин на хосте, перенос вставок, повторный рендер): пара отпечатков входящих сообщений не совпадает на этом индексе, и точная пересборка bili перенесла изменение в запрос. Пересчёт на стороне клиента, а не шов пересборки bili (#3023)",
|
|
62968
|
-
"det.attr_provider": "▲ Пропуск на стороне провайдера (аномалия)",
|
|
62969
|
-
"det.attr_provider_tip": "Запрос пришёл вскоре после предыдущего, чей весь список сообщений вернулся байт в байт (целиком или своим префиксом с добавленными только хвостовыми сообщениями; выше предела криминалистики в 512 КиБ, что доказывают устойчивая записанная голова и точный рост числа сообщений), но апстрим не отдал свой кэш — аномалия: вытеснение из кэша или ротация узлов ретранслятора. Долгие промежутки учитываются как истечение TTL у апстрима",
|
|
62970
|
-
"det.attr_rest": "остаток {x}",
|
|
62971
|
-
"det.attr_rest_tip": "небольшие остатки ниже порога классификации (<8K или <30% входа на выборку), по отдельности не классифицируются",
|
|
62972
|
-
"det.attr_restart": "⟳ потеря после перезапуска",
|
|
62973
|
-
"det.attr_restart_tip": "После перезапуска bili или восстановления сессии окно реестра нарушается: первый запрос после перезапуска не может сопоставиться с выборками до него, поэтому его пропуск засчитывается как первый расчёт (начальное содержимое)",
|
|
62974
|
-
"det.attr_rewind": "↩ История отмотана назад",
|
|
62975
|
-
"det.attr_rewind_tip": "Откат или обрезка на стороне клиента уменьшили число сообщений — разрешённый однократный пересчёт сохранённого префикса, а не дефект",
|
|
62976
|
-
"det.attr_seam": "⚠ Шов кэша",
|
|
62977
|
-
"det.attr_seam_tip": "Исходящие тела разошлись в середине истории без указания на сворачивание, смену модели или перезапуск — подозрение на шов пересборки. Значение — токены, пересчитанные на подозрительных выборках. Если сворачивание было за несколько минут до этого, обычно это пересчёт клиентского эха после сворачивания (сворачивание отвечает за него с #2929)",
|
|
62978
|
-
"det.attr_ttl": "⏱ Истечение TTL у апстрима (нормально)",
|
|
62979
|
-
"det.attr_ttl_tip": "Пропуски с неизменившимися байтами или с дописанным хвостом закрылись больше чем через 10 минут после предыдущей выборки — префиксный кэш апстрима просто устарел; это ожидаемая стоимость, ничего делать не нужно",
|
|
62980
|
-
"det.auto_mode_forge": "вердикты авто-режима",
|
|
62981
|
-
"det.auto_mode_forge_local": "вердикты авто-режима, на которые отвечает сам bili (без трафика к апстриму)",
|
|
62982
|
-
"det.auto_mode_forge_short": "forge",
|
|
62983
|
-
"det.auto_mode_forge_tip": "Проверки безопасности авто-режима в этой сессии отвечает сам bili — без вызова модели апстрима и без оплаты (#2740)",
|
|
62984
|
-
"det.block_active": "активно",
|
|
62985
|
-
"det.block_external": "внешний",
|
|
62986
|
-
"det.block_inactive": "неактивно",
|
|
62987
|
-
"det.blocks_copy_md": "скопировать в Markdown",
|
|
62988
|
-
"det.blocks_count": "Всего: {total} · активно: {active}",
|
|
62989
|
-
"det.blocks_download": "скачать блоки (.md)",
|
|
62990
|
-
"det.blocks_empty": "Блоков сжатия пока нет",
|
|
62991
|
-
"det.blocks_title": "Блоки сжатия",
|
|
62992
|
-
"det.cache_econ": "Экономика кэша",
|
|
62993
|
-
"det.calib_chip": "k̂={k} · выборок: {n} · разброс {spread}× · {origin}",
|
|
62994
|
-
"det.calib_tip": "Коэффициент калибровки k̂: среднее по последним согласованным выборкам ({n}, разброс {spread}×) на этом маршруте и этой модели; он занижает только оценки и переобучается после смены маршрута или модели. Источник {origin}{model}.",
|
|
62995
|
-
"det.cause_cold": "холодный старт (кэша раньше не было)",
|
|
62996
|
-
"det.cause_comp": "пересборка после сворачивания",
|
|
62997
|
-
"det.cause_ttl": "необъяснённый пересчёт · остаток",
|
|
62998
|
-
"det.cause_unattrib": "необъяснённый пересчёт",
|
|
62999
|
-
"det.ccr": "CCR: поиск по содержимому",
|
|
63000
|
-
"det.ccr_detail": "вызовов: {calls} · попаданий: {hits} · промахов: {misses}",
|
|
63001
|
-
"det.ce_balanced": "Реестр сходится ✓",
|
|
63002
|
-
"det.ce_breakdown": "из них:",
|
|
63003
|
-
"det.ce_comp": "Пересборка после сворачивания",
|
|
63004
|
-
"det.ce_comp_hint": "Подсказка: уменьшение compress.preserveRecentMessages (число защищённых недавних сообщений) снижает это значение — минимум 1",
|
|
63005
|
-
"det.ce_new": "Новое содержимое",
|
|
63006
|
-
"det.ce_residual": "Остаток",
|
|
63007
|
-
"det.ce_ttl": "Необъяснённый пересчёт",
|
|
63008
|
-
"det.ce_unbalanced": "Реестр не сходится ✗",
|
|
63009
|
-
"det.client_hint": "клиент",
|
|
63010
|
-
"det.conflicts_clear": "Очистить записи этой сессии",
|
|
63011
|
-
"det.conflicts_cleared": "Очищено",
|
|
63012
|
-
"det.conflicts_hint": "Признаки того, что к этой сессии прикасался другой сжиматель (диагностика, а не история)",
|
|
63013
|
-
"det.conflicts_more": "Более ранних событий: {n}…",
|
|
63014
|
-
"det.conflicts_title": "Конфликты сжатия",
|
|
63015
|
-
"det.covlost_sub": "Сворачиваний без покрытия: {n} ({x} заморожено): покрытые ими сообщения исчезли из переотправляемой истории — накопление остановилось",
|
|
63016
|
-
"det.ctx_age": "снимок {v} назад",
|
|
63017
|
-
"det.ctx_age_tip": "Когда это число контекста было измерено или оценено; оно перестаёт обновляться при восстановлении или простое — старый снимок не отражает текущий отправленный вид",
|
|
63018
|
-
"det.fold_h": "попадания после сворачивания, %",
|
|
63019
|
-
"det.fold_s": "сжато S",
|
|
63020
|
-
"det.fold_short": "сворачивание",
|
|
63021
|
-
"det.fold_sigma": "сводка σ",
|
|
63022
|
-
"det.fold_t": "накопленный пересчёт T",
|
|
63023
|
-
"det.fold_time": "когда",
|
|
63024
|
-
"det.folds": "Разбивка по сворачиваниям",
|
|
63025
|
-
"det.folds_empty": "Событий сворачивания пока нет",
|
|
63026
|
-
"det.handoff": "Документ передачи",
|
|
63027
|
-
"det.handoff_copy_md": "Скопировать в Markdown",
|
|
63028
|
-
"det.handoff_download": "Скачать .md",
|
|
63029
|
-
"det.handoff_hint": "То же содержимое, что и в экспорте bili — вставьте в новую сессию, чтобы продолжить",
|
|
63030
|
-
"det.handoff_truncated": "⚠️ Содержимое усечено для показа",
|
|
63031
|
-
"det.hit_pct": "доля попаданий в кэш",
|
|
63032
|
-
"det.hitrate": "Доля попаданий в кэш",
|
|
63033
|
-
"det.hitrate_empty": "Выборок кэша для этой сессии пока нет",
|
|
63034
|
-
"det.hitrate_sub": "Попадания в % по каждому запросу; провалы окрашены по реестру (те же группы, что на графике динамики)",
|
|
63035
|
-
"det.identity": "Идентификация",
|
|
63036
|
-
"det.keepalive": "поддержание кэша",
|
|
63037
|
-
"det.keepalive_last_hit": "последнее попадание",
|
|
63038
|
-
"det.keepalive_pings": "пинги",
|
|
63039
|
-
"det.keepalive_short": "KA",
|
|
63040
|
-
"det.keepalive_tip": "включено поддержание кэша промптов при простое (уровень · интервал)",
|
|
63041
|
-
"det.key_events": "Смены ключа ({n})",
|
|
63042
|
-
"det.key_events_tip": "Смена отпечатка учётных данных означает, что ретранслятор перешёл на другой аккаунт; отпечатки — это 12-символьные префиксы sha256, а не сами ключи",
|
|
63043
|
-
"det.key_fp": "отпечаток ключа",
|
|
63044
|
-
"det.last_input": "Последний ввод в одном раунде",
|
|
63045
|
-
"det.ledger_gap": "Пропущено запросов в реестре: {n}",
|
|
63046
|
-
"det.ledger_gap_tip": "Реестр попаданий и промахов учитывает только запросы с момента последней пересборки; запросы вне окна не считаются — это часто бывает при нескольких экземплярах с общей папкой состояния. Сворачивания внутри разрыва тоже не попадают в экономику сворачиваний",
|
|
63047
|
-
"det.leg_client": "✎ переписывание клиентом",
|
|
63048
|
-
"det.leg_pside": "▲ пропуск на стороне провайдера",
|
|
63049
|
-
"det.leg_pttl": "⏱ истечение TTL у апстрима",
|
|
63050
|
-
"det.leg_rest": "остаток",
|
|
63051
|
-
"det.leg_rewind": "↩ откат",
|
|
63052
|
-
"det.legend_base": "базовая линия системного промпта (измерена, не сжимается)",
|
|
63053
|
-
"det.legend_base_est": "оценка базовой линии (системный промпт и инструменты, не сжимается)",
|
|
63054
|
-
"det.legend_cached": "из них в кэше",
|
|
63055
|
-
"det.legend_fold": "сворачивание при сжатии",
|
|
63056
|
-
"det.legend_hitline": "попадания, %",
|
|
63057
|
-
"det.legend_input": "ввод",
|
|
63058
|
-
"det.legend_seam": "шов кэша",
|
|
63059
|
-
"det.legend_window": "предел окна контекста",
|
|
63060
|
-
"det.log": "Журнал",
|
|
63061
|
-
"det.log_view": "показать журнал этой сессии ▸",
|
|
63062
|
-
"det.miss_split_line": "разбивка пропущенных токенов по доле попаданий: новое содержимое {n} (−{pn}%) · пересборка после сворачивания {c} (−{pc}%) · необъяснённый пересчёт {x} (−{px}%, истечение TTL у апстрима, вытеснение из кэша, неизвестно)",
|
|
63063
|
-
"det.miss_sub": "необъяснённый пересчёт −{x}% · пересборка после сворачивания −{c}% · новое −{n}%",
|
|
63064
|
-
"det.not_found": "Сессия не найдена",
|
|
63065
|
-
"det.not_found_hint": "Возможно, её удалили или она находится вне этой папки с данными",
|
|
63066
|
-
"det.obudget_degraded": "⚠️ У модели {model} НЕТ известного предела вывода: её бюджет вывода поднят до значения {value}; берётся большее из собственной оценки клиента и абсолютного минимума, подтверждающего предела нет, поэтому длинные ответы могут обрываться на пределе вывода. Задайте предел вывода для этого провайдера и модели в конфигурации bili или укажите maxTokens для модели в профиле хоста (#2904/#3071)",
|
|
63067
|
-
"det.omitted": "Самые ранние выборки ({n}) были обрезаны при записи: каждая сессия хранит только 4096 последних выборок кэша (восстановить их нельзя), поэтому график начинается с самой старой сохранённой выборки",
|
|
63068
|
-
"det.proj_events": "Смены проекции и режима ({n})",
|
|
63069
|
-
"det.proj_events_tip": "Отпечаток перенаправляемой проекции изменился, хотя каноническое входящее содержимое системы и разработчика осталось прежним, — значит, сам прокси переключил режим сжатия или проекцию (например, при самовосстановлении перешёл на прокси); отпечатки — это 16-символьные префиксы sha256, а не исходный текст (#2867)",
|
|
63070
|
-
"det.proj_fp": "отпечаток проекции",
|
|
63071
|
-
"det.prompt_events": "Переписывания системного промпта ({n})",
|
|
63072
|
-
"det.prompt_events_tip": "Отпечаток перенаправляемой проекции изменился, и каноническое входящее содержимое тоже изменилось, — значит, хост переписал свой системный промпт между запросами; отпечатки — это 16-символьные префиксы sha256, а не исходный текст (#2350/#2867)",
|
|
63073
|
-
"det.prompt_fp": "отпечаток промпта",
|
|
63074
|
-
"det.report_dl": "скачать отчёт по кэшу (.md)",
|
|
63075
|
-
"det.report_masked": "[скрыто]",
|
|
63076
|
-
"det.report_md": "полный отчёт · Markdown",
|
|
63077
|
-
"det.report_note": "заголовок и другие персональные данные по умолчанию скрыты",
|
|
63078
|
-
"det.report_png": "полный отчёт · изображение (PNG)",
|
|
63079
|
-
"det.rpt_cached": "из кэша",
|
|
63080
|
-
"det.rpt_hit": "попаданий %",
|
|
63081
|
-
"det.rpt_input": "ввод",
|
|
63082
|
-
"det.rpt_missed": "промахи",
|
|
63083
|
-
"det.seam_col_div": "первое расхождение",
|
|
63084
|
-
"det.seam_col_hit": "попаданий %",
|
|
63085
|
-
"det.seam_col_input": "ввод",
|
|
63086
|
-
"det.seam_events": "⚠ Событий шва кэша: {n}",
|
|
63087
|
-
"det.seam_events_tip": "Первое расхождение между соседними исходящими телами; если оно воспроизводится, приложите bili.log за это время (семейство #1548)",
|
|
63088
|
-
"det.seam_mark_tip": "⚠ ШОВ КЭША #{seq} · {at} · попаданий {hit}% · первое расхождение ≥{lcp} байт @ сообщение[{msg}] ({prev}→{cur} сообщ.)",
|
|
63089
|
-
"det.seam_msg": "сообщение[{i}] ({prev}→{cur} сообщ.)",
|
|
63090
|
-
"det.self_heal": "Самовосстановление",
|
|
63091
|
-
"det.self_heal_degrade_to_proxy": "плагин исчез → деградация до режима прокси (инструменты перевнедрены)",
|
|
63092
|
-
"det.self_heal_short": "починка",
|
|
63093
|
-
"det.self_heal_suppress_nudge": "цикл напоминаний простаивает → подавлен (отменяется при возобновлении сжатия)",
|
|
63094
|
-
"det.self_heal_tip": "Самовосстановление застрявшей сессии взяло управление на себя — смотрите подробности сессии (#2155)",
|
|
63095
|
-
"det.stab_append": "добавление в конец",
|
|
63096
|
-
"det.stab_gap": "медиана пауз между запросами: низкое попадание (<80%) — {a} с, высокое попадание — {b} с",
|
|
63097
|
-
"det.stab_head": "начало <1КиБ (изменение параметров)",
|
|
63098
|
-
"det.stab_identical": "побайтово идентичны",
|
|
63099
|
-
"det.stab_mid": "перезапись середины истории",
|
|
63100
|
-
"det.stab_pairs": "Соседних пар: {n}",
|
|
63101
|
-
"det.stab_size": "попаданий % по размеру ввода (медиана)",
|
|
63102
|
-
"det.stab_tail": "хвост (параметры / временные заметки)",
|
|
63103
|
-
"det.stab_tip": "Побайтовое сравнение SHA-256 каждого исходящего тела с предыдущим завершённым запросом: идентично = побайтовое совпадение (например, повтор передачи); расходящиеся пары классифицируются по первому расхождению — начало <1КиБ = изменение параметров на стороне хоста (модель/инструменты/сэмплирование), добавление в конец = чистый рост хвоста, середина истории = настоящая перезапись префикса, хвост = завершающие параметры верхнего уровня или временные заметки в конце массива сообщений и за ним (байты истории не тронуты, кэш не затронут), смещение неизвестно = тела выше предела хранения (неравенство всё равно доказано по хешу)",
|
|
63104
|
-
"det.stab_title": "Стабильность тела (побайтовое доказательство по вызову)",
|
|
63105
|
-
"det.stab_unknown": "смещение неизвестно (превышен предел)",
|
|
63106
|
-
"det.storage_mode": "Режим хранения",
|
|
63107
|
-
"det.storage_mode_full": "полный (сначала единое хранилище, параллельная запись)",
|
|
63108
|
-
"det.storage_mode_legacy": "устаревший (только JSON)",
|
|
63109
|
-
"det.storage_mode_shadow": "теневой (пробная параллельная запись)",
|
|
63110
|
-
"det.store": "Хранилище содержимого",
|
|
63111
|
-
"det.tab_blocks": "Структура",
|
|
63112
|
-
"det.tab_handoff": "Передача",
|
|
63113
|
-
"det.tab_overview": "Обзор",
|
|
63114
|
-
"det.thinking": "Размышление",
|
|
63115
|
-
"det.traj_reset": "Сбросить вид",
|
|
63116
|
-
"det.traj_zoom_hint": "Проведите по графику, чтобы приблизить диапазон выборки; дважды щёлкните или нажмите Esc для сброса",
|
|
63117
|
-
"det.traj_zoomed": "Вид #{a}-#{b} ({times})",
|
|
63118
|
-
"det.trajectory": "Траектория контекста",
|
|
63119
|
-
"det.trajectory_empty": "Для этой сессии пока нет выборок использования",
|
|
63120
|
-
"det.trajectory_sub": "Входные токены и попадания в кэш по каждому запросу; красные отметки — свёртки сжатия",
|
|
63121
|
-
"det.tree_active": "Активных: {n}",
|
|
63122
|
-
"det.tree_direct": "Прямых: {n}",
|
|
63123
|
-
"det.tree_graph_hint": "Общая форма: каждый прямоугольник — один блок, сверху вниз видно, какой блок свёрнул какой. Щёлкните по прямоугольнику, чтобы перейти к этой строке в списке.",
|
|
63124
|
-
"det.tree_graph_legend": "сплошная рамка = активный блок, пунктирная = архивный блок",
|
|
63125
|
-
"det.tree_hint": "Вложенность по родителю свёртки: T1 сворачивает исходные сообщения, T2 — блоки T1 и так далее. Исходник по требованию загружает закрытые байты.",
|
|
63126
|
-
"det.tree_msg_gone": "Этого сообщения больше нет в сессии (удалено штатным сжатием)",
|
|
63127
|
-
"det.tree_msgs": "Сообщений: {n}",
|
|
63128
|
-
"det.tree_msgs_unavailable": "Прямых сообщений этого блока больше нет в сессии (удалены штатным сжатием) — их m-ссылки нельзя перечислить",
|
|
63129
|
-
"det.tree_orig_full": "Исходник (полный)",
|
|
63130
|
-
"det.tree_orig_meta": "Сообщений: {n} · {b}",
|
|
63131
|
-
"det.tree_orig_missing": "Для этого блока нет снимка содержимого (не сохранён при свёртке или уже удалён)",
|
|
63132
|
-
"det.tree_orig_one": "Исходник (этот уровень)",
|
|
63133
|
-
"det.tree_orig_truncated": "обрезано на {b}",
|
|
63134
|
-
"det.tree_split": "закрыто {x} → сводка {y} ({p})",
|
|
63135
|
-
"det.tree_total": "Блоков: {n}",
|
|
63136
|
-
"det.tree_view_graph": "Карта дерева",
|
|
63137
|
-
"det.tree_view_list": "Список",
|
|
63138
|
-
"det.upper_bound": "ограничение {v} (верхняя граница по числу символов — только защита, не фактическое использование)",
|
|
63139
|
-
"det.usage": "Использование",
|
|
63140
|
-
"det.version": "Версия прокси",
|
|
63141
|
-
"dt.auth": "Авторизация",
|
|
63142
|
-
"dt.ca_cert": "Сертификат CA",
|
|
63143
|
-
"dt.config_file": "Файл конфигурации",
|
|
63144
|
-
"dt.env": "Окружение",
|
|
63145
|
-
"dt.example": "Пример",
|
|
63146
|
-
"dt.setting": "Настройка",
|
|
63147
|
-
"fork.label": "★ Форкнуть меня на GitHub",
|
|
63148
|
-
"hostplug.desc": "Состав сегментов и лента времени оцениваются по локальному счётчику до сжатия (по требованиям архитектуры dsh постоянный журнал остаётся без потерь), поэтому доли сегментов могут не совпадать с тем, что отправляется на самом деле; итоговый размер контекста отражает реальный отправленный объём.",
|
|
63149
|
-
"hostplug.dismiss_btn": "Скрыть",
|
|
63150
|
-
"hostplug.dismissed": "Уведомление скрыто",
|
|
63151
|
-
"hostplug.hint": "Достоверный действующий контекст: /acp или GET /__bili/plugin/status → contextTokens.",
|
|
63152
|
-
"hostplug.on": "Обнаружен плагин на стороне хоста",
|
|
63153
|
-
"logs.count": "показано последних {n} из {total} подходящих строк",
|
|
63154
|
-
"logs.ctx": "контекст ±3 строки",
|
|
63155
|
-
"logs.dl": "скачать текущий вид (.txt)",
|
|
63156
|
-
"logs.dl_all": "скачать полный журнал (.txt)",
|
|
63157
|
-
"logs.empty": "подходящих строк нет (файл журнала ещё может не существовать)",
|
|
63158
|
-
"logs.filter_ph": "фильтр (идентификатор сессии или ключевое слово)",
|
|
63159
|
-
"logs.omitted": " · ещё {o} более старых строк обрезано (увеличьте предел строк)",
|
|
63160
|
-
"logs.path": "файл журнала",
|
|
63161
|
-
"logs.sub": "живой хвост bili.log · фильтр по идентификатору сессии или ключевому слову, с расширением контекста и временного окна",
|
|
63162
|
-
"logs.title": "Журнал запуска",
|
|
63163
|
-
"logs.win": "временное окно ±2 мин",
|
|
63164
|
-
"nav.config": "Конфигурация",
|
|
63165
|
-
"nav.connect": "Подключение",
|
|
63166
|
-
"nav.logs": "Журналы",
|
|
63167
|
-
"nav.overview": "Обзор",
|
|
63168
|
-
"nav.sessions": "Сессии",
|
|
63169
|
-
"other.rule": "Добавьте в начало любого baseURL:",
|
|
63170
|
-
"ov.by_protocol": "По сетевому протоколу",
|
|
63171
|
-
"ov.cached_tokens": "Токены из кэша",
|
|
63172
|
-
"ov.covlost_note": "Потеряно покрытие у {n} свёрток, заморожено: {x}",
|
|
63173
|
-
"ov.global_hitpct": "Общая доля попаданий в кэш",
|
|
63174
|
-
"ov.gross_note": "суммирует экономию каждой свёртки по всем последующим запросам (теоретический верхний предел)",
|
|
63175
|
-
"ov.gross_saved": "Экономия от сжатия (накопительно)",
|
|
63176
|
-
"ov.hist": "исторические",
|
|
63177
|
-
"ov.input_tokens": "Входные токены",
|
|
63178
|
-
"ov.live_now": "сейчас активны",
|
|
63179
|
-
"ov.miss_split": "непопавшие токены (учтённые сессии): новое содержимое {n} · пересборка после свёртки {c} · возврат без атрибуции {x} (TTL/вытеснение/неизвестно у вышестоящего сервиса)",
|
|
63180
|
-
"ov.net_excl": "сессии до разметки без выборок не включены",
|
|
63181
|
-
"ov.net_saved": "Чистая экономия",
|
|
63182
|
-
"ov.output_tokens": "Выходные токены",
|
|
63183
|
-
"ov.recent": "Недавно активные сессии",
|
|
63184
|
-
"ov.saved_from_legacy": "из этого {n} оценено локально по сессиям до разметки",
|
|
63185
|
-
"ov.saved_neg_tip": "Отрицательная чистая экономия: пересборка после свёртки (стоимость повторного чтения сводки) превысила теоретическую выгоду; типично для коротких сессий, завершившихся сразу после свёртки",
|
|
63186
|
-
"ov.sub": "Общая статистика по всем активным и сохранённым на диске сессиям",
|
|
63187
|
-
"ov.sub_repay": "после вычета пересборки после свёртки {r} и стоимости сводки {s}",
|
|
63188
|
-
"ov.title": "Обзор",
|
|
63189
|
-
"ov.tokens_saved": "Сэкономлено сжатием",
|
|
63190
|
-
"ov.total_requests": "Всего запросов",
|
|
63191
|
-
"ov.total_sessions": "Всего сессий",
|
|
63192
|
-
"ov.view_all": "Показать все →",
|
|
63193
|
-
"pck.hint": "Этот вышестоящий сервис отклонял запросы с prompt_cache_key (400 с ключом, без ключа принимал), поэтому bili не передаёт туда ключ до перезапуска. Если это ваш релей или пул аккаунтов, привязка к префиксному кэшу для таких сессий может ухудшиться.",
|
|
63194
|
-
"pck.on": "Ключ маршрутизации кэша (prompt_cache_key) не передаётся",
|
|
63195
|
-
"pck.sessions": "Затронутые сессии: {ids}",
|
|
63196
|
-
"pluginadv.desc": "Этот плагин заново отправляет всю беседу модели перед каждым вызовом инструмента для проверки, поэтому префиксный кэш вышестоящего сервиса почти не срабатывает (доля попаданий обычно однозначное число процентов) и расход токенов растёт резко. Это не связано со сжатием в bili: bili выносит такие запросы в отдельную подсессию, оставляя префиксный кэш основной сессии нетронутым.",
|
|
63197
|
-
"pluginadv.hint": "Подумайте об отключении плагина или попросите его авторов оптимизировать его; подробности — в ссылке выше (эта тема).",
|
|
63198
|
-
"pluginadv.on": "Обнаружен дорогостоящий плагин",
|
|
63199
|
-
"protocol.unmarked": "не размечено (устаревшие сессии)",
|
|
63200
|
-
"routing.codex_auth_note": "(Передача токена OAuth, сертификат не нужен)",
|
|
63201
|
-
"routing.codex_note_a": "Провайдер по умолчанию — openai, model_provider не нужен; если вы изменили",
|
|
63202
|
-
"routing.codex_note_b": "в config.toml, также добавьте",
|
|
63203
|
-
"routing.codex_note_c": ". Если подключение не работает и задан HTTP(S)_PROXY, также добавьте",
|
|
63204
|
-
"routing.codex_note_d": "; если bili работает в WSL2/Docker, используйте",
|
|
63205
|
-
"routing.codex_note_e": "из Windows (пересылается автоматически); 127.0.0.1 не сработает.",
|
|
63206
|
-
"ses.badge_live_tip": "Сессия обрабатывается текущим демоном (актуальные данные)",
|
|
63207
|
-
"ses.count": "Сессий: {count}",
|
|
63208
|
-
"ses.covlost_tip": "Потеряно покрытие у {n} свёрток ({x} заморожено): хост удалил сжатые оригиналы вне ведения bili (например, штатным сжатием dsh) — их экономия больше не начисляется",
|
|
63209
|
-
"ses.drop_ph": "потеря попаданий как доля от всего ввода, порядок: новое содержимое / пересборка после свёртки / возврат без атрибуции",
|
|
63210
|
-
"ses.empty": "Сессий пока нет",
|
|
63211
|
-
"ses.empty_hidden": "Скрыто пустых сессий: {n} (нет запросов, контекста и учёта; по прямой ссылке они всё ещё доступны)",
|
|
63212
|
-
"ses.empty_hint": "Первый запрос через прокси создаёт сессию автоматически",
|
|
63213
|
-
"ses.filter_all": "Все протоколы",
|
|
63214
|
-
"ses.filter_all_clients": "Все клиенты",
|
|
63215
|
-
"ses.filter_client_tip": "Фильтр по клиенту",
|
|
63216
|
-
"ses.filter_protocol_tip": "Фильтр по протоколу",
|
|
63217
|
-
"ses.filter_state_all": "Все состояния",
|
|
63218
|
-
"ses.filter_state_history": "История",
|
|
63219
|
-
"ses.filter_state_live": "Активные",
|
|
63220
|
-
"ses.filter_state_tip": "Фильтр по состоянию выполнения",
|
|
63221
|
-
"ses.filter_unknown": "Неизвестно",
|
|
63222
|
-
"ses.filtered_count": "Сессий: {shown} / {total}",
|
|
63223
|
-
"ses.next_page": "Далее",
|
|
63224
|
-
"ses.no_title": "без названия",
|
|
63225
|
-
"ses.page_label": "Страница {page} из {pages}",
|
|
63226
|
-
"ses.prev_page": "Назад",
|
|
63227
|
-
"ses.refresh": "Обновить",
|
|
63228
|
-
"ses.reset_filters": "Сбросить фильтры",
|
|
63229
|
-
"ses.search_ph": "Искать по названию, метке или идентификатору…",
|
|
63230
|
-
"ses.sub": "Все сессии из памяти и с диска — щёлкните по строке, чтобы открыть подробности, траекторию и документ передачи",
|
|
63231
|
-
"ses.th_blocks": "Блоки",
|
|
63232
|
-
"ses.th_client": "Клиент",
|
|
63233
|
-
"ses.th_ctx": "Контекст сейчас",
|
|
63234
|
-
"ses.th_folds": "Сжатия",
|
|
63235
|
-
"ses.th_hit": "Попаданий %",
|
|
63236
|
-
"ses.th_input": "Ввод всего",
|
|
63237
|
-
"ses.th_keyswitches_tip": "Ротация ключей и аккаунтов релея (отпечаток учётных данных изменился за тем же URL) · токены пересчитаны, потому что переключённый аккаунт начинает с холодного кэша (#2131)",
|
|
63238
|
-
"ses.th_projswitches_tip": "Прокси переключил свой режим сжатия или проекцию (например, самовосстановление с понижением до прокси возвращает сообщения разработчика из середины истории в блок системы) · каждое переключение обесценивает все последующие записи префиксного кэша — токены пересчитаны для неизменного префикса (#2867)",
|
|
63239
|
-
"ses.th_promptswitches_tip": "Хост переписал свой системный промпт (отпечаток изменился между запросами, например из-за периодического динамического раздела) · каждая перезапись обесценивает все последующие записи префиксного кэша — токены пересчитаны для неизменного префикса (#2350)",
|
|
63240
|
-
"ses.th_proto": "Протокол",
|
|
63241
|
-
"ses.th_reqs": "Запросы",
|
|
63242
|
-
"ses.th_saved": "Сэкономлено",
|
|
63243
|
-
"ses.th_seen": "Последняя активность",
|
|
63244
|
-
"ses.th_switches": "Переключения",
|
|
63245
|
-
"ses.th_switches_tip": "Смена модели в середине сессии · токены пересчитаны, потому что новая модель начинает с холодного префиксного кэша (#1535) · u{1F511} = ротация ключей и аккаунтов релея (изменение отпечатка учётных данных, #2131) · ✍️ = переписывание системного промпта хостом (изменение отпечатка промпта, #2350) · u{1F500} = переключения режима сжатия или проекции прокси (например, самовосстановление с понижением до прокси, #2867)",
|
|
63246
|
-
"ses.th_title": "Сессия",
|
|
63247
|
-
"ses.th_upstream": "Вышестоящий",
|
|
63248
|
-
"ses.title": "Сессии",
|
|
63249
|
-
"summary.add": "Добавить цель",
|
|
63250
|
-
"summary.bytes": "Лимит сводки (байты)",
|
|
63251
|
-
"summary.concurrency": "Размер пула (1-32, по умолчанию 4)",
|
|
63252
|
-
"summary.credentials": "Учётные данные рецепта",
|
|
63253
|
-
"summary.down": "Переместить вниз",
|
|
63254
|
-
"summary.enabled": "Включено",
|
|
63255
|
-
"summary.invalid": "Некорректная конфигурация сводки; исправьте её в JSON",
|
|
63256
|
-
"summary.key": "API-ключ",
|
|
63257
|
-
"summary.key_bad_ref": "Некорректный формат ссылки",
|
|
63258
|
-
"summary.key_delete": "Удалить ключ",
|
|
63259
|
-
"summary.key_invalid": "Значение непригодно (пусто, пробельные или управляющие символы либо слишком длинное)",
|
|
63260
|
-
"summary.key_missing": "Не настроено",
|
|
63261
|
-
"summary.key_save": "Сохранить ключ",
|
|
63262
|
-
"summary.key_saved": "Ключ сохранён",
|
|
63263
|
-
"summary.key_set": "Настроено",
|
|
63264
|
-
"summary.key_unreadable": "Хранилище учётных данных недоступно для чтения (права доступа или содержимое)",
|
|
63265
|
-
"summary.no_recipes": "В провайдерах пока нет именованных рецептов набора (записей без URL, с baseUrl/api) — сначала добавьте один в JSON",
|
|
63266
|
-
"summary.ref": "Цель (провайдер/модель)",
|
|
63267
|
-
"summary.remove": "Удалить цель",
|
|
63268
|
-
"summary.timeout": "Тайм-аут на цель (мс)",
|
|
63269
|
-
"summary.title": "Общая служба сводок (экспериментально)",
|
|
63270
|
-
"summary.total": "Общий срок (мс)",
|
|
63271
|
-
"summary.up": "Переместить вверх",
|
|
63272
|
-
"sys.attribution_broken": "Ошибка атрибуции перехвата ({agent}): запросы к модели идут напрямую (без сжатия) — отправлено без сжатия запросов: {n}",
|
|
63273
|
-
"sys.attribution_error": "Ошибка: {err}",
|
|
63274
|
-
"sys.attribution_impact": "Влияние: с {since} запросы этого хоста к модели полностью обходят сжатие. Исправление: перезапустите процесс хоста, чтобы восстановить перехват; если это повторяется после перезапуска, отправьте диагностику ниже.",
|
|
63275
|
-
"sys.blind_tunnels": "Слепые туннели MITM (CONNECT без TLS)",
|
|
63276
|
-
"sys.disk_version": "Версия на диске",
|
|
63277
|
-
"sys.inflight": "Запросы в работе",
|
|
63278
|
-
"sys.policy_hold": "HOLD для всего парка активен — автообновления заморожены, вручную всё ещё работает: bili update",
|
|
63279
|
-
"sys.policy_pinned": "парк закреплён на v{version} — более новое не установится автоматически; ручной выход: npm install -g billion-context@<version>",
|
|
63280
|
-
"sys.policy_title": "Автообновления по политике удалённого обновления:",
|
|
63281
|
-
"sys.pt_env": "Переменная окружения ACP_PASSTHROUGH (или флаг --passthrough)",
|
|
63282
|
-
"sys.pt_file": "сквозной режим в файле конфигурации: true",
|
|
63283
|
-
"sys.pt_on": "Сквозной режим включён: все запросы передаются как есть, сжатие отключено. Источник:",
|
|
63284
|
-
"sys.report_copy": "Копировать диагностику",
|
|
63285
|
-
"sys.report_issue": "Сообщить на GitHub",
|
|
63286
|
-
"sys.snapshot_shadow": "Движок снимков исходящих запросов (пока не включён — только теневой режим) нашёл {n} расхождений с тем, что было отправлено на самом деле{worst}. На сегодня то, что вы отправляете, не затронуто — это предупреждение проверки перед включением. Пожалуйста, отправьте диагностику, чтобы это исправили до переключения.",
|
|
63287
|
-
"sys.snapshot_shadow_title": "Теневой рендер снимков нашёл расхождения",
|
|
63288
|
-
"sys.stale": "На диске новая версия v{disk} — работает v{running}; перезапустите хост, чтобы загрузить новый код",
|
|
63289
|
-
"sys.stale_auto": "Автоперезапуск включён — переключается автоматически в простое",
|
|
63290
|
-
"sys.stale_manual": "Автоперезапуск не включён (нужен --auto-restart-on-update)",
|
|
63291
|
-
"sys.storage_degraded": "Единое хранилище SQLite станет стандартным в следующем выпуске, но эта система не может его использовать ({reason}). Система автоматически вернула вас к хранилищу JSON — на сегодня ничего не затронуто. Пожалуйста, сообщите об этом, чтобы вашу среду подготовили до переключения.",
|
|
63292
|
-
"sys.storage_degraded_title": "Хранилище SQLite работает с ограничениями:",
|
|
63293
|
-
"sys.title": "Состояние системы",
|
|
63294
|
-
"sys.update": "Уведомление об обновлении:",
|
|
63295
|
-
"sys.update_available": "доступно критическое исправление — обновитесь до v{version} или новее: {summary}",
|
|
63296
|
-
"sys.update_ready": "критическое исправление готово (v{version}) — перезапустите bili, чтобы применить",
|
|
63297
|
-
"sys.version": "Версия",
|
|
63298
|
-
"toast.connect_ok": "Подключение выполнено, HTTP {status}",
|
|
63299
|
-
"toast.failed": "Операция не удалась: {msg}",
|
|
63300
|
-
"toast.passthrough_cleared": "Сквозной режим отключён ✓",
|
|
63301
|
-
"toast.upstream_reachable": "Доступен (HTTP {status}) — сеть в порядке; авторизацию обрабатывает клиент",
|
|
63302
|
-
"zcode.hint_a": "Путь к CA — это абсолютный путь, который bili действительно создал на этой машине — нажмите «Скопировать путь к CA» и вставьте прямо в ZCode. ⚠️ В Windows ZCode не разворачивает",
|
|
63303
|
-
"zcode.hint_b": ", не набирайте вручную",
|
|
63304
|
-
"zcode.hint_c": "пути с шаблоном «-style».",
|
|
63305
|
-
"zcode.method": "Прозрачный прокси MITM",
|
|
63306
|
-
"zcode.title": "ZCode (тариф для разработки)"
|
|
63307
|
-
},
|
|
63308
62778
|
"EMPTY_RESPONSE": {
|
|
63309
62779
|
"addToConversation": "Добавить в беседу",
|
|
63310
62780
|
"annotationStorageMemory": "Сохранено только для этой страницы. При перезагрузке изменения могут потеряться.",
|
|
@@ -68877,6 +68347,478 @@ window.__ModuleLoader__.load({
|
|
|
68877
68347
|
"worktree.title": "Рабочие деревья",
|
|
68878
68348
|
"worktree.unarchive": "Разархивировать рабочее дерево",
|
|
68879
68349
|
"worktree.unarchiveDisabledRepair": "Разархивировать нельзя: каталог или регистрация в Git в недопустимом состоянии"
|
|
68350
|
+
},
|
|
68351
|
+
"settings.claude-code": {
|
|
68352
|
+
"activity": "Активность Claude Code",
|
|
68353
|
+
"askClose": "Закрыть",
|
|
68354
|
+
"askCopied": "Скопировано",
|
|
68355
|
+
"askCopyAnswer": "Скопировать ответ",
|
|
68356
|
+
"askFailed": "Не удалось ответить на вопрос",
|
|
68357
|
+
"askPlaceholder": "Спросить о выделенном тексте…",
|
|
68358
|
+
"askSendToChat": "Отправить в чат",
|
|
68359
|
+
"askStarting": "Запуск Claude…",
|
|
68360
|
+
"askSubmit": "Спросить",
|
|
68361
|
+
"askThinking": "Думает…",
|
|
68362
|
+
"askThinkingLabel": "Думает ·",
|
|
68363
|
+
"askThinkingLive": "Думает ·",
|
|
68364
|
+
"askToolbar": "Действия с выделением",
|
|
68365
|
+
"askTooltip": "Спросить об этом",
|
|
68366
|
+
"authentication": "Аутентификация",
|
|
68367
|
+
"autoFixLabel": "Автоисправление",
|
|
68368
|
+
"autoFixTitle": "Следить за этим пул-реквестом: комментарии ревью и неуспешные проверки передаются Claude для исправления и отправки, пока всё не пройдёт; снимите флажок, чтобы остановить.",
|
|
68369
|
+
"checkingUpdates": "Проверка…",
|
|
68370
|
+
"checksCardEmpty": "Нет сведений о сбоях",
|
|
68371
|
+
"checksCardFix": "Поручить Claude исправить",
|
|
68372
|
+
"checksCardLoading": "Загрузка сведений о проверках…",
|
|
68373
|
+
"checksCardTitle": "Неуспешные проверки",
|
|
68374
|
+
"checkUpdates": "Проверить обновления",
|
|
68375
|
+
"cleanupButton": "Очистить",
|
|
68376
|
+
"cleanupCompleted": "Очищено: {branch}",
|
|
68377
|
+
"cleanupDescription": "Удалить рабочее дерево и локальную ветку, затем архивировать сессии рабочей области и удалить рабочую область; при обычной рабочей копии выполняется переключение на базовую ветку и удаление слитой ветки.",
|
|
68378
|
+
"cleanupDescriptionUnmerged": "У этого рабочего дерева нет пул-реквеста. Удалить рабочее дерево и локальную ветку, затем архивировать сессии рабочей области и удалить рабочую область; отказ, если в ветке есть коммиты, которых нет ни в одном удалённом репозитории.",
|
|
68379
|
+
"cleanupTitle": "Очистка слитой ветки",
|
|
68380
|
+
"codeBlockTitle": "Код",
|
|
68381
|
+
"codeBlockUnwrap": "Без переноса",
|
|
68382
|
+
"codeBlockWrap": "Переносить строки",
|
|
68383
|
+
"compacted": "Контекст сжат",
|
|
68384
|
+
"compactedAuto": "Контекст сжат автоматически",
|
|
68385
|
+
"conflictAbort": "Прервать {operation}",
|
|
68386
|
+
"conflictAbortConfirm": "Нажмите «Прервать {operation}» ещё раз для подтверждения: работа, выполненная во время операции {operation}, будет потеряна.",
|
|
68387
|
+
"conflictAborted": "Операция {operation} прервана",
|
|
68388
|
+
"conflictBadge": "{operation} — конфликтов: {count}",
|
|
68389
|
+
"conflictBadgeReady": "Продолжить {operation}",
|
|
68390
|
+
"conflictContinue": "Продолжить {operation}",
|
|
68391
|
+
"conflictContinued": "Операция {operation} завершена",
|
|
68392
|
+
"conflictDescription": "Операция {operation} не завершена. Разрешите конфликты и продолжите или прервите её, чтобы вернуться к состоянию до начала.",
|
|
68393
|
+
"conflictFiles": "В этих файлах есть конфликты — их нужно разрешить и проиндексировать:",
|
|
68394
|
+
"conflictOperation_cherry-pick": "Cherry-pick",
|
|
68395
|
+
"conflictOperation_merge": "Merge",
|
|
68396
|
+
"conflictOperation_rebase": "Rebase",
|
|
68397
|
+
"conflictOperation_revert": "Revert",
|
|
68398
|
+
"conflictPush": "Отправить после завершения",
|
|
68399
|
+
"conflictPushed": "Операция {operation} завершена и отправлена",
|
|
68400
|
+
"conflictReady": "Все конфликты разрешены. Операцию можно продолжить.",
|
|
68401
|
+
"conflictResolve": "Поручить Claude разрешить конфликты",
|
|
68402
|
+
"conflictTitle": "Разрешение конфликтов",
|
|
68403
|
+
"copyTooltip": "Копировать",
|
|
68404
|
+
"defaultPermissionMode": "Режим разрешений по умолчанию",
|
|
68405
|
+
"defaultPermissionModeEffect": "Режим разрешений Claude Code, с которого начинается новая сессия Claude; при её создании пресет доступа DSH переносится на песочницу, которая нужна этому режиму. Если вы позже сменили режим селектором в поле ввода, сессия работает по своему выбору. Песочница, переключённая штатно (/permission), важнее режима, а auto уступает Default на модели, которая его не поддерживает. Изменения применяются к сессиям, созданным после этого.",
|
|
68406
|
+
"description": "DSH использует локальный Claude Code и сохраняет его агентный цикл, инструменты, CLAUDE.md, навыки, хуки и настройки MCP.",
|
|
68407
|
+
"detail": "Показать подробности с маскировкой",
|
|
68408
|
+
"diagnostics": "Состояние среды выполнения",
|
|
68409
|
+
"diagnosticsBody": "Проверка исполняемого файла Claude Code, аутентификации, рукопожатия протокола и текущих настроек процесса.",
|
|
68410
|
+
"diagnosticsLoading": "Загрузка диагностики…",
|
|
68411
|
+
"diffActionFailed": "Не удалось выполнить действие с репозиторием.",
|
|
68412
|
+
"diffCancel": "Отмена",
|
|
68413
|
+
"diffCardCollapse": "Показать меньше",
|
|
68414
|
+
"diffCardExpand": "Показать ещё строк: {count}",
|
|
68415
|
+
"diffClose": "Закрыть панель различий",
|
|
68416
|
+
"diffCollapseAll": "Свернуть все файлы",
|
|
68417
|
+
"diffCommentCounter": "{index}/{total}",
|
|
68418
|
+
"diffCommentNext": "Следующий комментарий",
|
|
68419
|
+
"diffCommentPosition": "Комментарий {index} из {total}",
|
|
68420
|
+
"diffCommentPrevious": "Предыдущий комментарий",
|
|
68421
|
+
"diffCommit": "Создать коммит",
|
|
68422
|
+
"diffCommitCompleted": "Создан коммит {commit}",
|
|
68423
|
+
"diffCommitMenu": "Открыть действия коммита",
|
|
68424
|
+
"diffCommitMessage": "Сообщение коммита",
|
|
68425
|
+
"diffCommitMessageHint": "Начните с краткого описания. Подробности добавьте после пустой строки.",
|
|
68426
|
+
"diffCommitMessagePlaceholder": "Опишите изменения…",
|
|
68427
|
+
"diffCommitPreserved": "Локальный коммит {commit} сохранён.",
|
|
68428
|
+
"diffCommitPush": "Создать коммит и отправить…",
|
|
68429
|
+
"diffConfirm": "Подтвердить",
|
|
68430
|
+
"diffConfirmDescription": "Подтвердите снимок репозитория и операцию Git.",
|
|
68431
|
+
"diffCreatePr": "Создать пул-реквест…",
|
|
68432
|
+
"diffDone": "Готово",
|
|
68433
|
+
"diffElided": "Пропущено файлов из-за размера: {count} — {files}",
|
|
68434
|
+
"diffEmpty": "Нет изменений отслеживаемых файлов",
|
|
68435
|
+
"diffExpandAll": "Развернуть все файлы",
|
|
68436
|
+
"diffExpandDown": "Развернуть вниз",
|
|
68437
|
+
"diffExpandUp": "Развернуть вверх",
|
|
68438
|
+
"diffFileComments": "Комментариев: {count}",
|
|
68439
|
+
"diffFiles": "Изменено файлов: {count}",
|
|
68440
|
+
"diffFilesShort": "Файлов: {count}",
|
|
68441
|
+
"diffGeneratingMessage": "Подбирается сообщение коммита. Заполняются только поля, которые вы оставили пустыми.",
|
|
68442
|
+
"diffIncludeUnstaged": "Учитывать неиндексированные и неотслеживаемые изменения",
|
|
68443
|
+
"diffLoadingPreview": "Загрузка изменений репозитория…",
|
|
68444
|
+
"diffMerge_merge": "Создать коммит слияния",
|
|
68445
|
+
"diffMerge_rebase": "Перебазировать и слить",
|
|
68446
|
+
"diffMerge_squash": "Объединить коммиты и слить",
|
|
68447
|
+
"diffMergeAdmin": "Слить как администратор (в обход защиты ветки)",
|
|
68448
|
+
"diffMergeCompleted": "Пул-реквест #{number} слит",
|
|
68449
|
+
"diffMergeDescription": "Слить пул-реквест этой ветки выбранным способом.",
|
|
68450
|
+
"diffMergePr": "Слить",
|
|
68451
|
+
"diffOpen": "Показать изменения ветки",
|
|
68452
|
+
"diffPrBase": "Базовая ветка",
|
|
68453
|
+
"diffPrBaseDefault": "Использовать ветку по умолчанию из удалённого репозитория",
|
|
68454
|
+
"diffPrCompleted": "Пул-реквест создан — откройте его на панели репозитория.",
|
|
68455
|
+
"diffPrDescription": "Описание пул-реквеста (только «Сводка» и «Изменения»)",
|
|
68456
|
+
"diffPrDraft": "Создать черновик пул-реквеста",
|
|
68457
|
+
"diffPrTitle": "Заголовок пул-реквеста",
|
|
68458
|
+
"diffPush": "Отправить",
|
|
68459
|
+
"diffPushAhead": "Не отправлено коммитов: {count}",
|
|
68460
|
+
"diffPushCompleted": "Коммит {commit} отправлен",
|
|
68461
|
+
"diffPushDescription": "Отправить локальные коммиты в удалённую ветку.",
|
|
68462
|
+
"diffRepository": "Репозиторий",
|
|
68463
|
+
"diffRevertAll": "Отменить всё",
|
|
68464
|
+
"diffRevertAllConfirm": "Отменить незакоммиченные изменения во всех файлах? Всего файлов: {count}. Новые файлы будут удалены. Это действие необратимо.",
|
|
68465
|
+
"diffRevertCompleted": "Отменено файлов: {count}",
|
|
68466
|
+
"diffRevertConfirmAction": "Отменить",
|
|
68467
|
+
"diffRevertFile": "Отменить изменения в этом файле",
|
|
68468
|
+
"diffRevertFileConfirm": "Отменить незакоммиченные изменения в {path}? Это действие необратимо.",
|
|
68469
|
+
"diffRevertFileNamed": "Отменить изменения в {path}",
|
|
68470
|
+
"diffRevertNothing": "Незакоммиченных изменений нет — всё уже в коммитах.",
|
|
68471
|
+
"diffStaged": "Проиндексировано",
|
|
68472
|
+
"diffStagedUnstaged": "Проиндексировано и не проиндексировано",
|
|
68473
|
+
"diffSubmitting": "Выполняется…",
|
|
68474
|
+
"diffTabTitle": "Изменения ветки",
|
|
68475
|
+
"diffTruncated": "Различия превышают безопасный предел показа. Полное содержимое смотрите в терминале.",
|
|
68476
|
+
"diffUnmodifiedLines": "Неизменённых строк: {count}",
|
|
68477
|
+
"diffUnmodifiedTail": "Ниже ещё неизменённые строки",
|
|
68478
|
+
"diffUnstaged": "Не проиндексировано",
|
|
68479
|
+
"diffUntracked": "Не отслеживается",
|
|
68480
|
+
"diffUpdateBranch": "Обновить ветку…",
|
|
68481
|
+
"diffUpdateBranch_merge": "Слить origin/{base} с текущей веткой",
|
|
68482
|
+
"diffUpdateBranch_rebase": "Перебазировать на origin/{base} (переписывает историю, отправляет с --force-with-lease)",
|
|
68483
|
+
"diffUpdateBranchBehind": "Коммитов: {count} позади origin/{base}",
|
|
68484
|
+
"diffUpdateBranchCompleted": "Коммит {commit} обновлён и отправлен",
|
|
68485
|
+
"diffUpdateBranchConflicts": "После обновления остались конфликты в этих файлах:",
|
|
68486
|
+
"diffUpdateBranchDescription": "Обновить текущую ветку из origin/{base} и отправить; конфликты передать Claude.",
|
|
68487
|
+
"diffUpdateBranchResolve": "Поручить Claude разрешить конфликты",
|
|
68488
|
+
"doctor": "Запустить Doctor",
|
|
68489
|
+
"done": "Готово",
|
|
68490
|
+
"error": "Сбой Doctor",
|
|
68491
|
+
"executable": "Исполняемый файл",
|
|
68492
|
+
"failed": "Сбой",
|
|
68493
|
+
"fileMentionOpen": "Открыть {name} на боковой панели",
|
|
68494
|
+
"globalSettings": "Настройки Claude Code",
|
|
68495
|
+
"globalSettingsBody": "Изменяйте поддерживаемые настройки Claude Code и плагина, сохраняя остальные поля без изменений.",
|
|
68496
|
+
"globalSettingsError": "Не удалось сохранить глобальные настройки",
|
|
68497
|
+
"globalSettingsLoading": "Загрузка глобальных настроек…",
|
|
68498
|
+
"globalSettingsNewSession": "Изменения применяются только к новым сессиям Claude.",
|
|
68499
|
+
"handshake": "Рукопожатие протокола",
|
|
68500
|
+
"heroBatchStarted": "Запущено тикетов: {count}, каждый в отдельной сессии рабочего дерева",
|
|
68501
|
+
"heroTicket": "Тикет",
|
|
68502
|
+
"heroTicketCount": "Тикетов: {count}",
|
|
68503
|
+
"heroTicketEmpty": "Подходящих тикетов нет",
|
|
68504
|
+
"heroTicketFailed": "Не удалось выполнить поиск тикетов",
|
|
68505
|
+
"heroTicketLoading": "Поиск…",
|
|
68506
|
+
"heroTicketMenu": "Выберите тикет Jira",
|
|
68507
|
+
"heroTicketNone": "Снять выбор тикетов",
|
|
68508
|
+
"heroTicketNotConnected": "Сначала подключите Jira в настройках",
|
|
68509
|
+
"heroTicketRemove": "Удалить {key}",
|
|
68510
|
+
"heroTicketSearch": "Искать тикеты или введите ключ…",
|
|
68511
|
+
"idleTimeoutEffect": "Тайм-аут простоя применяется после следующего завершённого раунда. Пустые или недопустимые значения отклоняются.",
|
|
68512
|
+
"idleTimeoutSetting": "Тайм-аут простоя (мин)",
|
|
68513
|
+
"installedVersion": "Установленная версия",
|
|
68514
|
+
"installSource": "Источник установки",
|
|
68515
|
+
"jiraBody": "Подключите Jira Cloud, чтобы запускать новые сессии из тикета: ветка получает имя по ключу тикета, в поле ввода подставляется краткое описание тикета, а тикет назначается на вас, как только рабочее дерево создано.",
|
|
68516
|
+
"jiraConnect": "Подключить",
|
|
68517
|
+
"jiraConnected": "Подключено",
|
|
68518
|
+
"jiraConnecting": "Проверка…",
|
|
68519
|
+
"jiraDisconnect": "Отключить",
|
|
68520
|
+
"jiraEmail": "Почта аккаунта",
|
|
68521
|
+
"jiraError": "Не удалось выполнить запрос к Jira",
|
|
68522
|
+
"jiraLoading": "Загрузка состояния Jira…",
|
|
68523
|
+
"jiraSite": "Адрес сайта",
|
|
68524
|
+
"jiraSitePlaceholder": "https://your-team.atlassian.net",
|
|
68525
|
+
"jiraTitle": "Jira",
|
|
68526
|
+
"jiraToken": "API-токен",
|
|
68527
|
+
"jiraTokenHelp": "Создайте API-токен в Atlassian",
|
|
68528
|
+
"latestVersion": "Последняя версия",
|
|
68529
|
+
"limits": "Ограничения процессов",
|
|
68530
|
+
"limitSummary": "{max} макс. · простой {minutes} мин",
|
|
68531
|
+
"linkedRepositoryPrompt": "Ниже речь идёт о связанном репозитории в {root} (ветка {branch}), а не о рабочей копии этой сессии.",
|
|
68532
|
+
"markdownCopied": "Скопировано",
|
|
68533
|
+
"markdownCopy": "Копировать",
|
|
68534
|
+
"markdownFootnotes": "Сноски",
|
|
68535
|
+
"maxProcessesEffect": "Сохранение сразу освобождает лишние простаивающие процессы; запущенные процессы придут в норму после завершения. Новые сессии ждут освобождения места, пока все процессы заняты. Пустые или недопустимые значения отклоняются.",
|
|
68536
|
+
"maxProcessesSetting": "Лимит процессов Claude",
|
|
68537
|
+
"missing": "Не найдено",
|
|
68538
|
+
"nav": "Claude Code",
|
|
68539
|
+
"no": "Нет",
|
|
68540
|
+
"outputStyle": "Стиль вывода",
|
|
68541
|
+
"permissionBypassAcknowledge": "Я понимаю риск",
|
|
68542
|
+
"permissionBypassCancel": "Отмена",
|
|
68543
|
+
"permissionBypassClose": "Закрыть",
|
|
68544
|
+
"permissionBypassConfirm": "Включить",
|
|
68545
|
+
"permissionBypassDescription": "Claude Code будет выполнять правки файлов и команды, не запрашивая подтверждение.",
|
|
68546
|
+
"permissionBypassTitle": "Пропускать все проверки разрешений?",
|
|
68547
|
+
"permissionMode": "Режим разрешений",
|
|
68548
|
+
"permissionModeAcceptEdits": "Принимать правки",
|
|
68549
|
+
"permissionModeAcceptEditsHint": "Правки файлов проходят сами; команды по-прежнему спрашивают",
|
|
68550
|
+
"permissionModeAria": "Режим разрешений: {name}",
|
|
68551
|
+
"permissionModeAuto": "Авто",
|
|
68552
|
+
"permissionModeAutoHint": "Классификатор Claude Code одобряет за вас и спрашивает, только когда сомневается",
|
|
68553
|
+
"permissionModeAutoUnsupported": "Текущая модель не поддерживает режим «Авто»",
|
|
68554
|
+
"permissionModeBypass": "Обходить разрешения",
|
|
68555
|
+
"permissionModeBypassHint": "Пропускать все проверки разрешений",
|
|
68556
|
+
"permissionModeDefault": "По умолчанию",
|
|
68557
|
+
"permissionModeDefaultHint": "Каждая правка файла и каждая команда сначала запрашивают подтверждение",
|
|
68558
|
+
"permissionModeDontAsk": "Не спрашивать",
|
|
68559
|
+
"permissionModeDontAskHint": "Всё, что не одобрено заранее, отклоняется, а не запрашивается",
|
|
68560
|
+
"permissionModeFailed": "Не удалось переключить режим разрешений: {message}",
|
|
68561
|
+
"permissionModeHostKept": "DSH сохранил свой набор доступа; Claude по-прежнему работает в выбранном режиме",
|
|
68562
|
+
"permissionModeLocked": "Режим разрешений нельзя изменить, пока идёт раунд",
|
|
68563
|
+
"permissionModePlan": "План",
|
|
68564
|
+
"permissionModePlanHint": "Исследование только для чтения; план возвращается на ваше утверждение, прежде чем что-либо запустится",
|
|
68565
|
+
"permissionSelector": "Переключатель разрешений",
|
|
68566
|
+
"permissionSelectorEffect": "Плагин: в поле ввода показывается переключатель плагина со всеми режимами разрешений Claude Code, а новые сессии начинаются в режиме по умолчанию, указанном ниже. Встроенный вариант DSH: остаётся собственный переключатель хоста «Только чтение / Запись в рабочую папку / Полный доступ», и режим следует только за песочницей (только чтение — «План», запись в рабочую папку — «Принимать правки», полный доступ — «Обходить»); выбор в сессии и режим по умолчанию не учитываются. Действует сразу; идущий раунд сохраняет свой режим.",
|
|
68567
|
+
"permissionSelectorNative": "Встроенный вариант DSH (три режима доступа)",
|
|
68568
|
+
"permissionSelectorPlugin": "Плагин (режимы разрешений Claude Code)",
|
|
68569
|
+
"planApproved": "Утверждён",
|
|
68570
|
+
"planClose": "Закрыть панель плана",
|
|
68571
|
+
"planEmpty": "В этой сессии пока нет плана для чтения.",
|
|
68572
|
+
"planFeedbackFailed": "Заметки не удалось отправить. Попробуйте ещё раз.",
|
|
68573
|
+
"planFeedbackMessage": "Правки в плане",
|
|
68574
|
+
"planHistory": "Планы в этой сессии",
|
|
68575
|
+
"planNoteHint": "Выделите фрагмент выше, чтобы процитировать его",
|
|
68576
|
+
"planNotePlaceholder": "Что изменить? Ввод добавляет заметку, ⌘/Ctrl+Enter отправляет",
|
|
68577
|
+
"planNoteQuotedPlaceholder": "Что изменить в выделенном фрагменте?",
|
|
68578
|
+
"planNoteRemove": "Удалить эту заметку",
|
|
68579
|
+
"planNth": "{index} / {total}",
|
|
68580
|
+
"planOpen": "Открыть план",
|
|
68581
|
+
"planPanelTitle": "План",
|
|
68582
|
+
"planPending": "Ожидает утверждения",
|
|
68583
|
+
"planPendingHint": "Утвердите или отклоните этот план в диалоге подтверждения DSH.",
|
|
68584
|
+
"planQuoteClear": "Убрать цитату",
|
|
68585
|
+
"planRejected": "Отклонён",
|
|
68586
|
+
"planSendForChanges": "Отправить на доработку",
|
|
68587
|
+
"planSending": "Отправка…",
|
|
68588
|
+
"planSettled": "Решение по этому плану уже принято в диалоге подтверждения; заметки не отправлены.",
|
|
68589
|
+
"planUsage": "Использование плана",
|
|
68590
|
+
"planUsageBody": "Окна использования подписки Claude, в которой выполнен вход, по данным /usage из Claude Code. Обновляется, когда сессия простаивает, и по запросу.",
|
|
68591
|
+
"planUsageError": "Не удалось получить данные об использовании",
|
|
68592
|
+
"planUsageLoading": "Загрузка…",
|
|
68593
|
+
"planUsageNever": "Данных об использовании пока нет — выполните раунд или обновите.",
|
|
68594
|
+
"planUsageRefresh": "Обновить данные",
|
|
68595
|
+
"planUsageRefreshing": "Обновление…",
|
|
68596
|
+
"planUsageResets": "Сброс через {age}",
|
|
68597
|
+
"planUsageSubscription": "Подписка",
|
|
68598
|
+
"planUsageUnavailable": "У этого аккаунта нет лимитов плана (сессии с API-ключом, Bedrock и Vertex не ограничиваются подпиской).",
|
|
68599
|
+
"planUsageUpdated": "Обновлено {age} назад",
|
|
68600
|
+
"planUsageUsed": "Использовано {percent}%",
|
|
68601
|
+
"planWindow_five_hour": "5-часовое окно",
|
|
68602
|
+
"planWindow_seven_day": "Все модели · за неделю",
|
|
68603
|
+
"planWindow_seven_day_opus": "Opus · за неделю",
|
|
68604
|
+
"planWindow_seven_day_sonnet": "Sonnet · за неделю",
|
|
68605
|
+
"pluginUpdate": "Обновления плагинов",
|
|
68606
|
+
"pluginUpdateBody": "Проверяет новые выпуски в npm. На месте можно обновить только установку из npm с однозначной идентификацией; локальные ссылки для разработки никогда не заменяются.",
|
|
68607
|
+
"prCommentsButton": "Комментарии GitHub ({count})",
|
|
68608
|
+
"prCommentsSend": "Поручить Claude разобрать комментарии к пул-реквесту GitHub",
|
|
68609
|
+
"presetClaudeDescription": "Использовать локальный Claude Code как полную среду выполнения агента в DSH.",
|
|
68610
|
+
"presetHeaderHint": "Пресет агента, который использует эта сессия",
|
|
68611
|
+
"processes": "Активные процессы",
|
|
68612
|
+
"processSummary": "Всего: {total} · активных: {active}",
|
|
68613
|
+
"promptDelete": "Удалить",
|
|
68614
|
+
"promptDeleteConfirm": "Удалить «{name}»?",
|
|
68615
|
+
"promptDeleteFailed": "Не удалось удалить: {message}",
|
|
68616
|
+
"promptDeleteNamed": "Удалить «{name}»",
|
|
68617
|
+
"promptManage": "Управление промптами",
|
|
68618
|
+
"promptManageEmpty": "Сохранённых промптов пока нет.",
|
|
68619
|
+
"promptManageLoading": "Загрузка…",
|
|
68620
|
+
"promptRefine": "Переписать с помощью ИИ",
|
|
68621
|
+
"promptRefineBusy": "Переписывание…",
|
|
68622
|
+
"promptRefineFailed": "Не удалось переписать: {message}",
|
|
68623
|
+
"promptRefineUndo": "Вернуть исходный текст",
|
|
68624
|
+
"promptSave": "Сохранить как промпт",
|
|
68625
|
+
"promptSaveCancel": "Отмена",
|
|
68626
|
+
"promptSaveConfirm": "Сохранить",
|
|
68627
|
+
"promptSaved": "Сохранено как «{name}»",
|
|
68628
|
+
"promptSaveDone": "Понятно",
|
|
68629
|
+
"promptSaveExists": "Промпт с таким именем уже есть. Выберите другое имя.",
|
|
68630
|
+
"promptSaveFailed": "Не удалось сохранить: {message}",
|
|
68631
|
+
"promptSaveName": "Имя",
|
|
68632
|
+
"promptSaveNaming": "Придумываем имя…",
|
|
68633
|
+
"promptSource": "Промпты",
|
|
68634
|
+
"prose": "Цветовая подсветка Markdown",
|
|
68635
|
+
"proseEffect": "Даёт заголовкам, полужирному начертанию, курсиву, встроенному коду, маркерам списков, цитатам и ссылкам собственные цвета, а блок кода рисует на тёмной поверхности с обводкой. Это переопределяет палитру Claude Desktop, которой пакет соответствует по умолчанию. Работает только с рендерером плагина и применяется сразу, а не со следующего раунда.",
|
|
68636
|
+
"proseEnhanced": "Вкл.",
|
|
68637
|
+
"prosePlain": "Выкл.",
|
|
68638
|
+
"refreshing": "Выполняется Doctor…",
|
|
68639
|
+
"renderer": "Рендерер вывода ИИ",
|
|
68640
|
+
"rendererEffect": "Рендерер плагина сохраняет собственный транскрипт пакета: чередующийся текст, сгруппированные карточки инструментов и строки активности. Встроенный рендерер DSH передаёт тот же раунд самому DSH — текст как обычные блоки текста ассистента, размышления как блоки рассуждений, а корневые инструменты Claude отражаются в карточки инструментов DSH. Изменение применяется со следующего раунда; уже записанные раунды сохраняют рендерер, с которым были записаны, и не перерисовываются.",
|
|
68641
|
+
"rendererNative": "Встроенный рендерер DSH",
|
|
68642
|
+
"rendererPlugin": "Рендерер плагина",
|
|
68643
|
+
"repositoryAvailable": "Доступно",
|
|
68644
|
+
"repositoryBranch": "Ветка",
|
|
68645
|
+
"repositoryBranchesLoading": "Загрузка веток…",
|
|
68646
|
+
"repositoryBranchRefresh": "Обновить удалённые ветки",
|
|
68647
|
+
"repositoryBranchRefreshed": "Обновлено · веток: {count}",
|
|
68648
|
+
"repositoryBranchRefreshFailed": "Не удалось обновить удалённые ветки",
|
|
68649
|
+
"repositoryBranchRefreshing": "Обновление удалённых веток…",
|
|
68650
|
+
"repositoryBranchRefreshStale": "Процесс хоста всё ещё работает на прежней сборке плагина, в которой нет маршрута обновления. Перезапустите DSH и попробуйте снова.",
|
|
68651
|
+
"repositoryBranchSearch": "Поиск веток",
|
|
68652
|
+
"repositoryBranchSearchEmpty": "Подходящих веток нет",
|
|
68653
|
+
"repositoryChanges": "Изменения",
|
|
68654
|
+
"repositoryChecks": "Проверки",
|
|
68655
|
+
"repositoryChecks_failing": "Проверки с ошибками",
|
|
68656
|
+
"repositoryChecks_none": "Проверок нет",
|
|
68657
|
+
"repositoryChecks_passing": "Проверки пройдены",
|
|
68658
|
+
"repositoryChecks_pending": "Проверки в ожидании",
|
|
68659
|
+
"repositoryChecksOpen": "Показать проверки с ошибками",
|
|
68660
|
+
"repositoryClean": "Чисто",
|
|
68661
|
+
"repositoryClose": "Закрыть панель репозитория",
|
|
68662
|
+
"repositoryCwd": "Каталог сессии",
|
|
68663
|
+
"repositoryDetached": "Отсоединённый HEAD",
|
|
68664
|
+
"repositoryDraft": "Черновик",
|
|
68665
|
+
"repositoryDraftTransferFailed": "Вложения черновика не удалось перенести в сессию рабочего дерева.",
|
|
68666
|
+
"repositoryLinked": "Связанный репозиторий: изменён этой сессией",
|
|
68667
|
+
"repositoryLocal": "Локальный репозиторий",
|
|
68668
|
+
"repositoryMergedAgo": "{age} назад",
|
|
68669
|
+
"repositoryMergeMenu": "Открыть параметры слияния",
|
|
68670
|
+
"repositoryMergeState": "Состояние слияния",
|
|
68671
|
+
"repositoryModified": "Изменено",
|
|
68672
|
+
"repositoryNoPr": "Для этой ветки нет пул-реквеста",
|
|
68673
|
+
"repositoryNotGit": "Это не репозиторий Git",
|
|
68674
|
+
"repositoryOpen": "Показать сведения о репозитории и пул-реквесте",
|
|
68675
|
+
"repositoryOpenPr": "Открыть пул-реквест #{number} в браузере",
|
|
68676
|
+
"repositoryPanel": "Статус репозитория",
|
|
68677
|
+
"repositoryPr": "Пул-реквест #{number}",
|
|
68678
|
+
"repositoryPrDraft": "Черновик пул-реквеста #{number}",
|
|
68679
|
+
"repositoryProgress_creating-workspace": "Создание рабочей области DSH",
|
|
68680
|
+
"repositoryProgress_creating-worktree": "Создание ветки и рабочего дерева",
|
|
68681
|
+
"repositoryProgress_fetching": "Обновление удалённых ссылок",
|
|
68682
|
+
"repositoryProgress_inspecting": "Проверка репозитория и ветки",
|
|
68683
|
+
"repositoryProgress_saving-worktree": "Сохранение состояния рабочего дерева",
|
|
68684
|
+
"repositoryProgress_starting-session": "Запуск сессии Claude",
|
|
68685
|
+
"repositoryProgress_submitting": "Отправка сообщения",
|
|
68686
|
+
"repositoryProgress_summarizing": "Именование ветки по тексту запроса",
|
|
68687
|
+
"repositoryProgress_switching-branch": "Переключение локальной ветки",
|
|
68688
|
+
"repositoryProgress_transferring-draft": "Перенос сообщения и вложений",
|
|
68689
|
+
"repositoryProgressDismiss": "Скрыть прогресс рабочего дерева",
|
|
68690
|
+
"repositoryProgressFailed": "Не удалось создать рабочее дерево",
|
|
68691
|
+
"repositoryProgressTitle": "Создание рабочего дерева",
|
|
68692
|
+
"repositoryPrState": "Состояние пул-реквеста",
|
|
68693
|
+
"repositoryPullRequest": "Пул-реквест",
|
|
68694
|
+
"repositoryReview": "Ревью",
|
|
68695
|
+
"repositoryReview_approved": "Одобрено",
|
|
68696
|
+
"repositoryReview_changes-requested": "Запрошены правки",
|
|
68697
|
+
"repositoryReview_none": "Нет статуса ревью",
|
|
68698
|
+
"repositoryReview_review-required": "Требуется ревью",
|
|
68699
|
+
"repositoryRoot": "Корень репозитория",
|
|
68700
|
+
"repositorySection": "Репозиторий",
|
|
68701
|
+
"repositorySessionUnavailable": "Не удалось подготовить целевую сессию.",
|
|
68702
|
+
"repositoryState_closed": "Закрыт",
|
|
68703
|
+
"repositoryState_merged": "Объединён",
|
|
68704
|
+
"repositoryState_open": "Открыт",
|
|
68705
|
+
"repositoryStatus": "Статус",
|
|
68706
|
+
"repositoryUnavailable": "Статус репозитория недоступен",
|
|
68707
|
+
"repositoryUnknownBranch": "Неизвестная ветка",
|
|
68708
|
+
"repositoryUpdateBranch": "Обновить ветку",
|
|
68709
|
+
"repositoryWorktree": "Рабочее дерево",
|
|
68710
|
+
"repositoryWorktreeLabel": "Рабочее дерево Git",
|
|
68711
|
+
"restartRequired": "Перезапустите DeepSeek Harness, чтобы загрузить обновлённый плагин.",
|
|
68712
|
+
"reviewCommentAdd": "Добавить комментарий к строке",
|
|
68713
|
+
"reviewCommentCancel": "Отмена",
|
|
68714
|
+
"reviewCommentFailed": "Не удалось сохранить комментарий.",
|
|
68715
|
+
"reviewCommentNewRange": "Строки {start}–{end}",
|
|
68716
|
+
"reviewCommentNewSide": "Строка {line}",
|
|
68717
|
+
"reviewCommentOldRange": "Старые строки {start}–{end}",
|
|
68718
|
+
"reviewCommentOldSide": "Старая строка {line}",
|
|
68719
|
+
"reviewCommentPlaceholder": "Запросить правки",
|
|
68720
|
+
"reviewCommentRemove": "Удалить комментарий",
|
|
68721
|
+
"reviewCommentsClear": "Очистить все комментарии",
|
|
68722
|
+
"reviewCommentsSend": "Отправить комментарии",
|
|
68723
|
+
"reviewCommentsSendDraft": "Пожалуйста, учтите приложенные комментарии ревью.",
|
|
68724
|
+
"reviewCommentSubmit": "Отправить",
|
|
68725
|
+
"reviewThreadAgo": "{age} назад",
|
|
68726
|
+
"reviewThreadBot": "Бот",
|
|
68727
|
+
"reviewThreadMention": "Упомянуть участника репозитория",
|
|
68728
|
+
"reviewThreadOpenOnGitHub": "Открыть на GitHub",
|
|
68729
|
+
"reviewThreadOutdated": "Устарело",
|
|
68730
|
+
"reviewThreadReply": "Ответить",
|
|
68731
|
+
"reviewThreadReplyFailed": "Не удалось отправить ответ.",
|
|
68732
|
+
"reviewThreadReplyPlaceholder": "Ответьте на этот комментарий — введите @, чтобы упомянуть участника",
|
|
68733
|
+
"reviewThreadReplyTo": "Ответить @{author}",
|
|
68734
|
+
"reviewThreadResolve": "Пометить решённым",
|
|
68735
|
+
"reviewThreadResolved": "Решено",
|
|
68736
|
+
"reviewThreadResolveFailed": "Не удалось обновить обсуждение.",
|
|
68737
|
+
"reviewThreadSend": "Отправить ответ",
|
|
68738
|
+
"reviewThreadSendToAi": "Отправить ИИ",
|
|
68739
|
+
"reviewThreadUnresolve": "Пометить нерешённым",
|
|
68740
|
+
"rewindBusy": "Сессия выполняется — дождитесь завершения раунда, прежде чем перематывать.",
|
|
68741
|
+
"rewindConfirm": "Удалить и перемотать",
|
|
68742
|
+
"rewindDescription": "Удаляет сообщение и записи под ним (всего: {count}), а Claude возвращается к контексту, который был до отправки. Отменить это нельзя.",
|
|
68743
|
+
"rewindFailed": "Не удалось перемотать ({code}).",
|
|
68744
|
+
"rewindFilesUnavailable": "Беседа перемотана, но файлы не тронуты: для этого раунда не сохранялся снимок рабочего дерева.",
|
|
68745
|
+
"rewindHint": "Удалённые записи скрываются из этой сессии, и Claude их забывает; текст сообщения возвращается в поле ввода, чтобы вы могли его исправить и отправить снова.",
|
|
68746
|
+
"rewindRestoreFiles": "Также вернуть файлы к состоянию на начало хода",
|
|
68747
|
+
"rewindRestoreFilesHint": "Удалённые записи скрываются из этой сессии, и Claude их забывает; рабочая копия возвращается к состоянию на начало хода — созданные после этого файлы удаляются, изменённые восстанавливаются, а файлы из .gitignore не трогаются. Текст сообщения возвращается в поле ввода, чтобы вы могли его исправить и отправить снова.",
|
|
68748
|
+
"rewindStale": "Процесс хоста всё ещё работает со старой сборкой плагина, в которой нет маршрута перемотки. Перезапустите DSH и повторите попытку.",
|
|
68749
|
+
"rewindSubmitting": "Перемотка…",
|
|
68750
|
+
"rewindTitle": "Перемотать к состоянию до этого сообщения",
|
|
68751
|
+
"rewindTooltip": "Перемотать сюда",
|
|
68752
|
+
"running": "Выполняется",
|
|
68753
|
+
"security": "Граница разрешений",
|
|
68754
|
+
"securityBody": "Права инструментов Claude определяются через интерфейс подтверждений DSH. Эта версия не обеспечивает изоляцию записи на уровне ядра для ~/.claude и путей вне рабочей области.",
|
|
68755
|
+
"settingHint": "Показать подробности",
|
|
68756
|
+
"steeredMessage": "Сообщение, отправленное сразу",
|
|
68757
|
+
"subagent": "Субагент",
|
|
68758
|
+
"teamLead": "Текущий чат",
|
|
68759
|
+
"teamLeadIdle": "Неактивен",
|
|
68760
|
+
"teammateBrief": "Краткое описание",
|
|
68761
|
+
"teammateClose": "Закрыть панель участника",
|
|
68762
|
+
"teammateGone": "Этого участника больше нет на доске задач",
|
|
68763
|
+
"teammateOpen": "Открыть участника {name}",
|
|
68764
|
+
"teammatePanelTitle": "Участник",
|
|
68765
|
+
"teammateResult": "Отчёт",
|
|
68766
|
+
"teammateToolUses": "Вызовов инструментов: {count}",
|
|
68767
|
+
"teammateWorking": "Работает, вывода пока нет",
|
|
68768
|
+
"teamMembers": "Участники",
|
|
68769
|
+
"teamMessages": "Сообщения",
|
|
68770
|
+
"teamNoMessages": "Сообщений пока нет",
|
|
68771
|
+
"teamNoTasks": "Общих задач пока нет",
|
|
68772
|
+
"teamStatusCompleted": "Завершено",
|
|
68773
|
+
"teamStatusFailed": "Ошибка",
|
|
68774
|
+
"teamStatusKilled": "Прервано",
|
|
68775
|
+
"teamStatusRunning": "Выполняется",
|
|
68776
|
+
"teamStatusStopped": "Остановлено",
|
|
68777
|
+
"teamTaskBlockedBy": "Блокируется: {tasks}",
|
|
68778
|
+
"teamTaskCompleted": "Завершена",
|
|
68779
|
+
"teamTaskInProgress": "В работе",
|
|
68780
|
+
"teamTaskOwner": "Исполнитель: {owner}",
|
|
68781
|
+
"teamTaskPending": "Ожидает",
|
|
68782
|
+
"teamTasks": "Общие задачи",
|
|
68783
|
+
"teamTaskUnowned": "Без исполнителя",
|
|
68784
|
+
"teamTitle": "Команда",
|
|
68785
|
+
"teamTrigger": "Команда агентов",
|
|
68786
|
+
"thinking": "Размышление",
|
|
68787
|
+
"title": "Claude Code",
|
|
68788
|
+
"tokens": "Токенов: {count}",
|
|
68789
|
+
"toolAnswers": "Ответы",
|
|
68790
|
+
"toolBackground": "Перевести в фон",
|
|
68791
|
+
"toolBackgrounding": "Перевод в фон…",
|
|
68792
|
+
"toolError": "Ошибка",
|
|
68793
|
+
"toolInput": "Ввод",
|
|
68794
|
+
"toolOutput": "Вывод",
|
|
68795
|
+
"turnUsage": "Расход за ход",
|
|
68796
|
+
"turnUsageCache": "Попадание в кэш {percent}%",
|
|
68797
|
+
"turnUsageCost": "Итого: ${cost}",
|
|
68798
|
+
"turnUsageTokens": "{count} ток",
|
|
68799
|
+
"turnUsageTtft": "TTFT: {duration}",
|
|
68800
|
+
"unknown": "Неизвестно",
|
|
68801
|
+
"updateError": "Не удалось обновить",
|
|
68802
|
+
"updateNotChecked": "Обновления ещё не проверялись.",
|
|
68803
|
+
"updatePlugin": "Обновить",
|
|
68804
|
+
"updateSource_link": "Локальная ссылка разработки",
|
|
68805
|
+
"updateSource_registry": "npm",
|
|
68806
|
+
"updateSource_unknown": "Неизвестно",
|
|
68807
|
+
"updateSource_unsupported": "Неподдерживаемый источник",
|
|
68808
|
+
"updateState_available": "Доступно обновление",
|
|
68809
|
+
"updateState_current": "Актуально",
|
|
68810
|
+
"updateState_error": "Проверка не удалась",
|
|
68811
|
+
"updateState_linked": "Обновлено из связанной рабочей копии",
|
|
68812
|
+
"updateState_unavailable": "Не удалось надёжно определить активный профиль DSH",
|
|
68813
|
+
"updateState_unsupported": "Этот источник установки не поддерживает автоматическое обновление",
|
|
68814
|
+
"updateStatus": "Статус обновления",
|
|
68815
|
+
"updatingPlugin": "Обновление…",
|
|
68816
|
+
"usedTool": "Инструментов: 1",
|
|
68817
|
+
"usedTools": "Инструментов: {count}",
|
|
68818
|
+
"version": "Версия",
|
|
68819
|
+
"worktreeBranchPrefix": "Префикс веток рабочего дерева",
|
|
68820
|
+
"worktreeBranchPrefixEffect": "Изменения префикса действуют на ветки рабочего дерева, создаваемые после этого. Явно заданные полные имена веток не меняются.",
|
|
68821
|
+
"yes": "Да"
|
|
68880
68822
|
}
|
|
68881
68823
|
};
|
|
68882
68824
|
//#endregion
|
|
@@ -69692,6 +69634,69 @@ window.__ModuleLoader__.load({
|
|
|
69692
69634
|
return () => observer.disconnect();
|
|
69693
69635
|
}
|
|
69694
69636
|
//#endregion
|
|
69637
|
+
//#region src/options.ts
|
|
69638
|
+
/**
|
|
69639
|
+
* The switches that turn the pack's extra passes off.
|
|
69640
|
+
*
|
|
69641
|
+
* The pack is more than a dictionary: it substitutes Russian plural forms, rewrites
|
|
69642
|
+
* plugin titles the harness cannot translate, and applies Russian screen typography.
|
|
69643
|
+
* Each extra can disagree with a reader who wants only the translation — typography
|
|
69644
|
+
* in particular rewrites text the user may have typed into a form or a prompt. A
|
|
69645
|
+
* switch disables one pass without touching the dictionaries, so the interface stays
|
|
69646
|
+
* Russian and only the extra behaviour disappears.
|
|
69647
|
+
*
|
|
69648
|
+
* The switches arrive from the profile's `cordis.yml` row:
|
|
69649
|
+
*
|
|
69650
|
+
* ```yaml
|
|
69651
|
+
* - id: locale-ru
|
|
69652
|
+
* config:
|
|
69653
|
+
* typography: false
|
|
69654
|
+
* ```
|
|
69655
|
+
*
|
|
69656
|
+
* The browser half cannot read that row — the client boot graph carries no config —
|
|
69657
|
+
* so the host half hands the resolved switches to the page through the webserver's
|
|
69658
|
+
* index-injection table (see `src/index.ts`), and the browser half reads the global
|
|
69659
|
+
* this module names. Omitting a switch means «on», so an existing profile needs no
|
|
69660
|
+
* edit, and a surface without the webserver simply keeps the defaults.
|
|
69661
|
+
*/
|
|
69662
|
+
/** The switches, by their name in the config. */
|
|
69663
|
+
const SWITCHES = [
|
|
69664
|
+
"typography",
|
|
69665
|
+
"plurals",
|
|
69666
|
+
"pluginNames"
|
|
69667
|
+
];
|
|
69668
|
+
/** The global the host half writes and the browser half reads. */
|
|
69669
|
+
const BOOT_OPTIONS_KEY = "__DSH_RU_OPTIONS__";
|
|
69670
|
+
/**
|
|
69671
|
+
* Normalize any candidate into the switches the passes read.
|
|
69672
|
+
*
|
|
69673
|
+
* Only booleans count: a switch that arrived as a string (`"false"`, a common YAML
|
|
69674
|
+
* mistake) is ignored rather than treated as a truthy value, because «off» and «on»
|
|
69675
|
+
* must not depend on how generous a cast was.
|
|
69676
|
+
*
|
|
69677
|
+
* @param value - the candidate, typically the row config or the injected global.
|
|
69678
|
+
* @returns the switches that were explicitly set.
|
|
69679
|
+
*/
|
|
69680
|
+
function normalizeOptions(value) {
|
|
69681
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return {};
|
|
69682
|
+
const source = value;
|
|
69683
|
+
const normalized = {};
|
|
69684
|
+
for (const key of SWITCHES) {
|
|
69685
|
+
const raw = source[key];
|
|
69686
|
+
if (typeof raw === "boolean") normalized[key] = raw;
|
|
69687
|
+
}
|
|
69688
|
+
return normalized;
|
|
69689
|
+
}
|
|
69690
|
+
/**
|
|
69691
|
+
* Read the switches the host half injected into the page.
|
|
69692
|
+
*
|
|
69693
|
+
* @returns the switches, or an empty object when the host half did not run (a surface
|
|
69694
|
+
* without the webserver, or a build of the pack older than the switches).
|
|
69695
|
+
*/
|
|
69696
|
+
function readBootOptions() {
|
|
69697
|
+
return normalizeOptions(globalThis[BOOT_OPTIONS_KEY]);
|
|
69698
|
+
}
|
|
69699
|
+
//#endregion
|
|
69695
69700
|
//#region src/client/index.ts
|
|
69696
69701
|
/**
|
|
69697
69702
|
* Skip only occupied slots; validation and unexpected service errors still fail.
|
|
@@ -69750,8 +69755,13 @@ window.__ModuleLoader__.load({
|
|
|
69750
69755
|
* replacing or disposing those resources. The typography pass runs only while
|
|
69751
69756
|
* Russian is the active language, and follows a switch through `locale/change`.
|
|
69752
69757
|
* @param ctx - client root context.
|
|
69758
|
+
* @param config - the switches that turn the extra passes off; omitted means on.
|
|
69753
69759
|
*/
|
|
69754
|
-
function apply(ctx) {
|
|
69760
|
+
function apply(ctx, config = {}) {
|
|
69761
|
+
const options = {
|
|
69762
|
+
...readBootOptions(),
|
|
69763
|
+
...config
|
|
69764
|
+
};
|
|
69755
69765
|
let languageTaken = false;
|
|
69756
69766
|
const lostNamespaces = [];
|
|
69757
69767
|
const report = (what) => {
|
|
@@ -69771,9 +69781,9 @@ window.__ModuleLoader__.load({
|
|
|
69771
69781
|
const parts = [languageTaken ? "язык ru уже занят другим пакетом" : null, lostNamespaces.length > 0 ? `наши словари не зарегистрированы в ${lostNamespaces.length} namespace` : null].filter((part) => part !== null);
|
|
69772
69782
|
console.warn(`[dsh-client-locale-ru] ${parts.join("; ")}. В интерфейсе останется перевод другого пакета — оставьте в профиле один пакет с русским языком.`);
|
|
69773
69783
|
}
|
|
69774
|
-
ctx.effect(() => startRussianPlurals(ctx.locale), "locale-ru: plurals");
|
|
69775
|
-
ctx.effect(() => followLanguage(ctx, (isRussian) => startRussianTypography(document, isRussian)), "locale-ru: typography");
|
|
69776
|
-
ctx.effect(() => followLanguage(ctx, (isRussian) => startRussianPluginNames(document, isRussian)), "locale-ru: plugin names");
|
|
69784
|
+
if (options.plurals !== false) ctx.effect(() => startRussianPlurals(ctx.locale), "locale-ru: plurals");
|
|
69785
|
+
if (options.typography !== false) ctx.effect(() => followLanguage(ctx, (isRussian) => startRussianTypography(document, isRussian)), "locale-ru: typography");
|
|
69786
|
+
if (options.pluginNames !== false) ctx.effect(() => followLanguage(ctx, (isRussian) => startRussianPluginNames(document, isRussian)), "locale-ru: plugin names");
|
|
69777
69787
|
}
|
|
69778
69788
|
//#endregion
|
|
69779
69789
|
exports.apply = apply;
|