Files
agentik/agentik-cli/README.md
T
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

124 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# `: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. Пример:
```bash
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
```bash
java --enable-native-access=ALL-UNNAMED \
-jar agentik-cli-0.1.0-SNAPSHOT-all.jar --help
```
### Через Gradle
```bash
./gradlew :agentik-cli:shadowJar
java -jar agentik-cli/build/libs/agentik-cli-0.1.0-SNAPSHOT-all.jar info
```
## Примеры
```bash
# Список диалогов (таблица)
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](https://github.com/ajalt/clikt/issues/598),
workaround — `kotlin.native.cacheKind.linuxX64=none`, что замедляет
сборку на порядки). Поэтому clikt отвергнут в пользу kotlinx.cli.
- **picocli** — JVM-only.
- **kotlinx-args** — мёртвый репозиторий.
Нативные бинари `:agentik-cli` отложены до стабилизации
arg-parser-ситуации.
## Тесты
```bash
./gradlew :agentik-cli:jvmTest
```
## Версии
`gradle/libs.versions.toml` → `[versions] agentik-agentik-cli`.