Commit Graph

134 Commits

Author SHA1 Message Date
VPS 4 Builder d7e0d4c4b7 docs: add custom domains and CNAME routing architecture specification 2026-05-18 00:01:44 +02:00
VPS 4 Builder 4aedead859 docs: update staging protocol with label filters and deploy roadmaps 2026-05-17 23:57:33 +02:00
Rui 2ef5037a71 docs: add centralized Gitea governance, project SSH remotes and unified features at user level 2026-05-17 20:38:01 +02:00
Rui 7e177d8252 docs: document priority context loading from RAM memory injected via API REST in Doutrina and Protocolo 2026-05-17 09:51:40 +02:00
Rui 9929d2e25b docs: enforce wiki versioning check during agent startup in protocolo_agentes 2026-05-17 09:42:35 +02:00
Rui beeea9bab4 docs: add new project auto-config protocol to doutrina_agentes 2026-05-17 09:38:03 +02:00
Rui abb92ad7a0 docs: add Pilar 6 for network micro-segmentation to seguranca_deploy_user 2026-05-17 09:17:53 +02:00
Rui 9699f59d42 docs: add Pilar 5 for terminal history wiping security to seguranca_deploy_user 2026-05-17 09:06:01 +02:00
Rui 6a7f4e2395 feat: implement JIT dynamic Doutrina loading from Gitea REST API 2026-05-17 08:57:37 +02:00
Rui f867d0b581 docs: correct VPS 1 and VPS 4 stack preservation mapping and mark obsolete directories 2026-05-17 08:28:45 +02:00
Rui 54ccfdac40 docs: document active VPS 4 stack folders to preserve 2026-05-17 08:24:40 +02:00
Rui 2eec25ab3f docs: formalize static vps identity protocol and agent safety obligations 2026-05-17 04:42:46 +02:00
Rui d7a2e5fc2e feat: integrate static vps identity awareness parser in agent_executor.py 2026-05-17 03:29:41 +02:00
Rui 8d6db6edbb feat: select internal VPN IP for awareness to satisfy compliance filters 2026-05-17 03:21:25 +02:00
Rui 630c1f4b60 feat: switch executor to high-performance, unlimited GPT-4o-mini engine 2026-05-17 03:20:39 +02:00
Rui 6a60d1cd2a feat: implement 429 auto-retry exponential backoff to handle free tier Gemini rate limits 2026-05-17 03:13:45 +02:00
Rui 985c6e9e0a feat: add 3-second API cooldown between turns to avoid Gemini 429 rate limit 2026-05-17 03:12:30 +02:00
Rui 46f6adb464 feat: increase max agent turns to 15 to allow model to conclude and summarize 2026-05-17 03:08:59 +02:00
Rui f50dc35be1 feat: switch agent executor to a zero-dependency Gemini 3 Flash multi-turn tool engine 2026-05-17 03:07:38 +02:00
Rui d92f06fd7f feat: update templates for executor tools, situational awareness and listener execution logic 2026-05-17 03:01:54 +02:00
Rui 5ec50d512a fix: usar urllib para garantir compatibilidade total no feedback 2026-05-16 08:42:47 +02:00
Rui 364a510272 feat: adicionar sistema de feedback por comentário do agente 2026-05-16 08:35:54 +02:00
Rui 9288f1e92b docs: renomear guia de comandos gitea para incluir claude 2026-05-15 06:35:32 +02:00
Rui 965b285b8f docs: adicionar obrigatoriedade de git pull no Passo 1 do protocolo de agentes 2026-05-15 06:05:25 +02:00
Rui 2de529a371 docs(scoreodonto): corrigir stack e fluxo de versionamento host-side no arquitetura.md 2026-05-15 06:01:51 +02:00
VPS 4 Builder 131d4060fb docs(seguranca): documentar incidente daemon Docker root + fix aplicado na VPS 1
- seguranca_deploy_user.md: corrige Pilar 2 — adiciona aviso crítico sobre
  grupo docker em instalações rootless, documenta estado correto da VPS 1 e
  registra incidente de 2026-05-14 com causa raiz e comandos de correção
- scoreodonto/deploy.md: adiciona seção de alerta Docker Duplo com sintoma
  porta 8020 bloqueada por docker-proxy zumbi e diagnóstico/solução
