bd9f0d8437
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>
9.4 KiB
9.4 KiB
name, id, status, created, updated, priority, risk, related_issues, related_flows, apps, projects, vaults, capability_groups, trigger, schedule, expected_runtime_s, tags
| name | id | status | created | updated | priority | risk | related_issues | related_flows | apps | projects | vaults | capability_groups | trigger | schedule | expected_runtime_s | tags | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| matrix-client-pc | 0010 | pending | 2026-05-24 | 2026-05-24 | high | medium |
|
|
|
|
|
manual | 0 |
|
Goal
Cliente Matrix propio para PC (Win/Linux/macOS) construido con Wails (Go backend) + React+Mantine+@fn_library frontend. Replica capacidades actuales de Element Web (chat, E2EE, calls LiveKit) y se abre a mejoras propias: mini-webapps embebidas en conversaciones gestionadas por agentes del project element_agents, paneles especiales para llamadas, integracion directa con agents_and_robots + agents_dashboard + device_agent + futuro mesh WireGuard (flow 0009).
Pre-requisitos
- Synapse + MAS + LiveKit funcionando en
organic-machine.com(appelement_matrix_chatya desplegada, 5+ semanas uptime). livekit-jwtcontainer vivo para generar tokens (verdocker-compose.livekit.yml).- Sygnal push gateway (Synapse) — TBD si no existe, anadir container para push notifs PC + Android.
- Cuenta Matrix de test (
@dev-pc:matrix-af2f3d.organic-machine.com) registrada via MAS. - Go 1.22+ + Wails CLI v2 instalado (
go install github.com/wailsapp/wails/v2/cmd/wails@latest). - pnpm + Node 20+ (ya en el repo para
frontend/).
Funciones del registry recomendadas
| Rol | Funcion candidata | Estado |
|---|---|---|
| Matrix client init (Go) | matrix_client_init_go_infra |
FALTA: wrapper sobre mautrix-go (login MAS OIDC, sync, store SQLite) |
| LiveKit token gen (Go) | livekit_token_gen_go_infra |
FALTA: JWT con livekit-server-sdk-go |
| Matrix room subscribe SSE (Go) | matrix_room_subscribe_go_infra |
FALTA: stream eventos Synapse -> frontend Wails via SSE/IPC |
| Matrix message send (Go) | matrix_message_send_go_infra |
FALTA: text + markdown + reply + edit + reaction |
| Matrix E2EE bootstrap (Go) | matrix_e2ee_bootstrap_go_infra |
FALTA: cross-signing keys, recovery passphrase |
| Matrix device verify (Go) | matrix_device_verify_go_infra |
FALTA: SAS verification flow |
| LiveKit room hook (TS) | livekit_room_ts_ui |
FALTA: hook React wrapper sobre livekit-client |
| Widget host iframe (TS) | widget_host_ts_ui |
FALTA: iframe sandbox + postMessage Matrix Widget API v2 |
| Matrix timeline hook (TS) | useMatrixTimeline_ts_ui |
FALTA: hook React con pagination, dedupe, optimistic UI |
| Markdown render (TS) | reuse existing markdown_render_ts_ui si existe, sino crear |
check |
| HTTP client (Go) | http_json_client_go_infra |
OK (reusar) |
| SQLite open (Go) | sqlite_open_go_infra |
OK (reusar) |
| HTTP server SSE | http_sse_server_go_infra |
OK (reusar) |
| Notify (impure) | notify_desktop_go_infra |
FALTA: Win/Linux/mac notifications nativas |
Apps tocadas
projects/element_agents/apps/matrix_client_pc(nueva — Wails + React).projects/element_agents/apps/element_matrix_chat(backend ya activo; quiza anadir sygnal container).projects/element_agents/apps/agents_and_robots(consumidor — el cliente PC dialoga con agentes via rooms Matrix).projects/element_agents/apps/agents_dashboard(referencia UI — algunos paneles se reusan).
Projects relacionados
element_agents(root project — agrupa todo).
Vaults / storage
- Local del PC:
~/.matrix_client_pc/store.db(sync state + crypto store SQLite). - Cache media:
~/.matrix_client_pc/media/.
Capability groups consultados
matrix-client(a crear: documenta wrappersmautrix-go).livekit-calls(a crear: token gen + room join + UI calls).e2ee(a crear: bootstrap + verification + recovery).widgets(a crear: Matrix Widget API v2 host + sandbox + permisos).
Flow
Pasos numerados. Cada paso = issue propio (ver related_issues).
- 0147 — Scaffold Wails + login MAS. Crear app
matrix_client_pc/con Wails init, conectar a Synapse via MAS OIDC, mostrar perfil del usuario logueado. Persistencia tokens enpasso keychain del SO. - 0148 — Rooms list + timeline. Sidebar con rooms (DMs + spaces + grupos), panel central timeline con pagination scroll-up, dedupe, optimistic UI. Reusar layout
AppShellMantine. - 0149 — Composer + interacciones. Composer markdown, replies, edits, reactions, threads, upload media (imagenes, files, voice msg). Drag&drop. Slash commands placeholder.
- 0150 — E2EE.
mautrix-gocon crypto store SQLite. Cross-signing setup, recovery passphrase, SAS verification de devices, key backup. UI para verificar otros usuarios. - 0151 — Calls LiveKit. Boton call en room -> token JWT desde Go backend -> join LiveKit room -> UI con tiles participantes, mute/cam/screen/hangup. 1:1 + grupales hasta 16 (limite actual del config).
- 0152 — Mini-webapps embebidas. Implementar Matrix Widget API v2: iframe sandbox + postMessage handshake + permisos (capabilities
m.always_on_screen,org.matrix.msc2762.send.event, etc.). Lanzar webapps desde slash command/widget <url>o desde state eventm.widget. Agentes pueden publicar widgets en su room (ej. dashboard de telemetria, formulario, kanban inline). - 0153 — Agent integration. Paneles especiales para rooms operados por agentes de
agents_and_robots: timeline + panel lateral con estado del agente (uptime, cola de tasks, last_error). Reusar SSE delagents_dashboard.
Acceptance
- App Wails compila y arranca en Win+Linux con binario standalone.
- Login MAS OIDC completo, token persistido entre arranques.
- Sync incremental con Synapse funciona; reconexion automatica tras red caida.
- E2EE: enviar/recibir mensajes cifrados con otro cliente (Element Web o Android).
- Call 1:1 con video+audio funcional via LiveKit.
- Widget de prueba (HTML estatico servido por
agents_and_robots) se carga en iframe sandbox y postMessage handshake completa.
Definition of Done
Mecanica (pre-requisito)
go build -tags wailsverde para Win + Linux.pnpm buildfrontend verde.fn doctor cpp-appsno aplica;fn doctor servicesconfirma backend Matrix sano.app.mdconuses_functionsdeclarando todas las dependencias del registry.
Cobertura de comportamiento
| Escenario | Tipo | Comando / evidencia | Resultado esperado |
|---|---|---|---|
| Golden: login + recibir mensaje E2EE | e2e | e2e/test_login_and_receive.sh |
mensaje aparece en timeline en <2s, descifrado OK |
| Edge: red cae 30s, vuelve | e2e | e2e/test_reconnect.sh |
sync se reanuda sin perder mensajes |
| Edge: 2000 mensajes en 1 room | e2e | e2e/test_perf_timeline.sh |
scroll a 60fps, memoria <500MB |
| Edge: device nuevo no verificado envia msg | e2e | e2e/test_unverified_device.sh |
warning visible en UI, msg cifra a este device solo si user confirma |
| Error: token MAS expira | e2e | e2e/test_token_refresh.sh |
refresh automatico, sin logout visible |
| Error: LiveKit SFU caido | e2e | e2e/test_livekit_down.sh |
error claro en UI, no crash de la app |
Vida util validada (>=7 dias uso real)
| Metrica | Umbral | Donde se observa | Ventana |
|---|---|---|---|
| Crashes proceso PC | 0 |
journalctl --user -u matrix_client_pc (Linux) / Event Viewer (Win) |
7 dias |
| Latencia send msg | p95 < 500ms |
panel propio de la app + call_monitor |
7 dias |
| Calls fallidas | < 5% |
counter en app + logs LiveKit | 7 dias |
| Uso real diario | >= 4 dias/semana |
last_active_at en store local |
7 dias |
| Onboarding nuevo usuario | < 5min hasta primer msg E2EE |
screencast operador | 1 sesion |
Anti-criterios
- NO marcar done si E2EE se silent-falla (mensajes no se descifran y la UI no lo dice).
- NO marcar done si la app solo funciona en
home-wsly peta enaurgi-pc. - NO marcar done si widget host carga
javascript:URLs (XSS). - NO marcar done si calls grupales >3 participantes lagean con audio cortado.
Notas
Onboarding rapido:
cd projects/element_agents/apps/matrix_client_pcwails devpara desarrollo con hot-reload.wails build -platform linux/amd64,windows/amd64para release.- Tokens MAS guardados via
keyring(Go bindings al keychain del SO). - Para probar E2EE: crear segundo usuario en Synapse Admin, abrir Element Web como segundo cliente, intercambiar verifications.
Camino futuro (post-DoD):
- Push notifs nativas via
sygnal+ APNs/FCM-equivalent desktop (Win Action Center, Linux notify-send). - Mini-webapp catalog: registry de widgets internos (
projects/element_agents/widgets/) publicables a rooms con un comando. - Threads UI mejorado (vs Element que es plano).
- Integracion
agents_and_robots: panel embebido que muestra logs del agente del room actual. - Cuando flow 0009 (mesh wireguard) este vivo: este cliente PC habla con
device_agentde cada PC del mesh via su room Matrix.
Decisiones clave (justificacion en hilo Claude 2026-05-24):
- Wails > Tauri: Go es stack principal del registry, reusa funciones existentes,
mautrix-goes el SDK Matrix mas maduro en Go. - React+Vite+Mantine+
@fn_library: defaults del proyecto, verfrontend_theming.md. - 2 codebases (PC Wails + Android Kotlin nativo): tradeoff aceptado por calidad nativa Android + reuso Go en PC. Contrato compartido en
docs/client_contract.md(TBD).
Capability growth log
- v0.1.0 (2026-05-24) — baseline (flow creado).