micro-models-agent 0.51.1 → 0.52.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 (107) hide show
  1. package/dist/cli/commands.js +162 -38
  2. package/dist/cli/completer.js +5 -5
  3. package/dist/cli/main.js +42 -54
  4. package/dist/cli/repl-commands.js +138 -38
  5. package/dist/cli/repl.js +175 -89
  6. package/dist/cli/run-result.js +11 -0
  7. package/dist/cli/security-commands.js +6 -6
  8. package/dist/cli/setup.js +21 -15
  9. package/dist/config/config.js +54 -27
  10. package/dist/config/defaults.js +17 -0
  11. package/dist/config/domains.js +179 -0
  12. package/dist/config/index.js +2 -1
  13. package/dist/config/security.js +28 -8
  14. package/dist/core/agent.js +162 -30
  15. package/dist/core/bootstrap.js +94 -17
  16. package/dist/core/crash-handler.js +51 -0
  17. package/dist/core/environment.js +199 -0
  18. package/dist/core/session-logger.js +60 -6
  19. package/dist/core/version.js +2 -0
  20. package/dist/i18n/en.json +120 -39
  21. package/dist/i18n/ru.json +91 -10
  22. package/dist/llm/openai-compat.js +191 -53
  23. package/dist/llm/orchestrator.js +5 -3
  24. package/dist/logger/app-logger.js +50 -4
  25. package/dist/main.js +1288 -635
  26. package/dist/modules/browser/session.js +4 -0
  27. package/dist/modules/certification/cli.js +58 -19
  28. package/dist/modules/certification/loader.js +2 -1
  29. package/dist/modules/certification/manifest.js +22 -14
  30. package/dist/modules/certification/runner.js +91 -5
  31. package/dist/modules/certification/scenarios.js +290 -7
  32. package/dist/modules/context/fact-extractor.js +6 -0
  33. package/dist/modules/context/manager.js +19 -2
  34. package/dist/modules/execution/audit-runners.js +61 -7
  35. package/dist/modules/execution/execution-plugin.js +219 -60
  36. package/dist/modules/execution/module.js +207 -18
  37. package/dist/modules/execution/moe-executor.js +33 -20
  38. package/dist/modules/execution/plan-store.js +39 -0
  39. package/dist/modules/execution/plan-tool.js +188 -19
  40. package/dist/modules/execution/planner.js +27 -23
  41. package/dist/modules/execution/stuck-detector.js +244 -8
  42. package/dist/modules/execution/tracker.js +8 -6
  43. package/dist/modules/execution/verifier.js +15 -2
  44. package/dist/modules/hallucination/detector.js +4 -0
  45. package/dist/modules/hallucination/factual.js +45 -5
  46. package/dist/modules/indexer/module.js +1 -0
  47. package/dist/modules/lsp/client.js +123 -12
  48. package/dist/modules/lsp/index.js +1 -1
  49. package/dist/modules/lsp/module.js +30 -2
  50. package/dist/modules/lsp/probe.js +11 -1
  51. package/dist/modules/lsp/startup-check.js +5 -2
  52. package/dist/modules/plugins/builtin/lint-on-write.js +144 -41
  53. package/dist/modules/plugins/manager.js +57 -13
  54. package/dist/modules/pricing/index.js +61 -0
  55. package/dist/modules/pricing/prices.js +129 -0
  56. package/dist/modules/providers/create.js +22 -0
  57. package/dist/modules/providers/fallback.js +79 -0
  58. package/dist/modules/providers/health.js +46 -0
  59. package/dist/modules/providers/index.js +5 -0
  60. package/dist/modules/providers/manager.js +161 -0
  61. package/dist/modules/providers/presets.js +128 -0
  62. package/dist/modules/providers/registry.js +22 -0
  63. package/dist/modules/providers/types.js +1 -0
  64. package/dist/modules/registry.js +1 -0
  65. package/dist/modules/security/command-validator.js +14 -0
  66. package/dist/modules/security/encryption.js +6 -6
  67. package/dist/modules/security/network-validator.js +17 -0
  68. package/dist/modules/security/path-validator.js +22 -26
  69. package/dist/modules/session/store.js +10 -10
  70. package/dist/tools/approve.js +1 -0
  71. package/dist/tools/attach-image.js +12 -0
  72. package/dist/tools/bash.js +27 -4
  73. package/dist/tools/browser.js +1 -0
  74. package/dist/tools/chunk-query.js +1 -0
  75. package/dist/tools/create-dir.js +1 -0
  76. package/dist/tools/delete-file.js +1 -0
  77. package/dist/tools/download-file.js +1 -0
  78. package/dist/tools/edit-file.js +2 -1
  79. package/dist/tools/enable-tools.js +1 -0
  80. package/dist/tools/executor.js +17 -7
  81. package/dist/tools/file-info.js +1 -0
  82. package/dist/tools/glob-tool.js +1 -0
  83. package/dist/tools/grep-tool.js +54 -13
  84. package/dist/tools/list-dir.js +1 -0
  85. package/dist/tools/load-skill.js +1 -0
  86. package/dist/tools/mcp-call.js +1 -0
  87. package/dist/tools/move-file.js +1 -0
  88. package/dist/tools/path-utils.js +51 -1
  89. package/dist/tools/pipeline-run.js +1 -0
  90. package/dist/tools/process-kill.js +11 -0
  91. package/dist/tools/process-list.js +1 -0
  92. package/dist/tools/process-log.js +9 -0
  93. package/dist/tools/question.js +1 -0
  94. package/dist/tools/read-file.js +94 -6
  95. package/dist/tools/recall.js +1 -0
  96. package/dist/tools/remember.js +1 -0
  97. package/dist/tools/scope-check.js +7 -5
  98. package/dist/tools/search-history.js +1 -0
  99. package/dist/tools/subagent.js +4 -4
  100. package/dist/tools/web-browse.js +1 -0
  101. package/dist/tools/web-fetch.js +27 -6
  102. package/dist/tools/web-search.js +70 -43
  103. package/dist/tools/write-file.js +1 -0
  104. package/dist/ui/line-editor.js +142 -23
  105. package/dist/ui/line-math.js +8 -4
  106. package/dist/ui/renderer.js +57 -7
  107. package/package.json +50 -48
