Files
microdao-daarion/docs/tasks/AGENT_HUB_UI_TASK.md
Apple 744c149300
Some checks failed
Build and Deploy Docs / build-and-deploy (push) Has been cancelled
Add automated session logging system
- 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)
2026-01-10 04:53:17 -08:00

13 KiB

TASK: Agent Hub UI — Agent Monitoring & Management Dashboard

Priority: High (Parallel to Phase 3)
Estimated Time: 3-4 weeks
Dependencies: Phase 2 complete


Goal

Створити централізований UI для моніторингу та управління агентами в DAARION:

  • Agent Gallery — список всіх агентів з їх статусами
  • Agent Cabinet — детальна інформація про агента
  • Real-time monitoring — активність, метрики, логи
  • Agent Configuration — налаштування, інструкції, tools
  • Conversational Interface — прямий чат з агентом

Architecture Overview

Agent Hub UI (React)
    ↓
├─ Agent Gallery (список агентів)
├─ Agent Cabinet (детальний dashboard)
├─ Agent Chat (direct conversation)
├─ Agent Metrics (real-time stats)
└─ Agent Configuration (edit settings)
    ↓
Backend:
├─ agents-service (агенти + blueprints)
├─ agent-runtime (execution stats)
├─ messaging-service (direct chat)
└─ NATS (real-time events)

Deliverables

1. Frontend Components (src/features/agent-hub/)

Structure:

src/features/agent-hub/
  components/
    AgentGallery.tsx          # Grid of agent cards
    AgentCard.tsx             # Single agent preview
    AgentCabinet.tsx          # Full agent dashboard
    AgentMetrics.tsx          # Real-time metrics panel
    AgentLogs.tsx             # Activity log stream
    AgentConfiguration.tsx    # Edit agent settings
    AgentChat.tsx             # Direct chat interface
    AgentToolsPanel.tsx       # List of agent tools
  hooks/
    useAgents.ts              # Fetch agents list
    useAgentDetails.ts        # Fetch single agent
    useAgentMetrics.ts        # Real-time metrics
    useAgentLogs.ts           # Activity stream
    useDirectChat.ts          # Direct chat with agent
  types/
    agent.ts                  # TypeScript types
  AgentHubPage.tsx            # Main hub page

2. Backend: agents-service (NEW)

Port: 7010
Purpose: Agent blueprints, configuration, metadata

Structure:

services/agents-service/
  main.py
  models.py
  blueprints.py
  config.yaml
  requirements.txt
  Dockerfile
  README.md

API:

GET /api/agents

List all agents:

{
  "agents": [
    {
      "id": "agent:sofia",
      "name": "Sofia-Prime",
      "kind": "assistant",
      "status": "active",
      "avatar": "https://...",
      "description": "Project manager & task organizer",
      "capabilities": ["task_mgmt", "summarization"],
      "microdao_id": "microdao:daarion",
      "created_at": "2025-01-01T00:00:00Z",
      "last_active": "2025-11-24T12:00:00Z"
    }
  ]
}

GET /api/agents/{agent_id}

Get agent details:

{
  "id": "agent:sofia",
  "name": "Sofia-Prime",
  "kind": "assistant",
  "status": "active",
  "avatar": "https://...",
  "description": "...",
  "instructions": "You are Sofia, a helpful assistant...",
  "model": "gpt-4.1-mini",
  "tools": ["projects.list", "task.create", "followup.create"],
  "capabilities": {...},
  "metrics": {
    "total_messages": 1234,
    "total_invocations": 567,
    "avg_response_time_ms": 2345,
    "success_rate": 0.98
  },
  "config": {
    "temperature": 0.7,
    "max_tokens": 1000,
    "quiet_hours": "22:00-08:00"
  }
}

PUT /api/agents/{agent_id}

Update agent configuration:

{
  "instructions": "Updated instructions...",
  "model": "gpt-4",
  "tools": ["projects.list", "task.create"],
  "config": {
    "temperature": 0.8,
    "max_tokens": 2000
  }
}

GET /api/agents/{agent_id}/metrics/realtime

Real-time metrics (WebSocket or SSE):

{
  "agent_id": "agent:sofia",
  "timestamp": "2025-11-24T12:34:56Z",
  "active_conversations": 3,
  "messages_last_hour": 15,
  "avg_response_time_ms": 2100,
  "current_load": "normal"
}

GET /api/agents/{agent_id}/logs?limit=50

Activity logs:

