docs: per-module README + root navigation hub + CI/release workflows
ci / JVM build + tests (push) Failing after 1m57s
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 как бинарные ассеты.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# :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` на запись.
|
||||
|
||||
## Подключение
|
||||
|
||||
```kotlin
|
||||
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`
|
||||
|
||||
## Сборка
|
||||
|
||||
```bash
|
||||
./gradlew :storage-sqlite:build
|
||||
```
|
||||
|
||||
JVM-only. Тянет `:storage-core` + `app.cash.sqldelight:runtime` +
|
||||
`app.cash.sqldelight:coroutines-extensions` + `app.cash.sqldelight:sqlite-driver`.
|
||||
Reference in New Issue
Block a user