3.2 KiB
3.2 KiB
Debug: "User typing..." Detection
🔍 Análisis del Problema
Cuando tú escribes, aparecen logs pero no se muestra "User typing..." en pantalla. Hay 3 sistemas diferentes que pueden detectar typing:
1. Frontend Timeout System (AgentsPage.js)
// Después de mensaje de Assistant → 30s timeout → "User typing..."
this.checkForUserTyping(conversationId);
2. Backend File Activity (FileWatcher.js)
// Detecta cambios en ~/.claude/projects/*/conversation.jsonl
this.checkForTypingActivity(conversationId, filePath);
3. Backend State Calculator (StateCalculator.js)
// Lógica temporal basada en tiempo transcurrido
return 'User typing...';
🧪 Test de Debug
Paso 1: Verificar Logs en Consola del Navegador
Abre DevTools (F12) → Console y busca:
🔍 Checking typing for [conversationId]: Xs since last message
⏰ 30s timeout triggered for [conversationId]
✍️ FRONTEND: Setting User typing state for [conversationId]
Paso 2: Verificar Logs del Server
En la terminal donde corre npm run analytics:start, busca:
✍️ Potential typing activity detected for [conversationId]
📨 Handling conversation change: [conversationId]
Paso 3: Verificar Estado Actual
En consola del navegador, ejecuta:
// Ver estado actual del conversation banner
document.querySelector('#state-text').textContent
// Ver timeouts activos
window.app.components.agents.typingTimeouts.size
// Ver último tiempo de mensaje
window.app.components.agents.lastMessageTime
🔧 Test Manual
- Envía un mensaje como usuario → Banner debe mostrar "Claude Code working..."
- Claude responde → Banner debe mostrar estado basado en contenido
- Espera 30 segundos SIN escribir nada → Banner debe cambiar a "User typing..."
- Empieza a escribir → Verifica logs en ambos lados
- Envía mensaje → Banner debe cambiar inmediatamente a "Claude Code working..."
🐛 Posibles Problemas
A. Estados Sobrescritos
- Backend StateCalculator puede estar sobrescribiendo estado frontend
- WebSocket
conversation_state_changepuede resetear el estado
B. Timing Conflicts
- Frontend timeout (30s) vs Backend file detection (2s)
- Múltiples fuentes de verdad para el mismo estado
C. Conversation Selection
- Estado solo se muestra si
this.selectedConversationId === conversationId - Verificar que la conversación correcta está seleccionada
🔍 Debug Steps Agregados
Agregué logs específicos:
console.log('⏱️ Setting 30s timeout for typing detection: ${conversationId}');
console.log('⏰ 30s timeout triggered for ${conversationId}');
console.log('🔍 Checking typing for ${conversationId}: ${timeSinceLastMessage}s');
console.log('✍️ FRONTEND: Setting User typing state for ${conversationId}');
▶️ Próximos Pasos
- Ejecuta nuevamente
npm run analytics:start - Haz una conversación con Claude
- Espera 30+ segundos después de que Claude responda
- Verifica logs tanto en navegador como en terminal
- Reporta qué logs ves y si aparece el estado
¿Qué logs específicos estás viendo cuando escribes?