import React, { useState } from 'react'; import { useApi } from '../hooks/useApi'; import { getMeshAgents, discoverAgents, type MeshAgent } from '../api/discovery'; export default function AgentNetwork() { const [searchQuery, setSearchQuery] = useState(''); const agentsQuery = useApi(() => getMeshAgents(), []); const agents = agentsQuery.data ?? []; const [searchResults, setSearchResults] = useState<{ agent: MeshAgent; score: number; matchedTerms: string[] }[] | null>(null); const handleSearch = async () => { if (!searchQuery.trim()) { setSearchResults(null); return; } const resp = await discoverAgents({ query: searchQuery.trim() }); setSearchResults(resp.results as { agent: MeshAgent; score: number; matchedTerms: string[] }[]); }; const displayAgents = searchResults ? searchResults.map(r => r.agent) : agents; return (

🌐 Agent Network

setSearchQuery(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSearch()} placeholder="Discover by capability (e.g. coding, fitness)..." style={inputStyle} /> {searchResults && ( )}
{agentsQuery.loading &&

Loading...

} {agentsQuery.error &&

Error: {agentsQuery.error}

} {searchResults &&

{searchResults.length} result(s) for "{searchQuery}"

} {!agentsQuery.loading && displayAgents.length === 0 && (

No agents found.

)} {displayAgents.map((agent) => ( ))}
Agent Description Capabilities Protocol Last Seen
{agent.name} {agent.description}
{agent.capabilities.map(c => ( {c} ))}
{agent.protocol} {new Date(agent.last_seen).toLocaleString()}
); } const inputStyle: React.CSSProperties = { padding: '6px 10px', border: '1px solid #d1d5db', borderRadius: '4px', fontSize: '14px', flex: 1, }; const btnStyle: React.CSSProperties = { padding: '6px 16px', background: '#3b82f6', color: 'white', border: 'none', borderRadius: '6px', cursor: 'pointer', fontSize: '14px', }; const smallBtnStyle: React.CSSProperties = { padding: '6px 10px', background: 'transparent', border: '1px solid #d1d5db', borderRadius: '4px', cursor: 'pointer', fontSize: '13px', }; const thStyle: React.CSSProperties = { padding: '8px 12px', fontSize: '13px', color: '#64748b' }; const tdStyle: React.CSSProperties = { padding: '8px 12px', fontSize: '13px' }; const tagStyle: React.CSSProperties = { padding: '1px 6px', background: '#e0f2fe', color: '#0369a1', borderRadius: '10px', fontSize: '11px', fontWeight: 500, };