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>
2.7 KiB
2.7 KiB
id, title, status, priority, created, related_flows, related_issues, dependencies, tags
| id | title | status | priority | created | related_flows | related_issues | dependencies | tags | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0149 | matrix-client-pc composer: markdown, reply, edit, reactions, media | pending | high | 2026-05-24 |
|
|
|
|
Objetivo
Composer del room: markdown rendering, replies con quote, edits, reactions emoji, threads (Matrix MSC3440), upload de media (imagenes, files, voice msg). Drag&drop archivos. Slash commands placeholder (/me, /shrug, /widget — este ultimo para issue 0152).
Tareas
- Backend Go:
MatrixService.SendMessage(roomID, body, format)— text + markdown -> HTML viagoldmark.MatrixService.SendReply(roomID, parentEventID, body).MatrixService.EditMessage(roomID, eventID, newBody).MatrixService.SendReaction(roomID, eventID, key).MatrixService.UploadMedia(roomID, filePath) -> mxc://.MatrixService.SendThreadReply(roomID, threadRootID, body).
- Frontend React:
- Componente
Composercon MantineTextarea+ toolbar markdown. - Hotkeys: Cmd+B/I/K, Cmd+Enter para enviar, Esc cancel edit.
- Drag&drop zone over Composer + paste image desde clipboard.
EmojiPicker(reusar@emoji-mart/reacto componente propio@fn_library).ReactionBardebajo de EventBubble con aggregates.- Thread panel lateral (abrir click en evento "X replies").
- Voice messages: graba con
MediaRecorder(opus codec), upload + send conorg.matrix.msc3245.voiceflag.
- Componente
- Tests:
e2e/test_send_markdown.sh—**bold**aparece negrita en otro cliente.e2e/test_edit_message.sh— edicion aparece in-place en Element Web.e2e/test_reaction.sh— reaccion emoji propagada bidireccional.
Funciones del registry a crear
markdown_to_matrix_html_go_core—goldmarkcon sanitizer Matrix-compatible.Composer_ts_ui— componente Mantine + dropzone.EmojiPicker_ts_ui— wrapper picker emoji.ReactionBar_ts_ui— componente reactions aggregadas.
Acceptance
- Mensaje markdown
**negrita** _cursiva_se ve formateado en Element Web. - Reply quote aparece referenciando el msg padre.
- Edit cambia el msg in-place en ambos clientes.
- Reaccion emoji con click aparece como counter agregado.
- Upload imagen (PNG 2MB) se ve thumbnail + click abre full.
- Voice msg grabado 5s reproduce OK en Element Web.
- Thread: 5 replies anidados se muestran en panel lateral.
Notas
- Sanitizer HTML: usar allowlist Matrix (b, i, em, strong, a[href], code, pre, blockquote, ul, ol, li, br, p, h1-h6). NO permitir
<script>,<iframe>, event handlers. - mxc:// uploads: validar size limit (Synapse default 50MB).
- Voice msg: encode opus 32kbps, max 5min.