- README.md в каждом подмодуле: для библиотек — описание проблемы, подключение через maven-central/caffeine, версии в gradle/libs.versions.toml. Для запускаемых модулей — команды запуска + переменные среды с дефолтами. - Корневой README.md переписан как навигационный хаб: что это, где клиенты, где серверы, как собрать, как опубликовать. - build.gradle.kts: per-module POM-description через единую карту в rootProject.extra (порядок важен — нужно ДО apply плагина KMP, поэтому beforeEvaluate в subprojects). - .gitea/workflows/ci.yml (новый): build + jvmTest + shadowJar на PR/push main. - .gitea/workflows/release.yml (обновлён): публикует библиотеки в caffeine Nexus + собирает 3 fatjar'а и крепит их к release как бинарные ассеты.
:agentik-tui — Compose-for-Mosaic TUI клиент к /agentik
Compose-style TUI-клиент (KMP desktop, без iOS), рендерится в ANSI-терминал
через библиотеку Mosaic 0.18. Полная
клавиатурная навигация — никаких :-префиксов (как в vim).
Сборка
./gradlew :agentik-tui:shadowJar
# Результат: agentik-tui/build/libs/agentik-tui-all.jar (~10 MB)
Также доступен через Nexus (caffeine репо) — pw.binom.agentik:agentik-tui:VERSION.
Запуск
# По умолчанию — 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 <conversation-uuid>
Альтернативно: AGENTIK_SERVER env-переменная.
--enable-native-access=ALL-UNNAMEDобязателен: Mosaic использует нативные API терминала (stdin/stdoutraw 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 · <conv-uuid> · 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).
Тесты
./gradlew :agentik-tui:jvmTest