e816d8d9d1
1. UUID: java.util.UUID.randomUUID() → commonMain helper Ids.new(prefix)
wrapping kotlin.uuid.Uuid.random(). kotlin.uuid is stdlib (KMP: jvm +
all native targets), so the call sites (ChatAgent, ChatConversation,
SqliteWorkingMemoryStore) are now ready for native builds. Format kept:
'<prefix>-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.
2. HTTP engine: ktor-server-netty → ktor-server-cio. Netty is JVM-only;
CIO is KMP (jvm, linuxX64, ios, etc.) and feature-complete for our
needs (POST + SSE). standalone/build.gradle.kts drops netty and adds
cio; Main.kt imports io.ktor.server.cio.CIO and calls
embeddedServer(CIO, port = port).
Netty is left in libs.versions.toml (catalog entry kept) in case anyone
needs to fall back; only :standalone stopped depending on it.
E2E verified end-to-end against litellm local/codding: standalone-1.0.0
tarball starts on AGENTIK_PORT, GET /health -> 'ok', POST
/agentik/conversations -> 201 with new UUID-format id, POST .../messages
returns real LLM answer ('Ассистент'). 44/44 unit tests green.
94 lines
3.3 KiB
Kotlin
94 lines
3.3 KiB
Kotlin
@file:OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
|
|
|
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
|
|
|
plugins {
|
|
alias(libs.plugins.kotlin.multiplatform)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
alias(libs.plugins.sqldelight)
|
|
}
|
|
|
|
kotlin {
|
|
jvmToolchain(21)
|
|
|
|
jvm {
|
|
binaries {
|
|
executable {
|
|
mainClass.set("pw.binom.agentik.standalone.MainKt")
|
|
}
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
commonMain.dependencies {
|
|
implementation(project(":proto"))
|
|
implementation(project(":server"))
|
|
|
|
// Commons
|
|
implementation(libs.kotlinx.coroutines.core)
|
|
implementation(libs.kotlinx.serialization.json)
|
|
implementation(libs.kotlinx.datetime)
|
|
|
|
// litert-kmp: контракт (commonMain)
|
|
api(libs.litert.api)
|
|
|
|
// SQLDelight runtime (commonMain)
|
|
api(libs.sqldelight.runtime)
|
|
api(libs.sqldelight.coroutines)
|
|
}
|
|
|
|
jvmMain.dependencies {
|
|
// litert-openai: JVM-реализация
|
|
implementation(libs.litert.openai)
|
|
// litert-google: встроенный LiteRT-LM движок, нужен только на runtime
|
|
runtimeOnly(libs.litert.google)
|
|
|
|
// SQLDelight JDBC driver (JVM)
|
|
implementation(libs.sqldelight.sqlite.driver)
|
|
|
|
// Ktor server (для :server facade + a2aServer)
|
|
// Используем CIO вместо Netty — он KMP (jvm + linuxX64/ios/...), нам нужен
|
|
// для будущей native-сборки; на JVM работает идентично для нашего сценария.
|
|
implementation(libs.ktor.server.core)
|
|
implementation(libs.ktor.server.sse)
|
|
implementation(libs.ktor.server.cio)
|
|
implementation(libs.ktor.server.content.negotiation)
|
|
implementation(libs.ktor.serialization.kotlinx.json)
|
|
|
|
// Транспортные фасады
|
|
implementation(libs.agui.server)
|
|
implementation(libs.a2a.server)
|
|
|
|
// MCP (Model Context Protocol) клиент — подключение внешних/внутренних MCP-серверов
|
|
implementation(libs.mcp.sdk.client)
|
|
implementation(libs.ktor.client.core)
|
|
implementation(libs.ktor.client.cio)
|
|
implementation(libs.ktor.client.content.negotiation)
|
|
implementation(libs.ktor.serialization.kotlinx.json)
|
|
}
|
|
|
|
commonTest.dependencies {
|
|
implementation(libs.kotlinx.coroutines.core)
|
|
implementation(libs.kotlin.test)
|
|
}
|
|
|
|
jvmTest.dependencies {
|
|
implementation(libs.kotlinx.coroutines.core)
|
|
implementation(libs.kotlinx.serialization.json)
|
|
implementation(libs.kotlin.test)
|
|
// Ktor test engine для smoke-тестов HTTP
|
|
implementation(libs.ktor.server.test.host)
|
|
}
|
|
}
|
|
}
|
|
|
|
sqldelight {
|
|
databases {
|
|
create("AgentikDatabase") {
|
|
packageName.set("pw.binom.agentik.standalone.persistence.sqlite")
|
|
srcDirs.setFrom("src/jvmMain/sqldelight")
|
|
}
|
|
}
|
|
}
|