package/dist/i18n/en.json CHANGED
@@ -3,20 +3,21 @@
3
3
  "file.deleted": "Deleted {path}",
4
4
  "file.updated": "Updated {path}",
5
5
  "file.written": "Written {path}",
6
- "file.notfound": "File not found: {path}",
6
+ "file.notfound": "File not found: {path}\nThis does NOT mean the project is missing — the path may be wrong. Run list_dir on the working directory first; create files only after confirming what exists.",
7
7
  "file.dir_notfound": "Directory not found: {path}",
8
8
  "file.path_not_allowed": "Path not allowed: {path}",
9
9
  "file.path_not_allowed_short": "Path not allowed",
10
10
  "file.is_directory": "Is a directory, use rmdir: {path}",
11
11
  "file.replaced_in": "Replaced in {path}",
12
- "file.string_not_found": "String not found in file:\n{str}",
13
- "file.moved": "Moved {from} \u2192 {to}",
12
+ "file.string_not_found": "String not found in file:\n{str}\n\nUse read_file on {path} to see the current content before editing — the target may differ (whitespace, line endings) or was already replaced.",
13
+ "file.moved": "Moved {from} {to}",
14
14
  "file.not_found_short": "Not found: {path}",
15
- "file.notfound_resolved": "File not found: {path} (resolved to {resolved})",
15
+ "file.notfound_resolved": "File not found: {path} (resolved to {resolved})\nThe path was joined onto the working directory because it does not exist as given. Run list_dir to find the correct path.",
16
16
  "file.empty": "(empty)",
17
17
  "file.no_matches": "No matches",
18
18
  "file.truncated": "\n... (truncated)",
19
19
  "file.read_header": "── {path} ({ext}, {total} lines, lines {from}-{to})",
20
+ "file.read_range": "lines {from}-{to} of {total}",
20
21
  "file.read_truncated": "\n\n[Truncated: {remaining} more lines. Use read_file with offset={next} to continue]",
21
22
  "file.empty_page": "(empty page)",
22
23
  "error.timeout": "Request timed out",
@@ -36,7 +37,19 @@
36
37
  "error.http": "HTTP {status}: {statusText}",
37
38
  "error.llm_api": "LLM API error {status} ({statusText}): {errorText}",
38
39
  "error.llm_retries": "LLM request failed after retries",
40
+ "error.llm_429": "Rate limit exceeded (HTTP 429) for {model} on {baseUrl}. The provider is throttling requests — free models are especially strict. Get an API key or switch to a paid/faster model: {baseUrl}",
39
41
  "error.no_response_body": "No response body stream",
42
+ "error.llm_stream_idle": "LLM stream stalled — no data for {timeout}ms. If the provider buffers streaming (e.g. LM Studio) or generates very long tool calls, raise \"retry.noDataTimeoutMs\" in ~/.mma/config.json (restart required)",
43
+ "error.llm_stream_idle_toolcall": "LLM stream stalled after a tool_call started — no data for {timeout}ms. The provider most likely buffers SSE instead of streaming tool-call argument deltas (seen with LM Studio). Raise \"retry.noDataTimeoutMs\" in ~/.mma/config.json (restart required)",
44
+ "error.llm_truncated": "Response hit the completion token limit ({tokens}) and was cut off before any content arrived. Split the task into smaller outputs or raise \"maxCompletionTokens\" in the config",
45
+ "error.llm_truncated_toolcall": "Response hit the completion token limit ({tokens}) in the middle of a tool_call — its arguments were cut off. Write the file in smaller chunks (several write_file/edit_file calls) or raise \"maxCompletionTokens\" in the config",
46
+ "error.llm_timeout": "LLM request timed out ({timeout}ms)",
47
+ "env.runtime_node": "Running under Node (v{version}) — clipboard image paste, subagent performance and LSP spawn on Windows degrade. Install Bun (https://bun.sh) for full features.",
48
+ "env.runtime_old": "Runtime version {version} is below the required engines {engine}.",
49
+ "env.tool_missing": "Tool not found on PATH: {tool}",
50
+ "env.playwright_missing": "Playwright package is not installed — the browser tool will fail. Install with: bun add playwright",
51
+ "env.playwright_browsers_missing": "Playwright browsers not downloaded ({dir}). The browser tool will fail. Install with: bunx playwright install chromium",
52
+ "env.crash_stderr": "MMA crashed ({type}): {message} — crash report written to ~/.mma/logs/crash.jsonl",
40
53
  "session.started": "Session started: {id}",
