Matrix Gateway:
- Add POST /internal/matrix/room/join endpoint
- Add POST /internal/matrix/message/send endpoint
- Add GET /internal/matrix/rooms/{room_id}/messages endpoint
City Service:
- Add POST /rooms/sync/matrix endpoint for bulk sync
- Update get_agent_chat_room to auto-create Matrix rooms
- Update get_node_chat_room to auto-create Matrix rooms
- Update get_microdao_chat_room to auto-create Matrix rooms
- Add join_user_to_room, send_message_to_room, get_room_messages to matrix_client
- Add ensure_room_has_matrix helper function
This enables:
- Automatic Matrix room creation for all entity types
- chat_available = true when Matrix room exists
- Real-time messaging via Matrix
8.3 KiB
TASK_PHASE_MATRIX_GATEWAY_INTEGRATION_v1
Version: 1.0 Status: Ready Priority: Critical (Rooms & Chat Layer)
1. МЕТА
Повністю інтегрувати Matrix у DAARION.city так, щоб:
- усі кімнати (City / MicroDAO / Node / Agent) мали
matrix_room_id; - gateway умів створювати кімнати та додавати агентів;
- чат-виджети на /agents /nodes /microdao працювали з реальними повідомленнями;
- з'явилися online-статуси та події для Agent Presence.
Цей таск спирається на вже виконаний:
TASK_PHASE_ROOMS_LAYER_RESTORE_AND_MATRIX_INTEGRATION.md(rooms seeded у БД, citizens працюють, але Matrix ще не прив'язаний).
2. ОБСЯГ РОБОТ (SCOPE)
- Matrix Room Creation API у
matrix-gateway - Room ↔ Matrix синхронізація у
city-service - Agent / Node / MicroDAO join-логіка через gateway
- Message flow: frontend → city-service → gateway → Matrix → back
- Статуси чату:
chat_available, online/offline - Мінімальні тести + smoke-перевірки
3. ВИМОГИ ТА ІНВАРІАНТИ
3.1. Для кожної кімнати в rooms:
rooms.idіснуєrooms.matrix_room_idНЕ NULL- запис у
matrix_roomsз посиланням на Matrix room
3.2. Для кожного публічного агента:
- є хоча б одна кімната, де агент учасник (через
room_agentsабо аналог) - чат-виджет показує
chat_available = true(якщо Matrix OK)
3.3. Для кожної ноди:
- є support room
node-{slug}-support - у ній учасники: guardian + steward + технічні агенти
4. МОДУЛЬ 1 — MATRIX-GATEWAY
4.1. Нові endpoints (internal)
У сервісі matrix-gateway (Python/FastAPI або Node, залежно від репо):
-
POST /internal/matrix/room/createВхід:
{ "room_alias": "string", // наприклад "city-general" "room_name": "string", // "General" "visibility": "public|private", "topic": "string|null" }Вихід:
{ "room_id": "!abcdefg:matrix.daarion.city", "room_alias": "#city-general:matrix.daarion.city" }Дії:
- викликає Matrix API
/_matrix/client/v3/createRoom - задає canonical alias, name, topic
- повертає
room_idдля збереження в БД
- викликає Matrix API
-
POST /internal/matrix/room/joinВхід:
{ "room_id": "!room:matrix.daarion.city", "user_id": "@agent_daarwizz:matrix.daarion.city" }Дії:
- викликає Matrix API
joinдляuser_id - обробляє помилки (already joined / banned / unknown)
- викликає Matrix API
-
POST /internal/matrix/message/sendВхід:
{ "room_id": "!room:matrix.daarion.city", "sender": "@agent_x:matrix.daarion.city", "body": "string" }Дії:
- відправляє текстове повідомлення від імені бота/агента
- повертає event_id
4.2. Конфігурація
-
додати ENV:
MATRIX_HOMESERVER_URLMATRIX_ACCESS_TOKEN(service/bot user)MATRIX_DEFAULT_SENDER(наприклад,@daarion-bot:matrix.daarion.city)
-
healthcheck:
GET /health→ перевірка/versionsна Matrix HS
5. МОДУЛЬ 2 — CITY-SERVICE (ROOM SYNC)
У services/city-service додати:
5.1. Repository-логіку
- новий модуль, наприклад
repo_rooms_matrix.py:get_rooms_without_matrix_id()update_room_matrix_id(room_id, matrix_room_id)get_agent_matrix_user(agent_id)get_node_guardian_and_steward(node_id)
5.2. Сервіс-логіку синхронізації
-
POST /api/v1/rooms/sync/matrixЗадача:
- знайти всі кімнати, де
matrix_room_id IS NULL - викликати
matrix-gateway /room/create - зберегти
matrix_room_id - (для city/microdao rooms) додати публічних агентів як учасників:
- City: DARIO, DARIA, Atlas, Greeter
- MicroDAO: orchestrator + core team
- Node: guardian + steward
- Agent: сам агент
- знайти всі кімнати, де
-
Авто-виклик:
- опційно: при створенні нової кімнати (event-based)
- але для MVP достатньо ручного endpoint + одноразового запуску
6. МОДУЛЬ 3 — AGENT CHAT FLOW
6.1. Backend API
У city-service:
-
GET /api/v1/agents/{agent_id}/chat-roomДоповнити:
- якщо
matrix_room_id IS NULL→ створити кімнату через gateway - повернути:
{ "room_id": "<uuid>", "matrix_room_id": "!room:matrix...", "agent_id": "<uuid>", "chat_available": true|false }
- якщо
-
опційно:
POST /api/v1/agents/{agent_id}/message(для проксінгу повідомлень з frontend до gateway)
6.2. Frontend (apps/web)
Компонент AgentChatWidget:
- якщо
chat_available === false→ показувати "тимчасово недоступний" - якщо
chat_available === true:- використовувати Matrix JS SDK АБО власний lightweight client:
GET /api/v1/agents/{id}/chat-roomWSабоlong-pollна gatewayPOST /internal/matrix/message/sendчерез city-service
- використовувати Matrix JS SDK АБО власний lightweight client:
Для MVP можна обмежитись:
- односторонній відправлення повідомлень (log history локально)
- завантаження останніх N повідомлень із Matrix через gateway
7. МОДУЛЬ 4 — NODE / MICRODAO CHAT FLOW
Аналогічно до агента:
GET /api/v1/nodes/{node_id}/chat-roomGET /api/v1/microdaos/{slug}/chat-room
Логіка:
- якщо нема Matrix room → створити
- додати відповідних агентів:
- Node: guardian + steward
- MicroDAO: orchestrator + core team
Frontend вже має AgentChatWidget, достатньо змінити пропси:
entityType: "agent" | "node" | "microdao"entityId/slug
8. MESSAGE FLOW & NATS (опціонально)
Якщо є час у межах таска:
matrix-gateway→ NATS subjectintegration.matrix.messagecity-serviceпідписаний і логуєevent_outbox- Agents можуть реагувати на події.
Якщо ні — відкласти у окремий таск.
9. TESTS / SMOKE CHECKLIST
Після завершення:
POST /api/v1/rooms/sync/matrix→ всіrooms.matrix_room_idзаповнені.GET /city:- список кімнат завантажується у режимі "Мапа" і "Список".
/agents/daarwizz:- чат-виджет відкривається,
- можна надіслати повідомлення,
- у Matrix-клієнті видно це повідомлення.
/nodes/node-1-hetzner-gex44:- чат з guardian/steward доступний.
/microdao/daarion:- чат MicroDAO працює.
10. PROMPT ДЛЯ CURSOR
Виконай TASK_PHASE_MATRIX_GATEWAY_INTEGRATION_v1.md.
Фокус:
1) matrix-gateway (internal API: room/create, room/join, message/send)
2) city-service (room sync, agent/node/microdao chat-room API)
3) apps/web (AgentChatWidget інтеграція з Matrix)
4) мінімальний smoke-тест, як описано в розділі 9.
Використовуй існуючі foundation-документи у docs/foundation/ як джерело істини.
Після кожного завершеного модуля роби окремий git commit.
Не змінюй інші підсистеми, які не стосуються Rooms/Matrix/Chat.
Target Date: Immediate Priority: Critical Dependencies: Rooms Layer seeded, Matrix Synapse running