feat(agentik-cli): REPL-клиент на базе :client для всех KMP-целей
Новый KMP-модуль :agentik-cli — REPL поверх HTTP-фасада :server. commonMain (~900 строк): - Main.kt — точка входа + парсинг --server/--id/--no-history/--help - CliPlatform.kt — expect-фабрика Agent + CliTerminal + SessionIo + env() - SlashCommand.kt — 11 slash-команд: /help /new /list /sw /rename /rm /interrupt /history /pwd /exit /quit - AgentikCli.kt (~350 строк) — главный REPL-цикл: readLine → parse → send → render events. Сохраняет lastEventAt в ~/.agentik/cli-state.json. - EventRenderer.kt — печатает SSE-события (StartResponse/AppendText/AppendImage/ End/Interrupted/Error) с правильным разделением text/image и переводом строки на end. - SessionRepository.kt — JSON-state (conversationId, lastEventAt) + IO-интерфейс SessionIo. jvmMain — JLine-терминал (LineReader+history, стрелки, Ctrl-D/E, автосейв истории), java.io-based atomic-IO для state-файла, real System.getenv. nativeMain — stub actuals (kotlin.Result-error с подсказкой куда копать): подключение native ktor-движков (darwin/curl/okhttp) и termios через kotlinx.cinterop — отдельная задача. Все 8 KMP-целей (jvm/macosX64/macosArm64/ iosX64/iosArm64/iosSimulatorArm64/linuxX64/linuxArm64/mingwX64) компилируются. shadowJar собирает self-contained fatjar (~8.5 MB). 23 unit-теста зелёные. Заодно фикс бага в :client — InstantSerializer.descriptor имел имя 'kotlin.time.Instant', которое kotlinx-serialization 1.6+ резервирует за встроенным сериализатором, из-за чего client падал на старте с 'there already exists InstantSerializer'. Переименовано в 'pw.binom.agentik.Instant' — зеркально с :server. Smoke-тест на 192.168.76.166: /new + 'привет'/'2+2' отвечает корректно, state-файл создаётся в /root/.agentik/cli-state.json, /list возвращает 125 диалогов.
This commit is contained in:
@@ -36,6 +36,9 @@ include(":skills")
|
||||
include(":server")
|
||||
// Ktor-клиент, превращающий HTTP-фасад в `Agent`/`Conversation`.
|
||||
include(":client")
|
||||
// CLI-клиент поверх :client — REPL со slash-командами и стримингом ответов.
|
||||
// KMP со всеми целями (jvm + весь натив), jvm-таргет собирается как shadowJar.
|
||||
include(":agentik-cli")
|
||||
// Встраиваемая долговременная память агента. `:memory-api` — интерфейсы,
|
||||
// `:memory-md` — реализация на базе §-файлов (Hermes-style).
|
||||
include(":memory-api")
|
||||
|
||||
Reference in New Issue
Block a user