Files
agentik/server/README.md
T
subochev 0fdc12695e
ci / JVM build + tests (push) Failing after 1m57s
docs: per-module README + root navigation hub + CI/release workflows
- 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 как бинарные ассеты.
2026-09-16 16:24:03 +03:00

3.0 KiB
Raw Blame History

: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 нативов).