ddd9d076c1
ci / JVM build + tests (push) Failing after 1m25s
Закрывает разрыв между :proto и UI-композицией: TuiBackend маршрутизирует
onUserMessage → Conversation.send и Event → AppState.
Изменения:
- agentik-tui/.../TuiBackend.kt — новый commonMain-файл (138 строк):
инкапсулирует Agent-общение, авто-создание первого диалога,
подписку на Conversation.events, диспетчеризацию Event в AppState.
- agentik-tui/.../Main.kt — обязательный health-check GET {baseUrl}/health
ДО старта UI: понятная ошибка и exit 1 при недоступном сервере,
понятное сообщение при не-200/не-'ok'. JVM-only API (java.net.*,
ktor.*Timeout) обёрнуты в catch (Exception) — commonMain собирается
под все desktop-native.
- agentik-tui/.../AppState.kt — добавлены attachBackend/setConversation/
newConversation/postSystem; submitInput теперь не пишет AssistantStreaming
сам (его рисует TuiBackend по Event.AppendText).
- agentik-tui/.../TuiApp.kt — TuiBackend монтируется в LaunchedEffect,
делит scope с recomposer'ом.
- agentik-tui/.../Platform.jvm.kt — expect/actual platformEnv + platformCreateAgent.
- agentik-tui/.../Platform.native.kt — stub actual.
- agentik-tui/build.gradle.kts — kotlinx-coroutines-test в commonTest.
- agentik-cli/build.gradle.kts — binaries.executable entryPoint для native
(тот же фикс, что прошёл для agentik-tui в предыдущем коммите).
- TuiBackend.dispatch: Event.End теперь зовёт finishAssistant()
(конвертирует streaming-чанк в финальный Assistant), Interrupted —
finishAssistant + 'прервано' system message. Раньше оба только
выключали streaming, и последний чанк висел как AssistantStreaming
с курсором.
Тесты: agentik-tui/src/commonTest/.../TuiBackendTest.kt — 10 кейсов
против FakeAgent/FakeConversation: auto-create, переиспользование,
AppendText-coalesce, End finalize, Interrupted system, ToolCall/ToolResult
visibility, Error handling, exception path, StartReasoning, connect
message. Используется runTest.backgroundScope + runCurrent — backgroundScope
не двигается через advanceUntilIdle (документированное поведение).
Сборка: jvm + linuxX64 + linuxArm64 + macosX64 + macosArm64 + mingwX64,
10/10 jvmTest green, full project jvmTest не задет.
:agentik-cli — JVM CLI клиент к /agentik
Что это
JVM-only REPL-клиент к серверу :standalone через :client
над HTTP+SSE:
- Нативный REPL с JLine (стрелки влево/вправо/вверх, история, Ctrl-D/E).
- Подписка на live-стрим событий агента.
- Slash-команды:
/new /list /switch /rename /rm /interrupt /history /pwd /help /exit /quit. - Persistent session id в
~/.agentik/cli-state.json.
Решает: быстрый способ проверить агента руками из терминала. Используется в CI-смоук-тестах и для daily-driver.
Как запустить
Требования
- JVM 21+ (на машине должна быть JAVA_HOME или
javaв PATH). - Запущенный
:standalone(по умолчаниюhttp://localhost:8080/agentik).
Запуск из готового fatjar
java --enable-native-access=ALL-UNNAMED -jar agentik-cli-0.1.0-all.jar \
--server http://192.168.76.166:8080/agentik
Запуск через Gradle (dev)
./gradlew :agentik-cli:run --args="--server http://localhost:8080/agentik"
Параметры CLI
| Флаг | ENV | Что делает |
|---|---|---|
--server URL |
AGENTIK_SERVER |
URL /agentik (default http://localhost:8080/agentik) |
--id ID |
USER/USERNAME |
Имя агента (default — текущий пользователь) |
--no-history |
— | Не восстанавливать последнюю диалог после запуска |
--help |
— | Показывает help и выходит |
Slash-команды (внутри REPL)
| Команда | Синонимы | Что делает |
|---|---|---|
/help |
Показывает help | |
/new [title] |
Создать диалог | |
/list |
/ls |
Список диалогов |
/switch <id> |
/sw, /cd |
Переключиться на диалог |
/rename <title> |
Переименовать текущий диалог | |
/rm [id] |
/delete |
Удалить (текущий или по id) |
/interrupt |
/stop, /cancel |
Прервать текущий ход |
/history |
/h, /hist |
Показывает историю текущего диалога |
/pwd |
Путь к state-file | |
/exit, /quit |
Выйти |
Переменные среды (пробрасываются серверу через --server)
См. ../standalone/README.md. На стороне
клиента они не интерпретируются — это лишь настройки запуска
агента. CLI только знает, по какому URL стучаться.
Известное ограничение
SSE event-stream в не-TTY ssh-сессии (без -tt) закрывается на
default-таймауте Ktor. Используйте либо ssh -tt, либо нативный
terminal. Это upstream-особенность Ktor SSE.
Тесты
./gradlew :agentik-cli:jvmTest
23 теста: парсер slash-команд, event-рендер, state-repository.
Версии
gradle/libs.versions.toml → [versions] agentik-agentik-cli.