- clube67/arquitetura.md: adiciona regra crítica de Docker Rootless na VPS 1
  com tabela de restrições e verificação de saúde pós-manutenção

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 22:34:03 +02:00
VPS 4 Builder bcb7c3d856 docs(scoreodonto): adiciona guia completo de deploy e versionamento 2026-05-14 21:04:18 +02:00
Rui 29e959809d docs(clube67): alinhar regras de versionamento automatico (+1) e contexto Docker com o padrao da infraestrutura 2026-05-14 06:57:37 +02:00
Rui 5a6c598413 docs(scoreodonto): documentar regras de contexto de build Docker e comportamento efemero do contador de versao 2026-05-14 06:56:16 +02:00
Rui 50b29bf471 docs(scoreodonto): adicionar regra compulsoria de incremento automatico de versao no package.json 2026-05-14 04:33:53 +02:00
Rui 30c5c7a569 refactor: limpeza de testes, reestruturacao multi-tenant e auto-cura scoreodonto 2026-05-13 09:26:35 +02:00
Rui b7541eb248 docs(protocolo): adiciona governança de alteração estrutural e idioma português 2026-05-12 06:22:51 +02:00
VPS 4 Deploy Agent b9b094fb62 chore(deploy): bump version 2026-05-12 06:17:37 +02:00
Rui 599d8339ef docs: adiciona guia de auto-cura à wiki 2026-05-12 06:15:32 +02:00
VPS 4 Deploy Agent c0af1bc9b8 chore(deploy): bump version 2026-05-12 05:37:25 +02:00
VPS 4 Deploy Agent cabf9180f0 fix(secretaria): SEC-06/07/14 — provider OpenAI, telemetria e digitando...
SEC-06: ChatbotService reescrito com abstração aiCall() que despacha para
  GEMINI ou OPENAI baseado em bot.credential.provider. Fallback automático:
  se o provider primário falha (quota, rate limit), tenta a próxima credencial
  da instância com provider diferente.

SEC-07: Divergência entre LLMProvider Prisma (GEMINI/OPENAI) e Secretária
  (gemini/openai/anthropic/ollama) documentada com comentário explícito no
  topo do service. Chatbot Rápido é intencionalmente mais simples.

SEC-13 (bônus): logger.info no ChatbotService agora inclui inputTokens e
  outputTokens por chamada para observabilidade de consumo.

SEC-14: sendPresenceUpdate('composing', jid) antes de chamar a IA e
  sendPresenceUpdate('paused', jid) após enviar a resposta — tanto no
  ChatbotService quanto no listener ext:message.new da Secretária.
  O usuário no WhatsApp vê "digitando..." enquanto a IA processa.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 05:35:45 +02:00
VPS 4 Deploy Agent f8c0a0ea52 chore(deploy): bump version 2026-05-12 05:31:26 +02:00
VPS 4 Deploy Agent fc37a54376 fix(secretaria): corrige 7 inconsistências do issue #14
SEC-01+SEC-11: /secretaria/ask agora envia reply via WhatsApp (sock.sendMessage)
  e persiste a mensagem no banco Prisma após brain.chat(), com notify Socket.IO.

SEC-02+SEC-03: MessageHandler emite hookBus 'ext:message.new' para todo msg
  recebido. Listener no ext-api auto-dispara a Secretária apenas se NÃO
  houver AIBot ativo na instância (exclusão mútua — chatbot tem prioridade).

SEC-04: ChatListItem exibe ícone BotOff (âmbar) quando chat.bot_paused = true,
  com tooltip "Bot pausado — aguardando atendente".

SEC-05: chatToLegacy() mapeia c.botPaused → bot_paused na bridge legada.
  NewWhatsChat recebe campo bot_paused opcional.

SEC-08: POST /secretaria/ask valida que existe instância CONNECTED antes
  de criar conversa. Retorna 503 se nenhuma instância disponível.

SEC-10: POST /api/chatbot/bots/:instanceId valida que credentialId pertence
  ao mesmo tenantId antes de criar o bot. Retorna 403 se não pertencer.

SEC-12: chatBotState.resumeBot() limpa botSummary (= null) ao retomar,
  evitando contexto defasado após escalação humana.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 05:29:29 +02:00
VPS 4 Deploy Agent 5f23c51e17 chore(deploy): bump version 2026-05-12 05:19:08 +02:00
VPS 4 Deploy Agent e6a1ab9af5 fix(soc): trazer configs do Grafana/Promtail para o git e corrigir volumes
- Adiciona soc/promtail/config.yml (antes fora do git, em /opt/soc/)
- Adiciona soc/grafana/provisioning/alerting/alerts.yml (antes fora do git)
- Adiciona soc/grafana/provisioning/datasources/datasources.yml (antes fora do git)
- Corrige docker-compose.yml: volumes do Promtail e Grafana agora apontam
  para paths dentro do repo (/home/deploy/stack/soc/) ao invés de /opt/soc/
