Расширяет :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. Подключение = следующий шаг.