51 lines
3.1 KiB
Markdown
51 lines
3.1 KiB
Markdown
# 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`.
|