Files
microdao-daarion/docs/tasks/TASK_PHASE_CITY_FINISHER.md
Apple 3de3c8cb36 feat: Add presence heartbeat for Matrix online status
- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
2025-11-27 00:19:40 -08:00

5.6 KiB
Raw Blame History

TASK_PHASE_CITY_FINISHER.md

DAARION CITY — FINISHER (Phase 3 Completion)

Цей таск завершує Phase 3 (City MVP).

Ти маєш додати 3 ключові компоненти:

  1. Public Rooms (API + WS + UI)
  2. Full Presence System (WS heartbeats + user statuses)
  3. Second Me (MVP stub: простий агент із короткою пам'яттю)

0. Цілі

Після виконання цього таску DAARION City має:

✔ Глобальні публічні кімнати міста
✔ Живий статус онлайн-користувачів
✔ Прості персональні агенти Second Me
✔ Готовність до подальшої інтеграції Matrix (без самого Matrix)


1. PUBLIC ROOMS (Міські кімнати)

1.1 Backend API

Створити endpoints в services/city-service:

GET /city/rooms

Повертає список всіх кімнат:

[
  {
    "id": "city_general",
    "name": "General",
    "members_online": 42,
    "last_event": "...",
    "description": "Головна кімната міста"
  }
]

POST /city/rooms

Створення нової публічної кімнати:

{
  "name": "Science",
  "description": "Наукова спільнота"
}

GET /city/rooms/{id}

Повертає:

  • метадані кімнати
  • останні 50 повідомлень
  • онлайн-учасників

POST /city/rooms/{id}/messages

Додати повідомлення в кімнату.


1.2 WebSocket

WS канал:

/ws/city/rooms/{roomId}

Події:

city.room.message
city.room.join
city.room.leave
city.room.presence

1.3 Frontend UI

Додати папку:

src/features/city/rooms/

Компоненти:

  • CityRoomsPage.tsx
  • CityRoomView.tsx
  • CityRoomMessageList.tsx
  • CityRoomInput.tsx

Функції:

  • Лістинг кімнат
  • Стан онлайн-учасників
  • Чат у реальному часі
  • Тайпінг індикатор (optional)
  • Автоскрол останніх повідомлень

2. PRESENCE SYSTEM (Повноцінна система присутності)

2.1 Backend

WS канал:

/ws/city/presence

Кожні 20 секунд фронтенд надсилає heartbeat:

{
  "event": "presence.heartbeat",
  "user_id": "u_123"
}

Backend:

  • оновлює Redis key: presence:u_123 = online
  • TTL = 40 секунд
  • публікує у WS:
{
  "event": "presence.update",
  "user_id": "...",
  "status": "online|offline"
}

2.2 Frontend

Додати:

src/lib/presence.ts

Функції:

  • підключення до WS /ws/city/presence
  • кожні 20 секунд надсилати heartbeat
  • локальна мапа userId → status
  • глобальний presence store (Zustand)

2.3 Presence UI

Використати:

src/features/city/presence/PresenceBar.tsx
  • список активних юзерів
  • аватари
  • статуси (online/offline)
  • індикатор "active now"

3. SECOND ME (MVP)

Мінімальний персональний агент:

  • коротка пам'ять (останні 5 interaction logs)
  • LLM-виклик через agents core (/agents/{id}/invoke)
  • UI з 1 полем вводу
  • контекст: userId + останні 5 фраз

3.1 Backend API

Створити сервіс:

services/secondme-service/

Endpoints:

POST /secondme/invoke

{
  "prompt": "Порадь ідею для міського району",
  "user_id": "u_123"
}

Backend:

  1. знаходить SecondMe agent user'а
  2. дає короткий контекст
  3. викликає /agents/{id}/invoke
  4. зберігає відповідь
  5. повертає JSON з відповіддю

GET /secondme/history?user_id=...

Повертає 5 останніх interaction entries.


3.2 Frontend UI

Додати:

src/features/secondme/SecondMePage.tsx
src/features/secondme/SecondMeChat.tsx

Функції:

  • поле вводу prompt
  • вивід LLM-відповіді
  • горизонтальна стрічка історії
  • кнопка "clear history"

4. РОЗШИРЕННЯ CITY HOME

На головній сторінці міста показати:

  • кількість online мешканців (із presence)
  • останні 3 події Feed
  • 3 популярні кімнати
  • швидкий доступ до Second Me (CTA)

5. Acceptance Criteria

Public Rooms

✔ Створення, лістинг, перегляд
✔ Чат працює через WS
✔ Online members оновлюються в реальному часі

Presence System

✔ Heartbeats працюють
✔ Redis TTL працює
✔ PresenceBar показує онлайн-юзерів
✔ Оновлення статусів через WS

Second Me MVP

✔ prompt → відповідь
✔ історія зберігається
✔ UI працює на окремій сторінці

City Home

✔ всі нові елементи працюють
✔ загальний досвід живого "міста"


6. Команда для Cursor

"Завершити Phase 3 згідно TASK_PHASE_CITY_FINISHER.md.
Додати Public Rooms, Presence System, Second Me.
Працювати в існуючих сервісах і фронтенді."