{
  "logs": [
    {
      "id": "log-123",
      "timestamp": "2025-11-24T12:34:56Z",
      "event_type": "message.sent",
      "channel_id": "channel-uuid",
      "content_preview": "Створила задачу 'Phase 3 testing'",
      "metadata": {
        "latency_ms": 2345,
        "tokens_used": 567
      }
    }
  ]
}

3. UI Components Detail

AgentGallery.tsx

  • Grid layout (3-4 columns)
  • Agent cards with:
    • Avatar
    • Name + status badge
    • Short description
    • Last active time
    • Quick stats (messages, response time)
  • Filter by:
    • Status (active, paused, error)
    • Kind (assistant, coordinator, specialist)
    • MicroDAO
  • Search by name

Wireframe:

┌─────────────────────────────────────────┐
│  Agent Hub                    [+ New]   │
├─────────────────────────────────────────┤
│  [Filter: All] [Search: ...]            │
├─────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐
│  │ 👤 Sofia │  │ 👤 Alex  │  │ 👤 Eva   │
│  │ ● Active │  │ ● Active │  │ ⏸ Paused │
│  │ PM & Org │  │ Tech     │  │ Research │
│  │ 234 msgs │  │ 156 msgs │  │ 89 msgs  │
│  └──────────┘  └──────────┘  └──────────┘

AgentCabinet.tsx

  • Header:
    • Avatar, name, status
    • Quick actions (pause, edit, chat)
  • Tabs:
    • Overview: Key stats + recent activity
    • Metrics: Real-time charts
    • Logs: Activity stream
    • Configuration: Edit settings
    • Chat: Direct conversation

Wireframe:

┌─────────────────────────────────────────┐
│  👤 Sofia-Prime            [Edit] [Chat]│
│  ● Active | Last seen: 2m ago          │
├─────────────────────────────────────────┤
│  [Overview] [Metrics] [Logs] [Config]  │
├─────────────────────────────────────────┤
│  📊 Statistics (24h)                    │
│  Messages: 45  |  Invocations: 23     │
│  Avg Response: 2.3s  |  Success: 98%  │
│                                         │
│  📝 Recent Activity                     │
│  • 12:34 - Replied in #general         │
│  • 12:30 - Created task "Phase 3 test" │
│  • 12:25 - Summarized meeting notes    │
└─────────────────────────────────────────┘

AgentChat.tsx

  • Direct 1-on-1 chat with agent
  • Similar to Messenger UI
  • Shows agent thinking/tools usage
  • Context: "Direct conversation (not in channel)"

4. Real-time Updates

WebSocket endpoint: ws://localhost:7010/ws/agents/{agent_id}

Events:

{
  "type": "agent.message.sent",
  "agent_id": "agent:sofia",
  "channel_id": "channel-uuid",
  "timestamp": "2025-11-24T12:34:56Z",
  "content_preview": "Created task..."
}

{
  "type": "agent.metrics.update",
  "agent_id": "agent:sofia",
  "metrics": {
    "active_conversations": 3,
    "messages_last_hour": 15
  }
}

{
  "type": "agent.status.changed",
  "agent_id": "agent:sofia",
  "old_status": "active",
  "new_status": "paused"
}

5. Integration Points

With Phase 2:

  • Uses existing messaging-service for direct chat
  • Displays logs from agent-runtime invocations
  • Shows agent status from agent-filter

With Phase 3:

  • Shows LLM usage (tokens, cost) from llm-proxy
  • Displays memory stats from memory-orchestrator
  • Lists available tools from toolcore

With NATS:

  • Subscribes to agent.* events for real-time updates
  • Publishes agent.config.updated on changes

6. Mock Data (Development)

agents.mock.ts:

export const mockAgents: Agent[] = [
  {
    id: "agent:sofia",
    name: "Sofia-Prime",
    kind: "assistant",
    status: "active",
    avatar: "/avatars/sofia.png",
    description: "Project manager & task organizer",
    capabilities: ["task_mgmt", "summarization", "planning"],
    microdao_id: "microdao:daarion",
    created_at: "2025-01-01T00:00:00Z",
    last_active: "2025-11-24T12:00:00Z",
    metrics: {
      total_messages: 1234,
      total_invocations: 567,
      avg_response_time_ms: 2345,
      success_rate: 0.98
    }
  },
  {
    id: "agent:alex",
    name: "Alex-Tech",
    kind: "specialist",
    status: "active",
    avatar: "/avatars/alex.png",
    description: "Technical specialist for development tasks",
    capabilities: ["code_review", "debugging", "documentation"],
    microdao_id: "microdao:daarion",
    created_at: "2025-01-15T00:00:00Z",
    last_active: "2025-11-24T11:45:00Z",
    metrics: {
      total_messages: 856,
      total_invocations: 423,
      avg_response_time_ms: 3100,
      success_rate: 0.96
    }
  }
];