41
54
  "session.ended": "Session ended: {id}",
42
55
  "session.not_found": "Session not found: {id}",
@@ -56,7 +69,7 @@
56
69
  "session.available": "Available sessions:",
57
70
  "session.no_match": "No session matching \"{query}\"",
58
71
  "session.default_name": "Session {date}",
59
- "session.info": "[Session: \"{name}\" ({id}) \u2014 {count} messages so far]",
72
+ "session.info": "[Session: \"{name}\" ({id}) {count} messages so far]",
60
73
  "session.col_active": "",
61
74
  "session.col_id": "ID",
62
75
  "session.col_name": "Name",
@@ -91,7 +104,7 @@
91
104
  "tool.web_fetch_result": "Fetched page: {url} — {chars} chars, {lines} lines{truncated}",
92
105
  "tool.web_browse_result": "Browsed page: {url} — {chars} chars, {lines} lines{truncated}",
93
106
  "tool.web_search_result": "Search results for \"{query}\" — {count} results",
94
- "tool.downloaded": "Downloaded {url} \u2192 {path} ({size} bytes, {type})",
107
+ "tool.downloaded": "Downloaded {url} {path} ({size} bytes, {type})",
95
108
  "tool.download_too_large": "Download blocked: file exceeds the {max} bytes limit",
96
109
  "tool.friendly.browser": "Browser",
97
110
  "tool.friendly.subagent": "Sub-agent task",
@@ -104,7 +117,7 @@
104
117
  "tool.truncated": "[Truncated: {tokens} tokens removed]",
105
118
  "tool.subagent_queued": "Sub-agent task queued: {task}",
106
119
  "tool.subagent_artifact": "Sub-agent completed. Full result saved to artifact: {path}\nIterations: {iterations}\nSummary:\n{summary}",
107
- "tool.pipeline_started": "Pipeline \"{name}\" execution started. Pipeline engine is a stub \u2014 run dispatched.",
120
+ "tool.pipeline_started": "Pipeline \"{name}\" execution started. Pipeline engine is a stub run dispatched.",
108
121
  "tool.mcp_call": "MCP call: {server}/{tool} with {args}",
109
122
  "tool.action_required": "Action is required.",
110
123
  "tool.approve_prompt": "Approve? {action}",
@@ -131,12 +144,13 @@
131
144
  "tool.skill_available_hint": "Available skills",
132
145
  "tool.no_results": "No results found for \"{query}\"",
133
146
  "tool.search_results": "Search results for \"{query}\":\n{results}",
147
+ "tool.web_search_disabled": "Web search is disabled (webSearch.enabled: false). Use file/system tools only.",
134
148
  "tool.history_results": "History results for \"{query}\":\n{results}",
135
149
  "tool.no_history": "No history entries matching \"{query}\"",
136
150
  "tool.no_sessions_dir": "No sessions directory found at {dir}",
137
151
  "tool.history_error": "Error searching history: {error}",
138
152
  "tool.memory_error": "Memory error: {error}",
139
- "tool.screenshot_unavailable": "[Screenshot captured \u2014 image not available for text-only model]",
153
+ "tool.screenshot_unavailable": "[Screenshot captured image not available for text-only model]",
140
154
  "tool.timeout": "Tool {name} timed out after {seconds} seconds",
141
155
  "tool.aborted": "Tool {name} was interrupted by user",
142
156
  "tool.interactive_disabled": "Interactive tool is disabled in exit-on-complete mode. Proceed without asking the user.",
@@ -146,6 +160,8 @@
146
160
  "proc.output_preview": "First output:\n{lines}",
147
161
  "proc.none": "No background processes running.",
148
162
  "proc.not_found": "Process not found: {id}",
163
+ "proc.missing_id": "Provide the process id: process_kill id=proc_xxx (the id is returned by bash when a command goes to the background, or by process_list).",
164
+ "proc.missing_id_list": "No background processes are currently running.",
149
165
  "proc.killed": "Process {id} (PID {pid}) killed.",
150
166
  "proc.kill_failed": "Failed to kill process {id}",
151
167
  "proc.list_header": "Background processes",
