From 4156e5f95f741e2a797c43410b7dbb9a28e0b19e Mon Sep 17 00:00:00 2001 From: subochev Date: Thu, 24 Sep 2026 16:12:28 +0300 Subject: [PATCH] chore(deps): refactor ksqlite dependency to use version catalog --- client/build.gradle.kts | 2 +- context-ksqlite/build.gradle.kts | 4 ++-- gradle/libs.versions.toml | 10 ++++++++++ journal-ksqlite/build.gradle.kts | 4 ++-- memory-md-vector/build.gradle.kts | 4 ++-- reflection-ksqlite/build.gradle.kts | 6 +++--- standalone/build.gradle.kts | 2 +- .../kotlin/pw/binom/agentik/standalone/Main.kt | 15 +++++++++++++-- vector-index-ksqlite/build.gradle.kts | 11 ++++++----- 9 files changed, 40 insertions(+), 18 deletions(-) diff --git a/client/build.gradle.kts b/client/build.gradle.kts index 06df030..742d3b8 100644 --- a/client/build.gradle.kts +++ b/client/build.gradle.kts @@ -44,7 +44,7 @@ kotlin { implementation(libs.ktor.server.sse) } jvmTest.dependencies { - implementation("junit:junit:4.13.2") + implementation(libs.junit) } } diff --git a/context-ksqlite/build.gradle.kts b/context-ksqlite/build.gradle.kts index f54eb78..ecaea26 100644 --- a/context-ksqlite/build.gradle.kts +++ b/context-ksqlite/build.gradle.kts @@ -21,9 +21,9 @@ kotlin { sourceSets { commonMain.dependencies { - // ksqlite 0.1.3 опубликован в Maven Central — обычный + // ksqlite живёт в libs.versions.toml (см. catalog) — обычный // `mavenCentral()` в settings.gradle.kts его подтянет. - implementation("pw.binom.db:ksqlite:0.1.3") + implementation(libs.ksqlite) implementation(libs.kotlinx.serialization.json) api(project(":context-api")) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 45b4740..1e1f052 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,6 +16,8 @@ logback = "1.5.18" mosaic = "0.18.0" clikt = "5.0.3" kotlinx-cli = "0.3.6" +ksqlite = "0.1.3" +junit = "4.13.2" [plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } @@ -96,6 +98,14 @@ kotlinx-io-core = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.re # --- kMMIO (dev.karmakrafts.kmmio) — резерв под будущую vector-DB, пока не используется --- # kmmio-core = { module = "dev.karmakrafts.kmmio:kmmio-core", version = "2.3.1" } +# --- ksqlite (pw.binom.db) — KMP SQLite со встроенным sqlite-vec (https://github.com/caffeine-mgn/ksqlite). +# Тянется как обычная `implementation(libs.ksqlite)` — Gradle Module Metadata резолвит per-target +# variant (ksqlite-jvm / ksqlite-linuxx64 / ksqlite-mingwx64 / ...). +ksqlite = { module = "pw.binom.db:ksqlite", version.ref = "ksqlite" } + +# --- JUnit 4 — legacy test framework (используется в :client для совместимости с ktor-server-test-host). --- +junit = { module = "junit:junit", version.ref = "junit" } + # --- JVector (io.github.jbellis) — embedded ANN-индекс для vector-бэкенда памяти. JVM-only. --- jvector = { module = "io.github.jbellis:jvector", version.ref = "jvector" } diff --git a/journal-ksqlite/build.gradle.kts b/journal-ksqlite/build.gradle.kts index b0aaf6b..1dbea12 100644 --- a/journal-ksqlite/build.gradle.kts +++ b/journal-ksqlite/build.gradle.kts @@ -20,9 +20,9 @@ kotlin { sourceSets { commonMain.dependencies { - // ksqlite 0.1.3 опубликован в Maven Central — обычный + // ksqlite живёт в libs.versions.toml (см. catalog) — обычный // `mavenCentral()` в settings.gradle.kts его подтянет. - implementation("pw.binom.db:ksqlite:0.1.3") + implementation(libs.ksqlite) implementation(libs.kotlinx.serialization.json) api(project(":journal-api")) diff --git a/memory-md-vector/build.gradle.kts b/memory-md-vector/build.gradle.kts index 1742c6f..cb58178 100644 --- a/memory-md-vector/build.gradle.kts +++ b/memory-md-vector/build.gradle.kts @@ -30,9 +30,9 @@ kotlin { sourceSets { commonMain.dependencies { - // ksqlite 0.1.3 опубликован в Maven Central — обычный + // ksqlite живёт в libs.versions.toml (см. catalog) — обычный // `mavenCentral()` в settings.gradle.kts его подтянет. - implementation("pw.binom.db:ksqlite:0.1.3") + implementation(libs.ksqlite) implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.io.core) diff --git a/reflection-ksqlite/build.gradle.kts b/reflection-ksqlite/build.gradle.kts index 8422659..3a072d2 100644 --- a/reflection-ksqlite/build.gradle.kts +++ b/reflection-ksqlite/build.gradle.kts @@ -9,7 +9,7 @@ plugins { // других ksqlite-модулях; этот модуль не претендует на полную схему агента. // // Цели сборки — jvm() + linuxX64() + mingwX64(); Apple targets auto-disabled -// на Linux (ksqlite 0.1.3 не публикует native артефакты для Apple). +// на Linux (ksqlite не публикует native артефакты для Apple). kotlin { jvmToolchain(21) @@ -20,9 +20,9 @@ kotlin { sourceSets { commonMain.dependencies { - // ksqlite 0.1.3 опубликован в Maven Central — обычный + // ksqlite живёт в libs.versions.toml (см. catalog) — обычный // `mavenCentral()` в settings.gradle.kts его подтянет. - implementation("pw.binom.db:ksqlite:0.1.3") + implementation(libs.ksqlite) api(project(":reflection-api")) // :reflection-api ссылается на :journal-api типы в сигнатурах diff --git a/standalone/build.gradle.kts b/standalone/build.gradle.kts index 2e2bdc4..786ac9e 100644 --- a/standalone/build.gradle.kts +++ b/standalone/build.gradle.kts @@ -70,7 +70,7 @@ kotlin { // ksqlite объявлен как `implementation` (не `api`) в каждом // ksqlite-модуле, поэтому SqliteStores здесь использует // SQLiteConnection напрямую — фиксируем зависимость явно. - implementation("pw.binom.db:ksqlite:0.1.3") + implementation(libs.ksqlite) // Bounded-tail live event stream + per-event TTL. implementation(project(":outbox-inmemory")) diff --git a/standalone/src/commonMain/kotlin/pw/binom/agentik/standalone/Main.kt b/standalone/src/commonMain/kotlin/pw/binom/agentik/standalone/Main.kt index 7a67693..b5b5dbc 100644 --- a/standalone/src/commonMain/kotlin/pw/binom/agentik/standalone/Main.kt +++ b/standalone/src/commonMain/kotlin/pw/binom/agentik/standalone/Main.kt @@ -33,6 +33,7 @@ import pw.binom.agentik.mcp.bridge.McpRegistry import pw.binom.agentik.standalone.persistence.SqliteStores import java.io.File import pw.binom.agentik.skill.mining.SkillMiner + /** * standalone-контейнер agentik: * - :server (proto): встраиваемый Ktor (CIO), порт AGENTIK_PORT (default 8080) @@ -67,10 +68,12 @@ fun main(args: Array) { runPullModel(args.drop(1)) return } + "--help", "-h", "help" -> { printHelp() return } + else -> { System.err.println("Unknown subcommand: ${args[0]}") printHelp() @@ -82,11 +85,13 @@ fun main(args: Array) { } private fun printHelp() { - println(""" + println( + """ agentik standalone — usage: java -jar agentik.jar Start HTTP server (A2A + :proto) java -jar agentik.jar pull-model Download the LiteRT-LM model from static.binom.pw - """.trimIndent()) + """.trimIndent() + ) } /** @@ -245,6 +250,7 @@ private fun runServer() { println(" memory: disabled") null } + MemoryBackend.MD -> { if (rawMemory.equals("off", ignoreCase = true)) { println(" memory: disabled (memoryDir=off)") @@ -256,6 +262,7 @@ private fun runServer() { } } } + MemoryBackend.VECTOR -> { val embedding: pw.binom.agentik.memory.TextEmbeddingExecutor = when (config.embedding.backend) { AppConfig.EmbeddingBackend.HTTP -> { @@ -274,6 +281,7 @@ private fun runServer() { dimension = config.embedding.dimension, ).asExecutor() } + AppConfig.EmbeddingBackend.SIGLIP -> { val modelPath = checkNotNull(config.embedding.modelPath) { "AGENTIK_EMBEDDING_BACKEND=siglip требует AGENTIK_EMBEDDING_MODEL_PATH" @@ -291,12 +299,14 @@ private fun runServer() { val backendLabel = when (config.embedding.backend) { AppConfig.EmbeddingBackend.HTTP -> "model=${config.embedding.model}, dim=${config.embedding.dimension}" + AppConfig.EmbeddingBackend.SIGLIP -> "model=siglip2-base (on-device), dim=${embedding.dimension}" } println(" memory: db=${config.agent.dbPath} (vector-backend, $backendLabel)") } } + MemoryBackend.HYBRID -> { // Гибрид: .md файлы (single source of truth) + ksqlite vector-кэш. // Нужны embeddings (HTTP/SIGLIP) + путь к vector-БД (по умолчанию рядом с agentik.db). @@ -314,6 +324,7 @@ private fun runServer() { dimension = config.embedding.dimension, ).asExecutor() } + AppConfig.EmbeddingBackend.SIGLIP -> { val modelPath = checkNotNull(config.embedding.modelPath) { "AGENTIK_EMBEDDING_BACKEND=siglip требует AGENTIK_EMBEDDING_MODEL_PATH" diff --git a/vector-index-ksqlite/build.gradle.kts b/vector-index-ksqlite/build.gradle.kts index 7a2f0a7..83be8bc 100644 --- a/vector-index-ksqlite/build.gradle.kts +++ b/vector-index-ksqlite/build.gradle.kts @@ -7,9 +7,10 @@ plugins { // обычная SQLite БД. Подходит для small-to-medium масштабов (≤10K записей на // embedding ~512d); для больших датасетов — sqlite-vec или JVector. // -// Цели сборки — только те, для которых ksqlite 0.1.3 опубликован в Maven Central: -// jvm + linuxX64/Arm64 + mingwX64. Apple/iOS/tvOS/watchOS — НЕ публикуются; -// для них использовать JVM-only `:vector-index-jvector`. +// Цели сборки — только те, для которых ksqlite опубликован в Maven Central +// (см. libs.versions.toml): jvm + linuxX64/Arm64 + mingwX64. +// Apple/iOS/tvOS/watchOS — НЕ публикуются; для них использовать +// JVM-only `:vector-index-jvector`. kotlin { jvmToolchain(21) @@ -20,8 +21,8 @@ kotlin { sourceSets { commonMain.dependencies { - // ksqlite 0.1.3 опубликован в Maven Central. - implementation("pw.binom.db:ksqlite:0.1.3") + // ksqlite живёт в libs.versions.toml (см. catalog). + implementation(libs.ksqlite) api(project(":vector-index-api")) } commonTest.dependencies {