micro-models-agent 0.28.9 → 0.29.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.
Files changed (167) hide show
  1. package/dist/cli/commands.js +220 -0
  2. package/dist/cli/completer.js +168 -0
  3. package/dist/cli/index.js +2 -0
  4. package/dist/cli/main.js +113 -0
  5. package/dist/cli/repl.js +987 -0
  6. package/dist/cli/security-commands.js +166 -0
  7. package/dist/cli/setup.js +229 -0
  8. package/dist/config/config.js +186 -0
  9. package/dist/config/defaults.js +91 -0
  10. package/dist/config/experts.js +15 -0
  11. package/dist/config/index.js +3 -0
  12. package/dist/config/security.js +193 -0
  13. package/dist/config/types.js +1 -0
  14. package/dist/core/agent-moe.js +98 -0
  15. package/dist/core/agent.js +461 -0
  16. package/dist/core/bootstrap.js +321 -0
  17. package/dist/core/index.js +2 -0
  18. package/dist/core/prompt-builder.js +55 -0
  19. package/dist/core/session-logger.js +122 -0
  20. package/dist/core/types.js +1 -0
  21. package/dist/i18n/en.json +461 -0
  22. package/dist/i18n/index.js +43 -0
  23. package/dist/i18n/ru.json +461 -0
  24. package/dist/index.js +22 -0
  25. package/dist/llm/image-utils.js +144 -0
  26. package/dist/llm/index.js +4 -0
  27. package/dist/llm/model-loader.js +78 -0
  28. package/dist/llm/openai-compat.js +324 -0
  29. package/dist/llm/orchestrator.js +194 -0
  30. package/dist/llm/provider.js +10 -0
  31. package/dist/llm/response.js +39 -0
  32. package/dist/llm/token-counter.js +39 -0
  33. package/dist/llm/types.js +1 -0
  34. package/dist/logger/app-logger.js +76 -0
  35. package/dist/logger/index.js +1 -0
  36. package/dist/main.js +2251 -724
  37. package/dist/migration/backup.js +45 -0
  38. package/dist/migration/detect.js +50 -0
  39. package/dist/migration/index.js +2 -0
  40. package/dist/modules/browser/actions.js +46 -0
  41. package/dist/modules/browser/cookie-store.js +24 -0
  42. package/dist/modules/browser/index.js +5 -0
  43. package/dist/modules/browser/module.js +28 -0
  44. package/dist/modules/browser/session.js +287 -0
  45. package/dist/modules/browser/snapshot.js +114 -0
  46. package/dist/modules/browser/types.js +9 -0
  47. package/dist/modules/context/history.js +15 -0
  48. package/dist/modules/context/index.js +1 -0
  49. package/dist/modules/context/manager.js +240 -0
  50. package/dist/modules/execution/auditor.js +72 -0
  51. package/dist/modules/execution/index.js +6 -0
  52. package/dist/modules/execution/module.js +337 -0
  53. package/dist/modules/execution/moe-executor.js +209 -0
  54. package/dist/modules/execution/plan-validator.js +153 -0
  55. package/dist/modules/execution/planner.js +35 -0
  56. package/dist/modules/execution/stuck-detector.js +134 -0
  57. package/dist/modules/execution/tracker.js +53 -0
  58. package/dist/modules/execution/types.js +1 -0
  59. package/dist/modules/execution/verifier.js +149 -0
  60. package/dist/modules/hallucination/confidence.js +54 -0
  61. package/dist/modules/hallucination/consistency.js +60 -0
  62. package/dist/modules/hallucination/detector.js +41 -0
  63. package/dist/modules/hallucination/factual.js +170 -0
  64. package/dist/modules/hallucination/index.js +4 -0
  65. package/dist/modules/index.js +5 -0
  66. package/dist/modules/indexer/cache.js +38 -0
  67. package/dist/modules/indexer/index.js +3 -0
  68. package/dist/modules/indexer/module.js +192 -0
  69. package/dist/modules/indexer/walker.js +101 -0
  70. package/dist/modules/mcp/client.js +393 -0
  71. package/dist/modules/mcp/index.js +3 -0
  72. package/dist/modules/mcp/module.js +146 -0
  73. package/dist/modules/mcp/registry.js +15 -0
  74. package/dist/modules/memory/index.js +1 -0
  75. package/dist/modules/memory/module.js +48 -0
  76. package/dist/modules/memory/search.js +40 -0
  77. package/dist/modules/memory/store.js +65 -0
  78. package/dist/modules/pipelines/engine.js +60 -0
  79. package/dist/modules/pipelines/index.js +3 -0
  80. package/dist/modules/pipelines/parser.js +53 -0
  81. package/dist/modules/pipelines/template.js +14 -0
  82. package/dist/modules/plugins/builtin/lint-on-write.js +121 -0
  83. package/dist/modules/plugins/builtin/notify.js +8 -0
  84. package/dist/modules/plugins/index.js +1 -0
  85. package/dist/modules/plugins/loader.js +28 -0
  86. package/dist/modules/plugins/manager.js +161 -0
  87. package/dist/modules/plugins/types.js +1 -0
  88. package/dist/modules/processes/detect.js +34 -0
  89. package/dist/modules/processes/index.js +3 -0
  90. package/dist/modules/processes/registry.js +148 -0
  91. package/dist/modules/processes/runner.js +124 -0
  92. package/dist/modules/registry.js +45 -0
  93. package/dist/modules/security/audit-log.js +116 -0
  94. package/dist/modules/security/audit-notifier.js +292 -0
  95. package/dist/modules/security/command-validator.js +185 -0
  96. package/dist/modules/security/content-scanner.js +52 -0
  97. package/dist/modules/security/data-sanitizer.js +97 -0
  98. package/dist/modules/security/encryption.js +240 -0
  99. package/dist/modules/security/index.js +14 -0
  100. package/dist/modules/security/network-validator.js +79 -0
  101. package/dist/modules/security/path-validator.js +155 -0
  102. package/dist/modules/security/rate-limiter.js +119 -0
  103. package/dist/modules/security/security-policies.js +393 -0
  104. package/dist/modules/security/session-encryption.js +193 -0
  105. package/dist/modules/security/session-isolation.js +95 -0
  106. package/dist/modules/session/index.js +3 -0
  107. package/dist/modules/session/manager.js +167 -0
  108. package/dist/modules/session/module.js +24 -0
  109. package/dist/modules/session/store.js +174 -0
  110. package/dist/modules/session/types.js +1 -0
  111. package/dist/modules/skills/index.js +3 -0
  112. package/dist/modules/skills/loader.js +72 -0
  113. package/dist/modules/skills/matcher.js +27 -0
  114. package/dist/modules/skills/module.js +143 -0
  115. package/dist/modules/types.js +1 -0
  116. package/dist/modules/updater/checker.js +32 -0
  117. package/dist/modules/updater/index.js +1 -0
  118. package/dist/modules/user-profile/compressor.js +16 -0
  119. package/dist/modules/user-profile/index.js +1 -0
  120. package/dist/modules/user-profile/profile.js +68 -0
  121. package/dist/tools/approve.js +32 -0
  122. package/dist/tools/attach-image.js +89 -0
  123. package/dist/tools/bash.js +140 -0
  124. package/dist/tools/browser.js +97 -0
  125. package/dist/tools/create-dir.js +56 -0
  126. package/dist/tools/delete-file.js +63 -0
  127. package/dist/tools/edit-file.js +77 -0
  128. package/dist/tools/executor.js +95 -0
  129. package/dist/tools/file-info.js +45 -0
  130. package/dist/tools/filter-tools.js +10 -0
  131. package/dist/tools/glob-tool.js +26 -0
  132. package/dist/tools/grep-tool.js +64 -0
  133. package/dist/tools/index.js +52 -0
  134. package/dist/tools/list-dir.js +47 -0
  135. package/dist/tools/load-skill.js +48 -0
  136. package/dist/tools/mcp-call.js +68 -0
  137. package/dist/tools/move-file.js +84 -0
  138. package/dist/tools/path-utils.js +51 -0
  139. package/dist/tools/pipeline-run.js +144 -0
  140. package/dist/tools/preview.js +2 -0
  141. package/dist/tools/process-kill.js +29 -0
  142. package/dist/tools/process-list.js +38 -0
  143. package/dist/tools/process-log.js +41 -0
  144. package/dist/tools/question.js +142 -0
  145. package/dist/tools/read-file.js +73 -0
  146. package/dist/tools/recall.js +110 -0
  147. package/dist/tools/registry.js +36 -0
  148. package/dist/tools/remember.js +67 -0
  149. package/dist/tools/scope-check.js +30 -0
  150. package/dist/tools/search-history.js +64 -0
  151. package/dist/tools/subagent.js +142 -0
  152. package/dist/tools/types.js +1 -0
  153. package/dist/tools/user-input.js +123 -0
  154. package/dist/tools/web-browse.js +57 -0
  155. package/dist/tools/web-fetch.js +72 -0
  156. package/dist/tools/web-search.js +59 -0
  157. package/dist/tools/write-file.js +80 -0
  158. package/dist/ui/box.js +81 -0
  159. package/dist/ui/colors.js +4 -0
  160. package/dist/ui/diff.js +185 -0
  161. package/dist/ui/index.js +6 -0
  162. package/dist/ui/md-formatter.js +212 -0
  163. package/dist/ui/output.js +13 -0
  164. package/dist/ui/renderer.js +141 -0
  165. package/dist/ui/spinner.js +70 -0
  166. package/dist/ui/table.js +144 -0
  167. package/package.json +4 -4
