[enhancement] Полное дерево /airdef: подкоманды, типизированные аргументы и контекстное автодополнение #98

Closed
opened 2026-10-30 10:30:56 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Архитектурный проход по 76f680eba64b64eb28435e71ce9f22a84b0e5da1.

Почему виден только /airdef

Мод регистрирует .command("airdef"), а horizon-command::Dispatcher::with_mod_commands добавляет literal root + единственный ArgType::Greedy с именем args. Содержимое вручную разбирает lib.rs match. Движку неизвестны подкоманды/типы/значения, поэтому он физически не может подсказать синтаксис. Замена текста usage проблему не решит.

В Horizon server API 0.3 уже есть server-command/argument-kind с типизированными аргументами; client API 0.2 использует список имён. Нужно переиспользовать инфраструктуру Dispatcher и расширить клиентскую декларацию, а не переносить мод на сервер только ради completion.

Сделать

  • Совместимый command-tree schema: literal branches, typed enum/integer/number/block position, bounds, optional ветки, suggestions. Старое .command(name) остаётся greedy fallback.
  • Зарегистрировать реальные ветки AirDef (wave, replay, scenario save/load/list/delete, текущие deploy/debug/настройки) по фактическому синтаксису; не придумывать второй набор команд для подсказок.
  • Динамические suggestions: имена сценариев, доступные типы техники и существующие ID там, где обработчик их принимает. Подсказки обновляются после создания/удаления данных.
  • Один источник описания для parse/dispatch/help/completion; подсветка ошибочного фрагмента, диапазонов и следующего аргумента. Сохранить разрешения, конфликты с серверными командами и обычный chat passthrough.

Приёмка

Tab после /airdef показывает доступные подкоманды, дальше только допустимые аргументы. /airdef scenario load предлагает сохранённые имена; неверное число/enum видно до Enter; русский help соответствует дереву. Корректные старые команды продолжают работать. Тесты registration→parse→dispatch и completion для вложенных/неполных строк.

Общий порядок и зависимости: архитектурная дорожная карта.

🤖 Filed by Codex, AI-агент Владимира (chexit). Архитектурный проход по `76f680eba64b64eb28435e71ce9f22a84b0e5da1`. ### Почему виден только /airdef <args> Мод регистрирует `.command("airdef")`, а `horizon-command::Dispatcher::with_mod_commands` добавляет literal root + единственный `ArgType::Greedy` с именем `args`. Содержимое вручную разбирает `lib.rs` match. Движку неизвестны подкоманды/типы/значения, поэтому он физически не может подсказать синтаксис. Замена текста usage проблему не решит. В Horizon server API 0.3 уже есть `server-command`/`argument-kind` с типизированными аргументами; client API 0.2 использует список имён. Нужно переиспользовать инфраструктуру Dispatcher и расширить клиентскую декларацию, а не переносить мод на сервер только ради completion. ### Сделать - Совместимый command-tree schema: literal branches, typed enum/integer/number/block position, bounds, optional ветки, suggestions. Старое `.command(name)` остаётся greedy fallback. - Зарегистрировать реальные ветки AirDef (`wave`, `replay`, `scenario save/load/list/delete`, текущие deploy/debug/настройки) по фактическому синтаксису; не придумывать второй набор команд для подсказок. - Динамические suggestions: имена сценариев, доступные типы техники и существующие ID там, где обработчик их принимает. Подсказки обновляются после создания/удаления данных. - Один источник описания для parse/dispatch/help/completion; подсветка ошибочного фрагмента, диапазонов и следующего аргумента. Сохранить разрешения, конфликты с серверными командами и обычный chat passthrough. ### Приёмка Tab после `/airdef ` показывает доступные подкоманды, дальше только допустимые аргументы. `/airdef scenario load ` предлагает сохранённые имена; неверное число/enum видно до Enter; русский help соответствует дереву. Корректные старые команды продолжают работать. Тесты registration→parse→dispatch и completion для вложенных/неполных строк. Общий порядок и зависимости: [архитектурная дорожная карта](https://gitea.maoniao.team/chexit/airdef/issues/103).
chexit added the area:uiarea:toolingpriority:P2type:enhancement labels 2026-10-30 10:30:56 +00:00
Author
Owner

🤖 Agent: сделано в f16bc2387f (запушено в main). API 19. В игре подсказки /airdef и /airdef replay видны, команды работают, неверные значения отклоняются. Tab на именах сценариев в игре не смотрели, это покрыто тестами. Обработчики по-прежнему сами разбирают строку; подсказок существующих ID систем нет.

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/f16bc2387f262341b48740e641ce3febef78fca1 (запушено в main). API 19. В игре подсказки /airdef и /airdef replay видны, команды работают, неверные значения отклоняются. Tab на именах сценариев в игре не смотрели, это покрыто тестами. Обработчики по-прежнему сами разбирают строку; подсказок существующих ID систем нет.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#98