STORAGE.md переписан: хранилище — абстракция, реализация SQLite, настройки JSON; не файлы

This commit is contained in:
Porfiry
2026-09-19 16:44:54 +03:00
parent bd0f619585
commit 093115c415
4 changed files with 270 additions and 203 deletions
+21 -3
View File
@@ -84,6 +84,12 @@ fun events(after: Instant): Flow<Event>
**Самого кэша.** Хранилища на стороне клиента библиотека не даёт и не предлагает.
Это пишем мы. Библиотека умеет только «спроси, что новее» и «подпишись с момента».
Заодно **нет и абстракции хранилища** — ни интерфейса «дай сообщения диалога»,
ни готовой реализации под клиента. И то и другое наше, см. `STORAGE.md`.
Полезное: в самом `agentik` хранилище построено на **SQLDelight 2.3.2** — это
SQLite, умеющий и JVM, и Android. Тот же подход берём и мы, а не выдумываем.
---
## 3. Где схема может порваться
@@ -127,9 +133,20 @@ fun events(after: Instant): Flow<Event>
---
## 4. Что ещё нужно решить (не решено)
## 4. Где хранить — РЕШЕНО
**Хранилище — абстракция, реализация — SQLite.** Подробно: `STORAGE.md`.
Клиент просит «дай сообщения диалога» и не знает, где они лежат. Реализацию
можно будет заменить (это понадобится на Android) — экраны не тронутся.
Ни одного упоминания SQLite вне реализации: если в экране встретилось
`sqlite` / `SQL` / `query` — абстракция прохудилась.
База — один файл в каталоге клиента. Настройки — **отдельно, JSON**:
их правит человек руками, в базу для этого лазить не должно быть нужно.
Осталось решить:
- **Где хранить кэш** — обычный файл на диске или лёгкая база.
- **Сколько держать** и когда чистить старые диалоги.
- **Что делать с прерванным ответом** в кэше (см. 3.2).
- Связывать ли кэш с диалогом по `id` диалога — он стабилен, так что связка простая.
@@ -169,7 +186,8 @@ fun events(after: Instant): Flow<Event>
## 6. Порядок действий (предложение)
1. Определиться, где хранится кэш (раздел 4).
1. Описать абстракцию хранилища — интерфейсы (`STORAGE.md`, §1). Где лежит —
решено: SQLite, абстракция сверху.
2. Определиться с прерванным ответом (3.2) — иначе схема даст сбой на первом же «Стоп».
3. При открытии диалога: кэш → спросить «новее» → догрузить → нарисовать.
4. Подписка на живой поток — тоже «с момента».