@@ -0,0 +1,461 @@
1
+ {
2
+ "file.created": "Создан {path}",
3
+ "file.deleted": "Удалён {path}",
4
+ "file.updated": "Обновлён {path}",
5
+ "file.written": "Записан {path}",
6
+ "file.notfound": "Файл не найден: {path}",
7
+ "file.dir_notfound": "Каталог не найден: {path}",
8
+ "file.path_not_allowed": "Путь недопустим: {path}",
9
+ "file.path_not_allowed_short": "Путь недопустим",
10
+ "file.is_directory": "Это каталог, используйте rmdir: {path}",
11
+ "file.replaced_in": "Заменено в {path}",
12
+ "file.string_not_found": "Строка не найдена в файле:\n{str}",
13
+ "file.moved": "Перемещён {from} → {to}",
14
+ "file.not_found_short": "Не найдено: {path}",
15
+ "file.empty": "(пусто)",
16
+ "file.no_matches": "Нет совпадений",
17
+ "file.truncated": "\n... (обрезано)",
18
+ "file.read_header": "── {path} ({ext}, {total} строк, строки {from}-{to})",
19
+ "file.read_truncated": "\n\n[Обрезано: ещё {remaining} строк. Продолжите чтение через read_file с offset={next}]",
20
+ "file.empty_page": "(пустая страница)",
21
+ "error.timeout": "Таймаут запроса",
22
+ "error.unknown": "Неизвестная ошибка",
23
+ "error.notfound": "Не найдено: {path}",
24
+ "error.prefix": "Ошибка: ",
25
+ "error.command_error": "Ошибка команды: {message}",
26
+ "error.llm": "Ошибка LLM: {message}",
27
+ "error.response_blocked": "Ответ заблокирован: {reason}",
28
+ "error.max_iters": "Достигнут максимум итераций ({max})",
29
+ "error.grep_failed": "Ошибка grep: {message}",
30
+ "error.search_failed": "Ошибка поиска: {message}",
31
+ "error.fetch_failed": "Ошибка загрузки: {message}",
32
+ "error.fetch_url_failed": "Не удалось загрузить {url}: {message}",
33
+ "error.http": "HTTP {status}: {statusText}",
34
+ "error.llm_api": "Ошибка LLM API {status} ({statusText}): {errorText}",
35
+ "error.llm_retries": "Запрос LLM не удался после повторов",
36
+ "error.no_response_body": "Нет потока тела ответа",
37
+ "session.started": "Сессия начата: {id}",
38
+ "session.ended": "Сессия завершена: {id}",
39
+ "session.not_found": "Сессия не найдена: {id}",
40
+ "session.no_active": "Нет активной сессии",
41
+ "session.deleted": "Сессия удалена: {id}",
42
+ "session.renamed": "Сессия переименована в: {name}",
43
+ "session.created": "Создана сессия: {name}",
44
+ "session.resumed": "Возобновлена сессия: {name}",
45
+ "session.chat_cleared": "Чат очищен. Начните вводить.",
46
+ "session.chat_loaded": "История чата загружена. Продолжите с места остановки.",
47
+ "session.chat_history": "История чата:",
48
+ "session.user_label": "Пользователь",
49
+ "session.assistant_label": "Ассистент",
50
+ "session.no_history": "История чата пуста",
51
+ "session.no_sessions": "Сессии не найдены",
52
+ "session.no_sessions_hint": "Сессии не найдены. Создайте одну командой /new <имя>",
53
+ "session.available": "Доступные сессии:",
54
+ "session.no_match": "Нет сессии подходящей по \"{query}\"",
55
+ "session.default_name": "Сессия {date}",
56
+ "session.info": "[Сессия: \"{name}\" ({id}) — {count} сообщений]",
57
+ "session.col_active": "",
58
+ "session.col_id": "ID",
59
+ "session.col_name": "Имя",
60
+ "session.col_updated": "Обновлена",
61
+ "session.col_msgs": "Сообщ.",
62
+ "tool.executed": "Выполнен {name}",
63
+ "tool.failed": "Инструмент {name} упал: {error}",
64
+ "tool.unknown": "Неизвестный инструмент: {name}",
65
+ "tool.blocked": "Заблокировано плагином: {plugin}",
66
+ "tool.using": "[{label}]",
67
+ "tool.friendly.write_file": "Запись файла",
68
+ "tool.friendly.read_file": "Чтение файла",
69
+ "tool.friendly.edit_file": "Редактирование файла",
70
+ "tool.friendly.create_dir": "Создание папки",
71
+ "tool.friendly.delete_file": "Удаление файла",
72
+ "tool.friendly.move_file": "Перемещение файла",
73
+ "tool.friendly.list_dir": "Список файлов",
74
+ "tool.friendly.file_info": "Информация о файле",
75
+ "tool.friendly.glob": "Поиск файлов",
76
+ "tool.friendly.grep": "Поиск по содержимому",
77
+ "tool.friendly.bash": "Выполнение команды",
78
+ "tool.friendly.load_skill": "Загрузка скилла",
79
+ "tool.friendly.plan": "Планирование",
80
+ "tool.friendly.todo": "Обновление задач",
81
+ "tool.friendly.verify": "Проверка",
82
+ "tool.friendly.web_search": "Поиск в интернете",
83
+ "tool.friendly.web_fetch": "Загрузка страницы",
84
+ "tool.friendly.web_browse": "Просмотр страницы",
85
+ "tool.friendly.browser": "Браузер",
86
+ "tool.friendly.subagent": "Задача подагенту",
87
+ "tool.friendly.question": "Вопрос пользователю",
88
+ "tool.friendly.approve": "Запрос подтверждения",
89
+ "tool.friendly.search_history": "Поиск в истории",
90
+ "tool.friendly.pipeline_run": "Запуск пайплайна",
91
+ "tool.friendly.mcp_call": "MCP вызов",
92
+ "tool.truncated": "[Обрезано: удалено {tokens} токенов]",
93
+ "tool.subagent_queued": "Задача подагенту добавлена: {task}",
94
+ "tool.pipeline_started": "Пайплайн \"{name}\" запущен. Движок пайплайнов — заглушка, задача отправлена.",
95
+ "tool.mcp_call": "MCP вызов: {server}/{tool} с {args}",
96
+ "tool.action_required": "Требуется действие.",
97
+ "tool.approve_prompt": "Одобрить? {action}",
98
+ "tool.approve_yes": "Да",
99
+ "tool.approve_yes_desc": "Одобрить действие",
100
+ "tool.approve_no": "Нет",
101
+ "tool.approve_no_desc": "Отклонить действие",
102
+ "tool.approved": "Одобрено",
103
+ "tool.rejected": "Отклонено пользователем",
104
+ "tool.user_input.custom_option": "Свой вариант",
105
+ "tool.user_input.choice_single": "Ваш выбор (1-{max}): ",
106
+ "tool.user_input.choice_multiple": "Ваш выбор (через запятую, напр. 1,3): ",
107
+ "tool.user_input.invalid": "Неверный выбор, попробуйте ещё раз.",
108
+ "tool.user_input.custom_prompt": "Ваш ответ: ",
109
+ "tool.question.progress": "Вопрос {current}/{total}",
110
+ "tool.question.no_questions": "Вопросы не указаны",
111
+ "tool.question.unanswered": "Без ответа",
112
+ "tool.question.answered": "Пользователь ответил на ваши вопросы: {formatted}. Теперь продолжайте с учётом ответов.",
113
+ "tool.name_or_task": "Укажите параметр \"name\" или \"task\"",
114
+ "tool.invalid_params": "Неверные параметры",
115
+ "tool.skill_budget": "[Скилл загружен. Осталось {remaining} токенов в бюджете скиллов]",
116
+ "tool.skill_available_hint": "Доступные скиллы",
117
+ "tool.no_results": "Нет результатов по \"{query}\"",
118
+ "tool.search_results": "Результаты поиска \"{query}\":\n{results}",
119
+ "tool.history_results": "Результаты истории \"{query}\":\n{results}",
120
+ "tool.no_history": "Нет записей истории по \"{query}\"",
121
+ "tool.no_sessions_dir": "Каталог сессий не найден по {dir}",
122
+ "tool.history_error": "Ошибка поиска истории: {error}",
123
+ "tool.memory_error": "Ошибка памяти: {error}",
124
+ "tool.screenshot_unavailable": "[Скриншот сделан — изображение недоступно для текстовой модели]",
125
+ "tool.timeout": "Инструмент {name} превысил таймаут ({seconds} сек)",
126
+ "tool.interactive_disabled": "Интерактивный инструмент отключён в режиме exit-on-complete. Продолжай без вопроса пользователю.",
127
+ "proc.started": "Фоновый процесс запущен: {id} (PID {pid}).\nКоманда: {command}",
128
+ "proc.detected_hint": "[Обнаружена длительная команда — запущена в фоне]",
129
+ "proc.manage_hint": "Проверить вывод: process_log id={id}. Остановить: process_kill id={id}. Список всех: process_list.",
130
+ "proc.none": "Фоновых процессов нет.",
131
+ "proc.not_found": "Процесс не найден: {id}",
132
+ "proc.killed": "Процесс {id} (PID {pid}) остановлен.",
133
+ "proc.kill_failed": "Не удалось остановить процесс {id}",
134
+ "proc.list_header": "Фоновые процессы",
135
+ "proc.log_header": "Вывод процесса {id} ({status}):",
136
+ "proc.log_empty": "(вывода пока нет)",
137
+ "proc.timed_out": "Команда превысила таймаут {ms} мс и была остановлена.",
138
+ "proc.hint": "Управление: {list}, {log}, {kill}.",
139
+ "proc.status_running": "работает",
140
+ "proc.status_exited": "завершён",
141
+ "proc.status_killed": "остановлен",
142
+ "tool.friendly.process_list": "Список фоновых процессов",
143
+ "tool.friendly.process_log": "Вывод процесса",
144
+ "tool.friendly.process_kill": "Остановка процесса",
145
+ "plan.created": "План создан: {title} ({steps} шагов)",
146
+ "plan.step_done": "Шаг {n}/{total}: {description} ✓",
147
+ "plan.complete": "Задача выполнена: {summary}",
148
+ "plan.title_steps": "План \"{title}\" создан с {count} шагами",
149
+ "plan.step_marked": "Шаг {step} отмечен как {status}",
150
+ "plan.aborted": "План отменён",
151
+ "plan.unknown_action": "Неизвестное действие плана: {action}",
152
+ "plan.acknowledged": "План {action}: принято",
153
+ "plan.step_status": "Шаг {step}: {status}",
154
+ "plan.no_active": "Нет активного плана",
155
+ "plan.step_not_found": "Шаг не найден",
156
+ "plan.show_header": "Статус плана:",
157
+ "plan.show_empty": "(в плане нет шагов)",
158
+ "todo.added": "Добавлено {count} задач: {items}",
159
+ "todo.marked_done": "Отмечено выполненными: {count}",
160
+ "todo.no_active": "Нет активных задач",
161
+ "todo.unknown_action": "Неизвестное действие todo: {action}",
162
+ "todo.acknowledged": "Todo принято",
163
+ "verify.passed": "Проверка пройдена",
164
+ "verify.failed": "Проверка не пройдена: {details}",
165
+ "verify.file_exists": "Файл существует: {path}",
166
+ "verify.file_not_found": "Файл не найден: {path}",
167
+ "verify.script_passed": "Скрипт '{script}' пройден",
168
+ "verify.script_failed": "Скрипт '{script}' не пройден: {message}",
169
+ "verify.syntax_error": "Синтаксическая ошибка в: {path}",
170
+ "cli.description": "Micro Models Agent — ИИ-агент для кодинга на малых моделях",
171
+ "cli.init": "Запустить мастер настройки",
172
+ "cli.config_saved": "Конфигурация сохранена в ~/.mma/config.json",
173
+ "cli.manage_config": "Управление конфигурацией",
174
+ "cli.config_key": "Ключ конфига (напр., model, provider.baseUrl)",
175
+ "cli.set_value": "Установить значение",
176
+ "cli.set_done": "Установлено {key}={value}",
177
+ "cli.show_config": "Показать текущий конфиг",
178
+ "cli.manage_models": "Управление моделями",
179
+ "cli.list_models": "Список доступных моделей",
180
+ "cli.current_model": "Текущая модель:",
181
+ "cli.model_hint": "(Используйте /model use <имя> для смены)",
182
+ "cli.model_fetch_failed": "Не удалось получить модели: {error}",
183
+ "cli.available_models": "Доступные модели:",
184
+ "cli.no_models_found": "Модели не найдены у провайдера",
185
+ "cli.fetching_models": "Загрузка списка моделей...",
186
+ "cli.manage_context": "Управление контекстным окном",
187
+ "cli.invalid_context_size": "Некорректный размер контекста. Должно быть число >= 1024",
188
+ "cli.context_set": "Контекстное окно установлено: {size} токенов",
189
+ "cli.set_model": "Установить модель по умолчанию",
190
+ "cli.model_set": "Модель установлена: {name}",
191
+ "cli.manage_providers": "Управление провайдерами",
192
+ "cli.list_providers": "Список провайдеров",
193
+ "cli.current_provider": "Текущий провайдер:",
194
+ "cli.base_url": "Базовый URL:",
195
+ "cli.set_provider": "Установить активный провайдер",
196
+ "cli.provider_set": "Провайдер установлен: {name}",
197
+ "cli.manage_sessions": "Управление сессиями",
198
+ "cli.list_sessions": "Список всех сессий",
199
+ "cli.show_details": "Показать детали сессии",
200
+ "cli.delete_session": "Удалить сессию",
201
+ "cli.first_run": "Первый запуск. Запускаем мастер настройки...",
202
+ "cli.unknown_cmd": "Неизвестная команда: {name}.",
203
+ "cli.help_hint": "Введите /help для списка команд.",
204
+ "cli.available_cmds": "\nДоступные команды:",
205
+ "cli.no_output": "Агент завершил работу, но не выдал результата. Возможно, задача не выполнена до конца.",
206
+ "cli.no_agents_md": "Отключить загрузку AGENTS.md в системный промпт",
207
+ "cli.dir": "Рабочая директория агента (по умолчанию — текущая)",
208
+ "cli.exit_on_complete": "Завершить сразу после выполнения задачи; интерактивные тулзы (question/approve) не блокируют stdin, а возвращают ошибку",
209
+ "cli.json": "Вывести результат в формате JSON (режим однократного запуска)",
210
+ "cli.security.description": "Управление настройками безопасности",
211
+ "cli.security.status": "Показать текущую конфигурацию безопасности",
212
+ "cli.security.policies": "Список доступных политик безопасности",
213
+ "cli.security.set_policy": "Применить пресет политики безопасности",
214
+ "cli.security.preset": "Пресет политики (strict, balanced, permissive)",
215
+ "cli.security.invalid_preset": "Некорректный пресет. Доступные: {presets}",
216
+ "cli.security.policy_applied": "Политика безопасности применена: {name}",
217
+ "cli.security.policy_description": "Описание: {description}",
218
+ "cli.security.enable_encryption": "Включить шифрование файлов сессий",
219
+ "cli.security.disable_encryption": "Отключить шифрование файлов сессий",
220
+ "cli.security.encryption_enabled": "Шифрование файлов сессий включено",
221
+ "cli.security.encryption_disabled": "Шифрование файлов сессий отключено",
222
+ "cli.security.enable_audit": "Включить уведомления аудита",
223
+ "cli.security.disable_audit": "Отключить уведомления аудита",
224
+ "cli.security.audit_enabled": "Уведомления аудита включены",
225
+ "cli.security.audit_disabled": "Уведомления аудита отключены",
226
+ "cli.security.audit_stats": "Показать статистику уведомлений аудита",
227
+ "cli.security.audit_stats_title": "Статистика уведомлений аудита",
228
+ "cli.security.total_notifications": "Всего уведомлений",
229
+ "cli.security.by_severity": "По уровню серьезности",
230
+ "cli.security.by_type": "По типу",
231
+ "cli.security.low": "Низкий",
232
+ "cli.security.medium": "Средний",
233
+ "cli.security.high": "Высокий",
234
+ "cli.security.critical": "Критический",
235
+ "cli.security.current_policy": "Текущая конфигурация безопасности",
236
+ "cli.security.bash_enabled": "Проверка команд bash",
237
+ "cli.security.path_validation": "Проверка доступа к путям",
238
+ "cli.security.network_validation": "Проверка сетевых запросов",
239
+ "cli.security.content_scanning": "Сканирование содержимого",
240
+ "cli.security.max_recursion": "Максимальная глубина рекурсии",
241
+ "cli.security.max_file_ops": "Максимум операций с файлами",
242
+ "cli.security.rate_limit": "Ограничение запросов",
243
+ "cli.security.session_encryption": "Шифрование сессий",
244
+ "cli.security.audit_notifier": "Уведомления аудита",
245
+ "cli.security.available_policies": "Доступные политики безопасности",
246
+ "cli.security.recommended_for": "Рекомендуется для",
247
+ "cli.yes": "Да",
248
+ "cli.no": "Нет",
249
+ "repl.help": "Показать доступные команды",
250
+ "repl.help_usage": "Использование: /help",
251
+ "repl.exit": "Выйти из REPL",
252
+ "repl.exit_usage": "Использование: /exit",
253
+ "repl.clear": "Очистить экран",
254
+ "repl.clear_usage": "Использование: /clear",
255
+ "repl.run": "Выполнить запрос через агента",
256
+ "repl.run_usage": "Использование: /run <запрос>",
257
+ "repl.config": "Показать текущую конфигурацию",
258
+ "repl.config_usage": "Использование: /config",
259
+ "repl.reasoning": "Переключить показ рассуждений модели",
260
+ "repl.reasoning_usage": "Использование: /reasoning",
261
+ "repl.status": "Показать статус агента",
262
+ "repl.status_usage": "Использование: /status",
263
+ "repl.sessions": "Список всех сессий (* активная)",
264
+ "repl.sessions_usage": "Использование: /sessions",
265
+ "repl.new": "Создать новую сессию",
266
+ "repl.new_usage": "Использование: /new [имя]",
267
+ "repl.resume": "Переключиться на сессию по id или имени",
268
+ "repl.resume_usage": "Использование: /resume <id|имя>",
269
+ "repl.rename": "Переименовать текущую сессию",
270
+ "repl.rename_usage": "Использование: /rename <новое-имя>",
271
+ "repl.delete": "Удалить сессию по id",
272
+ "repl.delete_usage": "Использование: /delete <id-сессии>",
273
+ "repl.skill": "Управление скиллами (list, loaded, load, unload, search)",
274
+ "repl.no_skills": "Нет доступных скиллов",
275
+ "repl.available_skills": "Доступные скиллы:",
276
+ "repl.no_loaded": "Нет загруженных скиллов",
277
+ "repl.loaded_skills": "Загруженные скиллы:",
278
+ "repl.budget": "Бюджет: {used} / {total} токенов (осталось {remaining})",
279
+ "repl.skill_load_usage": "Использование: /skill load <имя>",
280
+ "repl.skill_unload_usage": "Использование: /skill unload <имя>",
281
+ "repl.skill_unloaded": "Скилл \"{name}\" выгружен",
282
+ "repl.skill_not_loaded": "Скилл \"{name}\" не загружен",
283
+ "repl.skill_search_usage": "Использование: /skill search <запрос>",
284
+ "repl.no_skill_match": "Нет скиллов по \"{query}\"",
285
+ "repl.skills_matching": "Скиллы по \"{query}\":",
286
+ "repl.skill_unknown_sub": "Неизвестная подкоманда скилла: {subcmd}",
287
+ "repl.skill_usage": "Использование: /skill [list|loaded|load|unload|search]",
288
+ "repl.agent": "Агент: ",
289
+ "repl.title": "MMA REPL v2",
290
+ "repl.model": "Модель:",
291
+ "repl.provider": "Провайдер:",
292
+ "repl.context": "Контекст:",
293
+ "repl.max_iters": "Макс итераций:",
294
+ "repl.stuck_thresh": "Порог зависания:",
295
+ "repl.reasoning_label": "Рассуждения:",
296
+ "repl.log_level": "Уровень лога:",
297
+ "repl.locale": "Язык:",
298
+ "repl.session_label": "Сессия:",
299
+ "repl.skills_label": "Скиллы:",
300
+ "repl.plugins_label": "Плагины:",
301
+ "repl.mcp_label": "MCP:",
302
+ "repl.work_dir": "Директория:",
303
+ "repl.agents_label": "Инструкции:",
304
+ "repl.not_found": "не найден",
305
+ "repl.disabled": "отключено (--no-agents-md)",
306
+ "repl.show": "показ",
307
+ "repl.hide": "скрыть",
308
+ "repl.resume_hint": "Используйте /resume <id> или /resume <имя> для переключения между сессиями",
309
+ "repl.reasoning_status": "Рассуждения: {status}",
310
+ "repl.wizard": "Запустить мастер настройки",
311
+ "repl.wizard_usage": "Использование: /wizard",
312
+ "repl.wizard_running": "Запуск мастера настройки... (текущая конфигурация будет перезаписана)",
313
+ "repl.provider_list": "Показать/сменить провайдер",
314
+ "repl.provider_current": "Текущий провайдер",
315
+ "repl.provider_set": "Провайдер установлен: {name}",
316
+ "repl.provider_usage": "Использование: /provider list | /provider use <тип>",
317
+ "repl.model_list": "Показать/сменить модель",
318
+ "repl.model_current": "Текущая модель",
319
+ "repl.model_set": "Модель установлена: {name}",
320
+ "repl.model_usage": "Использование: /model list | /model use <имя>",
321
+ "repl.reload": "Перезагрузить агента с текущим конфигом",
322
+ "repl.reload_usage": "Использование: /reload",
323
+ "repl.reloading": "Перезагрузка агента...",
324
+ "repl.reloaded": "Агент перезагружен",
325
+ "repl.group.general": "Общее",
326
+ "repl.group.agent": "Агент",
327
+ "repl.group.session": "Сессии",
328
+ "repl.group.skill": "Скиллы",
329
+ "setup.title": "\n Мастер настройки MMA v2\n",
330
+ "setup.select_provider": "\n Выберите тип провайдера:",
331
+ "setup.select_provider_num": "\n Выберите провайдер (1-{max})",
332
+ "setup.scanning": " Сканирование локальных LLM-серверов...",
333
+ "setup.found_servers": " Найдено серверов: {count}",
334
+ "setup.no_servers": " Локальные серверы не найдены. Введите URL вручную.",
335
+ "setup.api_base": " API Base URL",
336
+ "setup.provider_type": " Тип провайдера",
337
+ "setup.api_key": " API ключ (нажмите Enter для пропуска)",
338
+ "setup.fetching_models": " Загрузка списка моделей...",
339
+ "setup.available_models": " Доступные модели:",
340
+ "setup.select_model": " Выберите модель (1-{max})",
341
+ "setup.model_name": " Имя модели",
342
+ "setup.testing": "\n Тестирование чата с моделью \"{model}\"...",
343
+ "setup.ok": " OK — соединение успешно",
344
+ "setup.warning": " ВНИМАНИЕ: не удалось подключиться — проверьте API endpoint и ключ",
345
+ "setup.agent_settings": "\n --- Настройки агента ---",
346
+ "setup.context_window": " Контекстное окно (токены)",
347
+ "setup.max_iters": " Макс итераций инструментов",
348
+ "setup.language": "\n --- Язык ---",
349
+ "setup.ui_lang": " Язык интерфейса (en/ru)",
350
+ "setup.complete": "\n Настройка завершена!\n",
351
+ "setup.select_server": "\n Выберите сервер (1-{max})",
352
+ "setup.custom_url": "Свой URL",
353
+ "setup.scanning_spinner": "Сканирование локальных LLM-серверов…",
354
+ "setup.fetching_spinner": "Загрузка списка моделей…",
355
+ "setup.testing_spinner": "Проверка чата с \"{model}\"…",
356
+ "setup.summary_setting": "Параметр",
357
+ "setup.summary_value": "Значение",
358
+ "setup.security_header": "\n --- Безопасность ---",
359
+ "setup.security_status_off": " Безопасность: ВЫКЛ (по умолчанию — все команды разрешены)",
360
+ "setup.security_configure": " Настроить безопасность? (y/N)",
361
+ "setup.security_bash_block": " Блокировать опасные команды (rm, sudo, ssh и т.д.)? (y/N)",
362
+ "setup.security_flags_block": " Блокировать опасные флаги (--force, -rf и т.д.)? (y/N)",
363
+ "setup.security_paths_deny": " Разрешить доступ к .git/, .env, node_modules/? (y/N)",
364
+ "skill.already_loaded": "Скилл \"{name}\" уже загружен",
365
+ "skill.not_found": "Скилл \"{name}\" не найден ни в одном каталоге",
366
+ "skill.no_match": "Нет скиллов подходящих для: {task}",
367
+ "skill.too_large": "Скилл \"{name}\" слишком большой ({tokens} токенов). Бюджет: {budget} токенов. Продолжайте задачу без этого скилла.",
368
+ "skill.exceeds_budget": "Скилл \"{name}\" ({tokens} токенов) превышает остаток бюджета ({remaining} токенов). Сначала выгрузите другие скиллы.",
369
+ "skill.loaded": "Скилл \"{name}\" загружен ({tokens} токенов, осталось {remaining})",
370
+ "skill.auto_loaded": "[Автозагружен скилл: {name}]",
371
+ "skill.prompt_hint": "НЕ загружайте скиллы автоматически. Загружайте скилл ТОЛЬКО когда пользователь явно об этом просит (например 'используй скилл X' или 'загрузи скилл Y'). Скиллы ниже перечислены только для справки — не угадывайте какой скилл подходит по описанию задачи.",
372
+ "skill.prompt_fallback": "Если load_skill не удался из-за большого размера скилла, продолжайте задачу без него — не останавливайтесь.",
373
+ "skill.loaded_content": "[Скилл загружен: {name}]\n{content}\n\nИспользуйте эти знания для ответа на вопрос пользователя.",
374
+ "exec.stuck": "Застряли на шаге {stepId}. Текущий: {description}. Нет прогресса {iterations} итераций.",
375
+ "exec.stuck_recovery": "[Обнаружено застревание: {iterations} итераций без прогресса. Прекратите повторять тот же подход. Попробуйте принципиально другую стратегию: используйте другой инструмент (например, 'browser' для сайтов с JavaScript вместо 'web_browse'), разбейте задачу на подзадачи или объясните пользователю что пошло не так и спросите совета.]",
376
+ "exec.tool_errors": "Инструмент {tool} сбоил {count} раз. Предложите другой подход.",
377
+ "exec.tool_errors_recovery": "[Инструмент {tool} сбоил {count} раз. Прекратите использовать этот инструмент и попробуйте другой подход или объясните проблему пользователю.]",
378
+ "exec.repetitive_tool": "[Вы вызвали {tool} {count} раз подряд с одинаковыми аргументами и результатом. Прекратите повторять — попробуйте другой подход: создайте файлы, измените аргументы или объясните пользователю проблему.]",
379
+ "exec.consecutive_failures_recovery": "[{count} последовательных вызовов тулов завершились ошибкой. Вы ходите по кругу — прекратите пытаться выполнить команды, которые постоянно падают. Объясните проблему пользователю или попробуйте совершенно другой подход: напишите файлы напрямую, используйте другой инструмент или разбейте задачу на части.]",
380
+ "exec.task_reminder": "[Напоминание о задаче: {task}. Не переключайтесь на посторонние задачи. Если не можете выполнить задачу — объясните почему и спросите совета.]",
381
+ "exec.plan_warning": "[⚠ Внимание: вы работаете над шагом {step} — \"{description}\". Ваш вызов {tool} касается файлов, не упомянутых в текущем шаге. Сосредоточьтесь на текущем шаге или обновите план через plan update.]",
382
+ "exec.off_track": "[⚠ Вне плана: шаг {stepId} — \"{description}\", но вы используете {tool} для другого пути. Объясните или вернитесь.]",
383
+ "exec.audit_pass": "[✓] Задача выполнена: {done}/{total} шагов, {files} файлов проверено",
384
+ "exec.audit_fail": "[✗] Задача не выполнена: {done}/{total} шагов, {files} файлов отсутствует",
385
+ "exec.audit_fail_typecheck": "[✗] Задача не выполнена: {done}/{total} шагов, {missing} файлов отсутствует, ошибка typecheck: {typeError}",
386
+ "exec.audit_incomplete": "[⚠ Финальная проверка не пройдена: {summary}. Задача НЕ завершена — продолжайте работу. Оставшиеся шаги: {steps}]",
387
+ "hall.max_retries_exhausted": "Модель вернула пустой или недостаточный ответ после нескольких попыток",
388
+ "hall.short_response": "Слишком короткий или пустой ответ",
389
+ "hall.repetitive": "Слишком повторяющийся ответ ({pct}% совпадение)",
390
+ "hall.uncertainty": "Маркеры неопределённости: {markers}",
391
+ "hall.unknown_paths": "Упомянутые файлы не найдены: {paths}",
392
+ "hall.contradiction": "Противоречит предыдущему решению: \"{decision}\" в {location}",
393
+ "hall.uncertainty_prefix": "\n\n[⚠️ Неопределённость] ",
394
+ "browser.repeated_action": "Вы повторили то же действие ({action}) {threshold} раз. Попробуйте другой подход: используйте \"snapshot\" для перечитки страницы, другие номера элементов или другой URL.",
395
+ "browser.unknown_action": "Неизвестное действие: {action}",
396
+ "browser.error": "Ошибка браузера: {message}",
397
+ "browser.no_page": "Нет открытой страницы. Сначала выполните \"open\".",
398
+ "browser.url_required": "Требуется URL",
399
+ "browser.create_page_failed": "Не удалось создать страницу",
400
+ "browser.nav_failed": "Ошибка навигации: {message}",
401
+ "browser.invalid_target": "Неверный таргет. Укажите номер элемента из snapshot.",
402
+ "browser.click_failed": "Ошибка клика: {message}. Проверьте номер элемента.",
403
+ "browser.invalid_target_short": "Неверный таргет.",
404
+ "browser.text_required": "Требуется текст.",
405
+ "browser.type_failed": "Ошибка ввода: {message}",
406
+ "browser.direction_invalid": "Направление должно быть: up, down, top, bottom",
407
+ "browser.scroll_failed": "Ошибка прокрутки: {message}",
408
+ "browser.closed": "Браузер закрыт.",
409
+ "browser.no_page_short": "Нет страницы",
410
+ "browser.no_elements": "(нет интерактивных элементов на странице)",
411
+ "browser.more_elements": "... и другие элементы не показаны. Используйте прокрутку или поиск.",
412
+ "pipeline.invalid": "Невалидный пайплайн: требуются name и steps",
413
+ "pipeline.step_missing_fields": "Шаг не содержит обязательных полей (id, agent, prompt): {step}",
414
+ "pipeline.circular": "Циклическая зависимость: {stepId}",
415
+ "plugin.loaded": "Загружен плагин: {name}",
416
+ "plugin.skipped": "Пропущен несовместимый плагин: {entry} ({message})",
417
+ "migration.detected": "[MMA] Обнаружен старый конфиг. {summary}",
418
+ "migration.summary": "[MMA] {summary}",
419
+ "migration.config_bak": "- config → config.json.bak",
420
+ "migration.dir_bak": "- .mma/ → .mma.bak/ ({count} файлов)",
421
+ "migration.migrated": "Мигрировано:",
422
+ "migration.not_needed": "Миграция не требуется",
423
+ "ui.error_prefix": "Ошибка: ",
424
+ "ui.success_prefix": "✓ ",
425
+ "ui.warning_prefix": "⚠ ",
426
+ "ui.thinking": "Думаю…",
427
+ "indexer.map_header": "Карта проекта",
428
+ "indexer.top_directories": "Основные директории",
429
+ "indexer.files": "Файлы",
430
+ "indexer.empty": "Нет проиндексированных файлов",
431
+ "indexer.and_more": "... и ещё {count} файлов",
432
+ "indexer.project_map_desc": "Получить карту проекта: сводка по файлам, языкам и экспортам. Используйте действие 'find' для поиска файлов по пути или экспорту, 'refresh' для перестроения индекса.",
433
+ "indexer.project_map_action_desc": "Действие: summary, refresh или find",
434
+ "indexer.project_map_query_desc": "Строка поиска для действия find (совпадение по пути или экспортированным именам)",
435
+ "indexer.summary": "Карта проекта: {summary}",
436
+ "indexer.refreshed": "Карта проекта обновлена: {summary}",
437
+ "indexer.not_indexed": "Проект ещё не проиндексирован",
438
+ "indexer.find_results": "Найдено {count} совпадающих файлов:\n{results}",
439
+ "indexer.no_matches": "Нет совпадающих файлов для \"{query}\"",
440
+ "tool.friendly.project_map": "Карта проекта",
441
+ "config.decryption_warning": "Предупреждение: не удалось расшифровать конфигурацию: {error}",
442
+ "config.encryption_warning": "Предупреждение: не удалось зашифровать конфигурацию: {error}",
443
+ "image.source_required": "Укажите источник изображения: путь к файлу, URL или \"clipboard\".",
444
+ "image.clipboard_empty": "Буфер обмена не содержит изображение. Скопируйте изображение (например, скриншот через Win+Shift+S).",
445
+ "image.not_found": "Файл изображения не найден: {path}",
446
+ "image.no_context": "Менеджер контекста недоступен. Изображение можно прикрепить только во время активной сессии.",
447
+ "image.attached": "Изображение прикреплено из {source} ({size}). Оно будет включено в следующее сообщение.",
448
+ "image.error": "Не удалось загрузить изображение: {message}",
449
+ "tool.friendly.attach_image": "Прикрепить изображение",
450
+ "repl.image": "Прикрепить изображение",
451
+ "repl.image_usage": "/image <путь|URL|clipboard> — прикрепить изображение к следующему сообщению",
452
+ "tool.friendly.remember": "Запомнить",
453
+ "tool.friendly.recall": "Вспомнить",
454
+ "tool.remember.preference": "Запомнено: {key} = {value}",
455
+ "tool.remember.entry": "Запомнено: {category} — \"{entry}\"",
456
+ "tool.remember.key_required": "Для preferences требуется ключ (key)",
457
+ "tool.remember.entry_required": "Требуется текст записи",
458
+ "tool.recall.empty": "Ничего не найдено по \"{query}\"",
459
+ "tool.recall.no_memory": "Память пуста",
460
+ "tool.recall.search_results": "Результаты {category}:\n{results}"
461
+ }
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ export { DEFAULTS, loadConfig } from './config/index';
2
+ export { Logger } from './logger/index';
3
+ export { PromptBuilder } from './core/index';
4
+ export { OpenAICompatProvider, TokenCounter, parseChunks, OrchestratorClient } from './llm/index';
5
+ export { ToolRegistry, ToolExecutor, readFileTool, writeFileTool, editFileTool, globTool, grepTool, listDirTool, createDirTool, deleteFileTool, moveFileTool, fileInfoTool, bashTool, subagentTool, webSearchTool, webFetchTool, webBrowseTool, questionTool, approveTool, createLoadSkillTool, pipelineRunTool, mcpCallTool, searchHistoryTool, registerAllTools, } from './tools/index';
6
+ export { MigrationDetector, BackupManager } from './migration/index';
7
+ import { MigrationDetector } from './migration/detect';
8
+ import { BackupManager } from './migration/backup';
9
+ import { t } from './i18n/index';
10
+ import { homedir } from 'os';
11
+ import { join } from 'path';
12
+ export function checkMigration(configDir) {
13
+ const dir = configDir || join(homedir(), '.mma');
14
+ const detector = new MigrationDetector(dir);
15
+ if (detector.needsMigration()) {
16
+ const backup = new BackupManager(dir);
17
+ backup.backupConfig();
18
+ backup.backupAll();
19
+ const summary = backup.getBackupSummary();
20
+ console.log(t('migration.summary', { summary }));
21
+ }
22
+ }