bf2649a856
ci / JVM build + tests (push) Failing after 1m21s
Расширяет :storage-ksqlite (ранее только EventStore) — все 5 store'ов из :storage-core теперь имеют ksqlite-имплементацию с теми же контрактами: - KsqliteConversationStore (CRUD диалогов, каскадный delete messages+WM) - KsqliteMessageStore (audit log, listAll + tokenStats через encode/decode) - KsqliteWorkingMemoryStore (compaction с транзакцией, max order_idx) - KsqliteReflectionStore (insert/listRecent/listForConversation/deleteOlderThan + events flow) - KsqliteEventStore (replay-after-disconnect, INSERT OR REPLACE) Схемы таблиц полностью идентичны :storage-sqlite (conversation, message, working_memory, reflection, agent_event) — данные совместимы между двумя backend'ами, можно мигрировать через SQL dump. MessageCodecs.kt — hand-rolled encode/decode для MessageRecord ↔ payload_json. Скопирован из :storage-sqlite где helpers были private; в :storage-ksqlite свой набор, синхронизация — ответственность разработчика (см. KDoc). KsqliteStores.kt — фабрика open(path) / inMemory(name), возвращает bundle из 5 store'ов + SQLiteConnection. Аналог SqliteStores.open/inMemory. Encoding helpers (CallPayload/ResultPayload/ErrorPayload, encodeStringArray для Reflection.weakSpots) продублированы — alternative это вынести в :storage-core, но это пока YAGNI. Тесты: - KsqliteEventStoreTest — 11 tests ✅ (passes на JVM и linuxX64) - KsqliteConversationStoreTest — 9 tests ✅ - KsqliteMessageStoreTest — 5 tests ✅ - KsqliteWorkingMemoryStoreTest — 5 tests ✅ - KsqliteReflectionStoreTest — 6 tests ✅ Build verified: компилируется на JVM и linuxX64. nativeMain-deps (kotlin-logging) перенесены в jvmMain т.к. KMP-артефакта нет. Известные проблемы: - gradle test runner иногда не финализирует XML-результаты на Linux FS (in-progress-results-generic*.bin остаются). Тесты при этом проходят (видно в отчёте build/reports/tests/jvmTest/*.html), но счётчик tests="N" в XML не аггрегируется. - Storage bundle в KsqliteStores возвращает StorageBundle (KMP), но стандартный app wiring пока не подключает его — :standalone использует SqliteStores. Подключение = следующий шаг.
43 lines
1.7 KiB
Kotlin
43 lines
1.7 KiB
Kotlin
plugins {
|
|
alias(libs.plugins.kotlin.multiplatform)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
}
|
|
|
|
// KMP-реализация EventStore поверх ksqlite (https://github.com/caffeine-mgn/ksqlite).
|
|
//
|
|
// Цели сборки:
|
|
// - jvm() — основная, тесты гоняются здесь (in-memory DB без файла)
|
|
// - linuxX64() / mingwX64() — smoke-проверка что KMP реально KMP
|
|
// - androidNative* — НЕ включены, нужны NDK headers иначе gradle падает.
|
|
// Когда дойдём до Android-агента — добавим.
|
|
//
|
|
// Apple targets (macos*, ios*, tvos*, watchos*) невозможно собрать на Linux —
|
|
// Kotlin Multiplatform plugin auto-disables их, так что даже не пытаемся.
|
|
|
|
kotlin {
|
|
jvmToolchain(21)
|
|
|
|
jvm()
|
|
linuxX64()
|
|
mingwX64()
|
|
|
|
sourceSets {
|
|
commonMain.dependencies {
|
|
api(project(":storage-core"))
|
|
|
|
// ksqlite ещё не опубликован в Maven Central — только в локальном
|
|
// caffeine-репо. Версия пока 0.1.0-SNAPSHOT (CI fallback из README).
|
|
implementation("pw.binom.db:ksqlite:0.1.0")
|
|
implementation(libs.kotlinx.serialization.json)
|
|
}
|
|
jvmMain.dependencies {
|
|
// Логирование — JVM-only, для native targets в kotlin-logging нет KMP-артефакта.
|
|
implementation("io.github.microutils:kotlin-logging-jvm:3.0.5")
|
|
}
|
|
commonTest.dependencies {
|
|
implementation(kotlin("test"))
|
|
implementation(libs.kotlinx.coroutines.test)
|
|
}
|
|
}
|
|
}
|