0fdc12695e
ci / JVM build + tests (push) Failing after 1m57s
- 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 как бинарные ассеты.
67 lines
3.0 KiB
Markdown
67 lines
3.0 KiB
Markdown
# :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 нативов).
|