@@ -161,7 +177,7 @@
161
177
  "plan.no_steps": "No plan steps specified. Provide concrete steps with files and commands.",
162
178
  "plan.created": "Plan created: {title} ({steps} steps)",
163
179
  "plan.coverage_warning": "Plan may be missing required files from the task: {missing}. Add steps covering them.",
164
- "plan.step_done": "Step {n}/{total}: {description} \u2713",
180
+ "plan.step_done": "Step {n}/{total}: {description} ",
165
181
  "plan.complete": "Task complete: {summary}",
166
182
  "plan.title_steps": "Plan \"{title}\" created with {count} steps",
167
183
  "plan.step_marked": "Step {step} marked as {status}",
@@ -180,6 +196,7 @@
180
196
  "plan.kinds_invalid": "Invalid step kind(s): {kinds}. Use \"create\" or \"delete\".",
181
197
  "plan.kinds_not_array": "kinds must be an array of \"create\" or \"delete\"",
182
198
  "plan.deliverables_remain": "Cannot mark step {step} done: the files it names still exist: {files}. This step is kind=delete — delete these files first (or set status=skipped if they should stay).",
199
+ "plan.typecheck_failed": "Cannot mark step {step} done: the last check still reports a compile error:\n{error}\nFix the error and re-edit the file (a clean write clears the failure), or mark the step status=skipped if it is not needed.",
183
200
  "plan.show_header": "Plan status:",
184
201
  "plan.show_empty": "(plan has no steps)",
185
202
  "plan.list_header": "Plans:",
@@ -192,6 +209,17 @@
192
209
  "plan.active_in_progress": "Cannot create a new plan: active plan {id} already has progress ({done}/{total} done, current: step {current}). Resume it — use \"plan show\" to view, then continue working. To replace it, call \"plan abort\" first, then \"plan create\" again.",
193
210
  "plan.id_ignored": "note: plan ids are auto-generated; use \"plan switch\" to activate an existing plan by id.",
194
211
  "plan.existing_fresh": "note: the previous active plan had no progress and was preserved as a draft.",
212
+ "plan.already_active": "Plan {id} is already active — nothing to switch.",
213
+ "plan.already_archived": "Plan {id} is already archived — nothing to abort.",
214
+ "plan.aborted_id": "Plan {id} aborted and archived.",
215
+ "plan.delete_no_id": "Provide a plan id to delete (plan delete id=plan_xxx).",
216
+ "plan.deleted": "Plan {id} deleted permanently.",
217
+ "plan.purged": "Deleted {count} plan(s). Plan storage is empty.",
218
+ "plan.no_deliverables": "note: step {step} names no files — its completion cannot be auto-verified; run an explicit check (e.g. build/tests) before your final answer.",
219
+ "plan.bulk_update_rejected": "Bulk steps[] rewrite via action=update is not supported: it would discard all step statuses. Use \"re-plan\" (keeps completed steps, replaces the rest) or mark steps individually: plan update step=N status=done|failed|skipped.",
220
+ "plan.readonly": "Plan {id} is {status} (read-only) — it cannot be updated. Use \"plan switch\" to activate it, or create a new plan for new work.",
221
+ "plan.list_legend": "[*] active · [ ] draft · [-] archived",
222
+ "exec.plan_nudge": "You made {count} file-changing tool call(s) without a plan. For tasks that create or modify files, or span multiple steps, create a plan first (plan create) with concrete steps (exact filenames, commands, deliverables), then continue.",
195
223
  "todo.added": "Added {count} todo(s): {items}",
196
224
  "todo.marked_done": "Marked {count} item(s) as done",
197
225
  "todo.no_active": "No active todos",
@@ -206,6 +234,7 @@
206
234
  "verify.script_passed": "Script '{script}' passed",
207
235
  "verify.script_failed": "Script '{script}' failed: {message}",
208
236
  "verify.syntax_error": "Syntax error in: {path}",
237
+ "verify.file_still_exists": "File should be deleted but still exists: {path}",
209
238
  "verify.no_files": "Step {step} has no named files to verify — run a real check instead (bash: bun run build / bun test / lsp_check) and confirm the result.",
210
239
  "lsp.unavailable": "static checks are unavailable (server not found). Verify via the project's own build/test instead.",
211
240
  "lsp.check_disabled": "LSP checks are disabled in the config.",
@@ -213,8 +242,9 @@
213
242
  "lsp.check_notfound": "Path not found: {path}",
214
243
  "lsp.check_unsupported": "No LSP server configured for: {path}",
215
244
  "lsp.check_clean": "No errors or warnings detected ({count} file(s) checked).",
245
+ "lsp.checked_files": "Checked {count} file(s):",
216
246
  "lsp.startup_header": "[Existing project errors (checked at session start) — fix these before continuing]:",
217
- "cli.description": "Micro Models Agent \u2014 AI coding agent for small models",
247
+ "cli.description": "Micro Models Agent AI coding agent for small models",
218
248
  "cli.init": "Run interactive setup wizard",
