Files
microdao-daarion/docs/tasks/TASK_PHASE_MATRIX_FINALIZE_v2.md
Apple ec57f7a596 feat: Add Chat API endpoints for Matrix integration
City Service:
- GET /api/v1/chat/rooms/{room_id}/messages - get message history
- POST /api/v1/chat/rooms/{room_id}/messages - send message
- Add get_room_by_id to repo_city

Synapse:
- Increase rate limits for room creation
- Add rc_joins, rc_invites configuration

All 27 rooms now have matrix_room_id
2025-11-30 10:34:27 -08:00

339 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK_PHASE_MATRIX_FINALIZE_v2 — Matrix / Chat / Presence
Version: 2.0
Status: Ready
Priority: Critical (Live Chat & Presence)
---
## 1. Поточний стан (вихідні дані)
Вже виконано у попередніх фазах:
- Matrix Gateway:
-`POST /internal/matrix/room/join`
-`POST /internal/matrix/message/send`
-`GET /internal/matrix/rooms/{id}/messages`
- City Service:
- ✅ Matrix-клієнт (join, send, get messages)
-`ensure_room_has_matrix()`
-`POST /city/rooms/sync/matrix` — bulk sync
- Auto-create Matrix Rooms:
- ✅ agent chat rooms (частково)
- ✅ node support rooms (NODE1, NODE2)
- ✅ microDAO lobby rooms (DAARION)
- Frontend:
- ✅ AgentChatWidget на `/agents/:agentId`, `/nodes/:nodeId`, `/microdao/:slug`
- ✅ Відображає "Увійти щоб почати спілкування" для неавторизованих
Обмеження зараз:
- частина кімнат має `matrix_room_id = NULL` через rate limiting Synapse
- не всі агенти додані в кімнати
- чат-виджет працює лише як оболонка (немає повного send/receive циклу)
- presence (online/offline) не реалізовано
---
## 2. Мета TASK_PHASE_MATRIX_FINALIZE_v2
Завершити інтеграцію Matrix так, щоб:
1. **Усі кімнати** (City, MicroDAO, Node, Agent) мали валідний `matrix_room_id`.
2. **Усі потрібні агенти** були учасниками своїх кімнат.
3. **Message flow** працював end-to-end:
- frontend → city-service → gateway → Matrix → gateway → city-service → frontend.
4. **Chat widget** показував реальні повідомлення (історія + нові).
5. **Presence (online/offline)** відображався для агентів.
6. **chat_available = true** там, де Matrix-кімната та gateway працюють.
---
## 3. Scope (модулі та компоненти)
Цей таск включає:
1. Synapse (Matrix Homeserver) — налаштування rate limits.
2. Matrix Gateway — доопрацювання endpoint'ів та presence.
3. City Service — покращення room sync + чат API.
4. Frontend (Next.js) — повна інтеграція чат-виджета з Matrix.
5. Smoke-тести та короткий звіт.
---
## 4. Модуль 1 — Synapse (Matrix HS) Rate Limits
### 4.1. Завдання
- Відкрити конфігурацію Synapse (homeserver.yaml або еквівалент).
- Підняти або вимкнути rate limiting для:
- room creation (createRoom)
- room join
- message send
- Увімкнути/перевірити:
- `/versions`
- `/presence` (якщо потрібно окремо)
### 4.2. Орієнтовні параметри
(Конкретні значення — на розсуд Cursor, але ціль — щоб sync 2030 кімнат проходив без помилок.)
```yaml
# homeserver.yaml
rc_message:
per_second: 100
burst_count: 500
rc_joins:
local:
per_second: 50
burst_count: 100
remote:
per_second: 10
burst_count: 20
rc_login:
address:
per_second: 10
burst_count: 50
account:
per_second: 10
burst_count: 50
rc_admin_redaction:
per_second: 100
burst_count: 500
```
### 4.3. Acceptance
- Повторний виклик `POST /city/rooms/sync/matrix` не падає по rate limit.
- Всі кімнати з `rooms` отримали `matrix_room_id`.
---
## 5. Модуль 2 — Повна синхронізація кімнат
### 5.1. City Rooms
- Для кожної city-кімнати (`rooms.scope = 'city'`):
- якщо `matrix_room_id IS NULL` → створити через gateway (`room/create` або існуючу логіку).
- оновити `rooms.matrix_room_id`.
- додати системних агентів:
- DARIO, DARIA, DAARWIZZ
- інші public-агенти за потреби.
### 5.2. MicroDAO Rooms
- Для кожного microDAO:
- lobby, governance, news, builders, help (згідно Rooms_Layer_Architecture_v1).
- створити Matrix-кімнати, якщо ще не створені.
- orchestrator-агент має бути учасником lobby + governance.
- core-team агенти — учасники builders/news (якщо такі задані).
### 5.3. Node Support Rooms
- Для кожної ноди:
- кімната `node-{slug}-support`.
- додати:
- Node Guardian
- Node Steward
- (опційно) технічні агенти ноди (Pulse, Atomis, GuardianOS тощо).
### 5.4. Agent Direct Rooms
- Для кожного агента:
- створити або пересвідчитись в існуванні агенто-специфічної кімнати.
- агент повинен бути учасником.
- ця кімната використовується для direct-chat з агентом.
### 5.5. Acceptance
- Усі записи `rooms` мають заповнений `matrix_room_id` для:
- scope in ('city', 'microdao', 'node', 'agent').
- Для кожного public-агента існує принаймні одна кімната, де він учасник.
---
## 6. Модуль 3 — Message Flow (send/receive)
### 6.1. Backend (city-service)
Переконатись/додати:
- API для надсилання повідомлень від імені користувача/агента:
- `POST /api/v1/chat/rooms/{room_id}/messages`
- вхід: `{ "body": "text" }`
- діє:
- перевіряє, які Matrix credentials використовувати (service user або impersonation)
- викликає `matrix-gateway /internal/matrix/message/send`.
- API для отримання історії:
- `GET /api/v1/chat/rooms/{room_id}/messages?limit=50`
- повертає список повідомлень (час, автор, текст).
За потреби використати існуючий `get_room_messages()` у city-service.
### 6.2. Gateway
- Гарантувати:
- правильне формування body для Matrix `send` (m.room.message, msgtype: m.text).
- розбір `GET /internal/matrix/rooms/{id}/messages` для history.
### 6.3. Acceptance
- Через API (curl/Postman) можливо:
- надіслати повідомлення у кімнату.
- прочитати історію.
- Це працює хоча б для:
- agent room (DAARWIZZ),
- node support room (NODE1),
- DAARION microDAO lobby.
---
## 7. Модуль 4 — Presence (online/offline)
### 7.1. Gateway
- Реалізувати простий Presence Poller:
- періодично опитувати Matrix API (presence endpoints або sync).
- зберігати стан `online/away/offline` для Matrix user IDs агентів.
- Надати internal endpoint:
- `GET /internal/matrix/presence/{matrix_user_id}``{ "state": "online" | "offline" | "unavailable" }`.
### 7.2. City-Service
- Додати endpoint:
- `GET /api/v1/agents/{agent_id}/presence`
- мапить agent_id → matrix_user_id → викликає gateway → повертає presence.
- (Опційно) кешувати presence у пам'яті на 1560 секунд.
### 7.3. Frontend
- На сторінках:
- `/agents`
- `/agents/:agentId`
- `/nodes/:nodeId` (для Guardian/Steward)
- `/microdao/:slug` (для orchestrator)
Показати:
- зелена точка — online
- жовта — away/degraded
- сіра — offline/unknown
### 7.4. Acceptance
- Presence-індикатори відображаються в UI.
- Відповідають реальному status (принаймні для test users/agents).
---
## 8. Модуль 5 — Chat Widget FULL Integration
### 8.1. AgentChatWidget (Next.js)
Розширити:
- Додавання станів:
- `loading`
- `no_room`
- `chat_available`
- `auth_required`
- Для `chat_available = true`:
- при відкритті:
- `GET /api/v1/chat/rooms/{room_id}/messages?limit=N` — завантажити історію.
- при відправці:
- `POST /api/v1/chat/rooms/{room_id}/messages` — надіслати.
- відображати список повідомлень (без fancy UI, MVP-стиль).
- Для неавторизованих:
- показати CTA "Увійти, щоб продовжити спілкування".
### 8.2. Інтеграція за контекстами
- Для `/agents/:agentId`:
- кімната агента (direct)
- Для `/nodes/:nodeId`:
- node support room
- Для `/microdao/:slug`:
- microDAO lobby room
### 8.3. Acceptance
- На кожній із трьох сторінок можливий діалог:
- відправити повідомлення,
- бачити історію,
- не отримувати помилки 4xx/5xx (за нормальних умов).
---
## 9. Smoke-тести (обов'язкові)
1. **DAARWIZZ Chat**
- Відкрити `/agents/daarwizz`.
- Відкрити чат.
- Написати повідомлення.
- Переконатися, що воно з'являється в історії.
2. **NODE1 Guardian Chat**
- Відкрити `/nodes/node-1-hetzner-gex44`.
- Відкрити чат.
- Написати повідомлення.
- Переконатися, що воно доходить до Matrix.
3. **DAARION MicroDAO Chat**
- Відкрити `/microdao/daarion`.
- Переконатися, що кімната існує, є історія, можна написати повідомлення.
4. **Presence**
- На `/agents` бачити індикатор присутності (хоча б у базовій формі).
- Змінити стан в Matrix (якщо можливо) та перевірити оновлення.
---
## 10. Вихідні артефакти
Після виконання таска Cursor має створити:
- `docs/debug/matrix_finalize_v2_report_<DATE>.md`
Зміст:
- перелік створених Matrix кімнат;
- список agent rooms, node rooms, microDAO rooms;
- приклади presence-станів;
- приклад message flow (request/response);
- скріншоти або опис перевірених UI-сторінок.
---
## 11. PROMPT ДЛЯ CURSOR
Рекомендований текст:
```
Виконай, будь ласка,
docs/tasks/TASK_PHASE_MATRIX_FINALIZE_v2.md
у повному обсязі.
Зосередься на:
Synapse rate limits,
повній синхронізації Matrix rooms,
message send/receive,
presence,
інтеграції AgentChatWidget з реальними повідомленнями.
Після завершення створи файл
docs/debug/matrix_finalize_v2_report_<DATE>.md
з результатами smoke-тестів та фактами реалізації.
```
---
**Target Date**: Immediate
**Priority**: Critical
**Dependencies**: Matrix Gateway running, Synapse accessible