Каркас сборки десктопа: KMP (jvm), Compose Multiplatform, зависимости из :agentik

- только jvm-таргет; composite includeBuild("../agentik")
- mavenLocal() первым в репозиториях: локальные публикации перекрывают Nexus
- Compose 1.7.3 + Kotlin 2.4.20, compose.desktop.currentOs
- вендоренный markdown (ru.otpbank.ai:markdown), mic-api/asr-vosk/vad
- gradle wrapper, gradle.properties, .gitignore (локальный тулинг)
This commit is contained in:
2026-09-28 10:07:52 +03:00
parent 093115c415
commit 960cd60120
9 changed files with 661 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
[versions]
kotlin = "2.4.20"
kotlinx-coroutines = "1.11.0"
kotlinx-serialization = "1.11.0"
ksqlite = "0.1.3"
# Ktor — версия из agentik (там же живут `:client`-модули, engine выбирает
# потребитель; CIO — то, что agentik использует в собственных тестах).
ktor = "3.1.3"
kotlin-logging = "3.0.5"
logback = "1.5.18"
junit = "5.10.2"
# Compose Multiplatform — версия взята из assistent (`compose-multiplatform`,
# там с ней собирается клиент), совместима с Kotlin 2.4.x.
compose-multiplatform = "1.7.3"
# Обёртка над JetBrains org.intellij.markdown (GFM), живёт в корпоративном
# developerspace Nexus (см. settings.gradle.kts), не в Maven Central.
markdown = "0.51.0"
# Голос: всё опубликовано в caffeine Nexus (см. MIC-ASR-SEARCH.md).
# mic-api — поток микрофона (JVM: javax.sound.sampled), версия 1.0.0.
mic = "1.0.0"
# asr-api — интерфейс Stt (feed/partialText/finalText), движки в отдельных
# артефактах; версия 4 — та, что использует agentik-android.
asr = "4"
# VAD (Silero) — модель внутри артефакта, ничего качать не надо.
vad = "2"
[libraries]
# --- Agentik модули (composite build ../agentik, group = "pw.binom.agentik") ---
# Эти артефакты резолвятся через `includeBuild("../agentik")` в settings.gradle.kts —
# agentik публикует свои модули с group = "pw.binom.agentik", артефакт-id =
# имени Gradle-модуля. Подключаем точечно только то что реально нужно десктопу.
agentik-client = { module = "pw.binom.agentik:client" }
agentik-journal-api = { module = "pw.binom.agentik:journal-api" }
agentik-journal-ksqlite = { module = "pw.binom.agentik:journal-ksqlite" }
agentik-outbox-api = { module = "pw.binom.agentik:outbox-api" }
agentik-proto = { module = "pw.binom.agentik:proto" }
# Только для тестов: поднять настоящий HTTP/SSE-фасад `:server` поверх
# in-memory-агента и прогнать десктопный стек против живого протокола.
agentik-server = { module = "pw.binom.agentik:server" }
agentik-journal-inmemory = { module = "pw.binom.agentik:journal-inmemory" }
agentik-outbox-inmemory = { module = "pw.binom.agentik:outbox-inmemory" }
# --- Ktor client engine: нужен AgentikAgent(...) как `engineFactory`. ---
# `:client` объявляет ktor-client-core как `api`, но engine — выбор потребителя.
ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" }
# --- Ktor server engine (только тесты): embeddedServer(CIO) для E2E. ---
ktor-server-cio = { module = "io.ktor:ktor-server-cio", version.ref = "ktor" }
# --- ksqlite (pw.binom.db) — KMP SQLite с sqlite-vec.
# Резолвится из caffeine Nexus (см. settings.gradle.kts); GMM выбирает jvm-variant.
ksqlite = { module = "pw.binom.db:ksqlite", version.ref = "ksqlite" }
# --- Kotlinx (KMP-артефакты, Gradle сам разруливает per-target variants) ---
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
# --- Логирование: kotlin-logging + logback (binding) ---
kotlin-logging = { module = "io.github.microutils:kotlin-logging", version.ref = "kotlin-logging" }
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
# --- Markdown: парсер/модель сегментов (обёртка над org.intellij.markdown) ---
markdown = { module = "ru.otpbank.ai:markdown", version.ref = "markdown" }
# --- Голос: микрофон → VAD → распознавание (всё из caffeine Nexus) ---
# mic-api публикует KMP-метаданные + `-jvm`/`-android` варианты; GMM выберет jvm.
mic-api = { module = "pw.binom.mic:mic-api", version.ref = "mic" }
# asr-api — только интерфейс `Stt`; конкретный движок подключаем отдельно.
asr-api = { module = "pw.binom.asr:asr-api", version.ref = "asr" }
# asr-vosk — Vosk: модель распаковывается из артефакта, скачивать нечего.
asr-vosk = { module = "pw.binom.asr:asr-vosk", version.ref = "asr" }
# VAD — детектор речи (Silero), модель внутри артефакта.
vad = { module = "pw.binom.voice.vad:vad", version.ref = "vad" }
# --- Тесты ---
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
[plugins]
# Kotlin Multiplatform — фундамент; конкретные цели объявляются в build.gradle.kts
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
# Compose Compiler plugin — обязателен для @Composable. Версионируется вместе
# с Kotlin; без него @Composable-лямбды ломаются (Function0 вместо Function2).
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
# Compose Multiplatform plugin — приносит `compose.material3` / `compose.ui` /
# `compose.materialIconsExtended` и desktop-инфраструктуру.
compose = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" }
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists