micro-models-agent 1.6.0 → 2.0.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 CHANGED
@@ -4,6 +4,55 @@ All notable changes to Micro Models Agent (MMA) will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [2.0.0] - 2026-09-22
8
+
9
+ ### Added
10
+
11
+ - **`/config` get/set/reset** (`src/config/registry.ts`, `src/cli/repl-commands.ts`): one settings surface. Keys are literal `config.json` paths (`contextWindow`, `contextBudget.systemPrompt`, `showReasoning`, `reasoning.mode`, `ui.verbosity`, …) with short aliases, tab completion for keys/values, and `/config reset <key>` / `--all` restoring the session-start (boot) snapshot.
12
+ - **Session export** (`src/modules/session/export.ts`): `/export` and `mma session export` write `md` (default), `json`, or `jsonl`; default path `~/.mma/exports/`; secrets redacted by default (`--no-redact`); rotated `.jsonl.gz` supported.
13
+ - **Tab completion** (`src/cli/completer.ts`): config keys/values, `/provider add` flags, command names for `/help`, session names for `/delete` and `/export`, subcommands with descriptions for `map`/`context`/`lsp`/`reasoning`/`verbose`.
14
+ - **`/help <command>`**: per-command usage, aliases and examples.
15
+ - **Unified unknown-subcommand errors** across `provider`/`model`/`skill`/`lsp` and config-key suggestions ("did you mean …").
16
+
17
+ ### Changed
18
+
19
+ - **`/reasoning`** (`src/cli/repl-commands.ts`): with no argument it now shows status (display + effort) instead of toggling; use `/reasoning show|hide` (aliases `on|off`) and `/reasoning level <auto|default|none|low|medium|high|max>`. Setting a level warns that the auto policy is off.
20
+ - **`/verbose`**: with no argument it shows the current level instead of toggling; all changes persist.
21
+ - **Uniform persistence**: `/provider use`, `/model use`, `/verbose`, `/reasoning` now save `config.json` immediately and print `saved · reset: /config reset <key>`.
22
+ - **`/context`**: accepts fractions (`0.1`) and percentages (`10%`); unknown arguments yield a clear error instead of a bogus size error.
23
+ - **`/sysprompt`**: default output is token count + block list; the full prompt prints only with `--full`.
24
+ - **`/status`**: now a compact one-line summary (model · provider · session · context).
25
+ - **`/provider add` usage** documents every flag; flag values are validated.
26
+ - **`/config locale`** re-registers commands and completion, so `/help`/usage switch language without a restart.
27
+ - **`showReasoning`** overrides `ui.verbosity=quiet` for reasoning lines.
28
+
29
+ ### Removed
30
+
31
+ - **`use` alias of `/resume`** (ambiguous with `/model use`, `/provider use`); an unknown `/use` now suggests `/resume`.
32
+ - **`/reasoning` and `/verbose` bare-argument toggles** (replaced by explicit status behavior).
33
+
34
+ ## [1.7.1] - 2026-09-22
35
+
36
+ ### Changed
37
+
38
+ - **Default completion token cap** (`src/llm/openai-compat.ts`): `max_tokens` fallback doubled from 4096 to 8192 (`DEFAULT_MAX_COMPLETION_TOKENS`), so long answers are less likely to be cut by the generation limit. Still overridable via `provider.maxCompletionTokens`.
39
+
40
+ ## [1.7.0] - 2026-09-22
41
+
42
+ ### Added
43
+
44
+ - **Model capability resolution** (`src/modules/providers/capabilities.ts`, `src/config/types.ts`): a single source of truth for a model's `vision`/`tools` abilities, merged from user override (`config.modelCapabilities[model]`) → live native probe (LM Studio `/api/v1/models` `capabilities`, read by `probeModel` in `src/llm/model-loader.ts`) → provider preset. Exposed to tools via the live `ToolContext.capabilities` getter.
45
+ - **First-class tool image channel** (`src/tools/types.ts` `ToolResult.images`, `src/core/agent/tool-images.ts`): tools can return images; the agent loop queues them onto the next user message (`queueToolImages`), keeping `role:"tool"` content text-only and portable.
46
+
47
+ ### Fixed
48
+
49
+ - **Vision misdetection for non-`-vl` models** (`src/tools/browser.ts`): the `qwen3.5-9b`-style models report `vision: true` in LM Studio but the name-based `modelSupportsVision` heuristic returned `false`, so screenshots were silently downgraded to a text notice. Name matching is removed; the browser tool now reads `ctx.capabilities.vision`.
50
+ - **Browser screenshots never reached the model** (`src/tools/browser.ts`): screenshots were embedded as base64 text inside the `role:"tool"` output, which backends never decode and the budget truncates. They are now delivered as `image_url` parts; text-only models get the snapshot instead.
51
+
52
+ ### Changed
53
+
54
+ - **Browser module prompt** (`src/modules/browser/module.ts`): no longer asks the model to self-assess vision support — screenshot delivery is automatic.
55
+
7
56
  ## [1.6.0] - 2026-09-22
