docs: per-module READMEs (run vs library) + root navigation hub
ci / JVM build + tests (pull_request) Failing after 54s

Every subproject now has README.md:
- 3 runnable modules (:standalone, :agentik-cli, :agentik-tui):
  quickstart, env table, parameters, known limits
- 11 library modules: what it is, which problem solves, how to
  wire it in, where versions live

Root README.md is the navigation hub (Quickstart, Modules table,
publish + CI/CD notes).

Also: ci.yml prunes the :memory-vector -x excludes now that
text-embedding-kmp artifacts are published to caffeine.

518 tests green.

Verified publish pipeline: :proto:publish to caffeine produces
pom.module + per-target klibs + sources for all 9 KMP targets.

🤖 Generated with [opencode]
This commit is contained in:
SubochevAV
2026-09-16 20:44:16 +03:00
parent 5ad972767d
commit 8f616f359f
22 changed files with 1125 additions and 890 deletions
+61 -53
View File
@@ -1,76 +1,84 @@
# :agentik-cli — JVM CLI клиент к /agentik
# `:agentik-cli` — JVM CLI клиент к `/agentik`
REPL-клиент к запущенному `:standalone`-серверу на базе `:client`. **JVM-only**
(JLine требует termios + `java.io.File`); для desktop-альтернативы — `:agentik-tui`.
## Что это
## Сборка
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
```bash
./gradlew :agentik-cli:shadowJar
# Результат: agentik-cli/build/libs/agentik-cli-all.jar (~8 MB)
java --enable-native-access=ALL-UNNAMED -jar agentik-cli-0.1.0-all.jar \
--server http://192.168.76.166:8080/agentik
```
Также доступен через Maven Central Nexus (`caffeine` репо) — см. релизы:
`https://git.binom.pw/subochev/agentik/releases`. После публикации нового
тега jar появляется как `pw.binom.agentik:agentik-cli:VERSION` (artifact + classifier `all`).
## Запуск
### Запуск через Gradle (dev)
```bash
# По умолчанию — http://localhost:8080/agentik
java -jar agentik-cli-all.jar
# К другому серверу
java -jar agentik-cli-all.jar --server http://192.168.76.166:8080/agentik
# Без восстановления последней беседы
java -jar agentik-cli-all.jar --no-history
# В конкретной беседе
java -jar agentik-cli-all.jar --id <conversation-uuid>
./gradlew :agentik-cli:run --args="--server http://localhost:8080/agentik"
```
Альтернативно: `AGENTIK_SERVER` env-переменная с тем же эффектом, что и `--server`.
## Параметры CLI
## Slash-команды внутри REPL
| Команда | Алиасы | Действие |
| Флаг | ENV | Что делает |
|---|---|---|
| `/help` | `/?` | список команд + клавиш |
| `/new <title?>` | `/n` | создать новый диалог |
| `/list` | `/ls` | показать все диалоги |
| `/switch <id>` | `/sw <id>` | переключиться на диалог |
| `/rename <title>` | `/mv <title>` | переименовать текущий |
| `/delete <id?>` | `/rm <id?>` | удалить (без id — текущий) |
| `/interrupt` | `/stop`, `/cancel` | прервать активный ход |
| `/history` | `/h`, `/hist` | backfill истории через `getMessages` |
| `/pwd` | `/where` | показать текущий conversation id |
| `/exit` | `/quit` | выйти (Ctrl-D / Ctrl-C — то же) |
| `--server URL` | `AGENTIK_SERVER` | URL `/agentik` (default `http://localhost:8080/agentik`) |
| `--id ID` | `USER`/`USERNAME` | Имя агента (default — текущий пользователь) |
| `--no-history` | — | Не восстанавливать последнюю диалог после запуска |
| `--help` | — | Показывает help и выходит |
Свободный текст = сообщение текущему диалогу; SSE-события (start_reasoning /
start_response / append_text / end / interrupted / error) стримятся в stdout
в реальном времени.
## Slash-команды (внутри REPL)
## Переменные окружения
| Переменная | Дефолт | Назначение |
| Команда | Синонимы | Что делает |
|---|---|---|
| `AGENTIK_SERVER` | `http://localhost:8080/agentik` | URL HTTP-фасада `:server` |
| `/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` | | Выйти |
История сессий (id + last event timestamp) сохраняется в
`~/.agentik/cli-state.json` (атомарно через `tmp → rename`).
## Переменные среды (пробрасываются серверу через `--server`)
## Особенности
См. [`../standalone/README.md`](../standalone/README.md). На стороне
клиента они **не** интерпретируются — это лишь настройки запуска
агента. CLI только знает, по какому URL стучаться.
- **Arrow keys, history (↑/↓), Ctrl-D/Ctrl-C** — через JLine 3.30, история
readline в `~/.agentik/.inputrc`-стиле (через JLine `DefaultHistory`).
- **Reconnect-safe SSE** — если сервер рестартовал, клиент подхватывает с
`lastEventAt` через `events(after)`.
- **Snapshot-режим** — если подключились к диалогу впервые, `/history`
подгружает старые сообщения через `getMessages(after)` (offline-бэкфилл).
## Известное ограничение
SSE event-stream в не-TTY ssh-сессии (без `-tt`) закрывается на
default-таймауте Ktor. Используйте либо `ssh -tt`, либо нативный
terminal. Это upstream-особенность Ktor SSE.
## Тесты
```bash
```
./gradlew :agentik-cli:jvmTest
```
23 теста: парсер slash-команд, event-рендер, state-repository.
## Версии
`gradle/libs.versions.toml` → `[versions] agentik-agentik-cli`.