0fdc12695e
ci / JVM build + tests (push) Failing after 1m57s
- README.md в каждом подмодуле: для библиотек — описание проблемы, подключение через maven-central/caffeine, версии в gradle/libs.versions.toml. Для запускаемых модулей — команды запуска + переменные среды с дефолтами. - Корневой README.md переписан как навигационный хаб: что это, где клиенты, где серверы, как собрать, как опубликовать. - build.gradle.kts: per-module POM-description через единую карту в rootProject.extra (порядок важен — нужно ДО apply плагина KMP, поэтому beforeEvaluate в subprojects). - .gitea/workflows/ci.yml (новый): build + jvmTest + shadowJar на PR/push main. - .gitea/workflows/release.yml (обновлён): публикует библиотеки в caffeine Nexus + собирает 3 fatjar'а и крепит их к release как бинарные ассеты.
2.6 KiB
2.6 KiB
:storage-sqlite — pw.binom.agentik.storage.sqlite
SQLDelight-реализация всех 4 сторов из :storage-core поверх SQLite.
JVM-only (SQLDelight пока не публикует KMP-драйверы за пределами JVM/Android).
Какую проблему решает
Прод-запуск :standalone должен переживать рестарт. In-memory не подходит —
нужна реальная БД. SQLite выбран потому что:
- Один файл (
AGENTIK_DB_PATH) — легко бэкапить, переносить, инспектить. - WAL — запись не блокирует чтение; диалоги не фризят при compaction.
- Без отдельного сервиса — в отличие от PostgreSQL/MySQL не нужно ничего поднимать рядом.
Схема
SQLDelight .sq-файлы в src/main/sqldelight/:
Conversation.sq—conversations(id, title, created_at, updated_at, is_temporal)Message.sq—messages(id, conversation_id, role, content, working_memory_index, date)WorkingMemory.sq—working_memory(id, conversation_id, entry_kind, payload_json, index, instant)Reflection.sq—reflection(id, conversation_id, score, weak_points_json, created_at)
SqliteStores (фасад) собирает все 4 стора в StorageBundle поверх общего
SQLite-driver. Каждый store — отдельный класс, с тред-безопасностью через
Mutex на запись.
Подключение
plugins {
kotlin("jvm")
alias(libs.plugins.sqldelight)
}
dependencies {
implementation("pw.binom.agentik:storage-sqlite:$version")
// Транзитивно: :storage-core + sqldelight-runtime/coroutines + sqlite-driver
}
// Использование
val driver = JdbcSqliteDriver("jdbc:sqlite:agentik.db")
SqliteStores.Schema.migrate(driver) // CREATE TABLE IF NOT EXISTS + ALTER
val bundle = SqliteStores.fromDriver(driver, clock = Clock.System)
:standalone инициализирует бэкенд автоматически по AGENTIK_DB_PATH.
Где смотреть версии
versionизgradle.properties(version=0.1.0)- релизы:
https://git.binom.pw/subochev/agentik/releases
Сборка
./gradlew :storage-sqlite:build
JVM-only. Тянет :storage-core + app.cash.sqldelight:runtime +
app.cash.sqldelight:coroutines-extensions + app.cash.sqldelight:sqlite-driver.