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:getByIdconfirmou ticket #41048 vinculado a maquinajn7fc2d5dd8f1qw340ya092k6d7xjrps, chat habilitado e maquina online.liveChat:getTicketSessionnao tinha sessao ativa antes do teste.- Teste ponta a ponta via Convex:
liveChat:startSession+tickets:postChatMessagecriaram sessao e mensagem.liveChat:checkMachineUpdatesretornouhasActiveSessions=trueeunreadCount=1.liveChat:listMachineMessagesretornou a nova mensagem.POST /api/machines/chat/pollconfirmou o mesmo unread.
- Traefik (VPS): nao ha chamadas do desktop para
/api/machines/chat/*nemraven-chat/1.0nas ultimas horas. - Logs locais do desktop:
raven-agent.logsem entradas[CHAT DEBUG].app.logsemchat: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 usarbaseUrleconvexUrl(camelCase). - Tornado
open_chat_windoweopen_hub_windowassíncronos, executando emspawn_blockingpara 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.tsxapps/desktop/src-tauri/src/lib.rsapps/desktop/src-tauri/src/chat.rsapps/desktop/src/chat/ChatWidget.tsx
Testes recomendados
bun run lintbun testbun run build:bun
Validacao operativa (pos-build)
- Abrir o Raven com a maquina online.
- Enviar mensagem no ticket #41048.
- Confirmar em
raven-agent.loga sequencia[CHAT DEBUG] Iniciando sistema de chate eventoschat:startedemapp.log. - Verificar no Traefik chamadas
/api/machines/chat/pollou conexoes WS do Convex com originhttp://tauri.localhost.