- README.md в каждом подмодуле: для библиотек — описание проблемы, подключение через maven-central/caffeine, версии в gradle/libs.versions.toml. Для запускаемых модулей — команды запуска + переменные среды с дефолтами. - Корневой README.md переписан как навигационный хаб: что это, где клиенты, где серверы, как собрать, как опубликовать. - build.gradle.kts: per-module POM-description через единую карту в rootProject.extra (порядок важен — нужно ДО apply плагина KMP, поэтому beforeEvaluate в subprojects). - .gitea/workflows/ci.yml (новый): build + jvmTest + shadowJar на PR/push main. - .gitea/workflows/release.yml (обновлён): публикует библиотеки в caffeine Nexus + собирает 3 fatjar'а и крепит их к release как бинарные ассеты.
2.6 KiB
:client — pw.binom.agentik.client
Ktor-клиент, превращающий HTTP-фасад :server обратно в Agent/Conversation из :proto.
Подходит для JVM-приложений (CLI, desktop, integration-тесты).
Какую проблему решает
После того, как :server выставляет агента по HTTP, встаёт задача: дать
вызывающей стороне тот же интерфейс, что был на сервере — а не отдельный
REST-клиент с хендшейкингом SSE, парсингом полей, ручной постраничной подгрузкой.
:client — обёртка: AgentikAgent(baseUrl).createConversation() возвращает
Conversation, идентичный серверному, а вызовы send/getMessages/events
прозрачно ездят по HTTP.
Использование
import pw.binom.agentik.client.AgentikAgent
val agent = AgentikAgent(id = "ops-bot", baseUrl = "http://localhost:8080/agentik")
val conv = agent.createConversation(temp = false)
conv.events(after = Clock.System.now()).collect { ev ->
when (ev) {
is Event.AppendText -> print(ev.body)
is Event.End -> println()
else -> Unit
}
}
conv.send(listOf(Content.Text("Привет. Сколько будет 2+2?")))
// ... события стримятся в collect выше
conv.close()
Для фоновой подписки (reconnect-safe):
// Долгая живая подписка на события диалога.
conv.events(after = lastSeen).collect { ev ->
if (ev is Event.End) lastSeen = ev.date
}
Подключение
implementation("pw.binom.agentik:client:$version")
// Транзитивно тянет :proto + ktor-client-core/cio/... + kotlinx-serialization.
SSE-парсер
Внутри — самописный парсер SSE (режет поток на data: строки, буферизует
частичные, переживает keep-alive-комментарии). Зависимости — ktor-client-cio
по умолчанию; если нужен другой engine — подмените через AgentikAgent(engineFactory = …).
Где смотреть версии
:clientсинхронизирован с:proto/server—versionизgradle.properties- релизы:
https://git.binom.pw/subochev/agentik/releases
Сборка
./gradlew :client:build
JVM-only (ktor-client-engine-cio — JVM).