219
249
  "cli.config_saved": "Configuration saved to ~/.mma/config.json",
220
250
  "cli.manage_config": "Manage configuration",
@@ -222,6 +252,7 @@
222
252
  "cli.set_value": "Set a config value",
223
253
  "cli.set_done": "Set {key}={value}",
224
254
  "cli.show_config": "Show current config",
255
+ "cli.migrate_config": "Migrate legacy config.json to domain format",
225
256
  "cli.manage_models": "Manage models",
226
257
  "cli.list_models": "List available models",
227
258
  "cli.current_model": "Current model:",
@@ -269,6 +300,8 @@
269
300
  "cli.cert_fixture_missing": "Fixture missing for {id}: {path}",
270
301
  "cli.cert_marks_hint": "Markers: ✔ certified on this provider, ○ certified on an older MMA version, · not certified",
271
302
  "cli.manage_providers": "Manage providers",
303
+ "cli.provider_check": "Probe configured providers (free listModels call)",
304
+ "repl.provider_down": "[WARN] Provider \"{name}\" is unreachable: {error}",
272
305
  "cli.list_providers": "List providers",
273
306
  "cli.current_provider": "Current provider:",
274
307
  "cli.base_url": "Base URL:",
@@ -397,6 +430,19 @@
397
430
  "repl.lsp_timeout": "timeout",
398
431
  "repl.lsp_failed": "did not start",
399
432
  "repl.lsp_unknown": "unknown",
433
+ "repl.lsp": "LSP server management (status, restart, check)",
434
+ "repl.lsp_usage": "Usage: /lsp [status|restart|check <path>]",
435
+ "repl.lsp_not_available": "LSP module not available",
436
+ "repl.lsp_status_header": "LSP Status:",
437
+ "repl.lsp_enabled": "Enabled:",
438
+ "repl.lsp_disabled_servers": "Disabled servers:",
439
+ "repl.lsp_failure_counts": "Failure counts:",
440
+ "repl.lsp_all_ok": "All servers operational",
441
+ "repl.lsp_restarting": "Resetting LSP server state...",
442
+ "repl.lsp_restarted": "LSP servers reset. Failed servers will be retried on next use.",
443
+ "repl.lsp_check_usage": "Usage: /lsp check <file-or-directory>",
444
+ "repl.lsp_checking": "Running LSP check on {path}...",
445
+ "repl.lsp_check_error": "LSP check failed: {error}",
400
446
  "repl.work_dir": "Dir:",
401
447
  "repl.agents_label": "Instructions:",
402
448
  "repl.not_found": "not found",
@@ -408,14 +454,14 @@
408
454
  "repl.wizard": "Run setup wizard",
409
455
  "repl.wizard_usage": "Usage: /wizard",
410
456
  "repl.wizard_running": "Running setup wizard... (current config will be overwritten)",
411
- "repl.provider_list": "Show/set provider",
457
+ "repl.provider_list": "List configured providers or hot-swap the active one",
412
458
  "repl.provider_current": "Current provider",
413
459
  "repl.provider_set": "Provider set to: {name}",
414
- "repl.provider_usage": "Usage: /provider list | /provider use <type>",
415
- "repl.model_list": "Show/set model",
460
+ "repl.provider_usage": "/provider list - show entries (* = active, prio = fallback order) | /provider use <name> - switch without restart",
461
+ "repl.model_list": "List models of the active provider or switch the model",
416
462
  "repl.model_current": "Current model",
417
463
  "repl.model_set": "Model set to: {name}",
418
- "repl.model_usage": "Usage: /model list | /model use <name>",
464
+ "repl.model_usage": "/model list - fetch models from the active provider | /model use <name> - switch model",
419
465
  "repl.group.general": "General",
420
466
  "repl.group.agent": "Agent",
421
467
  "repl.group.session": "Sessions",
@@ -434,8 +480,8 @@
434
480
  "setup.select_model": " Select model (1-{max})",
435
481
  "setup.model_name": " Model name",
436
482
  "setup.testing": "\n Testing chat with model \"{model}\"...",
437
- "setup.ok": " OK \u2014 connection successful",
438
- "setup.warning": " WARNING: could not connect \u2014 check your API endpoint and key",
483
+ "setup.ok": " OK connection successful",
484
+ "setup.warning": " WARNING: could not connect check your API endpoint and key",
439
485
  "setup.agent_settings": "\n --- Agent settings ---",
440
486
  "setup.context_window": " Context window (tokens)",
441
487
  "setup.max_iters": " Max tool iterations",
@@ -451,6 +497,7 @@
451
497
  "setup.summary_value": "Value",
452
498
  "setup.security_header": "\n --- Security ---",
453
499
  "setup.security_status_off": " Security: OFF (default — all commands allowed)",
500
+ "setup.security_status_on": " Security: ON (balanced policy by default)",
454
501
  "setup.security_configure": " Configure security? (y/N)",
455
502
  "setup.security_bash_block": " Block dangerous commands (rm, sudo, ssh, etc.)? (y/N)",
