Изменения вводят live-канал OnlineOutbox и фоновую синхронизацию диалогов.
This commit is contained in:
+24
-2
@@ -302,6 +302,30 @@
|
||||
- **R43.** Полезный признак, что что-то не вынесено: **в экране накопилась логика
|
||||
длиннее пары десятков строк.** Значит, это место жить в экране не должно.
|
||||
|
||||
### 8.4. Кэш наполняется фоново, а не по факту открытия
|
||||
|
||||
**Задача:** превью и история должны быть у **всех** диалогов, а не только у тех,
|
||||
что открывали в этом окне. Раньше «…» в списке стояло именно потому, что запись
|
||||
появлялась лишь при открытии диалога.
|
||||
|
||||
**Схема (на каждого агента):**
|
||||
1. Одна подписка на **все** события-сообщения
|
||||
(`outbox.conversationEvents(after=null, conversationId=null)`).
|
||||
2. На `End`/`Interrupted` любого диалога — догон журнала по watermark'у и
|
||||
пересчёт превью; данные кладутся в локальный кэш.
|
||||
3. На старте — догон диалогов, чей `updatedAt` с сервера **новее** нашего
|
||||
watermark'а, включая **никогда не открытые**.
|
||||
|
||||
- **R44.** **Источник истины — журнал, не SSE.** Outbox — короткий bounded tail:
|
||||
события за время, пока клиент был выключен, из него выпадают. Поэтому догон
|
||||
идёт по журналу (`updatedAt` / `synced_at`), а SSE лишь триггерит его.
|
||||
- **R45.** **Открытый диалог фоновый ingest не трогает.** Пока диалог открыт,
|
||||
его сообщения ведёт сессия; engine пропускает этот диалог, чтобы не дублировать
|
||||
работу. Общий мьютекс на диалог сериализует запись на транзишене
|
||||
«открыли / закрыли».
|
||||
- **R46.** **API менять не нужно** (снимает открытый вопрос из §9): превью
|
||||
считается локально из журнала, число непрочитанных — `journal.count(after=lastSeen)`.
|
||||
|
||||
## 9. Решения, которые ещё не приняты
|
||||
|
||||
- Запись: по нажатию или на удержание.
|
||||
@@ -315,8 +339,6 @@
|
||||
- **Группы — только на устройстве или на сервере?** Сервер про них не знает
|
||||
(`STORAGE.md`, §7). Если только у нас — раскладка не поедет между десктопом
|
||||
и телефоном.
|
||||
- **Меняем ли API: превью последнего сообщения и число непрочитанных.**
|
||||
Взять неоткуда, в макете они нарисованы (`STORAGE.md`, §6).
|
||||
- **Бейдж — число или точка.** Точка сервер не трогает вообще (`STORAGE.md`, §6.2).
|
||||
- **Где каталог клиента** — `~/.agentik/` или системный («Документы»).
|
||||
На Android понятие «домашний каталог» своё.
|
||||
|
||||
Reference in New Issue
Block a user