daef7ea190
Helper functions (matrix-mas capability group): - mas_client_register_bash_infra: register/sync OAuth clients via mas-cli - mas_syn2mas_migration_bash_infra: dry-run + apply user migration to MAS - synapse_msc3861_enable_go_infra: edit homeserver.yaml MSC3861 block (with diff) - wellknown_oidc_patch_go_infra: patch well-known JSON with msc2965.authentication - synapse_login_flows_check_go_infra: health-check post-migration login flows Flows + issues for custom Matrix clients (PC + Android): - 0010 matrix-client-pc: Wails + React+Mantine (issues 0147-0153) - 0011 matrix-client-android: Kotlin + Compose (issues 0154-0161) - 0162 enable MAS as auth provider (Synapse delegate) — EXECUTED on VPS - 0163 custom admin panel propio (sustituye synapse-admin) Production state (organic-machine.com): - Synapse migrated SQLite -> Postgres - MSC3861 active, password_config disabled - 21 users + 41 access_tokens migrated via syn2mas - 4 MAS clients registered (element, matrix_pc, matrix_android, admin_panel) - synapse-admin container removed + Coolify route deleted - well-known patched with org.matrix.msc2965.authentication Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
3.7 KiB
Markdown
62 lines
3.7 KiB
Markdown
---
|
|
id: "0153"
|
|
title: "matrix-client-pc agent integration: paneles para rooms operados por agentes"
|
|
status: pending
|
|
priority: medium
|
|
created: 2026-05-24
|
|
related_flows: ["0010", "0009"]
|
|
related_issues: ["0152"]
|
|
dependencies: ["0152"]
|
|
tags: [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
|
|
|
|
1. 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)`.
|
|
2. 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).
|
|
- Boton restart con confirmacion.
|
|
- Componente `LogStream` — termtinal-like log viewer con auto-scroll + filtro grep.
|
|
- Slash commands custom: `/agent restart`, `/agent skill <name> <args>`, `/agent logs`.
|
|
3. Cuando flow 0009 (mesh) este vivo:
|
|
- Detectar `device_agent` rooms (state event `m.device.metadata` con tipo `device_agent`).
|
|
- Panel especifico `DevicePanel`: hostname, OS, kernel, IP mesh WG, capabilities firmadas, ultimo heartbeat.
|
|
- Slash commands: `/device shell <cmd>` (si capability permite), `/device fs ls <path>`, `/device camera capture`.
|
|
4. Tests:
|
|
- `e2e/test_agent_panel_basic.sh` — entrar a room de `welcome-bot`, panel agente visible con info correcta.
|
|
- `e2e/test_agent_logs_live.sh` — boton "view logs" stream logs en tiempo real (5s).
|
|
- `e2e/test_agent_restart.sh` — restart desde panel + verificar agente vuelve online.
|
|
|
|
## Funciones del registry a crear
|
|
|
|
- `matrix_agent_metadata_go_infra` — leer/publicar state event `m.agent.metadata`.
|
|
- `agents_and_robots_client_go_infra` — wrapper REST + SSE del API de `agents_and_robots`.
|
|
- `AgentPanel_ts_ui` — panel lateral Mantine con tabs.
|
|
- `LogStream_ts_ui` — viewer logs SSE.
|
|
- `DevicePanel_ts_ui` — panel device_agent (cuando flow 0009 vivo).
|
|
|
|
## Acceptance
|
|
|
|
- [ ] 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.
|