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
+28 -4
View File
@@ -267,8 +267,25 @@
- **R40.** **Живой поток тоже надо просить «с этого момента».** У подписки на события
есть тот же параметр «после»; без него после переподключения пропустим события.
- **R41.** **Решение:** кэш делаем. Схема — из R35. Где хранится (файл или лёгкая
база) — **не решено**, см. раздел 9.
- **R41.** **Решение:** кэш делаем. Схема — из R35.
- **R41.1.** **Хранилище — абстракция.** Клиент просит «дай сообщения диалога»,
«сохрани настройки» — и не знает, где это лежит. Реализацию можно заменить
(понадобится на Android) — экраны не тронутся. Подробно: `STORAGE.md`.
- **R41.2.** **Ни одного упоминания базы вне реализации.** Если в экране или
в логике клиента встретилось `sqlite` / `SQL` / `query` — абстракция
прохудилась. Тот же признак, что и с цветами числом в коде.
- **R41.3.** **Реализация — SQLite**, тот же подход, что в `agentik`:
**SQLDelight 2.3.2** (умеет и JVM, и Android). **Не файлы.**
- **R41.4.** **Три отдельные абстракции, не одна на всё:** сообщения диалога;
настройки; снимок списка диалогов. Разная жизнь — разными интерфейсами.
- **R41.5.** **Настройки — JSON-файл, не в базе.** Их правит человек руками:
сломался адрес агента — открыл, увидел, исправил. С базой для этого нужен
инструмент. Там же тема и выбранная группа.
- **R41.6.** **Секреты в JSON не пишем.** Пароль/ключ — в системное хранилище
паролей, в настройках только ссылка.
- **R41.7.** **Картинки — файлами, не в базе.** В сообщении картинка едет
массивом байт; держать её в базе нельзя — база распухнет и станет тяжёлой
для копирования. В базе — ссылка на файл.
### 8.3. Что не выносим
@@ -283,11 +300,18 @@
- Нужны ли вложения (картинки) в этом клиенте.
- Как именно различать агентов (см. R21–R22): цвета или картинки достаточно?
- Нужен ли картинке размер/форма — показывать кружком без изменений или обрезать.
- Где хранится список агентов — в файле на диске или спрашивать сервер.
- Где хранится список агентов — в контроле настроек (JSON) или спрашивать сервер.
- Как выглядит показ хода работы агента в свёрнутом виде.
- **Где хранится кэш сообщений** — обычный файл на диске или лёгкая база (R41).
- Сколько держать в кэше и когда чистить (старые диалоги).
- Что делать с куском прерванного ответа в кэше (R39): хранить или выбрасывать.
- **Группы — только на устройстве или на сервере?** Сервер про них не знает
(`STORAGE.md`, §7). Если только у нас — раскладка не поедет между десктопом
и телефоном.
- **Меняем ли API: превью последнего сообщения и число непрочитанных.**
Взять неоткуда, в макете они нарисованы (`STORAGE.md`, §6).
- **Бейдж — число или точка.** Точка сервер не трогает вообще (`STORAGE.md`, §6.2).
- **Где каталог клиента** — `~/.agentik/` или системный («Документы»).
На Android понятие «домашний каталог» своё.
## 10. Как проверяем