feat(storage-ksqlite): migrate all 5 stores to ksqlite backend
ci / JVM build + tests (push) Failing after 1m21s
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. Подключение = следующий шаг.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user