# Diagnostico — Chat do desktop (2025-12-19) ## Contexto Relato de instabilidade no chat do desktop (Raven): mensagens enviadas pela web nao chegavam ao app, e com multiplas sessoes a janela travava/nao abria. ## Evidencias coletadas - `tickets:getById` confirmou ticket #41048 vinculado a maquina `jn7fc2d5dd8f1qw340ya092k6d7xjrps`, chat habilitado e maquina online. - `liveChat:getTicketSession` nao tinha sessao ativa antes do teste. - Teste ponta a ponta via Convex: - `liveChat:startSession` + `tickets:postChatMessage` criaram sessao e mensagem. - `liveChat:checkMachineUpdates` retornou `hasActiveSessions=true` e `unreadCount=1`. - `liveChat:listMachineMessages` retornou a nova mensagem. - `POST /api/machines/chat/poll` confirmou o mesmo unread. - Traefik (VPS): nao ha chamadas do desktop para `/api/machines/chat/*` nem `raven-chat/1.0` nas ultimas horas. - Logs locais do desktop: - `raven-agent.log` sem entradas `[CHAT DEBUG]`. - `app.log` sem `chat:started`. - Com duas sessoes ativas, o log parou em: - `[CMD] open_chat_window called...` - `[WINDOW] ... build() inicio` - sem `build() OK` / `open_chat_window result`, indicando travamento na criacao da janela quando chamada via comando. ## Causa raiz O desktop nao estava iniciando o runtime de chat. Em `apps/desktop/src/main.tsx`, o `invoke("start_chat_polling", ...)` enviava `base_url` e `convex_url` em snake_case. No Tauri v2, o mapeamento esperado e camelCase (`baseUrl`, `convexUrl`). Com isso, o comando falha na desserializacao dos args e o chat nao inicia (sem polling/WebSocket), resultando em nenhuma mensagem chegando ao app. Em cenarios com multiplas sessoes, a abertura do segundo chat via hub usa o comando `open_chat_window` (JS). Esse comando era sincrono e rodava no thread principal; ao criar uma nova janela (`WebviewWindowBuilder::build`), a execucao travava e a janela nao concluia o build, congelando o chat no desktop. ## Correcoes aplicadas - Ajustado `invoke("start_chat_polling")` para usar `baseUrl` e `convexUrl` (camelCase). - Tornado `open_chat_window` e `open_hub_window` assíncronos, executando em `spawn_blocking` para evitar bloqueio do thread principal ao criar novas janelas de chat. - Quando o chat esta aberto e no fim da conversa, o desktop marca automaticamente mensagens como lidas (evita badge preso). - Ao abrir um chat (foco), outras janelas de chat sao ocultadas e o hub e escondido para evitar sobreposicao. - Ao minimizar um chat, outras janelas de chat abertas sao ocultadas automaticamente. ## Arquivos alterados - `apps/desktop/src/main.tsx` - `apps/desktop/src-tauri/src/lib.rs` - `apps/desktop/src-tauri/src/chat.rs` - `apps/desktop/src/chat/ChatWidget.tsx` ## Testes recomendados - `bun run lint` - `bun test` - `bun run build:bun` ## Validacao operativa (pos-build) 1. Abrir o Raven com a maquina online. 2. Enviar mensagem no ticket #41048. 3. Confirmar em `raven-agent.log` a sequencia `[CHAT DEBUG] Iniciando sistema de chat` e eventos `chat:started` em `app.log`. 4. Verificar no Traefik chamadas `/api/machines/chat/poll` ou conexoes WS do Convex com origin `http://tauri.localhost`.