# Estado del Proyecto - Task Manager para WhatsApp ## ✅ Funcionalidades Completadas - **Infraestructura Principal** - Servidor webhook con health checks - Dockerización y despliegue CapRover - Gestión de dependencias con Bun - **Base de Datos** - Modelo de tareas y asignaciones - Normalización de IDs de WhatsApp - Transacciones atómicas - Migrador up-only para SQLite con tabla `schema_migrations`, backup automático con `VACUUM INTO` y baseline automático si ya existe esquema - Esquema de `response_queue` extendido con columna `metadata` - **Sincronización de Grupos** - Caché de grupos activos y validación en el servidor - Sync periódico con Evolution API - **Webhooks** - Registro/verificación con Evolution API - Manejo de eventos (MESSAGES_UPSERT) con normalización del nombre del evento - Corrección: extracción robusta de remitente en DMs vs grupos para evitar 'Invalid sender ID' - **Cola de Respuestas** - Persistencia en DB y envío real a Evolution API - Workers en background activos - Soporte de menciones: persistencia en `metadata` y envío como `mentioned` en el payload - **Comandos** - `/tarea nueva` end-to-end: parseo de descripción y última fecha futura, extracción de asignados desde menciones y tokens `@...`, limpieza de la descripción, persistencia de tarea y asignaciones, y respuesta con menciones. - **Contactos y Nombres** - Servicio `ContactsService` con caché en memoria (TTL) y actualización por webhooks (CONTACTS_UPDATE/CHATS_UPDATE); fallback a Evolution API para obtener nombres. Se usa para mostrar nombres en los textos (con fallback a números). En entorno de test evita llamadas de red para acelerar y aislar la suite. - **UX de Notificaciones** - Confirmación por DM al creador siempre (en una sola línea con id y descripción) y DM a cada asignado (excluyendo al creador). - Notificación opcional al grupo controlada por `NOTIFY_GROUP_ON_CREATE` (false por defecto), incluyendo menciones para visibilidad. - **Validaciones de Usuario** - Integración completa de normalización y `ensureUserExists` en el flujo principal de mensajes - Tests de integración para validaciones de usuarios - **Testing** - Suite de tests unitarios con DB en memoria para aislamiento ## ⚠️ Funcionalidades Pendientes - **Gestión de Tareas** - Eliminación opcional de tareas y mejoras de edición - **Cola de Respuestas** - Reintentos con backoff y jitter - Recuperación de ítems en estado `processing` tras caídas - Métricas/observabilidad y limpieza/retención - **Validaciones** - Permisos de usuario (roles) y pertenencia a grupos (si se requiere política estricta) - **Menciones y nombres** - Refinar políticas de caché (TTL, invalidación) y ampliar compatibilidad de endpoints; en DM, WhatsApp no pinta chips de mención de terceros (limitación del cliente). ## ➡️ Próximos Pasos Prioritarios 1. Añadir tests de Fase 3 (ver/x, entradas extendidas) y paginación “… y X más”. 2. Mejorar UX de menciones: resolver nombres y formateo de “asignados”. 3. Unificar y pulir formatos de mensajes (dd/MM en todos, compacidad). 4. Mejoras de fiabilidad de la cola: reintentos con backoff y recuperación de `processing`. 5. Métricas/observabilidad básicas y plan de migraciones de DB. ## 🐞 Problemas conocidos - En chats privados, WhatsApp no renderiza chips de mención para terceros; en grupos sí se resuelven al nombre local de cada receptor. El bot incluye nombres en el texto cuando los conoce y números como @dígitos para acción rápida; no hay reescritura por receptor. ## 🔧 Archivos Clave a Modificar - `src/services/response-queue.ts` - `src/services/command.ts` - `src/tasks/service.ts` - `src/server.ts` ## Commit history and status - Latest status: All unit tests passing; Phase 2 completada; ACK to creator always in single-line format; optional group notify disabled by default; ContactsService avoids network calls under tests; basic name resolution via ContactsService integrated. ## ▶️ Para continuar ahora Propuesta inmediata: - Implementar comandos: `/t ver` (grupo y mis) y `/t x `. - Asegurar comportamiento “solo DM” en `src/server.ts` (no responder en grupos). - Extender `TaskService` con métodos `claimTask`, `unassignTask`, `completeTask`. - Afinar `ResponseQueue` para DMs de listados y confirmaciones (manteniendo metadata de menciones). Para que pueda proponer cambios de código, añade estos archivos a este chat: - `src/services/command.ts` - `src/tasks/service.ts` - `src/services/response-queue.ts` - `src/server.ts`