8
57
 
9
58
  ### Added
package/dist/i18n/en.json CHANGED
@@ -347,6 +347,10 @@
347
347
  "cli.list_sessions": "List all sessions",
348
348
  "cli.show_details": "Show session details",
349
349
  "cli.delete_session": "Delete a session",
350
+ "cli.export_session": "Export a session to a file (md, json, or jsonl)",
351
+ "cli.export_format": "Output format: md|json|jsonl (default md)",
352
+ "cli.export_out": "Output path ('-' for stdout)",
353
+ "cli.export_no_redact": "Do not redact secrets",
350
354
  "cli.first_run": "First run detected. Running setup wizard...",
351
355
  "cli.first_run_oneshot": "No configuration found — running with defaults. Run `mma` (no arguments) once to set up the wizard.",
352
356
  "cli.setup_saved_restart": "Settings saved. Restarting with the new configuration...",
@@ -414,20 +418,21 @@
414
418
  "repl.exit_usage": "Usage: /exit",
415
419
  "repl.clear": "Clear the screen",
416
420
  "repl.clear_usage": "Usage: /clear",
421
+ "repl.clear_hint": "Screen cleared. To start a fresh session and context: /new",
417
422
  "repl.run": "Run a prompt through the agent",
418
423
  "repl.run_usage": "Usage: /run <prompt>",
419
- "repl.config": "Show current configuration",
420
- "repl.config_usage": "Usage: /config",
421
- "repl.reasoning": "Toggle showing model reasoning/thinking",
422
- "repl.reasoning_usage": "Usage: /reasoning [auto|none|low|medium|high|max]",
424
+ "repl.config": "Show or change settings (get / set / reset)",
425
+ "repl.config_usage": "Usage: /config [<key> [value]] | /config reset <key> | /config reset --all [--yes] | /config migrate",
426
+ "repl.reasoning": "Show reasoning status, toggle display, or set effort level",
427
+ "repl.reasoning_usage": "Usage: /reasoning [show|hide|level <auto|default|none|low|medium|high|max>]",
423
428
  "repl.reasoning_level_set": "Reasoning level set to: {level}",
424
429
  "repl.reasoning_invalid_level": "Invalid level '{level}'. Valid: {valid}",
425
- "repl.verbose": "Chat verbosity: quiet, normal, or verbose",
430
+ "repl.verbose": "Chat verbosity (quiet, normal, verbose)",
426
431
  "repl.verbose_usage": "Usage: /verbose [quiet|normal|verbose]",
427
432
  "repl.verbose_set": "Chat verbosity: {level}",
428
433
  "repl.verbose_invalid_level": "Invalid level '{level}'. Valid: {valid}",
429
434
  "repl.last_action_none": "No recent action to show.",
430
- "repl.status": "Show agent status",
435
+ "repl.status": "Show a compact status line",
431
436
  "repl.status_usage": "Usage: /status",
432
437
  "repl.plugins": "List loaded plugins",
433
438
  "repl.plugins_usage": "Usage: /plugins [--all]",
@@ -467,10 +472,12 @@
467
472
  "repl.context": "Context:",
468
473
  "repl.sysprompt_label": "System prompt:",
469
474
  "repl.sysprompt_size": "{used} / {budget} tokens",
