AG-UI as in-process KMP API with Ktor client/server transports #1

Merged
subochev merged 2 commits from feat/agui-kmp into main 2026-09-09 20:44:11 +00:00
Owner

Что сделано

Модель протокола AG-UI как in-process API (интерфейсы/классы в стиле Java, как в официальном Java-SDK) в виде Kotlin Multiplatform библиотеки с двумя транспортными модулями на Ktor.

Модули

  • api — sealed-иерархия BaseEvent (все типы событий AG-UI), messages, state, tool, context, RunAgentInput/RunParameters, Agent/AgentSubscriber/EventDispatcher, AguiJson (kotlinx.serialization, дискриминатор type), SerializersModule с полиморфной регистрацией всех подтипов событий.
  • client — HttpAgent поверх Ktor SSE (POST RunAgentInput -> поток BaseEvent), реализует Agent.
  • server — Application.agui() / Route.aguiAgent(), отдаёт Agent за POST + SSE endpoint через SSEServerContent, плюс runnable sample.

Тесты

  • api: round-trip сериализации всех событий.
  • client: decode SSE против реального test-host сервера.
  • server: интеграция endpoint'а.

Весь gradle clean build зелёный: 12 тестов.

## Что сделано Модель протокола AG-UI как in-process API (интерфейсы/классы в стиле Java, как в официальном Java-SDK) в виде Kotlin Multiplatform библиотеки с двумя транспортными модулями на Ktor. ### Модули - **api** — sealed-иерархия `BaseEvent` (все типы событий AG-UI), messages, state, tool, context, `RunAgentInput`/`RunParameters`, `Agent`/`AgentSubscriber`/`EventDispatcher`, `AguiJson` (kotlinx.serialization, дискриминатор `type`), SerializersModule с полиморфной регистрацией всех подтипов событий. - **client** — `HttpAgent` поверх Ktor SSE (POST `RunAgentInput` -> поток `BaseEvent`), реализует `Agent`. - **server** — `Application.agui()` / `Route.aguiAgent()`, отдаёт `Agent` за POST + SSE endpoint через `SSEServerContent`, плюс runnable sample. ### Тесты - api: round-trip сериализации всех событий. - client: decode SSE против реального test-host сервера. - server: интеграция endpoint'а. Весь `gradle clean build` зелёный: 12 тестов.
subochev added 1 commit 2026-09-09 19:11:20 +00:00
Model the AG-UI protocol as an in-process API of Java-style interfaces and
classes, mirroring the official AG-UI Java SDK, and build it as a Kotlin
Multiplatform library with two Ktor transport modules.

Modules:
- api: BaseEvent sealed hierarchy (all AG-UI event types), messages, state,
  tool, context, RunAgentInput/Parameters, Agent/AgentSubscriber/
  EventDispatcher, AguiJson (kotlinx.serialization, "type" discriminator),
  plus a SerializersModule registering every event subtype polymorphically.
- client: HttpAgent over Ktor SSE (POST RunAgentInput -> stream BaseEvent),
  implementing the Agent interface.
- server: Application.agui()/Route.aguiAgent() exposing an Agent behind a
  POST + SSE endpoint via SSEServerContent, plus a runnable sample.

Tests: api serialization round-trips, client SSE decode against a real
test-host server, server endpoint integration.
subochev reviewed 2026-09-09 19:12:14 +00:00
@@ -0,0 +5,4 @@
kotlin {
jvmToolchain(21)
jvm()
Author
Owner

Добавь цели сборки все возможные. mac цели тоже. android не надо, jvm цель и так его покроет

Добавь цели сборки все возможные. mac цели тоже. android не надо, jvm цель и так его покроет
subochev reviewed 2026-09-09 19:13:09 +00:00
@@ -0,0 +1,51 @@
package com.agui.api.agent
Author
Owner

Мне не нравится имя пакета. давай pw.binom.agui

Мне не нравится имя пакета. давай pw.binom.agui
subochev reviewed 2026-09-09 20:23:00 +00:00
@@ -0,0 +5,4 @@
kotlin {
jvmToolchain(21)
jvm()
Author
Owner

тут тоже надо добавить все возможные цели. android не надо т.к. jvm цель и так его покроет

тут тоже надо добавить все возможные цели. android не надо т.к. jvm цель и так его покроет
subochev added 1 commit 2026-09-09 20:40:56 +00:00
- Rename module package com.agui -> pw.binom.agui (dirs + code + root group)
- Expand KMP targets on all modules: jvm + macOS/ios/Linux/mingw (no Android)
- Server native via ktor-server-cio; client native via ktor-client-cio
- Annotate sealed interface BaseEvent with @Serializable so the sealed
  serializer resolves without reflection on Kotlin/Native (was reflection-only
  on JVM, so native tests failed with 'Serializer for class BaseEvent not found')
subochev merged commit 8eeee54093 into main 2026-09-09 20:44:11 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: subochev/agui#1