- 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 как бинарные ассеты.
:server — pw.binom.agentik.server
Ktor-маршруты, превращающие pw.binom.agentik.proto.Agent в HTTP+JSON+SSE фасад.
Подключается к любому Application через Route.agentikAgent(...), монтируется
под заданным path (по умолчанию /agentik).
Какую проблему решает
:proto — это чистый Kotlin-контракт (Agent/Conversation). Чтобы по нему
говорить с удалённым сервером нужен мост. :server — этот мост, но только
маршруты: без привязки к конкретному engine (CIO/Netty), без агрегации
прочих протоколов (AG-UI/A2A), без инициализации БД/памяти. Один extension-метод
на Route, и ваш Agent доступен по HTTP.
Что отдаёт
| Метод | Путь | Назначение |
|---|---|---|
GET |
/health (через :standalone) |
liveness |
POST |
/agentik/conversations |
создать диалог |
GET |
/agentik/conversations |
список диалогов (постраничный) |
GET |
/agentik/conversations/{id} |
конкретный диалог |
POST |
/agentik/conversations/{id}/rename |
переименовать |
DELETE |
/agentik/conversations/{id} |
удалить |
POST |
/agentik/conversations/{id}/messages |
отправить сообщение |
GET |
/agentik/conversations/{id}/events |
SSE-стрим событий |
GET |
/agentik/conversations/{id}/messages |
backfill истории (с after) |
Wire-форма — kotlinx.serialization JSON со snake_case-дискриминаторами
("kind":"start_response", "kind":"user_message", и т.п.). Instant
сериализуется ISO-8601 строкой (agentikJson в Serialization.kt).
Подключение
// your-application/build.gradle.kts
implementation("pw.binom.agentik:server:$version")
implementation("io.ktor:ktor-server-core:2.3.x") // или любой совместимый
implementation("io.ktor:ktor-server-cio:2.3.x") // engine — ваш выбор
// ваш код
import pw.binom.agentik.server.agentikAgent
fun Application.module() {
install(ContentNegotiation) { json(agentikJson) }
routing {
agentikAgent(agent = myAgent) // mount на /agentik
agentikAgent(agent = myAgent, path = "/v1/agent") // или под другим путём
}
}
Где смотреть версии
pw.binom.agentik:proto(см.:proto/README.md)pw.binom.agentik:server—versionберётся изgradle.properties(version=0.1.0)- история релизов:
https://git.binom.pw/subochev/agentik/releases
Сборка
./gradlew :server:build
./gradlew :server:jvmTest
KMP-таргеты: те же, что у :proto (jvm + 8 нативов).