7. Tech Stack

Frontend:

  • React 18 + TypeScript
  • Tailwind CSS
  • React Query (TanStack Query)
  • React Router
  • WebSocket (for real-time)

Backend:

  • Python 3.11 + FastAPI
  • PostgreSQL (agents DB)
  • NATS (events)
  • Docker

8. Database Schema

agents table:

CREATE TABLE agents (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    kind TEXT NOT NULL,  -- assistant, coordinator, specialist
    status TEXT NOT NULL DEFAULT 'active',  -- active, paused, error
    avatar TEXT,
    description TEXT,
    instructions TEXT NOT NULL,
    model TEXT NOT NULL,
    tools JSONB DEFAULT '[]',
    capabilities JSONB DEFAULT '{}',
    config JSONB DEFAULT '{}',
    microdao_id TEXT NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW(),
    last_active TIMESTAMPTZ
);

CREATE INDEX idx_agents_microdao ON agents(microdao_id);
CREATE INDEX idx_agents_status ON agents(status);

agent_metrics table:

CREATE TABLE agent_metrics (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    agent_id TEXT NOT NULL REFERENCES agents(id),
    timestamp TIMESTAMPTZ DEFAULT NOW(),
    event_type TEXT NOT NULL,  -- message.sent, invocation, error
    channel_id TEXT,
    latency_ms FLOAT,
    tokens_used INT,
    success BOOLEAN,
    metadata JSONB
);

CREATE INDEX idx_metrics_agent_time ON agent_metrics(agent_id, timestamp DESC);

9. Routes

Frontend routes:

/agents                    → AgentGallery (list)
/agents/:agentId           → AgentCabinet (dashboard)
/agents/:agentId/chat      → AgentChat (direct conversation)
/agents/:agentId/config    → AgentConfiguration (edit)

10. Acceptance Criteria

Agent Gallery:

  • Shows all agents with status badges
  • Filter by status, kind, microDAO
  • Search by name
  • Responsive grid layout

Agent Cabinet:

  • Displays all agent details
  • Shows real-time metrics
  • Activity log stream
  • Configuration editor

Agent Chat:

  • Direct 1-on-1 conversation
  • Shows agent thinking/tools
  • Message history

Real-time Updates:

  • Metrics auto-refresh (WebSocket)
  • Activity log auto-updates
  • Status changes reflected immediately

Integration:

  • Works with Phase 2 (messaging, runtime)
  • Works with Phase 3 (LLM, memory, tools)
  • Uses NATS for events

11. Implementation Steps

Week 1: Backend Foundation

  1. Create agents-service (FastAPI)
  2. Database schema + migrations
  3. Basic CRUD endpoints
  4. Mock agent blueprints

Week 2: Frontend Components

  1. AgentGallery + AgentCard
  2. AgentCabinet (layout + tabs)
  3. AgentMetrics panel
  4. AgentLogs stream

Week 3: Real-time & Integration

  1. WebSocket for real-time updates
  2. Direct chat integration
  3. Configuration editor
  4. NATS events

Week 4: Polish & Testing

  1. UI polish (animations, UX)
  2. Error handling
  3. E2E testing
  4. Documentation

12. Future Enhancements (Phase 3.5+)

🔜 Agent creation wizard

  • GUI for creating new agents
  • Template selection
  • Tool assignment

🔜 Agent analytics

  • Charts (messages over time)
  • Cost tracking
  • Performance insights

🔜 Agent marketplace

  • Browse community agents
  • Install/deploy agents
  • Agent templates

🔜 Multi-agent orchestration

  • Agent chains
  • Workflow builder
  • Agent collaboration

Quick Start (After Implementation)

# Start agents-service
docker-compose -f docker-compose.agents.yml up -d

# Frontend dev
cd node-network-app
npm run dev

# Open
open http://localhost:8899/agents

Documentation

After implementation, create:

  • /docs/AGENT_HUB_SPEC.md — Full specification
  • /docs/AGENT_SERVICE_API.md — API documentation
  • /services/agents-service/README.md — Service setup

Status: 📋 Spec Ready
Version: 1.0.0
Last Updated: 2025-11-24

READY TO BUILD! 🚀