Files
agentik/agentik-cli
subochev b5b21d146a
ci / JVM build + tests (push) Failing after 2m11s
feat(agentik-cli): one-shot subcommand CLI; client: streaming SSE via prepareGet
- :agentik-cli переписан с REPL на one-shot subcommands:
  conv-ls / conv-new / conv-show / conv-delete / conv-rename /
  msgs / send / interrupt / info. Аргумент-парсер — kotlinx.cli 0.3.6
  (clikt 5.x отвергнут из-за upstream-бага duplicate symbol
  selfAndAncestors между clikt и clikt-mordant, issue #598).
- :client: events() переведён с httpClient.get() на
  prepareGet()+execute{} — get() дожидается полного тела, а SSE
  не закрывается никогда, поэтому подписка висела вечно. (Это
  же объясняет, почему TUI agent.events() фактически был
  нерабочим на реальном сервере.)
- :client KMP-конверсия (jvm + 5 desktop-native) уже была в
  коммите 9d826a4, здесь она просто подтверждена в статусе
  green по всем таргетам.
- REPL-инфраструктура (CliPlatform, EventRenderer, Main,
  SessionRepository, SlashCommand + 3 теста) удалена.
- agentik-cli/README переписан под subcommand-формат,
  root README обновлён (убран дубликат строки, agentik-tui
  убран из 'Запускаемые модули').

Smoke (на 192.168.76.166): info / conv-ls / conv-new /
conv-rename / conv-show / conv-delete / msgs / send
(стримит response-events до event End) / interrupt
(выводит event Interrupted).
2026-09-17 23:05:25 +03:00
..

:agentik-cli — JVM CLI клиент к /agentik

Что это

JVM-only one-shot subcommand CLI к серверу :standalone через :client по HTTP+SSE. Один вызов — одна команда: стримы ответа send идёт в stdout построчно, никакого embedded-REPL.

Решает: быстрый способ дёрнуть агента из shell-скрипта или руками, не поднимая отдельную TUI-сессию.

Подкоманды

agentik-cli <subcommand> [options]

Subcommands:
    conv-ls       Список диалогов агента
    conv-new      Создать диалог; печатает id
    conv-show     Метаданные диалога
    conv-delete   Удалить диалог
    conv-rename   Переименовать диалог
    msgs          Показать сообщения диалога
    send          Отправить user-ход и стримить ответ
    interrupt     Прервать текущий ход диалога
    info          Показать server URL и agent id

--server URL и --id ID (env: AGENTIK_SERVER, AGENTIK_AGENT_ID) задаются после имени subcommand'а — kotlinx.cli не шарит опции родителя в subcommand. Пример:

agentik-cli conv-ls --server http://192.168.76.166:8080/agentik
agentik-cli conv-new --server http://localhost:8080/agentik
agentik-cli send --server http://localhost:8080/agentik conv-abc "привет"

Как запустить

Из готового fatjar

java --enable-native-access=ALL-UNNAMED \
     -jar agentik-cli-0.1.0-SNAPSHOT-all.jar --help

Через Gradle

./gradlew :agentik-cli:shadowJar
java -jar agentik-cli/build/libs/agentik-cli-0.1.0-SNAPSHOT-all.jar info

Примеры

# Список диалогов (таблица)
agentik-cli conv-ls --server http://localhost:8080/agentik

# Создать диалог
ID=$(agentik-cli conv-new --server http://localhost:8080/agentik)
echo "new conv: $ID"

# Переименовать
agentik-cli conv-rename --server http://localhost:8080/agentik "$ID" "мой чат"

# Отправить ход и стримить ответ
agentik-cli send --server http://localhost:8080/agentik "$ID" "2+2"

# Показать последние N сообщений
agentik-cli msgs --server http://localhost:8080/agentik "$ID" --limit 10

# Прервать активный ход
agentik-cli interrupt --server http://localhost:8080/agentik "$ID"

# Удалить
agentik-cli conv-delete --server http://localhost:8080/agentik "$ID"

Формат вывода send

Каждое SSE-событие печатается отдельной строкой event <Type> ... — пригодно для парсинга через awk/jq-обёртки:

event StartReasoning
event StartResponse TEXT
event AppendText \n\n
event AppendText Привет!
event End

Терминальные события (End, Interrupted, Error) тоже печатаются; CLI выходит сразу после End.

Почему JVM-only (а не KMP)

Аргумент-парсер: kotlinx.cli 0.3.6 (JetBrains, KMP) — единственный зрелый вариант, который линкуется нативно под linuxX64/linuxArm64 без upstream-багов. Альтернативы:

  • clikt-multiplatform 5.x имеет upstream-баг: clikt и clikt-mordant оба объявляют selfAndAncestors в commonMain, и Kotlin/Native linker падает на дубликате символа (issue ajalt/clikt#598, workaround — kotlin.native.cacheKind.linuxX64=none, что замедляет сборку на порядки). Поэтому clikt отвергнут в пользу kotlinx.cli.
  • picocli — JVM-only.
  • kotlinx-args — мёртвый репозиторий.

Нативные бинари :agentik-cli отложены до стабилизации arg-parser-ситуации.

Тесты

./gradlew :agentik-cli:jvmTest

Версии

gradle/libs.versions.toml → [versions] agentik-agentik-cli.