sistema-de-chamados/docs/diagnostico-chat-desktop-2025-12-19.md
rever-tecnologia 0a0f722bd8
All checks were successful
CI/CD Web + Desktop / Detect changes (push) Successful in 7s
CI/CD Web + Desktop / Deploy (VPS Linux) (push) Successful in 3m41s
CI/CD Web + Desktop / Deploy Convex functions (push) Has been skipped
Quality Checks / Lint, Test and Build (push) Successful in 4m5s
Melhora UX do chat no desktop
2025-12-18 23:53:24 -03:00

3.1 KiB

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.