456
503
  "setup.security_flags_block": " Block dangerous flags (--force, -rf, etc.)? (y/N)",
@@ -471,36 +518,42 @@
471
518
  "exec.tool_errors_recovery": "Tool {tool} has failed {count} times in a row. Try an alternative: create files directly via write_file, use a different command, or if nothing works — skip this step via plan update step=N status=skipped with a note explaining why.",
472
519
  "exec.repetitive_tool": "Called {tool} {count} times with identical arguments and result. Try a different approach — create files directly, change arguments, or check process status via process_log.",
473
520
  "exec.consecutive_failures_recovery": "{count} consecutive tool failures. Create files directly via write_file instead of terminal commands. Check that dependencies are installed (npm install). Do not run build/tests until all files are created.",
521
+ "exec.bash_flailing_recovery": "bash failed in {fails} of the last {window} attempts. Stop using shell commands for file operations on this machine — they do not work. Use the dedicated tools instead: read_file (the header shows line counts), write_file, edit_file, file_info (file size), glob/grep for search",
474
522
  "exec.read_only_loop": "No write/exec for {count} tool calls — the agent is only reading/exploring.",
475
523
  "exec.read_only_loop_recovery": "{count} consecutive read-only tool calls (read_file/glob/grep/browser) with no writes. STOP exploring and make the edit the task requires: read the file, then call write_file or edit_file. If you cannot finish the task, ask the user instead of re-reading the same files.",
476
524
  "exec.plan_warning": "Current plan step {step} is \"{description}\", but {tool} is being called for files outside this step. Complete the current step first, then call plan update step={step} status=done before moving to the next step.",
477
525
  "exec.plan_blocked": "{max} consecutive calls outside the current step. Finish step {step} before proceeding — other steps should wait until this one is complete.",
478
526
  "exec.off_track": "Step {stepId} — \"{description}\" — but you are using {tool} on a different path. Return to the current step.",
479
- "exec.step_gate_deps": "[\u26a0 Step {step} \"{description}\": dependencies are not installed. First run the install command (npm install, pip install, etc.). Verify the lock file or dependency directory exists. If this step is NOT actually needed (no external dependencies), skip it: plan update step={step} status=skipped note=\"deps not needed\".]",
480
- "exec.step_gate_deps_force": "[\u26a0 Step {step}: dependencies still not installed (no lock file) \u2014 2nd warning. If this step is NOT needed, IMMEDIATELY call: plan update step={step} status=skipped note=\"deps not needed\". If it IS needed, run the install command right now. Do NOT make other tool calls before updating the plan.]",
481
- "exec.step_gate_empty": "[\u26a0 Step {step}: files exist but appear empty: {files}. Add real code to these files before advancing to the next step.]",
482
- "exec.step_gate_ok": "[\u2713] Step {step} completed and verified. MOVING to step {nextStep}: \"{nextDesc}\". Work ONLY on this step.",
483
- "exec.step_gate_last": "[\u2713] Step {step} completed — that was the final step. Verify everything together and provide the final answer.]",
484
- "exec.audit_pass": "[\u2713] Task complete: {done}/{total} steps done, {files} files verified",
485
- "exec.audit_pending": "[\u2717] Task incomplete: {done}/{total} steps done — remaining steps are not marked done",
486
- "exec.audit_fail": "[\u2717] Task incomplete: {done}/{total} steps done, {files} files missing",
487
- "exec.audit_leftovers": "[\u2717] Task incomplete: {done}/{total} steps done, {files} files from delete-steps still exist",
488
- "exec.audit_fail_tests": "[\u2717] Task incomplete: {done}/{total} steps done, tests FAILING: {failed} failed / {passed} passed — {detail}",
489
- "exec.audit_fail_typecheck": "[\u2717] Task incomplete: {done}/{total} steps done, {missing} files missing, typecheck error: {typeError}",
490
- "exec.audit_incomplete": "[\u26a0 Final audit incomplete: {summary}. Task is NOT finished \u2014 continue working. Remaining steps: {steps}]",
491
- "exec.mass_edit_warning": "\u26a0\ufe0f Plan affects {count} files \u2014 review the full list before proceeding.",
492
- "exec.escalation": "\n\n\u26a0\ufe0f Agent stuck on step {stepId} ({description}). Escalating to user \u2014 please provide guidance.",
527
+ "exec.step_gate_deps": "[ Step {step} \"{description}\": dependencies are not installed. First run the install command (npm install, pip install, etc.). Verify the lock file or dependency directory exists. If this step is NOT actually needed (no external dependencies), skip it: plan update step={step} status=skipped note=\"deps not needed\".]",
528
+ "exec.step_gate_deps_force": "[ Step {step}: dependencies still not installed (no lock file) 2nd warning. If this step is NOT needed, IMMEDIATELY call: plan update step={step} status=skipped note=\"deps not needed\". If it IS needed, run the install command right now. Do NOT make other tool calls before updating the plan.]",
529
+ "exec.step_gate_empty": "[ Step {step}: files exist but appear empty: {files}. Add real code to these files before advancing to the next step.]",
530
+ "exec.step_gate_ok": "[] Step {step} completed and verified. MOVING to step {nextStep}: \"{nextDesc}\". Work ONLY on this step.",
531
+ "exec.step_gate_last": "[] Step {step} completed — that was the final step. Verify everything together and provide the final answer.]",
532
+ "exec.audit_pass": "[] Task complete: {done}/{total} steps done, {files} files verified",
533
+ "exec.audit_pending": "[] Task incomplete: {done}/{total} steps done — remaining steps are not marked done",
534
+ "exec.audit_fail": "[] Task incomplete: {done}/{total} steps done, {files} files missing",
535
+ "exec.audit_leftovers": "[] Task incomplete: {done}/{total} steps done, {files} files from delete-steps still exist",
536
+ "exec.audit_fail_tests": "[] Task incomplete: {done}/{total} steps done, tests FAILING: {failed} failed / {passed} passed — {detail}",
537
+ "exec.audit_fail_typecheck": "[] Task incomplete: {done}/{total} steps done, {missing} files missing, typecheck error: {typeError}",
538
+ "exec.audit_incomplete": "[ Final audit incomplete: {summary}. Task is NOT finished continue working. Remaining steps: {steps}]",
539
+ "exec.mass_edit_warning": "⚠️ Plan affects {count} files review the full list before proceeding.",
540
+ "exec.escalation": "\n\n⚠️ Agent stuck on step {stepId} ({description}). Escalating to user please provide guidance.",
493
541
  "exec.hints": "\n[Hints]\n{hints}",
