Dialog Status Check
Плановий новий ендпоінт. Виконується коли оператор відкриває діалог в Electron-клієнті — щоб зрозуміти що з даних для цього (RU, TU) пари вже є у векторній базі, а що треба дотягнути.
Що повертає
Очікувано — JSON виду:
{
"ruId": "...",
"tuId": "...",
"dialogKey": "<sha256...>",
"lastNoteAt": "2026-05-19T08:00:00Z", // або null
"lastMessageAt": "2026-05-19T14:23:00Z", // або null
"profileUpdatedAt": "2026-05-15T10:00:00Z",// або null
"photoUpdatedAt": "2026-05-15T10:00:00Z", // або null
"counts": { "notes": 124, "messages": 80, "profile": 1, "photo": 1 }
}null означає що для цього джерела в БД нічого немає → треба буде запросити з upstream при наступному /generate.
Кроки
- Operator відкриває діалог в Electron. UI шле
POST /stack-ai/tips/<TBD>/statusз{ ruId, tuId }.TODO: визначити фінальний шлях URL - Сервіс будує
dialogKey = sha256('dialog:<ruId>:<tuId>'). - Один запит до Supabase — GROUP BY
sourceзMAX(updated_at)іCOUNT(*):SELECT source, MAX(updated_at) AS last_at, COUNT(*) AS cnt FROM client_memory_chunks WHERE dialog_key = $1 GROUP BY source; - Сервіс мапить рядки у поля відповіді:
note→lastNoteAt,conversation→lastMessageAt,profile→profileUpdatedAt,photo→photoUpdatedAt(TODO: photo як source ще не визначено в [[services/ai/../entities/memory-chunk]]). - Повертає JSON клієнту.
Нюанси
dialog_keyстабільний, тому не залежить відfavoriteIdчи інших змінних.- Якщо діалог ще ніколи не інжестився — усі поля
null, counts0. UI має це показати як “немає даних, треба згенерувати з нуля”. - Запит швидкий (один індексований SELECT) — підходить для опен-діалогу onClick.
TODO: визначити який source описує "photo" — поки в коді profile chunks його не виділяють окремо.
Зв’язки
- Запит дані з supabase (таблиця memory-chunk).
- Виклик результату використовує generation-pipeline для рішення що дотягувати.
- Має бути доданий як новий ендпоінт у tips-memory-controller (або в окремий controller —
TODO: вирішити).
TODO
- Підтвердити фінальну форму payload з боку Electron.
- Визначити окремий source
photoчи це підprofile. - Винести SQL/Supabase запит у memory-service як новий метод
getDialogStatus().