0.4.11
14 · Техническая документация

14. Оверлеи и popup'ы

TUI AstraCode использует несколько типов оверлеев — полноэкранные модальные окна, которые перекрывают основной чат и обрабатываются специальными pager'ами.

Общая инфраструктура — astracode-rs/tui/src/pager_overlay.rs (Overlay, StaticOverlay, TranscriptOverlay).

1. Pager-оверлей: общие черты

Pager — это прокручиваемый просмотрщик контента в стиле less: - Заголовок сверху (название оверлея). - Прокручиваемая область посередине. - Подсказки клавиш снизу (локализованные).

Управление (см. также 12-keymap.md)

Клавиша Действие
/ Прокрутка строкой
pgup / pgdn Прокрутка страницей
g / G К началу / концу
q / esc Закрыть
/ (если поддерживается) Поиск

Локализация подсказок

В EN-режиме внизу:

text
↑↓ to scroll • PgUp/PgDn to page • g/G to jump • q to close

В RU:

text
↑↓ прокрутить • PgUp/PgDn листать • g/G к началу/концу • q закрыть

2. /diff

text
/diff

Полноэкранный pager с git diff рабочей директории (включая untracked-файлы — добавляются с git add -N фантомно).

Особенности: - Подсветка синтаксиса diff (зелёные/красные строки). - Файлы можно сворачивать (Enter на header'е файла). - Показывает binary-файлы как (binary file).

Реализация — обработчик SlashCommand::Diff в tui/src/chatwidget/slash_dispatch.rs.

3. /review

text
/review                             # открывает всплывающее окно выбора режима
/review с фокусом на безопасность   # любой текст после /review — это свободная инструкция
/review проверь только тесты        # текст передаётся как есть в ReviewTarget::Custom

/review без аргументов открывает всплывающее окно (меню выбора режима ревью) — open_review_popup() в tui/src/chatwidget/slash_dispatch.rs. Любой текст после /review не является фиксированным флагом — он целиком уходит в ReviewTarget::Custom { instructions } как свободная инструкция ревьюеру, минуя меню.

После выбора режима (или при передаче свободной инструкции) запускается агент-ревьюер, который анализирует diff и пишет отчёт. Отчёт открывается в pager-оверлее: - Title: Code Review — <branch> · <commit short> - Тело: markdown с секциями (Critical / Important / Suggestions). - Каждая находка имеет ссылку на файл и строку (clickable в IDE-режиме).

Параметры:

toml
review_model = "claude-sonnet-4-6"   # дешевле/умнее основной модели

Связано со скиллами: - code-review - code-review-breaking-changes - code-review-change-size - code-review-context - code-review-testing

(если установлены — см. 05-skills.md).

4. /help

text
/help                  # обзор всех команд
/help cd               # подробно про /cd
/help goal             # подробно про /goal

Pager с обзорной страницей или per-command-страницей.

Структура per-command:

text
# /<command>

<краткое описание>

## USAGE
  /<command> [args]

## DETAILS

<подробный текст>

## NOTES

<особенности, edge cases>

## SEE ALSO

<ссылки на связанные команды>

Контент — в модуле tui/src/help_text.rs. Полностью локализован EN/RU.

Если введена несуществующая команда (/help fokybar) — показывается страница «команда не найдена» с предложением /help для обзора.

5. Transcript overlay

TranscriptOverlay — специальный pager для просмотра полной истории треда (не только видимой в чате).

Открывается через /status → "Show full transcript" или горячей клавишей ctrl-t (назначена по умолчанию — действие app.open_transcript, см. tui/src/keymap.rs). Переопределить можно в app keymap'е через /keymap (см. 12-keymap.md).

Особенности: - Показывает все turn'ы с timestamp'ами. - Tool-вызовы развёрнуты. - Reasoning (extended thinking) показывается отдельным блоком.

6. Popup автодополнения

Popup'ы появляются над composer'ом при вводе:

Slash-command popup

Триггер: / в начале composer. Показывает фильтрованный список доступных команд с описаниями (локализованными).

Меню выбора файлов (@)

Триггер: @<prefix> в composer. Показывает файлы в проекте, отфильтрованные по prefix. Использует file-search крейт (быстрый fuzzy match).

Меню выбора скиллов ($)

Триггер: $<prefix> в composer. Показывает установленные скиллы. При выборе подставляет default_prompt из agents/astracode.yaml.

/cd popup

Триггер: после /cd в composer (или Tab на этой команде). Показывает подкаталоги текущей cwd, фильтрует по prefix. Tab — завершить выбранным, повторный Tab — спуститься в подкаталог.

Реализация — bottom_pane/file_search_popup.rs (переиспользуется для /cd).

/goal args popup

Триггер: после /goal в composer. Показывает подкоманды (edit/resume/pause/clear/budget) + echo-row с введённым текстом.

Реализация — bottom_pane/goal_args_popup.rs.

7. Меню выбора модели

text
/model

Открывает не pager, а полноэкранный список (наследник list-контекста keymap'а). Показывает: - Группировка по провайдеру ([[providers]]). - В каждой группе — модели из каталога. - Текущая модель помечена ✓. - Можно фильтровать поиском (/ для активации фильтра).

8. Меню выбора тем

text
/theme

Список тем подсветки синтаксиса. Live-preview: при наведении на тему фон чата перерисовывается с новой темой. Enter — применить и сохранить.

9. Approval-диалог

Не pager, а inline-модальный блок в нижней части экрана. Показывает:

text
Tool wants to: <описание>
Command: <command>
Working dir: <path>

  1. Yes (y)
  2. Approve for this prefix/session — p для команд, a для файлов
  3. No (d / Esc)

Это нумерованный список без варианта Edit. Клавиши по умолчанию: y — разрешить один раз, p — разрешить команды с этим префиксом, a — разрешить эти файлы на сессию, d или Esc — отклонить. Все клавиши настраиваются в approval keymap'е через /keymap (см. 12-keymap.md).

10. Side-conversation панель

/side не открывает оверлей — он переключает основной экран в «side-режим»: - Header чата меняет цвет/префикс на [SIDE]. - В composer ограничены команды. - Esc возвращает в main.

11. Status / debug-config

text
/status         # текущая модель, провайдер, sandbox, токены
/debug-config   # слои конфига

Открываются как pager'ы со статической информацией.

12. Tooltips и inline-help

Когда курсор стоит на slash-команде в popup'е, рядом показывается tooltip с подробным описанием (не путать с /help <cmd> — это короткое описание).

Управляется:

toml
[tui]
show_tooltips = true

13. Alternate screen

toml
[tui]
alternate_screen = true

true — TUI использует alt-screen буфер терминала (как vim, less). При выходе курсор возвращается на исходное место.

false — TUI пишет в основной буфер (видно в scrollback после выхода). Полезно для отладки.

14. Файлы кода

  • Общая инфраструктура pager'ов: astracode-rs/tui/src/pager_overlay.rs
  • /help: astracode-rs/tui/src/help_text.rs + event_dispatch.rs:OpenHelpOverlay
  • /diff: обработчик SlashCommand::Diff в astracode-rs/tui/src/chatwidget/slash_dispatch.rs
  • /review: open_review_popup() в astracode-rs/tui/src/chatwidget/slash_dispatch.rs
  • TranscriptOverlay: astracode-rs/tui/src/pager_overlay.rs
  • Popup'ы: astracode-rs/tui/src/bottom_pane/*.rs
  • Model picker: open_model_popup() в astracode-rs/tui/src/chatwidget.rs
  • Approvals: astracode-rs/tui/src/bottom_pane/approval_overlay.rs