# :agentik-tui — Compose-for-Mosaic TUI клиент к /agentik Compose-style TUI-клиент (KMP desktop, без iOS), рендерится в ANSI-терминал через библиотеку [Mosaic](https://github.com/JakeWharton/mosaic) 0.18. Полная клавиатурная навигация — никаких `:`-префиксов (как в vim). ## Сборка ```bash ./gradlew :agentik-tui:shadowJar # Результат: agentik-tui/build/libs/agentik-tui-all.jar (~10 MB) ``` Также доступен через Nexus (`caffeine` репо) — `pw.binom.agentik:agentik-tui:VERSION`. ## Запуск ```bash # По умолчанию — http://localhost:8080/agentik java --enable-native-access=ALL-UNNAMED \ -jar agentik-tui-all.jar # К другому серверу java --enable-native-access=ALL-UNNAMED \ -jar agentik-tui-all.jar --server http://192.168.76.166:8080/agentik # Без восстановления последней беседы java --enable-native-access=ALL-UNNAMED \ -jar agentik-tui-all.jar --no-history # Конкретная беседа java --enable-native-access=ALL-UNNAMED \ -jar agentik-tui-all.jar --id ``` Альтернативно: `AGENTIK_SERVER` env-переменная. > **`--enable-native-access=ALL-UNNAMED`** обязателен: Mosaic использует > нативные API терминала (`stdin`/`stdout` raw mode), что требует > `--enable-native-access`. ## Клавиши | Клавиша | Действие | |---|---| | **Tab** / **Shift-Tab** | переключение фокуса: input → history → sidebar → … | | **Enter** | отправить набранное сообщение | | **Backspace** / **Delete** | удалить символ | | **←/→** / **Home/End** | курсор в input | | **↑/↓** | scrollback (в фокусе на history) / input history (в фокусе на input) | | **Esc** | очистить input | | **F1** | показать/скрыть help overlay | | **Ctrl-D** / **Ctrl-C** | прервать активный ход (повторное нажатие — выход) | `:`-префикс команд **отключён намеренно** — для отправки команд используются клавиши. Если нужно сделать что-то нестандартное — переключитесь на `:agentik-cli` (REPL с slash-командами). ## Переменные окружения | Переменная | Дефолт | Назначение | |---|---|---| | `AGENTIK_SERVER` | `http://localhost:8080/agentik` | URL HTTP-фасада `:server` | История сессий: `~/.agentik/tui-state.json`. ## Layout ``` ┌────────────────────────────────────────────────────────────────┐ │ agentik · agent-id · · focus=input │ ← header ├────────────────────────────────────────────────────────────────┤ │ │ │ [User 14:32] │ │ привет │ │ │ │ [Bot 14:32] │ │ привет! чем помочь? │ ← history (scroll) │ ▍ │ │ │ ├────────────────────────────────────────────────────────────────┤ │ > | | │ ← input (cursor) ├────────────────────────────────────────────────────────────────┤ │ Tab focus ↑↓ scroll Enter send Esc clear F1 help ⌃D exit │ ← footer └────────────────────────────────────────────────────────────────┘ ``` ## Что пока работает и что нет ✅ header + history + input + footer ✅ focus cycling (Tab / Shift-Tab) ✅ input editing (chars, BS, Del, ←/→, Home/End, Enter) ✅ история input'а через ↑/↓ (в фокусе на input) ✅ scrollback history (в фокусе на history) ✅ F1 help overlay ✅ Ctrl-D / Ctrl-C interrupt ⌛ mouse support (термиос SGR-mouse parsing) — для v3+. ⌛ split-pane (history left / input right) — пока input внизу, full-width. ⌛ `:agentik-cli`-slash-команды внутри TUI (history backfill / list / switch). ## Тесты ```bash ./gradlew :agentik-tui:jvmTest ```