- Corrige mount dos containers Docker: host path mapeia para /var/lib/docker/containers
  (path padrão que o Promtail espera dentro do container)
- Corrige .gitignore: ignora apenas dados binários (grafana-data, loki-data, prom-data),
  não mais todos os subdiretórios do soc/
- Alertas Loki usam count_over_time() para retornar métrica numérica compatível
2026-05-12 05:16:21 +02:00
VPS 4 Deploy Agent 7e1591303a chore(deploy): bump version 2026-05-12 05:04:18 +02:00
VPS 4 Deploy Agent bff325f193 feat(soc): add Docker container log collection to Promtail + app alert rules
- Mount rootless Docker socket and container log path into Promtail so it
  can discover and tail all application container logs via docker_sd_configs
- Add 3 application-level Grafana alert rules targeting newwhats-backend-prod:
  - BACKEND - Exceção Não Tratada (unhandledRejection, TypeError, etc.)
  - BACKEND - Colisão Prisma P2002 (unique constraint violations)
  - BACKEND - Erros HTTP 5xx (5xx response codes)
- Wire default notification policy to gitea-bridge (was routing to "empty")
- Full self-healing pipeline now covers: infra alerts + application runtime errors

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 05:02:04 +02:00
VPS 4 Deploy Agent 2f906b1d40 chore(deploy): bump version 2026-05-12 03:59:59 +02:00
VPS 4 Deploy Agent 12268c24ab fix(history): salva mediaPayload em processHistoryBatch + recupera msgs antigas
processHistoryBatch não incluía mediaPayload no createMany, tornando
impossível o re-download de mídias recebidas via history sync (que é a
maioria das mensagens ao reconectar a sessão).

1. Inclui mediaPayload no objeto de cada row para mensagens de mídia.
2. Após o createMany, dispara updateMany para preencher mediaPayload em
   registros que já existiam no DB com o campo null (mensagens antigas
   recebidas antes desta correção), sem bloquear o event loop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:58:13 +02:00
VPS 4 Deploy Agent 1efc0ab1d1 chore(deploy): bump version 2026-05-12 03:33:56 +02:00
VPS 4 Deploy Agent 4efa6fb2f2 fix(media): aplica estado 'não disponível' a imagem, vídeo, documento e sticker
Estende o tratamento de erro 400/404 do redownload para todos os tipos
de mídia. Quando mediaUnavailable=true (payload ausente no backend),
cada tipo exibe sua mensagem específica e desabilita o clique:
- Imagem: 'Imagem não disponível'
- Vídeo: 'Vídeo não disponível'
- Documento: 'Arquivo não disponível' + cursor-default
- Sticker: 'Figurinha não disponível'
DocumentBubble recebe nova prop mediaUnavailable para controle interno.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:32:02 +02:00
VPS 4 Deploy Agent a3c78aed8c chore(deploy): bump version 2026-05-12 03:28:29 +02:00
VPS 4 Deploy Agent 5fb9a8f34a fix(audio): trata erro 400/404 no redownload com estado 'Áudio não disponível'
Mensagens antigas sem mediaPayload retornam 400 do backend (sem como
re-solicitar ao WhatsApp). O erro agora é capturado em handleRedownload,
que seta mediaUnavailable=true — o botão fica desabilitado e exibe
'Áudio não disponível' em vez de explodir com Uncaught (in promise).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:26:29 +02:00
VPS 4 Deploy Agent 0af0eba663 chore(deploy): bump version 2026-05-12 03:22:07 +02:00
VPS 4 Deploy Agent 634426ed15 fix(audio): corrige redownload de áudio + move botão de velocidade antes do waveform
1. MessageArea: handleRedownloadMedia usava selectedChat?.instanceId (undefined
   no formato legado) — substituído por instance_name ?? instanceId. O clique
   em 'Toque para baixar áudio' agora chama o backend corretamente.

2. MessageBubble/AudioBubble: botão de velocidade (1×/1.5×/2×) movido para
   entre o botão play e as barras do waveform, conforme layout do WhatsApp.
   A linha inferior agora exibe apenas o tempo decorrido.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:19:48 +02:00