470
- "repl.sysprompt_desc": "Show system prompt",
475
+ "repl.sysprompt_desc": "System prompt size and blocks (use --full for the text)",
476
+ "repl.sysprompt_usage": "Usage: /sysprompt [--full]",
477
+ "repl.sysprompt_full_hint": "Full prompt text hidden — run /sysprompt --full to print it.",
471
478
  "repl.sysprompt_tokens": "System prompt ({count} tokens):",
472
479
  "repl.excluded_blocks": "\nExcluded blocks: {count}",
473
- "repl.context_usage": "Usage: /context [<size> | system <fraction> | reserve <fraction>] (min 1024; fractions 0.05–0.9)",
480
+ "repl.context_usage": "Usage: /context [<size, min 1024> | system <share> | reserve <share>] (share 0.05–0.9 or e.g. 10%; system+reserve ≤ 0.95)",
474
481
  "repl.msgs": "msgs",
475
482
  "repl.max_iters": "Max iters:",
476
483
  "repl.stuck_thresh": "Stuck thresh:",
@@ -514,13 +521,99 @@
514
521
  "repl.provider_list": "List configured providers or hot-swap the active one",
515
522
  "repl.provider_current": "Current provider",
516
523
  "repl.provider_set": "Provider set to: {name}",
517
- "repl.provider_usage": "/provider list - show entries (* = active, prio = fallback order) | /provider use <name> - switch without restart | /provider add <name> [--url <url>] [--key <key>] [--priority <n>] [--context-window <n>] [--rpm <n>] [--parallel <n>] - add to config",
524
+ "repl.provider_usage": "Usage: /provider list | /provider use <name> | /provider add <name> [flags]\n --url <url> base API URL (fallback: known presets)\n --key <key> API key\n --priority <n> fallback order; lower = tried first\n --context-window <n> per-provider context window (tokens)\n --rpm <n> max requests/minute (default 60)\n --parallel <n> max parallel tasks (default 1)",
518
525
  "repl.provider_add_missing_value": "Missing value for {flag}",
526
+ "repl.provider_add_invalid_number": "Invalid number for {flag}: '{value}'",
519
527
  "repl.provider_switch_hint": "Switch to it with: /provider use {name}",
528
+ "repl.provider_flag_url": "Base API URL (fallback: known presets)",
529
+ "repl.provider_flag_key": "API key",
530
+ "repl.provider_flag_priority": "Fallback order; lower = tried first",
531
+ "repl.provider_flag_context_window": "Per-provider context window (tokens)",
532
+ "repl.provider_flag_rpm": "Max requests per minute (default 60)",
533
+ "repl.provider_flag_parallel": "Max parallel tasks (default 1)",
520
534
  "repl.model_list": "List models of the active provider or switch the model",
521
535
  "repl.model_current": "Current model",
522
536
  "repl.model_set": "Model set to: {name}",
