Emacs chat client for MeshMonitor (Meshtastic) with channel and DM support, polling, delivery confirmation icons, and tabulated-list buffers for channels and conversations.
2.8 KiB
2.8 KiB
meshmonitor-chat.el - Plan de desarrollo
- Fase 1: Infraestructura base
- Fase 2: Listados (buffers exclusivos)
- Fase 3: Chat funcional (lectura)
- Fase 4: Chat funcional (envío)
- Fase 5: Tiempo real
- Fase 6: Pulido
Fase 1: Infraestructura base
DONE Estructura del paquete y dependencias
- Crear meshmonitor-chat.el con header, requires, defgroup, defcustom
- Variables: host, port, token, user/pass
- Dependencias: url.el (built-in)
DONE Autenticación y conexión REST
- Login con usuario/contraseña via POST + cookies de url.el
- Soporte Bearer token alternativo
- Funciones auxiliares para GET/POST con auth
DONE Buffer base y major mode
- meshmonitor-chat-mode derivado de fundamental-mode
- Prompt al final del buffer (estilo rcirc)
- Markers para separar contenido de input
- Keybindings: RET para enviar, M-p/M-n historial
Fase 2: Listados (buffers exclusivos)
DONE Listado de canales
- GET /api/v1/channels
- Buffer MeshMonitor: Channels con tabulated-list-mode
- Acción RET para abrir canal
- Refresh con g
DONE Listado de conversaciones DM
- GET /api/v1/nodes para obtener nodos conocidos
- Buffer MeshMonitor: Direct Messages con tabulated-list-mode
- Acción RET para abrir conversación
- Refresh con g
Fase 3: Chat funcional (lectura)
DONE Buffer de canal con historial
- GET /api/v1/messages?channel=X&limit=50
- Renderizado: [timestamp] <sender> texto
- Scroll automático cuando se está al final
- Resolución de nodeId a nombre legible via nodos
- Deduplicación por message ID
DONE Buffer de DM con historial
- GET doble: fromNodeId=X + toNodeId=X, merge con dedup
- Mismo renderizado que canales
- Indicar nodo destino en el buffer name
Fase 4: Chat funcional (envío)
DONE Enviar mensajes a canales
- POST /api/v1/messages con channel
- Echo local inmediato del mensaje enviado
- Manejo de errores (mensaje de sistema)
DONE Enviar DMs
- POST /api/v1/messages con toNodeId
- Mismo feedback visual
Fase 5: Tiempo real
DONE Polling de mensajes nuevos
- Timer periódico con GET /api/v1/messages?since=TIMESTAMP
- Insertar nuevos mensajes en buffers abiertos
- Limpieza de buffers muertos
TODO Socket.IO via websocket.el
- Engine.IO handshake (HTTP polling inicial)
- Upgrade a WebSocket
- Parser de paquetes Socket.IO (tipos 0-6)
- Escuchar message:new para mensajes en tiempo real
- Escuchar routing:update para confirmación de entrega
- Escuchar connection:status para estado de conexión
- Reemplazar polling por Socket.IO
Fase 6: Pulido
DONE Faces y formato visual
- Faces para timestamps, nicks, mensajes propios
- Mensajes de sistema con estilo diferente
DONE Comandos slash
- /join #channel, /msg nodeId texto
- /channels, /dms para abrir listados
- /status para ver conexión
DONE Checkdoc, byte-compile y package-lint
- Todas las verificaciones pasan sin errores