'use client'; import Link from 'next/link'; import { Bot, Users, Building2, Server, ExternalLink, Shield, Plus } from 'lucide-react'; import { useAgentList } from '@/hooks/useAgents'; import { AgentSummary, getGovLevelBadge } from '@/lib/types/agents'; import { AgentPresenceBadge } from '@/components/ui/AgentPresenceBadge'; import { normalizeAssetUrl } from '@/lib/utils/assetUrl'; // Kind emoji mapping const kindEmoji: Record = { vision: '👁️', curator: '🎨', security: '🛡️', finance: '💰', civic: '🏛️', oracle: '🔮', builder: '🏗️', research: '🔬', marketing: '📢', orchestrator: '🎭', mediator: '⚖️', assistant: '🤖', }; function getNodeBadge(nodeId: string | undefined | null): { label: string; color: string } { if (!nodeId) return { label: 'Unknown', color: 'bg-gray-500/20 text-gray-400' }; if (nodeId.includes('node-1')) return { label: 'НОДА1', color: 'bg-emerald-500/20 text-emerald-400' }; if (nodeId.includes('node-2')) return { label: 'НОДА2', color: 'bg-amber-500/20 text-amber-400' }; return { label: 'НОДА', color: 'bg-purple-500/20 text-purple-400' }; } function AgentCard({ agent }: { agent: AgentSummary }) { const isOnline = agent.status === 'online'; const statusColor = isOnline ? 'text-emerald-400' : 'text-white/40'; const emoji = kindEmoji[agent.kind] || '🤖'; const nodeBadge = getNodeBadge(agent.home_node?.id); const govBadge = getGovLevelBadge(agent.gov_level); return ( {/* Header */}
{normalizeAssetUrl(agent.avatar_url) ? ( // eslint-disable-next-line @next/next/no-img-element {agent.display_name} ) : ( {emoji} )}
{/* Presence Badge */}

{agent.display_name}

{agent.title && (

{agent.title}

)}

{agent.kind}

{/* District & MicroDAO */}
{agent.district && (
{agent.district}
)} {agent.primary_microdao_name && (
{agent.primary_microdao_name}
)}
{/* Footer */}
{isOnline ? 'online' : 'offline'} {nodeBadge.label} {/* Gov Level Badge (A1) */} {agent.gov_level && ( {govBadge.label} )} {agent.is_public && ( Public )}
Open →
); } export default function AgentsPage() { const { agents, total, isLoading, error } = useAgentList({ limit: 100 }); return (
{/* Header */}

Agent Console

Всі AI-агенти мережі DAARION

Знайдено агентів: {total}

Новий агент
{/* Filters */}
Фільтр по нодах: НОДА1 (Production) НОДА2 (Development)
{/* Content */} {error && (

Помилка завантаження агентів

)} {isLoading ? (
{Array.from({ length: 6 }).map((_, i) => (
))}
) : agents.length === 0 ? (

Агенти не знайдені

Наразі немає доступних агентів. Спробуйте пізніше.

) : (
{agents.map((agent) => ( ))}
)} {/* Links */}
Публічні громадяни Node Dashboard
); }