sistema-de-chamados/docs/historico-agente-desktop-2025-10-10.md

100 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Histórico — Agente Desktop (Tauri) — 2025-10-10
> Registro consolidado do que foi feito no app desktop, problemas encontrados, diagnósticos e próximos passos. Complementa `docs/plano-app-desktop-maquinas.md` e `apps/desktop/README.md`.
## Resumo do que mudou
- UI mais "shadcn-like" sem Tailwind (apenas CSS): tema claro forçado, card com sombras suaves, labels fortes, helper text opcional e estados de foco com ring.
- Campo "Código de provisionamento" com botão de visibilidade (olhinho) sem dependências extras.
- Cards de inventário na visão inicial (CPU, Memória, Sistema e Discos) e grid simplificada.
- Feedback de erro aprimorado no registro: exibe status HTTP e detalhes retornados pelo servidor.
- Botão "Abrir sistema" passou a abrir o navegador padrão (plugin opener) em vez de navegar dentro da WebView.
- Corrigidas permissões do plugin Store no Tauri v2 (antes: `store.load not allowed`).
## Arquivos alterados
- `apps/desktop/index.html:1`
- Força tema claro com `<meta name="color-scheme" content="light">` e estrutura do card.
- `apps/desktop/src/styles.css:1`
- Estilos do card, inputs, input-group, ícones, tabs e summary cards (visual shadcn-like sem Tailwind). Remove dark overrides.
- `apps/desktop/src/main.ts:3`
- Importa `openUrl` do plugin opener e usa para abrir o handshake no navegador padrão.
- `apps/desktop/src/main.ts:640`
- Tratamento de erros no registro com exibição de `status` e `details` quando o servidor retorna JSON/texto.
- `apps/desktop/src/main.ts:694`
- Função `redirectToApp` para abrir `APP_URL/machines/handshake?token=...` via `openUrl`, com fallback para `window.location.replace`.
- `apps/desktop/src-tauri/capabilities/default.json:1`
- Adicionadas permissões: `store:default`, `store:allow-load`, `store:allow-get`, `store:allow-set`, `store:allow-save`, `store:allow-delete` e `opener:default`.
## Como rodar (Windows, dev)
1) Garantir `.env` do desktop em `apps/desktop/.env`:
```
VITE_APP_URL=https://tickets.esdrasrenan.com.br
VITE_API_BASE_URL=https://tickets.esdrasrenan.com.br
```
2) Rodar dev:
```
cd apps\desktop
pnpm tauri dev
```
3) Provisionar:
- Usar o botão de olho para conferir o segredo, sem espaços.
- Deixar `Tenant` e `Empresa (slug)` vazios para o primeiro teste.
- Ao concluir, o app abre o navegador em `/machines/handshake?token=...`.
Referências úteis:
- Defaults/URLs do app: `apps/desktop/src/main.ts:75`
- Handshake na web: `src/app/machines/handshake/route.ts:1`
- Endpoint de registro: `src/app/api/machines/register/route.ts:1`
## Diagnósticos e soluções aplicadas
- Erro na Store (Tauri v2):
- Sintoma: `store.load not allowed` nos logs do DevTools.
- Causa: permissões do plugin Store ausentes.
- Ação: adicionar permissões em `apps/desktop/src-tauri/capabilities/default.json:1`.
- Erro 500 durante registro com empresa:
- Mensagem: `ConvexError: Empresa não encontrada para o tenant informado`.
- Causa: slug inválido em `Empresa (slug)`.
- Ação: validar com slug correto (Admin > Empresas & Clientes) ou registrar sem empresa.
- Observação: hoje o endpoint mapeia como 500 genérico; ver "Pendências" para remapear para 400/404.
- Redirecionando para `localhost` após registro:
- Causa: configuração antiga salva no Store (primeira tentativa em dev) ou navegação dentro da WebView.
- Ações:
- Abrir no navegador padrão com `openUrl` (`apps/desktop/src/main.ts:694`).
- Se necessário, limpar Store via botão "Reprovisionar" (Configurações) ou removendo o arquivo `machine-agent.json` no diretório de dados do app.
- Mensagem de erro genérica no desktop:
- Antes: "Erro desconhecido ao registrar a dispositivo".
- Agora: exibe `Falha ao registrar dispositivo (STATUS): mensagem — detalhes` (quando disponíveis), facilitando diagnóstico.
## Provisionamento — segredo e boas práticas
- Variável: `MACHINE_PROVISIONING_SECRET` (VPS/Convex backend).
- Rotina de giro (secret exposto foi mostrado no chat):
1. Gerar novo segredo (ex.: `openssl rand -hex 32`).
2. Aplicar no serviço Convex (Swarm) e forçar redeploy:
```
docker service update --env-add MACHINE_PROVISIONING_SECRET='NOVO_HEX' sistema_convex_backend
docker service update --force sistema_convex_backend
```
3. Validar com `POST /api/machines/register` (esperado 201).
- Dispositivos já registradas não são afetadas (token delas continua válido).
## Pendências e próximos passos
- Mapear erros "esperados" para HTTP adequado no web (Next):
- Em `src/app/api/machines/register/route.ts:1`, detectar `ConvexError` conhecidos (empresa inválida, token inválido, etc.) e responder `400`/`404` em vez de `500`.
- Validar UX do botão "Abrir sistema":
- Confirmar que sempre abre no navegador padrão em produção (capability `opener:default` já presente).
- Polimento visual adicional (opcional):
- Botões com variações de cor/hover mais fiéis ao `/login`.
- Trocar ícones emoji por SVGs minimalistas.
- Métricas de CPU no agente (suavização):
- Avaliar média de 23 amostras no lado Rust antes de reportar a primeira leitura (Task Manager-like).
- Documentar re-provisionamento manual do Store por SO (paths exatos) no `apps/desktop/README.md`.
## Checklist rápido de verificação (QA)
- `.env` do desktop contém apenas `VITE_APP_URL` e `VITE_API_BASE_URL` apontando para produção.
- Primeiro registro sem empresa retorna 201 e aparece "Dispositivo provisionada" nas abas.
- "Ambiente" e "API" em Configurações exibem `https://tickets.esdrasrenan.com.br`.
- "Abrir sistema" abre o navegador com `/machines/handshake?token=...` e loga a dispositivo.
- Reprovisionar limpa a Store e volta ao formulário inicial.
---
Dúvidas/sugestões: ver `agents.md` para diretrizes gerais e `docs/desktop-build.md` para build de binários.