Context
The agent registry lists agents but there's no visual indicator of whether an agent is currently online (sending heartbeats). Adding a presence dot makes the registry actionable — users can tell at a glance which agents are active.
What to implement
Presence endpoint (already exists via health store)
GET /api/agents/:id/health returns status: 'healthy' | 'offline'. The registry page already fetches agent cards — augment each with a presence fetch.
UI change in components/agents-registry.tsx
Add a small dot overlay on each agent card avatar:
- Green dot:
status === 'healthy' (last heartbeat < 30s ago)
- Red dot:
status === 'offline'
- Grey dot: health endpoint returns 404 (never sent a heartbeat)
Use CSS absolute positioning over the avatar. Dots are 10px, border-white, rounded-full.
Bulk presence endpoint (perf)
Rather than N individual health fetches, add GET /api/agents/presence?ids=id1,id2,id3 returning a map of { agentId: status } in one call (max 50 IDs).
Acceptance criteria
🎁 Evidencia visual = reward extra
- Si tu PR incluye video demo o capturas de pantalla mostrando la funcionalidad pedida funcionando end-to-end, va a ser considerado para rewards de GrantFox en esta issue. No es obligatorio, pero suma mucho para la evaluación.
Context
The agent registry lists agents but there's no visual indicator of whether an agent is currently online (sending heartbeats). Adding a presence dot makes the registry actionable — users can tell at a glance which agents are active.
What to implement
Presence endpoint (already exists via health store)
GET /api/agents/:id/healthreturnsstatus: 'healthy' | 'offline'. The registry page already fetches agent cards — augment each with a presence fetch.UI change in
components/agents-registry.tsxAdd a small dot overlay on each agent card avatar:
status === 'healthy'(last heartbeat < 30s ago)status === 'offline'Use CSS absolute positioning over the avatar. Dots are 10px, border-white, rounded-full.
Bulk presence endpoint (perf)
Rather than N individual health fetches, add
GET /api/agents/presence?ids=id1,id2,id3returning a map of{ agentId: status }in one call (max 50 IDs).Acceptance criteria
🎁 Evidencia visual = reward extra