matrix-client-pc agent integration: paneles para rooms operados por agentes
pending
medium
2026-05-24
0010
0009
0152
0152
matrix
agents
agents_and_robots
dashboard
sse
device_agent
Objetivo
Integracion nativa con agents_and_robots + agents_dashboard + futuro device_agent (flow 0009 mesh). Detectar que un room esta operado por un agente Matrix conocido (via state event custom m.agent.metadata) y mostrar panel lateral con info del agente: uptime, ultima ejecucion, cola de tasks, last_error, boton restart, view logs en vivo (SSE). Atajos: enviar slash commands del agente (/agent restart, /agent skill <name>).
Tareas
Backend Go:
MatrixService.GetAgentMetadata(roomID) -> *AgentMetadata — lee state event m.agent.metadata que el agente publica al arrancar.
MatrixService.SubscribeAgentLogs(agentID) -> chan LogLine — SSE proxy al endpoint agents_and_robots /api/agents/<id>/logs ya existente (issue 0113).
Llamadas REST proxy a agents_and_robots: RestartAgent(agentID), ListSkills(agentID), TriggerSkill(agentID, skill, args).
Frontend React:
Hook useAgentMetadata(roomID) — devuelve null si no es room de agente.
Componente AgentPanel (panel lateral colapsable, solo visible si hay agentMetadata):
Card con avatar, nombre, version, uptime, status (running/stopped/error).
Tabs: "Logs" (live SSE), "Skills" (lista de skills disponibles + boton trigger), "Config" (read-only del config.yaml del agente).
Room operado por agente conocido muestra AgentPanel automatico.
Logs en vivo del agente aparecen en panel (SSE).
Restart desde panel funciona end-to-end.
Slash /agent skill greet ejecuta skill remota y respuesta llega como msg al room.
Room NO operado por agente: panel oculto (no clutter).
Notas
State event m.agent.metadata format: { agent_id, version, capabilities[], owner, repo_url }. Documentar en projects/element_agents/docs/agent_metadata.md.
SSE proxy: el cliente PC habla a agents_and_robots via su DNS publica (agents.organic-machine.com) con auth Bearer (token del usuario Matrix + scope agent_panel).
Permisos: solo el owner declarado en el agente puede ejecutar restart/trigger. Otros users del room solo leen.
Gotcha: si el agente se rebuilds y cambia agent_id, el state event queda obsoleto — necesita TTL o heartbeat.