523
- "repl.model_usage": "/model list - fetch models from the active provider | /model use <name> - switch model",
537
+ "repl.model_usage": "Usage: /model list | /model use <name>",
538
+ "repl.unknown_sub": "Unknown subcommand '{sub}' for /{cmd}. See usage below.",
539
+ "repl.help_unknown": "Unknown command '/{name}'",
540
+ "repl.help_aliases": "Aliases: {names}",
541
+ "repl.help_examples": "Examples:",
542
+ "repl.export": "Export a session to a file",
543
+ "repl.export_usage": "Usage: /export [<id|name>] [--format md|json|jsonl] [--out <path>] [--no-redact]",
544
+ "config.header": "Managed settings",
545
+ "config.col_setting": "Setting",
546
+ "config.col_value": "Value",
547
+ "config.col_domain": "Domain",
548
+ "config.col_change": "Change with",
549
+ "config.session_line": "Session: {name} ({id}) — {count} messages",
550
+ "config.usage_hint": "Get: /config <key> · Set: /config <key> <value> · Reset: /config reset <key>",
551
+ "config.saved": "saved · reset: /config reset {key}",
552
+ "config.read_only_hint": "read-only",
553
+ "config.read_only": "'{key}' is read-only",
554
+ "config.unknown_key": "Unknown key '{key}'. {suggestion}",
555
+ "config.suggest": "Did you mean '{name}'?",
556
+ "config.valid_keys": "Valid keys: {keys}",
557
+ "config.invalid_value": "Invalid value for {key}. {hint}",
558
+ "config.range": "Value out of range for {key}",
559
+ "config.combined": "system + reserve must stay below 0.95",
560
+ "config.hint_string": "Expected a non-empty string",
561
+ "config.hint_enum": "Allowed: {values}",
562
+ "config.hint_bool": "Expected on/off",
563
+ "config.hint_share": "Expected 0.05–0.9 or a percentage (e.g. 10%)",
564
+ "config.hint_int": "Expected an integer ≥ {min}",
565
+ "config.reset_ok": "{key} restored to session-start value: {value} · saved",
566
+ "config.reset_unchanged": "{key} already at session value",
567
+ "config.reset_none": "No settings changed this session",
568
+ "config.reset_all_confirm": "Reset {count} changed setting(s) to session-start values? [y/N] ",
569
+ "config.reset_all_done": "Restored {count} setting(s) · saved",
570
+ "config.reset_all_needs_yes": "Refusing to reset without confirmation in non-interactive mode; pass --yes",
571
+ "config.reset_cancelled": "Reset cancelled",
572
+ "config.reset_usage": "Usage: /config reset <key> | /config reset --all [--yes]",
573
+ "config.alias_label": "alias of",
574
+ "config.group_label": "group",
575
+ "reasoning.status": "Reasoning: display {display} · effort {level} {auto}",
576
+ "reasoning.on": "on",
577
+ "reasoning.off": "off",
578
+ "reasoning.auto_on": "(auto policy)",
579
+ "reasoning.auto_off": "(auto policy off)",
580
+ "reasoning.auto_off_hint": "Auto policy off. Restore with: /config reset reasoning.mode",
581
+ "reasoning.display_set": "Reasoning display: {state}",
582
+ "reasoning.unknown_sub": "Unknown argument '{sub}'.",
583
+ "reasoning.sub_show": "Show reasoning content",
584
+ "reasoning.sub_hide": "Hide reasoning content",
585
+ "reasoning.sub_level": "Set reasoning effort level",
586
+ "verbose.status": "Verbosity: {level}",
587
+ "verbose.sub_quiet": "One line per action",
588
+ "verbose.sub_normal": "Add short result summaries",
589
+ "verbose.sub_verbose": "Full per-action detail",
590
+ "context.unknown_arg": "Unknown argument '{arg}'.",
591
+ "context.sub_system": "System-prompt share",
592
+ "context.sub_reserve": "Response-reserve share",
593
+ "model.not_in_list": "Note: '{name}' is not in the known model list",
594
+ "model.sub_list": "List models of the active provider",
595
+ "model.sub_use": "Switch model",
596
+ "provider.sub_list": "List configured providers",
597
+ "provider.sub_use": "Switch active provider",
598
+ "provider.sub_add": "Add a provider",
599
+ "map.sub_summary": "Show the project map summary",
600
+ "map.sub_refresh": "Rebuild the project index",
601
+ "map.sub_find": "Search the project map",
602
+ "lsp.sub_status": "Show LSP server status",
603
+ "lsp.sub_restart": "Reset disabled servers",
604
+ "lsp.sub_check": "Run an LSP check on a path",
605
+ "skill.sub_list": "List available skills",
606
+ "skill.sub_loaded": "List loaded skills",
607
+ "skill.sub_load": "Load a skill",
608
+ "skill.sub_unload": "Unload a skill",
609
+ "skill.sub_search": "Search skills",
610
+ "export.written": "Exported to {path}",
611
+ "export.redacted": "secrets redacted (--no-redact to disable)",
612
+ "export.raw": "secrets NOT redacted",
613
+ "export.empty": "session has no messages — nothing exported",
614
+ "export.invalid_format": "Unknown format '{format}'. Use md|json|jsonl",
615
+ "export.missing_value": "Missing value for {flag}",
616
+ "export.write_failed": "Failed to write export: {error}",
524
617
  "repl.group.general": "General",
525
618
  "repl.group.agent": "Agent",
