Pular para conteúdo

Dashboard local

scripts/dashboard.py inicia o emulador FastAPI com um contexto moto de processo inteiro, cria a tabela DynamoDB em memória e executa Uvicorn. Não exige Docker, DynamoDB Local nem conta AWS para esse armazenamento. O chat usa o LLM configurado e pode chamar OpenAI real; adapters HTTP habilitados também podem produzir efeitos externos.

Iniciar e verificar

Faça o setup Python e configure o .env local com credenciais fora do Git. Para explorar apenas armazenamento local e chat OpenAI, mantenha WHATSAPP_CLOUD_ENABLED, HUBSPOT_ENABLED, EGESTOR_ENABLED e HANDOFF_NOTIFIER_ENABLED em false.

.\start.bat
Invoke-RestMethod http://localhost:8080/healthz
./start
curl --fail http://localhost:8080/healthz

O resultado esperado do health é {"ok":true}. Esse endpoint comprova somente que o processo HTTP respondeu; não consulta DynamoDB, OpenAI, Meta ou CRM. Abra http://localhost:8080 para as ferramentas de desenvolvimento e http://localhost:8080/atendimento para o fluxo autenticado de operadores.

Para ver o processo e os erros diretamente no terminal, use o ambiente Python ativo:

python scripts/dashboard.py

O runner carrega .env com os.environ.setdefault: variáveis previamente exportadas prevalecem. Configura DEV_UI_ENABLED=true somente se ainda não definido, remove overrides de endpoint DynamoDB que interfeririam no moto, e desliga o reload do Uvicorn para preservar o contexto simulado.

O contexto mock_aws() também alcança outros clientes boto3, como SES e SSM. Ele não bloqueia tráfego HTTP dos providers externos. Resultado de e-mail no contexto moto e entrega real por SES são evidências diferentes; use a CLI de smoke fora do runner para uma validação real autorizada.

Interface e ações

Área Implementação / uso Efeito
Chat POST /chat, formulário phone-input e content Processa síncrono, faz buffer/flush imediato e pode chamar OpenAI/adapters reais
Mídia POST /media Exercita interceptação local e resposta fixa
Live logs GET /dashboard/logs Exibe buffer de logs do processo
Scenarios /dashboard/run-fixture/{name}, /dashboard/run-all-fixtures Replay com respostas gravadas e tabela temporária no moto
Knowledge /dashboard/knowledge/{package_id} GET lê; POST altera CONTENT no arquivo Python do package e tenta recarregar módulo
Prompts /dashboard/prompts/{agent_id} Visualiza prompt; gerenciamento de overrides versionados usa APIs admin separadas
Smokes /dashboard/run-smoke/{target}, /dashboard/run-all-smokes Preflight ou execução real conforme formulário; ver flags de smoke
Atendimento /atendimento Login por WhatsApp, fila colaborativa e envio humano
Admin /admin, /admin/demands, /admin/llm-costs, /admin/alerts Inspeção e ferramentas locais; APIs JSON requerem chave

chat_send() recebe instance-input e cliente-conhecido, mas atualmente ignora os dois parâmetros e infere pelo fluxo/sessão. Não use esses seletores como evidência de que o teste exercitou uma instância específica.

Limpar e encerrar

Clear chat chama POST /dashboard/clear-chat, apaga todos os itens de SESSION#<telefone> e o buffer DEBOUNCE#<telefone>/BUFFER. Isso inclui sessões e histórico nessa partição. Não é um mecanismo completo de apagamento de dados: projeções CRM, demandas e registros com outras PKs não são abrangidos.

POST /admin/reset tenta encerrar a sessão e substitui o ponteiro ativo por <reset>; não apaga todo o histórico. Limpar Live logs esvazia somente o buffer de memória, não arquivos nem CloudWatch. Reiniciar scripts/dashboard.py perde a tabela moto e seus dados.

.\stop.bat
./stop

Com o runner em primeiro plano, Ctrl+C encerra Uvicorn e fecha moto.

Limites operacionais encontrados

DASHBOARD_PORT é respeitada pelo runner (default 8080), mas os scripts start, start.bat e o fallback de stop.bat usam 8080 fixo. stop.bat encerra qualquer processo escutando nessa porta; confirme o processo se a porta foi reutilizada por outro serviço. O runner escuta 0.0.0.0, por isso ferramentas locais podem ficar acessíveis na rede da máquina se o firewall permitir.

Os launchers imprimem um prefixo de OPENAI_API_KEY no console. Use execução direta para evitar essa saída e não compartilhe logs brutos dos launchers. Em Linux, start usa open para abrir o navegador, comando típico do macOS; abra a URL manualmente quando ele não existir.

DEV_UI_ENABLED=false retorna 404 para superfícies de desenvolvimento. /healthz, /atendimento* e /admin/api/* passam pelo gate; as APIs admin mantêm sua própria validação de chave. Conhecimento salvo pela dashboard altera código-fonte: revise o diff e os testes antes de incorporar a alteração.

Testes relevantes: tests/unit/lambdas/test_emulator.py, especialmente chat síncrono, limpeza, fixtures, gate de desenvolvimento e atendimento. Diagnósticos: troubleshooting.