{
  "common": {
    "cancel": "Отмена",
    "confirm": "Подтвердить",
    "loading": "Загрузка…",
    "send": "Отправить",
    "rename": "Переименовать",
    "delete": "Удалить",
    "close": "Закрыть",
    "save": "Сохранить",
    "copy": "Копировать",
    "quote": "Цитата",
    "quote_block": "Цитировать всё",
    "copied": "Скопировано!",
    "generating": "Генерация...",
    "starting": "Запуск...",
    "yes": "да",
    "connected": "Подключено",
    "disconnected": "Отключено",
    "reconnecting": "Переподключение…",
    "refresh": "Обновить",
    "show": "Показать",
    "hide": "Скрыть",
    "this_feature": "Эта функция"
  },
  "window": {
    "maximize": "Развернуть",
    "restore": "Восстановить",
    "minimize": "Свернуть",
    "close": "Закрыть",
    "hide": "Скрыть"
  },
  "appUpdate": {
    "banner_title": "IM.codes обновлён",
    "banner_body": "Обновите страницу, чтобы использовать последнюю версию. Ваши сессии останутся доступными.",
    "later": "Позже",
    "refresh": "Обновить",
    "chunk_title": "Требуется обновление",
    "blocking_title": "Обновите страницу перед продолжением",
    "chunk_body": "Эта страница работает на старом фронтенде и не смогла загрузить нужный файл приложения. Обновите страницу для чистого восстановления.",
    "blocking_body": "{{feature}} требует последнюю версию фронтенда после обновления сервера. Обновите страницу, чтобы продолжить без зависания панели.",
    "refresh_continue": "Обновить и продолжить",
    "error_reload_message": "Приложение обновлено — перезагрузите страницу, чтобы продолжить",
    "error_retry_message": "Ошибка компонента — нажмите, чтобы повторить",
    "reload": "Перезагрузить",
    "retry": "Повторить"
  },
  "chat": {
    "dpad": {
      "title": "Клавиши-стрелки — тяните, чтобы двигать"
    },
    "sendFailedReason": {
      "daemonOffline": "Соединение потеряно",
      "ackTimeout": "Нет ответа от агента",
      "daemonError": "Ошибка агента"
    },
    "loading": "Загрузка чата...",
    "syncing": "↻ Синхронизация...",
    "no_events": "Событий пока нет",
    "session_state": "Сессия {{state}}",
    "load_older": "Загрузить старые сообщения",
    "loading_older": "Загрузка...",
    "refreshing_history": "Обновление истории…",
    "timelineStatus": {
      "ok": "История обновлена",
      "empty": "Более ранних событий нет",
      "partial": "Таймлайн загружен частично",
      "deferred": "Таймлайн еще подготавливается",
      "canceled": "Запрос таймлайна отменен",
      "payloadTruncated": "Таймлайн сокращен для быстрой загрузки",
      "cursorReset": "Позиция таймлайна изменилась; обновите историю",
      "queueFull": "Worker таймлайна занят",
      "deadlineExceeded": "Запрос таймлайна превысил время ожидания",
      "timeout": "Worker таймлайна превысил время ожидания",
      "unavailable": "История таймлайна недоступна",
      "projectionUnavailable": "Индекс таймлайна недоступен",
      "malformedRequest": "Некорректный запрос таймлайна",
      "internalError": "Не удалось загрузить историю",
      "detailMissing": "Детали таймлайна больше недоступны",
      "detailExpired": "Детали таймлайна устарели",
      "detailUnauthorized": "Детали недоступны для этого сеанса",
      "detailOversized": "Детали таймлайна слишком велики",
      "detailMalformed": "Некорректный запрос деталей",
      "detailEpochMismatch": "Детали устарели после перезапуска daemon",
      "detailGenerationMismatch": "Детали устарели после обновления",
      "detailHydrated": "Детали таймлайна загружены",
      "pageCursorReset": "Страница таймлайна устарела; обновите историю",
      "pageMalformed": "Некорректный запрос страницы",
      "error": "Не удалось загрузить историю"
    },
    "thinking_running": "Думаю · {{sec}}s",
    "thinking_done": "Думал {{sec}}s",
    "show_file_panel": "Открыть панель файлов",
    "hide_file_panel": "Закрыть панель файлов",
    "sync_history": "Синхронизировать историю чата",
    "sdk_agents_toggle": "Agents",
    "sdk_agents_toggle_aria": "Переключить статус SDK agents, выполняется: {{count}}",
    "sdk_agents_badge_aria": "SDK agents выполняется: {{count}}",
    "sdk_agents_panel_title": "Agents",
    "sdk_agents_close": "Закрыть панель Agents",
    "sdk_agents_running_count": "Выполняется: {{count}}",
    "sdk_agents_active_section": "Активные",
    "sdk_agents_recent_section": "Недавние",
    "sdk_agents_diagnostics_section": "Диагностика",
    "sdk_agents_provider_claude": "Claude SDK",
    "sdk_agents_provider_codex": "Codex SDK",
    "sdk_agents_provider_qwen": "Qwen",
    "sdk_agents_provider_gemini": "Gemini SDK",
    "sdk_agents_provider_unknown": "SDK agent",
    "sdk_agents_status_pending": "Ожидает",
    "sdk_agents_status_running": "Выполняется",
    "sdk_agents_status_complete": "Завершено",
    "sdk_agents_status_error": "Ошибка",
    "sdk_agents_status_interrupted": "Прервано",
    "sdk_agents_status_stale": "Устарело",
    "sdk_agents_status_unknown": "Неизвестно",
    "sdk_agents_id": "ID",
    "sdk_agents_model": "Модель",
    "sdk_agents_started_at": "Старт",
    "sdk_agents_duration": "Длительность",
    "sdk_agents_tokens": "Токены",
    "sdk_agents_prompt": "Prompt",
    "sdk_agents_result": "Результат",
    "sdk_agents_running_children": "Дочерних agent выполняется: {{count}}",
    "sdk_agents_receiver_count": "Получателей: {{count}}",
    "sdk_agents_diagnostic_unsupported_runtime": "runtime не предоставляет статус agents",
    "sdk_agents_diagnostic_unknown_runtime_support": "Поддержка runtime неизвестна",
    "sdk_agents_diagnostic_malformed_payload": "Некорректные метаданные agent",
    "sdk_agents_diagnostic_missing_id": "Нет идентификатора agent",
    "sdk_agents_diagnostic_unknown_state": "Неизвестное состояние provider",
    "sdk_agents_diagnostic_stale_without_terminal": "Статус устарел до завершения",
    "sdk_agents_diagnostic_snapshot_only": "provider передает только snapshot-статус",
    "sdk_agents_diagnostic_generic": "Диагностика статуса agent",
    "html_preview": "Отрисовать HTML",
    "html_preview_title": "Отрисованный предпросмотр HTML",
    "html_preview_open_new_window": "Открыть предпросмотр в новом окне",
    "html_preview_too_large": "HTML-файл слишком большой для безопасной отрисовки.",
    "html_preview_unavailable": "Предпросмотр HTML недоступен",
    "html_preview_frame": "Отрисованный предпросмотр HTML",
    "tool_fold_more": "... {{count}} строк ...",
    "tool_fold_collapse": "свернуть",
    "tool_group_more": "··· ещё {{count}}",
    "tool_group_collapse": "▲ свернуть",
    "tool_calls_toggle_show": "Показывать инструменты и рассуждения",
    "tool_calls_toggle_hide": "Скрывать инструменты и рассуждения",
    "tool_calls_toggle_undecided": "Выберите, как показывать активность ИИ",
    "tool_calls_choose_prompt": "Выберите вид ↓",
    "memory_summary_sync": "Синхронизировать последние summary",
    "memory_summary_sync_busy": "Синхронизация summary...",
    "memory_summary_sync_instruction": "Только синхронизация контекста. Усвой эти последние summary как фоновый контекст. Не выполняй задачи, не изменяй файлы, не вызывай инструменты и не отвечай на это сообщение; жди следующую инструкцию пользователя.",
    "memory_summary_sync_heading": "Последние summary ({{count}}/{{limit}}, до ~{{maxChars}} символов):",
    "user_message_expand": "Показать полностью",
    "user_message_collapse": "Свернуть",
    "tool_chooser_title": "Как показывать активность ИИ?",
    "tool_chooser_subtitle": "Вызовы инструментов, изменения файлов и рассуждения дают больше деталей, но загромождают вид.",
    "tool_chooser_simple_label": "Просто",
    "tool_chooser_simple_hint": "Только ответы ИИ",
    "tool_chooser_developer_label": "Разработчик",
    "tool_chooser_developer_hint": "Инструменты, файлы, рассуждения",
    "tool_chooser_footnote": "Переключайте в любой момент по значку гаечного ключа.",
    "new_file": "Новый файл",
    "new_file_name": "Имя файла",
    "new_folder": "Новая папка",
    "new_folder_name": "Имя папки",
    "create": "Создать",
    "external_link_title": "Открыть внешнюю ссылку",
    "external_link_warning": "Эта ссылка была сгенерирована ИИ-агентом. Вы несёте ответственность за риски, связанные с посещением внешних сайтов.",
    "external_link_cancel": "Отмена",
    "external_link_open": "Открыть ссылку",
    "zoom_title": "Сообщение",
    "zoom_copy_all": "Копировать всё",
    "zoom_hint": "Удерживайте, чтобы выделить текст. Передвиньте маркеры, затем скопируйте.",
    "tool_detail_toggle": "подробно",
    "tool_detail_input": "ввод",
    "tool_detail_output": "вывод",
    "tool_detail_meta": "мета",
    "tool_detail_raw": "raw",
    "pinned_last_sent_label": "Последнее отправленное",
    "pinned_last_sent_aria": "Перейти к последнему отправленному сообщению",
    "memory_context_title": "Связанная история",
    "memory_context_startup_title": "Исторический контекст · внедрён",
    "memory_context_summary": "{{count}} найдено",
    "memory_context_query": "Запрос: {{query}}",
    "memory_context_score": "Оценка {{score}}",
    "memory_context_startup_reason": "Вставлено при запуске сессии",
    "memory_context_section_preferences": "Предпочтения ({{count}})",
    "memory_context_section_durable": "Долгосрочная память ({{count}})",
    "memory_context_section_recent": "Недавние сводки ({{count}})",
    "memory_context_section_master": "Основные сводки ({{count}})",
    "memory_context_section_other": "Другой контекст ({{count}})",
    "memory_context_collapse_bottom": "Свернуть",
    "memory_context_status_no_matches": "Связанная память не найдена",
    "memory_context_status_deduped_recently": "Найдено {{count}} связанных записей, но они уже недавно вставлялись",
    "memory_context_status_deduped_recently_detail": "Найдено {{count}} связанных записей. {{deduped}} были пропущены, потому что уже вставлялись в недавних ходах.",
    "memory_context_status_skipped_template_prompt": "Поиск памяти пропущен для внутреннего/шаблонного промпта",
    "memory_context_status_skipped_template_prompt_detail": "Это сообщение совпало со встроенным workflow или шаблонным промптом, поэтому поиск связанной памяти был намеренно пропущен.",
    "memory_context_status_skipped_short_prompt": "Поиск памяти пропущен, потому что промпт слишком короткий",
    "memory_context_status_skipped_short_prompt_detail": "Короткие промпты недостаточно конкретны для надёжного поиска связанной памяти.",
    "memory_context_status_skipped_control_message": "Поиск памяти пропущен для командного сообщения",
    "memory_context_status_skipped_control_message_detail": "Слэш-команды не запускают поиск связанной памяти.",
    "memory_context_status_failed": "Поиск связанной памяти временно недоступен",
    "memory_context_status_failed_detail": "Сообщение было отправлено, но в этот раз поиск памяти не сработал.",
    "file_change_title": "Изменения файлов ({{count}})",
    "file_change_patch_count": "{{count}} патч(ей)",
    "file_change_provider_claude_code": "Claude Code",
    "file_change_provider_opencode": "OpenCode",
    "file_change_provider_codex_sdk": "Codex SDK",
    "file_change_provider_qwen": "Qwen",
    "file_change_provider_gemini": "Gemini",
    "file_change_operation_create": "создать",
    "file_change_operation_update": "обновить",
    "file_change_operation_delete": "удалить",
    "file_change_operation_rename": "переименовать",
    "file_change_operation_unknown": "изменение",
    "file_change_operation_mixed": "смешанное",
    "file_change_confidence_exact": "точный",
    "file_change_confidence_derived": "производный",
    "file_change_confidence_coarse": "грубый",
    "file_change_confidence_mixed": "смешанная точность",
    "file_change_removed": "Удалено",
    "file_change_added": "Добавлено",
    "file_change_truncated": "обрезано",
    "file_change_no_before": "(нет исходного текста)",
    "file_change_no_after": "(нет нового текста)",
    "file_change_derived_no_preview": "(предпросмотр недоступен)",
    "file_change_coarse_hint": "Доступен путь к файлу, но diff не предоставлен.",
    "file_change_renamed_from": "{{oldPath}} → {{newPath}}",
    "font": {
      "dialogLabel": "Шрифт",
      "typeLabel": "Тип шрифта",
      "codeTab": "Код",
      "cjkTab": "CJK",
      "familyLabel": "Шрифт кода",
      "cjkFamilyLabel": "Шрифт CJK",
      "allBuiltInCjk": "Показать все встроенные шрифты CJK",
      "cjkFamilies": {
        "system-cjk": "Системный CJK",
        "pingfang-sc": "PingFang SC",
        "songti-sc": "Songti SC",
        "kaiti-sc": "Kaiti SC",
        "stheiti": "STHeiti",
        "stsong": "STSong",
        "stkaiti": "STKaiti",
        "stfangsong": "STFangsong",
        "microsoft-yahei": "Microsoft YaHei",
        "simsun": "SimSun",
        "nsimsun": "NSimSun",
        "dengxian": "DengXian",
        "kaiti": "KaiTi",
        "fangsong": "FangSong",
        "microsoft-jhenghei": "Microsoft JhengHei"
      }
    }
  },
  "session": {
    "restart": "↺ Перезапустить",
    "restart_plain": "Перезапустить",
    "confirm_restart": "Подтвердить перезапуск?",
    "new": "+ Новая",
    "start_fresh": "Начать заново",
    "confirm_new": "Подтвердить создание?",
    "tab_pin": "📌 Закрепить",
    "tab_unpin": "📌 Открепить",
    "pin_plain": "Закрепить",
    "unpin_plain": "Открепить",
    "stop": "✕ Остановить",
    "stop_session": "Остановить сеанс",
    "stop_main_title": "Остановить основной сеанс?",
    "stop_main_body": "{{project}} — основной сеанс. Остановка завершит все его процессы tmux. Это действие нельзя отменить.",
    "really_stop_project": "⚠ ДЕЙСТВИТЕЛЬНО остановить {{project}}?",
    "stop_plain": "Остановить",
    "unpin_to_stop": "Сначала открепите вкладку",
    "state_stop_requested": "Остановка запрошена",
    "state_stopping": "Остановка...",
    "state_compacting": "Сжатие контекста...",
    "state_idle": "Agent простаивает — ожидание ввода",
    "state_running": "Agent работает...",
    "state_started": "Сессия запущена",
    "state_starting": "Запуск сессии...",
    "state_stopped": "Сессия остановлена",
    "confirm_stop": "Подтвердить остановку?",
    "confirm_stop_dialog": "Вы уверены, что хотите остановить эту сессию? Это действие нельзя отменить.",
    "confirm_sub_stop_2": "⚠ ТОЧНО остановить {{label}}?",
    "confirm_sub_restart_2": "⚠ ТОЧНО перезапустить {{label}}?",
    "confirm_sub_new_2": "⚠ ТОЧНО заменить {{label}}?",
    "confirm_sub_stop_dialog": "Остановить подсессию?\n\nТип: {{type}}\nМетка: {{label}}\nСессия: {{name}}\n\nАгент будет завершён. Это действие нельзя отменить.",
    "confirm_sub_restart_dialog": "Перезапустить подсессию?\n\nТип: {{type}}\nМетка: {{label}}\nСессия: {{name}}\n\nАгент будет перезапущен.",
    "confirm_sub_new_dialog": "Создать новую подсессию?\n\nТип: {{type}}\nМетка: {{label}}\nСессия: {{name}}\n\nТекущая сессия будет заменена.",
    "confirm_restart_dialog": "Вы уверены, что хотите перезапустить эту сессию?",
    "confirm_new_dialog": "Вы уверены, что хотите начать новую сессию? Текущая сессия будет заменена.",
    "settings": "Настройки сессии",
    "type": "Тип",
    "label": "Метка",
    "workingDir": "Рабочий каталог",
    "parentSession": "Родительская сессия",
    "rename": "✎ Переименовать",
    "rename_plain": "Переименовать",
    "no_session": "Нет сессии",
    "send_queued": "Переподключение… (отправка в очереди)",
    "transport_send_queued": "Поставлено в очередь — будет отправлено после текущего ответа",
    "transport_send_queued_collapsed": "В очереди: {{count}} · показано только последнее",
    "transport_send_queued_count": "В очереди: {{count}}",
    "send_placeholder": "Отправить в {{name}}…",
    "send_placeholder_desktop_upload": "{{placeholder}} Поддерживается быстрая загрузка нескольких файлов вставкой или перетаскиванием",
    "actions": "Действия с сессией",
    "new_btn": "Новая сессия",
    "clone": {
      "menu": "Копировать группу сессий",
      "title": "Копировать группу сессий",
      "source": "Исходная сессия",
      "targetProjectName": "Имя целевого проекта",
      "targetProjectPlaceholder": "my-project-copy",
      "finalSessionName": "Итоговая сессия",
      "previewUnavailable": "Введите имя проекта",
      "preserveDirectories": "По умолчанию: клонированные сеансы используют исходные рабочие каталоги",
      "overrideDirectories": "Использовать новый рабочий каталог для клонированных сеансов",
      "cwdOverride": "Новый рабочий каталог",
      "cwdOverridePlaceholder": "/work/new-checkout",
      "browseCwd": "Выбрать рабочий каталог",
      "daemonHostValidation": "Рабочие каталоги проверяются на хосте daemon до создания ресурсов.",
      "runningWarning": "Скопированная группа начнется с чистого состояния. Ожидающие сообщения, история терминала и выполняемая работа из источника не копируются.",
      "capabilityMissing": "Подключенный daemon еще не сообщил о поддержке копирования групп сессий. Обновите или переподключите daemon и повторите попытку.",
      "submit": "Копировать группу",
      "submitting": "Копирование...",
      "blankProject": "Имя целевого проекта обязательно.",
      "notConnected": "Подключитесь к серверу перед копированием группы сессий.",
      "daemonOffline": "Daemon не в сети. Подключите его перед копированием группы сессий.",
      "missingServer": "Выберите сервер перед копированием группы сессий.",
      "cwdRequired": "Введите новый рабочий каталог или сохраните исходные каталоги.",
      "progress": "Статус: {{state}}",
      "subSessionProgress": "Подсессии: скопировано {{created}}/{{total}}",
      "operationId": "Операция: {{operationId}}",
      "success": "Скопированная группа создана как {{session}}. Переключаемся на нее.",
      "cleanupRequired": "Требуется очистка",
      "cleanupRequiredBody": "Некоторые созданные ресурсы могут требовать ручной очистки. Проверьте сведения daemon или сервера перед повтором.",
      "cleanupResourceDetail": "{{kind}}: {{id}}",
      "warningsTitle": "Предупреждений: {{count}}",
      "skippedMembersTitle": "Пропущено участников: {{count}}",
      "skippedMemberDetail": "{{session}}: {{reason}}",
      "skippedCronJobs": "Не скопировано запланированных задач: {{count}}.",
      "skippedOrchestrationRuns": "Не скопировано обсуждений/оркестраций: {{count}}.",
      "state": {
        "validating": "Проверка",
        "reserving": "Резервирование имени",
        "creating_main": "Создание основной сессии",
        "creating_subs": "Создание подсессий",
        "writing_db": "Запись серверных данных",
        "provider_create": "Создание сессий провайдера",
        "writing_pref": "Копирование настроек Team",
        "committing": "Фиксация",
        "rolling_back": "Откат",
        "succeeded": "Успешно",
        "failed": "Ошибка",
        "cancelled": "Отменено",
        "cleanup_required": "Требуется очистка"
      },
      "errorCode": {
        "invalid_request": "Запрос копирования недействителен.",
        "forbidden": "Копировать группы сессий могут только владельцы и администраторы.",
        "unsupported_command": "daemon еще не сообщил о поддержке копирования групп сессий. Обновите или переподключите его и повторите попытку.",
        "source_not_found": "Исходная сессия не найдена.",
        "source_not_role_compatible": "Можно копировать только совместимые основные brain-сессии.",
        "blank_target_project": "Имя целевого проекта обязательно.",
        "name_taken": "Это имя целевой сессии уже используется.",
        "invalid_cwd": "Рабочий каталог нельзя использовать на хосте daemon.",
        "incomplete_clone_spec": "У выполняющейся дочерней сессии не хватает копируемых настроек запуска.",
        "unsupported_session_type": "Одну из сессий пока нельзя копировать.",
        "p2p_config_invalid": "Не удалось скопировать конфигурацию Team.",
        "persist_failed": "Не удалось сохранить копию.",
        "idempotency_conflict": "Этот ключ повтора уже использован для другого запроса копирования.",
        "server_commit_failed": "Сервер не смог зафиксировать скопированные сессии.",
        "server_p2p_commit_failed": "Сервер не смог скопировать настройки Team.",
        "cancelled": "Копирование отменено.",
        "cleanup_required": "Перед повтором нужна ручная очистка.",
        "internal_error": "Копирование неожиданно завершилось ошибкой."
      },
      "warningCode": {
        "running_source_excluded_state": "Выполняемая работа источника исключена",
        "p2p_prompt_session_reference": "Свободный текст Team может все еще ссылаться на источник",
        "p2p_skipped_participant_dropped": "Пропущенный участник Team удален из копии",
        "skipped_member": "Участник пропущен",
        "scheduled_work_skipped": "Запланированная работа не скопирована",
        "p2p_config_missing": "Не найдена конфигурация Team для копирования",
        "rollback_partial": "Откат выполнен частично"
      },
      "cleanupResourceKind": {
        "daemon_session": "сессия daemon",
        "daemon_p2p_scope": "конфигурация Team daemon",
        "server_db_session": "строка сессии сервера",
        "server_p2p_pref": "настройка Team сервера",
        "provider_session": "сессия провайдера"
      },
      "skippedReason": {
        "stopped": "остановлена",
        "error": "ошибка",
        "closed": "закрыта",
        "hidden": "скрыта",
        "nested": "вложенная дочерняя",
        "server_only_orphan": "сирота только на сервере",
        "unsupported": "не поддерживается",
        "incomplete_spec": "неполные настройки"
      }
    },
    "agentType": {
      "openclaw": "OpenClaw",
      "qwen": "Qwen Code",
      "claude_code_sdk": "Claude Code SDK",
      "codex_sdk": "Codex SDK",
      "claude_code_cli": "Claude Code CLI",
      "codex_cli": "Codex CLI",
      "copilot_sdk": "Copilot",
      "cursor_headless": "Cursor",
      "gemini_sdk": "Gemini SDK",
      "kimi_sdk": "Kimi Code"
    },
    "agentGroup": {
      "transport_sdk": "SDK",
      "cli_process": "CLI"
    },
    "openclaw_not_connected": "не подключено",
    "openclaw_connect_hint": "Шлюз OpenClaw не подключён. Запустите следующую команду на машине с демоном:",
    "sessionMode": "Режим сессии",
    "newSession": "Новая сессия",
    "bindExisting": "Привязать существующую OC сессию",
    "selectSession": "Выбрать сессию",
    "loadingSessions": "Загрузка сессий...",
    "noSessions": "Нет доступных сессий",
    "description": "Описание",
    "descriptionPlaceholder": "Роль или цель сессии (необязательно)",
    "sessionKey": "Ключ сессии",
    "autoGenerate": "Автогенерация",
    "codex_ctx_short": "конт",
    "codex_5h_short": "5ч",
    "codex_wk_short": "нед",
    "codex_ctx_title": "Контекст осталось {{percent}}%",
    "codex_limit_title": "{{label}} осталось {{percent}}% · сброс {{reset}}",
    "provider_plan_title": "План: {{value}}",
    "provider_quota_title": "Квота: {{value}}",
    "weekly_quota_authorize": "Показать недельный лимит",
    "weekly_quota_authorize_hint": "Разрешить чтение локального токена Claude для показа недельного (7-дневного) лимита",
    "weekly_quota_confirm": "Будет прочитан локальный токен входа Claude для получения недельного (7-дневного) лимита. Авторизовать?",
    "provider_quota_usage_title": "Использование квоты: {{value}}",
    "history_loading_label": "История",
    "history_step_cache": "кэш",
    "history_step_text_tail": "быстрый хвост",
    "history_step_daemon": "daemon",
    "history_step_http": "HTTP добор",
    "history_step_older": "старые",
    "provider_plan_free": "Бесплатно",
    "provider_plan_paid": "Платно",
    "provider_plan_byo": "Свой ключ",
    "qwen_tier_free": "Бесплатно",
    "qwen_tier_paid": "Платно",
    "qwen_tier_byo": "Свой ключ",
    "qwen_source_title": "Источник Qwen: {{tier}}",
    "qwen_model_title": "Источник Qwen: {{tier}} · Модель: {{model}}",
    "p2p_tag": "Team",
    "thinking": "Уровень",
    "thinking_title": "Уровень: {{value}}",
    "supervision": {
      "title": "Контроль сессии",
      "help": "Сначала задайте глобальные значения по умолчанию для новых Auto-сессий, а затем при необходимости переопределите их для текущей сессии.",
      "globalDefaultsTitle": "Глобальные значения по умолчанию",
      "globalDefaultsHelp": "Используются для автозаполнения новых transport-сессий с Auto. Здесь сохраняются backend, модель и timeout supervisor по умолчанию.",
      "sessionConfigTitle": "Текущая сессия",
      "sessionConfigHelp": "Применяется только к текущей сессии. Здесь backend, модель и timeout могут переопределять глобальные значения, а режим audit и пользовательские инструкции остаются только для этой сессии.",
      "intro": {
        "title": "Что делает Auto",
        "howToUseTitle": "Как использовать",
        "howToUseBody": "Выберите Off, Supervised или Supervised + audit. Затем укажите бэкенд и модель супервизора, сохраните настройки и оставьте Auto включенным для этой сессии. Режим audit добавляет автоматическую проверку и лимит на количество циклов доработки.",
        "purposeTitle": "Для чего это нужно",
        "purposeBody": "Auto позволяет модели-супервизору решать, завершена ли текущая задача, нужно ли автоматически продолжить работу или требуется участие человека. Режим audit добавляет дополнительную проверку реализации перед возвратом управления.",
        "howItWorksTitle": "Как это работает",
        "howItWorksBody": "Когда сессия переходит в состояние idle, IM.codes отправляет недавний контекст задачи настроенному супервизору, разбирает структурированное решение и затем либо останавливается, либо отправляет продолжение, либо переходит к ручному режиму. Если включен audit, завершенный ответ также может пройти автоматический цикл проверки и доработки.",
        "expandHint": "Показать подробности",
        "collapseHint": "Свернуть"
      },
      "mode": {
        "off": "Выкл.",
        "supervised": "Контроль",
        "supervised_audit": "Контроль+аудит"
      },
      "backend": "Бэкенд",
      "model": "Модель",
      "timeout": "Тайм-аут (с)",
      "selectBackend": "Выберите бэкенд",
      "selectModel": "Выберите модель",
      "customInstructionsLabel": "Пользовательские инструкции",
      "customInstructionsPlaceholder": "Например: требовать тесты и проверку перед отметкой задачи как завершённой.",
      "customInstructionsHelp": "Необязательно. Эти инструкции добавляются в supervision и continue prompts Auto только для этой сессии.",
      "globalCustomInstructionsLabel": "Глобальные пользовательские инструкции",
      "globalCustomInstructionsPlaceholder": "Например: всегда предпочитай тесты, а не закомментированный падающий код.",
      "globalCustomInstructionsHelp": "Необязательно. Применяется ко всем сессиям с включённым Auto, если в сессии ниже не установлен переопределяющий флажок.",
      "customInstructionsOverrideLabel": "Переопределить глобальные инструкции",
      "customInstructionsOverrideHelp": "Если отмечено, используются только инструкции этой сессии выше. Если нет — глобальные добавляются в начало через пустую строку.",
      "customInstructionsMergedPreviewHeading": "Объединённые инструкции, отправленные супервизору:",
      "presetLabel": "Пресет (env-пакет)",
      "presetHelp": "Направляет supervisor через пресет-эндпоинт с собственным base URL, API-ключом и зафиксированной моделью. Пресеты настраиваются в панели Shared Context.",
      "presetNone": "(нет)",
      "auditMode": {
        "audit": "Аудит",
        "review": "Ревью",
        "audit_plan": "Аудит → план",
        "review_plan": "Ревью → план",
        "audit_review_plan": "Аудит → ревью → план"
      },
      "selectAuditMode": "Выберите режим аудита",
      "maxAuditLoops": "Макс. циклов аудита",
      "maxAutoContinueStreak": "Макс. повторяющихся auto-continue",
      "maxAutoContinueStreakHelp": "Останавливает Auto после такого числа подряд идущих continue одного типа. 0 = без лимита.",
      "maxAutoContinueTotal": "Жесткий лимит auto-continue",
      "maxAutoContinueTotalHelp": "Абсолютный предел всех auto-continue в рамках одного прогона задачи. 0 = без лимита.",
      "summaryTitle": "Итоговый контроль",
      "summaryMode": "Режим: {{value}}",
      "summaryBackendModel": "Бэкенд: {{backend}} · Модель: {{model}}",
      "summaryUnset": "не задано",
      "summaryDisabled": "Контроль выключен",
      "summaryTimeout": "Тайм-аут: {{value}}",
      "summaryContinueLimits": "Лимиты continue: серия {{streak}} · жесткий {{total}}",
      "summaryCustomInstructions": "Пользовательские инструкции: {{value}}",
      "summaryCustomInstructionsSet": "заданы",
      "summaryAudit": "Аудит: {{auditMode}} · циклов {{loops}}",
      "summaryMeta": "Промпт {{promptVersion}}, исправление {{repairVersion}}, повторы парсинга {{parseRetries}}, task-run {{taskRunVersion}}",
      "disabledHint": "Контроль доступен только для transport-сессий.",
      "unsupported": "Настройки контроля недоступны для process-сессий.",
      "validation": {
        "backendRequired": "Выберите бэкенд контроля.",
        "modelRequired": "Выберите или введите модель контроля.",
        "modelInvalid": "Модель недопустима для {{backend}}.",
        "auditModeRequired": "Выберите режим аудита."
      },
      "modeLabel": "Режим",
      "auditModeLabel": "Режим аудита",
      "invalidStoredConfig": "Сохранённая конфигурация контроля недействительна. Автоматизация останется выключенной, пока вы её не исправите и не сохраните.",
      "quickLabel": "Авто",
      "quickTitle": "Авто режим"
    },
    "approval": {
      "pending": "Требуется одобрение",
      "allow": "Разрешить",
      "deny": "Отклонить",
      "tool": "{{tool}} требует одобрения"
    },
    "workingDirPlaceholder": "~/projects/myapp"
  },
  "server": {
    "upgrade_daemon": "↑ Обновить Daemon",
    "upgrade_all": "↑ Обновить все устройства",
    "delete": "✕ Удалить сервер",
    "upgrade_sent": "Команда обновления отправлена в \"{{name}}\". Daemon установит последнюю версию и перезапустится.",
    "upgrade_failed": "Не удалось отправить команду обновления. Daemon может быть отключён.",
    "delete_title": "Удалить сервер: {{name}}",
    "delete_warning": "Это удалит все привязки и записи сессий с сервера, а также уведомит daemon об остановке и удалении локальных учётных данных.",
    "delete_tmux_note": "Сессии tmux не будут закрыты",
    "delete_tmux_suffix": ", но daemon больше не будет запускаться автоматически.",
    "delete_confirm_prompt": "Введите имя сервера для подтверждения удаления:",
    "delete_confirm": "Подтвердить удаление"
  },
  "quick_input": {
    "title": "Быстрый ввод",
    "commands": "Быстрые команды",
    "phrases": "Быстрые фразы",
    "history": "История",
    "this_session": "Эта сессия",
    "all": "Все",
    "no_history_session": "История для этой сессии отсутствует",
    "no_history": "Истории пока нет — сообщения сохраняются автоматически",
    "clear_history": "Очистить историю",
    "add_command": "＋ Команда",
    "add_phrase": "＋ Фраза",
    "label_command": "Команда",
    "label_phrase": "Фраза",
    "placeholder_phrase": "исправить эту проблему",
    "newer": "← Новее",
    "older": "Старее →",
    "loading": "Загрузка…",
    "tab_quick": "Быстро",
    "tab_files": "Файлы",
    "confirm_delete": "Удалить этот элемент?"
  },
  "file_browser": {
    "title_dir": "Выбрать директорию",
    "title_file": "Выбрать файлы",
    "select": "Выбрать",
    "insert": "Вставить {{count}}",
    "browse": "Обзор",
    "show_hidden": "Скрытые",
    "this_pc": "Этот компьютер",
    "home": "Домой",
    "selected_count": "Выбрано {{count}}",
    "timeout": "Превышено время ожидания",
    "timeout_detail": "Не удалось прочитать каталог. Возможно, это вызвано медленными или недоступными сетевыми дисками.",
    "preview_loading": "Загрузка…",
    "preview_too_large": "Файл слишком большой для предпросмотра (> 100 МБ)",
    "preview_error": "Предпросмотр недоступен",
    "preview_binary": "Двоичный файл — предпросмотр недоступен",
    "preview_video_unsupported": "Ваш браузер не поддерживает этот видеоформат.",
    "mkdir_failed": "Не удалось создать папку",
    "create_file_failed": "Не удалось создать файл",
    "file_exists": "Файл уже существует",
    "view_diff": "Diff",
    "view_source": "Источник",
    "view_rendered": "Отрисовка",
    "tab_files": "Файлы",
    "tab_changes": "Изменения",
    "changes_title": "Изменения ({{count}})",
    "no_changes": "Нет изменений"
  },
  "toast": {
    "finished": "завершено",
    "upgrade_blocked_title": "Обновление заблокировано",
    "upgrade_blocked_p2p_active": "Team всё ещё выполняется. Остановите его перед обновлением daemon.",
    "upgrade_blocked_toolchain_unavailable": "На хосте daemon отсутствует Node (toolchain удалён). Переустановите Node — автообновление отключено до этого."
  },
  "discussion": {
    "role_critic": "Критик",
    "role_pragmatist": "Прагматик",
    "role_innovator": "Новатор",
    "role_custom": "Пользовательская...",
    "arbiter": "Арбитр",
    "arbiter_active": "⚖️ Арбитр",
    "starting": "Запуск…",
    "start_failed_title": "Не удалось запустить обсуждение",
    "start_failed_offline": "Нет подключения — переподключитесь и повторите попытку.",
    "dialog_title": "Начать обсуждение",
    "start_button": "Начать обсуждение",
    "field_topic": "Тема",
    "topic_placeholder": "Опишите, что должны обсудить агенты…",
    "field_cwd": "Рабочий каталог",
    "field_participants": "Участники",
    "add_participant": "+ Добавить",
    "field_max_rounds": "Макс. раундов",
    "team_label": "Команда",
    "complete_status": "Завершено",
    "failed_status": "Ошибка",
    "error": {
      "missing_fields": "Отсутствуют обязательные поля (тема и не менее двух участников).",
      "generic": "Не удалось запустить обсуждение. Повторите попытку."
    }
  },
  "new_session": {
    "project_required": "Название проекта обязательно",
    "dir_required": "Рабочий каталог обязателен",
    "not_connected": "Не подключено к daemon",
    "daemon_offline": "Daemon не в сети — убедитесь, что imcodes daemon запущен",
    "start": "Запустить",
    "starting": "Запуск...",
    "timeout": "Истекло время ожидания запуска сессии. Проверьте журналы daemon.",
    "title": "Новая сессия",
    "project_name": "Имя проекта",
    "working_directory": "Рабочая директория",
    "browse": "Обзор",
    "agent_type": "Тип агента",
    "agent_flavor_cli": "CLI: нативный интерфейс для тех, кто предпочитает оригинальный UI. В режиме чата нет стриминга.",
    "agent_flavor_sdk": "SDK: поддерживает стриминг и использует более простой интерфейс.",
    "qwen_provider_hint": "Если нужен сторонний Coding Plan, выберите Qwen Code.",
    "qwen_provider_selected_hint": "Qwen Code может использовать сторонние провайдеры Coding Plan с Anthropic-совместимым API через пресеты API Provider ниже.",
    "custom_provider_sdk": "SDK пользовательского провайдера",
    "custom_provider_sdk_help": "Использует транспорт Qwen SDK как слой совместимости; ниже выберите пресет API Provider.",
    "custom_provider_preset": "Пресет пользовательского провайдера",
    "custom_provider_preset_required": "Выберите или добавьте пресет API Provider для SDK пользовательского провайдера.",
    "compatible_api_via_qwen": "Совместимый API (через Qwen)",
    "api_provider": "Провайдер API",
    "api_provider_add_edit": "+ Добавить / Изменить",
    "api_provider_default": "По умолчанию (Anthropic)",
    "api_provider_default_help": "По умолчанию (Anthropic) — нажмите \"+ Добавить / Изменить\", чтобы настроить",
    "api_provider_import_json": "Импорт JSON",
    "api_provider_export_json": "Экспорт JSON",
    "api_provider_import_error": "Не удалось импортировать JSON preset из буфера обмена",
    "api_provider_export_success": "JSON preset скопирован в буфер обмена",
    "api_provider_export_error": "Не удалось скопировать JSON preset в буфер обмена"
  },
  "api_key": {
    "copy": "Копировать",
    "copied": "Скопировано!",
    "label_placeholder": "Метка (необязательно)",
    "generate": "Сгенерировать ключ",
    "generating": "Генерация...",
    "revoke": "Отозвать",
    "save_once": "Сохраните этот ключ — он больше не будет показан",
    "raw_key": "API-ключ",
    "bind_url": "URL привязки",
    "bind_command": "Команда привязки",
    "copy_bind_command": "Скопировать команду",
    "dismiss": "Закрыть"
  },
  "getting_started": {
    "step1_pending": "Шаг 1: Сгенерируйте API-ключ",
    "step1_done": "✓ Шаг 1: API-ключ готов"
  },
  "language": {
    "label": "Язык",
    "en": "English",
    "zh_CN": "中文（简体）",
    "zh_TW": "中文（繁體）",
    "es": "Español",
    "ru": "Русский",
    "ja": "日本語",
    "ko": "한국어"
  },
  "login": {
    "subtitle": "Удалённое управление AI-агентами программирования",
    "passkey_signin": "Войти с Passkey",
    "passkey_create": "Создать аккаунт с Passkey",
    "passkey_register_hint": "Введите имя и зарегистрируйте ключ устройства (Face ID, Touch ID, Windows Hello…)",
    "passkey_register_btn": "Зарегистрировать Passkey",
    "passkey_error": "Аутентификация с Passkey не удалась. Попробуйте снова.",
    "passkey_not_found": "Passkey для этого сайта не найден. Зарегистрируйтесь или войдите через GitHub.",
    "display_name_placeholder": "Ваше имя (напр.: Alice)",
    "device_name_placeholder": "Название устройства (необязательно, напр.: MacBook Pro)",
    "or": "или",
    "github_signin": "Войти через GitHub",
    "password_signin": "Войти с паролем",
    "username_placeholder": "Имя пользователя",
    "password_placeholder": "Пароль",
    "signin": "Войти",
    "remember_password": "Запомнить пароль на этом устройстве",
    "invalid_credentials": "Неверное имя пользователя или пароль",
    "account_pending": "Ваш аккаунт ожидает одобрения администратором. Пожалуйста, свяжитесь с администратором.",
    "account_disabled": "Ваш аккаунт отключён. Пожалуйста, свяжитесь с администратором.",
    "must_change_password": "Необходимо сменить пароль перед продолжением",
    "new_password_placeholder": "Новый пароль",
    "confirm_password_placeholder": "Подтвердите новый пароль",
    "change_password_btn": "Сменить пароль",
    "passwords_mismatch": "Пароли не совпадают",
    "password_too_short": "Пароль должен содержать не менее 8 символов",
    "password_missing_uppercase": "Пароль должен содержать хотя бы одну заглавную букву",
    "password_missing_lowercase": "Пароль должен содержать хотя бы одну строчную букву",
    "password_missing_digit": "Пароль должен содержать хотя бы одну цифру",
    "password_register": "Создать аккаунт с паролем",
    "password_register_btn": "Создать аккаунт",
    "password_register_hint": "Выберите имя пользователя и надёжный пароль (не менее 8 символов, заглавные, строчные буквы и цифра).",
    "username_taken": "Это имя пользователя уже занято",
    "registration_disabled": "Регистрация в данный момент отключена",
    "invalid_username_format": "Имя пользователя должно быть 3-32 символа, начинаться и заканчиваться буквой или цифрой",
    "nonce_exchange_failed": "Аутентификация завершена, но подключение не удалось. Попробуйте снова.",
    "native_callback_fallback": "Нажмите здесь, если перенаправление не произошло автоматически",
    "native_status_getting_challenge": "Получение challenge…",
    "native_status_authenticating": "Аутентификация…",
    "native_status_getting_api_key": "Получение API-ключа…",
    "native_status_redirecting": "Перенаправление…",
    "native_status_creating_passkey": "Создание passkey…",
    "native_status_registering": "Регистрация…",
    "native_status_saving": "Сохранение…",
    "native_status_logging_in": "Вход…"
  },
  "serverSetup": {
    "title": "Выбор сервера",
    "description": "Введите адрес вашего сервера IM.codes",
    "placeholder": "https://your-server.com",
    "connect": "Подключиться",
    "useDefault": "Использовать сервер по умолчанию",
    "verifying": "Проверка...",
    "error": "Не удаётся подключиться к серверу. Проверьте адрес и попробуйте снова.",
    "errorNotHttps": "URL сервера должен использовать HTTPS",
    "changeServer": "Сменить сервер",
    "addServer": "+ Добавить сервер",
    "httpWarning": "Внимание: HTTP-соединения небезопасны. Используйте HTTPS для серверов, отличных от localhost."
  },
  "passkey": {
    "title": "Passkey",
    "none": "Нет зарегистрированных Passkey",
    "add": "Добавить Passkey",
    "add_error": "Не удалось добавить Passkey. Попробуйте снова.",
    "delete_error": "Не удалось удалить Passkey.",
    "unnamed": "Безымянное устройство",
    "added": "Добавлено",
    "last_used": "последнее использование",
    "device_name_placeholder": "Название устройства (необязательно)"
  },
  "account": {
    "delete_title": "Удалить аккаунт",
    "delete_warning": "Это действие необратимо. Все ваши серверы, сессии, API-ключи, Passkey и другие данные будут удалены навсегда.",
    "delete_btn": "Удалить аккаунт",
    "delete_confirm_prompt": "Введите DELETE для подтверждения удаления аккаунта:",
    "delete_confirm": "Удалить навсегда",
    "delete_error": "Не удалось удалить аккаунт. Попробуйте снова."
  },
  "voice": {
    "listening": "Слушаю...",
    "paused": "Пауза",
    "speak_now": "Говорите...",
    "voice_input": "Голосовой ввод",
    "stop_voice": "Остановить голосовой ввод",
    "send": "Отправить",
    "mic_permission_failed": "Не удалось запустить — проверьте разрешения микрофона/распознавания речи в настройках",
    "error": "Ошибка голоса: {{error}}"
  },
  "p2p": {
    "final_original_request_reminder": "Не ограничивайся только сводкой обсуждения. После синтеза обсуждения обязательно напрямую выполни и полностью ответь на исходный запрос пользователя.\nИсходный запрос пользователя: \"{{request}}\"",
    "post_summary_execute_prompt": "Team-обсуждение завершено. Используй файл обсуждения как контекст, а затем прямо выполни исходный запрос пользователя в этой сессии.\nФайл обсуждения: {{discussionFile}}\nИсходный запрос пользователя: \"{{request}}\"\nНе останавливайся снова только на сводке обсуждения.",
    "discussion_language_instruction": "Отвечай на {{language}}.",
    "ring": {
      "active": "R{{round}}/{{totalRounds}}",
      "label_active": "Round {{round}}/{{totalRounds}}",
      "active_hops": "R{{round}}/{{totalRounds}} H{{hop}}/{{totalHops}}"
    },
    "status": {
      "done": "Готово",
      "active": "Активно",
      "pending": "Ожидает",
      "skipped": "Пропущено",
      "queued": "В очереди",
      "dispatched": "Отправляется",
      "running": "Выполняется",
      "awaiting_next_hop": "Ожидание следующего шага",
      "completed": "Завершено",
      "failed": "Ошибка",
      "timed_out": "Тайм-аут",
      "cancelled": "Отменено",
      "setup": "Подготовка"
    },
    "discussions": {
      "title": "Обсуждения",
      "live_progress": "Живой прогресс",
      "slogan": "IM.codes - the IM for agents",
      "hide": "Скрыть",
      "show": "Показать",
      "untitled": "Обсуждение",
      "empty": "Пока нет Team-обсуждений. Используйте @@all(discuss) или @agent, чтобы начать.",
      "select": "Выберите обсуждение для просмотра",
      "load_failed": "(Не удалось загрузить)",
      "phase_initial": "Начало",
      "phase_hop": "Шаг",
      "phase_summary": "Сводка",
      "phase_execution": "Выполнение",
      "phase_queued": "В очереди",
      "round_label": "Раунд",
      "hop_label": "Шаг",
      "auto_follow_latest": "Автопрокрутка к последнему",
      "copy_path": "Скопировать путь",
      "copy_content": "Скопировать содержимое",
      "scroll_top": "Прокрутить вверх",
      "scroll_bottom": "Прокрутить вниз"
    },
    "mode_solo": "Solo",
    "mode_audit": "Аудит",
    "mode_review": "Обзор",
    "mode_plan": "Планирование",
    "mode_brainstorm": "Мозговой штурм",
    "mode_discuss": "Обсуждение",
    "combo_label": "Комбо",
    "combo_presets": "Готовые комбо",
    "combo_custom": "Мои комбо",
    "combo_custom_empty": "Пользовательских комбо пока нет.",
    "combo_builder": "Добавить новое комбо",
    "combo_recommended_hint": "Рекомендуется для большинства задач аудита.",
    "exclude_same_type": "Исключить тот же тип",
    "picker": {
      "back": "Назад",
      "files": "Файлы",
      "agents": "Агенты",
      "search_project_files": "Искать файлы проекта",
      "quick_discussion_with_agent": "Быстрое обсуждение с агентом",
      "team": "Team",
      "team_desc": "Начать обсуждение Team",
      "select_mode": "Выбрать режим",
      "all_agents": "Все агенты",
      "sessions": "сессий",
      "type_to_search": "введите для поиска",
      "keep_typing": "Продолжайте ввод...",
      "no_files_found": "Файлы не найдены",
      "no_agents_available": "Нет доступных агентов",
      "you": "Вы",
      "busy": "Занят"
    },
    "mode": {
      "audit": "Аудит",
      "review": "Обзор",
      "plan": "Планирование",
      "brainstorm": "Мозговой штурм",
      "discuss": "Обсуждение"
    },
    "team_button": "Команда",
    "mode_config": "Конфиг",
    "dropdown": {
      "tab_combos": "Комбо",
      "tab_workflows": "Воркфлоу",
      "solo_hint": "Выберите процесс ниже, чтобы запустить рабочий процесс",
      "team_intro_title": "Team-обсуждение",
      "team_intro_body": "Агенты обсуждают, суммируют, реализуют, затем проверяют результат. Дополнительные раунды повторяют цикл для усиления результата.",
      "team_intro_tooltip": "Обсуждение → сводка → реализация → проверка. Больше раундов повторяют цикл на предыдущем результате.",
      "workflows_empty": "Сохранённых воркфлоу пока нет. Откройте Настройки → Расширенный воркфлоу, чтобы создать.",
      "workflows_manage": "Управлять воркфлоу"
    },
    "settings_button": "Настройки",
    "settings_title": "Настройки Team-обсуждения",
    "settings_process_title": "Цикл Team-обсуждения",
    "settings_process_body": "Режим Team запускает цикл обсуждения, сводки, реализации и проверки. Один раунд выполняет цикл один раз; дополнительные раунды используют результат предыдущей реализации как контекст для ещё одного аудита/обзора, чтобы агенты нашли пропущенные требования, регрессионные риски, граничные случаи и пробелы в тестах до завершения работы.",
    "alpha_badge": "Alpha",
    "alpha_hint": "Экспериментальная возможность; формальная проверка ещё не завершена.",
    "cross_session": "Включить сессии из других проектов",
    "tab": {
      "advanced_workflow": "Расширенный воркфлоу",
      "advanced_workflow_intro": "Спроектируйте направленный Team-воркфлоу. Узлы — это раунды агентов (LLM, скрипты, логические шлюзы); рёбра управляют маршрутизацией. Изменения здесь переопределяют простой конвейер раундов/режимов, настроенный во вкладке «Агенты».",
      "advanced_workflow_alpha_notice": "Экспериментальная возможность; формальная проверка ещё не завершена. Для критичных задач используйте готовые комбо.",
      "advanced_workflow_empty_hint": "Инициализируется пустой черновик воркфлоу. Добавьте узлы и рёбра на холсте ниже, чтобы спроектировать ваш Team-конвейер.",
      "advanced_workflow_starter_title": "Безымянный воркфлоу",
      "advanced_workflow_starter_node_title": "Старт"
    },
    "settings_filter_sdk": "SDK",
    "settings_filter_cli": "CLI",
    "settings_save": "Сохранить",
    "settings_save_and_close": "Сохранить и закрыть",
    "settings_close": "Закрыть",
    "confirm_cancel": "Точно отменить?",
    "combo_send_confirm_title": "Подтвердить комбинированную отправку",
    "combo_send_confirm_body": "Это сообщение будет сразу отправлено с комбинированным сценарием {{mode}}. Продолжить?",
    "combo_send_confirm_skip": "Больше не спрашивать и отправлять сразу",
    "combo_empty_message_warning": "Для комбинированной отправки нужен текст сообщения. Добавьте запрос перед отправкой.",
    "combo_requires_participants_hint": "Сначала выберите участников в настройках Team, чтобы включить комбинированные режимы.",
    "member_cannot_initiate_discussion": "Эта сессия — участник Team и не может начать обсуждение. Запустите его из другой сессии (рекомендуется топовая модель).",
    "settings_enabled": "Участвовать",
    "settings_mode": "Режим",
    "settings_skip": "Пропустить",
    "settings_default_hint": "Новые сессии по умолчанию: включено + audit",
    "settings_rounds": "Раунды",
    "settings_rounds_hint": "Циклы проверки",
    "settings_rounds_explanation": "Каждый раунд — полный цикл многоагентного анализа: участники обсуждают и выполняют запрос, затем запускается следующий составной цикл аудита/проверки, чтобы найти пропуски, регрессионные риски и граничные случаи и дополнительно укрепить результат.",
    "settings_hop_timeout": "Таймаут хопа",
    "settings_hop_timeout_unit": "минут на хоп",
    "settings_hop_timeout_hint": "Время ожидания ответа от каждого агента. Увеличьте для сложных задач.",
    "settings_extra_prompt": "Доп. инструкции",
    "settings_extra_prompt_hint": "Дополнительные указания для всех участников (напр. \"Отвечать на русском\")",
    "settings_advanced_title": "Расширенный workflow",
    "settings_advanced_preset": "Расширенный пресет",
    "settings_advanced_run_timeout": "Общий таймаут запуска",
    "settings_advanced_run_timeout_unit": "минут всего",
    "settings_advanced_rounds": "Расширенные раунды",
    "settings_context_reducer_mode": "Режим сжатия контекста",
    "settings_context_reducer_reuse": "Переиспользовать существующего SDK-участника",
    "settings_context_reducer_clone": "Клонировать шаблон SDK-сессии",
    "settings_context_reducer_session": "Участник-суммаризатор",
    "settings_context_reducer_template": "Шаблонный участник",
    "settings_single_main": "Только главный",
    "settings_multi_dispatch": "Множественная dispatch-рассылка",
    "settings_round_timeout": "Таймаут раунда",
    "settings_verdict_policy": "Политика вердикта",
    "settings_smart_gate": "Умный шлюз",
    "settings_forced_rework": "Принудительная доработка",
    "settings_jump_target": "Цель перехода",
    "settings_jump_marker": "Маркер перехода",
    "settings_min_triggers": "Мин. число срабатываний",
    "settings_max_triggers": "Макс. число срабатываний",
    "settings_artifact_outputs": "Выходные артефакты",
    "settings_prompt_append": "Добавка к промпту",
    "all_label": "Все",
    "all_rounds": "{{count}} раунд",
    "all_rounds_plural": "{{count}} раундов",
    "all_plus": "Все + выбор раундов",
    "all_preview_empty": "Участники не настроены",
    "single_agent_prompt": {
      "title": "Добавить ещё агентов?",
      "body": "Сейчас выбран только один агент.",
      "tip_multi": "Несколько агентов разных типов/провайдеров помогают выйти за рамки шаблонного мышления и обычно дают лучший результат.",
      "tip_rounds": "Для Team-обсуждений обычно лучше всего работают 2 раунда.",
      "dont_show_again": "Больше не показывать для этого аккаунта",
      "more_agents": "@ Ещё",
      "send_anyway": "Всё равно отправить",
      "tip_history": "Мультиагентные обсуждения используют общие файлы и сохраняют более полную историю. Диалог один на один считается разовым обсуждением."
    },
    "settings_workflow_migration_title": "Миграция workflow",
    "settings_workflow_migration_body": "Эта сохраненная advanced-конфигурация использует старый формат раундов. Сохраните ее, чтобы создать launch envelope перед запуском advanced Team.",
    "settings_workflow_migration_ready": "Launch envelope workflow готов для advanced Team запусков.",
    "settings_workflow_migration_error": "Не удалось мигрировать advanced workflow. Проверьте сохраненные раунды перед запуском.",
    "workflow": {
      "diagnostics": {
        "forbidden_envelope_field": "The launch envelope contains a forbidden private field.",
        "unsupported_schema_version": "This workflow schema version is not supported.",
        "unknown_future_schema_read_only": "This future workflow version is read-only here.",
        "mixed_advanced_schema_fields": "Old and new advanced workflow fields are mixed.",
        "static_policy_mismatch_recompiled": "Daemon policy changed, so the workflow was recompiled.",
        "missing_required_capability": "The daemon is missing a required workflow capability.",
        "capability_stale": "Связь с демоном потеряна — сохранённые конфигурации продолжают работать, но новые запуски расширенного воркфлоу приостановлены до переподключения демона (обычно <30 с).",
        "capability_downgraded_during_run": "A required capability was downgraded during the run.",
        "invalid_launch_envelope": "The workflow launch envelope is invalid.",
        "invalid_workflow_graph": "The workflow graph is invalid.",
        "invalid_routing_authority": "The workflow routing authority is invalid.",
        "invalid_edge_condition": "A workflow edge condition is invalid.",
        "loop_budget_exhausted": "The workflow loop budget was exhausted.",
        "invalid_workflow_variable": "A workflow variable is invalid.",
        "invalid_prompt_append": "A workflow prompt append is invalid.",
        "missing_context_source": "A required workflow context source is missing.",
        "context_source_too_large": "A workflow context source is too large.",
        "unsafe_artifact_path": "A workflow artifact path is unsafe.",
        "artifact_identity_collision_resolved": "An artifact identity collision was resolved.",
        "artifact_baseline_too_large": "An artifact baseline is too large.",
        "artifact_baseline_mismatch": "An artifact baseline did not match.",
        "artifact_contract_not_satisfied": "An artifact contract was not satisfied.",
        "invalid_script_contract": "A workflow script contract is invalid.",
        "script_executable_denied": "The script executable is not allowed.",
        "script_machine_output_invalid": "Script machine output is invalid.",
        "script_timeout": "The script timed out.",
        "script_cancelled": "The script was cancelled.",
        "daemon_busy": "The daemon is busy with other advanced workflows.",
        "workflow_stale_after_restart": "The workflow became stale after daemon restart.",
        "private_projection_field_dropped": "A private projection field was dropped.",
        "legacy_progress_snapshot_sanitized": "A legacy progress snapshot was sanitized.",
        "unknown_p2p_message": "An unknown Team workflow message was ignored.",
        "unmatched_edge_route": "Ни одна исходящая условная дуга не совпала с маршрутом, и нет дуги по умолчанию."
      },
      "editor": {
        "title": "Черновик расширенного workflow",
        "add_node": "Добавить узел",
        "remove_node": "Удалить узел",
        "remove_edge": "Удалить связь",
        "normalize_banner_one": "{{count}} устаревший узел требует выравнивания preset/scope для logic/script. Нажмите Применить.",
        "normalize_banner_other": "{{count}} устаревших узлов требуют выравнивания preset/scope для logic/script. Нажмите Применить.",
        "normalize_banner": "{{count}} устаревший(их) узел(ов) требуют выравнивания preset/scope для logic/script. Нажмите Применить.",
        "normalize_apply": "Применить",
        "normalize_dismiss": "Отклонить",
        "diagnostics_header": "Диагностика",
        "read_only_notice": "Этот workflow использует будущую схему и здесь доступен только для чтения.",
        "canvas_hint": "Перетащите узлы для размещения. Перетащите от правого якоря (●) к другому узлу, чтобы создать связь. Колесо мыши или жест pinch для масштабирования.",
        "zoom_in": "Увеличить",
        "zoom_out": "Уменьшить",
        "zoom_reset": "Сбросить масштаб",
        "inspector_empty": "Выберите узел или связь, чтобы редактировать свойства.",
        "node": {
          "section_label": "Узел",
          "preset_label": "Пресет",
          "permission_scope_label": "Область разрешений",
          "dispatch_style_label": "Стиль отправки",
          "summary_prompt_label": "Промпт сводки раунда (запускается после узла)",
          "script_argv_label": "Команда скрипта (одна запись argv в строке; первая строка — исполняемый файл)",
          "script_argv_placeholder": "/usr/bin/python3\n/абсолютный/путь/script.py\n--flag\nvalue"
        },
        "edge": {
          "section_label": "Связь",
          "from_label": "Откуда",
          "to_label": "Куда",
          "condition_label": "Значение условия"
        }
      },
      "allowed_executables": {
        "title": "Разрешённые исполняемые файлы для скриптов",
        "hint": "Жёстко применяется при запуске скрипта. Добавьте абсолютные пути (например, /usr/bin/jq) или имена относительно PATH, которые могут вызывать узлы-скрипты. Воркфлоу только из LLM не требуют записей здесь.",
        "placeholder": "/usr/bin/jq",
        "input_label": "Новый путь к исполняемому файлу",
        "add": "Добавить",
        "remove": "Удалить",
        "empty": "Пока нет разрешённых исполняемых файлов. Узлы-скрипты этого воркфлоу будут отклонены на этапе bind, пока вы не добавите хотя бы одну запись.",
        "script_nodes_need_entries": "Требуется для узлов-скриптов"
      },
      "library": {
        "title": "Библиотека воркфлоу",
        "hint": "Сохранённые воркфлоу для этой сессии. Активный отправляется в Team-запуски. До {{max}} записей.",
        "new": "+ Новый",
        "duplicate": "Дублировать",
        "delete": "Удалить",
        "delete_confirm": "Удалить воркфлоу «{{title}}»? Это действие нельзя отменить.",
        "copy_suffix": " (копия)",
        "active_badge": "Активный",
        "name_label": "Имя воркфлоу",
        "name_placeholder": "напр. Аудит + план"
      }
    }
  },
  "openspec": {
    "title": "OpenSpec",
    "changes": "Изменения",
    "empty": "Изменения OpenSpec не найдены",
    "load_timeout": "Загрузка изменений OpenSpec заняла слишком много времени. Повторите попытку после переподключения daemon.",
    "load_unavailable": "Изменения OpenSpec недоступны, пока соединение с daemon не будет готово.",
    "load_error": "Не удалось просканировать изменения OpenSpec",
    "audit_action": "Аудит",
    "audit_implementation_action": "Аудит реализации",
    "audit_spec_action": "Аудит спецификации",
    "implement_action": "Реализация",
    "achieve_action": "Завершить",
    "propose_action": "Предложить",
    "propose_from_discussion_action": "Из недавнего обсуждения",
    "propose_from_description_action": "Из описания ниже",
    "audit_implementation_prompt": "Проведи строгий аудит реализации {{reference}} по его артефактам OpenSpec. Выяви каждое расхождение, упущение, риск регрессии, пробел в пограничных сценариях и недостающий тест; затем исправь код, тесты и все необходимые сопутствующие изменения. Если по ходу нужно синхронизировать спецификацию, обнови в той же задаче соответствующие файлы OpenSpec внутри {{reference}}. Не останавливайся на отчете: доведи реализацию до полного соответствия спецификации.",
    "audit_spec_prompt": "Проведи строгий аудит спецификации {{reference}}. Усиль границы задачи, требования, критерии приемки, пограничные случаи, режимы отказа, зависимости и проверяемость; устрани неоднозначность и внутренние противоречия; затем напрямую обнови proposal, design, specs и tasks внутри {{reference}} до состояния, готового к реализации. Не ограничивайся замечаниями ревью.",
    "implement_prompt": "Жестко доведи реализацию {{reference}}. Разбей работу на конкретные подзадачи, раздай подагентам четкие зоны ответственности, интегрируй их результат, закрой разрывы относительно спецификации, добавь или обнови тесты и проверь финальный результат. По ходу работы держи артефакты OpenSpec внутри {{reference}} синхронизированными, а не оставляй это как последующую заметку. На тебе оркестрация, технические решения и итоговая приемка.",
    "achieve_prompt": "Доведи {{reference}} до состояния done по полному процессу OpenSpec. Проверь все оставшиеся задачи и артефакты, выполни необходимую работу по реализации и спецификации, при необходимости напрямую обнови proposal, design, specs и tasks внутри {{reference}}, закрой незавершенные пункты, при необходимости синхронизируй затронутые основные спецификации и архивируй изменение, когда оно будет соответствовать критериям завершения. Не останавливайся на отчете о статусе.",
    "propose_from_discussion_prompt": "Сгенерируй изменение OpenSpec на основе недавнего обсуждения. Выдели цель, scope, ключевые требования и критерии приемки, неясные места перечисли как вопросы на уточнение и запиши реальные артефакты в openspec/changes/ (proposal, design, specs и tasks), а не останавливайся на черновой заметке.",
    "propose_from_description_prompt": "Сгенерируй изменение OpenSpec на основе описания ниже. Сформируй цель, scope, ключевые требования и критерии приемки, недостающие детали перечисли как вопросы на уточнение и запиши реальные артефакты в openspec/changes/ (proposal, design, specs и tasks), а не останавливайся на черновой заметке."
  },
  "upload": {
    "upload_file": "Загрузить файл",
    "uploading": "Загрузка...",
    "upload_failed": "Ошибка загрузки",
    "file_too_large": "Файл слишком большой (макс. {{max}}МБ)",
    "long_text_attached": "Большой вставленный текст прикреплен как {{name}}",
    "long_text_requires_attachment": "Эта вставка слишком большая для поля ввода. Загрузите ее как файл.",
    "drop_overlay_title": "Отпустите файлы для загрузки",
    "drop_overlay_hint": "Отпустите в любом месте этого окна сеанса",
    "download_file": "Скачать",
    "downloading": "Скачивание...",
    "preview_unavailable": "Предпросмотр недоступен",
    "download_expired": "Ссылка на скачивание истекла",
    "download_timeout": "Время загрузки истекло",
    "download_failed": "Ошибка загрузки",
    "daemon_offline": "Демон недоступен"
  },
  "settings": {
    "title": "Настройки",
    "back": "← Назад",
    "team_discussion_label": "Режим Team-обсуждения",
    "team_discussion_title": "Для сложной работы используйте нескольких агентов",
    "team_discussion_body": "Team-обсуждение полезно не только для кода. Оно подходит для сложных документов, предложений, аудитов и решений. Разные модели дополняют и оспаривают друг друга, помогая получить более строгий результат.",
    "team_discussion_point_1": "Сначала опишите тему в поле ввода, затем выберите режим обсуждения и запустите его.",
    "team_discussion_point_2": "Для сложных задач добавляйте раунды, чтобы пересмотреть и укрепить предыдущий вывод.",
    "team_discussion_point_3": "Аудит OpenSpec, сложные предложения, ревью кода и архитектурные решения хорошо подходят для поиска слепых зон одной модели.",
    "display_name": "Отображаемое имя",
    "no_name": "Не установлено",
    "edit": "Редактировать",
    "save": "Сохранить",
    "name_placeholder": "Введите отображаемое имя",
    "name_saved": "Отображаемое имя обновлено",
    "name_error": "Не удалось обновить отображаемое имя",
    "change_password": "Сменить пароль",
    "old_password": "Текущий пароль",
    "new_password": "Новый пароль",
    "confirm_password": "Подтвердите новый пароль",
    "change_password_btn": "Сменить пароль",
    "password_changed": "Пароль успешно изменён",
    "password_error": "Не удалось сменить пароль. Проверьте текущий пароль.",
    "passwords_mismatch": "Пароли не совпадают",
    "password_too_short": "Пароль должен содержать не менее 8 символов",
    "password_missing_uppercase": "Пароль должен содержать хотя бы одну заглавную букву",
    "password_missing_lowercase": "Пароль должен содержать хотя бы одну строчную букву",
    "password_missing_digit": "Пароль должен содержать хотя бы одну цифру",
    "privacy_policy": "Политика конфиденциальности",
    "terms_of_service": "Условия использования",
    "account_identity": "Данные аккаунта",
    "username": "Имя пользователя",
    "no_username": "Не задано",
    "username_placeholder": "Выберите имя пользователя",
    "username_required": "Имя пользователя обязательно",
    "username_invalid": "Используйте 3-32 символа: строчные буквы, цифры, точку, подчёркивание или дефис",
    "username_taken": "Это имя пользователя уже занято",
    "set_password_login": "Настроить вход по паролю",
    "set_password_hint": "У аккаунтов с passkey по умолчанию нет имени пользователя и пароля. Подтвердите passkey один раз, затем задайте оба значения, чтобы можно было входить и по паролю.",
    "set_password_btn": "Подтвердить passkey и задать пароль",
    "password_setup_success": "Вход по паролю настроен",
    "password_setup_error": "Не удалось настроить вход по паролю. Подтвердите passkey и попробуйте снова.",
    "passkey_verify_browser_only": "Проверка passkey для настройки пароля сейчас доступна только в веб-браузере.",
    "passkey_verify_wrong_account": "Этот passkey принадлежит другому аккаунту. Подтвердите passkey, зарегистрированный для текущего аккаунта.",
    "passkey_verify_no_passkeys": "Для этого аккаунта не зарегистрировано ни одного passkey.",
    "native_status_verifying_passkey": "Подтверждение passkey…",
    "native_status_saving_password": "Сохранение входа по паролю…"
  },
  "admin": {
    "title": "Панель администратора",
    "back": "← Назад",
    "settings": "Настройки",
    "users": "Пользователи",
    "load_error": "Не удалось загрузить данные администрирования",
    "action_error": "Действие не выполнено",
    "registration_enabled": "Регистрация включена",
    "registration_enabled_desc": "Разрешить новым пользователям регистрироваться",
    "require_approval": "Требуется одобрение",
    "require_approval_desc": "Новые регистрации требуют одобрения администратора",
    "require_approval_disabled": "Сначала включите регистрацию, чтобы настроить одобрение",
    "col_username": "Имя пользователя",
    "col_display_name": "Отображаемое имя",
    "col_status": "Статус",
    "col_role": "Роль",
    "col_created": "Создан",
    "col_actions": "Действия",
    "status_active": "Активен",
    "status_pending": "Ожидает",
    "status_disabled": "Отключён",
    "approve": "Одобрить",
    "disable": "Отключить",
    "confirm_delete_title": "Удалить пользователя",
    "confirm_delete_msg": "Вы уверены, что хотите навсегда удалить пользователя \"{{name}}\"? Это нельзя отменить.",
    "confirm_disable_title": "Отключить пользователя",
    "confirm_disable_msg": "Вы уверены, что хотите отключить пользователя \"{{name}}\"? Он не сможет войти в систему."
  },
  "repo": {
    "title": "Репозиторий",
    "back": "← Назад",
    "refresh": "Обновить",
    "last_refresh": "Последнее обновление: {{time}}с назад",
    "tab_issues": "Задачи",
    "tab_prs": "PR",
    "tab_branches": "Ветки",
    "tab_commits": "Коммиты",
    "tab_cicd": "CI/CD",
    "overview_branch": "{{default}} ← {{current}}",
    "cli_ok": "{{cli}} {{version}} ✓",
    "cli_not_installed": "CLI не установлен",
    "load_more": "Загрузить ещё",
    "loading": "Загрузка...",
    "retry": "Повторить",
    "current_branch": "текущая",
    "error_cli_missing": "Установите {{cli}} для работы с репозиторием",
    "error_cli_missing_hint": "Установите GitHub CLI для работы с репозиторием:",
    "error_cli_outdated": "Обновите {{cli}} до версии {{version}}+",
    "error_unauthorized": "Выполните `{{command}}` для аутентификации",
    "error_unauthorized_hint": "Авторизуйтесь через CLI:",
    "error_rate_limited": "Достигнут лимит API. Попробуйте позже.",
    "error_generic": "Не удалось загрузить данные",
    "empty_issues": "Задачи не найдены",
    "empty_prs": "Pull request’ы не найдены",
    "empty_branches": "Ветки не найдены",
    "empty_commits": "Коммиты не найдены",
    "empty_actions": "Запуски рабочих процессов не найдены",
    "state_open": "Открыто",
    "state_closed": "Закрыто",
    "state_merged": "Объединено",
    "draft": "Черновик",
    "default_branch": "по умолчанию",
    "ahead": "впереди на {{count}}",
    "behind": "позади на {{count}}",
    "actions_refresh": "Обновить",
    "actions_last_updated": "Обновлено {{time}}",
    "actions_view": "Открыть",
    "detail_loading": "Загрузка...",
    "detail_error": "Не удалось загрузить",
    "detail_retry": "Повторить",
    "files": "файлов",
    "more_files": "Ещё файлы — полный список на GitHub",
    "view_on_platform": "Открыть на GitHub",
    "body_truncated": "Содержимое сокращено — полная версия на GitHub",
    "checks_success": "Проверки пройдены",
    "checks_failure": "Проверки не пройдены",
    "checks_pending": "Проверки выполняются",
    "mergeable": "Можно слить",
    "conflicts": "Есть конфликты",
    "comments_count": "комментариев",
    "comments_header": "{{count}} комментариев",
    "no_comments": "Нет комментариев",
    "show_changed_files": "Показать изменённые файлы",
    "refresh_tab": "Обновить",
    "branch_summary_title": "Текущая ветка: {{branch}}",
    "branch_summary_label": "Открыть сведения о репозитории для ветки {{branch}}",
    "info_title": "Сведения о репозитории",
    "info_current_branch": "Ветка",
    "info_project_dir": "Проект",
    "info_repository": "Репозиторий",
    "info_provider": "Провайдер",
    "info_default_branch": "Основная",
    "branch_local_label": "Локальная ветка",
    "branch_local_short": "локальная",
    "branch_remote_label": "Удаленная ветка",
    "branch_remote_short": "удаленная",
    "checkout_switch": "Переключить",
    "checkout_switching": "Переключение...",
    "checkout_switch_to": "Переключить на {{branch}}",
    "checkout_pending": "Переключение на {{branch}}",
    "checkout_success": "Переключено на {{branch}}.",
    "checkout_remote_only_disabled": "В этой версии нельзя переключаться на ветки, которые есть только удаленно.",
    "checkout_dirty_worktree": "Очистите или зафиксируйте локальные изменения перед переключением ветки.",
    "checkout_git_operation_in_progress": "Завершите текущую операцию git перед переключением ветки.",
    "checkout_invalid_target": "Можно переключаться только на существующие локальные ветки.",
    "checkout_in_progress": "Для этого репозитория уже выполняется переключение ветки.",
    "checkout_busy": "Операции репозитория заняты. Повторите попытку позже.",
    "checkout_branch_in_use": "Сейчас нельзя переключиться на эту ветку.",
    "checkout_detached_head": "Переключение заблокировано, пока HEAD отсоединен.",
    "checkout_not_a_git_repo": "Этот проект не является git-репозиторием.",
    "checkout_failed": "Не удалось переключить ветку.",
    "local_commit_fallback_loading": "Загрузка локальной истории git...",
    "local_commit_fallback_error": "Не удалось загрузить локальную историю git."
  },
  "transport_chat": {
    "inputPlaceholder": "Введите сообщение...",
    "send": "Отправить",
    "streaming": "Думаю...",
    "error": "Ошибка",
    "connectionLost": "Соединение потеряно",
    "empty": "Сообщений пока нет"
  },
  "sidebar": {
    "collapse": "Свернуть боковую панель",
    "expand": "Развернуть боковую панель",
    "noSessions": "Нет сессий",
    "sessionTree": "Дерево сессий",
    "unpin": "Открепить панель",
    "pinned_repo": "Файлы",
    "session_unavailable": "Сессия недоступна",
    "drop_to_pin": "Перетащите для закрепления",
    "pin_to_sidebar": "Закрепить на боковой панели",
    "expand_all": "Развернуть все",
    "collapse_all": "Свернуть все",
    "drag_to_resize": "Перетащите для изменения размера"
  },
  "subsessionBar": {
    "show": "Показать",
    "hide": "Скрыть",
    "layout_double": "Две строки",
    "layout_single": "Одна строка",
    "card_size": "Размер карточки",
    "subs_count": "Subs ({{count}})",
    "new_sub_session": "Новая подсессия",
    "add_sub_session_short": "+ подсессия",
    "close_all_open": "Закрыть все открытые окна подсессий",
    "quick_close_open": "Быстро закрыть открытые окна подсессий",
    "restore_quick_closed": "Восстановить недавно закрытые окна подсессий",
    "quick_close_unavailable": "Сначала откройте окно подсессии",
    "p2p_discussions": "Team-обсуждения",
    "p2p_compact_show": "Показать компактную Team-панель",
    "p2p_compact_hide": "Свернуть Team-панель",
    "p2p_compact_expand": "Показать подробную Team-панель",
    "p2p_discussions_with_running_one": "{{count}} активное обсуждение — показать все",
    "p2p_discussions_with_running_other": "{{count}} активных обсуждений — показать все",
    "p2p_discussions_with_running": "{{count}} активных обсуждений — показать все",
    "p2p_running_count_aria_one": "{{count}} Team-обсуждение активно",
    "p2p_running_count_aria_other": "{{count}} Team-обсуждений активно",
    "p2p_running_count_aria": "{{count}} Team-обсуждений активно",
    "repository": "Репозиторий",
    "scheduled_tasks": "Запланированные задачи",
    "width_short": "Ш",
    "height_short": "В",
    "apply": "Применить",
    "reset": "Сбросить",
    "empty_prefix": "Подсессий пока нет — нажмите",
    "empty_suffix": "чтобы добавить"
  },
  "localWebPreview": {
    "title": "Локальный веб‑предпросмотр",
    "port": "Порт",
    "path": "Путь",
    "open": "Открыть",
    "refresh": "Обновить",
    "openInNewTab": "Открыть в новой вкладке",
    "closePreview": "Закрыть предпросмотр",
    "sandboxNote": "Предпросмотр работает в sandboxed iframe. Некоторым приложениям лучше подходит новая вкладка.",
    "invalidPort": "Введите порт от 1 до 65535.",
    "openFailed": "Не удалось открыть локальный предпросмотр.",
    "opening": "Открытие предпросмотра…",
    "empty": "Введите локальный порт и путь, затем откройте предпросмотр.",
    "noServer": "Сначала выберите сервер.",
    "previewing": "Предпросмотр:",
    "initialPathNote": "Путь задаёт только начальную страницу. После загрузки навигация ограничивается портом, а не этим путём.",
    "portHistoryLabel": "Недавние порты",
    "pathHistoryLabel": "Недавние пути"
  },
  "cron": {
    "title": "Запланированные задачи",
    "create": "Новая задача",
    "edit": "Редактировать задачу",
    "name": "Название задачи",
    "name_placeholder": "Напр., Ежедневная проверка CI",
    "schedule": "Расписание",
    "schedule_help": "Cron-выражение (напр., 0 9 * * 1-5 = будни в 9 утра)",
    "mode_picker": "Визуальный выбор",
    "mode_advanced": "Расширенный (cron)",
    "advanced_help": "Формат: мин час день месяц деньНедели — напр. 0 9 * * 1-5 = будни в 9 утра",
    "field_minute": "Минута",
    "field_hour": "Час",
    "field_day": "День",
    "field_month": "Месяц",
    "field_weekday": "День недели",
    "every_hour": "Каждый час",
    "any": "Любой",
    "target": "Целевая сессия",
    "action_type": "Тип действия",
    "action_command": "Команда",
    "action_p2p": "Team-обсуждение",
    "send_target": "Получатель",
    "send_target_placeholder": "Точное имя сессии, метка или тип агента",
    "send_message": "Сообщение",
    "send_message_placeholder": "Введите сообщение для отправки...",
    "send_reply": "Попросить получателя ответить",
    "send_broadcast": "Отправить всем соседним сессиям",
    "command": "Команда",
    "command_placeholder": "Введите команду для агента...",
    "shell_hint": "Подсказка: Shell-сессии могут запускать скрипты напрямую — просто введите путь к скрипту (например, /path/to/script.sh)",
    "p2p_topic": "Тема обсуждения",
    "p2p_topic_placeholder": "Введите тему обсуждения...",
    "p2p_mode": "Режим обсуждения",
    "p2p_participants": "Участники",
    "p2p_rounds": "Раунды",
    "expires_at": "Истекает",
    "expires_never": "Никогда",
    "status": "Статус",
    "active": "Активна",
    "paused": "Приостановлена",
    "expired": "Истекла",
    "error": "Ошибка",
    "last_run": "Последний запуск",
    "next_run": "Следующий запуск",
    "no_tasks": "Нет запланированных задач",
    "confirm_delete": "Удалить эту запланированную задачу?",
    "pause": "Приостановить",
    "resume": "Возобновить",
    "save": "Сохранить",
    "cancel": "Отмена",
    "invalid_cron": "Недопустимое cron-выражение",
    "interval_too_short": "Минимальный интервал — 5 минут",
    "history": "История выполнения",
    "no_history": "Выполнений пока нет",
    "no_detail": "Вывод не захвачен",
    "status_sent": "Отправлено",
    "status_skipped_offline": "Пропущено (не в сети)",
    "status_skipped_busy": "Пропущено (занят)",
    "status_error": "Ошибка",
    "no_participants": "Нет других доступных сессий",
    "show_all_projects": "Все проекты",
    "show_all_servers": "Все серверы",
    "exec_latest": "Последние",
    "exec_all": "Все",
    "view_discussion": "Просмотр Team обсуждения →",
    "confirm_trigger": "Выполнить эту задачу сейчас?",
    "status_manual_trigger": "Вручную",
    "go_to_session": "Перейти к сессии",
    "go_and_quote": "Перейти и процитировать",
    "read_only": "Только чтение",
    "read_only_scope": "Эта cron-задача принадлежит другому серверу или вкладке и здесь временно доступна только для чтения."
  },
  "fileBrowser": {
    "edit": "Редактировать",
    "preview": "Предпросмотр",
    "save": "Сохранить",
    "saving": "Сохранение…",
    "unsavedChanges": "Есть несохранённые изменения. Отменить их?",
    "conflictTitle": "Файл изменён внешней программой",
    "conflictKeepMine": "Сохранить мои изменения",
    "conflictUseDisk": "Использовать версию с диска",
    "conflictCancel": "Отмена",
    "saveSuccess": "Сохранено",
    "saveError": "Ошибка сохранения",
    "fileTooLarge": "Файл слишком большой для сохранения (> 1 МБ)",
    "saveTimeout": "Истекло время ожидания сохранения — перезагрузите файл",
    "copyPath": "Копировать путь",
    "copied": "Скопировано!",
    "insertPath": "Вставить путь"
  },
  "onboarding": {
    "prompt": {
      "title": "Включить руководство для новых пользователей?",
      "body_1": "Ваша первая основная session готова. Если вы новичок, это короткое руководство покажет основные элементы управления.",
      "body_2": "Сначала будут базовые кнопки, а в конце — как лучше использовать мультиагентные обсуждения.",
      "beginner": "Я новичок, начать руководство",
      "expert": "Я опытный, больше не показывать",
      "later": "Закрыть, напомнить позже"
    },
    "team_discussion_guide": {
      "title": "Здесь находится режим обсуждения Team",
      "body_1": "Режим обсуждения полезен не только для кода: используйте его для сложных документов, предложений, аудита OpenSpec, ревью кода и архитектурных решений.",
      "body_2": "Разные модели дополняют и оспаривают друг друга, часто давая более качественный и строгий результат, чем одна модель.",
      "body_3": "Сначала введите тему обсуждения, выберите режим и запустите его. Для трудных задач добавьте раунды, чтобы укрепить вывод.",
      "dismiss": "Понятно"
    },
    "step_counter": "Шаг {{current}} / {{total}}",
    "prev": "Назад",
    "next": "Далее",
    "finish": "Готово",
    "steps": {
      "new_main": {
        "title": "Здесь создаётся основная Session",
        "body_1": "Эта кнопка создаёт новую основную session для проекта.",
        "body_2": "Основная session — входная точка для terminal, chat, repo и discussion."
      },
      "new_sub": {
        "title": "Здесь создаётся дочерняя Session",
        "body_1": "Эта кнопка добавляет worker/helper sub-session в текущий проект.",
        "body_2": "Sub-session удобны для параллельной работы, ревью и экспериментов."
      },
      "discussions": {
        "title": "Здесь открывается история обсуждений",
        "body_1": "Здесь можно посмотреть прошлые обсуждения и их результаты."
      },
      "repo": {
        "title": "Здесь открывается панель Repo",
        "body_1": "Здесь можно смотреть состояние репозитория, ветки, коммиты, PR и CI."
      },
      "cron": {
        "title": "Здесь открываются задачи по расписанию",
        "body_1": "Здесь можно создавать и управлять задачами по расписанию для текущего проекта."
      },
      "view_toggle": {
        "title": "Здесь переключаются Chat / Terminal",
        "body_1": "Эта кнопка переключает текущую session между chat и live terminal."
      },
      "p2p_defaults": {
        "title": "Здесь настраиваются участники обсуждения по умолчанию",
        "body_1": "Откройте это меню и выберите Config, чтобы задать, какие session по умолчанию входят в @all.",
        "body_2": "Здесь же можно быстро выбрать число раундов по умолчанию."
      },
      "p2p_send": {
        "title": "Запуск обсуждений из поля ввода",
        "body_1": "Введите @@all(discuss), @@all(review) или другой режим, чтобы быстро запустить общее обсуждение.",
        "body_2": "Обсуждения лучше работают с 2+ Agent разных провайдеров или типов. Это помогает выйти за рамки шаблонного мышления и обычно даёт лучший результат.",
        "body_3": "Мультиагентные обсуждения разделяют файлы и сохраняют более полную историю. Диалог один на один больше похож на разовое обсуждение. На практике 2 раунда — хороший стандарт по умолчанию."
      }
    }
  },
  "sharedContext": {
    "loading": "Loading shared context…",
    "refresh": "Refresh",
    "empty": "Nothing yet",
    "roles": {
      "owner": "owner",
      "admin": "admin",
      "member": "member"
    },
    "notice": {
      "enterpriseCreated": "Enterprise created",
      "inviteCreated": "Invite created",
      "joinedEnterprise": "Joined enterprise",
      "memberUpdated": "Member updated",
      "memberRemoved": "Member removed",
      "workspaceCreated": "Workspace created",
      "projectEnrolled": "Project enrolled",
      "policySaved": "Policy saved",
      "projectPendingRemoval": "Project marked pending removal",
      "projectRemoved": "Project removed",
      "documentCreated": "Document created",
      "versionCreated": "Version created",
      "versionActivated": "Version activated",
      "bindingCreated": "Binding created",
      "processingConfigSaved": "Processing config saved",
      "memoryPreferenceSaved": "Preference saved",
      "memoryPreferenceDeleted": "Preference deleted",
      "memorySkillRegistryRebuilt": "Skill registry rebuilt",
      "memorySkillDeleted": "Skill deleted",
      "memoryMdIngestCompleted": "Markdown ingest completed",
      "memoryObservationPromoted": "Observation promoted",
      "memoryFeatureEnabled": "{{flag}} включено",
      "memoryFeatureDisabled": "{{flag}} отключено",
      "memoryPreferenceUpdated": "Preference updated",
      "memoryObservationUpdated": "Observation updated",
      "memoryObservationDeleted": "Observation deleted",
      "memoryCreated": "Память сохранена.",
      "memoryUpdated": "Память обновлена.",
      "memoryPinned": "Память закреплена для будущих сводок."
    },
    "management": {
      "title": "Общий контекст",
      "heroDescription": "Управляйте общими предприятиями, зарегистрированными проектами, авторским контентом и поведением обработки из одного места.",
      "inviteDescription": "Пригласите людей в предприятие как участников. При необходимости повысьте их до администратора позже на вкладке Участники.",
      "inviteFlowTitle": "Процесс приглашения",
      "memberRolesDescription": "Владельцы могут повышать администраторов. Администраторы управляют проектами и знаниями, но не могут назначать других администраторов.",
      "workspaceDescription": "Используйте рабочие пространства для группировки общих проектов. Они необязательны и не меняют владение.",
      "enrollDescription": "Зарегистрируйте канонический репозиторий, чтобы его обработанный контекст и знания стали доступны для совместного использования.",
      "policyDescription": "Настройте политики выполнения для общего проекта.",
      "knowledgeDescription": "Создавайте стандарты кодирования, архитектурные рекомендации и многократно используемые знания как версионированный общий контекст.",
      "versionDescription": "Создайте новую версию выбранного документа и активируйте её, когда будет готова.",
      "bindingDescription": "Прикрепите версии документов к предприятию, рабочему пространству или проекту с фильтрами языка и пути.",
      "selectEnterprise": "Select enterprise",
      "enterpriseNamePlaceholder": "New enterprise name",
      "createEnterprise": "Create enterprise",
      "invites": "Invites",
      "inviteEmailPlaceholder": "Invite email (optional)",
      "createInvite": "Create invite",
      "inviteToken": "Invite token",
      "joinTokenPlaceholder": "Invite token",
      "joinEnterprise": "Accept invite",
      "members": "Members",
      "promoteAdmin": "Promote to admin",
      "demoteMember": "Demote to member",
      "removeMember": "Remove",
      "workspaces": "Workspaces",
      "workspaceNamePlaceholder": "Workspace name",
      "createWorkspace": "Create workspace",
      "projects": "Projects",
      "projectRelationshipTitle": "Как работает общий контекст проекта",
      "projectRelationshipLine1": "Личная память работает без какой-либо организации.",
      "projectRelationshipLine2": "Общий контекст проекта появляется только после того, как вы подключите репозиторий к выбранной организации.",
      "projectRelationshipLine3": "Рабочая область необязательна и всегда принадлежит той же организации. Это уровень группировки, а не отдельный владелец.",
      "projectRelationshipLine4": "Область определяет, насколько широко проект делится контекстом внутри организации. Она не меняет, какой организации принадлежит проект.",
      "belongsToTitle": "Принадлежит",
      "belongsToEnterprise": "Enterprise:",
      "belongsToWorkspace": "Рабочая область:",
      "belongsToWorkspaceValue": "Необязательная подгруппа внутри выбранной организации.",
      "belongsToProject": "Проект:",
      "belongsToProjectValue": "Подключённый канонический репозиторий.",
      "sharesWithTitle": "Делится с",
      "sharesWithProjectValue": "Контекст делит только этот подключённый репозиторий.",
      "sharesWithWorkspaceValue": "Проекты в одной рабочей области делят контекст вместе.",
      "sharesWithEnterpriseValue": "Все подключённые проекты в текущей организации могут делить контекст.",
      "chooseSharingLevelTitle": "Выберите уровень общего доступа",
      "chooseSharingLevelProject": "Один репозиторий — одна граница общего контекста. Для большинства команд этого достаточно.",
      "chooseSharingLevelWorkspace": "Несколько связанных репозиториев в одной рабочей области делят контекст вместе.",
      "chooseSharingLevelEnterprise": "Самый широкий уровень. Используйте только если все подключённые проекты должны делить один пул контекста.",
      "scopeProjectLabel": "Только этот проект",
      "scopeProjectDescription": "Контекст делится только для этого подключённого репозитория.",
      "scopeWorkspaceLabel": "Рабочая область",
      "scopeWorkspaceDescription": "Контекст делится между проектами, сгруппированными в одной рабочей области.",
      "scopeEnterpriseLabel": "Организация",
      "scopeEnterpriseDescription": "Контекст делится на уровне организации между всеми подключёнными проектами.",
      "scopeSourceWithWorkspace": "Источник рабочей области: {{workspace}} в {{enterprise}}.",
      "scopeSourceWithoutWorkspace": "Рабочая область не выбрана. Этот проект всё равно принадлежит {{enterprise}}.",
      "selectedEnterprise": "выбранной организации",
      "notSelected": "Не выбрано",
      "canonicalRepoId": "Canonical repo ID",
      "displayName": "Display name",
      "noWorkspace": "No workspace",
      "workspaceLabel": "Workspace",
      "noWorkspaceAssigned": "No workspace",
      "enrollProject": "Enroll project",
      "editPolicy": "Edit policy",
      "pendingRemoval": "Pending removal",
      "removeProject": "Remove project",
      "selectProject": "Select project",
      "allowDegraded": "Allow degraded provider",
      "allowLocalFallback": "Allow local fallback",
      "requireFullSupport": "Require full support",
      "savePolicy": "Save policy",
      "documents": "Knowledge & standards",
      "documentTitle": "Document title",
      "createDocument": "Create document",
      "selectDocument": "Select document",
      "selectVersion": "Select version",
      "documentContent": "Document content",
      "createVersion": "Create version",
      "bindings": "Bindings",
      "required": "Required",
      "advisory": "Advisory",
      "language": "Language",
      "pathPattern": "Path pattern",
      "createBinding": "Create binding",
      "tabs": {
        "enterprise": "Организация",
        "members": "Участники",
        "projects": "Проекты",
        "knowledge": "Знания",
        "processing": "Обработка",
        "memory": "Память",
        "mcp": "MCP"
      },
      "policyTitle": "Project policy",
      "policyLoading": "Loading saved policy…",
      "policyExplainTitle": "What this policy controls",
      "policyExplainLine1": "These settings control how this shared project behaves when a provider cannot fully support shared context or when the remote shared state is unavailable.",
      "policyExplainLine2": "Use the stricter options for team-owned codebases. Use the more permissive options only when you need continuity over strict consistency.",
      "allowDegradedHelp": "Allow providers that can only inject shared context in a reduced or message-side form. Turn this off if the team requires consistent behavior across providers.",
      "allowLocalFallbackHelp": "Allow this machine to keep using its local processed context when shared remote context is stale or temporarily unavailable.",
      "requireFullSupportHelp": "Only allow providers that fully support normalized shared-context injection. This is the strictest setting.",
      "requireFullProviderSupportHelp": "Only allow providers that fully support normalized shared-context injection. This is the strictest setting.",
      "processingSummaryTitle": "Processing flow",
      "processingSummaryLine1": "Raw activity is staged locally, then materialized into processed local context on delayed jobs.",
      "processingSummaryLine2": "Shared projects can replicate processed context to the remote shared store after local materialization succeeds.",
      "processingSummaryLine3": "This panel manages enterprise policy and authored knowledge. It does not directly run the materializer.",
      "processingModelTitle": "Materialization model selection",
      "processingPrimaryCardTitle": "Primary processing path",
      "processingPrimaryBackend": "Primary SDK / backend",
      "processingPrimaryModel": "Default primary model",
      "processingPrimaryPreset": "Primary preset",
      "processingBackupCardTitle": "Backup processing path",
      "processingBackupBackend": "Backup SDK / backend",
      "processingBackupModel": "Backup model",
      "processingBackupPreset": "Backup preset",
      "processingBackupPlaceholder": "Optional fallback model",
      "processingPresetNone": "No preset",
      "processingSave": "Save processing config",
      "processingSaving": "Saving…",
      "processingReload": "Reload cloud config",
      "processingSavedPrimaryBackend": "Saved primary backend",
      "processingSavedPrimary": "Saved primary model",
      "processingSavedBackupBackend": "Saved backup backend",
      "processingSavedBackup": "Saved backup model",
      "processingUnsetValue": "unset",
      "processingCloudSyncNote": "This setting is saved in the cloud for the selected server and synced into the daemon when it is connected or restarts.",
      "processingServerRequired": "Select a server before managing processing settings.",
      "processingPrimaryOverride": "Primary override env",
      "processingBackupOverride": "Backup override env",
      "processingServerScope": "Current server scope",
      "processingProviderNote": "Choose both the SDK/backend and the model. The daemon will use this pair when it runs local shared-context materialization jobs.",
      "processingBackendNote": "The backend decides which runtime executes the model. The model alone is not enough.",
      "processingUiGap": "This setting is server-scoped, not enterprise-global.",
      "processingOperationalTitle": "Operational notes",
      "processingOperationalLine1": "If no server-saved value exists, the primary model defaults to \"sonnet\".",
      "processingOperationalLine2": "The backup model is optional and defaults to unset.",
      "processingOperationalLine3": "Different servers can still use different saved processing models. This panel edits the selected server only.",
      "memorySummaryTitle": "Memory visibility",
      "memorySummaryLine1": "Personal memory is materialized locally first, then optionally replicated to the cloud for cross-device continuity.",
      "memorySummaryLine2": "Cloud personal memory is scoped to the current signed-in user and shared across that user's devices when sync is enabled.",
      "memorySummaryLine3": "Shared memory stats show enterprise-scoped processed context that other enrolled projects can reuse.",
      "personalSyncTitle": "Personal cloud sync",
      "personalSyncDescription": "Choose whether processed personal memory should replicate to your account-wide cloud memory pool.",
      "personalSyncToggle": "Enable cloud sync for personal memory",
      "personalSyncHelp": "Enabled by default so summaries can power cross-device continuity and related-history recall. Turn it off only if you want personal memory to stay local-only.",
      "personalSyncDisableConfirm": "Turn off personal cloud sync? Cross-device memory, recent summary sync, and related-history recall may be affected until you turn it back on.",
      "memoryRecallThresholdTitle": "Порог вызова связанной истории",
      "memoryRecallThresholdDescription": "Настройте минимальный итоговый балл, необходимый перед вставкой связанной истории в сообщение.",
      "memoryRecallThresholdLabel": "Минимальный балл релевантности",
      "memoryRecallThresholdHelp": "Чем ниже значение, тем больше истории будет подставляться. Чем выше — тем строже фильтр. Значение по умолчанию: {{defaultValue}}.",
      "memoryRecallThresholdReset": "Сбросить к сохранённому",
      "memoryRecallThresholdSaved": "Сохранённый порог",
      "memoryAdvancedScoringTitle": "Расширенные настройки оценки",
      "memoryAdvancedScoringDescription": "Настройте вклад похожести, свежести, частоты вызова и близости проекта в ранжирование памяти.",
      "memoryAdvancedScoringShow": "Показать расширенные настройки",
      "memoryAdvancedScoringHide": "Скрыть расширенные настройки",
      "memoryAdvancedScoringHelp": "Это настройки для тонкой ручной калибровки. Перед применением веса нормализуются так, чтобы сумма была равна 1.0.",
      "memoryAdvancedScoringSum": "Текущая сумма весов до нормализации: {{value}}",
      "memoryAdvancedScoringReset": "Сбросить расширенные веса",
      "memoryWeightSimilarity": "Вес похожести",
      "memoryWeightRecency": "Вес свежести",
      "memoryWeightFrequency": "Вес числа вызовов",
      "memoryWeightProject": "Вес близости проекта",
      "personalSyncSave": "Save sync setting",
      "memoryTabLocalProcessed": "Local processed",
      "memoryTabLocalPending": "Local pending",
      "memoryTabCloud": "Personal cloud",
      "memoryTabShared": "Enterprise shared",
      "memoryTabPersonal": "Личная",
      "memoryTabEnterprise": "Корпоративная",
      "memoryTabUnprocessed": "Необработанные",
      "memoryTabProcessed": "Обработанные",
      "memoryTabSharedMemory": "Общая память",
      "memoryTabAuthoredContext": "Авторский контекст",
      "memoryAuthoredTitle": "Корпоративный авторский контекст",
      "memoryAuthoredDescription": "Документы, управляемые предприятием и привязанные к общим проектам. Управляется на вкладке Знания.",
      "memoryAuthoredSeeKnowledge": "Привязки авторского контекста управляются на вкладке Знания выше.",
      "memoryQueryTitle": "Query processed memory",
      "memoryQueryDescription": "Search local personal memory, cloud personal memory, and enterprise shared memory using the same filters.",
      "memoryProjectPlaceholder": "Filter by canonical repo ID",
      "memoryQueryPlaceholder": "Search summaries and compressed content",
      "memoryAllClasses": "All record classes",
      "memoryRecentSummary": "Recent summaries",
      "memoryRecentDescription": "Turn-level compressed summaries generated from recent local activity.",
      "memoryDurableCandidate": "Durable memory candidates",
      "memoryDurableDescription": "Condensed long-lived preferences, constraints, and pinned decisions.",
      "memoryLocalTitle": "Local personal memory",
      "memoryCloudTitle": "Global personal cloud memory",
      "memoryProcessedNote": "Processed memory uses semantic vector search. Raw pending events stay local and use text filtering only; cloud personal memory and enterprise shared memory store processed summaries, not raw chat transcripts.",
      "memorySharedTitle": "Enterprise shared memory",
      "memoryStatTotal": "Total records",
      "memoryStatHits": "Matched records",
      "memoryStatRecent": "Recent summaries",
      "memoryStatDurable": "Durable candidates",
      "memoryStatPending": "Unprocessed events",
      "memoryStatDirtyTargets": "Dirty targets",
      "memoryStatPendingJobs": "Queued jobs",
      "memoryStatProjects": "Projects",
      "memoryRecordProject": "Project",
      "memoryRecordStatus": "Status",
      "memoryStatusProcessed": "Processed summary",
      "memoryStatusPending": "Pending raw event",
      "memoryRecordClass": "Class",
      "memoryRecordSources": "Source events",
      "memoryRecordUpdated": "Updated",
      "memoryRecordOwner": "Владелец",
      "memoryRecordCreatedBy": "Создатель",
      "memoryRecordUpdatedBy": "Изменил",
      "memoryPendingTitle": "Pending raw events",
      "memoryPendingDescription": "These events have not been materialized yet. They remain local raw activity and only support text filtering, not semantic vector search.",
      "memoryPendingEventType": "Event type",
      "memoryPendingSession": "Session",
      "memoryProcessedTitle": "Processed memory",
      "memoryProcessedDescription": "These entries are processed memory summaries ranked with semantic vector search. Local views show processed summaries beside local pending events; cloud and enterprise views contain processed summaries only.",
      "memoryProcessedEmptyPending": "No processed summaries yet. Only pending raw events are available below.",
      "memoryExpand": "Expand",
      "memoryCollapse": "Collapse",
      "memoryRecalls": "{{count}} вызовов",
      "memoryNeverRecalled": "Не вызывалось",
      "memoryLastRecalled": "Последний вызов: {{time}}",
      "memoryArchive": "Архивировать",
      "memoryRestore": "Восстановить",
      "memoryDelete": "Удалить",
      "memoryDeleteConfirm": "Удалить эту память навсегда? Это действие нельзя отменить.",
      "memoryDeleteFailed": "Не удалось удалить память",
      "memoryArchived": "В архиве",
      "memoryShowArchived": "Показать архивные",
      "memoryMasterSummary": "Главная сводка",
      "memoryPost11AdminTitle": "Post-1.1 memory management",
      "memoryPost11AdminDescription": "Manage runtime-visible preferences, skill registry entries, markdown ingest, and observation promotion from the daemon that owns the local memory store.",
      "memoryAdminDaemonRequired": "Connect to a daemon to manage local preferences, skills, markdown ingest, and observations.",
      "memoryAdminActionFailed": "Memory management action failed",
      "memoryPreferencesTitle": "User preferences",
      "memoryPreferencesDescription": "Manage @pref entries that are injected into provider context for matching user scopes.",
      "memoryPreferenceUserPlaceholder": "Preference user id",
      "memoryPreferenceTextPlaceholder": "Preference text",
      "memoryPreferenceSave": "Save preference",
      "memoryPreferenceUser": "User",
      "memoryPreferenceDeleteConfirm": "Delete this preference? It will no longer be injected into future turns.",
      "memoryPreferencesEmpty": "No stored preferences found.",
      "memorySkillsTitle": "Skills",
      "memorySkillsDescription": "Inspect the lightweight skill registry used at startup. Full skill bodies are read only when previewed or when the agent asks for a matching skill.",
      "memoryProjectDirPlaceholder": "Project directory (for project skills / MD ingest)",
      "memorySkillRebuildRegistry": "Rebuild registry",
      "memorySkillName": "Skill",
      "memorySkillLayer": "Layer",
      "memorySkillPath": "Path",
      "memorySkillPreview": "Preview",
      "memorySkillPreviewTitle": "Skill preview",
      "memorySkillDeleteConfirm": "Delete this skill file and remove it from the registry?",
      "memorySkillsEmpty": "No registry entries found. Rebuild after installing or creating skills.",
      "memoryMdIngestTitle": "Markdown ingest",
      "memoryMdIngestDescription": "Run a bounded manual ingest for trusted project markdown files. Unsupported cross-scope ingest fails closed instead of silently downgrading.",
      "memoryMdIngestRun": "Run ingest",
      "memoryMdFilesChecked": "Files checked",
      "memoryMdObservationsWritten": "Observations written",
      "memoryMdIngestEmpty": "No manual ingest result yet.",
      "memoryObservationsTitle": "Observation store",
      "memoryObservationsDescription": "Inspect typed durable observations and promote scope only through an explicit audited UI action.",
      "memoryAllScopes": "All scopes",
      "memoryScopeLabel": "Scope",
      "memoryPromotionReasonPlaceholder": "Promotion reason (optional)",
      "memoryObservationPromote": "Promote",
      "memoryObservationsEmpty": "No observations found for the selected filters.",
      "memoryScope": {
        "user_private": "User private",
        "personal": "Personal project",
        "project_shared": "Project shared",
        "workspace_shared": "Workspace shared",
        "org_shared": "Org shared"
      },
      "memoryObservationClass": {
        "fact": "Fact",
        "decision": "Decision",
        "bugfix": "Bug fix",
        "feature": "Feature",
        "refactor": "Refactor",
        "discovery": "Discovery",
        "preference": "Preference",
        "skill_candidate": "Skill candidate",
        "workflow": "Workflow",
        "code_pattern": "Code pattern",
        "note": "Note"
      },
      "memoryFeatureStatusTitle": "Флаги функций",
      "memoryFeatureStatusDescription": "Пользовательские глобальные онлайн-переключатели памяти post-1.1. Изменения сохраняются в вашей учетной записи и применяются ко всем вашим серверам; локальная конфигурация daemon/env остается запасным вариантом.",
      "memoryFeatureEnabled": "Включено",
      "memoryFeatureDisabled": "Отключено",
      "memoryFeatureUnknown": "Неизвестно",
      "memoryFeatureDisabledNotice": "This feature is disabled; management writes are blocked until the feature flag is enabled.",
      "error": {
        "missing_observation_text": "Observation text is required.",
        "observation_not_found": "Observation not found.",
        "observation_mutation_forbidden": "You are not authorized to modify this observation.",
        "missing_memory_text": "Требуется текст памяти.",
        "memory_not_found": "Запись памяти не найдена."
      },
      "memoryToolsTitle": "Memory tools",
      "memoryToolsDescription": "Manage preferences, skills, markdown ingest, observations, and daemon memory feature status with the selected project identity.",
      "memoryToolTabStatus": "Status",
      "memoryToolTabPreferences": "Preferences",
      "memoryToolTabSkills": "Skills",
      "memoryToolTabMdIngest": "Markdown",
      "memoryToolTabObservations": "Observations",
      "mcpTitle": "Model Context Protocol",
      "mcpSummaryLine1": "Управляемые провайдеры могут открывать одиннадцать runtime-scoped MCP tools через server под контролем daemon: memory search, recent summaries, source lookup, observation/preference writes, scoped Send и Cron scheduling.",
      "mcpSummaryLine2": "Memory tools возвращают compact hits с ref и projectionId; list_memory_summaries получает recent digests, а get_memory_sources разворачивает relevant hits, когда важны точные прошлые инструкции, bug details или source evidence.",
      "mcpSummaryLine3": "Send tools находят sibling sessions и отправляют scoped text, file references, reply requests или broadcasts через защищённый imcodes send pipeline.",
      "mcpSummaryLine4": "Cron tools создают, показывают, обновляют и удаляют scheduled structured sends для reminders, recurring checks, delegated reviews и follow-ups.",
      "mcpSummaryLine5": "Здесь показаны готовность провайдера, причины деградации, feature gates и последние редактированные вызовы; если MCP-статус не сообщён, это явно отображается вместо предположения, что tools healthy.",
      "mcpProviderStatusTitle": "MCP-статус провайдера",
      "mcpProviderStatusDescription": "Для MVP stdio MCP с одиннадцатью инструментами отслеживаются шесть управляемых провайдеров.",
      "mcpToolGatesTitle": "Gates семейств инструментов",
      "mcpToolGatesDescription": "Memory, Send и Cron должны пройти базовые feature gates и MCP kill-switches.",
      "mcpRecentCallsTitle": "Последние редактированные MCP-вызовы",
      "mcpRecentCallsDescription": "Здесь отображаются только фрагменты запросов и результатов, редактированные daemon.",
      "mcpNoDaemon": "Подключите локальный daemon, чтобы загрузить MCP-статус.",
      "mcpStatusLoading": "Ожидание MCP-статуса от daemon…",
      "mcpStatusTimeout": "Ответа MCP-статуса пока нет. Текущий daemon может не предоставлять это представление.",
      "mcpStatusError": "Не удалось загрузить MCP-статус.",
      "mcpUpdatedAt": "Обновлено",
      "mcpUpdatedNever": "Не сообщено",
      "mcpProvidersReported": "Провайдеров сообщено",
      "mcpCallsReported": "Вызовов сообщено",
      "mcpProviderConnected": "Провайдер подключен",
      "mcpProviderDisconnected": "Провайдер отключен",
      "mcpProviderNoSignal": "Нет сигнала провайдера",
      "mcpProviderNoDegradedReasons": "Причины деградации не сообщены.",
      "mcpProviderStatusHint": "MCP-статус сообщается отдельно от подключения провайдера.",
      "mcpProviderClaudeSdk": "Claude SDK",
      "mcpProviderGeminiAcp": "Gemini ACP",
      "mcpProviderKimiAcp": "Kimi ACP",
      "mcpProviderCopilotSdk": "Copilot SDK",
      "mcpProviderCodexSdk": "Codex SDK",
      "mcpProviderCursorHeadless": "Cursor headless",
      "mcpProviderQwen": "Qwen",
      "mcpProviderUnknown": "{{provider}}",
      "mcpDisabledFlag": "Отключающий флаг: {{flag}}",
      "mcpDisabledFlagNone": "Отключающий флаг не сообщен",
      "mcpDegradedReasons": "Причины: {{reasons}}",
      "mcpGateNoDetails": "Детали gate не сообщены.",
      "mcpRecentCallsEmpty": "Редактированные MCP-вызовы пока не сообщены.",
      "mcpCallProvider": "Провайдер",
      "mcpCallTool": "Инструмент",
      "mcpCallStatus": "Статус",
      "mcpCallDuration": "Длительность",
      "mcpCallDurationValue": "{{ms}} ms",
      "mcpCallTime": "Время",
      "mcpCallFamily": "Семейство",
      "mcpCallInput": "Редактированный ввод",
      "mcpCallResult": "Редактированный результат",
      "mcpStatus": {
        "ready": "Готов",
        "degraded": "Деградирован",
        "disabled": "Отключен",
        "unknown": "Неизвестно"
      },
      "mcpToolFamily": {
        "memory": "Память",
        "send": "Send",
        "cron": "Cron"
      },
      "mcpCallStatusValue": {
        "ok": "OK",
        "error": "Ошибка",
        "disabled": "Отключено",
        "unknown": "{{status}}"
      },
      "mcpReason": {
        "env_forwarding_unverified": "Передача MCP env для каждой сессии не подтверждена.",
        "feature_disabled": "Необходимый feature gate отключен.",
        "mcp_registration_failed": "Не удалось зарегистрировать управляемый MCP.",
        "provider_not_connected": "Провайдер не подключен.",
        "status_not_reported": "MCP-статус не сообщен.",
        "unknown": "{{reason}}"
      },
      "memoryProjectPickerTitle": "Project selector",
      "memoryProjectPickerDescription": "По умолчанию память просматривается по всем проектам. Выбирайте проект только для фильтрации списка или запуска локальных файловых инструментов.",
      "memoryProjectSearchPlaceholder": "Search project name, canonical ID, or directory",
      "memoryProjectSelected": "Selected project",
      "memoryProjectEmpty": "No known projects yet. Open a session in the project or use the advanced resolver fallback.",
      "memoryProjectCanonicalId": "Canonical ID",
      "memoryProjectDirectory": "Directory",
      "memoryProjectSourceLabel": "Source",
      "memoryProjectNeedsResolve": "Needs daemon resolution before local tools can run.",
      "memoryProjectResolving": "Resolving project…",
      "memoryProjectCanonicalOnlyNotice": "Этот проект может фильтровать память; действия, читающие/пишущие локальные файлы, требуют разрешенный локальный каталог.",
      "memoryProjectAdvanced": "Advanced resolver fallback",
      "memoryProjectAdvancedDescription": "Manual values are an advanced fallback. Prefer selecting a known project so the daemon can validate the directory-to-ID mapping.",
      "memoryProjectLocalToolsDisabled": "Локальным файловым инструментам нужен выбранный проект с проверенным каталогом и canonical ID. Просмотр работает и без выбора проекта.",
      "memoryProjectUnknown": "Unknown project",
      "memoryPreferenceSearchPlaceholder": "Search preferences",
      "memorySkillSearchPlaceholder": "Search skills by name, layer, path, or description",
      "memoryObservationSearchPlaceholder": "Search loaded observations",
      "memoryProjectStatus": {
        "resolved": "Resolved",
        "needs_resolution": "Needs resolution",
        "canonical_only": "Canonical ID only",
        "directory_only": "Directory only",
        "no_repo": "No repository",
        "multiple_remotes": "Multiple remotes",
        "unauthorized": "Unauthorized",
        "invalid_dir": "Invalid directory",
        "mismatch": "ID mismatch",
        "error": "Resolve failed"
      },
      "memoryProjectSource": {
        "active_session": "Active session",
        "recent_session": "Recent session",
        "enterprise_enrollment": "Enterprise project",
        "resolved_directory": "Resolved directory",
        "manual_resolved": "Manual resolved",
        "memory_index": "Индекс памяти"
      },
      "memoryFeatureLabel": {
        "preferences": "Предпочтения",
        "mdIngest": "Импорт Markdown",
        "skills": "Навыки",
        "skillAutoCreation": "Автосоздание навыков",
        "observationStore": "Хранилище наблюдений",
        "namespaceRegistry": "Реестр пространств имен"
      },
      "memoryFeatureUnavailable": "Сервер недоступен",
      "memoryFeatureUnavailableDetail": "Подключитесь к серверу, чтобы загрузить переключатели функций вашей учетной записи и включить администрирование.",
      "memoryFeatureLoading": "Загрузка",
      "memoryFeatureLoadingDetail": "Ожидание ответа сервера о состоянии функций…",
      "memoryFeatureNoResponse": "Нет ответа",
      "memoryFeatureNoResponseDetail": "Сервер не ответил на запрос состояния функций. Обновите или переподключитесь.",
      "memoryFeatureError": "Ошибка",
      "memoryFeatureErrorDetail": "Не удалось загрузить состояние функций.",
      "memoryFeatureUnknownDetail": "Ответ сервера не содержит этот флаг.",
      "memoryFeatureEnabledDetail": "Эта функция включена для вашей учетной записи и будет применяться на всех ваших серверах.",
      "memoryFeatureDisabledHint": "Отключено для вашей учетной записи. Включите здесь, чтобы сохранить онлайн для всех ваших серверов; {{env}} остается запасным вариантом запуска daemon. {{behavior}}",
      "memoryBrowseProjectFilter": "Memory browse filter",
      "memoryBrowseAllProjects": "All projects (default)",
      "memoryAllProjectsActive": "All projects",
      "memoryActiveProjectFilter": "Filtered by {{project}}",
      "memoryClearProjectFilter": "Clear filter",
      "memoryToolProjectSelector": "Проект для локальных действий (нужен каталог)",
      "memoryToolProjectNone": "Select a project for local tools",
      "memoryProjectPickerSplitHelp": "Верхний фильтр управляет просмотром памяти и по умолчанию охватывает все проекты. Проект для локальных действий нужен только инструментам с каталогом, например Markdown ingest или rebuild/read skills.",
      "memoryProjectKnownProjects": "Known projects",
      "memoryProjectNoCanonicalId": "no canonical ID",
      "memoryProjectNoDirectory": "no local directory",
      "memoryPersonalBreakdown": "Personal total breakdown: {{processed}} local processed · {{pending}} local pending · {{cloud}} cloud.",
      "memoryFilteredByProject": "Showing results filtered by {{project}}.",
      "memoryProcessedEmptyWithCloud": "No local processed summaries. Personal cloud has {{count}} records available.",
      "memoryViewPersonalCloud": "View personal cloud",
      "memoryUnprocessedEmptyWithData": "No local pending raw events. Existing processed/cloud records are available in the other tabs.",
      "memoryLocalStatusLoading": "Loading local daemon memory…",
      "memoryLocalStatusUnavailable": "Local daemon is unavailable; local processed and pending counts cannot be loaded.",
      "memoryLocalStatusNoResponse": "No response from the local daemon; local counts may be stale or unavailable.",
      "memoryLocalStatusError": "Local daemon returned an error while loading personal memory.",
      "memoryToolDisabledNoDaemon": "Connect the local daemon before using this management action.",
      "memoryToolDisabledFeature": "Эта функция отключена. Включите ее глобально для учетной записи во вкладке Feature flags; {{env}} остается запасным вариантом запуска daemon.",
      "memoryToolDisabledFeatureUnknown": "Состояние функций еще не загружено; сначала обновите панель управления.",
      "memoryToolDisabledProjectRequired": "Select a resolved project with both canonical ID and local directory before running this local tool.",
      "memoryFeatureEnableAction": "Включить",
      "memoryFeatureDisableAction": "Отключить",
      "memoryFeatureToggleSaving": "Сохранение…",
      "memoryFeatureDependencyBlockedHint": "Запрошено включение, но зависимости отключены: {{deps}}. Сначала включите зависимости. {{behavior}}",
      "memoryFeatureBlocked": "Заблокировано",
      "memoryFeatureDisabledBehavior": {
        "preferences": "Строки @pref проходят как обычный текст и не сохраняются/не удаляются.",
        "mdIngest": "Markdown-файлы не читаются, не разбираются и не импортируются.",
        "skills": "Загрузчик возвращает пустой набор; рендер навыков пропускается; административные записи отклоняются или отключены.",
        "skillAutoCreation": "Задания проверки навыков не берутся и не создаются. Существующие навыки загружаются, когда включены Навыки.",
        "observationStore": "Новые строки наблюдений не записываются; обработанные проекции остаются читаемыми.",
        "namespaceRegistry": "Новые записи namespace не пишутся вне миграции/backfill; старые проекции остаются читаемыми."
      },
      "processingPresetLabel": "Пресет",
      "processingPresetNoneTitle": "Без пресета — использовать стандартный endpoint провайдера",
      "processingPresetBundleModelTitle": "Пакет пресета → модель: {{model}}",
      "processingPresetBundleTitle": "Пакет пресета: {{preset}}",
      "processingModelLabel": "Модель",
      "processingModelPresetTitle": "Модель задается активным пресетом. Очистите пресет, чтобы выбрать другую.",
      "processingModelDefinedByPreset": "(задано пресетом)",
      "relativeLessThanOneMinute": "<1 мин назад",
      "relativeMinutesAgo": "{{count}} мин назад",
      "relativeHoursAgo": "{{count}} ч назад",
      "relativeDaysAgo": "{{count}} д назад",
      "serverUnbound": "Не привязан",
      "statEnterprise": "Предприятие",
      "noneValue": "Нет",
      "statRole": "Роль: {{role}}",
      "statChooseOrCreateEnterprise": "Выберите или создайте",
      "statMembers": "Участники",
      "statProjects": "Проекты",
      "statKnowledgeDocs": "Документы знаний",
      "statServer": "Сервер",
      "statCloudSyncedRuntimeSettings": "Runtime-настройки синхронизированы с облаком",
      "statSelectServerToSync": "Выберите сервер для синхронизации обработки",
      "inviteFlowLine1": "Новые приглашения дают только доступ участника.",
      "inviteFlowLine2": "Роли администраторов меняются после входа в разделе участников.",
      "workspaceId": "ID рабочей области",
      "activeCount": "{{count}} активн.",
      "role": "Роль",
      "joined": "Присоединился",
      "statusLabel": "Статус",
      "scopeLabel": "Область",
      "meaningLabel": "Значение",
      "documentKind": {
        "coding_standard": "Стандарт кодирования",
        "architecture_guideline": "Архитектурное руководство",
        "repo_playbook": "Playbook репозитория",
        "knowledge_doc": "Документ знаний"
      },
      "versions": "Версии",
      "activeVersion": "Активная",
      "documentLabel": "Документ",
      "versionLabel": "Версия",
      "anyValue": "Любой",
      "pathLabel": "Путь",
      "memoryPromotionTargetLabel": "Promotion target scope",
      "memoryPromotionReasonLabel": "Promotion reason",
      "memoryPromotionHelp": "Promotion is a two-step audited action. Choose a target scope, review the exact from/to change on the record, then confirm. Confirming may make the observation available under the target scope authorization rules.",
      "memoryPromotionNotAllowed": "Cannot promote from {{from}} to {{to}}.",
      "memoryObservationPromoteTitle": "Review promotion from {{from}} to {{to}}",
      "memoryObservationPromoteTo": "Promote to {{scope}}…",
      "memoryPromotionConfirmTitle": "Confirm observation promotion",
      "memoryPromotionConfirmBody": "This will promote the observation from {{from}} to {{to}} and write a promotion audit entry. The original source text is not edited, but future memory selection may use the target scope visibility rules.",
      "memoryPromotionReasonPreview": "Reason: {{reason}}",
      "memoryPromotionNoReason": "No reason provided. The audit entry will still record actor, source scope, target scope, and time.",
      "memoryPromotionCancel": "Cancel",
      "memoryPromotionConfirmAction": "Confirm promotion",
      "memoryPreferenceUpdate": "Update preference",
      "memoryEdit": "Edit",
      "memoryEditCancel": "Cancel edit",
      "memoryObservationEditTextLabel": "Observation text",
      "memoryObservationUpdate": "Update observation",
      "memoryObservationDeleteConfirm": "Delete this observation and its linked projection when present?",
      "memoryPin": "Закрепить",
      "memoryUpdate": "Обновить память",
      "memoryEditTextLabel": "Текст памяти",
      "memoryManualAddTitle": "Добавить память вручную",
      "memoryManualAddDescription": "Сохранить личную память проекта, не дожидаясь автоматического сжатия.",
      "memoryManualAddClassLabel": "Тип памяти",
      "memoryManualAddTextLabel": "Текст ручной памяти",
      "memoryManualAddPlaceholder": "Запишите долговечную заметку, решение или сводку для этого проекта…",
      "memoryManualAddSave": "Сохранить память",
      "memoryManualAddProjectRequired": "Перед добавлением памяти выберите проект в списке или фильтре."
    },
    "diagnostics": {
      "title": "Diagnostics",
      "load": "Load diagnostics",
      "workspaceId": "Workspace ID",
      "enrollmentId": "Enrollment ID",
      "filePath": "File path",
      "mode": "Retrieval mode",
      "visibility": "Visibility",
      "remoteProcessed": "Remote processed present",
      "derivedOnDemand": "Derived on demand",
      "persistedSnapshotAvailable": "Persisted snapshot available",
      "appliedVersions": "Applied versions",
      "runtimeBindings": "Runtime authored context",
      "snapshotTitle": "Persisted snapshot",
      "snapshotBindings": "Snapshot bindings"
    }
  },
  "embedding": {
    "status_unknown": "Статус эмбеддинга неизвестен (устаревший демон или нет соединения)",
    "status_ready": "Эмбеддинг готов — семантический поиск выполняется локально",
    "status_loading": "Загрузка модели эмбеддинга…",
    "status_fallback": "Эмбеддинг: локальный пайплайн недоступен, используется резервный сервер",
    "status_unavailable": "Эмбеддинг недоступен — семантический поиск отключён на этом демоне",
    "status_idle": "Эмбеддинг бездействует (не использовался в этой сессии)"
  },
  "memory": {
    "quickSearch": {
      "disabled": "Поиск памяти отключен",
      "noResults": "Нет разрешенных результатов памяти",
      "citationUnavailable": "Цитата недоступна"
    },
    "skills": {
      "disabled": "Навыки отключены",
      "loadFailed": "Не удалось загрузить навык",
      "renderDropped": "Навык исключен из контекста",
      "layerDiagnostics": "Диагностика слоев навыков",
      "enforced": "Обязательный",
      "additive": "Добавочный"
    }
  },
  "todos": {
    "title": "Задачи",
    "progress": "{{done}}/{{total}}",
    "collapse": "Свернуть",
    "expand": "Развернуть"
  }
}