526
619
  "repl.group.session": "Sessions",
package/dist/i18n/ru.json CHANGED
@@ -341,6 +341,10 @@
341
341
  "cli.list_sessions": "Список всех сессий",
342
342
  "cli.show_details": "Показать детали сессии",
343
343
  "cli.delete_session": "Удалить сессию",
344
+ "cli.export_session": "Экспортировать сессию в файл (md, json или jsonl)",
345
+ "cli.export_format": "Формат вывода: md|json|jsonl (по умолчанию md)",
346
+ "cli.export_out": "Путь вывода ('-' для stdout)",
347
+ "cli.export_no_redact": "Не скрывать секреты",
344
348
  "cli.first_run": "Первый запуск. Запускаем мастер настройки...",
345
349
  "cli.first_run_oneshot": "Конфигурация не найдена — запуск с настройками по умолчанию. Запустите `mma` без аргументов один раз для настройки.",
346
350
  "cli.setup_saved_restart": "Настройки сохранены. Перезапуск с новой конфигурацией...",
@@ -408,20 +412,21 @@
408
412
  "repl.exit_usage": "Использование: /exit",
409
413
  "repl.clear": "Очистить экран",
410
414
  "repl.clear_usage": "Использование: /clear",
415
+ "repl.clear_hint": "Экран очищен. Новая сессия и контекст: /new",
411
416
  "repl.run": "Выполнить запрос через агента",
412
417
  "repl.run_usage": "Использование: /run <запрос>",
413
- "repl.config": "Показать текущую конфигурацию",
414
- "repl.config_usage": "Использование: /config",
415
- "repl.reasoning": "Переключить показ рассуждений модели",
416
- "repl.reasoning_usage": "Использование: /reasoning [auto|none|low|medium|high|max]",
418
+ "repl.config": "Показать или изменить настройки (get / set / reset)",
419
+ "repl.config_usage": "Использование: /config [<ключ> [значение]] | /config reset <ключ> | /config reset --all [--yes] | /config migrate",
420
+ "repl.reasoning": "Показать статус рассуждений, переключить показ или уровень",
421
+ "repl.reasoning_usage": "Использование: /reasoning [show|hide|level <auto|default|none|low|medium|high|max>]",
417
422
  "repl.reasoning_level_set": "Уровень рассуждений установлен: {level}",
418
423
  "repl.reasoning_invalid_level": "Неверный уровень '{level}'. Допустимые: {valid}",
419
- "repl.verbose": "Подробность вывода: quiet, normal или verbose",
424
+ "repl.verbose": "Подробность вывода (quiet, normal, verbose)",
420
425
  "repl.verbose_usage": "Использование: /verbose [quiet|normal|verbose]",
421
426
  "repl.verbose_set": "Подробность вывода: {level}",
422
427
  "repl.verbose_invalid_level": "Неверный уровень '{level}'. Допустимые: {valid}",
423
428
  "repl.last_action_none": "Нет недавнего действия для показа.",
424
- "repl.status": "Показать статус агента",
429
+ "repl.status": "Показать компактную строку статуса",
425
430
  "repl.status_usage": "Использование: /status",
426
431
  "repl.plugins": "Список загруженных плагинов",
427
432
  "repl.plugins_usage": "Использование: /plugins [--all]",
@@ -461,10 +466,12 @@
461
466
  "repl.context": "Контекст:",
462
467
  "repl.sysprompt_label": "Системный промпт:",
463
468
  "repl.sysprompt_size": "{used} / {budget} токенов",
464
- "repl.sysprompt_desc": "Показать системный промпт",
469
+ "repl.sysprompt_desc": "Размер системного промпта и блоки (текст — через --full)",
470
+ "repl.sysprompt_usage": "Использование: /sysprompt [--full]",
471
+ "repl.sysprompt_full_hint": "Полный текст промпта скрыт — выполните /sysprompt --full.",
465
472
  "repl.sysprompt_tokens": "Системный промпт ({count} токенов):",
466
473
  "repl.excluded_blocks": "\nИсключённые блоки: {count}",
