# 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
bun run 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 2–3 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.