494
- "exec.file_rewrite_warning": "\u26a0\ufe0f File {file} has been rewritten {count} times. Consider a different approach \u2014 the current fix strategy is not working.",
495
- "exec.forbidden_cmd": "STOP using \"{cmd}\" via the bash tool \u2014 it is not a native Windows cmd.exe command and has failed repeatedly this session. Use the dedicated tool instead: grep \u2192 the grep tool, ls/dir \u2192 list_dir, find \u2192 glob, rm \u2192 delete_file, sed \u2192 edit_file, touch \u2192 write_file, which \u2192 `where`, cp/mv \u2192 move_file, diff \u2192 read_file. Do NOT call bash for this purpose again.",
496
- "exec.npm_exec_hint": "\"could not determine executable to run\" \u2014 no \"bin\" for that package/script. Use \"npm run <script>\" (script must exist in package.json) or \"bunx <pkg>\" for a package that declares a bin.",
542
+ "exec.file_rewrite_warning": "⚠️ File {file} has been rewritten {count} times. Consider a different approach the current fix strategy is not working.",
543
+ "exec.forbidden_cmd": "STOP using \"{cmd}\" via the bash tool it is not a native Windows cmd.exe command and has failed repeatedly this session. Use the dedicated tool instead: grep the grep tool, ls/dir list_dir, find glob, rm delete_file, sed edit_file, touch write_file, which `where`, cp/mv move_file, diff read_file. Do NOT call bash for this purpose again.",
544
+ "exec.error_search_results": "The error \"{sig}\" has occurred {count} times. Web search found:\n{results}\nApply a matching solution from these results. If none is relevant do NOT repeat the same approach; change strategy or honestly report being stuck.",
545
+ "exec.error_search_failed": "Web search returned nothing for \"{query}\".",
546
+ "exec.error_search_no_query": "Error output is not meaningful — skipping the web search.",
547
+ "exec.npm_exec_hint": "\"could not determine executable to run\" — no \"bin\" for that package/script. Use \"npm run <script>\" (script must exist in package.json) or \"bunx <pkg>\" for a package that declares a bin.",
548
+ "exec.hidden_tool_hint": "\"{tool}\" is not a shell command — it is an MMA tool that is currently hidden. Call the enable_tools tool with tags [\"shell\"] to unlock it; it becomes available on the next iteration.",
549
+ "exec.task_reminder": "Task: {task}. Continue making progress — do not repeat failed actions.",
497
550
  "hall.max_retries_exhausted": "Model returned empty or insufficient responses after multiple retries",
498
551
  "hall.short_response": "Response too short or empty",
499
552
  "hall.repetitive": "Response too repetitive ({pct}% overlap)",
500
553
  "hall.uncertainty": "Uncertainty markers: {markers}",
501
554
  "hall.unknown_paths": "Mentioned file paths not found in known files: {paths}",
502
555
  "hall.contradiction_llm": "Contradicts an earlier decision{reason}",
503
- "hall.uncertainty_prefix": "\n\n[\u26a0\ufe0f Uncertainty] ",
556
+ "hall.uncertainty_prefix": "\n\n[⚠️ Uncertainty] ",
504
557
  "browser.repeated_action": "You have repeated the same action ({action}) {threshold} times. Try a different approach: use \"snapshot\" to re-read the page, try different element numbers, or navigate to a different URL.",