467
- "repl.context_usage": "Использование: /context [<размер> | system <доля> | reserve <доля>] (мин 1024; доли 0.05–0.9)",
474
+ "repl.context_usage": "Использование: /context [<размер, мин 1024> | system <доля> | reserve <доля>] (доля 0.05–0.9 или напр. 10%; system+reserve ≤ 0.95)",
468
475
  "repl.msgs": "сообщ.",
469
476
  "repl.max_iters": "Макс итераций:",
470
477
  "repl.stuck_thresh": "Порог зависания:",
@@ -508,13 +515,99 @@
508
515
  "repl.provider_list": "Список настроенных провайдеров или горячая смена активного",
509
516
  "repl.provider_current": "Текущий провайдер",
510
517
  "repl.provider_set": "Провайдер установлен: {name}",
511
- "repl.provider_usage": "/provider list — записи (* = активный, prio = порядок fallback) | /provider use <имя> — смена без перезапуска | /provider add <имя> [--url <url>] [--key <ключ>] [--priority <n>] [--context-window <n>] [--rpm <n>] [--parallel <n>] — добавить в конфиг",
518
+ "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)",
512
519
  "repl.provider_add_missing_value": "Нет значения для {flag}",
520
+ "repl.provider_add_invalid_number": "Неверное число для {flag}: '{value}'",
513
521
  "repl.provider_switch_hint": "Переключитесь на него: /provider use {name}",
522
+ "repl.provider_flag_url": "Базовый URL API (иначе — из пресетов)",
523
+ "repl.provider_flag_key": "API-ключ",
524
+ "repl.provider_flag_priority": "Порядок fallback; меньше = раньше",
525
+ "repl.provider_flag_context_window": "Окно контекста провайдера (токены)",
526
+ "repl.provider_flag_rpm": "Запросов в минуту (по умолчанию 60)",
527
+ "repl.provider_flag_parallel": "Параллельных задач (по умолчанию 1)",
514
528
  "repl.model_list": "Список моделей активного провайдера или смена модели",
515
529
  "repl.model_current": "Текущая модель",
516
530
  "repl.model_set": "Модель установлена: {name}",
