micro-models-agent 2.26.0 → 2.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/assets/js/feed/core.js +1 -1
- package/dist/assets/js/feed/history.js +1 -1
- package/dist/assets/js/feed/image-card.js +1 -0
- package/dist/assets/js/feed/stream.js +1 -1
- package/dist/assets/js/feed/turn.js +4 -4
- package/dist/assets/js/format.js +2 -2
- package/dist/assets/js/lightbox.js +1 -0
- package/dist/assets/js/settings/controls.js +1 -1
- package/dist/assets/js/settings/editors.js +1 -1
- package/dist/assets/js/settings/panels.js +1 -1
- package/dist/assets/styles.css +1 -1
- package/dist/i18n/en.json +1 -1
- package/dist/i18n/ru.json +1 -1
- package/dist/main.js +321 -321
- package/package.json +1 -1
package/dist/i18n/ru.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file.created":"Создан {path}","file.deleted":"Удалён {path}","file.updated":"Обновлён {path}","file.written":"Записан {path}","file.syntax_error":"Синтаксическая ошибка в {path}:\n{error}\n\nФайл НЕ записан. Исправьте синтаксическую ошибку и попробуйте снова.","file.notfound":"Файл не найден: {path}\nЭто НЕ значит, что проект отсутствует — возможно, путь неверный. Выполни list_dir по рабочей директории; создавай файлы только после проверки того, что уже есть.","file.dir_notfound":"Каталог не найден: {path}\nЭто НЕ значит, что проект отсутствует — возможно, путь неверный. Выполни list_dir по рабочей директории (и родителю этого пути), чтобы найти реальное расположение, прежде что-то создавать.","file.path_not_allowed":"Путь недопустим: {path}","file.path_not_allowed_short":"Путь недопустим","file.is_directory":"Это каталог, используйте rmdir: {path}","file.replaced_in":"Заменено в {path}","file.string_not_found":"Строка не найдена в файле:\n{str}\n\nИспользуй read_file для {path}, чтобы увидеть текущее содержимое файла перед редактированием — искомая строка может отличаться (пробелы, переводы строк) или уже была заменена.","file.edit_args_invalid":"edit_file требует строковые аргументы \"old\" и \"new\". Получено: old={oldType}, new={newType}.","file.read_failed":"Не удалось прочитать {path}: {error}","file.write_failed":"Не удалось записать {path}: {error}","file.protected_path_ask":"Защищённый путь \"{path}\" (совпадает с {pattern}). НЕ изменяй его. Спроси у пользователя явного подтверждения и дождись ответа — не обходи это ограничение.","file.moved":"Перемещён {from} → {to}","file.not_found_short":"Не найдено: {path}","file.empty":"(пусто)","file.no_matches":"Нет совпадений","file.truncated":"\n... (обрезано)","file.read_header":"── {path} ({ext}, {total} строк, строки {from}-{to})","file.read_range":"строки {from}-{to} из {total}","file.read_truncated":"\n\n[Обрезано: ещё {remaining} строк. Продолжите чтение через read_file с offset={next}]","file.empty_page":"(пустая страница)","error.timeout":"Таймаут запроса","error.unknown":"Неизвестная ошибка","error.notfound":"Не найдено: {path}","error.prefix":"Ошибка: ","error.command_error":"Ошибка команды: {message}","error.llm":"Ошибка LLM: {message}","error.response_blocked":"Ответ заблокирован: {reason}","error.max_iters":"Достигнут максимум итераций ({max})","error.empty_response":"Модель вернула пустой ответ после повторных попыток","error.audit_failed":"Задача не может быть подтверждена как выполненная: {summary}","error.retry_loop_stopped":"Остановлено после {count} провальных пакетов тулов подряд — агент крутил повторы падающего действия вместо завершения","error.readonly_loop_stopped":"Остановлено после {count} шагов подряд только чтения/поиска — агент читал вместо того, чтобы ответить или сделать изменение","error.grep_failed":"Ошибка grep: {message}","error.grep_no_engine":"Движок grep \"{engine}\" недоступен: бинаря нет в PATH. Поставь tools.grepEngine=auto или js, либо используй read_file/list_dir.","error.search_failed":"Ошибка поиска: {message}","error.fetch_failed":"Ошибка загрузки: {message}","error.fetch_url_failed":"Не удалось загрузить {url}: {message}","error.http":"HTTP {status}: {statusText}","error.llm_api":"Ошибка LLM API {status} ({statusText}): {errorText}","error.llm_retries":"Запрос LLM не удался после повторов","error.llm_429":"Превышен лимит запросов (HTTP 429) для {model} на {baseUrl}. Провайдер ограничивает трафик — особенно строгие free-модели. Получите API-ключ или переключитесь на платную/быструю модель: {baseUrl}","error.no_response_body":"Нет потока тела ответа","error.llm_stream_idle":"Поток LLM завис — нет данных {timeout}мс. Если провайдер буферизирует стрим (например, LM Studio) или генерирует очень длинные tool calls, увеличьте \"retry.noDataTimeoutMs\" в ~/.mma/config.json (нужен рестарт)","error.llm_stream_idle_toolcall":"Поток LLM завис после начала tool_call — нет данных {timeout}мс. Скорее всего провайдер буферизирует SSE вместо потоковой передачи аргументов tool_call (наблюдается в LM Studio). Увеличьте \"retry.noDataTimeoutMs\" в ~/.mma/config.json (нужен рестарт)","error.llm_truncated":"Ответ упёрся в лимит токенов генерации ({tokens}) и был обрезан до какого-либо содержимого. Разбейте задачу на меньшие порции вывода или увеличьте \"maxCompletionTokens\" в конфиге","error.llm_truncated_toolcall":"Ответ упёрся в лимит токенов генерации ({tokens}) посреди tool_call — его аргументы обрезаны. Пишите файл частями (несколько вызовов write_file/edit_file) или увеличьте \"maxCompletionTokens\" в конфиге","error.llm_output_truncated":"Ответ упёрся в лимит токенов генерации ({tokens}) и был обрезан — этот ответ неполный. Увеличьте \"maxCompletionTokens\" в конфиге, чтобы разрешить длинные ответы","error.llm_provider_stream_error":"Провайдер вернул ошибку посреди стрима: {error}","error.llm_timeout":"Время запроса LLM истекло ({timeout}мс)","error.context_log_init":"Context log включён, но не удалось инициализировать: {error}. Diff контекста писаться не будет.","error.provider_build":"Не удалось собрать провайдера \"{name}\": {error}","env.runtime_node":"Запущено под Node (v{version}) — вставка изображений из буфера и LSP на Windows работают урезанно. Установите Bun (https://bun.sh) для полного функционала.","env.runtime_old":"Версия рантайма {version} ниже требуемой engines {engine}.","env.tool_missing":"Инструмент не найден в PATH: {tool}","env.playwright_missing":"Пакет Playwright не установлен — браузерный инструмент не будет работать. Установите: bun add playwright","env.playwright_browsers_missing":"Браузеры Playwright не скачаны ({dir}). Браузерный инструмент не будет работать. Установите: bunx playwright install chromium","env.crash_stderr":"MMA упал ({type}): {message} — отчёт о падении записан в ~/.mma/logs/crash.jsonl","env.model_autoload_failed":"Не удалось автоматически загрузить модель: {error}. Продолжаю с ручной загрузкой.","env.model_loaded":"Модель {model} загружена за {seconds}с","env.reasoning_probe":"Проверка reasoning: стратегия={strategy} → {result}","env.reasoning_respected":"механизм соблюдается","env.reasoning_ignored":"механизм ИГНОРИРУЕТСЯ","env.indexing":"Индексация файлов проекта…","env.indexed":"Проиндексировано файлов: {files} (карта проекта)","env.indexing_failed":"Ошибка индексации проекта: {error}","env.index_skip_unreadable":"индексатор: пропускаю недоступный файл \"{path}\"","env.killed_processes":"Остановлено фоновых процессов при завершении: {count}","session.started":"Сессия начата: {id}","session.ended":"Сессия завершена: {id}","session.not_found":"Сессия не найдена: {id}","session.no_active":"Нет активной сессии","session.deleted":"Сессия удалена: {id}","session.pruned":"Удалено пустых сессий: {n}","session.prune_dry":"Будет удалено пустых сессий: {n}","session.prune_empty":"Пустых сессий нет","session.renamed":"Сессия переименована в: {name}","session.created":"Создана сессия: {name}","session.resumed":"Возобновлена сессия: {name}","session.chat_cleared":"Чат очищен. Начните вводить.","session.chat_loaded":"История чата загружена. Продолжите с места остановки.","session.chat_history":"История чата:","session.user_label":"Пользователь","session.assistant_label":"Ассистент","session.no_history":"История чата пуста","session.no_sessions":"Сессии не найдены","session.no_sessions_hint":"Сессии не найдены. Создайте одну командой /new <имя>","session.available":"Доступные сессии:","session.no_match":"Нет сессии подходящей по \"{query}\"","session.default_name":"Сессия {date}","session.auto_named":"Сессия названа: {name}","session.info_full":"[Сессия: \"{name}\" ({id}) | модель: {model} | контекст: {contextWindow} токенов]","session.col_active":"","session.col_id":"ID","session.col_name":"Имя","session.col_updated":"Обновлена","session.col_msgs":"Сообщ.","tool.executed":"Выполнен {name}","tool.failed":"Инструмент {name} упал: {error}","tool.unknown":"Неизвестный инструмент: {name}","tool.not_allowed":"Инструмент недоступен в этом режиме: {name}","tool.blocked":"Заблокировано плагином: {plugin}","tool.ui.security_blocked":"Заблокировано политикой безопасности","tool.ui.protected_path":"Защищённый путь — нужно подтверждение","tool.blocked_reason":"Заблокировано плагином: {plugin}. Причина: {reason}","tool.using":"[{label}]","tool.friendly.write_file":"Запись файла","tool.friendly.read_file":"Чтение файла","tool.friendly.edit_file":"Редактирование файла","tool.friendly.create_dir":"Создание папки","tool.friendly.delete_file":"Удаление файла","tool.friendly.move_file":"Перемещение файла","tool.friendly.list_dir":"Список файлов","tool.friendly.file_info":"Информация о файле","tool.friendly.glob":"Поиск файлов","tool.friendly.grep":"Поиск по содержимому","tool.friendly.bash":"Выполнение команды","tool.friendly.load_skill":"Загрузка скилла","tool.friendly.plan":"Планирование","tool.friendly.todo":"Обновление задач","tool.friendly.verify":"Проверка","tool.friendly.web_search":"Поиск в интернете","tool.friendly.web_fetch":"Загрузка страницы","tool.friendly.web_browse":"Просмотр страницы","tool.friendly.download_file":"Скачивание файла","tool.friendly.chunk_query":"Запрос чанков","tool.web_fetch_result":"Загружена страница: {url} — {chars} симв., {lines} строк{truncated}","tool.web_fetch_no_content":"Нет читаемого содержимого на {url} — страница требует JavaScript или это защита от ботов. Используй тул \"browser\" или другой источник.","tool.web_browse_result":"Просмотрена страница: {url} — {chars} симв., {lines} строк{truncated}","tool.web_search_result":"Результаты поиска \"{query}\" — {count} результатов","tool.downloaded":"Скачано {url} → {path} ({size} байт, {type})","tool.download_too_large":"Скачивание заблокировано: файл превышает лимит {max} байт","tool.friendly.browser":"Браузер","tool.friendly.subagent":"Задача подагенту","tool.friendly.question":"Вопрос пользователю","tool.friendly.approve":"Запрос подтверждения","tool.friendly.search_history":"Поиск в истории","tool.friendly.pipeline_run":"Запуск пайплайна","tool.friendly.mcp_call":"MCP вызов","tool.friendly.lsp_check":"Проверка кода","tool.friendly.meet_done":"Знакомство завершено","tool.truncated":"[Обрезано: удалено {tokens} токенов]","critic.repair":"Верификатор отметил критичные проблемы; исправь их до завершения:\n{issues}\nСводка: {summary}","critic.advice":"Верификатор отметил проблемы, которые стоит проверить до завершения:\n{issues}","critic.repeat":"Верификатор повторяет уже отмеченную проблему — не выдавай тот же ответ снова. Смени подход или заверши честно, если жалоба неприменима:\n{issues}","tool.subagent_queued":"Задача подагенту добавлена: {task}","tool.subagent_artifact":"Суб-агент завершён. Полный результат сохранён в артефакт: {path}\nИтераций: {iterations}\nСводка:\n{summary}","tool.pipeline_started":"Пайплайн \"{name}\" запущен. Движок пайплайнов — заглушка, задача отправлена.","tool.mcp_call":"MCP вызов: {server}/{tool} с {args}","tool.action_required":"Требуется действие.","tool.approve_prompt":"Одобрить? {action}","tool.approve_yes":"Да","tool.approve_yes_desc":"Одобрить действие","tool.approve_no":"Нет","tool.approve_no_desc":"Отклонить действие","tool.approved":"Одобрено","tool.rejected":"Отклонено пользователем","tool.user_input.custom_option":"Свой вариант","tool.user_input.choice_single":"> Ваш выбор (1-{max}): ","tool.user_input.choice_multiple":"> Ваш выбор (через запятую, напр. 1,3): ","tool.user_input.invalid":"Неверный выбор, попробуйте ещё раз.","tool.user_input.custom_prompt":"Ваш ответ: ","tool.question.progress":"Вопрос {current}/{total}","tool.question.no_questions":"Вопросы не указаны","tool.question.unanswered":"Без ответа","tool.question.answered":"Пользователь ответил на ваши вопросы: {formatted}. Теперь продолжайте с учётом ответов.","tool.question.memory_only":"Память уже отвечает на эти вопросы — они НЕ задавались. НЕ вызывайте question для них снова: продолжайте работу, приняв значения из памяти, и кратко скажите пользователю, что взяли из памяти.","tool.question.memory_known":"Память уже отвечает: {formatted}. Эти вопросы НЕ задавались — не переспрашивайте их. Продолжайте с этими значениями; если пользователь поправит — обновите ответ, но вызов question не повторяйте.","tool.question.memory_repeat":"Повтор: эта тема уже закрыта памятью выше. Не вызывайте question снова — продолжайте с уже известным значением.","tool.question.session_only":"Ответы живут только в этой сессии — ничего не пишите через remember без явной просьбы пользователя.","tool.question.batch_truncated":"Заданы первые {shown} из {total} неизвестных вопросов — вызовите тул ещё раз для остальных.","tool.name_or_task":"Укажите параметр \"name\" или \"task\"","tool.chunk_query_no_query":"chunk_query: требуется строка запроса.","tool.chunk_query_no_input":"chunk_query: укажите input_path или text.","tool.chunk_query_no_provider":"chunk_query: в контексте нет LLM-провайдера.","tool.chunk_query_path_not_allowed":"[SCOPE] {reason}","tool.chunk_query_read_failed":"Не удалось прочитать {path}: {error}","tool.subagent_cannot_run":"Субагент не может запуститься: в контексте нет LLM-провайдера или исполнителя тулов.","tool.subagent_failed":"Субагент упал: {error}\nЧастичный вывод: {text}","tool.subagent_completed":"Субагент завершил работу:\n{text}\n\nИтераций: {iterations}","tool.subagent_error":"Ошибка субагента: {error}","tool.pipeline_cannot_run":"Пайплайн не может запуститься: в контексте нет LLM-провайдера или исполнителя тулов.","tool.pipeline_failed":"Пайплайн \"{name}\" упал. Выполнено шагов: {done}/{total}.\n{logs}","tool.pipeline_completed":"Пайплайн \"{name}\" успешно завершён (шагов: {steps}).\n{logs}","tool.pipeline_error":"Ошибка пайплайна: {error}","tool.mcp_server_not_found":"MCP-сервер \"{server}\" не найден. Доступны: {available}","tool.mcp_call_failed":"Вызов MCP не удался: {error}","tool.meet_done":"Интервью отмечено завершённым.","tool.invalid_params":"Неверные параметры","tool.skill_budget":"Скилл \"{name}\" загружен ({tokens} токенов, осталось {remaining} в бюджете скиллов). Контент скилла теперь в системном промпте — перезагрузка после компрессии не нужна.","tool.skill_available_hint":"Доступные скиллы","tool.skill_did_you_mean":"Возможно, вы имели в виду","tool.no_results":"Нет результатов по \"{query}\"","tool.search_results":"Результаты поиска \"{query}\":\n{results}","tool.web_search_disabled":"Веб-поиск отключён (webSearch.enabled: false). Используй только файловые и системные инструменты.","tool.history_results":"Результаты истории \"{query}\":\n{results}","tool.no_history":"Нет записей истории по \"{query}\"","tool.no_sessions_dir":"Каталог сессий не найден по {dir}","tool.history_error":"Ошибка поиска истории: {error}","tool.memory_error":"Ошибка памяти: {error}","tool.screenshot_unavailable":"[Скриншот сделан — изображение недоступно для текстовой модели]","tool.timeout":"Инструмент {name} превысил таймаут ({seconds} сек)","tool.aborted":"Инструмент {name} прерван пользователем","tool.interactive_disabled":"Интерактивный инструмент отключён в режиме exit-on-complete. Продолжай без вопроса пользователю.","proc.started":"Фоновый процесс запущен: {id} (PID {pid}).\nКоманда: {command}","proc.promoted_hint":"Команда всё ещё выполняется через {ms} мс — переведена в фоновый режим","proc.manage_hint":"Проверить вывод: process_log id={id}. Дождаться завершения: process_wait id={id}. Остановить: process_kill id={id}. Список всех: process_list.","proc.output_preview":"Первые строки вывода:\n{lines}","proc.none":"Фоновых процессов нет.","proc.not_found":"Процесс не найден: {id}","proc.missing_id":"Укажите id процесса: process_kill id=proc_xxx (id возвращается bash при уходе команды в фон или выводится через process_list).","proc.missing_id_list":"Сейчас фоновых процессов нет.","proc.killed":"Процесс {id} (PID {pid}) остановлен.","proc.kill_failed":"Не удалось остановить процесс {id}","proc.list_header":"Фоновые процессы","proc.log_header":"Вывод процесса {id} ({status}):","proc.log_empty":"(вывода пока нет)","proc.hint":"Управление: {list}, {log}, {kill}.","proc.status_running":"работает","proc.status_exited":"завершён","proc.status_killed":"остановлен","proc.wait_exited":"Процесс {id} {status} за {ms} мс с кодом {code}.","proc.wait_running":"Процесс {id} всё ещё работает (ждали {ms} мс).","proc.wait_hint":"Подождать ещё: process_wait id={id}. Проверить вывод: process_log id={id}. Остановить: process_kill id={id}.","tool.friendly.process_list":"Список фоновых процессов","tool.friendly.process_log":"Вывод процесса","tool.friendly.process_kill":"Остановка процесса","tool.friendly.process_wait":"Ожидание процесса","plan.no_steps":"Не указаны шаги плана. Укажите конкретные шаги с файлами и командами.","plan.created":"План создан: {title} ({steps} шагов)","plan.coverage_blocked":"План не покрывает файлы из постановки: {missing}. Добавь шаги с точными путями этих файлов и проверками, затем вызови plan create снова.","plan.checks_required":"Каждому шагу нужен контракт проверки: передай checks 1:1 к steps — по одному на шаг: \"file-exists:<путь>\" (проверяется автоматически), \"command:<команда>\" (запусти перед done) или \"manual:<что проверить глазами>\" (только UI/визуал).","plan.checks_not_array":"checks должен быть массивом строк проверок 1:1 к шагам","plan.checks_mismatch":"checks должны идти 1:1 к steps: получено {actual} проверок на {expected} шагов. Пример: steps [\"Создать src/a.ts\"] + checks [\"file-exists:src/a.ts\"]. Не передавай checks — тогда каждый шаг самоподтвердится.","plan.checks_invalid":"Недопустимые проверки: {kinds}. Каждая должна начинаться с \"file-exists:\", \"command:\" или \"manual:\".","plan.check_failed":"Нельзя отметить шаг {step} выполненным: его проверка не прошла — {check}. Сначала выполни проверку (создай файл / запусти команду), затем отмечай done.","plan.check_self_certified":"проверка подтверждена: {check} — выполнено перед done.","plan.step_done":"Шаг {n}/{total}: {description} ✓","plan.complete":"Задача выполнена: {summary}","plan.title_steps":"План \"{title}\" создан с {count} шагами","plan.step_marked":"Шаг {step} отмечен как {status}","plan.aborted":"План отменён","plan.completed_archived":"План {id} завершён ({done}/{total} шагов) — архивирован. Для новой задачи создай новый план (plan create) или дай финальный ответ.","plan.unknown_action":"Неизвестное действие плана: {action}","plan.updated":"План обновлён: {title} ({steps} шагов)","plan.acknowledged":"План {action}: принято","plan.step_status":"Шаг {step}: {status}","plan.no_active":"Нет активного плана","plan.no_active_with_last":"Нет активного плана. Последний завершённый: {id} \"{title}\" ({done}/{total} шагов). Продолжи новым планом (action=create) или заверши ответ.","plan.step_not_found":"Шаг не найден","plan.step_required":"Укажи номер шага: plan_step step=N status=done|failed|skipped.","plan.bad_status":"Недопустимый статус «{status}». Используйте один из: {allowed}.","plan.step_already_done":"Шаг {step} уже выполнен — ничего делать не нужно. Прогресс плана:","plan.order_blocked":"Нельзя отметить шаг {step} выполненным: шаг {first} («{desc}») ещё не завершён. Сначала завершите предыдущие шаги или отметьте шаг {first} status=skipped, если он не нужен.","plan.deliverables_missing":"Нельзя отметить шаг {step} выполненным: указанные в нём файлы ещё не существуют: {files}. Сначала создайте эти файлы (или отметьте шаг status=skipped, если они на самом деле не нужны).","plan.kinds_mismatch":"Длина kinds должна совпадать с числом шагов","plan.kinds_invalid":"Недопустимый kind шага: {kinds}. Используй \"create\" или \"delete\".","plan.kinds_not_array":"kinds должен быть массивом значений \"create\" или \"delete\"","plan.deliverables_remain":"Нельзя пометить шаг {step} как выполненный: указанные файлы всё ещё существуют: {files}. Шаг имеет kind=delete — сначала удали их (или поставь status=skipped, если они должны остаться).","plan.typecheck_failed":"Нельзя отметить шаг {step} выполненным: последняя проверка всё ещё сообщает об ошибке компиляции:\n{error}\nИсправь ошибку и снова отредактируй файл (чистая запись снимает блокировку), либо отметь шаг status=skipped, если он не нужен.","plan.show_header":"Статус плана:","plan.show_empty":"(в плане нет шагов)","plan.list_header":"Планы:","plan.list_empty":"Нет планов","plan.switch_no_id":"Укажите id плана для переключения","plan.not_found":"План не найден: {id}","plan.switched":"Переключено на план {id}: {title}","plan.replanned":"План перепланирован: {kept} выполненных шагов сохранено, {steps} новых шагов добавлено","plan.replan_no_steps":"Укажите новые шаги для перепланирования","plan.active_in_progress":"Нельзя создать новый план: активный план {id} уже имеет прогресс ({done}/{total} выполнено, текущий: шаг {current}). Продолжай его — вызови \"plan show\", чтобы увидеть, и продолжай работу. Чтобы заменить план, сначала вызови \"plan abort\", затем \"plan create\".","plan.id_ignored":"примечание: id плана генерируется автоматически; используй \"plan switch\", чтобы активировать существующий план по id.","plan.existing_fresh":"примечание: предыдущий активный план не имел прогресса и сохранён как черновик.","plan.already_active":"План {id} уже активен — переключаться некуда.","plan.already_archived":"План {id} уже в архиве — отменять нечего.","plan.aborted_id":"План {id} отменён и архивирован.","plan.delete_no_id":"Укажите id плана для удаления (plan delete id=plan_xxx).","plan.deleted":"План {id} удалён окончательно.","plan.purged":"Удалено планов: {count}. Хранилище планов пусто.","plan.no_deliverables":"примечание: шаг {step} не называет файлов — проверь результат способом, подходящим задаче (для кода: сборка/тесты/линт; для исследования/совета: перепроверь ответ, НЕ создавай файлы ради деливераблов).","plan.bulk_update_rejected":"Массовая перезапись steps[] через action=update не поддерживается: она бы стёрла статусы всех шагов. Используй \"re-plan\" (сохраняет завершённые шаги, заменяет остальные) или отмечай шаги по одному: plan_step step=N status=done|failed|skipped.","plan.readonly":"План {id} имеет статус {status} (только чтение) — обновить его нельзя. Используй \"plan switch\", чтобы активировать его, или создай новый план для новой задачи.","plan.list_legend":"[*] активный · [ ] черновик · [-] архив","exec.plan_nudge":"Ты сделал(а) {count} вызов(ов), изменяющих файлы, без плана. Для задач, создающих/изменяющих файлы или состоящих из нескольких шагов, сначала создай план (plan create) с конкретными шагами (точные имена файлов, команды, результаты), а потом продолжай.","exec.plan_summary_complete":"[{id}] \"{title}\" — {done}/{total} готово, план завершён. Можешь создать новый план для новой работы (plan create) или дать финальный ответ.","exec.plan_summary_continue":"[{id}] \"{title}\" — {done}/{total} готово, текущий: шаг {current} — продолжай его (plan show / re-plan), НЕ создавай новый план","exec.test_fail_summary":"{framework}: {failed} падающих тест(ов) ({passed} пройдено). НЕ отмечай текущий шаг как done — исправь падающие тесты (прочитай вывод, поправь код) и перезапусти до полного успеха.","exec.test_pass_summary":"{framework}: все {passed} тест(ов) пройдены для \"{cmd}\". Можно отметить текущий шаг как done через plan_step step=N status=done.","exec.skills_hint":"Если доступны подходящие навыки, рассмотри загрузку одного через load_skill для экспертной подсказки.","todo.added":"Добавлено {count} задач: {items}","todo.marked_done":"Отмечено выполненными: {count}","todo.no_active":"Нет активных задач","todo.no_items":"Не указаны подзадачи — укажите items для отметки выполненными","todo.subtask_not_found":"Подзадачи не найдены: {items}. Используй id из todo list (todo done ids=[...]) — так надёжнее.","todo.subtask_id_not_found":"Нет подзадач с id: {ids}. Проверь id через todo list.","todo.unknown_action":"Неизвестное действие todo: {action}","todo.acknowledged":"Todo принято","verify.passed":"Проверка пройдена","verify.failed":"Проверка не пройдена: {details}","verify.file_exists":"Файл существует: {path}","verify.file_not_found":"Файл не найден: {path}","verify.script_passed":"Скрипт '{script}' пройден","verify.script_failed":"Скрипт '{script}' не пройден: {message}","verify.syntax_error":"Синтаксическая ошибка в: {path}","verify.file_still_exists":"Файл должен быть удалён, но всё ещё существует: {path}","verify.no_files":"Шаг {step} не содержит именованных файлов для проверки — выполни реальную проверку (bun run build / bun test / lsp_check) и подтверди результат.","verify.typecheck_skipped_no_tsconfig":"tsconfig.json не найден — проверка типов пропущена","verify.typecheck_skipped_no_tsc":"tsc не установлен — проверка типов пропущена","verify.typecheck_passed":"Проверка типов TypeScript пройдена","verify.typecheck_failed":"Проверка типов TypeScript не пройдена: {error}","verify.tests_skipped_no_package":"package.json не найден — тесты пропущены","verify.tests_skipped_no_script":"Скрипт тестов не задан — тесты пропущены","lsp.unavailable":"статические проверки недоступны (сервер не найден). Проверяйте через собственный build/test проекта.","lsp.check_disabled":"LSP-проверки отключены в конфигурации.","lsp.check_no_path":"Укажите путь (файл или каталог) для проверки.","lsp.check_notfound":"Путь не найден: {path}","lsp.check_unsupported":"Для файла не настроен LSP-сервер: {path}","lsp.check_clean":"Ошибок и предупреждений не обнаружено (проверено файлов: {count}).","lsp.checked_files":"Проверено файлов: {count}:","lsp.startup_header":"[Существующие ошибки проекта (базовый уровень, проверено при старте сессии) — справочно. Не исправляйте их, если текущий запрос не про эти ошибки; в противном случае игнорируйте их и выполняйте только то, о чём попросил пользователь.]:","lsp.hint_binary_missing":"Подсказка: поставьте language server или укажите lsp.servers.<lang>.command на существующий бинарник.","lsp.hint_network":"Подсказка: не удаётся скачать language server (npm-реестр недоступен) — поставьте его в PATH, укажите зеркало реестра в lsp.servers.<lang>.env или MMA_LSP_OFFLINE=1.","lsp.hint_offline":"Подсказка: включён офлайн-режим, а бинарника сервера нет в PATH — поставьте его или снимите MMA_LSP_OFFLINE.","lsp.hint_spawn":"Подсказка: не удалось запустить команду сервера — проверьте команду и PATH.","lsp.hint_timeout":"Подсказка: сервер не инициализировался вовремя — возможно, медленный; увеличьте lsp.servers.<lang>.timeout.","cli.description":"Micro Models Agent — ИИ-агент для кодинга на малых моделях","cli.init":"Запустить мастер настройки провайдера (устаревший алиас mma setup).","cli.init_deprecated":"mma init устарела — используй mma setup","cli.setup":"Мастер настройки (провайдер, модель, безопасность).","cli.meet":"Познакомимся — записать предпочтения и профиль использования.","cli.agents":"Управление агентом.","cli.agents_init":"Создать или обновить AGENTS.md для этой папки.","cli.config_saved":"Конфигурация сохранена в ~/.mma/config.json","cli.manage_config":"Управление конфигурацией","cli.config_key":"Ключ конфига (напр., model, provider.baseUrl)","cli.config_value":"Значение конфига","cli.set_value":"Установить значение","cli.config_force":"Обойти проверку и записать сырое значение как есть","cli.set_done":"Установлено {key}={value}","cli.config_invalid":"Недопустимое значение для '{key}' ({reason}). Конфиг не изменён.","cli.show_config":"Показать действующую конфигурацию (секреты скрыты; используйте --show-secrets)","cli.show_secrets":"Показать секреты (API-ключи, токены) открыто","cli.migrate_config":"Мигрировать legacy config.json в domain-формат","cli.manage_models":"Управление моделями","cli.list_models":"Список доступных моделей","cli.current_model":"Текущая модель:","cli.model_hint":"(Используйте /model use <имя> для смены)","cli.model_fetch_failed":"Не удалось получить модели: {error}","cli.available_models":"Доступные модели:","cli.cert_label":"поддерживается — сертифицирована на этом провайдере","cli.cert_stale_label":"сертифицирована на старой версии MMA — рекомендуется","cli.no_models_found":"Модели не найдены у провайдера","cli.fetching_models":"Загрузка списка моделей...","cli.manage_context":"Управление контекстным окном","cli.context_size_arg":"Размер контекстного окна в токенах (без значения — показать разбивку бюджета)","cli.invalid_context_size":"Некорректный размер контекста. Должно быть число >= 1024","cli.context_set":"Контекстное окно установлено: {size} токенов","cli.context_budget_header":"Бюджет контекста (окно {window} токенов):","cli.context_system_line":" системный промпт: {tokens} токенов ({percent}%)","cli.context_reserve_line":" резерв ответа: {tokens} токенов ({percent}%)","cli.context_history_line":" история: {tokens} токенов ({percent}%)","cli.context_system_fraction":"Доля системного промпта в контекстном окне (0.05–0.9)","cli.context_reserve_fraction":"Доля резерва ответа в контекстном окне (0.05–0.9)","cli.context_fraction_set":"Доля {key} установлена: {value}","cli.context_invalid_fraction":"Некорректная доля. Нужно число от 0.05 до 0.9 (системный + резерв должны оставаться ниже 0.95).","cli.set_model":"Установить модель по умолчанию","cli.model_name":"Имя модели","cli.model_set":"Модель установлена: {name}","cli.certify":"Запустить сертификационный набор для модели","cli.cert_provider_url":"Базовый URL провайдера для сертификации (по умолчанию — текущий конфиг)","cli.cert_provider_key":"API-ключ провайдера (необязательно)","cli.cert_context_window":"Размер контекстного окна в токенах","cli.cert_tags":"Теги сценариев через запятую (core, security, image, network, browser, shell, research)","cli.cert_scenarios":"ID сценариев через запятую для (пере)запуска (напр. 3.5-data-pipeline); остальные результаты сохраняются","cli.cert_scenarios_unknown":"Неизвестные сценарии: {ids}. Доступны: {available}","cli.cert_partial_merge":"Сохранено результатов из предыдущей сертификации: {kept}","cli.cert_reps":"Повторов по умолчанию на сценарий (переопределяется сценарием)","cli.cert_timeout":"Таймаут на реп в мс (по умолчанию 300000; переопределяется сценарием)","cli.cert_force":"Перепрогнать существующую сертификацию","cli.cert_clean":"Удалить песочницы после успешного прогона","cli.cert_security_required":"Безопасность отключена. Включите её (например `mma security set-policy balanced`), чтобы запустить security-сьют.","cli.cert_no_scenarios":"Нет сценариев под теги: {tags}","cli.cert_exists":"Сертификация {model} на этом провайдере уже существует.","cli.cert_exists_hint":"Используйте --force для перепрогона.","cli.cert_started":"Сертификация {model} на {provider}...","cli.cert_done":"Сертификация завершена: {passed} pass, {failed} fail, {skipped} skipped ({total} всего)","cli.cert_rep_pass":"pass","cli.cert_rep_fail":"fail","cli.cert_status":"Показать статус сертификации модели","cli.cert_list":"Список всех сертификаций","cli.cert_uncertify":"Удалить сертификацию","cli.cert_not_found":"Сертификация {model} не найдена","cli.cert_uncertified":"Сертификация {model} удалена","cli.cert_empty":"Сертификаций пока нет. Запустите `mma model certify <модель>`.","cli.cert_provider_col":"провайдер","cli.cert_suite_col":"сьют","cli.cert_date_col":"дата","cli.cert_version_col":"версия MMA","cli.cert_stale_hint":"Запустите `mma model certify --force` для обновления.","cli.cert_fixture_missing":"Фикстура отсутствует для {id}: {path}","cli.cert_marks_hint":"Маркеры: ✔ сертифицировано на этом провайдере, ○ сертифицировано на старой версии MMA, · не сертифицировано","cli.manage_providers":"Управление провайдерами","cli.provider_check":"Проверить доступность провайдеров (бесплатный вызов listModels)","cli.probe_timeout":"Таймаут проверки провайдера в мс","repl.provider_down":"[ВНИМАНИЕ] Провайдер «{name}» недоступен: {error}","repl.meet_start_prompt":"Давай познакомимся. Начни интервью.","repl.meet_unavailable":"Не могу начать: провайдер не отвечает ({reason}).","repl.meet_unavailable_hint":"Запусти модель и повтори /meet — ничего не записано.","onboarding.already":"Уже выполняется.","onboarding.non_interactive":"Эта команда требует интерактивного терминала.","onboarding.write_restricted":"в этом режиме можно писать только AGENTS.md","repl.init_start_prompt":"Создай или улучши {dir} для этой папки. Сначала изучи, потом запиши.","repl.init_unavailable":"Не могу запустить init: провайдер не отвечает ({reason}).","repl.meet_usage":"/meet [stop] — познакомимся","repl.meet_already_hint":"Знакомство уже идёт. Выполни /meet stop, чтобы завершить.","repl.meet_stop_done":"Знакомство завершено.","repl.meet_stop_none":"Знакомство не запущено.","repl.init_usage":"/init — создать/обновить AGENTS.md","repl.init":"Создать или обновить AGENTS.md для этой папки.","repl.memory_usage":"/memory [get|set|unset|find|forget]","repl.memory_empty":"Память пуста.","repl.memory_prefs":"Предпочтения:","repl.memory_set":"Сохранено {key}={value}","repl.memory_unset":"Удалено {key}","repl.memory_not_found":"Нет предпочтения \"{key}\"","repl.memory_entry_not_found":"Нет записи {n} в {category}","repl.memory_forgotten":"Удалена запись {n} из {category}","repl.meet_offer":"Познакомимся? Задам несколько вопросов и запомню, как тебе удобнее работать.","repl.meet_offer_hint":"Можно пропустить и вызвать /meet позже.","repl.meet_done":"Готово — предпочтения сохранены. Смотри /memory.","onboarding.provider_down":"⚠ Провайдер не отвечает — «{cmd}» пока недоступно.","onboarding.provider_down_hint":"↳ Подними модель и вызови /{cmd}. Ничего не записано.","cli.list_providers":"Список провайдеров","cli.current_provider":"Текущий провайдер:","cli.base_url":"Базовый URL:","cli.set_provider":"Установить активный провайдер","cli.provider_set":"Провайдер установлен: {name}","cli.provider_name":"Имя провайдера","cli.provider_type_label":"Тип провайдера или метка","cli.provider_base_url":"Базовый URL","cli.provider_api_key":"API-ключ","cli.provider_priority":"Приоритет переключения (меньше — раньше)","cli.provider_context_window":"Переопределение контекстного окна для этой записи","cli.provider_rpm":"Максимум запросов в минуту для этой записи","cli.provider_parallel":"Максимум параллельных задач для этой записи","cli.manage_sessions":"Управление сессиями","cli.list_sessions":"Список всех сессий","cli.show_details":"Показать детали сессии","cli.session_id":"ID сессии","cli.session_id_or_prefix":"ID сессии (или начало имени)","cli.session_field_id":"ID:","cli.session_field_name":"Имя:","cli.session_field_created":"Создана:","cli.session_field_updated":"Обновлена:","cli.session_field_messages":"Сообщений:","cli.session_field_model":"Модель:","cli.session_field_context":"Контекст:","cli.session_field_project":"Проект:","cli.session_moe_events":"События MoE:","cli.delete_session":"Удалить сессию","cli.prune_sessions":"Удалить сессии без сообщений пользователя","cli.prune_dry_run":"Показать кандидатов без удаления","cli.export_session":"Экспортировать сессию в файл (md, json или jsonl)","cli.export_format":"Формат вывода: md|json|jsonl (по умолчанию md)","cli.export_out":"Путь вывода ('-' для stdout)","cli.export_no_redact":"Не скрывать секреты","cli.export_compact":"Пропустить тела результатов тулов (компактный читаемый экспорт)","cli.first_run":"Первый запуск. Запускаем мастер настройки...","cli.first_run_oneshot":"Конфигурация не найдена — запуск с настройками по умолчанию. Запустите `mma` без аргументов один раз для настройки.","cli.web_setup_required":"Конфигурация не найдена — открывается мастер настройки в браузере.","cli.web.description":"Запустить агента с браузерным интерфейсом","cli.web.port":"фиксированный порт (по умолчанию случайный)","cli.web.host":"адрес привязки (по умолчанию 127.0.0.1)","cli.web.token":"требовать этот токен (обязателен для не-loopback)","cli.web.no_open":"не открывать браузер автоматически","cli.web_started":"веб-интерфейс → {url} (директория: {dir})","cli.web_invalid_port":"некорректный --port «{port}»: нужно целое число от 1 до 65535","cli.relaunch_failed":"Не удалось перезапустить CLI: {message}","cli.prompt_arg":"Промпт для выполнения","cli.run_prompt":"Выполнить одиночный промпт","cli.setup_saved_restart":"Настройки сохранены. Перезапуск с новой конфигурацией...","cli.unknown_cmd":"Неизвестная команда: {name}.","cli.unknown_command":"Неизвестная команда \"{input}\". Возможно, вы имели в виду \"{suggestion}\"?","cli.help_hint":"Введите /help для списка команд.","cli.available_cmds":"\nДоступные команды:","cli.no_output":"Агент завершил работу, но не выдал результата. Возможно, задача не выполнена до конца.","cli.no_agents_md":"Отключить загрузку AGENTS.md в системный промпт","cli.dir":"Рабочая директория агента (по умолчанию — текущая)","cli.exit_on_complete":"Завершить сразу после выполнения задачи; интерактивные тулзы (question/approve) не блокируют stdin, а возвращают ошибку","cli.reasoning_level":"Установить уровень рассуждений (auto|none|low|medium|high|max)","cli.json":"Вывести результат в формате JSON (режим однократного запуска)","cli.context_log":"Писать весь контекст LLM в <session>/context.diff в git-подобном diff-формате (первый снимок — полный, далее изменения +/-)","cli.verbose":"Показывать полный вывод чата (тела тулов, списки); по умолчанию — кратко","cli.security.description":"Управление настройками безопасности","cli.security.status":"Показать текущую конфигурацию безопасности","cli.security.policies":"Список доступных политик безопасности","cli.security.set_policy":"Применить пресет политики безопасности","cli.security.preset":"Пресет политики (strict, balanced, permissive)","cli.security.invalid_preset":"Некорректный пресет. Доступные: {presets}","cli.security.policy_applied":"Политика безопасности применена: {name}","cli.security.policy_description":"Описание: {description}","cli.security.enable_encryption":"Включить шифрование файлов сессий","cli.security.disable_encryption":"Отключить шифрование файлов сессий","cli.security.encryption_enabled":"Шифрование файлов сессий включено","cli.security.encryption_disabled":"Шифрование файлов сессий отключено","cli.security.enable_audit":"Включить уведомления аудита","cli.security.disable_audit":"Отключить уведомления аудита","cli.security.audit_enabled":"Уведомления аудита включены","cli.security.audit_disabled":"Уведомления аудита отключены","cli.security.audit_stats":"Показать статистику уведомлений аудита","cli.security.audit_stats_title":"Статистика уведомлений аудита","cli.security.total_notifications":"Всего уведомлений","cli.security.by_severity":"По уровню серьезности","cli.security.by_type":"По типу","cli.security.low":"Низкий","cli.security.medium":"Средний","cli.security.high":"Высокий","cli.security.critical":"Критический","cli.security.current_policy":"Текущая конфигурация безопасности","cli.security.bash_enabled":"Проверка команд bash","cli.security.path_validation":"Проверка доступа к путям","cli.security.network_validation":"Проверка сетевых запросов","cli.security.content_scanning":"Сканирование содержимого","cli.security.max_recursion":"Максимальная глубина рекурсии","cli.security.max_file_ops":"Максимум операций с файлами","cli.security.rate_limit":"Ограничение запросов","cli.security.session_encryption":"Шифрование сессий","cli.security.audit_notifier":"Уведомления аудита","cli.security.available_policies":"Доступные политики безопасности","cli.security.recommended_for":"Рекомендуется для","cli.yes":"Да","cli.no":"Нет","cli.plugins.description":"Управление плагинами","cli.plugins.list":"Список загруженных плагинов (имя, версия, источник)","cli.plugins.all":"Включить встроенные плагины","cli.plugins.only_external":"(встроенные плагины скрыты — используйте --all)","cli.plugins.none":"Плагины не загружены","cli.plugins.header":"Плагины: {count} загружено (MMA v{mma})","cli.plugins.builtin_mark":"●","repl.help":"Показать доступные команды","repl.help_usage":"Использование: /help","repl.exit":"Выйти из REPL","repl.exit_usage":"Использование: /exit","repl.clear":"Очистить экран","repl.clear_usage":"Использование: /clear","repl.clear_hint":"Экран очищен. Новая сессия и контекст: /new","repl.run":"Выполнить запрос через агента","repl.run_usage":"Использование: /run <запрос>","repl.config":"Показать или изменить настройки (get / set / reset)","repl.config_usage":"Использование: /config [<ключ> [значение]] | /config reset <ключ> | /config reset --all [--yes] | /config migrate","repl.reasoning":"Показать статус рассуждений, переключить показ или уровень","repl.reasoning_usage":"Использование: /reasoning [show|hide|level <auto|default|none|low|medium|high|max>]","repl.reasoning_level_set":"Уровень рассуждений установлен: {level}","repl.reasoning_invalid_level":"Неверный уровень '{level}'. Допустимые: {valid}","repl.verbose":"Подробность вывода (quiet, normal, verbose)","repl.verbose_usage":"Использование: /verbose [quiet|normal|verbose]","repl.verbose_set":"Подробность вывода: {level}","repl.verbose_invalid_level":"Неверный уровень '{level}'. Допустимые: {valid}","repl.last_action_none":"Нет недавнего действия для показа.","repl.status":"Показать компактную строку статуса","repl.status_usage":"Использование: /status","repl.security":"Показать конфигурацию безопасности (вкл/выкл по областям)","repl.plugins":"Список загруженных плагинов","repl.plugins_usage":"Использование: /plugins [--all]","repl.sessions":"Список всех сессий (* активная)","repl.sessions_usage":"Использование: /sessions","repl.new":"Создать новую сессию","repl.new_usage":"Использование: /new [имя]","repl.resume":"Переключиться на сессию по id или имени","repl.resume_usage":"Использование: /resume <id|имя>","repl.rename":"Переименовать текущую сессию","repl.rename_usage":"Использование: /rename <новое-имя>","repl.delete":"Удалить сессию по id","repl.delete_usage":"Использование: /delete <id-сессии>","repl.skill":"Управление скиллами (list, loaded, load, unload, search)","repl.no_skills":"Нет доступных скиллов","repl.available_skills":"Доступные скиллы:","repl.no_loaded":"Нет загруженных скиллов","repl.loaded_skills":"Загруженные скиллы:","repl.budget":"Бюджет: {used} / {total} токенов (осталось {remaining})","repl.skill_load_usage":"Использование: /skill load <имя>","repl.skill_unload_usage":"Использование: /skill unload <имя>","repl.skill_unloaded":"Скилл \"{name}\" выгружен","repl.skill_not_loaded":"Скилл \"{name}\" не загружен","repl.skill_search_usage":"Использование: /skill search <запрос>","repl.no_skill_match":"Нет скиллов по \"{query}\"","repl.skills_matching":"Скиллы по \"{query}\":","repl.skill_unknown_sub":"Неизвестная подкоманда скилла: {subcmd}","repl.skill_usage":"Использование: /skill [list|loaded|load|unload|search]","repl.agent":"Агент: ","repl.you":"Вы: ","repl.you_reasoning":"Вы [{level}]: ","repl.you_reasoning_cont":"Вы [{level}]… ","repl.interrupt":"Прервано (Esc)","repl.title":"MMA REPL v{version}","repl.model":"Модель:","repl.provider":"Провайдер:","repl.context":"Контекст:","repl.ctx_part_system":"система","repl.ctx_part_reserve":"резерв","repl.ctx_part_history":"история","repl.sysprompt_label":"Системный промпт:","repl.sysprompt_size":"{used} / {budget} токенов","repl.sysprompt_desc":"Размер системного промпта и блоки (текст — через --full)","repl.sysprompt_usage":"Использование: /sysprompt [--full]","repl.sysprompt_full_hint":"Полный текст промпта скрыт — выполните /sysprompt --full.","repl.sysprompt_tokens":"Системный промпт ({count} токенов):","repl.excluded_blocks":"\nИсключённые блоки: {count}","repl.context_usage":"Использование: /context [<размер, мин 1024> | system <доля> | reserve <доля>] (доля 0.05–0.9 или напр. 10%; system+reserve ≤ 0.95)","repl.msgs":"сообщ.","repl.api_line":" API: {prompt} prompt + {completion} completion = {total} всего","repl.compacted":"Контекст сжат ({count})","repl.skills_available":"{count} доступно, бюджет: {budget} токенов","repl.plugins_active":"{count} активно ({names})","repl.plugins_hidden":"({count} встроенных скрыто — /plugins --all чтобы показать)","repl.loaded":"[загружен]","repl.yes":"да","repl.no":"нет","repl.max_iters":"Макс итераций:","repl.stuck_thresh":"Порог зависания:","repl.reasoning_label":"Рассуждения:","repl.log_level":"Уровень лога:","repl.locale":"Язык:","repl.session_label":"Сессия:","repl.skills_label":"Скиллы:","repl.plugins_label":"Плагины:","repl.mcp_label":"MCP:","repl.lsp_label":"LSP:","repl.lsp_timeout":"таймаут","repl.lsp_failed":"не стартовал","repl.lsp_unknown":"неизвестно","repl.lsp":"Управление LSP-серверами (Language Server Protocol) — status, restart, check, doctor","repl.lsp_usage":"Использование: /lsp [status|restart|doctor|check <путь>]","repl.lsp_not_available":"Модуль LSP недоступен","repl.lsp_status_header":"Статус LSP:","repl.lsp_enabled":"Включён:","repl.lsp_disabled_servers":"Отключённые серверы:","repl.lsp_failure_counts":"Количество ошибок:","repl.lsp_all_ok":"Все серверы работают","repl.lsp_restarting":"Сброс состояния LSP-серверов...","repl.lsp_restarted":"LSP-серверы сброшены. Упавшие серверы будут повторно запущены при следующем использовании.","repl.lsp_check_usage":"Использование: /lsp check <файл-или-каталог>","repl.lsp_checking":"Запуск LSP-проверки {path}...","repl.lsp_check_error":"LSP-проверка не удалась: {error}","repl.lsp_doctor_header":"LSP-диагностика","repl.lsp_doctor_enabled":"включён","repl.lsp_doctor_offline":"офлайн","repl.lsp_doctor_project":"проект","repl.lsp_doctor_yes":"да","repl.lsp_doctor_no":"нет","repl.lsp_doctor_none":"серверы не настроены","repl.lsp_reason_ok":"ок","repl.lsp_reason_disabled":"отключён","repl.lsp_reason_not_applicable":"нет подходящих файлов","repl.lsp_reason_binary_missing":"бинарник не найден","repl.lsp_reason_offline":"офлайн — поставьте бинарник","repl.lsp_reason_network":"сеть — не удалось скачать сервер","repl.lsp_reason_timeout":"таймаут (initialize)","repl.lsp_reason_spawn_failed":"не удалось запустить процесс","repl.lsp_reason_server_error":"ошибка сервера","repl.lsp_reason_deadline":"пропущен (дедлайн)","repl.lsp_via":"через","repl.lsp_via_global":"глобальный бинарник","repl.lsp_via_npx":"npx (скачивание)","repl.lsp_doctor_hint":"закрытая сеть? поставьте серверы в PATH, укажите зеркало реестра в lsp.servers.<lang>.env или MMA_LSP_OFFLINE=1","repl.lsp_install":"поставить глобально: {command}","repl.work_dir":"Директория:","repl.agents_label":"Инструкции:","repl.not_found":"не найден","repl.disabled":"отключено (--no-agents-md)","repl.context_probe_small":"Context-проб: модель \"{model}\" загружена с контекстом {actual} токенов, настроено {configured} — риск переполнения","repl.context_probe_big":"Context-проб: модель \"{model}\" поддерживает {actual} токенов — рассмотрите \"mma context {actual}\"","repl.show":"показ","repl.hide":"скрыть","repl.resume_hint":"Используйте /resume <id> или /resume <имя> для переключения между сессиями","repl.reasoning_status":"Рассуждения: {status}","repl.wizard":"Запустить мастер настройки","repl.wizard_usage":"Использование: /wizard","repl.wizard_running":"Запуск мастера настройки... (текущая конфигурация будет перезаписана)","repl.provider_list":"Список настроенных провайдеров или горячая смена активного","repl.provider_current":"Текущий провайдер","repl.provider_set":"Провайдер установлен: {name}","repl.provider_usage":"Использование: /provider list | /provider use <имя> | /provider add <имя> [флаги]\n --url <url> базовый URL API (иначе — из пресетов)\n --key <ключ> API-ключ\n --priority <n> порядок fallback; меньше = раньше\n --context-window <n> окно контекста провайдера (токены)\n --rpm <n> запросов/мин (по умолчанию 60)\n --parallel <n> параллельных задач (по умолчанию 1)","repl.provider_add_missing_value":"Нет значения для {flag}","repl.provider_add_invalid_number":"Неверное число для {flag}: '{value}'","repl.provider_switch_hint":"Переключитесь на него: /provider use {name}","repl.provider_flag_url":"Базовый URL API (иначе — из пресетов)","repl.provider_flag_key":"API-ключ","repl.provider_flag_priority":"Порядок fallback; меньше = раньше","repl.provider_flag_context_window":"Окно контекста провайдера (токены)","repl.provider_flag_rpm":"Запросов в минуту (по умолчанию 60)","repl.provider_flag_parallel":"Параллельных задач (по умолчанию 1)","repl.model_list":"Список моделей активного провайдера или смена модели","repl.model_current":"Текущая модель","repl.model_set":"Модель установлена: {name}","repl.model_usage":"Использование: /model list | /model use <имя>","repl.unknown_sub":"Неизвестная подкоманда '{sub}' для /{cmd}. См. использование ниже.","repl.help_unknown":"Неизвестная команда '/{name}'","repl.help_aliases":"Алиасы: {names}","repl.help_examples":"Примеры:","repl.export":"Экспортировать сессию в файл","repl.export_usage":"Использование: /export [<id|имя>] [--format md|json|jsonl] [--out <путь>] [--no-redact] [--compact]","config.header":"Управляемые настройки","config.col_setting":"Настройка","config.col_value":"Значение","config.col_domain":"Домен","config.col_change":"Как менять","config.session_line":"Сессия: {name} ({id}) — {count} сообщений","config.usage_hint":"Чтение: /config <ключ> · Запись: /config <ключ> <значение> · Сброс: /config reset <ключ>","config.saved":"сохранено · сброс: /config reset {key}","config.read_only_hint":"только чтение","config.read_only":"'{key}' — только чтение","config.unknown_key":"Неизвестный ключ '{key}'. {suggestion}","config.suggest":"Возможно, вы имели в виду '{name}'?","config.valid_keys":"Допустимые ключи: {keys}","config.invalid_value":"Неверное значение для {key}. {hint}","config.range":"Значение вне диапазона для {key}","config.combined":"system + reserve должны оставаться ниже 0.95","config.hint_string":"Ожидается непустая строка","config.hint_enum":"Допустимые: {values}","config.hint_bool":"Ожидается on/off","config.hint_share":"Ожидается 0.05–0.9 или процент (напр. 10%)","config.hint_int":"Ожидается целое ≥ {min}","config.reset_ok":"{key} восстановлен к значению на старте сессии: {value} · сохранено","config.reset_unchanged":"{key} уже соответствует значению сессии","config.reset_none":"В этой сессии настройки не менялись","config.reset_all_confirm":"Сбросить {count} изменённых настроек к значениям на старте сессии? [y/N] ","config.reset_all_done":"Восстановлено настроек: {count} · сохранено","config.reset_all_needs_yes":"Отказ от сброса без подтверждения в неинтерактивном режиме; укажите --yes","config.reset_cancelled":"Сброс отменён","config.reset_usage":"Использование: /config reset <ключ> | /config reset --all [--yes]","config.alias_label":"алиас","config.group_label":"группа","reasoning.status":"Рассуждения: показ {display} · усилие {level} {auto}","reasoning.on":"вкл","reasoning.off":"выкл","reasoning.auto_on":"(авто-политика)","reasoning.auto_off":"(авто-политика выключена)","reasoning.auto_off_hint":"Авто-политика выключена. Вернуть: /config reset reasoning.mode","reasoning.display_set":"Показ рассуждений: {state}","reasoning.unknown_sub":"Неизвестный аргумент '{sub}'.","reasoning.sub_show":"Показывать рассуждения","reasoning.sub_hide":"Скрыть рассуждения","reasoning.sub_level":"Установить уровень рассуждений","verbose.status":"Подробность: {level}","verbose.sub_quiet":"Одна строка на действие","verbose.sub_normal":"Плюс короткие сводки результатов","verbose.sub_verbose":"Полная деталь по действиям","context.unknown_arg":"Неизвестный аргумент '{arg}'.","context.sub_system":"Доля системного промпта","context.sub_reserve":"Доля резерва ответа","model.not_in_list":"Примечание: '{name}' нет в списке известных моделей","model.sub_list":"Список моделей активного провайдера","model.sub_use":"Сменить модель","provider.sub_list":"Список настроенных провайдеров","provider.sub_use":"Сменить активного провайдера","provider.sub_add":"Добавить провайдера","map.sub_summary":"Показать сводку карты проекта","map.sub_refresh":"Перестроить индекс проекта","map.sub_find":"Поиск по карте проекта","lsp.sub_status":"Статус LSP-серверов","lsp.sub_restart":"Сбросить отключённые серверы","lsp.sub_check":"Запустить LSP-проверку пути","lsp.sub_doctor":"Диагностика LSP-серверов","skill.sub_list":"Список доступных скиллов","skill.sub_loaded":"Список загруженных скиллов","skill.sub_load":"Загрузить скилл","skill.sub_unload":"Выгрузить скилл","skill.sub_search":"Поиск скиллов","export.written":"Экспортировано в {path}","export.redacted":"секреты скрыты (--no-redact чтобы отключить)","export.raw":"секреты НЕ скрыты","export.empty":"в сессии нет сообщений — экспорт не создан","export.invalid_format":"Неизвестный формат '{format}'. Используйте md|json|jsonl","export.missing_value":"Нет значения для {flag}","export.write_failed":"Не удалось записать экспорт: {error}","repl.reload":"Перезагрузить агента с текущим конфигом","repl.reload_usage":"Использование: /reload","repl.reloading":"Перезагрузка агента...","repl.reloaded":"Агент перезагружен","repl.group.general":"Общее","repl.group.agent":"Агент","repl.group.session":"Сессии","repl.group.skill":"Скиллы","setup.title":"\n Мастер настройки MMA v2\n","setup.select_provider":"\n Выберите тип провайдера:","setup.select_provider_num":"\n Выберите провайдер (1-{max})","setup.select_language_num":"\n Выберите язык (1-{max})","setup.scanning":" Сканирование локальных LLM-серверов...","setup.found_servers":" Найдено серверов: {count}","setup.no_servers":" Локальные серверы не найдены. Введите URL вручную.","setup.api_base":" API Base URL","setup.provider_type":" Тип провайдера","setup.api_key":" API ключ (нажмите Enter для пропуска)","setup.fetching_models":" Загрузка списка моделей...","setup.available_models":" Доступные модели:","setup.select_model":" Выберите модель (1-{max})","setup.model_name":" Имя модели","setup.testing":"\n Тестирование чата с моделью \"{model}\"...","setup.ok":" OK — соединение успешно","setup.warning":" ВНИМАНИЕ: не удалось подключиться — проверьте API endpoint и ключ","setup.agent_settings":"\n --- Настройки агента ---","setup.context_window":" Контекстное окно (токены)","setup.max_iters":" Макс итераций инструментов","setup.language":"\n --- Язык ---","setup.ui_lang":" Язык интерфейса (en/ru)","setup.complete":"\n Настройка завершена!\n","setup.select_server":"\n Выберите сервер (1-{max})","setup.custom_url":"Свой URL","setup.scanning_spinner":"Сканирование локальных LLM-серверов…","setup.fetching_spinner":"Загрузка списка моделей…","setup.testing_spinner":"Проверка чата с \"{model}\"…","setup.security_header":"\n --- Безопасность ---","setup.security_status_off":" Безопасность: ВЫКЛ (по умолчанию — все команды разрешены)","setup.security_status_on":" Безопасность: ВКЛ (по умолчанию — политика balanced)","setup.security_configure":" Настроить безопасность? (y/N)","setup.security_bash_block":" Блокировать опасные команды (rm, sudo, ssh и т.д.)? (y/N)","setup.security_flags_block":" Блокировать опасные флаги (--force, -rf и т.д.)? (y/N)","setup.security_paths_restrict":" Ограничить доступ к .git/, .env, node_modules/? (Y/n)","skill.already_loaded":"Скилл \"{name}\" уже загружен","skill.not_found":"Скилл \"{name}\" не найден ни в одном каталоге","skill.no_match":"Нет скиллов подходящих для: {task}","skill.too_large":"Скилл \"{name}\" слишком большой ({tokens} токенов). Бюджет: {budget} токенов. Продолжайте задачу без этого скилла.","skill.exceeds_budget":"Скилл \"{name}\" ({tokens} токенов) превышает остаток бюджета ({remaining} токенов). Сначала выгрузите другие скиллы.","skill.loaded":"Скилл \"{name}\" загружен ({tokens} токенов, осталось {remaining})","skill.auto_loaded":"[Автозагружен скилл: {name}]","skill.prompt_hint":"НЕ загружайте скиллы автоматически. Загружайте скилл ТОЛЬКО когда пользователь явно об этом просит (например 'используй скилл X' или 'загрузи скилл Y'). Скиллы ниже перечислены только для справки — не угадывайте какой скилл подходит по описанию задачи.","skill.prompt_fallback":"Если load_skill не удался из-за большого размера скилла, продолжайте задачу без него — не останавливайтесь.","skill.loaded_content":"[Скилл загружен: {name}]\n{content}\n\nИспользуйте эти знания для ответа на вопрос пользователя.","exec.stuck":"Нет прогресса на шаге {stepId} ({description}) — {iterations} итераций.","exec.stuck_recovery":"Шаг {stepId} — \"{description}\" — без прогресса уже {iterations} итераций. Попробуйте другой подход: проверьте что нужно для этого шага, установлены ли зависимости, или создайте файлы напрямую через write_file вместо команд терминала. После завершения шага вызовите plan_step step={stepId} status=done.","exec.tool_errors":"Инструмент {tool} упал {count} раз. Попробуйте другой инструмент.","exec.tool_errors_recovery":"Инструмент {tool} упал {count} раз подряд. Попробуйте альтернативу: создайте файлы напрямую через write_file, используйте другую команду, или пропустите этот шаг через plan_step step=N status=skipped с пометкой почему.","exec.repetitive_tool":"Инструмент {tool} вызван {count} раз с одинаковыми аргументами и результатом. Попробуйте другой подход — создайте файлы напрямую, измените аргументы или проверьте статус процесса через process_log.","exec.repetitive_process_log_hint":"Вы опрашиваете фоновый процесс в цикле — вызовите process_wait один раз вместо опроса через process_log.","exec.consecutive_failures_recovery":"{count} инструментов подряд упали. Создавайте файлы напрямую через write_file вместо команд терминала. Проверьте что зависимости установлены (npm install). Не запускайте сборку/тесты пока не созданы все файлы.","exec.bash_flailing_recovery":"bash упал в {fails} из последних {window} попыток. Хватит использовать шелл-команды для файловых операций на этой машине — они не работают. Используй специализированные инструменты: read_file (в заголовке число строк), write_file, edit_file, file_info (размер файла), glob/grep для поиска","exec.bash_flailing":"bash упал в {fails} из последних {window} попыток.","exec.consecutive_failures":"{count} подряд неудачных вызовов тулов.","exec.honest_stop":"ХВАТИТ повторять. {count} пакетов тулов подряд упали или заблокированы, успешных вызовов между ними не было — новые варианты того же действия не помогут. НЕ пробуй другую команду, флаг или обход. Напиши финальный текстовый ответ СЕЙЧАС: честно укажи что сделано, что НЕ сделано или НЕ проверено и почему. НЕ вставляй вывод, который не получал от тула.","exec.readonly_directive":"Ты только читаешь, ищешь и загружаешь уже {count} шагов без зафиксированного результата. Прекрати исследование: либо НАПИШИ финальный ответ на основе того, что уже есть, либо сделай конкретное изменение, которое требует задача. Не обращайся к тому же источнику повторно.","exec.read_only_loop":"Нет записи/выполнения за {count} вызовов — агент только читает/исследует.","exec.read_only_loop_recovery":"{count} вызовов только для чтения подряд (read_file/glob/grep/browser) без записи. Хватит исследовать — внесите правку, которую требует задача: прочитайте файл, затем вызовите write_file или edit_file. Если не можете завершить задачу — спросите пользователя, а не перечитывайте одни и те же файлы.","exec.plan_warning":"Текущий шаг плана {step} — \"{description}\", но вызывается {tool} для файлов вне этого шага. Завершите текущий шаг, вызовите plan_step step={step} status=done, затем переходите к следующему.","exec.plan_blocked":"{max} вызовов подряд вне текущего шага. Завершите шаг {step} — остальные шаги ждут пока этот не будет выполнен.","exec.off_track":"Шаг {stepId} — \"{description}\", но используется {tool} для другого пути. Вернитесь к текущему шагу.","exec.step_gate_deps":"[⚠ Шаг {step} \"{description}\": зависимости не установлены. Сначала выполните команду установки (npm install, pip install и т.д.). Проверьте что lock-файл или директория зависимостей существует. Если этот шаг на самом деле не нужен (внешних зависимостей нет) — пропусти его: plan_step step={step} status=skipped note=\"зависимости не нужны\".]","exec.step_gate_deps_force":"[⚠ Шаг {step}: зависимости всё ещё не установлены (нет lock-файла) — второе предупреждение. Если этот шаг НЕ нужен — НЕМЕДЛЕННО вызови: plan_step step={step} status=skipped note=\"зависимости не нужны\". Если нужен — выполни установку прямо сейчас. Не делай других вызовов инструментов до обновления плана.]","exec.step_gate_empty":"[⚠ Шаг {step}: файлы существуют, но выглядят пустыми: {files}. Добавьте реальный код в эти файлы перед тем как переходить к следующему шагу.]","exec.step_gate_ok":"[✓] Шаг {step} завершён и проверен. ПЕРЕХОДИМ к шагу {nextStep}: \"{nextDesc}\". Работайте ТОЛЬКО над этим шагом.","exec.step_gate_last":"[✓] Шаг {step} завершён — это был последний шаг. Проверьте всё вместе и предоставьте финальный ответ.]","exec.step_gate_manual":"[⚠ Шаг {step}: деливераблы на месте, но авто-advance выключен. Если шаг действительно готов — отметь его сам: plan_step step={step} status=done. Если нет — продолжай работу над ним.]","exec.audit_pass":"[✓] Задача выполнена: {done}/{total} шагов, {files} файлов проверено","exec.audit_pending":"[✗] Задача не выполнена: {done}/{total} шагов — оставшиеся шаги не отмечены выполненными","exec.audit_fail":"[✗] Задача не выполнена: {done}/{total} шагов, {files} файлов отсутствует","exec.audit_leftovers":"[✗] Задача не выполнена: {done}/{total} шагов, {files} файлов из delete-шагов всё ещё существуют","exec.audit_fail_tests":"[✗] Задача не выполнена: {done}/{total} шагов, тесты ПАДАЮТ: {failed} failed / {passed} passed — {detail}","exec.audit_fail_typecheck":"[✗] Задача не выполнена: {done}/{total} шагов, {missing} файлов отсутствует, ошибка typecheck: {typeError}","exec.audit_incomplete":"❗ Финальная проверка не пройдена: {summary}. Задача НЕ завершена. Незакрытые шаги: {steps}. Устрани одним путём: (a) если результат шага уже существует на диске — закрой шаг (plan_step step=N status=done); (b) если шаг больше не нужен — status=skipped; (c) если план разошёлся с реальностью (другие имена файлов, сменился подход) — сделай re-plan. Не повторяй plan_step без изменений.","exec.mass_edit_warning":"⚠️ План затрагивает {count} файлов — проверьте полный список перед продолжением.","exec.escalation":"\n\n⚠️ Агент застрял на шаге {stepId} ({description}). Эскалация к пользователю — пожалуйста, подскажите как действовать.","exec.escalation_directive":"Ты застрял уже несколько попыток. Перестань повторять одно и то же и выбери ОДНО: (1) смени подход принципиально, (2) найди точный текст ошибки через web_search (или инструмент поиска ошибок), (3) задай пользователю короткий уточняющий вопрос, (4) если шаг невыполним — plan_step step=<n> status=skipped с заметкой (или re-plan). Кратко объясни выбор.","exec.test_churn_nudge":"Ты несколько раз подряд правил тест/спек-файл \"{file}\" и не изменил ни строчки production-кода. Если тесты падают — исправляй КОД ПОД ТЕСТОМ (а не тест), если только сам тест не ошибочен — тогда объясни, почему. Если задумано test-first, теперь напиши реализацию.","exec.script_workaround_nudge":"Ограничение безопасности уже заблокировало одну из твоих команд. Написание shell-скрипта (.bat/.cmd/.sh/.ps1), чтобы выполнить её иначе, НЕ снимает ограничение и обычно просто падает. Вместо этого: используй write_file для вывода в файл, запускай по одной простой команде за вызов, передавай \"workdir\" вместо \"cd\" или спроси пользователя.","exec.hints":"\n[Подсказки]\n{hints}","exec.file_rewrite_warning":"⚠️ Файл {file} был перезаписан {count} раз. Попробуйте другой подход — текущая стратегия исправлений не работает.","exec.forbidden_cmd":"ПРЕКРАТИ использовать \"{cmd}\" через bash — это не команда Windows cmd.exe, и она уже неоднократно падала в этой сессии. Используй предназначенный тул: grep → тул grep, ls/dir → list_dir, find → glob, rm → delete_file, sed → edit_file, touch → write_file, which → `where`, cp/mv → move_file, diff → read_file. Больше не вызывай bash для этого.","exec.error_search_results":"Ошибка \"{sig}\" повторилась {count} раз. Поиск в интернете нашёл:\n{results}\nПримени подходящее решение из результатов. Если ни один результат не релевантен — НЕ повторяй тот же подход, смени стратегию или честно сообщи о застревании.","exec.error_search_failed":"Поиск в интернете для \"{query}\" ничего не дал.","exec.error_search_no_query":"Текст ошибки незначимый — поиск в интернете пропущен.","exec.npm_exec_hint":"\"could not determine executable to run\" — у пакета/скрипта нет \"bin\". Используй \"npm run <script>\" (скрипт должен быть в package.json) или \"bunx <pkg>\" для пакета с объявленным bin.","exec.interactive_hint":"команде нужен интерактивный ввод, но у шелла нет TTY (запрос отменён). Запусти её неинтерактивно — передай все нужные флаги/аргументы (например, `bun create vite <name> --template react-ts` вместо голого интерактивного скаффолда).","exec.hidden_tool_hint":"\"{tool}\" — не команда оболочки, это инструмент MMA, который сейчас скрыт. Вызови тул enable_tools с tags [\"shell\"], чтобы включить его; он станет доступен на следующей итерации.","exec.tool_as_command_hint":"\"{tool}\" — это инструмент MMA, а не команда оболочки. Вызови его как тул (function call), не через bash.","exec.task_reminder":"Задача: {task}. Продолжай работу — не повторяй неудачные действия.","hall.max_retries_exhausted":"Модель вернула пустой или недостаточный ответ после нескольких попыток","hall.short_response":"Слишком короткий или пустой ответ","hall.repetitive":"Слишком повторяющийся ответ ({pct}% совпадение)","hall.uncertainty":"Маркеры неопределённости: {markers}","hall.unknown_paths":"Упомянутые файлы не найдены: {paths}","hall.contradiction_llm":"Противоречит ранее принятому решению{reason}","hall.claim_contradiction":"Ответ заявляет об успехе, но свежий результат тула указывает на проблему ({tool}: {snippet}). Либо проверь и исправь, затем перезапусти проверку — либо смягчи формулировку под факты (например, застейджено, появится в ближайшее время).","hall.claim_artifact":"В ответе {path} подан как готовый, но на диске: {detail}. Либо исправь файл и перепроверь реальным чтением — либо смягчи формулировку до того, что реально проверено.","hall.claim_output_unverified":"В ответе вывод подан как результат запуска ({detail}). Либо выполни разрешённым инструментом и процитируй реальный вывод — либо пометь его как ожидаемый/примерный.","hall.claim_web_unverified":"В ответе указаны суммы ({detail}), которых нет ни на одной реально загруженной странице. Либо найди и процитируй источник, либо пометь эти значения как непроверенные/примерные и скажи, что страницы прочитать не удалось.","hall.claim_file_not_created":"Ты заявил, что файл сохранён ({detail}), но за этот ход ни один файл не был записан. Либо реально создай его через write_file (пользователь просил файл), либо исправь утверждение и отдай содержимое в чат.","hall.uncertainty_prefix":"\n\n[⚠️ Неопределённость] ","browser.repeated_action":"Вы повторили то же действие ({action}) {threshold} раз. Попробуйте другой подход: используйте \"snapshot\" для перечитки страницы, другие номера элементов или другой URL.","browser.unknown_action":"Неизвестное действие: {action}","browser.error":"Ошибка браузера: {message}","browser.no_page":"Нет открытой страницы. Сначала выполните \"open\".","browser.url_required":"Требуется URL","browser.create_page_failed":"Не удалось создать страницу","browser.nav_failed":"Ошибка навигации: {message}","browser.invalid_target":"Неверный таргет. Укажите номер элемента из snapshot.","browser.click_failed":"Ошибка клика: {message}. Проверьте номер элемента.","browser.invalid_target_short":"Неверный таргет.","browser.text_required":"Требуется текст.","browser.type_failed":"Ошибка ввода: {message}","browser.direction_invalid":"Направление должно быть: up, down, top, bottom","browser.scroll_failed":"Ошибка прокрутки: {message}","browser.closed":"Браузер закрыт.","browser.no_page_short":"Нет страницы","browser.no_elements":"(нет интерактивных элементов на странице)","browser.more_elements":"... и другие элементы не показаны. Используйте прокрутку или поиск.","browser.content_header":"Содержимое:","browser.console_header":"Консоль:","browser.network_errors_header":"Сетевые ошибки:","browser.truncated":"... (обрезано)","pipeline.invalid":"Невалидный пайплайн: требуются name и steps","pipeline.step_missing_fields":"Шаг не содержит обязательных полей (id, agent, prompt): {step}","pipeline.circular":"Циклическая зависимость: {stepId}","plugin.loaded":"Загружен плагин: {name}","plugin.skipped":"Пропущен несовместимый плагин: {entry} ({message})","plugin.incompatible":"Пропущен плагин {name}: требуется MMA v{min}, текущая v{current}","plugin.dedup_older":"Плагин {name} v{version} пропущен: уже загружена более новая версия","migration.detected":"[MMA] Обнаружен старый конфиг. {summary}","migration.summary":"[MMA] {summary}","migration.config_bak":"- config → config.json.bak","migration.dir_bak":"- .mma/ → .mma.bak/ ({count} файлов)","migration.migrated":"Мигрировано:","migration.not_needed":"Миграция не требуется","ui.error_prefix":"✗ ","ui.success_prefix":"✓ ","ui.warning_prefix":"⚠ ","ui.thinking":"Думаю…","ui.thinking_label":"размышляю","ui.thinking_label_1":"размышляю","ui.thinking_label_2":"обдумываю","ui.thinking_label_3":"прикидываю","ui.action_fallback":"Действие","ui.actions_summary":"{count} действий","ui.plan_update":"шаг {step} → {status}","ui.todo_action":"{action} · {count}","ui.tool_running":"{tool}…","ui.step_context":"шаг {id}: {desc}","ui.draft_retracted":"↳ черновик отклонён проверкой, уточняю…","indexer.map_header":"Карта проекта","indexer.top_directories":"Основные директории","indexer.files":"Файлы","indexer.empty":"Нет проиндексированных файлов","indexer.and_more":"... и ещё {count} файлов","indexer.project_map_desc":"Получить карту проекта: сводка по файлам, языкам и экспортам. Действия: 'find' — поиск файлов по пути или экспорту, 'symbol' — найти определение символа, 'outline' — оглавление символов файла, 'refresh' — перестроить индекс.","indexer.project_map_action_desc":"Действие: summary, refresh, find, symbol или outline","indexer.project_map_query_desc":"Запрос: путь/экспорт (find), имя символа (symbol) или путь к файлу (outline)","indexer.summary":"Карта проекта: {summary}","indexer.refreshed":"Карта проекта обновлена: {summary}","indexer.not_indexed":"Проект ещё не проиндексирован","indexer.find_results":"Найдено {count} совпадающих файлов:\n{results}","indexer.find_more":"... и ещё {count} совпадений","indexer.symbol_results":"Найдено {count} определений символов:\n{results}","indexer.outline_empty":"(символы не извлечены)","indexer.no_matches":"Нет совпадающих файлов для \"{query}\"","indexer.truncated":"[!] Индекс усечён на {max} файлах (поднимите indexer.maxFiles, чтобы охватить всё дерево)","indexer.duplicates":"Дубликаты basename (проверьте, какой файл реально используется): {names}","indexer.stack_deps":"зависимости","indexer.stack_dev":"dev","indexer.stack_scripts":"скрипты","tool.friendly.project_map":"Карта проекта","config.decryption_warning":"Предупреждение: не удалось расшифровать конфигурацию: {error}","config.encryption_warning":"Предупреждение: не удалось зашифровать конфигурацию: {error}","config.migrate_start":"Миграция конфига в domain-формат...","config.migrate_done":"Миграция завершена. Создано {count} domain файлов. Legacy сохранён как config.json.bak.","config.migrate_no_legacy":"Legacy config.json не найден. Уже используется domain-формат.","config.migrate_error":"Ошибка миграции: {error}","config.legacy_hint":"Config: используется legacy config.json. Запустите \"mma config migrate\" для перехода к domain-формату.","config.parse_failed":"Предупреждение: не удалось разобрать {path} — используются значения по умолчанию. Исправьте или удалите файл, чтобы вернуть настройки.","image.source_required":"Укажите источник изображения: путь к файлу, URL или \"clipboard\".","image.clipboard_empty":"Буфер обмена не содержит изображение. Скопируйте изображение (например, скриншот через Win+Shift+S).","image.not_found":"Файл изображения не найден: {path}","image.no_context":"Менеджер контекста недоступен. Изображение можно прикрепить только во время активной сессии.","image.attached":"Изображение прикреплено из {source} ({size}). Оно будет включено в следующее сообщение.","image.error":"Не удалось загрузить изображение: {message}","tool.friendly.attach_image":"Прикрепить изображение","repl.image":"Прикрепить изображение","repl.image_usage":"/image <путь|URL|clipboard> — прикрепить изображение к следующему сообщению","tool.friendly.remember":"Запомнить","tool.friendly.recall":"Вспомнить","tool.remember.preference":"Запомнено: {key} = {value}","tool.remember.entry":"Запомнено: {category} — \"{entry}\"","tool.remember.key_required":"Для preferences требуется ключ (key)","tool.remember.entry_required":"Требуется текст записи","tool.recall.empty":"Ничего не найдено по \"{query}\"","tool.recall.no_memory":"Память пуста","tool.recall.search_results":"Результаты {category}:\n{results}","ctx.compactions":"сжатий: {count}","ctx.quality":"качество: {percent}%","ctx.delta_pos":"контекст +{tokens}","ctx.delta_neg":"контекст -{tokens} ↓","ctx.delta_zero":"контекст ±0","file.notfound_resolved":"Файл не найден: {path} (резолвится в {resolved})\nПуть был склеен с рабочей директорией, потому что в исходном виде он не существует. Выполни list_dir, чтобы найти корректный путь.","bash.echo_write_blocked":"Запись файлов через echo/printf ненадёжна в Windows cmd.exe (кавычки и многострочность ломаются). Используй инструмент write_file вместо этого (цель: {path}).","bash.cwd_flag_hint":"--cwd не стандартный флаг. Передай каталог через параметр \"workdir\" тула bash (например, workdir=\"{workdir}\").","bash.posix_workdir_hint":"workdir \"{workdir}\" — POSIX-путь, но это оболочка Windows cmd.exe. Используй Windows-путь или не указывай workdir, чтобы взять корень workspace ({baseDir}).","updater.check_error":"[updater] Ошибка проверки обновления: {error}","updater.available":"[updater] Доступно обновление: {current} → {latest}. Выполните `npm install -g micro-models-agent` для обновления.","updater.installing":"[updater] Установка {latest} глобально (текущая: {current})…","updater.installed":"[updater] Установлена {latest}. Перезапустите MMA для применения (была {current}).\n{changelog}","updater.install_failed":"[updater] Не удалось установить {latest}: {error}. Обновите вручную: `npm install -g micro-models-agent`.","cli.changelog_title":"Список изменений (micro-models-agent@{version}):","cli.changelog_not_found":"Changelog не найден для этой установки.","cli.changelog_range":"Изменения с версии {from}:","tools.enable_no_tags":"enable_tools требует хотя бы один тег в массиве \"tags\".","tools.enable_no_executor":"Исполнитель тулов недоступен — невозможно перечислить включённые тулы.","tools.enable_already_active":"Теги тулов уже активны: {tags}.","tools.enable_added":"Включены теги тулов: {tags}. Теперь доступны тулы: {tools}","tools.hidden_header":"Дополнительные тулы (включите по требованию через enable_tools или маршрутизируйте через subagent tool_tags):","tool.friendly.enable_tools":"Включить тулы","tool.friendly.set_thinking":"Уровень рассуждений","tool.thinking_set":"Уровень рассуждений: {level} ({reason})","tool.thinking_set_clamped":"Уровень рассуждений: {level} (ограничен конфигом, {reason})","tool.thinking_cooldown":"Override отложен ({remaining} итераций до доступа). Текущий: {current}","tool.thinking_invalid_level":"Неверный уровень рассуждений: {level}. Допустимые: none, low, high, max","reasoning.probe_failed":"Бэкенд не поддерживает управление reasoning effort. Динамическое управление отключено.","reasoning.mode_set":"Режим рассуждений: {mode}","reasoning.current":"Рассуждения: {level} ({mode})","reasoning.invalid_mode":"Неверный режим рассуждений: {mode}. Допустимые: auto, default, none, low, medium, high, max","cli.provider_base_hint":"Базовый URL установлен: {baseUrl}","cli.add_provider":"Добавить провайдера в конфиг","cli.provider_no_url":"Нет базового URL для провайдера \"{name}\". Укажите --url.","cli.provider_name_conflict":"Провайдер \"{name}\" уже существует — выбери другое имя.","cli.provider_added":"Провайдер добавлен: {name}","cli.provider_switch_hint":"Переключитесь на него: mma provider use <имя>","repl.cost":"Итого потрачено: {cost}","repl.cost_breakdown":"По провайдерам: {breakdown}","repl.tokens":"Потрачено токенов: {tokens}","repl.cache":"Кеш: {hit}% попаданий · сэкономлено {saved}","repl.cache_nosave":"Кеш: {hit}% попаданий","repl.prefix":"Префикс стабилен: {stable}% · сломалось: {cause}","cache.cause.system":"системный промпт","cache.cause.tools":"набор инструментов","cache.cause.history":"история","cache.cause.volatile":"волатильное содержимое","cache.cause.unknown":"неизвестно","cli.session_usage":"API-использование: {prompt} prompt + {completion} completion = {total} токенов","cli.session_cache":"Кеш: {hit}% попаданий ({cached} из кеша / {uncached} новых)","cli.usage":"Показать баланс/расход провайдера (OpenRouter)","cli.usage_unsupported":"Провайдер \"{provider}\" не отдаёт баланс по API. Это умеет только OpenRouter; OpenCode Zen/Go показывают его в веб-дашборде.","cli.usage_no_key":"Для активного провайдера не настроен API-ключ.","cli.usage_error":"Не удалось получить баланс: {error}","cli.usage_key_usage":"Расход по ключу: {usage}","cli.usage_key_limit":"Лимит ключа: {limit} · осталось {remaining}","cli.usage_balance":"Баланс: {balance}","cli.usage_account":"Аккаунт: куплено {credits} · израсходовано {used}","cli.usage_empty":"Провайдер не вернул данных о балансе.","repl.ctrl_c_interrupt":"\n[Ctrl+C] Остановка агента... (ещё раз — принудительно)","repl.force_exit":"\nПринудительный выход — фоновая очистка может быть неполной.","exec.stop_directive":"STOP. Step {stepId} (\"{description}\") took {iterations} iterations with no progress. DO NOT continue this step. Immediately call: plan_step step={stepId} status=done (if code works despite warnings) OR plan_step step={stepId} status=skipped note=\"reason\". Do NOT make any other tool calls before updating the plan.","exec.test_runner_fail":"[test-runner] {framework}: {failed} test(s) FAILING, {passed} passing — do NOT mark verification steps as done while tests fail. Investigate the failures, fix the code, then re-run the tests.","exec.test_runner_pass":"[test-runner] {framework}: all {passed} test(s) passing.","plan.subtasks_done":"All sub-tasks done — call plan_step step={stepId} status=done to complete this step.","plan.no_subtasks":"(no sub-tasks)","plan.step_label":"Step {stepId}: {description}","exec.hint_deps":"Check if a lock file exists (package-lock.json, poetry.lock). If missing, run the install command first.","exec.hint_test":"Make sure the source files exist and have real code before running tests.","exec.hint_build":"Check that all dependencies are installed and source files are not empty.","exec.hint_deploy":"Verify credentials and network access before deploying.","exec.hint_repetitive":"You are calling the same tool repeatedly with the same arguments. Try a different approach.","exec.hint_consecutive":"Multiple different tools are failing. Check if the environment is set up correctly.","exec.hint_read_only":"You have made many read-only tool calls (read_file/glob/grep/browser) without writing anything. Stop exploring — make the edit/write the task needs, or use the plan tool to decide next steps.","moe.replan_started":"🔄 Re-plan {cycle}/{max}: выполняю обновлённый план...","moe.executing":"⚙️ Выполняю {count} подзадач (цикл {cycle})...","moe.execution_complete":"Выполнение завершено: {succeeded}/{total} успешно","moe.cycles_exhausted":"Достигнут лимит re-plan циклов ({max}) — возвращаю частичные результаты","moe.partial_result":"Частичный результат","moe.planning":"🤖 Планирую в режиме MoE...\n","moe.plan_fallback":"⚠️ Валидация плана не прошла. Возврат к одиночному режиму.\n","moe.plan_autofixed":"🔧 Автоисправлено проблем плана: {count}.\n","moe.plan_failed":"План MoE не построен: {error} — возврат к одиночному режиму","moe.no_orchestrator":"MoE включён, но orchestrator.model не задан — возврат к одиночному режиму. Укажите orchestrator.model для активации MoE.","moe.scope_approved":"🔓 Scope расширен для \"{subtask}\": {files}","moe.scope_rejected":"⛔ Запрос scope отклонён для \"{subtask}\"","prompt.overflow.compressing":"Переполнение системного промпта: сжимаю {count} блок(ов) перед первым запуском — на локальной модели это может занять время.","prompt.overflow.summarizing":"Переполнение системного промпта: суммаризирую \"{label}\" ({original} токенов → бюджет {budget} токенов) моделью…","prompt.overflow.truncating":"Переполнение системного промпта: обрезаю \"{label}\" ({original} токенов) — суммаризация недоступна.","prompt.overflow.summarize_failed":"Переполнение системного промпта: не удалось суммаризировать \"{label}\": {error} — перехожу к обрезке.","prompt.overflow.hint_needed":"промпту нужно ~{needed} токенов системного бюджета (сейчас: {window} × {fraction} = {budget})","prompt.overflow.hint_window":"подними contextWindow минимум до {required} (стандартный размер {recommended}) — {how}","prompt.overflow.hint_fraction":"или оставь окно и подними contextBudget.systemPrompt до ~{fraction} (выполни: mma context --system {fraction})","prompt.overflow.exceeded":"Промпт переполнен: системному промпту нужно ~{needed} токенов (бюджет {budget} токенов); \"{label}\" ({original} токенов) было {mode} до {resolved} токенов. Чтобы включить всё полностью, {hint}.","prompt.overflow.failed":"Не удалось разрешить переполнение промпта: {error} — слишком большие блоки будут отброшены.","prompt.overflow.startup":"Проверка при старте: системному промпту нужно ~{needed} токенов (бюджет: {budget} токенов); {block} ({original} токенов) будет суммаризован/обрезан перед первым запуском. Чтобы включить всё полностью, {hint}.","tool.session_info.no_active":"Нет активной сессии","tool.session_info.result":"Сессия: \"{name}\" ({id})\nМодель: {model}\nПровайдер: {provider}\nКонтекстное окно: {contextWindow} токенов\nСообщений: {messages}\nСоздана: {createdAt}\nОбновлена: {updatedAt}","tool.session_info.context":"Использовано контекста: {used} / {budget} токенов ({percent}%)","tool.friendly.session_info":"Информация о сессии","cli.map.description":"Работа с индексом / картой проекта","cli.map.action":"Действие: summary (по умолчанию), refresh, find","cli.map.query":"Поисковый запрос для действия find","repl.map":"Показать карту проекта / индекс (summary, refresh, find)","repl.map_usage":"Использование: /map [summary|refresh|find <запрос>]","map.refreshed":"Карта проекта обновлена","map.find_usage":"Использование: map find <запрос>","web.topbar.new_chat":"новый чат","web.topbar.settings":"настройки","web.topbar.all_sessions":"все сессии","web.topbar.sidebar":"сайдбар","web.topbar.close":"закрыть","web.sessbar.prev":"предыдущая сессия","web.sessbar.next":"следующая сессия","web.conn.reconnecting":"переподключение…","web.i18n.stale":"переводы обновлены — перезапустите сервер","web.i18n.reload":"обновить страницу","web.sidebar.plan":"план","web.sidebar.session":"сессия","web.sidebar.usage":"использование","web.sidebar.env":"окружение","web.sidebar.tab_session":"Сессия","web.sidebar.tab_map":"Карта","web.sidebar.tab_trace":"Трассировка","web.sidebar.tab_lsp":"LSP","web.sidebar.tab_files":"Файлы","web.sidebar.lsp_what":"LSP — диагностика уровня редактора","web.sidebar.lsp_status":"статус","web.sidebar.lsp_enabled":"включён","web.sidebar.lsp_offline":"офлайн","web.sidebar.lsp_check":"Проверить","web.sidebar.lsp_checking":"проверяется…","web.sidebar.lsp_not_checked":"ещё не проверялось","web.sidebar.lsp_none":"серверы не настроены","web.sidebar.lsp_unavailable":"LSP недоступен","web.sidebar.lsp_via":"через","web.sidebar.lsp_via_global":"глобальный бинарник","web.sidebar.lsp_via_npx":"npx","web.sidebar.lsp_reason_ok":"ок","web.sidebar.lsp_reason_disabled":"отключён","web.sidebar.lsp_reason_not_applicable":"нет подходящих файлов","web.sidebar.lsp_reason_binary_missing":"бинарник не найден","web.sidebar.lsp_reason_offline":"офлайн — поставьте бинарник","web.sidebar.lsp_reason_network":"сеть — не удалось скачать сервер","web.sidebar.lsp_reason_timeout":"таймаут (initialize)","web.sidebar.lsp_reason_spawn_failed":"не удалось запустить процесс","web.sidebar.lsp_reason_server_error":"ошибка сервера","web.sidebar.lsp_reason_deadline":"пропущен (дедлайн)","web.sidebar.lsp_info":"Информация и настройка","web.sidebar.lsp_switch_enabled":"LSP включён","web.sidebar.lsp_switch_offline":"Офлайн (только глобальные бинарники)","web.sidebar.lsp_offline_hint":"Офлайн-режим не использует npx — поставьте серверы ниже глобально.","web.sidebar.lsp_install_title":"Установка вручную","web.sidebar.lsp_copy":"копировать","web.sidebar.lsp_copied":"скопировано","web.sidebar.lsp_busy":"дождитесь окончания хода","web.sidebar.map_status":"статус","web.sidebar.map_ready":"готово","web.sidebar.map_indexing":"индексация…","web.sidebar.map_stale":"устарело","web.sidebar.map_updated":"обновлено","web.sidebar.map_never":"никогда","web.sidebar.map_today":"сегодня, {time}","web.sidebar.map_watcher":"вотчер","web.sidebar.map_on":"вкл.","web.sidebar.map_off":"выкл.","web.sidebar.map_files":"файлы","web.sidebar.map_symbols":"символы","web.sidebar.map_tokens":"токены","web.sidebar.map_root":"корень","web.sidebar.map_languages":"языки","web.sidebar.map_reindex":"Переиндексировать","web.sidebar.map_reindexing":"переиндексация…","web.sidebar.map_reindex_failed":"не удалось переиндексировать","web.sidebar.trace_empty":"событий пока нет","web.sidebar.trace_turn":"ход {n}","web.sidebar.trace_text":"печатает… {count} симв.","web.sidebar.trace_plan":"обновление плана","web.sidebar.trace_question":"вопрос","web.sidebar.trace_status":"статус","web.sidebar.trace_log":"лог · {level}","web.sidebar.trace_retract":"черновик отозван","web.sidebar.trace_index":"индекс · {phase}","web.sidebar.trace_critic":"критик · {status}","web.sidebar.trace_moe":"moe","web.sidebar.trace_compaction":"компакция","web.sidebar.trace_probe":"проба контекста","web.sidebar.trace_usage":"расход llm","web.sidebar.trace_audit":"аудит","web.sidebar.trace_claim":"перепроверка · {kind}","web.sidebar.trace_output":"вывод","web.sidebar.detail_metadata":"метаданные","web.sidebar.detail_arguments":"аргументы","web.sidebar.detail_output":"вывод","web.sidebar.detail_error":"ошибка","web.sidebar.detail_text":"текст","web.sidebar.detail_plan":"план","web.sidebar.detail_reasoning":"размышление","web.sidebar.detail_status":"статус","web.sidebar.detail_ok":"ok","web.sidebar.detail_fail":"ошибка","web.sidebar.detail_duration":"длительность","web.sidebar.detail_time":"время","web.sidebar.detail_tool_call":"вызов тула","web.sidebar.detail_session":"сессия","web.sidebar.detail_turn":"ход","web.sidebar.detail_iteration":"итерация","web.sidebar.detail_provenance":"сверка с логом","web.sidebar.detail_provenance_count":"assistant-сообщений в логе: {n}","web.env.dir":"директория","web.env.agents":"AGENTS.md","web.env.map":"карта","web.env.agents_disabled":"отключён","web.env.agents_none":"не найден","web.env.map_not_indexed":"не проиндексирована","web.env.files_one":"{count} файл","web.env.files_few":"{count} файла","web.env.files_many":"{count} файлов","web.env.symbols_one":"{count} символ","web.env.symbols_few":"{count} символа","web.env.symbols_many":"{count} символов","web.env.tokens_one":"~{count} токен","web.env.tokens_few":"~{count} токена","web.env.tokens_many":"~{count} токенов","web.usage.session":"сессия","web.usage.copy_id":"скопировать ID сессии","web.usage.model":"модель","web.usage.context":"контекст","web.usage.cache":"кеш","web.usage.cost":"стоимость","web.usage.compactions":"сжатия","web.usage.part_system":"инструкции","web.usage.part_tools":"инструменты","web.usage.part_history":"диалог","web.usage.part_reserve":"резерв ответа","web.usage.part_free":"свободно","web.usage.quality":"качество","web.usage.probe":"проб","web.usage.probe_loaded":"загружено {actual}","web.usage.probe_low":"загружено {actual} · настроено {configured}","web.start.label":"старт:","web.start.session":"сессия","web.turn.tools":"{count} инструментов","web.question.custom":"свой ответ…","web.question.custom_send":"отправить","config.key.model":"модель","config.key.provider.active":"активный провайдер","config.key.contextWindow":"окно контекста","config.key.contextBudget.systemPrompt":"доля системного промпта","config.key.contextBudget.responseReserve":"резерв ответа","config.key.showReasoning":"показывать рассуждения","config.key.reasoning.mode":"режим рассуждений","config.key.ui.verbosity":"подробность","config.key.maxToolIterations":"макс. итераций тулов","config.key.stuckThreshold":"порог застревания","config.key.moe.enabled":"MoE","config.key.moe.maxReplanCycles":"циклы re-plan MoE","config.key.critic.enabled":"проверяющий (критик)","config.key.critic.model":"модель критика","config.key.critic.provider":"провайдер критика","config.key.critic.tools":"проверки критика","config.key.critic.maxCalls":"макс. вызовов критика","config.key.critic.maxRepairCycles":"циклы исправления критика","config.key.critic.timeoutMs":"таймаут критика (мс)","config.key.logLevel":"уровень логов","config.key.locale":"язык","config.key.version":"версия","config.key.security.enabled":"безопасность","config.key.security.paths.enabled":"ограничить пути файлов","config.key.security.contentScan.enabled":"сканировать содержимое файлов","config.key.security.sessionEncryption.enabled":"шифровать файлы сессий","config.enum.silent":"тихо","config.enum.error":"ошибки","config.enum.warn":"предупреждения","config.enum.info":"инфо","config.enum.debug":"отладка","config.enum.quiet":"тихо","config.enum.normal":"обычно","config.enum.verbose":"подробно","config.enum.auto":"авто","config.enum.rg":"ripgrep","config.enum.grep":"grep","config.enum.js":"встроенный JS","config.enum.default":"по умолчанию","config.enum.off":"выкл.","config.enum.ledger":"леджер тулов","config.enum.line":"строка","config.enum.meta":"в подсказках","config.enum.full":"во всю ширину","config.enum.compact":"компактный","config.enum.legacy":"legacy","config.enum.v2":"v2","config.enum.comfortable":"обычный","config.enum.large":"крупный","config.enum.none":"нет","config.enum.low":"низкий","config.enum.medium":"средний","config.enum.high":"высокий","config.enum.max":"максимум","config.enum.en":"английский","config.enum.ru":"русский","config.enum.security_block":"блокировка безопасности","config.enum.bash_command":"bash-команда","config.enum.file_operation":"операция с файлом","config.enum.network_request":"сетевой запрос","config.enum.tool_call":"вызов инструмента","config.enum.authentication":"аутентификация","config.enum.configuration_change":"изменение конфигурации","config.enum.session_start":"старт сессии","config.enum.session_end":"конец сессии","web.settings.title":"настройки","web.settings.general":"Общие","web.settings.model":"Модель и провайдер","web.settings.context":"Контекст","web.settings.reasoning":"Рассуждения","web.settings.agent":"Агент","web.settings.network":"Сеть","web.settings.browser":"Браузер","web.settings.sessions":"Сессии","web.settings.ui":"Интерфейс и тема","web.settings.memory":"Память","web.settings.skills":"Навыки","web.settings.plugins":"Плагины · MCP","web.settings.security":"Безопасность","web.settings.advanced":"Дополнительно","web.settings.search_placeholder":"поиск по настройкам","web.settings.search_empty":"ничего не найдено","web.settings.table_invalid":"сначала заполните обязательные поля ({field})","web.settings.sec.general.interface":"Интерфейс","web.settings.sec.general.agent":"Цикл агента","web.settings.sec.general.agent.desc":"Как долго и настойчиво агент работает до остановки.","web.settings.sec.general.provider":"Провайдеры","web.settings.sec.model.tuning":"Производительность","web.settings.sec.model.tuning.desc":"Лимит токенов ответа и загрузка модели в память.","web.settings.sec.model.capabilities":"Возможности","web.settings.sec.model.capabilities.desc":"Ручные переопределения vision/tools, если определение модели ошибается.","web.settings.sec.context.window":"Окно контекста","web.settings.sec.context.window.desc":"Общее окно и его деление между системным промптом, ответом и историей.","web.settings.sec.context.compaction":"Сжатие","web.settings.sec.context.compaction.desc":"Когда старая история сворачивается в сводку для освобождения места.","web.settings.sec.context.instructions":"Инструкции","web.settings.sec.context.instructions.desc":"Что делать, если AGENTS.md или карта проекта не влезают в промпт.","web.settings.sec.context.indexer":"Индекс проекта","web.settings.sec.context.indexer.desc":"Как строится карта проекта: лимит файлов и учёт .gitignore.","web.settings.sec.context.log":"Журнал контекста","web.settings.sec.context.log.desc":"Записывать каждый промпт в файл диффов рядом с сессией.","web.settings.sec.reasoning.display":"Показ","web.settings.sec.reasoning.effort":"Глубина","web.settings.sec.reasoning.effort.desc":"Авто выбирает уровень на каждом шаге внутри диапазона; ручной режим его отключает.","web.settings.sec.agent.moe":"Смесь экспертов","web.settings.sec.agent.moe.desc":"Делит работу на подзадачи экспертов через планировщик; медленнее, но сильнее на многошаговых задачах.","web.settings.sec.agent.critic":"Критик","web.settings.sec.agent.critic.desc":"Второй проход, проверяющий работу агента перед ответом.","web.settings.sec.agent.tools":"Инструменты и навыки","web.settings.sec.agent.tools.desc":"Какие инструменты видны сразу и сколько промпта могут занять навыки.","web.settings.sec.agent.subagent":"Субагенты","web.settings.sec.agent.subagent.desc":"Как возвращаются результаты субагентов и как они распараллеливаются.","web.settings.sec.agent.hallucination":"Проверка галлюцинаций","web.settings.sec.agent.hallucination.desc":"Проверять ответ на связность перед показом.","web.settings.sec.network.web":"Веб-поиск","web.settings.sec.network.web.desc":"Главный выключатель инструмента web_search.","web.settings.sec.network.error":"Автопоиск по ошибке","web.settings.sec.network.error.desc":"Искать в интернете, когда одна и та же ошибка повторяется.","web.settings.sec.browser.main":"Браузер","web.settings.sec.browser.limits":"Лимиты","web.settings.sec.browser.limits.desc":"Ограничения, чтобы снимок страницы влезал в контекст.","web.settings.sec.browser.viewport":"Окно и таймауты","web.settings.sec.sessions.main":"Сессии","web.settings.sec.sessions.main.desc":"Сохранение, имена и сколько прошлых сессий хранить.","web.settings.sec.sessions.isolation":"Изоляция","web.settings.sec.sessions.isolation.desc":"Держать плагины и временные файлы отдельно для каждой сессии.","web.settings.sec.ui.chat":"Вывод в чат","web.settings.sec.ui.chat.desc":"Строки статуса, прогресс и метры контекста в ленте чата.","web.settings.sec.ui.theme":"Тема","web.settings.sec.ui.theme.desc":"Цветовая схема веб-интерфейса. Хранится в браузере, а не в файле конфигурации.","web.settings.sec.memory.add":"Добавить заметку","web.settings.memory_add_title":"новая запись памяти","config.field.name":"имя","config.field.model":"модель","config.field.tool_tags":"теги инструментов","config.field.max_attempts":"попытки","config.field.description":"описание","config.field.input":"вход $/1M","config.field.output":"выход $/1M","config.field.cachedInput":"кеш $/1M","config.field.cacheWrite":"запись $/1M","config.field.vision":"изображения","config.field.tools":"инструменты","web.settings.sec.security.switches":"Переключатели","web.settings.sec.security.switches.desc":"Главные выключатели по каждой защите. Выключение отключает всю группу ниже.","web.settings.sec.security.limits":"Лимиты","web.settings.sec.security.limits.desc":"Ограничения глубины, объёма и частоты для активности инструментов.","web.settings.sec.security.bash":"Правила bash","web.settings.sec.security.bash.desc":"Команды, флаги и операторы, которые bash-тул отклоняет.","web.settings.sec.security.paths":"Правила путей","web.settings.sec.security.paths.desc":"Glob-шаблоны запрещённых путей или, если задано, единственно разрешённых.","web.settings.sec.security.network":"Правила сети","web.settings.sec.security.network.desc":"Заблокированные домены или, если задано, единственно разрешённые.","web.settings.sec.security.scan":"Сканирование контента","web.settings.sec.security.scan.desc":"Шаблоны, которые ищутся в содержимом файлов перед записью.","web.settings.sec.security.audit":"Журнал аудита","web.settings.sec.security.audit.desc":"Отправлять события безопасности в файл или вебхук.","web.settings.sec.security.encryption":"Шифрование сессий","web.settings.sec.security.encryption.desc":"Шифровать историю чата и журнал сессии на диске.","web.settings.sec.security.access":"Доступ","web.settings.sec.advanced.diagnostics":"Диагностика","web.settings.sec.advanced.diagnostics.desc":"Подробность логов и установленная версия.","web.settings.sec.advanced.retry":"Повторы","web.settings.sec.advanced.retry.desc":"Пауза между повторами упавших или зависших запросов к провайдеру.","web.settings.sec.advanced.service":"Сервис","web.settings.sec.advanced.service.desc":"Учёт стоимости, цены и фоновая проверка обновлений.","web.settings.sec.plugins.lsp":"LSP","web.settings.sec.plugins.lsp.desc":"Диагностика уровня редактора; офлайн-режим запускает установленные бинарники без npx.","web.settings.add":"добавить","web.settings.forget":"забыть","web.settings.search":"поиск","web.settings.saved":"сохранено","web.settings.save_failed":"не удалось сохранить","web.settings.use":"использовать","web.settings.active":"активен","web.settings.active_check":"активен ✓","web.settings.search_models":"поиск моделей…","web.settings.no_models":"провайдер не сообщил моделей","web.settings.no_matches":"нет совпадений","web.settings.active_provider":"активный провайдер","web.settings.add_provider":"добавить провайдера","web.settings.section_models":"Модель","web.settings.section_providers":"Провайдеры","web.settings.provider_add_title":"добавить провайдера","web.settings.provider_preset":"шаблон","web.settings.provider_custom":"свой / локальный","web.settings.provider_name_conflict":"провайдер с таким именем уже существует — выбери другое имя","web.settings.provider_edit_title":"изменить провайдера","web.settings.provider_advanced":"дополнительно","web.settings.provider_make_active":"сделать активным","web.settings.providers_empty":"провайдеры не настроены","web.settings.edit":"изменить","web.settings.delete":"удалить","web.settings.cancel":"отмена","web.settings.save":"сохранить","web.settings.delete_failed":"не удалось удалить","web.settings.provider_type":"тип","web.settings.provider_label_field":"метка","web.settings.provider_baseurl":"base URL","web.settings.provider_baseurl_custom":"свой URL…","web.settings.provider_apikey":"API-ключ","web.settings.provider_key_keep":"оставь пустым, чтобы сохранить","web.settings.provider_context":"окно контекста","web.settings.provider_priority":"приоритет","web.settings.provider_rpm":"запросов / мин","web.settings.provider_parallel":"макс. параллельно","web.settings.provider_max_tokens":"макс. токенов ответа","web.settings.provider_cache_mechanism":"механизм кеша","web.settings.provider_cache_report":"формат отчёта кеша","web.settings.provider_cache_flags":"флаги кеша","web.settings.provider_retry":"повторы","web.settings.provider_retry_max":"макс. повторов","web.settings.provider_retry_base":"базовая задержка (мс)","web.settings.provider_retry_maxdelay":"макс. задержка (мс)","web.settings.provider_flag.sessionHeader":"заголовок x-opencode-session","web.settings.provider_flag.requestCachePrompt":"cache_prompt (llama.cpp)","web.settings.provider_flag.requestPromptCacheKey":"prompt_cache_key (OpenAI)","web.settings.provider_flag.requestSessionId":"session_id (OpenRouter)","web.settings.provider_flag.requestCacheControl":"cache_control (Anthropic)","web.settings.provider_flag.requestStreamUsage":"usage-чанк в стриме","web.settings.provider_required":"тип и base URL обязательны","web.settings.provider_invalid":"некорректное числовое значение","web.settings.provider_active_guard":"нельзя удалить активного провайдера — сначала переключись","web.settings.builtin":"встроенный","web.settings.plugins_note":"плагины загружаются из ~/.mma/plugins и <project>/.mma/plugins; включай или отключай их, добавляя или удаляя файл плагина там (применится при следующем запуске).","web.settings.mcp_enable":"включить","web.settings.mcp_disable":"отключить","web.settings.mcp_saved":"сохранено · применится при следующем запуске","web.settings.mcp_note":"изменения MCP-серверов сохраняются в конфиг и применяются при следующем запуске.","web.settings.theme":"тема","web.settings.security_note":"защищённые пути, ограниченный режим и веб-токен настраиваются мастером в терминале.","web.settings.web_token":"веб-токен","web.settings.web_token_none":"не задан","web.settings.terminal_tag":"терминал","web.settings.memory_unavailable":"память недоступна","web.settings.new_memory":"новая запись памяти…","web.settings.memory_category":"категория памяти","web.settings.add_failed":"не удалось добавить","web.settings.search_memory":"поиск по памяти…","web.settings.forget_failed":"не удалось забыть","web.settings.preferences":"предпочтения","web.settings.no_memory":"нет записей в памяти","web.settings.skills_unavailable":"навыки недоступны","web.settings.no_skills":"навыки не найдены","web.settings.enabled":"включён","web.settings.available":"доступен","web.settings.plugins_unavailable":"плагины недоступны","web.settings.plugins_header":"плагины","web.settings.no_plugins":"плагины не зарегистрированы","web.settings.disabled":"отключён","web.settings.mcp_servers":"MCP-серверы","web.settings.no_mcp":"MCP-серверы не настроены","web.settings.mcp_add":"добавить MCP-сервер","web.settings.mcp_edit_title":"править MCP-сервер","web.settings.mcp_required":"нужны имя и command (stdio) или URL (sse/http)","web.settings.mcp_invalid":"неверное значение: timeout 1000–300000 мс, args/env/headers — JSON","web.settings.lsp_servers":"LSP-серверы","web.settings.no_lsp":"LSP-серверы не настроены","web.settings.lsp_note":"изменения LSP сохраняются в конфиг и применяются при следующем запуске.","web.settings.lsp_unavailable":"LSP недоступен","web.settings.loading":"загрузка…","web.input.placeholder":"ввод сообщения… (/ — команды)","web.input.enter":"Enter — отправить","web.input.shift_enter":"Shift+Enter — новая строка","web.input.esc":"Esc — стоп","web.input.attach":"Ctrl+V — вложить","web.input.send":"отправить","web.input.stop":"остановить","web.input.queued":"в очереди · позиция {n}","web.input.queue_full":"очередь сообщений полна — дождись конца хода","web.tab.working":"работает","web.tab.waiting":"ждёт вас","web.tab.queued":"в очереди","web.tab.failed":"ошибка","web.tab.gone":"удалена","web.session.gone":"сессия удалена или недоступна — закройте вкладку","web.empty.title":"новый чат","web.message_empty":"Сначала введи сообщение.","web.empty.hint":"введи сообщение ниже · / — команды · модель и контекст выбираются над полем","web.attach.title":"прикрепить изображение","web.attach.remove":"удалить","web.attach.only_images":"можно прикреплять только изображения","web.attach.too_many":"слишком много изображений (максимум {max})","web.attach.too_large":"изображение слишком большое (максимум 50 МБ)","web.attach.invalid":"некорректное изображение","web.attach.read_failed":"не удалось прочитать изображение","web.sessions.active":"активные","web.sessions.recent":"недавние","web.sessions.new":"+ новая сессия","web.sessions.refresh":"↻ обновить","web.sessions.none_active":"— нет активной сессии —","web.sessions.none":"— нет —","web.sessions.delete":"удалить","web.sessions.search":"поиск сессий…","web.sessions.create_failed":"не удалось создать сессию","web.sessions.delete_failed":"не удалось удалить","web.sessions.confirm_title":"Удалить сессию?","web.sessions.confirm_body":"«{name}» будет удалена безвозвратно. Действие необратимо.","web.sessions.active_guard":"нельзя удалить активную сессию — сначала переключитесь","web.selectors.model":"модель","web.selectors.provider":"провайдер","web.selectors.context":"контекст","web.selectors.reasoning":"рассуждения","web.selectors.switch_busy":"переключение уже идёт, подождите","web.selectors.reasoning_off":"выкл (бэкенд игнорирует)","web.selectors.no_models":"нет моделей","web.selectors.search_models":"поиск моделей…","web.selectors.refresh_list":"↻ обновить список","web.selectors.custom":"другое…","web.selectors.current":"текущее","web.selectors.context_prompt":"контекстное окно (токены)","web.rail.working":"выполняю","web.rail.composing":"пишу","web.rail.no_plan":"без плана","web.rail.step_of":"шаг {cur}/{total}","web.rail.last":"последнее:","web.rail.none":"—","web.rail.tools_one":"{count} тул","web.rail.tools_few":"{count} тула","web.rail.tools_many":"{count} тулов","web.rail.events_one":"{count} событие","web.rail.events_few":"{count} события","web.rail.events_many":"{count} событий","web.action.thinking":"думаю","web.action.hide":"скрыть","web.action.show":"показать","web.action.actions_one":"{count} действие","web.action.actions_few":"{count} действия","web.action.actions_many":"{count} действий","web.action.cancel":"отмена","web.cmdk.label":"команды","web.command.help":"список веб-команд","web.command.status":"модель · провайдер · контекст · сессия · детализация","web.command.config":"прочитать или записать ключ конфига","web.command.model":"показать модели или переключить модель","web.command.provider":"показать провайдеры или переключить провайдер","web.command.reasoning":"показ рассуждений и уровень","web.command.verbose":"уровень детализации UI","web.command.context":"показать или задать окно контекста","web.command.security":"показать флаги безопасности или записать ключ","web.security.unknown_sub":"неизвестная подкоманда: security {sub}","web.command.session":"показать сессии или активировать сессию","web.command.export":"экспорт активной сессии в файл","web.command.memory":"просмотр и правка глобальной памяти","web.command.clear":"очистить ленту (в браузере)","web.command.new":"новая вкладка чата (в браузере)","web.turn.stopped":"остановлено","web.turn.failed":"ход не удался","web.turn.end":"ход завершён · ok · инструментов {count}","web.plan.none":"нет активного плана","web.plan.heading_one":"План · {count} шаг","web.plan.heading_few":"План · {count} шага","web.plan.heading_many":"План · {count} шагов","web.history.loading":"загрузка…","web.history.unavailable":"— история недоступна","web.history.empty":"— пустая сессия —","web.scroll.latest":"к новому","web.tool.output_one":"вывод · {count} символ","web.tool.output_few":"вывод · {count} символа","web.tool.output_many":"вывод · {count} символов","web.tool.collapse":"свернуть","web.code.copy":"копировать","web.code.copied":"скопировано","web.code.copy_failed":"не скопировано","web.msg.copy":"копировать","web.msg.copy_md":"копировать как markdown","web.card.open_title":"Предпросмотр во вкладке браузера","web.card.copy_title":"Скопировать путь в рабочей папке","web.card.drawio_hint":"Диаграмма draw.io — это XML: предпросмотр покажет код, схему смотри в draw.io / VS Code.","web.card.files_one":"{count} файл","web.card.files_few":"{count} файла","web.card.files_many":"{count} файлов","web.card.screenshot":"снимок экрана","web.card.attached_image":"прикреплённое изображение","web.card.browser_viewport":"браузер · область просмотра","web.question.placeholder":"введи ответ…","web.question.send":"отправить","web.question.answered":"отвечено","web.question.multi_hint":"выбери один или несколько","web.misc.command_unavailable":"команда недоступна","web.file.error.missing_path":"Не указан путь к файлу.","web.file.error.outside_workspace":"Файл вне рабочей папки агента — открыть нельзя.","web.file.error.protected_path":"Файл защищён (секреты/VCS) — открыть нельзя.","web.file.error.too_large":"Файл слишком большой для показа в браузере (максимум {limit} байт).","web.file.error.binary_file":"Похоже на бинарный файл — текстом показать нельзя, скачай кнопкой «Скачать».","web.file.error.not_found":"Файл не найден (возможно, это папка или он удалён).","web.file.error.workspace_unavailable":"Рабочая папка не открыта.","web.files.empty":"Файлов нет.","web.files.loading":"Загрузка…","web.files.error":"Не удалось загрузить дерево файлов.","web.files.truncated":"Слишком много записей — список усечён.","web.files.attach":"Прикрепить путь","web.files.open_failed":"Не удалось открыть файл.","web.files.no_workspace":"Рабочая папка не открыта.","web.files.close":"Закрыть","config.desc.model":"Модель основного агента.","config.desc.provider.active":"Какой из настроенных провайдеров используется.","config.desc.contextWindow":"Общий размер контекста в токенах (системный промпт + история + резерв).","config.desc.contextBudget.systemPrompt":"Доля контекста под системный промпт (например, 10%).","config.desc.contextBudget.responseReserve":"Доля контекста, зарезервированная под ответ модели.","config.desc.showReasoning":"Показывать рассуждения модели в чате.","config.desc.reasoning.mode":"Когда запрашивать/показывать рассуждения (auto — по модели).","config.desc.ui.verbosity":"Насколько подробно чат показывает действия и тулы.","config.desc.maxToolIterations":"Жёсткий лимит итераций вызова тулов за ход.","config.desc.stuckThreshold":"Сколько повторяющихся одинаковых действий до подсказки сменить подход.","config.desc.moe.enabled":"Agent-level MoE: план → параллельные эксперты → проверка (через orchestrator-провайдер).","config.desc.moe.maxReplanCycles":"Максимум циклов план→исполнение→проверка до принятия частичного результата.","config.desc.critic.enabled":"Проверяющий в петле: ревью работы при мутациях и перед завершением.","config.desc.critic.model":"Отдельная модель проверяющего (пусто = активная модель).","config.desc.critic.provider":"Отдельный провайдер проверяющего (пусто = активный провайдер).","config.desc.critic.tools":"Разрешить критику ограниченные read-only проверки файлов перед финальным вердиктом.","config.desc.critic.maxCalls":"Жёсткий лимит LLM-вызовов критика за прогон.","config.desc.critic.maxRepairCycles":"Ограниченные циклы исправления по критическому вердикту.","config.desc.critic.timeoutMs":"Таймаут вызова критика (fail-open).","config.desc.logLevel":"Подробность диагностических логов.","config.desc.locale":"Язык интерфейса и сообщений агента.","config.desc.version":"Установленная версия MMA.","config.desc.security.enabled":"Главный выключатель модуля безопасности (проверки путей, сканы, лимиты).","config.desc.security.paths.enabled":"Ограничивать файловые операции рабочей папкой и блокировать пути вне неё.","config.desc.security.contentScan.enabled":"Проверять содержимое файлов на опасные паттерны перед записью.","config.desc.security.sessionEncryption.enabled":"Шифровать сохранённые логи сессий на диске.","config.desc.webToken":"Токен для доступа к веб-UI не с localhost (задаётся через --token / MMA_WEBUI_TOKEN).","web.setup.title":"Настройка MMA","web.setup.subtitle":"Несколько коротких вопросов перед началом.","web.setup.step.language":"Язык","web.setup.step.provider":"Провайдер","web.setup.step.key":"Ключ","web.setup.step.model":"Модель","web.setup.step.context":"Контекст","web.setup.step.security":"Безопасность","web.setup.step.review":"Проверка","web.setup.language.title":"Выберите язык","web.setup.language.hint":"Используется для интерфейса.","web.setup.provider.title":"Выберите провайдера","web.setup.provider.hint":"Для локальной модели выберите OpenAI-совместимый вариант, просканируйте сервер и проверьте подключение перед продолжением.","web.setup.provider.base_url":"Базовый URL","web.setup.provider.scan":"Найти локальные серверы","web.setup.provider.scan_found_one":"Найден {count} сервер","web.setup.provider.scan_found_few":"Найдено {count} сервера","web.setup.provider.scan_found_many":"Найдено {count} серверов","web.setup.provider.scan_none":"Локальные серверы не найдены — введите URL вручную.","web.setup.provider.scan_failed":"Сканирование не удалось. Введите URL вручную.","web.setup.provider.required":"Укажите базовый URL.","web.setup.provider.test":"Проверить подключение","web.setup.provider.testing":"Проверка…","web.setup.provider.test_ok":"Сервер отвечает.","web.setup.provider.test_fail":"Не удалось связаться с сервером по этому URL.","web.setup.key.title":"API-ключ","web.setup.key.hint":"Для локальных серверов можно оставить пустым. Хранится только в файле конфигурации и больше не показывается.","web.setup.key.label":"Ключ","web.setup.key.placeholder":"sk-…","web.setup.model.title":"Выберите модель","web.setup.model.hint":"Загрузите список у провайдера или введите имя модели.","web.setup.model.name":"Имя модели","web.setup.model.load":"Загрузить модели","web.setup.model.load_found_one":"Загружена {count} модель","web.setup.model.load_found_few":"Загружено {count} модели","web.setup.model.load_found_many":"Загружено {count} моделей","web.setup.model.load_none":"Модели не получены — введите имя вручную.","web.setup.model.test":"Проверить подключение","web.setup.model.testing":"Проверка…","web.setup.model.test_ok":"Подключение работает.","web.setup.model.test_fail":"Не удалось связаться с моделью.","web.setup.model.required":"Выберите или введите модель.","web.setup.context.title":"Контекст и итерации","web.setup.context.hint":"Должно совпадать с контекстом, который провайдер выделяет этой модели. Нажмите «Определить» либо сверьтесь с LM Studio / Ollama / документацией провайдера.","web.setup.context.contextWindow":"Окно контекста (токены)","web.setup.context.maxToolIterations":"Максимум итераций тулов","web.setup.context.required":"Введите положительное число.","web.setup.context.detect":"Определить у провайдера","web.setup.context.detecting":"Определение…","web.setup.context.detect_ok":"Контекст от провайдера: {count} токенов.","web.setup.context.detect_fail":"Не удалось определить контекст — введите вручную.","web.setup.security.title":"Безопасность","web.setup.security.hint":"Безопасные значения включены; отключайте только нужное. Ничего не блокируется молча — каждый переключатель лишь требует подтверждения перед опасным действием.","web.setup.security.paths":"Ограничить доступ к файлам рабочей папкой","web.setup.security.paths_desc":"Агент читает и пишет только внутри рабочей папки, а перед доступом к .git, .env, ключам и другим чувствительным путям спросит подтверждения.","web.setup.security.bash":"Блокировать опасные shell-команды","web.setup.security.bash_desc":"Блокирует разрушительные команды (rm, sudo, ssh, curl, shutdown, …). Вместо запуска агент спросит подтверждения.","web.setup.security.flags":"Блокировать опасные флаги команд","web.setup.security.flags_desc":"Блокирует рискованные флаги (--force, -rf, …), которые делают безопасные команды опасными. Работает вместе с блокировкой команд.","web.setup.security.configure":"Настроить","web.setup.security.advanced":"Расширенные настройки безопасности","web.setup.security.popup_hint":"По одному элементу в строке. Пустой список = выключено. Изменения применяются только к этой установке; позже их можно править в Настройках → Безопасность.","web.setup.security.popup_done":"Готово","web.setup.security.reset":"Сбросить к значениям по умолчанию","web.setup.security.denied":"Всегда запрещённые пути","web.setup.security.allowed":"Разрешены только эти пути (пусто = все, кроме запрещённых)","web.setup.security.blacklist":"Всегда блокируемые команды","web.setup.security.whitelist":"Разрешены только эти команды (пусто = все, кроме блокируемых)","web.setup.security.log_commands":"Писать каждую выполненную команду в аудит-лог","web.setup.security.dangerous_flags":"Блокируемые флаги команд","web.setup.security.dangerous_operators":"Блокируемые shell-операторы","web.setup.security.network_enabled":"Сетевая защита (блокировать приватные/внутренние адреса)","web.setup.security.denied_domains":"Всегда запрещённые домены","web.setup.security.allowed_domains":"Разрешены только эти домены (пусто = все, кроме запрещённых)","web.setup.security.request_timeout":"Таймаут сетевых запросов (мс)","web.setup.security.max_response_size":"Максимум размера ответа (байты)","web.setup.security.max_recursion":"Максимум глубины рекурсии субагентов","web.setup.security.max_file_ops":"Максимум файловых операций за сессию","web.setup.security.rate_rpm":"Максимум LLM-запросов в минуту","web.setup.security.rate_parallel":"Максимум параллельных задач","web.setup.security.content_scan":"Сканировать содержимое файлов на опасные паттерны","web.setup.security.session_encryption":"Шифровать логи сессий на диске","web.setup.security.audit_enabled":"Отправлять события безопасности в аудит-нотификатор","web.setup.security.audit_severity":"Минимальная severity для уведомления","web.setup.security.audit_events":"Типы событий для уведомления","web.setup.security.audit_retries":"Повторы вебхука","web.setup.security.audit_timeout":"Таймаут вебхука (мс)","web.setup.security.severity.low":"низкая","web.setup.security.severity.medium":"средняя","web.setup.security.severity.high":"высокая","web.setup.security.severity.critical":"критическая","web.setup.review.title":"Проверка","web.setup.review.hint":"Проверьте значения и завершите. Настройки сохранятся в конфиг.","web.setup.review.provider":"Провайдер","web.setup.review.baseUrl":"Базовый URL","web.setup.review.apiKey":"API-ключ","web.setup.review.model":"Модель","web.setup.review.context":"Окно контекста","web.setup.review.iterations":"Максимум итераций","web.setup.review.locale":"Язык","web.setup.review.security":"Безопасность","web.setup.review.security_off":"выключено","web.setup.review.not_needed":"не нужен","web.setup.back":"Назад","web.setup.next":"Далее","web.setup.finish":"Завершить настройку","web.setup.saving":"Сохранение…","web.setup.saved_warning":"Сохранено с предупреждениями: {warning}","web.setup.failed":"Не удалось завершить настройку. Проверьте значения и попробуйте снова.","config.key.provider.fallback":"резервные провайдеры","config.desc.provider.fallback":"Переходить к следующей записи провайдера при сбое активного.","config.key.provider.maxCompletionTokens":"макс. токенов ответа","config.desc.provider.maxCompletionTokens":"Жесткий лимит токенов ответа на запрос (512-128000).","config.key.contextBudget.compactionThreshold":"порог компакции","config.desc.contextBudget.compactionThreshold":"Доля загрузки истории, разрешающая периодическую компакцию (0,05-0,9).","config.key.contextBudget.compactionMinLoad":"мин. загрузка компакции","config.desc.contextBudget.compactionMinLoad":"Минимальная загрузка истории для запуска компакции (0,05-0,9).","config.key.contextBudget.policy":"политика компакции","config.desc.contextBudget.policy":"legacy воспроизводит 2.18.2; v2 добавляет канонический порог, cooldown и гарантию прогресса.","config.key.contextBudget.compactionSummary":"сводка компакции","config.desc.contextBudget.compactionSummary":"ledger (по умолчанию) пинит леджер тулов через компакцию, чтобы модель не переисследовала те же источники; off отключает.","config.key.contextBudget.overflowCooldown":"cooldown переполнения","config.desc.contextBudget.overflowCooldown":"Минимум итераций между компакциями по переполнению (1-20).","config.key.contextBudget.toolResultKeep":"оставлять свежие tool-результаты","config.desc.contextBudget.toolResultKeep":"Сколько последних tool-результатов переживают детерминированную чистку (0-20).","config.key.contextBudget.calibrationWarmup":"прогрев калибровки","config.desc.contextBudget.calibrationWarmup":"Сколько LLM-вызовов обучают оценку токенов до доверия (0-20).","config.key.contextBudget.ratioFloor":"нижний порог калибровки","config.desc.contextBudget.ratioFloor":"Минимальная калиброванная оценка как доля сырой (0,05-0,9).","config.key.instructions.summarize":"суммировать инструкции","config.desc.instructions.summarize":"Суммировать переполненные блоки AGENTS.md/карты проекта вместо обрезки.","config.key.contextLog.enabled":"лог контекста","config.desc.contextLog.enabled":"Писать уходящий в LLM контекст каждой итерации в <session>/context.diff.","config.key.contextLog.redact":"чистить лог контекста","config.desc.contextLog.redact":"Вырезать опознаваемые секреты (токены, ключи) из лога контекста.","config.key.indexer.maxFiles":"лимит файлов индекса","config.desc.indexer.maxFiles":"Кап файлов, попадающих в карту проекта (100-100000).","config.key.indexer.respectGitignore":"учитывать .gitignore","config.desc.indexer.respectGitignore":"Пропускать файлы из .gitignore/.mmaignore при построении карты.","config.key.indexer.mapTokenBudget":"бюджет токенов карты","config.desc.indexer.mapTokenBudget":"Бюджет токенов для PageRank-списка файлов в карте проекта (200-20000).","config.key.lsp.enabled":"LSP","config.desc.lsp.enabled":"Запускать языковые серверы после записи файлов и через тул lsp_check.","config.key.lsp.offline":"офлайн-режим LSP","config.desc.lsp.offline":"Не использовать npx; только глобально установленные языковые серверы. Env MMA_LSP_OFFLINE переопределяет.","config.key.reasoning.min":"мин. рассуждения","config.desc.reasoning.min":"Нижняя граница диапазона усилий рассуждений.","config.key.reasoning.max":"макс. рассуждения","config.desc.reasoning.max":"Верхняя граница диапазона усилий рассуждений.","config.key.reasoning.baseline":"базовые рассуждения","config.desc.reasoning.baseline":"Усилия рассуждений по умолчанию, если модель не дала сигнала.","config.key.reasoning.overrideCooldown":"кулдаун переопределения","config.desc.reasoning.overrideCooldown":"Ходов до повторного принятия переопределения рассуждений (1-60).","config.key.autoPlan":"автоплан","config.desc.autoPlan":"Позволять агенту автоматически строить план для многошаговых задач.","config.key.execution.autoAdvance":"авто-завершение шагов плана","config.desc.execution.autoAdvance":"Автоматически закрывать шаг плана при наличии его деливераблов. Выкл: модель закрывает шаги сама.","config.key.tools.enableOnDemand":"тулы по требованию","config.desc.tools.enableOnDemand":"Подгружать узкие группы тулов по требованию вместо показа всех.","config.key.tools.grepEngine":"движок grep","config.desc.tools.grepEngine":"auto (rg → grep → встроенный JS) или принудительно rg/grep/js.","config.key.session.autoSave":"автосохранение сессии","config.desc.session.autoSave":"Сохранять лог сессии после каждого хода.","config.key.session.maxSessions":"макс. сессий","config.desc.session.maxSessions":"Сколько последних сессий хранить на диске (1-500).","config.key.session.isolateMemory":"изолировать память сессии","config.desc.session.isolateMemory":"Держать память сессии отдельно от глобальной.","config.key.session.autoName":"автоназвания сессий","config.desc.session.autoName":"Выводить имя сессии из первого сообщения (уточняется LLM).","config.key.sessionIsolation.enabled":"изоляция сессий","config.desc.sessionIsolation.enabled":"Главный выключатель изоляции сессий (плагины, временные файлы).","config.key.sessionIsolation.isolatePlugins":"изолировать плагины","config.desc.sessionIsolation.isolatePlugins":"Выдавать каждой сессии собственную песочницу плагинов.","config.key.sessionIsolation.isolateTempFiles":"изолировать временные файлы","config.desc.sessionIsolation.isolateTempFiles":"Выдавать каждой сессии отдельную папку временных файлов.","config.key.ui.spinner":"спиннер","config.desc.ui.spinner":"Показывать анимированный спиннер во время работы тулов.","config.key.ui.activityRail":"рейка активности","config.desc.ui.activityRail":"Индикатор над строкой ввода, пока агент работает.","config.key.ui.showContextStats":"статистика контекста","config.desc.ui.showContextStats":"Показывать статистику использования контекста после каждого хода.","config.key.ui.showCompaction":"уведомление о компакции","config.desc.ui.showCompaction":"Сообщать в чате о запуске компакции истории.","config.key.ui.fontSize":"размер шрифта","config.desc.ui.fontSize":"Размер шрифта веб-чата (только веб, на терминал не влияет).","config.key.retry.maxRetries":"макс. повторов","config.desc.retry.maxRetries":"Максимум повторов упавших LLM-запросов (0-10).","config.key.retry.baseDelay":"базовая задержка повтора","config.desc.retry.baseDelay":"Базовая задержка между повторами в мс (0-60000).","config.key.retry.maxDelay":"макс. задержка повтора","config.desc.retry.maxDelay":"Потолок задержки между повторами в мс (0-300000).","config.key.retry.maxStreamRetries":"макс. повторов стрима","config.desc.retry.maxStreamRetries":"Максимум повторов зависших или прерванных стримов (0-10).","config.key.retry.noDataTimeoutMs":"таймаут застоя стрима (мс)","config.desc.retry.noDataTimeoutMs":"Сдаваться, если стрим молчит дольше этого времени, в мс (1000-600000).","config.key.pricing.enabled":"учет стоимости","config.desc.pricing.enabled":"Считать токены и примерную стоимость по сессиям.","config.key.updater.enabled":"автообновление","config.desc.updater.enabled":"Главный выключатель фоновой проверки обновлений.","config.key.updater.checkOnStart":"проверка при старте","config.desc.updater.checkOnStart":"Проверять обновления при старте агента.","config.key.updater.autoInstall":"автоустановка обновлений","config.desc.updater.autoInstall":"Устанавливать скачанные обновления без спроса.","config.key.updater.intervalMs":"интервал проверки (мс)","config.desc.updater.intervalMs":"Минимальный интервал между проверками, в мс (0-86400000).","config.key.skills.budget":"доля бюджета скиллов","config.desc.skills.budget":"Доля системного бюджета под определения скиллов (0,05-0,9).","config.key.hallucination.judge.enabled":"судья галлюцинаций","config.desc.hallucination.judge.enabled":"Оценивать уверенность ответа и помечать вероятные галлюцинации.","config.key.subagent.resultMode":"режим результата субагентов","config.desc.subagent.resultMode":"Как возвращать результаты субагентов: текстом или через файл.","config.key.subagent.maxSummaryChars":"лимит сводки субагента","config.desc.subagent.maxSummaryChars":"Максимум символов сводки субагента (100-50000).","config.key.subagent.maxParallelChunkQueries":"параллельные чанки субагента","config.desc.subagent.maxParallelChunkQueries":"Максимум параллельных запросов чанков за волну субагента (1-16).","config.key.subagent.timeoutMs":"таймаут субагента (мс)","config.desc.subagent.timeoutMs":"Таймаут выполнения субагента в миллисекундах (10000-1800000).","config.key.subagent.stableSystemPrompt":"стабильный промпт субагента","config.desc.subagent.stableSystemPrompt":"Переиспользовать один замороженный системный промпт для всех субагентов прогона.","config.key.modelLoad.autoLoad":"автозагрузка модели","config.desc.modelLoad.autoLoad":"Автоматически загружать модель в бэкенд при старте.","config.key.modelLoad.flashAttention":"flash attention","config.desc.modelLoad.flashAttention":"Включать flash-attention ядра при загрузке модели.","config.key.modelLoad.offloadKvCacheToGpu":"выгружать KV-кэш в GPU","config.desc.modelLoad.offloadKvCacheToGpu":"Держать KV-кэш в памяти GPU при загрузке модели.","config.key.modelLoad.evalBatchSize":"размер eval-батча","config.desc.modelLoad.evalBatchSize":"Размер батча оценки промпта при загрузке (1-4096).","config.key.webSearch.enabled":"веб-поиск","config.desc.webSearch.enabled":"Разрешить агенту искать в интернете.","config.key.errorWebSearch.enabled":"поиск при ошибке","config.desc.errorWebSearch.enabled":"Автоматически искать в интернете при ошибке, похожей на гуглящуюся.","config.key.errorWebSearch.threshold":"порог поиска ошибок","config.desc.errorWebSearch.threshold":"Сколько совпадающих ошибок запускает поиск (1-20).","config.key.errorWebSearch.maxResults":"результатов поиска ошибок","config.desc.errorWebSearch.maxResults":"Максимум результатов поиска на запрос об ошибке (1-20).","config.key.errorWebSearch.maxQueryChars":"лимит запроса ошибки","config.desc.errorWebSearch.maxQueryChars":"Максимум символов текста ошибки на запрос (50-2000).","config.key.errorWebSearch.maxSearchesPerSession":"поисков ошибок за сессию","config.desc.errorWebSearch.maxSearchesPerSession":"Максимум автопоисков ошибок за сессию (0-20).","config.key.errorWebSearch.requestTimeoutMs":"таймаут поиска ошибок (мс)","config.desc.errorWebSearch.requestTimeoutMs":"Таймаут одного автопоиска ошибки, в мс (1000-120000).","config.key.browser.enabled":"тул браузера","config.desc.browser.enabled":"Разрешить агенту управлять браузером.","config.key.browser.headless":"безголовый браузер","config.desc.browser.headless":"Запускать браузер без видимого окна.","config.key.browser.maxElements":"макс. элементов страницы","config.desc.browser.maxElements":"Максимум элементов accessibility-дерева на снимок (1-200).","config.key.browser.maxContentChars":"макс. содержимого страницы","config.desc.browser.maxContentChars":"Максимум символов содержимого страницы на снимок (100-50000).","config.key.browser.maxConsoleEntries":"макс. записей консоли","config.desc.browser.maxConsoleEntries":"Максимум записей консоли браузера на снимок (1-200).","config.key.browser.maxConsoleLineChars":"макс. строки консоли","config.desc.browser.maxConsoleLineChars":"Максимум символов на строку консоли (50-5000).","config.key.browser.viewportWidth":"ширина вьюпорта","config.desc.browser.viewportWidth":"Ширина вьюпорта браузера в px (320-4096).","config.key.browser.viewportHeight":"высота вьюпорта","config.desc.browser.viewportHeight":"Высота вьюпорта браузера в px (200-2160).","config.key.browser.navigationTimeout":"таймаут навигации (мс)","config.desc.browser.navigationTimeout":"Таймаут одной навигации страницы, в мс (1000-120000).","config.key.security.maxRecursionDepth":"макс. глубина рекурсии","config.desc.security.maxRecursionDepth":"Макс. глубина вложенных вызовов тулов до отказа (0-20).","config.key.security.maxFileOperations":"макс. файловых операций","config.desc.security.maxFileOperations":"Максимум файловых операций за ход до отказа (0-10000).","config.key.security.rateLimits.maxRequestsPerMinute":"макс. запросов в минуту","config.desc.security.rateLimits.maxRequestsPerMinute":"Лимит LLM-запросов в минуту (1-1000).","config.key.security.rateLimits.maxParallelTasks":"макс. параллельных задач","config.desc.security.rateLimits.maxParallelTasks":"Лимит параллельных подзадач (1-50).","config.key.tools.defaultTags":"теги тулов по умолчанию","config.desc.tools.defaultTags":"Группы тулов, всегда загружаемые без gating по требованию.","config.key.security.bash.enabled":"проверка bash-команд","config.desc.security.bash.enabled":"Главный выключатель проверки bash-команд.","config.key.security.bash.blockDangerousFlags":"блокировать опасные флаги","config.desc.security.bash.blockDangerousFlags":"Отклонять рискованные флаги shell (например --force) в bash-туле.","config.key.security.network.enabled":"сетевые запросы","config.desc.security.network.enabled":"Главный выключатель проверок исходящих сетевых запросов (защита от SSRF).","config.key.security.bash.blacklist":"черный список bash","config.desc.security.bash.blacklist":"Команды, всегда блокируемые в bash-туле (список).","config.key.security.bash.whitelist":"белый список bash","config.desc.security.bash.whitelist":"Команды, всегда разрешенные в bash-туле (список).","config.key.security.bash.dangerousFlags":"опасные флаги","config.desc.security.bash.dangerousFlags":"Флаги команд, считающиеся опасными (список).","config.key.security.bash.dangerousOperators":"опасные операторы","config.desc.security.bash.dangerousOperators":"Шелл-операторы, считающиеся опасными (список).","config.key.security.paths.denied":"запрещенные пути","config.desc.security.paths.denied":"Пути, всегда закрытые для файловых тулов (список).","config.key.security.paths.allowed":"разрешенные пути","config.desc.security.paths.allowed":"Дополнительные пути, разрешенные вне workspace (список).","config.key.security.network.deniedDomains":"запрещенные домены","config.desc.security.network.deniedDomains":"Домены, к которым агенту нельзя обращаться (список).","config.key.security.network.allowedDomains":"разрешенные домены","config.desc.security.network.allowedDomains":"Домены, к которым можно обращаться (список; пусто - любые).","config.key.security.network.requestTimeout":"сетевой таймаут (мс)","config.desc.security.network.requestTimeout":"Таймаут одного исходящего запроса тула, в мс (1000-120000).","config.key.security.network.maxResponseSize":"макс. размер ответа","config.desc.security.network.maxResponseSize":"Максимум байт исходящего ответа (1024-1000000).","config.key.security.contentScan.dangerousPatterns":"опасные паттерны","config.desc.security.contentScan.dangerousPatterns":"Регулярные выражения, которые ищутся в содержимом файлов перед записью.","config.key.security.auditNotifier.enabled":"аудит-уведомитель","config.desc.security.auditNotifier.enabled":"Отправлять события аудита безопасности в файл или вебхук.","config.key.security.auditNotifier.filePath":"путь аудит-лога","config.desc.security.auditNotifier.filePath":"Файл, в который дописываются события аудита.","config.key.security.auditNotifier.webhookUrl":"URL аудит-вебхука","config.desc.security.auditNotifier.webhookUrl":"Вебхук, на который отправляются события аудита.","config.key.security.auditNotifier.webhookTimeout":"таймаут аудит-вебхука (мс)","config.desc.security.auditNotifier.webhookTimeout":"Таймаут одной отправки вебхука, в мс (1000-60000).","config.key.security.auditNotifier.minSeverity":"мин. серьезность аудита","config.desc.security.auditNotifier.minSeverity":"Низшая серьезность, при которой еще уведомлять (low/medium/high/critical).","config.key.security.auditNotifier.eventTypes":"типы событий аудита","config.desc.security.auditNotifier.eventTypes":"Какие типы событий аудита уведомляют; ничего не выбрано - все.","config.key.security.auditNotifier.maxRetries":"макс. повторов аудита","config.desc.security.auditNotifier.maxRetries":"Повторов одной упавшей отправки уведомления (0-10).","config.key.security.sessionEncryption.keyPath":"путь ключа шифрования","config.desc.security.sessionEncryption.keyPath":"Файл с ключом шифрования сессий.","config.key.security.sessionEncryption.encryptHistory":"шифровать историю чата","config.desc.security.sessionEncryption.encryptHistory":"Шифровать сохраненную историю чата на диске.","config.key.security.sessionEncryption.encryptSessionLog":"шифровать лог сессии","config.desc.security.sessionEncryption.encryptSessionLog":"Шифровать сохраненный лог session.jsonl на диске.","config.key.pricing.overrides":"переопределения цен","config.desc.pricing.overrides":"По-модельная таблица цен поверх встроенной.","config.key.modelCapabilities":"возможности моделей","config.desc.modelCapabilities":"Ручные переопределения vision/tools по id модели.","config.key.experts":"эксперты MoE","config.desc.experts":"Состав экспертов для MoE-оркестратора.","config.enum.text":"текст","config.enum.file":"файл","config.enum.critical":"критический"}
|
|
1
|
+
{"file.created":"Создан {path}","file.deleted":"Удалён {path}","file.updated":"Обновлён {path}","file.written":"Записан {path}","file.syntax_error":"Синтаксическая ошибка в {path}:\n{error}\n\nФайл НЕ записан. Исправьте синтаксическую ошибку и попробуйте снова.","file.notfound":"Файл не найден: {path}\nЭто НЕ значит, что проект отсутствует — возможно, путь неверный. Выполни list_dir по рабочей директории; создавай файлы только после проверки того, что уже есть.","file.dir_notfound":"Каталог не найден: {path}\nЭто НЕ значит, что проект отсутствует — возможно, путь неверный. Выполни list_dir по рабочей директории (и родителю этого пути), чтобы найти реальное расположение, прежде что-то создавать.","file.path_not_allowed":"Путь недопустим: {path}","file.path_not_allowed_short":"Путь недопустим","file.is_directory":"Это каталог, используйте rmdir: {path}","file.replaced_in":"Заменено в {path}","file.string_not_found":"Строка не найдена в файле:\n{str}\n\nИспользуй read_file для {path}, чтобы увидеть текущее содержимое файла перед редактированием — искомая строка может отличаться (пробелы, переводы строк) или уже была заменена.","file.edit_args_invalid":"edit_file требует строковые аргументы \"old\" и \"new\". Получено: old={oldType}, new={newType}.","file.read_failed":"Не удалось прочитать {path}: {error}","file.write_failed":"Не удалось записать {path}: {error}","file.protected_path_ask":"Защищённый путь \"{path}\" (совпадает с {pattern}). НЕ изменяй его. Спроси у пользователя явного подтверждения и дождись ответа — не обходи это ограничение.","file.moved":"Перемещён {from} → {to}","file.not_found_short":"Не найдено: {path}","file.empty":"(пусто)","file.no_matches":"Нет совпадений","file.truncated":"\n... (обрезано)","file.read_header":"── {path} ({ext}, {total} строк, строки {from}-{to})","file.read_range":"строки {from}-{to} из {total}","file.read_truncated":"\n\n[Обрезано: ещё {remaining} строк. Продолжите чтение через read_file с offset={next}]","file.empty_page":"(пустая страница)","error.timeout":"Таймаут запроса","error.unknown":"Неизвестная ошибка","error.notfound":"Не найдено: {path}","error.prefix":"Ошибка: ","error.command_error":"Ошибка команды: {message}","error.llm":"Ошибка LLM: {message}","error.response_blocked":"Ответ заблокирован: {reason}","error.max_iters":"Достигнут максимум итераций ({max})","error.empty_response":"Модель вернула пустой ответ после повторных попыток","error.audit_failed":"Задача не может быть подтверждена как выполненная: {summary}","error.retry_loop_stopped":"Остановлено после {count} провальных пакетов тулов подряд — агент крутил повторы падающего действия вместо завершения","error.readonly_loop_stopped":"Остановлено после {count} шагов подряд только чтения/поиска — агент читал вместо того, чтобы ответить или сделать изменение","error.grep_failed":"Ошибка grep: {message}","error.grep_no_engine":"Движок grep \"{engine}\" недоступен: бинаря нет в PATH. Поставь tools.grepEngine=auto или js, либо используй read_file/list_dir.","error.search_failed":"Ошибка поиска: {message}","error.fetch_failed":"Ошибка загрузки: {message}","error.fetch_url_failed":"Не удалось загрузить {url}: {message}","error.http":"HTTP {status}: {statusText}","error.llm_api":"Ошибка LLM API {status} ({statusText}): {errorText}","error.llm_retries":"Запрос LLM не удался после повторов","error.llm_429":"Превышен лимит запросов (HTTP 429) для {model} на {baseUrl}. Провайдер ограничивает трафик — особенно строгие free-модели. Получите API-ключ или переключитесь на платную/быструю модель: {baseUrl}","error.no_response_body":"Нет потока тела ответа","error.llm_stream_idle":"Поток LLM завис — нет данных {timeout}мс. Если провайдер буферизирует стрим (например, LM Studio) или генерирует очень длинные tool calls, увеличьте \"retry.noDataTimeoutMs\" в ~/.mma/config.json (нужен рестарт)","error.llm_stream_idle_toolcall":"Поток LLM завис после начала tool_call — нет данных {timeout}мс. Скорее всего провайдер буферизирует SSE вместо потоковой передачи аргументов tool_call (наблюдается в LM Studio). Увеличьте \"retry.noDataTimeoutMs\" в ~/.mma/config.json (нужен рестарт)","error.llm_truncated":"Ответ упёрся в лимит токенов генерации ({tokens}) и был обрезан до какого-либо содержимого. Разбейте задачу на меньшие порции вывода или увеличьте \"maxCompletionTokens\" в конфиге","error.llm_truncated_toolcall":"Ответ упёрся в лимит токенов генерации ({tokens}) посреди tool_call — его аргументы обрезаны. Пишите файл частями (несколько вызовов write_file/edit_file) или увеличьте \"maxCompletionTokens\" в конфиге","error.llm_output_truncated":"Ответ упёрся в лимит токенов генерации ({tokens}) и был обрезан — этот ответ неполный. Увеличьте \"maxCompletionTokens\" в конфиге, чтобы разрешить длинные ответы","error.llm_provider_stream_error":"Провайдер вернул ошибку посреди стрима: {error}","error.llm_timeout":"Время запроса LLM истекло ({timeout}мс)","error.context_log_init":"Context log включён, но не удалось инициализировать: {error}. Diff контекста писаться не будет.","error.provider_build":"Не удалось собрать провайдера \"{name}\": {error}","env.runtime_node":"Запущено под Node (v{version}) — вставка изображений из буфера и LSP на Windows работают урезанно. Установите Bun (https://bun.sh) для полного функционала.","env.runtime_old":"Версия рантайма {version} ниже требуемой engines {engine}.","env.tool_missing":"Инструмент не найден в PATH: {tool}","env.playwright_missing":"Пакет Playwright не установлен — браузерный инструмент не будет работать. Установите: bun add playwright","env.playwright_browsers_missing":"Браузеры Playwright не скачаны ({dir}). Браузерный инструмент не будет работать. Установите: bunx playwright install chromium","env.crash_stderr":"MMA упал ({type}): {message} — отчёт о падении записан в ~/.mma/logs/crash.jsonl","env.model_autoload_failed":"Не удалось автоматически загрузить модель: {error}. Продолжаю с ручной загрузкой.","env.model_loaded":"Модель {model} загружена за {seconds}с","env.reasoning_probe":"Проверка reasoning: стратегия={strategy} → {result}","env.reasoning_respected":"механизм соблюдается","env.reasoning_ignored":"механизм ИГНОРИРУЕТСЯ","env.indexing":"Индексация файлов проекта…","env.indexed":"Проиндексировано файлов: {files} (карта проекта)","env.indexing_failed":"Ошибка индексации проекта: {error}","env.index_skip_unreadable":"индексатор: пропускаю недоступный файл \"{path}\"","env.killed_processes":"Остановлено фоновых процессов при завершении: {count}","session.started":"Сессия начата: {id}","session.ended":"Сессия завершена: {id}","session.not_found":"Сессия не найдена: {id}","session.no_active":"Нет активной сессии","session.deleted":"Сессия удалена: {id}","session.pruned":"Удалено пустых сессий: {n}","session.prune_dry":"Будет удалено пустых сессий: {n}","session.prune_empty":"Пустых сессий нет","session.renamed":"Сессия переименована в: {name}","session.created":"Создана сессия: {name}","session.resumed":"Возобновлена сессия: {name}","session.chat_cleared":"Чат очищен. Начните вводить.","session.chat_loaded":"История чата загружена. Продолжите с места остановки.","session.chat_history":"История чата:","session.user_label":"Пользователь","session.assistant_label":"Ассистент","session.no_history":"История чата пуста","session.no_sessions":"Сессии не найдены","session.no_sessions_hint":"Сессии не найдены. Создайте одну командой /new <имя>","session.available":"Доступные сессии:","session.no_match":"Нет сессии подходящей по \"{query}\"","session.default_name":"Сессия {date}","session.auto_named":"Сессия названа: {name}","session.info_full":"[Сессия: \"{name}\" ({id}) | модель: {model} | контекст: {contextWindow} токенов]","session.col_active":"","session.col_id":"ID","session.col_name":"Имя","session.col_updated":"Обновлена","session.col_msgs":"Сообщ.","tool.executed":"Выполнен {name}","tool.failed":"Инструмент {name} упал: {error}","tool.unknown":"Неизвестный инструмент: {name}","tool.not_allowed":"Инструмент недоступен в этом режиме: {name}","tool.blocked":"Заблокировано плагином: {plugin}","tool.ui.security_blocked":"Заблокировано политикой безопасности","tool.ui.protected_path":"Защищённый путь — нужно подтверждение","tool.blocked_reason":"Заблокировано плагином: {plugin}. Причина: {reason}","tool.using":"[{label}]","tool.friendly.write_file":"Запись файла","tool.friendly.read_file":"Чтение файла","tool.friendly.edit_file":"Редактирование файла","tool.friendly.create_dir":"Создание папки","tool.friendly.delete_file":"Удаление файла","tool.friendly.move_file":"Перемещение файла","tool.friendly.list_dir":"Список файлов","tool.friendly.file_info":"Информация о файле","tool.friendly.glob":"Поиск файлов","tool.friendly.grep":"Поиск по содержимому","tool.friendly.bash":"Выполнение команды","tool.friendly.load_skill":"Загрузка скилла","tool.friendly.plan":"Планирование","tool.friendly.todo":"Обновление задач","tool.friendly.verify":"Проверка","tool.friendly.web_search":"Поиск в интернете","tool.friendly.web_fetch":"Загрузка страницы","tool.friendly.web_browse":"Просмотр страницы","tool.friendly.download_file":"Скачивание файла","tool.friendly.chunk_query":"Запрос чанков","tool.web_fetch_result":"Загружена страница: {url} — {chars} симв., {lines} строк{truncated}","tool.web_fetch_no_content":"Нет читаемого содержимого на {url} — страница требует JavaScript или это защита от ботов. Используй тул \"browser\" или другой источник.","tool.web_browse_result":"Просмотрена страница: {url} — {chars} симв., {lines} строк{truncated}","tool.web_search_result":"Результаты поиска \"{query}\" — {count} результатов","tool.downloaded":"Скачано {url} → {path} ({size} байт, {type})","tool.download_too_large":"Скачивание заблокировано: файл превышает лимит {max} байт","tool.friendly.browser":"Браузер","tool.friendly.subagent":"Задача подагенту","tool.friendly.question":"Вопрос пользователю","tool.friendly.approve":"Запрос подтверждения","tool.friendly.search_history":"Поиск в истории","tool.friendly.pipeline_run":"Запуск пайплайна","tool.friendly.mcp_call":"MCP вызов","tool.friendly.lsp_check":"Проверка кода","tool.friendly.meet_done":"Знакомство завершено","tool.truncated":"[Обрезано: удалено {tokens} токенов]","critic.repair":"Верификатор отметил критичные проблемы; исправь их до завершения:\n{issues}\nСводка: {summary}","critic.advice":"Верификатор отметил проблемы, которые стоит проверить до завершения:\n{issues}","critic.repeat":"Верификатор повторяет уже отмеченную проблему — не выдавай тот же ответ снова. Смени подход или заверши честно, если жалоба неприменима:\n{issues}","tool.subagent_queued":"Задача подагенту добавлена: {task}","tool.subagent_artifact":"Суб-агент завершён. Полный результат сохранён в артефакт: {path}\nИтераций: {iterations}\nСводка:\n{summary}","tool.pipeline_started":"Пайплайн \"{name}\" запущен. Движок пайплайнов — заглушка, задача отправлена.","tool.mcp_call":"MCP вызов: {server}/{tool} с {args}","tool.action_required":"Требуется действие.","tool.approve_prompt":"Одобрить? {action}","tool.approve_yes":"Да","tool.approve_yes_desc":"Одобрить действие","tool.approve_no":"Нет","tool.approve_no_desc":"Отклонить действие","tool.approved":"Одобрено","tool.rejected":"Отклонено пользователем","tool.user_input.custom_option":"Свой вариант","tool.user_input.choice_single":"> Ваш выбор (1-{max}): ","tool.user_input.choice_multiple":"> Ваш выбор (через запятую, напр. 1,3): ","tool.user_input.invalid":"Неверный выбор, попробуйте ещё раз.","tool.user_input.custom_prompt":"Ваш ответ: ","tool.question.progress":"Вопрос {current}/{total}","tool.question.no_questions":"Вопросы не указаны","tool.question.unanswered":"Без ответа","tool.question.answered":"Пользователь ответил на ваши вопросы: {formatted}. Теперь продолжайте с учётом ответов.","tool.question.memory_only":"Память уже отвечает на эти вопросы — они НЕ задавались. НЕ вызывайте question для них снова: продолжайте работу, приняв значения из памяти, и кратко скажите пользователю, что взяли из памяти.","tool.question.memory_known":"Память уже отвечает: {formatted}. Эти вопросы НЕ задавались — не переспрашивайте их. Продолжайте с этими значениями; если пользователь поправит — обновите ответ, но вызов question не повторяйте.","tool.question.memory_repeat":"Повтор: эта тема уже закрыта памятью выше. Не вызывайте question снова — продолжайте с уже известным значением.","tool.question.session_only":"Ответы живут только в этой сессии — ничего не пишите через remember без явной просьбы пользователя.","tool.question.batch_truncated":"Заданы первые {shown} из {total} неизвестных вопросов — вызовите тул ещё раз для остальных.","tool.name_or_task":"Укажите параметр \"name\" или \"task\"","tool.chunk_query_no_query":"chunk_query: требуется строка запроса.","tool.chunk_query_no_input":"chunk_query: укажите input_path или text.","tool.chunk_query_no_provider":"chunk_query: в контексте нет LLM-провайдера.","tool.chunk_query_path_not_allowed":"[SCOPE] {reason}","tool.chunk_query_read_failed":"Не удалось прочитать {path}: {error}","tool.subagent_cannot_run":"Субагент не может запуститься: в контексте нет LLM-провайдера или исполнителя тулов.","tool.subagent_failed":"Субагент упал: {error}\nЧастичный вывод: {text}","tool.subagent_completed":"Субагент завершил работу:\n{text}\n\nИтераций: {iterations}","tool.subagent_error":"Ошибка субагента: {error}","tool.pipeline_cannot_run":"Пайплайн не может запуститься: в контексте нет LLM-провайдера или исполнителя тулов.","tool.pipeline_failed":"Пайплайн \"{name}\" упал. Выполнено шагов: {done}/{total}.\n{logs}","tool.pipeline_completed":"Пайплайн \"{name}\" успешно завершён (шагов: {steps}).\n{logs}","tool.pipeline_error":"Ошибка пайплайна: {error}","tool.mcp_server_not_found":"MCP-сервер \"{server}\" не найден. Доступны: {available}","tool.mcp_call_failed":"Вызов MCP не удался: {error}","tool.meet_done":"Интервью отмечено завершённым.","tool.invalid_params":"Неверные параметры","tool.skill_budget":"Скилл \"{name}\" загружен ({tokens} токенов, осталось {remaining} в бюджете скиллов). Контент скилла теперь в системном промпте — перезагрузка после компрессии не нужна.","tool.skill_available_hint":"Доступные скиллы","tool.skill_did_you_mean":"Возможно, вы имели в виду","tool.no_results":"Нет результатов по \"{query}\"","tool.search_results":"Результаты поиска \"{query}\":\n{results}","tool.web_search_disabled":"Веб-поиск отключён (webSearch.enabled: false). Используй только файловые и системные инструменты.","tool.history_results":"Результаты истории \"{query}\":\n{results}","tool.no_history":"Нет записей истории по \"{query}\"","tool.no_sessions_dir":"Каталог сессий не найден по {dir}","tool.history_error":"Ошибка поиска истории: {error}","tool.memory_error":"Ошибка памяти: {error}","tool.screenshot_unavailable":"[Скриншот сделан — изображение недоступно для текстовой модели]","tool.timeout":"Инструмент {name} превысил таймаут ({seconds} сек)","tool.aborted":"Инструмент {name} прерван пользователем","tool.interactive_disabled":"Интерактивный инструмент отключён в режиме exit-on-complete. Продолжай без вопроса пользователю.","proc.started":"Фоновый процесс запущен: {id} (PID {pid}).\nКоманда: {command}","proc.promoted_hint":"Команда всё ещё выполняется через {ms} мс — переведена в фоновый режим","proc.manage_hint":"Проверить вывод: process_log id={id}. Дождаться завершения: process_wait id={id}. Остановить: process_kill id={id}. Список всех: process_list.","proc.output_preview":"Первые строки вывода:\n{lines}","proc.none":"Фоновых процессов нет.","proc.not_found":"Процесс не найден: {id}","proc.missing_id":"Укажите id процесса: process_kill id=proc_xxx (id возвращается bash при уходе команды в фон или выводится через process_list).","proc.missing_id_list":"Сейчас фоновых процессов нет.","proc.killed":"Процесс {id} (PID {pid}) остановлен.","proc.kill_failed":"Не удалось остановить процесс {id}","proc.list_header":"Фоновые процессы","proc.log_header":"Вывод процесса {id} ({status}):","proc.log_empty":"(вывода пока нет)","proc.hint":"Управление: {list}, {log}, {kill}.","proc.status_running":"работает","proc.status_exited":"завершён","proc.status_killed":"остановлен","proc.wait_exited":"Процесс {id} {status} за {ms} мс с кодом {code}.","proc.wait_running":"Процесс {id} всё ещё работает (ждали {ms} мс).","proc.wait_hint":"Подождать ещё: process_wait id={id}. Проверить вывод: process_log id={id}. Остановить: process_kill id={id}.","tool.friendly.process_list":"Список фоновых процессов","tool.friendly.process_log":"Вывод процесса","tool.friendly.process_kill":"Остановка процесса","tool.friendly.process_wait":"Ожидание процесса","plan.no_steps":"Не указаны шаги плана. Укажите конкретные шаги с файлами и командами.","plan.created":"План создан: {title} ({steps} шагов)","plan.coverage_blocked":"План не покрывает файлы из постановки: {missing}. Добавь шаги с точными путями этих файлов и проверками, затем вызови plan create снова.","plan.checks_required":"Каждому шагу нужен контракт проверки: передай checks 1:1 к steps — по одному на шаг: \"file-exists:<путь>\" (проверяется автоматически), \"command:<команда>\" (запусти перед done) или \"manual:<что проверить глазами>\" (только UI/визуал).","plan.checks_not_array":"checks должен быть массивом строк проверок 1:1 к шагам","plan.checks_mismatch":"checks должны идти 1:1 к steps: получено {actual} проверок на {expected} шагов. Пример: steps [\"Создать src/a.ts\"] + checks [\"file-exists:src/a.ts\"]. Не передавай checks — тогда каждый шаг самоподтвердится.","plan.checks_invalid":"Недопустимые проверки: {kinds}. Каждая должна начинаться с \"file-exists:\", \"command:\" или \"manual:\".","plan.check_failed":"Нельзя отметить шаг {step} выполненным: его проверка не прошла — {check}. Сначала выполни проверку (создай файл / запусти команду), затем отмечай done.","plan.check_self_certified":"проверка подтверждена: {check} — выполнено перед done.","plan.step_done":"Шаг {n}/{total}: {description} ✓","plan.complete":"Задача выполнена: {summary}","plan.title_steps":"План \"{title}\" создан с {count} шагами","plan.step_marked":"Шаг {step} отмечен как {status}","plan.aborted":"План отменён","plan.completed_archived":"План {id} завершён ({done}/{total} шагов) — архивирован. Для новой задачи создай новый план (plan create) или дай финальный ответ.","plan.unknown_action":"Неизвестное действие плана: {action}","plan.updated":"План обновлён: {title} ({steps} шагов)","plan.acknowledged":"План {action}: принято","plan.step_status":"Шаг {step}: {status}","plan.no_active":"Нет активного плана","plan.no_active_with_last":"Нет активного плана. Последний завершённый: {id} \"{title}\" ({done}/{total} шагов). Продолжи новым планом (action=create) или заверши ответ.","plan.step_not_found":"Шаг не найден","plan.step_required":"Укажи номер шага: plan_step step=N status=done|failed|skipped.","plan.bad_status":"Недопустимый статус «{status}». Используйте один из: {allowed}.","plan.step_already_done":"Шаг {step} уже выполнен — ничего делать не нужно. Прогресс плана:","plan.order_blocked":"Нельзя отметить шаг {step} выполненным: шаг {first} («{desc}») ещё не завершён. Сначала завершите предыдущие шаги или отметьте шаг {first} status=skipped, если он не нужен.","plan.deliverables_missing":"Нельзя отметить шаг {step} выполненным: указанные в нём файлы ещё не существуют: {files}. Сначала создайте эти файлы (или отметьте шаг status=skipped, если они на самом деле не нужны).","plan.kinds_mismatch":"Длина kinds должна совпадать с числом шагов","plan.kinds_invalid":"Недопустимый kind шага: {kinds}. Используй \"create\" или \"delete\".","plan.kinds_not_array":"kinds должен быть массивом значений \"create\" или \"delete\"","plan.deliverables_remain":"Нельзя пометить шаг {step} как выполненный: указанные файлы всё ещё существуют: {files}. Шаг имеет kind=delete — сначала удали их (или поставь status=skipped, если они должны остаться).","plan.typecheck_failed":"Нельзя отметить шаг {step} выполненным: последняя проверка всё ещё сообщает об ошибке компиляции:\n{error}\nИсправь ошибку и снова отредактируй файл (чистая запись снимает блокировку), либо отметь шаг status=skipped, если он не нужен.","plan.show_header":"Статус плана:","plan.show_empty":"(в плане нет шагов)","plan.list_header":"Планы:","plan.list_empty":"Нет планов","plan.switch_no_id":"Укажите id плана для переключения","plan.not_found":"План не найден: {id}","plan.switched":"Переключено на план {id}: {title}","plan.replanned":"План перепланирован: {kept} выполненных шагов сохранено, {steps} новых шагов добавлено","plan.replan_no_steps":"Укажите новые шаги для перепланирования","plan.active_in_progress":"Нельзя создать новый план: активный план {id} уже имеет прогресс ({done}/{total} выполнено, текущий: шаг {current}). Продолжай его — вызови \"plan show\", чтобы увидеть, и продолжай работу. Чтобы заменить план, сначала вызови \"plan abort\", затем \"plan create\".","plan.id_ignored":"примечание: id плана генерируется автоматически; используй \"plan switch\", чтобы активировать существующий план по id.","plan.existing_fresh":"примечание: предыдущий активный план не имел прогресса и сохранён как черновик.","plan.already_active":"План {id} уже активен — переключаться некуда.","plan.already_archived":"План {id} уже в архиве — отменять нечего.","plan.aborted_id":"План {id} отменён и архивирован.","plan.delete_no_id":"Укажите id плана для удаления (plan delete id=plan_xxx).","plan.deleted":"План {id} удалён окончательно.","plan.purged":"Удалено планов: {count}. Хранилище планов пусто.","plan.no_deliverables":"примечание: шаг {step} не называет файлов — проверь результат способом, подходящим задаче (для кода: сборка/тесты/линт; для исследования/совета: перепроверь ответ, НЕ создавай файлы ради деливераблов).","plan.bulk_update_rejected":"Массовая перезапись steps[] через action=update не поддерживается: она бы стёрла статусы всех шагов. Используй \"re-plan\" (сохраняет завершённые шаги, заменяет остальные) или отмечай шаги по одному: plan_step step=N status=done|failed|skipped.","plan.readonly":"План {id} имеет статус {status} (только чтение) — обновить его нельзя. Используй \"plan switch\", чтобы активировать его, или создай новый план для новой задачи.","plan.list_legend":"[*] активный · [ ] черновик · [-] архив","exec.plan_nudge":"Ты сделал(а) {count} вызов(ов), изменяющих файлы, без плана. Для задач, создающих/изменяющих файлы или состоящих из нескольких шагов, сначала создай план (plan create) с конкретными шагами (точные имена файлов, команды, результаты), а потом продолжай.","exec.plan_summary_complete":"[{id}] \"{title}\" — {done}/{total} готово, план завершён. Можешь создать новый план для новой работы (plan create) или дать финальный ответ.","exec.plan_summary_continue":"[{id}] \"{title}\" — {done}/{total} готово, текущий: шаг {current} — продолжай его (plan show / re-plan), НЕ создавай новый план","exec.test_fail_summary":"{framework}: {failed} падающих тест(ов) ({passed} пройдено). НЕ отмечай текущий шаг как done — исправь падающие тесты (прочитай вывод, поправь код) и перезапусти до полного успеха.","exec.test_pass_summary":"{framework}: все {passed} тест(ов) пройдены для \"{cmd}\". Можно отметить текущий шаг как done через plan_step step=N status=done.","exec.skills_hint":"Если доступны подходящие навыки, рассмотри загрузку одного через load_skill для экспертной подсказки.","todo.added":"Добавлено {count} задач: {items}","todo.marked_done":"Отмечено выполненными: {count}","todo.no_active":"Нет активных задач","todo.no_items":"Не указаны подзадачи — укажите items для отметки выполненными","todo.subtask_not_found":"Подзадачи не найдены: {items}. Используй id из todo list (todo done ids=[...]) — так надёжнее.","todo.subtask_id_not_found":"Нет подзадач с id: {ids}. Проверь id через todo list.","todo.unknown_action":"Неизвестное действие todo: {action}","todo.acknowledged":"Todo принято","verify.passed":"Проверка пройдена","verify.failed":"Проверка не пройдена: {details}","verify.file_exists":"Файл существует: {path}","verify.file_not_found":"Файл не найден: {path}","verify.script_passed":"Скрипт '{script}' пройден","verify.script_failed":"Скрипт '{script}' не пройден: {message}","verify.syntax_error":"Синтаксическая ошибка в: {path}","verify.file_still_exists":"Файл должен быть удалён, но всё ещё существует: {path}","verify.no_files":"Шаг {step} не содержит именованных файлов для проверки — выполни реальную проверку (bun run build / bun test / lsp_check) и подтверди результат.","verify.typecheck_skipped_no_tsconfig":"tsconfig.json не найден — проверка типов пропущена","verify.typecheck_skipped_no_tsc":"tsc не установлен — проверка типов пропущена","verify.typecheck_passed":"Проверка типов TypeScript пройдена","verify.typecheck_failed":"Проверка типов TypeScript не пройдена: {error}","verify.tests_skipped_no_package":"package.json не найден — тесты пропущены","verify.tests_skipped_no_script":"Скрипт тестов не задан — тесты пропущены","lsp.unavailable":"статические проверки недоступны (сервер не найден). Проверяйте через собственный build/test проекта.","lsp.check_disabled":"LSP-проверки отключены в конфигурации.","lsp.check_no_path":"Укажите путь (файл или каталог) для проверки.","lsp.check_notfound":"Путь не найден: {path}","lsp.check_unsupported":"Для файла не настроен LSP-сервер: {path}","lsp.check_clean":"Ошибок и предупреждений не обнаружено (проверено файлов: {count}).","lsp.checked_files":"Проверено файлов: {count}:","lsp.startup_header":"[Существующие ошибки проекта (базовый уровень, проверено при старте сессии) — справочно. Не исправляйте их, если текущий запрос не про эти ошибки; в противном случае игнорируйте их и выполняйте только то, о чём попросил пользователь.]:","lsp.hint_binary_missing":"Подсказка: поставьте language server или укажите lsp.servers.<lang>.command на существующий бинарник.","lsp.hint_network":"Подсказка: не удаётся скачать language server (npm-реестр недоступен) — поставьте его в PATH, укажите зеркало реестра в lsp.servers.<lang>.env или MMA_LSP_OFFLINE=1.","lsp.hint_offline":"Подсказка: включён офлайн-режим, а бинарника сервера нет в PATH — поставьте его или снимите MMA_LSP_OFFLINE.","lsp.hint_spawn":"Подсказка: не удалось запустить команду сервера — проверьте команду и PATH.","lsp.hint_timeout":"Подсказка: сервер не инициализировался вовремя — возможно, медленный; увеличьте lsp.servers.<lang>.timeout.","cli.description":"Micro Models Agent — ИИ-агент для кодинга на малых моделях","cli.init":"Запустить мастер настройки провайдера (устаревший алиас mma setup).","cli.init_deprecated":"mma init устарела — используй mma setup","cli.setup":"Мастер настройки (провайдер, модель, безопасность).","cli.meet":"Познакомимся — записать предпочтения и профиль использования.","cli.agents":"Управление агентом.","cli.agents_init":"Создать или обновить AGENTS.md для этой папки.","cli.config_saved":"Конфигурация сохранена в ~/.mma/config.json","cli.manage_config":"Управление конфигурацией","cli.config_key":"Ключ конфига (напр., model, provider.baseUrl)","cli.config_value":"Значение конфига","cli.set_value":"Установить значение","cli.config_force":"Обойти проверку и записать сырое значение как есть","cli.set_done":"Установлено {key}={value}","cli.config_invalid":"Недопустимое значение для '{key}' ({reason}). Конфиг не изменён.","cli.show_config":"Показать действующую конфигурацию (секреты скрыты; используйте --show-secrets)","cli.show_secrets":"Показать секреты (API-ключи, токены) открыто","cli.migrate_config":"Мигрировать legacy config.json в domain-формат","cli.manage_models":"Управление моделями","cli.list_models":"Список доступных моделей","cli.current_model":"Текущая модель:","cli.model_hint":"(Используйте /model use <имя> для смены)","cli.model_fetch_failed":"Не удалось получить модели: {error}","cli.available_models":"Доступные модели:","cli.cert_label":"поддерживается — сертифицирована на этом провайдере","cli.cert_stale_label":"сертифицирована на старой версии MMA — рекомендуется","cli.no_models_found":"Модели не найдены у провайдера","cli.fetching_models":"Загрузка списка моделей...","cli.manage_context":"Управление контекстным окном","cli.context_size_arg":"Размер контекстного окна в токенах (без значения — показать разбивку бюджета)","cli.invalid_context_size":"Некорректный размер контекста. Должно быть число >= 1024","cli.context_set":"Контекстное окно установлено: {size} токенов","cli.context_budget_header":"Бюджет контекста (окно {window} токенов):","cli.context_system_line":" системный промпт: {tokens} токенов ({percent}%)","cli.context_reserve_line":" резерв ответа: {tokens} токенов ({percent}%)","cli.context_history_line":" история: {tokens} токенов ({percent}%)","cli.context_system_fraction":"Доля системного промпта в контекстном окне (0.05–0.9)","cli.context_reserve_fraction":"Доля резерва ответа в контекстном окне (0.05–0.9)","cli.context_fraction_set":"Доля {key} установлена: {value}","cli.context_invalid_fraction":"Некорректная доля. Нужно число от 0.05 до 0.9 (системный + резерв должны оставаться ниже 0.95).","cli.set_model":"Установить модель по умолчанию","cli.model_name":"Имя модели","cli.model_set":"Модель установлена: {name}","cli.certify":"Запустить сертификационный набор для модели","cli.cert_provider_url":"Базовый URL провайдера для сертификации (по умолчанию — текущий конфиг)","cli.cert_provider_key":"API-ключ провайдера (необязательно)","cli.cert_context_window":"Размер контекстного окна в токенах","cli.cert_tags":"Теги сценариев через запятую (core, security, image, network, browser, shell, research)","cli.cert_scenarios":"ID сценариев через запятую для (пере)запуска (напр. 3.5-data-pipeline); остальные результаты сохраняются","cli.cert_scenarios_unknown":"Неизвестные сценарии: {ids}. Доступны: {available}","cli.cert_partial_merge":"Сохранено результатов из предыдущей сертификации: {kept}","cli.cert_reps":"Повторов по умолчанию на сценарий (переопределяется сценарием)","cli.cert_timeout":"Таймаут на реп в мс (по умолчанию 300000; переопределяется сценарием)","cli.cert_force":"Перепрогнать существующую сертификацию","cli.cert_clean":"Удалить песочницы после успешного прогона","cli.cert_security_required":"Безопасность отключена. Включите её (например `mma security set-policy balanced`), чтобы запустить security-сьют.","cli.cert_no_scenarios":"Нет сценариев под теги: {tags}","cli.cert_exists":"Сертификация {model} на этом провайдере уже существует.","cli.cert_exists_hint":"Используйте --force для перепрогона.","cli.cert_started":"Сертификация {model} на {provider}...","cli.cert_done":"Сертификация завершена: {passed} pass, {failed} fail, {skipped} skipped ({total} всего)","cli.cert_rep_pass":"pass","cli.cert_rep_fail":"fail","cli.cert_status":"Показать статус сертификации модели","cli.cert_list":"Список всех сертификаций","cli.cert_uncertify":"Удалить сертификацию","cli.cert_not_found":"Сертификация {model} не найдена","cli.cert_uncertified":"Сертификация {model} удалена","cli.cert_empty":"Сертификаций пока нет. Запустите `mma model certify <модель>`.","cli.cert_provider_col":"провайдер","cli.cert_suite_col":"сьют","cli.cert_date_col":"дата","cli.cert_version_col":"версия MMA","cli.cert_stale_hint":"Запустите `mma model certify --force` для обновления.","cli.cert_fixture_missing":"Фикстура отсутствует для {id}: {path}","cli.cert_marks_hint":"Маркеры: ✔ сертифицировано на этом провайдере, ○ сертифицировано на старой версии MMA, · не сертифицировано","cli.manage_providers":"Управление провайдерами","cli.provider_check":"Проверить доступность провайдеров (бесплатный вызов listModels)","cli.probe_timeout":"Таймаут проверки провайдера в мс","repl.provider_down":"[ВНИМАНИЕ] Провайдер «{name}» недоступен: {error}","repl.meet_start_prompt":"Давай познакомимся. Начни интервью.","repl.meet_unavailable":"Не могу начать: провайдер не отвечает ({reason}).","repl.meet_unavailable_hint":"Запусти модель и повтори /meet — ничего не записано.","onboarding.already":"Уже выполняется.","onboarding.non_interactive":"Эта команда требует интерактивного терминала.","onboarding.write_restricted":"в этом режиме можно писать только AGENTS.md","repl.init_start_prompt":"Создай или улучши {dir} для этой папки. Сначала изучи, потом запиши.","repl.init_unavailable":"Не могу запустить init: провайдер не отвечает ({reason}).","repl.meet_usage":"/meet [stop] — познакомимся","repl.meet_already_hint":"Знакомство уже идёт. Выполни /meet stop, чтобы завершить.","repl.meet_stop_done":"Знакомство завершено.","repl.meet_stop_none":"Знакомство не запущено.","repl.init_usage":"/init — создать/обновить AGENTS.md","repl.init":"Создать или обновить AGENTS.md для этой папки.","repl.memory_usage":"/memory [get|set|unset|find|forget]","repl.memory_empty":"Память пуста.","repl.memory_prefs":"Предпочтения:","repl.memory_set":"Сохранено {key}={value}","repl.memory_unset":"Удалено {key}","repl.memory_not_found":"Нет предпочтения \"{key}\"","repl.memory_entry_not_found":"Нет записи {n} в {category}","repl.memory_forgotten":"Удалена запись {n} из {category}","repl.meet_offer":"Познакомимся? Задам несколько вопросов и запомню, как тебе удобнее работать.","repl.meet_offer_hint":"Можно пропустить и вызвать /meet позже.","repl.meet_done":"Готово — предпочтения сохранены. Смотри /memory.","onboarding.provider_down":"⚠ Провайдер не отвечает — «{cmd}» пока недоступно.","onboarding.provider_down_hint":"↳ Подними модель и вызови /{cmd}. Ничего не записано.","cli.list_providers":"Список провайдеров","cli.current_provider":"Текущий провайдер:","cli.base_url":"Базовый URL:","cli.set_provider":"Установить активный провайдер","cli.provider_set":"Провайдер установлен: {name}","cli.provider_name":"Имя провайдера","cli.provider_type_label":"Тип провайдера или метка","cli.provider_base_url":"Базовый URL","cli.provider_api_key":"API-ключ","cli.provider_priority":"Приоритет переключения (меньше — раньше)","cli.provider_context_window":"Переопределение контекстного окна для этой записи","cli.provider_rpm":"Максимум запросов в минуту для этой записи","cli.provider_parallel":"Максимум параллельных задач для этой записи","cli.manage_sessions":"Управление сессиями","cli.list_sessions":"Список всех сессий","cli.show_details":"Показать детали сессии","cli.session_id":"ID сессии","cli.session_id_or_prefix":"ID сессии (или начало имени)","cli.session_field_id":"ID:","cli.session_field_name":"Имя:","cli.session_field_created":"Создана:","cli.session_field_updated":"Обновлена:","cli.session_field_messages":"Сообщений:","cli.session_field_model":"Модель:","cli.session_field_context":"Контекст:","cli.session_field_project":"Проект:","cli.session_moe_events":"События MoE:","cli.delete_session":"Удалить сессию","cli.prune_sessions":"Удалить сессии без сообщений пользователя","cli.prune_dry_run":"Показать кандидатов без удаления","cli.export_session":"Экспортировать сессию в файл (md, json или jsonl)","cli.export_format":"Формат вывода: md|json|jsonl (по умолчанию md)","cli.export_out":"Путь вывода ('-' для stdout)","cli.export_no_redact":"Не скрывать секреты","cli.export_compact":"Пропустить тела результатов тулов (компактный читаемый экспорт)","cli.first_run":"Первый запуск. Запускаем мастер настройки...","cli.first_run_oneshot":"Конфигурация не найдена — запуск с настройками по умолчанию. Запустите `mma` без аргументов один раз для настройки.","cli.web_setup_required":"Конфигурация не найдена — открывается мастер настройки в браузере.","cli.web.description":"Запустить агента с браузерным интерфейсом","cli.web.port":"фиксированный порт (по умолчанию случайный)","cli.web.host":"адрес привязки (по умолчанию 127.0.0.1)","cli.web.token":"требовать этот токен (обязателен для не-loopback)","cli.web.no_open":"не открывать браузер автоматически","cli.web_started":"веб-интерфейс → {url} (директория: {dir})","cli.web_invalid_port":"некорректный --port «{port}»: нужно целое число от 1 до 65535","cli.relaunch_failed":"Не удалось перезапустить CLI: {message}","cli.prompt_arg":"Промпт для выполнения","cli.run_prompt":"Выполнить одиночный промпт","cli.setup_saved_restart":"Настройки сохранены. Перезапуск с новой конфигурацией...","cli.unknown_cmd":"Неизвестная команда: {name}.","cli.unknown_command":"Неизвестная команда \"{input}\". Возможно, вы имели в виду \"{suggestion}\"?","cli.help_hint":"Введите /help для списка команд.","cli.available_cmds":"\nДоступные команды:","cli.no_output":"Агент завершил работу, но не выдал результата. Возможно, задача не выполнена до конца.","cli.no_agents_md":"Отключить загрузку AGENTS.md в системный промпт","cli.dir":"Рабочая директория агента (по умолчанию — текущая)","cli.exit_on_complete":"Завершить сразу после выполнения задачи; интерактивные тулзы (question/approve) не блокируют stdin, а возвращают ошибку","cli.reasoning_level":"Установить уровень рассуждений (auto|none|low|medium|high|max)","cli.json":"Вывести результат в формате JSON (режим однократного запуска)","cli.context_log":"Писать весь контекст LLM в <session>/context.diff в git-подобном diff-формате (первый снимок — полный, далее изменения +/-)","cli.verbose":"Показывать полный вывод чата (тела тулов, списки); по умолчанию — кратко","cli.security.description":"Управление настройками безопасности","cli.security.status":"Показать текущую конфигурацию безопасности","cli.security.policies":"Список доступных политик безопасности","cli.security.set_policy":"Применить пресет политики безопасности","cli.security.preset":"Пресет политики (strict, balanced, permissive)","cli.security.invalid_preset":"Некорректный пресет. Доступные: {presets}","cli.security.policy_applied":"Политика безопасности применена: {name}","cli.security.policy_description":"Описание: {description}","cli.security.enable_encryption":"Включить шифрование файлов сессий","cli.security.disable_encryption":"Отключить шифрование файлов сессий","cli.security.encryption_enabled":"Шифрование файлов сессий включено","cli.security.encryption_disabled":"Шифрование файлов сессий отключено","cli.security.enable_audit":"Включить уведомления аудита","cli.security.disable_audit":"Отключить уведомления аудита","cli.security.audit_enabled":"Уведомления аудита включены","cli.security.audit_disabled":"Уведомления аудита отключены","cli.security.audit_stats":"Показать статистику уведомлений аудита","cli.security.audit_stats_title":"Статистика уведомлений аудита","cli.security.total_notifications":"Всего уведомлений","cli.security.by_severity":"По уровню серьезности","cli.security.by_type":"По типу","cli.security.low":"Низкий","cli.security.medium":"Средний","cli.security.high":"Высокий","cli.security.critical":"Критический","cli.security.current_policy":"Текущая конфигурация безопасности","cli.security.bash_enabled":"Проверка команд bash","cli.security.path_validation":"Проверка доступа к путям","cli.security.network_validation":"Проверка сетевых запросов","cli.security.content_scanning":"Сканирование содержимого","cli.security.max_recursion":"Максимальная глубина рекурсии","cli.security.max_file_ops":"Максимум операций с файлами","cli.security.rate_limit":"Ограничение запросов","cli.security.session_encryption":"Шифрование сессий","cli.security.audit_notifier":"Уведомления аудита","cli.security.available_policies":"Доступные политики безопасности","cli.security.recommended_for":"Рекомендуется для","cli.yes":"Да","cli.no":"Нет","cli.plugins.description":"Управление плагинами","cli.plugins.list":"Список загруженных плагинов (имя, версия, источник)","cli.plugins.all":"Включить встроенные плагины","cli.plugins.only_external":"(встроенные плагины скрыты — используйте --all)","cli.plugins.none":"Плагины не загружены","cli.plugins.header":"Плагины: {count} загружено (MMA v{mma})","cli.plugins.builtin_mark":"●","repl.help":"Показать доступные команды","repl.help_usage":"Использование: /help","repl.exit":"Выйти из REPL","repl.exit_usage":"Использование: /exit","repl.clear":"Очистить экран","repl.clear_usage":"Использование: /clear","repl.clear_hint":"Экран очищен. Новая сессия и контекст: /new","repl.run":"Выполнить запрос через агента","repl.run_usage":"Использование: /run <запрос>","repl.config":"Показать или изменить настройки (get / set / reset)","repl.config_usage":"Использование: /config [<ключ> [значение]] | /config reset <ключ> | /config reset --all [--yes] | /config migrate","repl.reasoning":"Показать статус рассуждений, переключить показ или уровень","repl.reasoning_usage":"Использование: /reasoning [show|hide|level <auto|default|none|low|medium|high|max>]","repl.reasoning_level_set":"Уровень рассуждений установлен: {level}","repl.reasoning_invalid_level":"Неверный уровень '{level}'. Допустимые: {valid}","repl.verbose":"Подробность вывода (quiet, normal, verbose)","repl.verbose_usage":"Использование: /verbose [quiet|normal|verbose]","repl.verbose_set":"Подробность вывода: {level}","repl.verbose_invalid_level":"Неверный уровень '{level}'. Допустимые: {valid}","repl.last_action_none":"Нет недавнего действия для показа.","repl.status":"Показать компактную строку статуса","repl.status_usage":"Использование: /status","repl.security":"Показать конфигурацию безопасности (вкл/выкл по областям)","repl.plugins":"Список загруженных плагинов","repl.plugins_usage":"Использование: /plugins [--all]","repl.sessions":"Список всех сессий (* активная)","repl.sessions_usage":"Использование: /sessions","repl.new":"Создать новую сессию","repl.new_usage":"Использование: /new [имя]","repl.resume":"Переключиться на сессию по id или имени","repl.resume_usage":"Использование: /resume <id|имя>","repl.rename":"Переименовать текущую сессию","repl.rename_usage":"Использование: /rename <новое-имя>","repl.delete":"Удалить сессию по id","repl.delete_usage":"Использование: /delete <id-сессии>","repl.skill":"Управление скиллами (list, loaded, load, unload, search)","repl.no_skills":"Нет доступных скиллов","repl.available_skills":"Доступные скиллы:","repl.no_loaded":"Нет загруженных скиллов","repl.loaded_skills":"Загруженные скиллы:","repl.budget":"Бюджет: {used} / {total} токенов (осталось {remaining})","repl.skill_load_usage":"Использование: /skill load <имя>","repl.skill_unload_usage":"Использование: /skill unload <имя>","repl.skill_unloaded":"Скилл \"{name}\" выгружен","repl.skill_not_loaded":"Скилл \"{name}\" не загружен","repl.skill_search_usage":"Использование: /skill search <запрос>","repl.no_skill_match":"Нет скиллов по \"{query}\"","repl.skills_matching":"Скиллы по \"{query}\":","repl.skill_unknown_sub":"Неизвестная подкоманда скилла: {subcmd}","repl.skill_usage":"Использование: /skill [list|loaded|load|unload|search]","repl.agent":"Агент: ","repl.you":"Вы: ","repl.you_reasoning":"Вы [{level}]: ","repl.you_reasoning_cont":"Вы [{level}]… ","repl.interrupt":"Прервано (Esc)","repl.title":"MMA REPL v{version}","repl.model":"Модель:","repl.provider":"Провайдер:","repl.context":"Контекст:","repl.ctx_part_system":"система","repl.ctx_part_reserve":"резерв","repl.ctx_part_history":"история","repl.sysprompt_label":"Системный промпт:","repl.sysprompt_size":"{used} / {budget} токенов","repl.sysprompt_desc":"Размер системного промпта и блоки (текст — через --full)","repl.sysprompt_usage":"Использование: /sysprompt [--full]","repl.sysprompt_full_hint":"Полный текст промпта скрыт — выполните /sysprompt --full.","repl.sysprompt_tokens":"Системный промпт ({count} токенов):","repl.excluded_blocks":"\nИсключённые блоки: {count}","repl.context_usage":"Использование: /context [<размер, мин 1024> | system <доля> | reserve <доля>] (доля 0.05–0.9 или напр. 10%; system+reserve ≤ 0.95)","repl.msgs":"сообщ.","repl.api_line":" API: {prompt} prompt + {completion} completion = {total} всего","repl.compacted":"Контекст сжат ({count})","repl.skills_available":"{count} доступно, бюджет: {budget} токенов","repl.plugins_active":"{count} активно ({names})","repl.plugins_hidden":"({count} встроенных скрыто — /plugins --all чтобы показать)","repl.loaded":"[загружен]","repl.yes":"да","repl.no":"нет","repl.max_iters":"Макс итераций:","repl.stuck_thresh":"Порог зависания:","repl.reasoning_label":"Рассуждения:","repl.log_level":"Уровень лога:","repl.locale":"Язык:","repl.session_label":"Сессия:","repl.skills_label":"Скиллы:","repl.plugins_label":"Плагины:","repl.mcp_label":"MCP:","repl.lsp_label":"LSP:","repl.lsp_timeout":"таймаут","repl.lsp_failed":"не стартовал","repl.lsp_unknown":"неизвестно","repl.lsp":"Управление LSP-серверами (Language Server Protocol) — status, restart, check, doctor","repl.lsp_usage":"Использование: /lsp [status|restart|doctor|check <путь>]","repl.lsp_not_available":"Модуль LSP недоступен","repl.lsp_status_header":"Статус LSP:","repl.lsp_enabled":"Включён:","repl.lsp_disabled_servers":"Отключённые серверы:","repl.lsp_failure_counts":"Количество ошибок:","repl.lsp_all_ok":"Все серверы работают","repl.lsp_restarting":"Сброс состояния LSP-серверов...","repl.lsp_restarted":"LSP-серверы сброшены. Упавшие серверы будут повторно запущены при следующем использовании.","repl.lsp_check_usage":"Использование: /lsp check <файл-или-каталог>","repl.lsp_checking":"Запуск LSP-проверки {path}...","repl.lsp_check_error":"LSP-проверка не удалась: {error}","repl.lsp_doctor_header":"LSP-диагностика","repl.lsp_doctor_enabled":"включён","repl.lsp_doctor_offline":"офлайн","repl.lsp_doctor_project":"проект","repl.lsp_doctor_yes":"да","repl.lsp_doctor_no":"нет","repl.lsp_doctor_none":"серверы не настроены","repl.lsp_reason_ok":"ок","repl.lsp_reason_disabled":"отключён","repl.lsp_reason_not_applicable":"нет подходящих файлов","repl.lsp_reason_binary_missing":"бинарник не найден","repl.lsp_reason_offline":"офлайн — поставьте бинарник","repl.lsp_reason_network":"сеть — не удалось скачать сервер","repl.lsp_reason_timeout":"таймаут (initialize)","repl.lsp_reason_spawn_failed":"не удалось запустить процесс","repl.lsp_reason_server_error":"ошибка сервера","repl.lsp_reason_deadline":"пропущен (дедлайн)","repl.lsp_via":"через","repl.lsp_via_global":"глобальный бинарник","repl.lsp_via_npx":"npx (скачивание)","repl.lsp_doctor_hint":"закрытая сеть? поставьте серверы в PATH, укажите зеркало реестра в lsp.servers.<lang>.env или MMA_LSP_OFFLINE=1","repl.lsp_install":"поставить глобально: {command}","repl.work_dir":"Директория:","repl.agents_label":"Инструкции:","repl.not_found":"не найден","repl.disabled":"отключено (--no-agents-md)","repl.context_probe_small":"Context-проб: модель \"{model}\" загружена с контекстом {actual} токенов, настроено {configured} — риск переполнения","repl.context_probe_big":"Context-проб: модель \"{model}\" поддерживает {actual} токенов — рассмотрите \"mma context {actual}\"","repl.show":"показ","repl.hide":"скрыть","repl.resume_hint":"Используйте /resume <id> или /resume <имя> для переключения между сессиями","repl.reasoning_status":"Рассуждения: {status}","repl.wizard":"Запустить мастер настройки","repl.wizard_usage":"Использование: /wizard","repl.wizard_running":"Запуск мастера настройки... (текущая конфигурация будет перезаписана)","repl.provider_list":"Список настроенных провайдеров или горячая смена активного","repl.provider_current":"Текущий провайдер","repl.provider_set":"Провайдер установлен: {name}","repl.provider_usage":"Использование: /provider list | /provider use <имя> | /provider add <имя> [флаги]\n --url <url> базовый URL API (иначе — из пресетов)\n --key <ключ> API-ключ\n --priority <n> порядок fallback; меньше = раньше\n --context-window <n> окно контекста провайдера (токены)\n --rpm <n> запросов/мин (по умолчанию 60)\n --parallel <n> параллельных задач (по умолчанию 1)","repl.provider_add_missing_value":"Нет значения для {flag}","repl.provider_add_invalid_number":"Неверное число для {flag}: '{value}'","repl.provider_switch_hint":"Переключитесь на него: /provider use {name}","repl.provider_flag_url":"Базовый URL API (иначе — из пресетов)","repl.provider_flag_key":"API-ключ","repl.provider_flag_priority":"Порядок fallback; меньше = раньше","repl.provider_flag_context_window":"Окно контекста провайдера (токены)","repl.provider_flag_rpm":"Запросов в минуту (по умолчанию 60)","repl.provider_flag_parallel":"Параллельных задач (по умолчанию 1)","repl.model_list":"Список моделей активного провайдера или смена модели","repl.model_current":"Текущая модель","repl.model_set":"Модель установлена: {name}","repl.model_usage":"Использование: /model list | /model use <имя>","repl.unknown_sub":"Неизвестная подкоманда '{sub}' для /{cmd}. См. использование ниже.","repl.help_unknown":"Неизвестная команда '/{name}'","repl.help_aliases":"Алиасы: {names}","repl.help_examples":"Примеры:","repl.export":"Экспортировать сессию в файл","repl.export_usage":"Использование: /export [<id|имя>] [--format md|json|jsonl] [--out <путь>] [--no-redact] [--compact]","config.header":"Управляемые настройки","config.col_setting":"Настройка","config.col_value":"Значение","config.col_domain":"Домен","config.col_change":"Как менять","config.session_line":"Сессия: {name} ({id}) — {count} сообщений","config.usage_hint":"Чтение: /config <ключ> · Запись: /config <ключ> <значение> · Сброс: /config reset <ключ>","config.saved":"сохранено · сброс: /config reset {key}","config.read_only_hint":"только чтение","config.read_only":"'{key}' — только чтение","config.unknown_key":"Неизвестный ключ '{key}'. {suggestion}","config.suggest":"Возможно, вы имели в виду '{name}'?","config.valid_keys":"Допустимые ключи: {keys}","config.invalid_value":"Неверное значение для {key}. {hint}","config.range":"Значение вне диапазона для {key}","config.combined":"system + reserve должны оставаться ниже 0.95","config.hint_string":"Ожидается непустая строка","config.hint_enum":"Допустимые: {values}","config.hint_bool":"Ожидается on/off","config.hint_share":"Ожидается 0.05–0.9 или процент (напр. 10%)","config.hint_int":"Ожидается целое ≥ {min}","config.reset_ok":"{key} восстановлен к значению на старте сессии: {value} · сохранено","config.reset_unchanged":"{key} уже соответствует значению сессии","config.reset_none":"В этой сессии настройки не менялись","config.reset_all_confirm":"Сбросить {count} изменённых настроек к значениям на старте сессии? [y/N] ","config.reset_all_done":"Восстановлено настроек: {count} · сохранено","config.reset_all_needs_yes":"Отказ от сброса без подтверждения в неинтерактивном режиме; укажите --yes","config.reset_cancelled":"Сброс отменён","config.reset_usage":"Использование: /config reset <ключ> | /config reset --all [--yes]","config.alias_label":"алиас","config.group_label":"группа","reasoning.status":"Рассуждения: показ {display} · усилие {level} {auto}","reasoning.on":"вкл","reasoning.off":"выкл","reasoning.auto_on":"(авто-политика)","reasoning.auto_off":"(авто-политика выключена)","reasoning.auto_off_hint":"Авто-политика выключена. Вернуть: /config reset reasoning.mode","reasoning.display_set":"Показ рассуждений: {state}","reasoning.unknown_sub":"Неизвестный аргумент '{sub}'.","reasoning.sub_show":"Показывать рассуждения","reasoning.sub_hide":"Скрыть рассуждения","reasoning.sub_level":"Установить уровень рассуждений","verbose.status":"Подробность: {level}","verbose.sub_quiet":"Одна строка на действие","verbose.sub_normal":"Плюс короткие сводки результатов","verbose.sub_verbose":"Полная деталь по действиям","context.unknown_arg":"Неизвестный аргумент '{arg}'.","context.sub_system":"Доля системного промпта","context.sub_reserve":"Доля резерва ответа","model.not_in_list":"Примечание: '{name}' нет в списке известных моделей","model.sub_list":"Список моделей активного провайдера","model.sub_use":"Сменить модель","provider.sub_list":"Список настроенных провайдеров","provider.sub_use":"Сменить активного провайдера","provider.sub_add":"Добавить провайдера","map.sub_summary":"Показать сводку карты проекта","map.sub_refresh":"Перестроить индекс проекта","map.sub_find":"Поиск по карте проекта","lsp.sub_status":"Статус LSP-серверов","lsp.sub_restart":"Сбросить отключённые серверы","lsp.sub_check":"Запустить LSP-проверку пути","lsp.sub_doctor":"Диагностика LSP-серверов","skill.sub_list":"Список доступных скиллов","skill.sub_loaded":"Список загруженных скиллов","skill.sub_load":"Загрузить скилл","skill.sub_unload":"Выгрузить скилл","skill.sub_search":"Поиск скиллов","export.written":"Экспортировано в {path}","export.redacted":"секреты скрыты (--no-redact чтобы отключить)","export.raw":"секреты НЕ скрыты","export.empty":"в сессии нет сообщений — экспорт не создан","export.invalid_format":"Неизвестный формат '{format}'. Используйте md|json|jsonl","export.missing_value":"Нет значения для {flag}","export.write_failed":"Не удалось записать экспорт: {error}","repl.reload":"Перезагрузить агента с текущим конфигом","repl.reload_usage":"Использование: /reload","repl.reloading":"Перезагрузка агента...","repl.reloaded":"Агент перезагружен","repl.group.general":"Общее","repl.group.agent":"Агент","repl.group.session":"Сессии","repl.group.skill":"Скиллы","setup.title":"\n Мастер настройки MMA v2\n","setup.select_provider":"\n Выберите тип провайдера:","setup.select_provider_num":"\n Выберите провайдер (1-{max})","setup.select_language_num":"\n Выберите язык (1-{max})","setup.scanning":" Сканирование локальных LLM-серверов...","setup.found_servers":" Найдено серверов: {count}","setup.no_servers":" Локальные серверы не найдены. Введите URL вручную.","setup.api_base":" API Base URL","setup.provider_type":" Тип провайдера","setup.api_key":" API ключ (нажмите Enter для пропуска)","setup.fetching_models":" Загрузка списка моделей...","setup.available_models":" Доступные модели:","setup.select_model":" Выберите модель (1-{max})","setup.model_name":" Имя модели","setup.testing":"\n Тестирование чата с моделью \"{model}\"...","setup.ok":" OK — соединение успешно","setup.warning":" ВНИМАНИЕ: не удалось подключиться — проверьте API endpoint и ключ","setup.agent_settings":"\n --- Настройки агента ---","setup.context_window":" Контекстное окно (токены)","setup.max_iters":" Макс итераций инструментов","setup.language":"\n --- Язык ---","setup.ui_lang":" Язык интерфейса (en/ru)","setup.complete":"\n Настройка завершена!\n","setup.select_server":"\n Выберите сервер (1-{max})","setup.custom_url":"Свой URL","setup.scanning_spinner":"Сканирование локальных LLM-серверов…","setup.fetching_spinner":"Загрузка списка моделей…","setup.testing_spinner":"Проверка чата с \"{model}\"…","setup.security_header":"\n --- Безопасность ---","setup.security_status_off":" Безопасность: ВЫКЛ (по умолчанию — все команды разрешены)","setup.security_status_on":" Безопасность: ВКЛ (по умолчанию — политика balanced)","setup.security_configure":" Настроить безопасность? (y/N)","setup.security_bash_block":" Блокировать опасные команды (rm, sudo, ssh и т.д.)? (y/N)","setup.security_flags_block":" Блокировать опасные флаги (--force, -rf и т.д.)? (y/N)","setup.security_paths_restrict":" Ограничить доступ к .git/, .env, node_modules/? (Y/n)","skill.already_loaded":"Скилл \"{name}\" уже загружен","skill.not_found":"Скилл \"{name}\" не найден ни в одном каталоге","skill.no_match":"Нет скиллов подходящих для: {task}","skill.too_large":"Скилл \"{name}\" слишком большой ({tokens} токенов). Бюджет: {budget} токенов. Продолжайте задачу без этого скилла.","skill.exceeds_budget":"Скилл \"{name}\" ({tokens} токенов) превышает остаток бюджета ({remaining} токенов). Сначала выгрузите другие скиллы.","skill.loaded":"Скилл \"{name}\" загружен ({tokens} токенов, осталось {remaining})","skill.auto_loaded":"[Автозагружен скилл: {name}]","skill.prompt_hint":"НЕ загружайте скиллы автоматически. Загружайте скилл ТОЛЬКО когда пользователь явно об этом просит (например 'используй скилл X' или 'загрузи скилл Y'). Скиллы ниже перечислены только для справки — не угадывайте какой скилл подходит по описанию задачи.","skill.prompt_fallback":"Если load_skill не удался из-за большого размера скилла, продолжайте задачу без него — не останавливайтесь.","skill.loaded_content":"[Скилл загружен: {name}]\n{content}\n\nИспользуйте эти знания для ответа на вопрос пользователя.","exec.stuck":"Нет прогресса на шаге {stepId} ({description}) — {iterations} итераций.","exec.stuck_recovery":"Шаг {stepId} — \"{description}\" — без прогресса уже {iterations} итераций. Попробуйте другой подход: проверьте что нужно для этого шага, установлены ли зависимости, или создайте файлы напрямую через write_file вместо команд терминала. После завершения шага вызовите plan_step step={stepId} status=done.","exec.tool_errors":"Инструмент {tool} упал {count} раз. Попробуйте другой инструмент.","exec.tool_errors_recovery":"Инструмент {tool} упал {count} раз подряд. Попробуйте альтернативу: создайте файлы напрямую через write_file, используйте другую команду, или пропустите этот шаг через plan_step step=N status=skipped с пометкой почему.","exec.repetitive_tool":"Инструмент {tool} вызван {count} раз с одинаковыми аргументами и результатом. Попробуйте другой подход — создайте файлы напрямую, измените аргументы или проверьте статус процесса через process_log.","exec.repetitive_process_log_hint":"Вы опрашиваете фоновый процесс в цикле — вызовите process_wait один раз вместо опроса через process_log.","exec.consecutive_failures_recovery":"{count} инструментов подряд упали. Создавайте файлы напрямую через write_file вместо команд терминала. Проверьте что зависимости установлены (npm install). Не запускайте сборку/тесты пока не созданы все файлы.","exec.bash_flailing_recovery":"bash упал в {fails} из последних {window} попыток. Хватит использовать шелл-команды для файловых операций на этой машине — они не работают. Используй специализированные инструменты: read_file (в заголовке число строк), write_file, edit_file, file_info (размер файла), glob/grep для поиска","exec.bash_flailing":"bash упал в {fails} из последних {window} попыток.","exec.consecutive_failures":"{count} подряд неудачных вызовов тулов.","exec.honest_stop":"ХВАТИТ повторять. {count} пакетов тулов подряд упали или заблокированы, успешных вызовов между ними не было — новые варианты того же действия не помогут. НЕ пробуй другую команду, флаг или обход. Напиши финальный текстовый ответ СЕЙЧАС: честно укажи что сделано, что НЕ сделано или НЕ проверено и почему. НЕ вставляй вывод, который не получал от тула.","exec.readonly_directive":"Ты только читаешь, ищешь и загружаешь уже {count} шагов без зафиксированного результата. Прекрати исследование: либо НАПИШИ финальный ответ на основе того, что уже есть, либо сделай конкретное изменение, которое требует задача. Не обращайся к тому же источнику повторно.","exec.read_only_loop":"Нет записи/выполнения за {count} вызовов — агент только читает/исследует.","exec.read_only_loop_recovery":"{count} вызовов только для чтения подряд (read_file/glob/grep/browser) без записи. Хватит исследовать — внесите правку, которую требует задача: прочитайте файл, затем вызовите write_file или edit_file. Если не можете завершить задачу — спросите пользователя, а не перечитывайте одни и те же файлы.","exec.plan_warning":"Текущий шаг плана {step} — \"{description}\", но вызывается {tool} для файлов вне этого шага. Завершите текущий шаг, вызовите plan_step step={step} status=done, затем переходите к следующему.","exec.plan_blocked":"{max} вызовов подряд вне текущего шага. Завершите шаг {step} — остальные шаги ждут пока этот не будет выполнен.","exec.off_track":"Шаг {stepId} — \"{description}\", но используется {tool} для другого пути. Вернитесь к текущему шагу.","exec.step_gate_deps":"[⚠ Шаг {step} \"{description}\": зависимости не установлены. Сначала выполните команду установки (npm install, pip install и т.д.). Проверьте что lock-файл или директория зависимостей существует. Если этот шаг на самом деле не нужен (внешних зависимостей нет) — пропусти его: plan_step step={step} status=skipped note=\"зависимости не нужны\".]","exec.step_gate_deps_force":"[⚠ Шаг {step}: зависимости всё ещё не установлены (нет lock-файла) — второе предупреждение. Если этот шаг НЕ нужен — НЕМЕДЛЕННО вызови: plan_step step={step} status=skipped note=\"зависимости не нужны\". Если нужен — выполни установку прямо сейчас. Не делай других вызовов инструментов до обновления плана.]","exec.step_gate_empty":"[⚠ Шаг {step}: файлы существуют, но выглядят пустыми: {files}. Добавьте реальный код в эти файлы перед тем как переходить к следующему шагу.]","exec.step_gate_ok":"[✓] Шаг {step} завершён и проверен. ПЕРЕХОДИМ к шагу {nextStep}: \"{nextDesc}\". Работайте ТОЛЬКО над этим шагом.","exec.step_gate_last":"[✓] Шаг {step} завершён — это был последний шаг. Проверьте всё вместе и предоставьте финальный ответ.]","exec.step_gate_manual":"[⚠ Шаг {step}: деливераблы на месте, но авто-advance выключен. Если шаг действительно готов — отметь его сам: plan_step step={step} status=done. Если нет — продолжай работу над ним.]","exec.audit_pass":"[✓] Задача выполнена: {done}/{total} шагов, {files} файлов проверено","exec.audit_pending":"[✗] Задача не выполнена: {done}/{total} шагов — оставшиеся шаги не отмечены выполненными","exec.audit_fail":"[✗] Задача не выполнена: {done}/{total} шагов, {files} файлов отсутствует","exec.audit_leftovers":"[✗] Задача не выполнена: {done}/{total} шагов, {files} файлов из delete-шагов всё ещё существуют","exec.audit_fail_tests":"[✗] Задача не выполнена: {done}/{total} шагов, тесты ПАДАЮТ: {failed} failed / {passed} passed — {detail}","exec.audit_fail_typecheck":"[✗] Задача не выполнена: {done}/{total} шагов, {missing} файлов отсутствует, ошибка typecheck: {typeError}","exec.audit_incomplete":"❗ Финальная проверка не пройдена: {summary}. Задача НЕ завершена. Незакрытые шаги: {steps}. Устрани одним путём: (a) если результат шага уже существует на диске — закрой шаг (plan_step step=N status=done); (b) если шаг больше не нужен — status=skipped; (c) если план разошёлся с реальностью (другие имена файлов, сменился подход) — сделай re-plan. Не повторяй plan_step без изменений.","exec.mass_edit_warning":"⚠️ План затрагивает {count} файлов — проверьте полный список перед продолжением.","exec.escalation":"\n\n⚠️ Агент застрял на шаге {stepId} ({description}). Эскалация к пользователю — пожалуйста, подскажите как действовать.","exec.escalation_directive":"Ты застрял уже несколько попыток. Перестань повторять одно и то же и выбери ОДНО: (1) смени подход принципиально, (2) найди точный текст ошибки через web_search (или инструмент поиска ошибок), (3) задай пользователю короткий уточняющий вопрос, (4) если шаг невыполним — plan_step step=<n> status=skipped с заметкой (или re-plan). Кратко объясни выбор.","exec.test_churn_nudge":"Ты несколько раз подряд правил тест/спек-файл \"{file}\" и не изменил ни строчки production-кода. Если тесты падают — исправляй КОД ПОД ТЕСТОМ (а не тест), если только сам тест не ошибочен — тогда объясни, почему. Если задумано test-first, теперь напиши реализацию.","exec.script_workaround_nudge":"Ограничение безопасности уже заблокировало одну из твоих команд. Написание shell-скрипта (.bat/.cmd/.sh/.ps1), чтобы выполнить её иначе, НЕ снимает ограничение и обычно просто падает. Вместо этого: используй write_file для вывода в файл, запускай по одной простой команде за вызов, передавай \"workdir\" вместо \"cd\" или спроси пользователя.","exec.hints":"\n[Подсказки]\n{hints}","exec.file_rewrite_warning":"⚠️ Файл {file} был перезаписан {count} раз. Попробуйте другой подход — текущая стратегия исправлений не работает.","exec.forbidden_cmd":"ПРЕКРАТИ использовать \"{cmd}\" через bash — это не команда Windows cmd.exe, и она уже неоднократно падала в этой сессии. Используй предназначенный тул: grep → тул grep, ls/dir → list_dir, find → glob, rm → delete_file, sed → edit_file, touch → write_file, which → `where`, cp/mv → move_file, diff → read_file. Больше не вызывай bash для этого.","exec.error_search_results":"Ошибка \"{sig}\" повторилась {count} раз. Поиск в интернете нашёл:\n{results}\nПримени подходящее решение из результатов. Если ни один результат не релевантен — НЕ повторяй тот же подход, смени стратегию или честно сообщи о застревании.","exec.error_search_failed":"Поиск в интернете для \"{query}\" ничего не дал.","exec.error_search_no_query":"Текст ошибки незначимый — поиск в интернете пропущен.","exec.npm_exec_hint":"\"could not determine executable to run\" — у пакета/скрипта нет \"bin\". Используй \"npm run <script>\" (скрипт должен быть в package.json) или \"bunx <pkg>\" для пакета с объявленным bin.","exec.interactive_hint":"команде нужен интерактивный ввод, но у шелла нет TTY (запрос отменён). Запусти её неинтерактивно — передай все нужные флаги/аргументы (например, `bun create vite <name> --template react-ts` вместо голого интерактивного скаффолда).","exec.hidden_tool_hint":"\"{tool}\" — не команда оболочки, это инструмент MMA, который сейчас скрыт. Вызови тул enable_tools с tags [\"shell\"], чтобы включить его; он станет доступен на следующей итерации.","exec.tool_as_command_hint":"\"{tool}\" — это инструмент MMA, а не команда оболочки. Вызови его как тул (function call), не через bash.","exec.task_reminder":"Задача: {task}. Продолжай работу — не повторяй неудачные действия.","hall.max_retries_exhausted":"Модель вернула пустой или недостаточный ответ после нескольких попыток","hall.short_response":"Слишком короткий или пустой ответ","hall.repetitive":"Слишком повторяющийся ответ ({pct}% совпадение)","hall.uncertainty":"Маркеры неопределённости: {markers}","hall.unknown_paths":"Упомянутые файлы не найдены: {paths}","hall.contradiction_llm":"Противоречит ранее принятому решению{reason}","hall.claim_contradiction":"Ответ заявляет об успехе, но свежий результат тула указывает на проблему ({tool}: {snippet}). Либо проверь и исправь, затем перезапусти проверку — либо смягчи формулировку под факты (например, застейджено, появится в ближайшее время).","hall.claim_artifact":"В ответе {path} подан как готовый, но на диске: {detail}. Либо исправь файл и перепроверь реальным чтением — либо смягчи формулировку до того, что реально проверено.","hall.claim_output_unverified":"В ответе вывод подан как результат запуска ({detail}). Либо выполни разрешённым инструментом и процитируй реальный вывод — либо пометь его как ожидаемый/примерный.","hall.claim_web_unverified":"В ответе указаны суммы ({detail}), которых нет ни на одной реально загруженной странице. Либо найди и процитируй источник, либо пометь эти значения как непроверенные/примерные и скажи, что страницы прочитать не удалось.","hall.claim_file_not_created":"Ты заявил, что файл сохранён ({detail}), но за этот ход ни один файл не был записан. Либо реально создай его через write_file (пользователь просил файл), либо исправь утверждение и отдай содержимое в чат.","hall.uncertainty_prefix":"\n\n[⚠️ Неопределённость] ","browser.repeated_action":"Вы повторили то же действие ({action}) {threshold} раз. Попробуйте другой подход: используйте \"snapshot\" для перечитки страницы, другие номера элементов или другой URL.","browser.unknown_action":"Неизвестное действие: {action}","browser.error":"Ошибка браузера: {message}","browser.no_page":"Нет открытой страницы. Сначала выполните \"open\".","browser.url_required":"Требуется URL","browser.create_page_failed":"Не удалось создать страницу","browser.nav_failed":"Ошибка навигации: {message}","browser.invalid_target":"Неверный таргет. Укажите номер элемента из snapshot.","browser.click_failed":"Ошибка клика: {message}. Проверьте номер элемента.","browser.invalid_target_short":"Неверный таргет.","browser.text_required":"Требуется текст.","browser.type_failed":"Ошибка ввода: {message}","browser.direction_invalid":"Направление должно быть: up, down, top, bottom","browser.scroll_failed":"Ошибка прокрутки: {message}","browser.closed":"Браузер закрыт.","browser.no_page_short":"Нет страницы","browser.no_elements":"(нет интерактивных элементов на странице)","browser.more_elements":"... и другие элементы не показаны. Используйте прокрутку или поиск.","browser.content_header":"Содержимое:","browser.console_header":"Консоль:","browser.network_errors_header":"Сетевые ошибки:","browser.truncated":"... (обрезано)","pipeline.invalid":"Невалидный пайплайн: требуются name и steps","pipeline.step_missing_fields":"Шаг не содержит обязательных полей (id, agent, prompt): {step}","pipeline.circular":"Циклическая зависимость: {stepId}","plugin.loaded":"Загружен плагин: {name}","plugin.skipped":"Пропущен несовместимый плагин: {entry} ({message})","plugin.incompatible":"Пропущен плагин {name}: требуется MMA v{min}, текущая v{current}","plugin.dedup_older":"Плагин {name} v{version} пропущен: уже загружена более новая версия","migration.detected":"[MMA] Обнаружен старый конфиг. {summary}","migration.summary":"[MMA] {summary}","migration.config_bak":"- config → config.json.bak","migration.dir_bak":"- .mma/ → .mma.bak/ ({count} файлов)","migration.migrated":"Мигрировано:","migration.not_needed":"Миграция не требуется","ui.error_prefix":"✗ ","ui.success_prefix":"✓ ","ui.warning_prefix":"⚠ ","ui.thinking":"Думаю…","ui.thinking_label":"размышляю","ui.thinking_label_1":"размышляю","ui.thinking_label_2":"обдумываю","ui.thinking_label_3":"прикидываю","ui.action_fallback":"Действие","ui.actions_summary":"{count} действий","ui.plan_update":"шаг {step} → {status}","ui.todo_action":"{action} · {count}","ui.tool_running":"{tool}…","ui.step_context":"шаг {id}: {desc}","ui.draft_retracted":"↳ черновик отклонён проверкой, уточняю…","indexer.map_header":"Карта проекта","indexer.top_directories":"Основные директории","indexer.files":"Файлы","indexer.empty":"Нет проиндексированных файлов","indexer.and_more":"... и ещё {count} файлов","indexer.project_map_desc":"Получить карту проекта: сводка по файлам, языкам и экспортам. Действия: 'find' — поиск файлов по пути или экспорту, 'symbol' — найти определение символа, 'outline' — оглавление символов файла, 'refresh' — перестроить индекс.","indexer.project_map_action_desc":"Действие: summary, refresh, find, symbol или outline","indexer.project_map_query_desc":"Запрос: путь/экспорт (find), имя символа (symbol) или путь к файлу (outline)","indexer.summary":"Карта проекта: {summary}","indexer.refreshed":"Карта проекта обновлена: {summary}","indexer.not_indexed":"Проект ещё не проиндексирован","indexer.find_results":"Найдено {count} совпадающих файлов:\n{results}","indexer.find_more":"... и ещё {count} совпадений","indexer.symbol_results":"Найдено {count} определений символов:\n{results}","indexer.outline_empty":"(символы не извлечены)","indexer.no_matches":"Нет совпадающих файлов для \"{query}\"","indexer.truncated":"[!] Индекс усечён на {max} файлах (поднимите indexer.maxFiles, чтобы охватить всё дерево)","indexer.duplicates":"Дубликаты basename (проверьте, какой файл реально используется): {names}","indexer.stack_deps":"зависимости","indexer.stack_dev":"dev","indexer.stack_scripts":"скрипты","tool.friendly.project_map":"Карта проекта","config.decryption_warning":"Предупреждение: не удалось расшифровать конфигурацию: {error}","config.encryption_warning":"Предупреждение: не удалось зашифровать конфигурацию: {error}","config.migrate_start":"Миграция конфига в domain-формат...","config.migrate_done":"Миграция завершена. Создано {count} domain файлов. Legacy сохранён как config.json.bak.","config.migrate_no_legacy":"Legacy config.json не найден. Уже используется domain-формат.","config.migrate_error":"Ошибка миграции: {error}","config.legacy_hint":"Config: используется legacy config.json. Запустите \"mma config migrate\" для перехода к domain-формату.","config.parse_failed":"Предупреждение: не удалось разобрать {path} — используются значения по умолчанию. Исправьте или удалите файл, чтобы вернуть настройки.","image.source_required":"Укажите источник изображения: путь к файлу, URL или \"clipboard\".","image.clipboard_empty":"Буфер обмена не содержит изображение. Скопируйте изображение (например, скриншот через Win+Shift+S).","image.not_found":"Файл изображения не найден: {path}","image.no_context":"Менеджер контекста недоступен. Изображение можно прикрепить только во время активной сессии.","image.attached":"Изображение прикреплено из {source} ({size}). Оно будет включено в следующее сообщение.","image.error":"Не удалось загрузить изображение: {message}","tool.friendly.attach_image":"Прикрепить изображение","repl.image":"Прикрепить изображение","repl.image_usage":"/image <путь|URL|clipboard> — прикрепить изображение к следующему сообщению","tool.friendly.remember":"Запомнить","tool.friendly.recall":"Вспомнить","tool.remember.preference":"Запомнено: {key} = {value}","tool.remember.entry":"Запомнено: {category} — \"{entry}\"","tool.remember.key_required":"Для preferences требуется ключ (key)","tool.remember.entry_required":"Требуется текст записи","tool.recall.empty":"Ничего не найдено по \"{query}\"","tool.recall.no_memory":"Память пуста","tool.recall.search_results":"Результаты {category}:\n{results}","ctx.compactions":"сжатий: {count}","ctx.quality":"качество: {percent}%","ctx.delta_pos":"контекст +{tokens}","ctx.delta_neg":"контекст -{tokens} ↓","ctx.delta_zero":"контекст ±0","file.notfound_resolved":"Файл не найден: {path} (резолвится в {resolved})\nПуть был склеен с рабочей директорией, потому что в исходном виде он не существует. Выполни list_dir, чтобы найти корректный путь.","bash.echo_write_blocked":"Запись файлов через echo/printf ненадёжна в Windows cmd.exe (кавычки и многострочность ломаются). Используй инструмент write_file вместо этого (цель: {path}).","bash.cwd_flag_hint":"--cwd не стандартный флаг. Передай каталог через параметр \"workdir\" тула bash (например, workdir=\"{workdir}\").","bash.posix_workdir_hint":"workdir \"{workdir}\" — POSIX-путь, но это оболочка Windows cmd.exe. Используй Windows-путь или не указывай workdir, чтобы взять корень workspace ({baseDir}).","updater.check_error":"[updater] Ошибка проверки обновления: {error}","updater.available":"[updater] Доступно обновление: {current} → {latest}. Выполните `npm install -g micro-models-agent` для обновления.","updater.installing":"[updater] Установка {latest} глобально (текущая: {current})…","updater.installed":"[updater] Установлена {latest}. Перезапустите MMA для применения (была {current}).\n{changelog}","updater.install_failed":"[updater] Не удалось установить {latest}: {error}. Обновите вручную: `npm install -g micro-models-agent`.","cli.changelog_title":"Список изменений (micro-models-agent@{version}):","cli.changelog_not_found":"Changelog не найден для этой установки.","cli.changelog_range":"Изменения с версии {from}:","tools.enable_no_tags":"enable_tools требует хотя бы один тег в массиве \"tags\".","tools.enable_no_executor":"Исполнитель тулов недоступен — невозможно перечислить включённые тулы.","tools.enable_already_active":"Теги тулов уже активны: {tags}.","tools.enable_added":"Включены теги тулов: {tags}. Теперь доступны тулы: {tools}","tools.hidden_header":"Дополнительные тулы (включите по требованию через enable_tools или маршрутизируйте через subagent tool_tags):","tool.friendly.enable_tools":"Включить тулы","tool.friendly.set_thinking":"Уровень рассуждений","tool.thinking_set":"Уровень рассуждений: {level} ({reason})","tool.thinking_set_clamped":"Уровень рассуждений: {level} (ограничен конфигом, {reason})","tool.thinking_cooldown":"Override отложен ({remaining} итераций до доступа). Текущий: {current}","tool.thinking_invalid_level":"Неверный уровень рассуждений: {level}. Допустимые: none, low, high, max","reasoning.probe_failed":"Бэкенд не поддерживает управление reasoning effort. Динамическое управление отключено.","reasoning.mode_set":"Режим рассуждений: {mode}","reasoning.current":"Рассуждения: {level} ({mode})","reasoning.invalid_mode":"Неверный режим рассуждений: {mode}. Допустимые: auto, default, none, low, medium, high, max","cli.provider_base_hint":"Базовый URL установлен: {baseUrl}","cli.add_provider":"Добавить провайдера в конфиг","cli.provider_no_url":"Нет базового URL для провайдера \"{name}\". Укажите --url.","cli.provider_name_conflict":"Провайдер \"{name}\" уже существует — выбери другое имя.","cli.provider_added":"Провайдер добавлен: {name}","cli.provider_switch_hint":"Переключитесь на него: mma provider use <имя>","repl.cost":"Итого потрачено: {cost}","repl.cost_breakdown":"По провайдерам: {breakdown}","repl.tokens":"Потрачено токенов: {tokens}","repl.cache":"Кеш: {hit}% попаданий · сэкономлено {saved}","repl.cache_nosave":"Кеш: {hit}% попаданий","repl.prefix":"Префикс стабилен: {stable}% · сломалось: {cause}","cache.cause.system":"системный промпт","cache.cause.tools":"набор инструментов","cache.cause.history":"история","cache.cause.volatile":"волатильное содержимое","cache.cause.unknown":"неизвестно","cli.session_usage":"API-использование: {prompt} prompt + {completion} completion = {total} токенов","cli.session_cache":"Кеш: {hit}% попаданий ({cached} из кеша / {uncached} новых)","cli.usage":"Показать баланс/расход провайдера (OpenRouter)","cli.usage_unsupported":"Провайдер \"{provider}\" не отдаёт баланс по API. Это умеет только OpenRouter; OpenCode Zen/Go показывают его в веб-дашборде.","cli.usage_no_key":"Для активного провайдера не настроен API-ключ.","cli.usage_error":"Не удалось получить баланс: {error}","cli.usage_key_usage":"Расход по ключу: {usage}","cli.usage_key_limit":"Лимит ключа: {limit} · осталось {remaining}","cli.usage_balance":"Баланс: {balance}","cli.usage_account":"Аккаунт: куплено {credits} · израсходовано {used}","cli.usage_empty":"Провайдер не вернул данных о балансе.","repl.ctrl_c_interrupt":"\n[Ctrl+C] Остановка агента... (ещё раз — принудительно)","repl.force_exit":"\nПринудительный выход — фоновая очистка может быть неполной.","exec.stop_directive":"STOP. Step {stepId} (\"{description}\") took {iterations} iterations with no progress. DO NOT continue this step. Immediately call: plan_step step={stepId} status=done (if code works despite warnings) OR plan_step step={stepId} status=skipped note=\"reason\". Do NOT make any other tool calls before updating the plan.","exec.test_runner_fail":"[test-runner] {framework}: {failed} test(s) FAILING, {passed} passing — do NOT mark verification steps as done while tests fail. Investigate the failures, fix the code, then re-run the tests.","exec.test_runner_pass":"[test-runner] {framework}: all {passed} test(s) passing.","plan.subtasks_done":"All sub-tasks done — call plan_step step={stepId} status=done to complete this step.","plan.no_subtasks":"(no sub-tasks)","plan.step_label":"Step {stepId}: {description}","exec.hint_deps":"Check if a lock file exists (package-lock.json, poetry.lock). If missing, run the install command first.","exec.hint_test":"Make sure the source files exist and have real code before running tests.","exec.hint_build":"Check that all dependencies are installed and source files are not empty.","exec.hint_deploy":"Verify credentials and network access before deploying.","exec.hint_repetitive":"You are calling the same tool repeatedly with the same arguments. Try a different approach.","exec.hint_consecutive":"Multiple different tools are failing. Check if the environment is set up correctly.","exec.hint_read_only":"You have made many read-only tool calls (read_file/glob/grep/browser) without writing anything. Stop exploring — make the edit/write the task needs, or use the plan tool to decide next steps.","moe.replan_started":"🔄 Re-plan {cycle}/{max}: выполняю обновлённый план...","moe.executing":"⚙️ Выполняю {count} подзадач (цикл {cycle})...","moe.execution_complete":"Выполнение завершено: {succeeded}/{total} успешно","moe.cycles_exhausted":"Достигнут лимит re-plan циклов ({max}) — возвращаю частичные результаты","moe.partial_result":"Частичный результат","moe.planning":"🤖 Планирую в режиме MoE...\n","moe.plan_fallback":"⚠️ Валидация плана не прошла. Возврат к одиночному режиму.\n","moe.plan_autofixed":"🔧 Автоисправлено проблем плана: {count}.\n","moe.plan_failed":"План MoE не построен: {error} — возврат к одиночному режиму","moe.no_orchestrator":"MoE включён, но нет доступной модели планировщика или провайдера — возврат к одиночному режиму. Настройте активный провайдер (или orchestrator.model).","moe.scope_approved":"🔓 Scope расширен для \"{subtask}\": {files}","moe.scope_rejected":"⛔ Запрос scope отклонён для \"{subtask}\"","prompt.overflow.compressing":"Переполнение системного промпта: сжимаю {count} блок(ов) перед первым запуском — на локальной модели это может занять время.","prompt.overflow.summarizing":"Переполнение системного промпта: суммаризирую \"{label}\" ({original} токенов → бюджет {budget} токенов) моделью…","prompt.overflow.truncating":"Переполнение системного промпта: обрезаю \"{label}\" ({original} токенов) — суммаризация недоступна.","prompt.overflow.summarize_failed":"Переполнение системного промпта: не удалось суммаризировать \"{label}\": {error} — перехожу к обрезке.","prompt.overflow.hint_needed":"промпту нужно ~{needed} токенов системного бюджета (сейчас: {window} × {fraction} = {budget})","prompt.overflow.hint_window":"подними contextWindow минимум до {required} (стандартный размер {recommended}) — {how}","prompt.overflow.hint_fraction":"или оставь окно и подними contextBudget.systemPrompt до ~{fraction} (выполни: mma context --system {fraction})","prompt.overflow.exceeded":"Промпт переполнен: системному промпту нужно ~{needed} токенов (бюджет {budget} токенов); \"{label}\" ({original} токенов) было {mode} до {resolved} токенов. Чтобы включить всё полностью, {hint}.","prompt.overflow.failed":"Не удалось разрешить переполнение промпта: {error} — слишком большие блоки будут отброшены.","prompt.overflow.startup":"Проверка при старте: системному промпту нужно ~{needed} токенов (бюджет: {budget} токенов); {block} ({original} токенов) будет суммаризован/обрезан перед первым запуском. Чтобы включить всё полностью, {hint}.","tool.session_info.no_active":"Нет активной сессии","tool.session_info.result":"Сессия: \"{name}\" ({id})\nМодель: {model}\nПровайдер: {provider}\nКонтекстное окно: {contextWindow} токенов\nСообщений: {messages}\nСоздана: {createdAt}\nОбновлена: {updatedAt}","tool.session_info.context":"Использовано контекста: {used} / {budget} токенов ({percent}%)","tool.friendly.session_info":"Информация о сессии","cli.map.description":"Работа с индексом / картой проекта","cli.map.action":"Действие: summary (по умолчанию), refresh, find","cli.map.query":"Поисковый запрос для действия find","repl.map":"Показать карту проекта / индекс (summary, refresh, find)","repl.map_usage":"Использование: /map [summary|refresh|find <запрос>]","map.refreshed":"Карта проекта обновлена","map.find_usage":"Использование: map find <запрос>","web.topbar.new_chat":"новый чат","web.topbar.settings":"настройки","web.topbar.all_sessions":"все сессии","web.topbar.sidebar":"сайдбар","web.topbar.close":"закрыть","web.sessbar.prev":"предыдущая сессия","web.sessbar.next":"следующая сессия","web.conn.reconnecting":"переподключение…","web.i18n.stale":"переводы обновлены — перезапустите сервер","web.i18n.reload":"обновить страницу","web.sidebar.plan":"план","web.sidebar.session":"сессия","web.sidebar.usage":"использование","web.sidebar.env":"окружение","web.sidebar.tab_session":"Сессия","web.sidebar.tab_map":"Карта","web.sidebar.tab_trace":"Трассировка","web.sidebar.tab_lsp":"LSP","web.sidebar.tab_files":"Файлы","web.sidebar.lsp_what":"LSP — диагностика уровня редактора","web.sidebar.lsp_status":"статус","web.sidebar.lsp_enabled":"включён","web.sidebar.lsp_offline":"офлайн","web.sidebar.lsp_check":"Проверить","web.sidebar.lsp_checking":"проверяется…","web.sidebar.lsp_not_checked":"ещё не проверялось","web.sidebar.lsp_none":"серверы не настроены","web.sidebar.lsp_unavailable":"LSP недоступен","web.sidebar.lsp_via":"через","web.sidebar.lsp_via_global":"глобальный бинарник","web.sidebar.lsp_via_npx":"npx","web.sidebar.lsp_reason_ok":"ок","web.sidebar.lsp_reason_disabled":"отключён","web.sidebar.lsp_reason_not_applicable":"нет подходящих файлов","web.sidebar.lsp_reason_binary_missing":"бинарник не найден","web.sidebar.lsp_reason_offline":"офлайн — поставьте бинарник","web.sidebar.lsp_reason_network":"сеть — не удалось скачать сервер","web.sidebar.lsp_reason_timeout":"таймаут (initialize)","web.sidebar.lsp_reason_spawn_failed":"не удалось запустить процесс","web.sidebar.lsp_reason_server_error":"ошибка сервера","web.sidebar.lsp_reason_deadline":"пропущен (дедлайн)","web.sidebar.lsp_info":"Информация и настройка","web.sidebar.lsp_switch_enabled":"LSP включён","web.sidebar.lsp_switch_offline":"Офлайн (только глобальные бинарники)","web.sidebar.lsp_offline_hint":"Офлайн-режим не использует npx — поставьте серверы ниже глобально.","web.sidebar.lsp_install_title":"Установка вручную","web.sidebar.lsp_copy":"копировать","web.sidebar.lsp_copied":"скопировано","web.sidebar.lsp_busy":"дождитесь окончания хода","web.sidebar.map_status":"статус","web.sidebar.map_ready":"готово","web.sidebar.map_indexing":"индексация…","web.sidebar.map_stale":"устарело","web.sidebar.map_updated":"обновлено","web.sidebar.map_never":"никогда","web.sidebar.map_today":"сегодня, {time}","web.sidebar.map_watcher":"вотчер","web.sidebar.map_on":"вкл.","web.sidebar.map_off":"выкл.","web.sidebar.map_files":"файлы","web.sidebar.map_symbols":"символы","web.sidebar.map_tokens":"токены","web.sidebar.map_root":"корень","web.sidebar.map_languages":"языки","web.sidebar.map_reindex":"Переиндексировать","web.sidebar.map_reindexing":"переиндексация…","web.sidebar.map_reindex_failed":"не удалось переиндексировать","web.sidebar.trace_empty":"событий пока нет","web.sidebar.trace_turn":"ход {n}","web.sidebar.trace_text":"печатает… {count} симв.","web.sidebar.trace_plan":"обновление плана","web.sidebar.trace_question":"вопрос","web.sidebar.trace_status":"статус","web.sidebar.trace_log":"лог · {level}","web.sidebar.trace_retract":"черновик отозван","web.sidebar.trace_index":"индекс · {phase}","web.sidebar.trace_critic":"критик · {status}","web.sidebar.trace_moe":"moe","web.sidebar.trace_compaction":"компакция","web.sidebar.trace_probe":"проба контекста","web.sidebar.trace_usage":"расход llm","web.sidebar.trace_audit":"аудит","web.sidebar.trace_claim":"перепроверка · {kind}","web.sidebar.trace_output":"вывод","web.sidebar.detail_metadata":"метаданные","web.sidebar.detail_arguments":"аргументы","web.sidebar.detail_output":"вывод","web.sidebar.detail_error":"ошибка","web.sidebar.detail_text":"текст","web.sidebar.detail_plan":"план","web.sidebar.detail_reasoning":"размышление","web.sidebar.detail_status":"статус","web.sidebar.detail_ok":"ok","web.sidebar.detail_fail":"ошибка","web.sidebar.detail_duration":"длительность","web.sidebar.detail_time":"время","web.sidebar.detail_tool_call":"вызов тула","web.sidebar.detail_session":"сессия","web.sidebar.detail_turn":"ход","web.sidebar.detail_iteration":"итерация","web.sidebar.detail_provenance":"сверка с логом","web.sidebar.detail_provenance_count":"assistant-сообщений в логе: {n}","web.env.dir":"директория","web.env.agents":"AGENTS.md","web.env.map":"карта","web.env.agents_disabled":"отключён","web.env.agents_none":"не найден","web.env.map_not_indexed":"не проиндексирована","web.env.files_one":"{count} файл","web.env.files_few":"{count} файла","web.env.files_many":"{count} файлов","web.env.symbols_one":"{count} символ","web.env.symbols_few":"{count} символа","web.env.symbols_many":"{count} символов","web.env.tokens_one":"~{count} токен","web.env.tokens_few":"~{count} токена","web.env.tokens_many":"~{count} токенов","web.usage.session":"сессия","web.usage.copy_id":"скопировать ID сессии","web.usage.model":"модель","web.usage.context":"контекст","web.usage.cache":"кеш","web.usage.cost":"стоимость","web.usage.compactions":"сжатия","web.usage.part_system":"инструкции","web.usage.part_tools":"инструменты","web.usage.part_history":"диалог","web.usage.part_reserve":"резерв ответа","web.usage.part_free":"свободно","web.usage.quality":"качество","web.usage.probe":"проб","web.usage.probe_loaded":"загружено {actual}","web.usage.probe_low":"загружено {actual} · настроено {configured}","web.start.label":"старт:","web.start.session":"сессия","web.turn.tools":"{count} инструментов","web.question.custom":"свой ответ…","web.question.custom_send":"отправить","config.key.model":"модель","config.key.provider.active":"активный провайдер","config.key.contextWindow":"окно контекста","config.key.contextBudget.systemPrompt":"доля системного промпта","config.key.contextBudget.responseReserve":"резерв ответа","config.key.showReasoning":"показывать рассуждения","config.key.reasoning.mode":"режим рассуждений","config.key.ui.verbosity":"подробность","config.key.maxToolIterations":"макс. итераций тулов","config.key.stuckThreshold":"порог застревания","config.key.moe.enabled":"MoE","config.key.moe.maxReplanCycles":"циклы re-plan MoE","config.key.orchestrator.model":"модель планировщика","config.key.orchestrator.provider":"провайдер планировщика","config.key.orchestrator.contextWindow":"окно контекста планировщика","config.key.critic.enabled":"проверяющий (критик)","config.key.critic.model":"модель критика","config.key.critic.provider":"провайдер критика","config.key.critic.tools":"проверки критика","config.key.critic.maxCalls":"макс. вызовов критика","config.key.critic.maxRepairCycles":"циклы исправления критика","config.key.critic.timeoutMs":"таймаут критика (мс)","config.key.logLevel":"уровень логов","config.key.locale":"язык","config.key.version":"версия","config.key.security.enabled":"безопасность","config.key.security.paths.enabled":"ограничить пути файлов","config.key.security.contentScan.enabled":"сканировать содержимое файлов","config.key.security.sessionEncryption.enabled":"шифровать файлы сессий","config.enum.silent":"тихо","config.enum.error":"ошибки","config.enum.warn":"предупреждения","config.enum.info":"инфо","config.enum.debug":"отладка","config.enum.quiet":"тихо","config.enum.normal":"обычно","config.enum.verbose":"подробно","config.enum.auto":"авто","config.enum.rg":"ripgrep","config.enum.grep":"grep","config.enum.js":"встроенный JS","config.enum.default":"по умолчанию","config.enum.off":"выкл.","config.enum.ledger":"леджер тулов","config.enum.line":"строка","config.enum.meta":"в подсказках","config.enum.full":"во всю ширину","config.enum.compact":"компактный","config.enum.legacy":"legacy","config.enum.v2":"v2","config.enum.comfortable":"обычный","config.enum.large":"крупный","config.enum.none":"нет","config.enum.low":"низкий","config.enum.medium":"средний","config.enum.high":"высокий","config.enum.max":"максимум","config.enum.en":"английский","config.enum.ru":"русский","config.enum.security_block":"блокировка безопасности","config.enum.bash_command":"bash-команда","config.enum.file_operation":"операция с файлом","config.enum.network_request":"сетевой запрос","config.enum.tool_call":"вызов инструмента","config.enum.authentication":"аутентификация","config.enum.configuration_change":"изменение конфигурации","config.enum.session_start":"старт сессии","config.enum.session_end":"конец сессии","web.settings.title":"настройки","web.settings.general":"Общие","web.settings.model":"Модель и провайдер","web.settings.context":"Контекст","web.settings.reasoning":"Рассуждения","web.settings.agent":"Агент","web.settings.network":"Сеть","web.settings.browser":"Браузер","web.settings.sessions":"Сессии","web.settings.ui":"Интерфейс и тема","web.settings.memory":"Память","web.settings.skills":"Навыки","web.settings.plugins":"Плагины · MCP","web.settings.security":"Безопасность","web.settings.advanced":"Дополнительно","web.settings.search_placeholder":"поиск по настройкам","web.settings.search_empty":"ничего не найдено","web.settings.table_invalid":"сначала заполните обязательные поля ({field})","web.settings.sec.general.interface":"Интерфейс","web.settings.sec.general.agent":"Цикл агента","web.settings.sec.general.agent.desc":"Как долго и настойчиво агент работает до остановки.","web.settings.sec.general.provider":"Провайдеры","web.settings.sec.model.tuning":"Производительность","web.settings.sec.model.tuning.desc":"Лимит токенов ответа и загрузка модели в память.","web.settings.sec.model.capabilities":"Возможности","web.settings.sec.model.capabilities.desc":"Ручные переопределения vision/tools, если определение модели ошибается.","web.settings.sec.context.window":"Окно контекста","web.settings.sec.context.window.desc":"Общее окно и его деление между системным промптом, ответом и историей.","web.settings.sec.context.compaction":"Сжатие","web.settings.sec.context.compaction.desc":"Когда старая история сворачивается в сводку для освобождения места.","web.settings.sec.context.instructions":"Инструкции","web.settings.sec.context.instructions.desc":"Что делать, если AGENTS.md или карта проекта не влезают в промпт.","web.settings.sec.context.indexer":"Индекс проекта","web.settings.sec.context.indexer.desc":"Как строится карта проекта: лимит файлов и учёт .gitignore.","web.settings.sec.context.log":"Журнал контекста","web.settings.sec.context.log.desc":"Записывать каждый промпт в файл диффов рядом с сессией.","web.settings.sec.reasoning.display":"Показ","web.settings.sec.reasoning.effort":"Глубина","web.settings.sec.reasoning.effort.desc":"Авто выбирает уровень на каждом шаге внутри диапазона; ручной режим его отключает.","web.settings.sec.agent.moe":"Смесь экспертов","web.settings.sec.agent.moe.desc":"Делит работу на подзадачи экспертов через планировщик; медленнее, но сильнее на многошаговых задачах.","web.settings.sec.agent.critic":"Критик","web.settings.sec.agent.critic.desc":"Второй проход, проверяющий работу агента перед ответом.","web.settings.sec.agent.tools":"Инструменты и навыки","web.settings.sec.agent.tools.desc":"Какие инструменты видны сразу и сколько промпта могут занять навыки.","web.settings.sec.agent.subagent":"Субагенты","web.settings.sec.agent.subagent.desc":"Как возвращаются результаты субагентов и как они распараллеливаются.","web.settings.sec.agent.hallucination":"Проверка галлюцинаций","web.settings.sec.agent.hallucination.desc":"Проверять ответ на связность перед показом.","web.settings.sec.network.web":"Веб-поиск","web.settings.sec.network.web.desc":"Главный выключатель инструмента web_search.","web.settings.sec.network.error":"Автопоиск по ошибке","web.settings.sec.network.error.desc":"Искать в интернете, когда одна и та же ошибка повторяется.","web.settings.sec.browser.main":"Браузер","web.settings.sec.browser.limits":"Лимиты","web.settings.sec.browser.limits.desc":"Ограничения, чтобы снимок страницы влезал в контекст.","web.settings.sec.browser.viewport":"Окно и таймауты","web.settings.sec.sessions.main":"Сессии","web.settings.sec.sessions.main.desc":"Сохранение, имена и сколько прошлых сессий хранить.","web.settings.sec.sessions.isolation":"Изоляция","web.settings.sec.sessions.isolation.desc":"Держать плагины и временные файлы отдельно для каждой сессии.","web.settings.sec.ui.chat":"Вывод в чат","web.settings.sec.ui.chat.desc":"Строки статуса, прогресс и метры контекста в ленте чата.","web.settings.sec.ui.images":"Изображения тулов","web.settings.sec.ui.images.desc":"Хранение снимков браузера и вложенных картинок по сессиям.","web.settings.sec.ui.theme":"Тема","web.settings.sec.ui.theme.desc":"Цветовая схема веб-интерфейса. Хранится в браузере, а не в файле конфигурации.","web.settings.sec.memory.add":"Добавить заметку","web.settings.memory_add_title":"новая запись памяти","config.field.name":"имя","config.field.model":"модель","config.field.tool_tags":"теги инструментов","config.field.max_attempts":"попытки","config.field.description":"описание","config.field.input":"вход $/1M","config.field.output":"выход $/1M","config.field.cachedInput":"кеш $/1M","config.field.cacheWrite":"запись $/1M","config.field.vision":"изображения","config.field.tools":"инструменты","web.settings.sec.security.switches":"Переключатели","web.settings.sec.security.switches.desc":"Главные выключатели по каждой защите. Выключение отключает всю группу ниже.","web.settings.sec.security.limits":"Лимиты","web.settings.sec.security.limits.desc":"Ограничения глубины, объёма и частоты для активности инструментов.","web.settings.sec.security.bash":"Правила bash","web.settings.sec.security.bash.desc":"Команды, флаги и операторы, которые bash-тул отклоняет.","web.settings.sec.security.paths":"Правила путей","web.settings.sec.security.paths.desc":"Glob-шаблоны запрещённых путей или, если задано, единственно разрешённых.","web.settings.sec.security.network":"Правила сети","web.settings.sec.security.network.desc":"Заблокированные домены или, если задано, единственно разрешённые.","web.settings.sec.security.scan":"Сканирование контента","web.settings.sec.security.scan.desc":"Шаблоны, которые ищутся в содержимом файлов перед записью.","web.settings.sec.security.audit":"Журнал аудита","web.settings.sec.security.audit.desc":"Отправлять события безопасности в файл или вебхук.","web.settings.sec.security.encryption":"Шифрование сессий","web.settings.sec.security.encryption.desc":"Шифровать историю чата и журнал сессии на диске.","web.settings.sec.security.access":"Доступ","web.settings.sec.advanced.diagnostics":"Диагностика","web.settings.sec.advanced.diagnostics.desc":"Подробность логов и установленная версия.","web.settings.sec.advanced.retry":"Повторы","web.settings.sec.advanced.retry.desc":"Пауза между повторами упавших или зависших запросов к провайдеру.","web.settings.sec.advanced.service":"Сервис","web.settings.sec.advanced.service.desc":"Учёт стоимости, цены и фоновая проверка обновлений.","web.settings.sec.plugins.lsp":"LSP","web.settings.sec.plugins.lsp.desc":"Диагностика уровня редактора; офлайн-режим запускает установленные бинарники без npx.","web.settings.add":"добавить","web.settings.forget":"забыть","web.settings.search":"поиск","web.settings.saved":"сохранено","web.settings.save_failed":"не удалось сохранить","web.settings.use":"использовать","web.settings.active":"активен","web.settings.active_check":"активен ✓","web.settings.search_models":"поиск моделей…","web.settings.no_models":"провайдер не сообщил моделей","web.settings.no_matches":"нет совпадений","web.settings.active_provider":"активный провайдер","web.settings.add_provider":"добавить провайдера","web.settings.section_models":"Модель","web.settings.section_providers":"Провайдеры","web.settings.provider_add_title":"добавить провайдера","web.settings.provider_preset":"шаблон","web.settings.provider_custom":"свой / локальный","web.settings.provider_name_conflict":"провайдер с таким именем уже существует — выбери другое имя","web.settings.provider_edit_title":"изменить провайдера","web.settings.provider_advanced":"дополнительно","web.settings.provider_make_active":"сделать активным","web.settings.providers_empty":"провайдеры не настроены","web.settings.edit":"изменить","web.settings.delete":"удалить","web.settings.cancel":"отмена","web.settings.save":"сохранить","web.settings.delete_failed":"не удалось удалить","web.settings.provider_type":"тип","web.settings.provider_label_field":"метка","web.settings.provider_baseurl":"base URL","web.settings.provider_baseurl_custom":"свой URL…","web.settings.provider_apikey":"API-ключ","web.settings.provider_key_keep":"оставь пустым, чтобы сохранить","web.settings.provider_context":"окно контекста","web.settings.provider_priority":"приоритет","web.settings.provider_rpm":"запросов / мин","web.settings.provider_parallel":"макс. параллельно","web.settings.provider_max_tokens":"макс. токенов ответа","web.settings.provider_cache_mechanism":"механизм кеша","web.settings.provider_cache_report":"формат отчёта кеша","web.settings.provider_cache_flags":"флаги кеша","web.settings.provider_retry":"повторы","web.settings.provider_retry_max":"макс. повторов","web.settings.provider_retry_base":"базовая задержка (мс)","web.settings.provider_retry_maxdelay":"макс. задержка (мс)","web.settings.provider_flag.sessionHeader":"заголовок x-opencode-session","web.settings.provider_flag.requestCachePrompt":"cache_prompt (llama.cpp)","web.settings.provider_flag.requestPromptCacheKey":"prompt_cache_key (OpenAI)","web.settings.provider_flag.requestSessionId":"session_id (OpenRouter)","web.settings.provider_flag.requestCacheControl":"cache_control (Anthropic)","web.settings.provider_flag.requestStreamUsage":"usage-чанк в стриме","web.settings.provider_required":"тип и base URL обязательны","web.settings.provider_invalid":"некорректное числовое значение","web.settings.provider_active_guard":"нельзя удалить активного провайдера — сначала переключись","web.settings.builtin":"встроенный","web.settings.plugins_note":"плагины загружаются из ~/.mma/plugins и <project>/.mma/plugins; включай или отключай их, добавляя или удаляя файл плагина там (применится при следующем запуске).","web.settings.mcp_enable":"включить","web.settings.mcp_disable":"отключить","web.settings.mcp_saved":"сохранено · применится при следующем запуске","web.settings.mcp_note":"изменения MCP-серверов сохраняются в конфиг и применяются при следующем запуске.","web.settings.theme":"тема","web.settings.security_note":"защищённые пути, ограниченный режим и веб-токен настраиваются мастером в терминале.","web.settings.web_token":"веб-токен","web.settings.web_token_none":"не задан","web.settings.terminal_tag":"терминал","web.settings.memory_unavailable":"память недоступна","web.settings.new_memory":"новая запись памяти…","web.settings.memory_category":"категория памяти","web.settings.add_failed":"не удалось добавить","web.settings.search_memory":"поиск по памяти…","web.settings.forget_failed":"не удалось забыть","web.settings.preferences":"предпочтения","web.settings.no_memory":"нет записей в памяти","web.settings.skills_unavailable":"навыки недоступны","web.settings.no_skills":"навыки не найдены","web.settings.enabled":"включён","web.settings.available":"доступен","web.settings.plugins_unavailable":"плагины недоступны","web.settings.plugins_header":"плагины","web.settings.no_plugins":"плагины не зарегистрированы","web.settings.disabled":"отключён","web.settings.mcp_servers":"MCP-серверы","web.settings.no_mcp":"MCP-серверы не настроены","web.settings.mcp_add":"добавить MCP-сервер","web.settings.mcp_edit_title":"править MCP-сервер","web.settings.mcp_required":"нужны имя и command (stdio) или URL (sse/http)","web.settings.mcp_invalid":"неверное значение: timeout 1000–300000 мс, args/env/headers — JSON","web.settings.lsp_servers":"LSP-серверы","web.settings.no_lsp":"LSP-серверы не настроены","web.settings.lsp_note":"изменения LSP сохраняются в конфиг и применяются при следующем запуске.","web.settings.lsp_unavailable":"LSP недоступен","web.settings.loading":"загрузка…","web.input.placeholder":"ввод сообщения… (/ — команды)","web.input.enter":"Enter — отправить","web.input.shift_enter":"Shift+Enter — новая строка","web.input.esc":"Esc — стоп","web.input.attach":"Ctrl+V — вложить","web.input.send":"отправить","web.input.stop":"остановить","web.input.queued":"в очереди · позиция {n}","web.input.queue_full":"очередь сообщений полна — дождись конца хода","web.tab.working":"работает","web.tab.waiting":"ждёт вас","web.tab.queued":"в очереди","web.tab.failed":"ошибка","web.tab.gone":"удалена","web.session.gone":"сессия удалена или недоступна — закройте вкладку","web.empty.title":"новый чат","web.message_empty":"Сначала введи сообщение.","web.empty.hint":"введи сообщение ниже · / — команды · модель и контекст выбираются над полем","web.attach.title":"прикрепить изображение","web.attach.remove":"удалить","web.attach.only_images":"можно прикреплять только изображения","web.attach.too_many":"слишком много изображений (максимум {max})","web.attach.too_large":"изображение слишком большое (максимум 50 МБ)","web.attach.invalid":"некорректное изображение","web.attach.read_failed":"не удалось прочитать изображение","web.sessions.active":"активные","web.sessions.recent":"недавние","web.sessions.new":"+ новая сессия","web.sessions.refresh":"↻ обновить","web.sessions.none_active":"— нет активной сессии —","web.sessions.none":"— нет —","web.sessions.delete":"удалить","web.sessions.search":"поиск сессий…","web.sessions.create_failed":"не удалось создать сессию","web.sessions.delete_failed":"не удалось удалить","web.sessions.confirm_title":"Удалить сессию?","web.sessions.confirm_body":"«{name}» будет удалена безвозвратно. Действие необратимо.","web.sessions.active_guard":"нельзя удалить активную сессию — сначала переключитесь","web.selectors.model":"модель","web.selectors.provider":"провайдер","web.selectors.context":"контекст","web.selectors.reasoning":"рассуждения","web.selectors.switch_busy":"переключение уже идёт, подождите","web.selectors.reasoning_off":"выкл (бэкенд игнорирует)","web.selectors.no_models":"нет моделей","web.selectors.search_models":"поиск моделей…","web.selectors.refresh_list":"↻ обновить список","web.selectors.custom":"другое…","web.selectors.current":"текущее","web.selectors.context_prompt":"контекстное окно (токены)","web.rail.working":"выполняю","web.rail.composing":"пишу","web.rail.no_plan":"без плана","web.rail.step_of":"шаг {cur}/{total}","web.rail.last":"последнее:","web.rail.none":"—","web.rail.tools_one":"{count} тул","web.rail.tools_few":"{count} тула","web.rail.tools_many":"{count} тулов","web.rail.events_one":"{count} событие","web.rail.events_few":"{count} события","web.rail.events_many":"{count} событий","web.action.thinking":"думаю","web.action.hide":"скрыть","web.action.show":"показать","web.action.actions_one":"{count} действие","web.action.actions_few":"{count} действия","web.action.actions_many":"{count} действий","web.action.cancel":"отмена","web.cmdk.label":"команды","web.command.help":"список веб-команд","web.command.status":"модель · провайдер · контекст · сессия · детализация","web.command.config":"прочитать или записать ключ конфига","web.command.model":"показать модели или переключить модель","web.command.provider":"показать провайдеры или переключить провайдер","web.command.reasoning":"показ рассуждений и уровень","web.command.verbose":"уровень детализации UI","web.command.context":"показать или задать окно контекста","web.command.security":"показать флаги безопасности или записать ключ","web.security.unknown_sub":"неизвестная подкоманда: security {sub}","web.command.session":"показать сессии или активировать сессию","web.command.export":"экспорт активной сессии в файл","web.command.memory":"просмотр и правка глобальной памяти","web.command.clear":"очистить ленту (в браузере)","web.command.new":"новая вкладка чата (в браузере)","web.turn.stopped":"остановлено","web.turn.failed":"ход не удался","web.turn.end":"ход завершён · ok · инструментов {count}","web.plan.none":"нет активного плана","web.plan.heading_one":"План · {count} шаг","web.plan.heading_few":"План · {count} шага","web.plan.heading_many":"План · {count} шагов","web.history.loading":"загрузка…","web.history.unavailable":"— история недоступна","web.history.empty":"— пустая сессия —","web.scroll.latest":"к новому","web.tool.output_one":"вывод · {count} символ","web.tool.output_few":"вывод · {count} символа","web.tool.output_many":"вывод · {count} символов","web.tool.collapse":"свернуть","web.code.copy":"копировать","web.code.copied":"скопировано","web.code.copy_failed":"не скопировано","web.msg.copy":"копировать","web.msg.copy_md":"копировать как markdown","web.card.open_title":"Предпросмотр во вкладке браузера","web.card.copy_title":"Скопировать путь в рабочей папке","web.card.drawio_hint":"Диаграмма draw.io — это XML: предпросмотр покажет код, схему смотри в draw.io / VS Code.","web.card.files_one":"{count} файл","web.card.files_few":"{count} файла","web.card.files_many":"{count} файлов","web.card.screenshot":"снимок экрана","web.card.attached_image":"прикреплённое изображение","web.card.browser_viewport":"браузер · область просмотра","web.card.image_removed":"снимок удалён (ротация)","web.lightbox.close":"Закрыть","web.lightbox.open_tab":"Открыть в новой вкладке","web.lightbox.copy":"Скопировать ссылку","web.lightbox.copied":"Ссылка скопирована","web.question.placeholder":"введи ответ…","web.question.send":"отправить","web.question.answered":"отвечено","web.question.multi_hint":"выбери один или несколько","web.misc.command_unavailable":"команда недоступна","web.file.error.missing_path":"Не указан путь к файлу.","web.file.error.outside_workspace":"Файл вне рабочей папки агента — открыть нельзя.","web.file.error.protected_path":"Файл защищён (секреты/VCS) — открыть нельзя.","web.file.error.too_large":"Файл слишком большой для показа в браузере (максимум {limit} байт).","web.file.error.binary_file":"Похоже на бинарный файл — текстом показать нельзя, скачай кнопкой «Скачать».","web.file.error.not_found":"Файл не найден (возможно, это папка или он удалён).","web.file.error.workspace_unavailable":"Рабочая папка не открыта.","web.files.empty":"Файлов нет.","web.files.loading":"Загрузка…","web.files.error":"Не удалось загрузить дерево файлов.","web.files.truncated":"Слишком много записей — список усечён.","web.files.attach":"Прикрепить путь","web.files.open_failed":"Не удалось открыть файл.","web.files.no_workspace":"Рабочая папка не открыта.","web.files.close":"Закрыть","config.desc.model":"Модель основного агента.","config.desc.provider.active":"Какой из настроенных провайдеров используется.","config.desc.contextWindow":"Общий размер контекста в токенах (системный промпт + история + резерв).","config.desc.contextBudget.systemPrompt":"Доля контекста под системный промпт (например, 10%).","config.desc.contextBudget.responseReserve":"Доля контекста, зарезервированная под ответ модели.","config.desc.showReasoning":"Показывать рассуждения модели в чате.","config.desc.reasoning.mode":"Когда запрашивать/показывать рассуждения (auto — по модели).","config.desc.ui.verbosity":"Насколько подробно чат показывает действия и тулы.","config.desc.maxToolIterations":"Жёсткий лимит итераций вызова тулов за ход.","config.desc.stuckThreshold":"Сколько повторяющихся одинаковых действий до подсказки сменить подход.","config.desc.moe.enabled":"Agent-level MoE: план → параллельные эксперты → проверка (через orchestrator-провайдер).","config.desc.moe.maxReplanCycles":"Максимум циклов план→исполнение→проверка до принятия частичного результата.","config.desc.critic.enabled":"Проверяющий в петле: ревью работы при мутациях и перед завершением.","config.desc.critic.model":"Отдельная модель проверяющего (пусто = активная модель).","config.desc.critic.provider":"Отдельный провайдер проверяющего (пусто = активный провайдер).","config.desc.critic.tools":"Разрешить критику ограниченные read-only проверки файлов перед финальным вердиктом.","config.desc.critic.maxCalls":"Жёсткий лимит LLM-вызовов критика за прогон.","config.desc.critic.maxRepairCycles":"Ограниченные циклы исправления по критическому вердикту.","config.desc.critic.timeoutMs":"Таймаут вызова критика (fail-open).","config.desc.logLevel":"Подробность диагностических логов.","config.desc.locale":"Язык интерфейса и сообщений агента.","config.desc.version":"Установленная версия MMA.","config.desc.security.enabled":"Главный выключатель модуля безопасности (проверки путей, сканы, лимиты).","config.desc.security.paths.enabled":"Ограничивать файловые операции рабочей папкой и блокировать пути вне неё.","config.desc.security.contentScan.enabled":"Проверять содержимое файлов на опасные паттерны перед записью.","config.desc.security.sessionEncryption.enabled":"Шифровать сохранённые логи сессий на диске.","config.desc.webToken":"Токен для доступа к веб-UI не с localhost (задаётся через --token / MMA_WEBUI_TOKEN).","web.setup.title":"Настройка MMA","web.setup.subtitle":"Несколько коротких вопросов перед началом.","web.setup.step.language":"Язык","web.setup.step.provider":"Провайдер","web.setup.step.key":"Ключ","web.setup.step.model":"Модель","web.setup.step.context":"Контекст","web.setup.step.security":"Безопасность","web.setup.step.review":"Проверка","web.setup.language.title":"Выберите язык","web.setup.language.hint":"Используется для интерфейса.","web.setup.provider.title":"Выберите провайдера","web.setup.provider.hint":"Для локальной модели выберите OpenAI-совместимый вариант, просканируйте сервер и проверьте подключение перед продолжением.","web.setup.provider.base_url":"Базовый URL","web.setup.provider.scan":"Найти локальные серверы","web.setup.provider.scan_found_one":"Найден {count} сервер","web.setup.provider.scan_found_few":"Найдено {count} сервера","web.setup.provider.scan_found_many":"Найдено {count} серверов","web.setup.provider.scan_none":"Локальные серверы не найдены — введите URL вручную.","web.setup.provider.scan_failed":"Сканирование не удалось. Введите URL вручную.","web.setup.provider.required":"Укажите базовый URL.","web.setup.provider.test":"Проверить подключение","web.setup.provider.testing":"Проверка…","web.setup.provider.test_ok":"Сервер отвечает.","web.setup.provider.test_fail":"Не удалось связаться с сервером по этому URL.","web.setup.key.title":"API-ключ","web.setup.key.hint":"Для локальных серверов можно оставить пустым. Хранится только в файле конфигурации и больше не показывается.","web.setup.key.label":"Ключ","web.setup.key.placeholder":"sk-…","web.setup.model.title":"Выберите модель","web.setup.model.hint":"Загрузите список у провайдера или введите имя модели.","web.setup.model.name":"Имя модели","web.setup.model.load":"Загрузить модели","web.setup.model.load_found_one":"Загружена {count} модель","web.setup.model.load_found_few":"Загружено {count} модели","web.setup.model.load_found_many":"Загружено {count} моделей","web.setup.model.load_none":"Модели не получены — введите имя вручную.","web.setup.model.test":"Проверить подключение","web.setup.model.testing":"Проверка…","web.setup.model.test_ok":"Подключение работает.","web.setup.model.test_fail":"Не удалось связаться с моделью.","web.setup.model.required":"Выберите или введите модель.","web.setup.context.title":"Контекст и итерации","web.setup.context.hint":"Должно совпадать с контекстом, который провайдер выделяет этой модели. Нажмите «Определить» либо сверьтесь с LM Studio / Ollama / документацией провайдера.","web.setup.context.contextWindow":"Окно контекста (токены)","web.setup.context.maxToolIterations":"Максимум итераций тулов","web.setup.context.required":"Введите положительное число.","web.setup.context.detect":"Определить у провайдера","web.setup.context.detecting":"Определение…","web.setup.context.detect_ok":"Контекст от провайдера: {count} токенов.","web.setup.context.detect_fail":"Не удалось определить контекст — введите вручную.","web.setup.security.title":"Безопасность","web.setup.security.hint":"Безопасные значения включены; отключайте только нужное. Ничего не блокируется молча — каждый переключатель лишь требует подтверждения перед опасным действием.","web.setup.security.paths":"Ограничить доступ к файлам рабочей папкой","web.setup.security.paths_desc":"Агент читает и пишет только внутри рабочей папки, а перед доступом к .git, .env, ключам и другим чувствительным путям спросит подтверждения.","web.setup.security.bash":"Блокировать опасные shell-команды","web.setup.security.bash_desc":"Блокирует разрушительные команды (rm, sudo, ssh, curl, shutdown, …). Вместо запуска агент спросит подтверждения.","web.setup.security.flags":"Блокировать опасные флаги команд","web.setup.security.flags_desc":"Блокирует рискованные флаги (--force, -rf, …), которые делают безопасные команды опасными. Работает вместе с блокировкой команд.","web.setup.security.configure":"Настроить","web.setup.security.advanced":"Расширенные настройки безопасности","web.setup.security.popup_hint":"По одному элементу в строке. Пустой список = выключено. Изменения применяются только к этой установке; позже их можно править в Настройках → Безопасность.","web.setup.security.popup_done":"Готово","web.setup.security.reset":"Сбросить к значениям по умолчанию","web.setup.security.denied":"Всегда запрещённые пути","web.setup.security.allowed":"Разрешены только эти пути (пусто = все, кроме запрещённых)","web.setup.security.blacklist":"Всегда блокируемые команды","web.setup.security.whitelist":"Разрешены только эти команды (пусто = все, кроме блокируемых)","web.setup.security.log_commands":"Писать каждую выполненную команду в аудит-лог","web.setup.security.dangerous_flags":"Блокируемые флаги команд","web.setup.security.dangerous_operators":"Блокируемые shell-операторы","web.setup.security.network_enabled":"Сетевая защита (блокировать приватные/внутренние адреса)","web.setup.security.denied_domains":"Всегда запрещённые домены","web.setup.security.allowed_domains":"Разрешены только эти домены (пусто = все, кроме запрещённых)","web.setup.security.request_timeout":"Таймаут сетевых запросов (мс)","web.setup.security.max_response_size":"Максимум размера ответа (байты)","web.setup.security.max_recursion":"Максимум глубины рекурсии субагентов","web.setup.security.max_file_ops":"Максимум файловых операций за сессию","web.setup.security.rate_rpm":"Максимум LLM-запросов в минуту","web.setup.security.rate_parallel":"Максимум параллельных задач","web.setup.security.content_scan":"Сканировать содержимое файлов на опасные паттерны","web.setup.security.session_encryption":"Шифровать логи сессий на диске","web.setup.security.audit_enabled":"Отправлять события безопасности в аудит-нотификатор","web.setup.security.audit_severity":"Минимальная severity для уведомления","web.setup.security.audit_events":"Типы событий для уведомления","web.setup.security.audit_retries":"Повторы вебхука","web.setup.security.audit_timeout":"Таймаут вебхука (мс)","web.setup.security.severity.low":"низкая","web.setup.security.severity.medium":"средняя","web.setup.security.severity.high":"высокая","web.setup.security.severity.critical":"критическая","web.setup.review.title":"Проверка","web.setup.review.hint":"Проверьте значения и завершите. Настройки сохранятся в конфиг.","web.setup.review.provider":"Провайдер","web.setup.review.baseUrl":"Базовый URL","web.setup.review.apiKey":"API-ключ","web.setup.review.model":"Модель","web.setup.review.context":"Окно контекста","web.setup.review.iterations":"Максимум итераций","web.setup.review.locale":"Язык","web.setup.review.security":"Безопасность","web.setup.review.security_off":"выключено","web.setup.review.not_needed":"не нужен","web.setup.back":"Назад","web.setup.next":"Далее","web.setup.finish":"Завершить настройку","web.setup.saving":"Сохранение…","web.setup.saved_warning":"Сохранено с предупреждениями: {warning}","web.setup.failed":"Не удалось завершить настройку. Проверьте значения и попробуйте снова.","config.key.provider.fallback":"резервные провайдеры","config.desc.provider.fallback":"Переходить к следующей записи провайдера при сбое активного.","config.key.provider.maxCompletionTokens":"макс. токенов ответа","config.desc.provider.maxCompletionTokens":"Жесткий лимит токенов ответа на запрос (512-128000).","config.key.contextBudget.compactionThreshold":"порог компакции","config.desc.contextBudget.compactionThreshold":"Доля загрузки истории, разрешающая периодическую компакцию (0,05-0,9).","config.key.contextBudget.compactionMinLoad":"мин. загрузка компакции","config.desc.contextBudget.compactionMinLoad":"Минимальная загрузка истории для запуска компакции (0,05-0,9).","config.key.contextBudget.policy":"политика компакции","config.desc.contextBudget.policy":"legacy воспроизводит 2.18.2; v2 добавляет канонический порог, cooldown и гарантию прогресса.","config.key.contextBudget.compactionSummary":"сводка компакции","config.desc.contextBudget.compactionSummary":"ledger (по умолчанию) пинит леджер тулов через компакцию, чтобы модель не переисследовала те же источники; off отключает.","config.key.contextBudget.overflowCooldown":"cooldown переполнения","config.desc.contextBudget.overflowCooldown":"Минимум итераций между компакциями по переполнению (1-20).","config.key.contextBudget.toolResultKeep":"оставлять свежие tool-результаты","config.desc.contextBudget.toolResultKeep":"Сколько последних tool-результатов переживают детерминированную чистку (0-20).","config.key.contextBudget.calibrationWarmup":"прогрев калибровки","config.desc.contextBudget.calibrationWarmup":"Сколько LLM-вызовов обучают оценку токенов до доверия (0-20).","config.key.contextBudget.ratioFloor":"нижний порог калибровки","config.desc.contextBudget.ratioFloor":"Минимальная калиброванная оценка как доля сырой (0,05-0,9).","config.key.instructions.summarize":"суммировать инструкции","config.desc.instructions.summarize":"Суммировать переполненные блоки AGENTS.md/карты проекта вместо обрезки.","config.key.contextLog.enabled":"лог контекста","config.desc.contextLog.enabled":"Писать уходящий в LLM контекст каждой итерации в <session>/context.diff.","config.key.contextLog.redact":"чистить лог контекста","config.desc.contextLog.redact":"Вырезать опознаваемые секреты (токены, ключи) из лога контекста.","config.key.indexer.maxFiles":"лимит файлов индекса","config.desc.indexer.maxFiles":"Кап файлов, попадающих в карту проекта (100-100000).","config.key.indexer.respectGitignore":"учитывать .gitignore","config.desc.indexer.respectGitignore":"Пропускать файлы из .gitignore/.mmaignore при построении карты.","config.key.indexer.mapTokenBudget":"бюджет токенов карты","config.desc.indexer.mapTokenBudget":"Бюджет токенов для PageRank-списка файлов в карте проекта (200-20000).","config.key.lsp.enabled":"LSP","config.desc.lsp.enabled":"Запускать языковые серверы после записи файлов и через тул lsp_check.","config.key.lsp.offline":"офлайн-режим LSP","config.desc.lsp.offline":"Не использовать npx; только глобально установленные языковые серверы. Env MMA_LSP_OFFLINE переопределяет.","config.key.images.maxCount":"хранимых снимков","config.desc.images.maxCount":"Максимум снимков/вложений на сессию; старейшие вытесняются первыми.","config.key.images.maxBytes":"лимит размера снимков","config.desc.images.maxBytes":"Максимальный суммарный размер снимков тулов на сессию.","config.key.reasoning.min":"мин. рассуждения","config.desc.reasoning.min":"Нижняя граница диапазона усилий рассуждений.","config.key.reasoning.max":"макс. рассуждения","config.desc.reasoning.max":"Верхняя граница диапазона усилий рассуждений.","config.key.reasoning.baseline":"базовые рассуждения","config.desc.reasoning.baseline":"Усилия рассуждений по умолчанию, если модель не дала сигнала.","config.key.reasoning.overrideCooldown":"кулдаун переопределения","config.desc.reasoning.overrideCooldown":"Ходов до повторного принятия переопределения рассуждений (1-60).","config.key.autoPlan":"автоплан","config.desc.autoPlan":"Позволять агенту автоматически строить план для многошаговых задач.","config.key.execution.autoAdvance":"авто-завершение шагов плана","config.desc.execution.autoAdvance":"Автоматически закрывать шаг плана при наличии его деливераблов. Выкл: модель закрывает шаги сама.","config.key.tools.enableOnDemand":"тулы по требованию","config.desc.tools.enableOnDemand":"Подгружать узкие группы тулов по требованию вместо показа всех.","config.key.tools.grepEngine":"движок grep","config.desc.tools.grepEngine":"auto (rg → grep → встроенный JS) или принудительно rg/grep/js.","config.key.session.autoSave":"автосохранение сессии","config.desc.session.autoSave":"Сохранять лог сессии после каждого хода.","config.key.session.maxSessions":"макс. сессий","config.desc.session.maxSessions":"Сколько последних сессий хранить на диске (1-500).","config.key.session.isolateMemory":"изолировать память сессии","config.desc.session.isolateMemory":"Держать память сессии отдельно от глобальной.","config.key.session.autoName":"автоназвания сессий","config.desc.session.autoName":"Выводить имя сессии из первого сообщения (уточняется LLM).","config.key.sessionIsolation.enabled":"изоляция сессий","config.desc.sessionIsolation.enabled":"Главный выключатель изоляции сессий (плагины, временные файлы).","config.key.sessionIsolation.isolatePlugins":"изолировать плагины","config.desc.sessionIsolation.isolatePlugins":"Выдавать каждой сессии собственную песочницу плагинов.","config.key.sessionIsolation.isolateTempFiles":"изолировать временные файлы","config.desc.sessionIsolation.isolateTempFiles":"Выдавать каждой сессии отдельную папку временных файлов.","config.key.ui.spinner":"спиннер","config.desc.ui.spinner":"Показывать анимированный спиннер во время работы тулов.","config.key.ui.activityRail":"рейка активности","config.desc.ui.activityRail":"Индикатор над строкой ввода, пока агент работает.","config.key.ui.showContextStats":"статистика контекста","config.desc.ui.showContextStats":"Показывать статистику использования контекста после каждого хода.","config.key.ui.showCompaction":"уведомление о компакции","config.desc.ui.showCompaction":"Сообщать в чате о запуске компакции истории.","config.key.ui.fontSize":"размер шрифта","config.desc.ui.fontSize":"Размер шрифта веб-чата (только веб, на терминал не влияет).","config.key.retry.maxRetries":"макс. повторов","config.desc.retry.maxRetries":"Максимум повторов упавших LLM-запросов (0-10).","config.key.retry.baseDelay":"базовая задержка повтора","config.desc.retry.baseDelay":"Базовая задержка между повторами в мс (0-60000).","config.key.retry.maxDelay":"макс. задержка повтора","config.desc.retry.maxDelay":"Потолок задержки между повторами в мс (0-300000).","config.key.retry.maxStreamRetries":"макс. повторов стрима","config.desc.retry.maxStreamRetries":"Максимум повторов зависших или прерванных стримов (0-10).","config.key.retry.noDataTimeoutMs":"таймаут застоя стрима (мс)","config.desc.retry.noDataTimeoutMs":"Сдаваться, если стрим молчит дольше этого времени, в мс (1000-600000).","config.key.pricing.enabled":"учет стоимости","config.desc.pricing.enabled":"Считать токены и примерную стоимость по сессиям.","config.key.updater.enabled":"автообновление","config.desc.updater.enabled":"Главный выключатель фоновой проверки обновлений.","config.key.updater.checkOnStart":"проверка при старте","config.desc.updater.checkOnStart":"Проверять обновления при старте агента.","config.key.updater.autoInstall":"автоустановка обновлений","config.desc.updater.autoInstall":"Устанавливать скачанные обновления без спроса.","config.key.updater.intervalMs":"интервал проверки (мс)","config.desc.updater.intervalMs":"Минимальный интервал между проверками, в мс (0-86400000).","config.key.skills.budget":"доля бюджета скиллов","config.desc.skills.budget":"Доля системного бюджета под определения скиллов (0,05-0,9).","config.key.hallucination.judge.enabled":"судья галлюцинаций","config.desc.hallucination.judge.enabled":"Оценивать уверенность ответа и помечать вероятные галлюцинации.","config.key.subagent.resultMode":"режим результата субагентов","config.desc.subagent.resultMode":"Как возвращать результаты субагентов: текстом или через файл.","config.key.subagent.maxSummaryChars":"лимит сводки субагента","config.desc.subagent.maxSummaryChars":"Максимум символов сводки субагента (100-50000).","config.key.subagent.maxParallelChunkQueries":"параллельные чанки субагента","config.desc.subagent.maxParallelChunkQueries":"Максимум параллельных запросов чанков за волну субагента (1-16).","config.key.subagent.timeoutMs":"таймаут субагента (мс)","config.desc.subagent.timeoutMs":"Таймаут выполнения субагента в миллисекундах (10000-1800000).","config.key.subagent.stableSystemPrompt":"стабильный промпт субагента","config.desc.subagent.stableSystemPrompt":"Переиспользовать один замороженный системный промпт для всех субагентов прогона.","config.key.modelLoad.autoLoad":"автозагрузка модели","config.desc.modelLoad.autoLoad":"Автоматически загружать модель в бэкенд при старте.","config.key.modelLoad.flashAttention":"flash attention","config.desc.modelLoad.flashAttention":"Включать flash-attention ядра при загрузке модели.","config.key.modelLoad.offloadKvCacheToGpu":"выгружать KV-кэш в GPU","config.desc.modelLoad.offloadKvCacheToGpu":"Держать KV-кэш в памяти GPU при загрузке модели.","config.key.modelLoad.evalBatchSize":"размер eval-батча","config.desc.modelLoad.evalBatchSize":"Размер батча оценки промпта при загрузке (1-4096).","config.key.webSearch.enabled":"веб-поиск","config.desc.webSearch.enabled":"Разрешить агенту искать в интернете.","config.key.errorWebSearch.enabled":"поиск при ошибке","config.desc.errorWebSearch.enabled":"Автоматически искать в интернете при ошибке, похожей на гуглящуюся.","config.key.errorWebSearch.threshold":"порог поиска ошибок","config.desc.errorWebSearch.threshold":"Сколько совпадающих ошибок запускает поиск (1-20).","config.key.errorWebSearch.maxResults":"результатов поиска ошибок","config.desc.errorWebSearch.maxResults":"Максимум результатов поиска на запрос об ошибке (1-20).","config.key.errorWebSearch.maxQueryChars":"лимит запроса ошибки","config.desc.errorWebSearch.maxQueryChars":"Максимум символов текста ошибки на запрос (50-2000).","config.key.errorWebSearch.maxSearchesPerSession":"поисков ошибок за сессию","config.desc.errorWebSearch.maxSearchesPerSession":"Максимум автопоисков ошибок за сессию (0-20).","config.key.errorWebSearch.requestTimeoutMs":"таймаут поиска ошибок (мс)","config.desc.errorWebSearch.requestTimeoutMs":"Таймаут одного автопоиска ошибки, в мс (1000-120000).","config.key.browser.enabled":"тул браузера","config.desc.browser.enabled":"Разрешить агенту управлять браузером.","config.key.browser.headless":"безголовый браузер","config.desc.browser.headless":"Запускать браузер без видимого окна.","config.key.browser.maxElements":"макс. элементов страницы","config.desc.browser.maxElements":"Максимум элементов accessibility-дерева на снимок (1-200).","config.key.browser.maxContentChars":"макс. содержимого страницы","config.desc.browser.maxContentChars":"Максимум символов содержимого страницы на снимок (100-50000).","config.key.browser.maxConsoleEntries":"макс. записей консоли","config.desc.browser.maxConsoleEntries":"Максимум записей консоли браузера на снимок (1-200).","config.key.browser.maxConsoleLineChars":"макс. строки консоли","config.desc.browser.maxConsoleLineChars":"Максимум символов на строку консоли (50-5000).","config.key.browser.viewportWidth":"ширина вьюпорта","config.desc.browser.viewportWidth":"Ширина вьюпорта браузера в px (320-4096).","config.key.browser.viewportHeight":"высота вьюпорта","config.desc.browser.viewportHeight":"Высота вьюпорта браузера в px (200-2160).","config.key.browser.navigationTimeout":"таймаут навигации (мс)","config.desc.browser.navigationTimeout":"Таймаут одной навигации страницы, в мс (1000-120000).","config.key.security.maxRecursionDepth":"макс. глубина рекурсии","config.desc.security.maxRecursionDepth":"Макс. глубина вложенных вызовов тулов до отказа (0-20).","config.key.security.maxFileOperations":"макс. файловых операций","config.desc.security.maxFileOperations":"Максимум файловых операций за ход до отказа (0-10000).","config.key.security.rateLimits.maxRequestsPerMinute":"макс. запросов в минуту","config.desc.security.rateLimits.maxRequestsPerMinute":"Лимит LLM-запросов в минуту (1-1000).","config.key.security.rateLimits.maxParallelTasks":"макс. параллельных задач","config.desc.security.rateLimits.maxParallelTasks":"Лимит параллельных подзадач (1-50).","config.key.tools.defaultTags":"теги тулов по умолчанию","config.desc.tools.defaultTags":"Группы тулов, всегда загружаемые без gating по требованию.","config.key.security.bash.enabled":"проверка bash-команд","config.desc.security.bash.enabled":"Главный выключатель проверки bash-команд.","config.key.security.bash.blockDangerousFlags":"блокировать опасные флаги","config.desc.security.bash.blockDangerousFlags":"Отклонять рискованные флаги shell (например --force) в bash-туле.","config.key.security.network.enabled":"сетевые запросы","config.desc.security.network.enabled":"Главный выключатель проверок исходящих сетевых запросов (защита от SSRF).","config.key.security.bash.blacklist":"черный список bash","config.desc.security.bash.blacklist":"Команды, всегда блокируемые в bash-туле (список).","config.key.security.bash.whitelist":"белый список bash","config.desc.security.bash.whitelist":"Команды, всегда разрешенные в bash-туле (список).","config.key.security.bash.dangerousFlags":"опасные флаги","config.desc.security.bash.dangerousFlags":"Флаги команд, считающиеся опасными (список).","config.key.security.bash.dangerousOperators":"опасные операторы","config.desc.security.bash.dangerousOperators":"Шелл-операторы, считающиеся опасными (список).","config.key.security.paths.denied":"запрещенные пути","config.desc.security.paths.denied":"Пути, всегда закрытые для файловых тулов (список).","config.key.security.paths.allowed":"разрешенные пути","config.desc.security.paths.allowed":"Дополнительные пути, разрешенные вне workspace (список).","config.key.security.network.deniedDomains":"запрещенные домены","config.desc.security.network.deniedDomains":"Домены, к которым агенту нельзя обращаться (список).","config.key.security.network.allowedDomains":"разрешенные домены","config.desc.security.network.allowedDomains":"Домены, к которым можно обращаться (список; пусто - любые).","config.key.security.network.requestTimeout":"сетевой таймаут (мс)","config.desc.security.network.requestTimeout":"Таймаут одного исходящего запроса тула, в мс (1000-120000).","config.key.security.network.maxResponseSize":"макс. размер ответа","config.desc.security.network.maxResponseSize":"Максимум байт исходящего ответа (1024-1000000).","config.key.security.contentScan.dangerousPatterns":"опасные паттерны","config.desc.security.contentScan.dangerousPatterns":"Регулярные выражения, которые ищутся в содержимом файлов перед записью.","config.key.security.auditNotifier.enabled":"аудит-уведомитель","config.desc.security.auditNotifier.enabled":"Отправлять события аудита безопасности в файл или вебхук.","config.key.security.auditNotifier.filePath":"путь аудит-лога","config.desc.security.auditNotifier.filePath":"Файл, в который дописываются события аудита.","config.key.security.auditNotifier.webhookUrl":"URL аудит-вебхука","config.desc.security.auditNotifier.webhookUrl":"Вебхук, на который отправляются события аудита.","config.key.security.auditNotifier.webhookTimeout":"таймаут аудит-вебхука (мс)","config.desc.security.auditNotifier.webhookTimeout":"Таймаут одной отправки вебхука, в мс (1000-60000).","config.key.security.auditNotifier.minSeverity":"мин. серьезность аудита","config.desc.security.auditNotifier.minSeverity":"Низшая серьезность, при которой еще уведомлять (low/medium/high/critical).","config.key.security.auditNotifier.eventTypes":"типы событий аудита","config.desc.security.auditNotifier.eventTypes":"Какие типы событий аудита уведомляют; ничего не выбрано - все.","config.key.security.auditNotifier.maxRetries":"макс. повторов аудита","config.desc.security.auditNotifier.maxRetries":"Повторов одной упавшей отправки уведомления (0-10).","config.key.security.sessionEncryption.keyPath":"путь ключа шифрования","config.desc.security.sessionEncryption.keyPath":"Файл с ключом шифрования сессий.","config.key.security.sessionEncryption.encryptHistory":"шифровать историю чата","config.desc.security.sessionEncryption.encryptHistory":"Шифровать сохраненную историю чата на диске.","config.key.security.sessionEncryption.encryptSessionLog":"шифровать лог сессии","config.desc.security.sessionEncryption.encryptSessionLog":"Шифровать сохраненный лог session.jsonl на диске.","config.key.pricing.overrides":"переопределения цен","config.desc.pricing.overrides":"По-модельная таблица цен поверх встроенной.","config.key.modelCapabilities":"возможности моделей","config.desc.modelCapabilities":"Ручные переопределения vision/tools по id модели.","config.key.experts":"эксперты MoE","config.desc.experts":"Состав экспертов для MoE-оркестратора.","config.desc.orchestrator.model":"Модель, планирующая и проверяющая сабтаски MoE (пусто = активная модель).","config.desc.orchestrator.provider":"Провайдер модели планировщика (пусто = активный провайдер).","config.desc.orchestrator.contextWindow":"Окно контекста модели планировщика (дефолт 32768).","config.enum.text":"текст","config.enum.file":"файл","config.enum.critical":"критический"}
|