# :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`). ## Подключение ```kotlin // 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` ## Сборка ```bash ./gradlew :server:build ./gradlew :server:jvmTest ``` KMP-таргеты: те же, что у `:proto` (jvm + 8 нативов).