--- id: "US-LLM-001" title: "Enviar Mensaje al Copilot" type: "User Story" status: "Done" priority: "Media" epic: "OQI-007" project: "trading-platform" story_points: 3 created_date: "2025-12-05" updated_date: "2026-01-04" --- # US-LLM-001: Enviar Mensaje al Copilot **Épica:** OQI-007 - LLM Strategy Agent **Sprint:** TBD **Story Points:** 5 **Prioridad:** P0 - Crítico --- ## Historia de Usuario **Como** usuario autenticado de Trading Platform **Quiero** poder enviar mensajes al Copilot de trading **Para** recibir análisis, recomendaciones y asistencia personalizada --- ## Criterios de Aceptación ### AC-1: Envío básico de mensaje ```gherkin Given estoy autenticado en la plataforma And estoy en la página del Copilot When escribo un mensaje en el campo de texto And presiono Enter o el botón "Enviar" Then mi mensaje aparece en el chat And veo un indicador de "Pensando..." And recibo una respuesta del agente ``` ### AC-2: Streaming de respuesta ```gherkin Given envié un mensaje al Copilot When el agente comienza a responder Then veo las palabras aparecer progresivamente And el texto se va completando en tiempo real And al finalizar el mensaje queda completo ``` ### AC-3: Validación de mensaje vacío ```gherkin Given estoy en el campo de mensaje When intento enviar un mensaje vacío Then el mensaje no se envía And el botón de enviar está deshabilitado ``` ### AC-4: Límite de caracteres por plan ```gherkin Given soy usuario con plan When escribo un mensaje Then veo un contador de caracteres And el límite es caracteres And no puedo escribir más del límite Examples: | plan | limite | | Free | 500 | | Pro | 2000 | | Premium | 4000 | ``` ### AC-5: Cancelar respuesta en progreso ```gherkin Given el agente está generando una respuesta And veo el indicador de streaming When hago clic en el botón "Cancelar" Then la generación se detiene And veo el mensaje parcial generado And puedo enviar un nuevo mensaje ``` --- ## Diseño UI/UX ### Wireframe ``` ┌─────────────────────────────────────────────────────────────┐ │ Trading Platform Copilot [+] [⚙️] [×] │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 🤖 ¡Hola! Soy tu asistente de trading. ¿En qué │ │ │ │ puedo ayudarte? │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 👤 ¿Cuál es tu análisis de AAPL? │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 🤖 Analizando AAPL... │ │ │ │ ████████████░░░░░░░░ 60% │ │ │ │ [Cancelar] │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ ├─────────────────────────────────────────────────────────────┤ │ │ Escribe tu mensaje... │ 45/500 │ [Enviar] │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## Notas Técnicas - WebSocket para comunicación bidireccional - Implementar debounce en input (500ms) - Guardar mensaje en DB antes de enviar a LLM - Timeout de respuesta: 60 segundos - Reconexión automática de WebSocket --- ## Dependencias - RF-LLM-001.1: Envío de Mensajes - RF-LLM-001.2: Streaming de Respuestas - ET-LLM-001: Arquitectura del Chat --- ## Definición de Done - [ ] Código implementado y revisado - [ ] Tests unitarios (>80% coverage) - [ ] Tests E2E para flujo completo - [ ] Documentación actualizada - [ ] QA aprobado - [ ] Desplegado en staging --- *Historia de usuario - Sistema NEXUS* *Trading Platform*