517
- "repl.model_usage": "/model list — получить модели активного провайдера | /model use <имя> — сменить модель",
531
+ "repl.model_usage": "Использование: /model list | /model use <имя>",
532
+ "repl.unknown_sub": "Неизвестная подкоманда '{sub}' для /{cmd}. См. использование ниже.",
533
+ "repl.help_unknown": "Неизвестная команда '/{name}'",
534
+ "repl.help_aliases": "Алиасы: {names}",
535
+ "repl.help_examples": "Примеры:",
536
+ "repl.export": "Экспортировать сессию в файл",
537
+ "repl.export_usage": "Использование: /export [<id|имя>] [--format md|json|jsonl] [--out <путь>] [--no-redact]",
538
+ "config.header": "Управляемые настройки",
539
+ "config.col_setting": "Настройка",
540
+ "config.col_value": "Значение",
541
+ "config.col_domain": "Домен",
542
+ "config.col_change": "Как менять",
543
+ "config.session_line": "Сессия: {name} ({id}) — {count} сообщений",
544
+ "config.usage_hint": "Чтение: /config <ключ> · Запись: /config <ключ> <значение> · Сброс: /config reset <ключ>",
545
+ "config.saved": "сохранено · сброс: /config reset {key}",
546
+ "config.read_only_hint": "только чтение",
547
+ "config.read_only": "'{key}' — только чтение",
548
+ "config.unknown_key": "Неизвестный ключ '{key}'. {suggestion}",
549
+ "config.suggest": "Возможно, вы имели в виду '{name}'?",
550
+ "config.valid_keys": "Допустимые ключи: {keys}",
551
+ "config.invalid_value": "Неверное значение для {key}. {hint}",
552
+ "config.range": "Значение вне диапазона для {key}",
553
+ "config.combined": "system + reserve должны оставаться ниже 0.95",
554
+ "config.hint_string": "Ожидается непустая строка",
555
+ "config.hint_enum": "Допустимые: {values}",
556
+ "config.hint_bool": "Ожидается on/off",
557
+ "config.hint_share": "Ожидается 0.05–0.9 или процент (напр. 10%)",
558
+ "config.hint_int": "Ожидается целое ≥ {min}",
559
+ "config.reset_ok": "{key} восстановлен к значению на старте сессии: {value} · сохранено",
560
+ "config.reset_unchanged": "{key} уже соответствует значению сессии",
561
+ "config.reset_none": "В этой сессии настройки не менялись",
562
+ "config.reset_all_confirm": "Сбросить {count} изменённых настроек к значениям на старте сессии? [y/N] ",
563
+ "config.reset_all_done": "Восстановлено настроек: {count} · сохранено",
564
+ "config.reset_all_needs_yes": "Отказ от сброса без подтверждения в неинтерактивном режиме; укажите --yes",
565
+ "config.reset_cancelled": "Сброс отменён",
566
+ "config.reset_usage": "Использование: /config reset <ключ> | /config reset --all [--yes]",
567
+ "config.alias_label": "алиас",
568
+ "config.group_label": "группа",
569
+ "reasoning.status": "Рассуждения: показ {display} · усилие {level} {auto}",
570
+ "reasoning.on": "вкл",
571
+ "reasoning.off": "выкл",
572
+ "reasoning.auto_on": "(авто-политика)",
573
+ "reasoning.auto_off": "(авто-политика выключена)",
574
+ "reasoning.auto_off_hint": "Авто-политика выключена. Вернуть: /config reset reasoning.mode",
575
+ "reasoning.display_set": "Показ рассуждений: {state}",
576
+ "reasoning.unknown_sub": "Неизвестный аргумент '{sub}'.",
577
+ "reasoning.sub_show": "Показывать рассуждения",
578
+ "reasoning.sub_hide": "Скрыть рассуждения",
579
+ "reasoning.sub_level": "Установить уровень рассуждений",
580
+ "verbose.status": "Подробность: {level}",
581
+ "verbose.sub_quiet": "Одна строка на действие",
582
+ "verbose.sub_normal": "Плюс короткие сводки результатов",
583
+ "verbose.sub_verbose": "Полная деталь по действиям",
584
+ "context.unknown_arg": "Неизвестный аргумент '{arg}'.",
585
+ "context.sub_system": "Доля системного промпта",
586
+ "context.sub_reserve": "Доля резерва ответа",
587
+ "model.not_in_list": "Примечание: '{name}' нет в списке известных моделей",
588
+ "model.sub_list": "Список моделей активного провайдера",
589
+ "model.sub_use": "Сменить модель",
590
+ "provider.sub_list": "Список настроенных провайдеров",
591
+ "provider.sub_use": "Сменить активного провайдера",
592
+ "provider.sub_add": "Добавить провайдера",
593
+ "map.sub_summary": "Показать сводку карты проекта",
594
+ "map.sub_refresh": "Перестроить индекс проекта",
595
+ "map.sub_find": "Поиск по карте проекта",
596
+ "lsp.sub_status": "Статус LSP-серверов",
597
+ "lsp.sub_restart": "Сбросить отключённые серверы",
598
+ "lsp.sub_check": "Запустить LSP-проверку пути",
599
+ "skill.sub_list": "Список доступных скиллов",
600
+ "skill.sub_loaded": "Список загруженных скиллов",
601
+ "skill.sub_load": "Загрузить скилл",
602
+ "skill.sub_unload": "Выгрузить скилл",
603
+ "skill.sub_search": "Поиск скиллов",
604
+ "export.written": "Экспортировано в {path}",
605
+ "export.redacted": "секреты скрыты (--no-redact чтобы отключить)",
606
+ "export.raw": "секреты НЕ скрыты",
607
+ "export.empty": "в сессии нет сообщений — экспорт не создан",
608
+ "export.invalid_format": "Неизвестный формат '{format}'. Используйте md|json|jsonl",
609
+ "export.missing_value": "Нет значения для {flag}",
610
+ "export.write_failed": "Не удалось записать экспорт: {error}",
518
611
  "repl.reload": "Перезагрузить агента с текущим конфигом",
519
612
  "repl.reload_usage": "Использование: /reload",
520
613
  "repl.reloading": "Перезагрузка агента...",