505
558
  "browser.unknown_action": "Unknown action: {action}",
506
559
  "browser.error": "Browser error: {message}",
@@ -532,14 +585,15 @@
532
585
  "plugin.dedup_older": "Plugin {name} v{version} skipped: a newer version is already loaded",
533
586
  "migration.detected": "[MMA] Detected old config. {summary}",
534
587
  "migration.summary": "[MMA] {summary}",
535
- "migration.config_bak": "- config \u2192 config.json.bak",
536
- "migration.dir_bak": "- .mma/ \u2192 .mma.bak/ ({count} files)",
588
+ "migration.config_bak": "- config config.json.bak",
589
+ "migration.dir_bak": "- .mma/ .mma.bak/ ({count} files)",
537
590
  "migration.migrated": "Migrated:",
538
591
  "migration.not_needed": "No migration needed",
539
592
  "ui.error_prefix": "Error: ",
540
- "ui.success_prefix": "\u2713 ",
541
- "ui.warning_prefix": "\u26a0 ",
593
+ "ui.success_prefix": " ",
594
+ "ui.warning_prefix": " ",
542
595
  "ui.thinking": "Thinking…",
596
+ "ui.tool_running": "{tool}…",
543
597
  "ui.step_context": "step {id}: {desc}",
544
598
  "indexer.map_header": "Project map",
545
599
  "indexer.top_directories": "Top directories",
@@ -561,6 +615,11 @@
561
615
  "tool.friendly.project_map": "Project map",
562
616
  "config.decryption_warning": "Warning: Failed to decrypt config: {error}",
563
617
  "config.encryption_warning": "Warning: Failed to encrypt config: {error}",
618
+ "config.migrate_start": "Migrating config to domain format...",
619
+ "config.migrate_done": "Migration complete. Created {count} domain files. Legacy saved as config.json.bak.",
620
+ "config.migrate_no_legacy": "No legacy config.json found. Already using domain format.",
621
+ "config.migrate_error": "Migration failed: {error}",
622
+ "config.legacy_hint": "Config: using legacy config.json. Run \"mma config migrate\" to switch to domain format.",
564
623
  "image.source_required": "Image source is required. Provide a file path, URL, or \"clipboard\".",
565
624
  "image.clipboard_empty": "Clipboard does not contain an image. Copy an image first (e.g. screenshot with Win+Shift+S).",
566
625
  "image.not_found": "Image file not found: {path}",
@@ -594,5 +653,27 @@
594
653
  "tools.enable_already_active": "Tool tags already active: {tags}.",
595
654
  "tools.enable_added": "Enabled tool tags: {tags}. Available tools now: {tools}",
596
655
  "tools.hidden_header": "Additional tools (enable on demand via enable_tools or route to subagent tool_tags):",
597
- "tool.friendly.enable_tools": "Enable tools"
656
+ "tool.friendly.enable_tools": "Enable tools",
657
+ "cli.provider_base_hint": "Base URL set to: {baseUrl}",
658
+ "cli.add_provider": "Add a provider to the config",
659
+ "cli.provider_no_url": "No base URL for provider \"{name}\". Pass --url.",
660
+ "cli.provider_added": "Provider added: {name}",
661
+ "cli.provider_switch_hint": "Switch to it with: mma provider use <name>",
662
+ "repl.cost": "Total cost: {cost}",
663
+ "repl.cost_breakdown": "By provider: {breakdown}",
664
+ "repl.tokens": "Tokens used: {tokens}",
665
+ "repl.ctrl_c_interrupt": "\n[Ctrl+C] Stopping agent... (press again to force)",
666
+ "exec.stop_directive": "STOP. Step {stepId} (\"{description}\") took {iterations} iterations with no progress. DO NOT continue this step. Immediately call: plan update step={stepId} status=done (if code works despite warnings) OR plan update step={stepId} status=skipped note=\"reason\". Do NOT make any other tool calls before updating the plan.",
667
+ "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.",
668
+ "exec.test_runner_pass": "[test-runner] {framework}: all {passed} test(s) passing.",
669
+ "plan.subtasks_done": "All sub-tasks done — call plan update step={stepId} status=done to complete this step.",
670
+ "plan.no_subtasks": "(no sub-tasks)",
671
+ "plan.step_label": "Step {stepId}: {description}",
672
+ "exec.hint_deps": "Check if a lock file exists (package-lock.json, poetry.lock). If missing, run the install command first.",
673
+ "exec.hint_test": "Make sure the source files exist and have real code before running tests.",
674
+ "exec.hint_build": "Check that all dependencies are installed and source files are not empty.",
675
+ "exec.hint_deploy": "Verify credentials and network access before deploying.",
676
+ "exec.hint_repetitive": "You are calling the same tool repeatedly with the same arguments. Try a different approach.",
677
+ "exec.hint_consecutive": "Multiple different tools are failing. Check if the environment is set up correctly.",
678
+ "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."
598
679
  }