Some checks failed
Build and Deploy Docs / build-and-deploy (push) Has been cancelled
- Created logs/ structure (sessions, operations, incidents) - Added session-start/log/end scripts - Installed Git hooks for auto-logging commits/pushes - Added shell integration for zsh - Created CHANGELOG.md - Documented today's session (2026-01-10)
8.2 KiB
8.2 KiB
TASK: Implement Agent Hub (Team Assistant) using existing Messenger as core
Goal: Створити головний "Agent Hub" інтерфейс (Team Assistant), який:
- показує список microDAO / команд / агентів,
- дозволяє вибрати агента й говорити з ним (на основі Messenger),
- показує контекст (проєкти, задачі, квести, стан агента),
- стане
/homeдля користувача.
Constraints:
- Використати існуючий Messenger (channels, messages, WS) як ядро для чату.
- Не дублювати логіку відправки/отримання повідомлень.
- Agent Hub = надбудова над Messenger + Agents + Projects (stub).
1) Frontend structure
Create feature:
src/features/agent-hub/
AgentHubPage.tsx
components/
AgentSidebar.tsx
AgentList.tsx
AgentListItem.tsx
AgentSummaryCard.tsx
AgentContextPanel.tsx
AgentStatusBadge.tsx
hooks/
useAgents.ts
useAgentHubState.ts
api/
getAgents.ts
getAgentSummary.ts
getAgentContext.ts
Route:
- Додати
/hubабо/home:<Route path="/hub" element={<AgentHubPage />} />
Layout (3-колонковий)
┌──────────────────┬────────────────────────────┬───────────────────┐
│ Left: │ Center: │ Right: │
│ Agents sidebar │ Chat (Messenger embed) │ Context panel │
└──────────────────┴────────────────────────────┴───────────────────┘
Left (AgentSidebar):
- список:
- "My microDAO"
- "My agents"
- "System agents"
- кожен агент: name, kind, microDAO badge, status badge.
- фільтр/пошук.
Center:
- Вбудований Messenger:
- Reuse MessengerPage components:
- ChannelHeader
- MessageList
- MessageComposer
- Але:
- працюємо з "direct" або "agent-specific" channel.
- Reuse MessengerPage components:
- При виборі агента:
- якщо ще немає direct channel з цим агентом:
- викликати backend:
POST /api/messaging/channels { "name": "DM with Sofia-Prime", "type": "direct", "agent_id": "<agent_id>" } - запамʼятати channel_id.
- викликати backend:
- якщо є → просто підключити Messenger до цього channel_id.
- якщо ще немає direct channel з цим агентом:
Right (AgentContextPanel):
- картка обраного агента:
- імʼя, архетип, модель, microDAO.
- статус: active/idle, останній reply.
- блок "Active projects" (stub):
- отримати з
/api/agent-hub/agents/{id}/context - список 3–5 проєктів/тасок (можна поки мок).
- отримати з
- блок "Capabilities":
- список інструментів агента (з blueprint):
- "Can manage tasks"
- "Can summarise channels"
- "Can create follow-ups"
- список інструментів агента (з blueprint):
2) Backend: Agent Hub API
New service or extend existing agents-service:
services/agents-service/ (якщо вже є, розширити)
Endpoints:
GET /api/agent-hub/agents
→ список агентів для поточного користувача:
[
{
"id": "agent:sofia",
"name": "Sofia-Prime",
"kind": "assistant",
"microdao_id": "microdao:7",
"status": "online",
"model": "gpt-4.1",
"avatar_url": null
}
]
GET /api/agent-hub/agents/{agentId}/summary
→ коротке резюме:
{
"id": "agent:sofia",
"name": "Sofia-Prime",
"kind": "assistant",
"microdao_id": "microdao:7",
"specialization": "Team Assistant / PM",
"description": "Допомагає планувати, підсумовувати, слідкує за задачами.",
"last_activity_at": "...",
"stats": {
"messages_last_24h": 42,
"channels": 5
}
}
GET /api/agent-hub/agents/{agentId}/context
→ контекст:
{
"projects": [
{ "id": "...", "name": "Messenger v1", "status": "active" },
{ "id": "...", "name": "City Dashboard", "status": "active" }
],
"followups": [
{ "id": "...", "title": "Перевірити NATS інтеграцію", "due_at": "..." }
]
}
POST /api/agent-hub/agents/{agentId}/ensure-direct-channel
Body: {}
Behavior:
- знайти чи існує direct channel між user та agent:
SELECT FROM channels WHERE kind='direct' AND user_id=... AND agent_id=... - якщо не існує:
- створити в messaging-service:
POST /internal/messaging/channels { "name": "DM with Sofia-Prime", "kind": "direct", "microdao_id": "<current microdao>", "participants": ["user:...", "agent:sofia"] } - повернути channel_id.
- створити в messaging-service:
- якщо існує → повернути channel_id.
3) Frontend wiring
useAgents.ts:
GET /api/agent-hub/agents- зберігати список агентів + loading/error.
useAgentHubState.ts:
- стан:
selectedAgentIdselectedChannelId
- методи:
selectAgent(agentId):- викликати
/api/agent-hub/agents/{agentId}/ensure-direct-channel - зберегти channelId
- викликати
selectChannel(channelId)
AgentHubPage.tsx:
- Layout на 3 колонки.
- Зліва: AgentSidebar (list, onSelect → selectAgent).
- Центр:
- якщо selectedChannelId:
- рендер Messenger core:
<MessengerChannelView channelId={selectedChannelId} />
- рендер Messenger core:
- якщо selectedChannelId:
- Праворуч: AgentContextPanel (summary + context для selectedAgent).
4) Reuse Messenger components
Створити lightweight обгортку:
src/features/messenger/components/MessengerChannelView.tsx
Яка:
- приймає
channelIdяк проп, - внутрішньо використовує:
useMessages(channelId)useMessagingWebSocket(channelId)MessageListMessageComposerChannelHeader(можна переоприділити title під імʼя агента).
Це дозволяє:
- зберегти один стек логіки для Messenger,
- використовувати його і в
/messenger, і в/hub.
5) Навігація
Додати кнопку/посилання:
- з Onboarding (PortalScene) → редірект у
/hubзамість/cityабо як додаткову опцію. - з
/city-v2HUD: кнопка "Agent Hub" →/hub. - з
/messenger: кнопка "Open Agent Hub" →/hub.
6) Документація
Додати:
docs/AGENT_HUB_MVP.md:- опис ролі Agent Hub,
- API endpoints,
- UX flow (вибір агента → відкриття каналу → контекст справа),
- як це повʼязано з agent-runtime (Phase 2).
Acceptance Criteria
- ✅ Route
/hubвідкривається без помилок. - ✅ В AgentSidebar видно список агентів для поточного користувача.
- ✅ При виборі агента створюється (або знаходиться) direct channel, відкривається чат (Messenger components).
- ✅ Праворуч показується хоча б stub-контекст (projects/followups з мокових даних).
- ✅ Агент, підʼєднаний через Phase 2 (agent_filter + router + runtime), може відповідати в direct channel з Agent Hub.
Version: 1.0.0
Date: 2025-11-24
Priority: High
Estimated Time: 2 weeks
Dependencies: TASK_PHASE2_AGENT_INTEGRATION.md (recommended but not blocking for UI)