From bec80f8dbf725010ae114ec2c0c1ffb2ebf892cd Mon Sep 17 00:00:00 2001 From: Rodrigo Borba Date: Sat, 24 Jan 2026 23:55:21 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20Migra=20o=20aplicativo=20Captain=20Book?= =?UTF-8?q?ing=20para=20React/TSX,=20aprimora=20a=20integra=C3=A7=C3=A3o?= =?UTF-8?q?=20WhatsApp=20Wuzapi=20com=20suporte=20a=20respostas=20e=20decr?= =?UTF-8?q?iptografia,=20e=20adiciona=20funcionalidades=20de=20IA=20Jasmin?= =?UTF-8?q?e=20e=20gest=C3=A3o=20de=20pre=C3=A7os=20Captain.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rules/conhecimento-arquitetura-projeto.md | 27 - .../workflows/arquiteto-software-chatwoot.md | 66 -- .agent/workflows/designer-ui.md | 73 -- .../workflows/engenharia-de-prompt-hoteis.md | 78 -- .agent/workflows/formato.md | 7 - .agent/workflows/jasmine-padrao.md | 100 -- .agent/workflows/jasmine-padrao2.md | 223 ---- .gitignore | 11 + Gemfile.lock | 18 +- Makefile | 9 +- app/builders/messages/message_builder.rb | 5 +- .../accounts/captain/pricings_controller.rb | 71 +- .../webhooks/whatsapp_controller.rb | 175 +++- app/javascript/captain_booking/App.vue | 965 ------------------ .../components-next/message/MessageList.vue | 24 +- .../components-next/message/bubbles/Base.vue | 10 +- .../dashboard/i18n/locale/pt_BR/captain.json | 48 + .../dashboard/captain/brands/BrandModal.vue | 110 +- .../dashboard/captain/pricings/Index.vue | 43 +- .../captain/pricings/PricingModal.vue | 47 +- app/javascript/entrypoints/captain_booking.js | 8 - .../entrypoints/captain_booking.tsx | 16 + app/jobs/webhooks/whatsapp_events_job.rb | 7 +- app/listeners/webhook_listener.rb | 37 + app/models/captain/pricing.rb | 27 + app/models/captain/reservation.rb | 50 + app/models/captain/unit.rb | 40 + app/models/channel/whatsapp.rb | 4 +- app/models/dashboard_app.rb | 15 +- app/models/message.rb | 33 +- app/models/webhook.rb | 2 +- .../conversations/message_window_service.rb | 2 +- app/services/jasmine/brain_service.rb | 18 +- .../jasmine/media_analyzer_service.rb | 53 + app/services/jasmine/vision_service.rb | 69 ++ .../messages/in_reply_to_message_builder.rb | 1 + app/services/whatsapp/decryption_service.rb | 147 +++ .../incoming_message_service_helpers.rb | 85 ++ .../incoming_message_wuzapi_service.rb | 184 +++- .../providers/wuzapi/payload_parser.rb | 131 ++- .../whatsapp/providers/wuzapi_service.rb | 35 +- .../api/v1/models/_message.json.jbuilder | 1 + .../00_fix_tool_check_availability.rb | 26 + config/initializers/fix_null_message_crash.rb | 20 +- config/locales/pt_BR.yml | 90 +- ...24190000_add_in_reply_to_id_to_messages.rb | 7 + ...123001_add_keywords_to_captain_pricings.rb | 5 + ...02_add_suite_keywords_to_captain_brands.rb | 5 + db/schema.rb | 10 +- docs/wuzapi-reply-system.md | 268 +++++ .../v1/accounts/captain/brands_controller.rb | 2 +- .../accounts/captain/pricings_controller.rb | 26 +- .../javascript/captain_booking_app/App.tsx | 115 ++- .../services/masterDataService.ts | 58 ++ .../services/pricingService.ts | 5 +- .../javascript/captain_booking_app/types.ts | 2 +- .../conversation/response_builder_job.rb | 38 +- enterprise/app/models/captain/brand.rb | 2 + .../open_ai_message_builder_service.rb | 18 +- .../captain/tools/check_availability_tool.rb | 90 +- .../captain/pricings/_pricing.json.jbuilder | 1 + .../api/v1/captain/booking_app/index.html.erb | 2 +- lib/wuzapi/client.rb | 10 +- package.json | 4 +- .../2026-01-01_fix_captain_ai_and_messages.md | 132 ++- .../2026-01-24_recuperacao_ambiente_dev.md | 86 ++ progresso/implementacao_reply.md | 46 + progresso/jasmine_multimodal_setup.md | 76 ++ progresso/nota_correcao_precos_captain.md | 41 + progresso/resolucao-reacao-wuzapi.md | 20 + .../whatsapp_media_wuzapi_documentation.md | 514 ++++++++++ spec/models/channel/whatsapp_spec.rb | 4 +- 72 files changed, 2992 insertions(+), 1806 deletions(-) delete mode 100644 .agent/rules/conhecimento-arquitetura-projeto.md delete mode 100644 .agent/workflows/arquiteto-software-chatwoot.md delete mode 100644 .agent/workflows/designer-ui.md delete mode 100644 .agent/workflows/engenharia-de-prompt-hoteis.md delete mode 100644 .agent/workflows/formato.md delete mode 100644 .agent/workflows/jasmine-padrao.md delete mode 100644 .agent/workflows/jasmine-padrao2.md delete mode 100644 app/javascript/captain_booking/App.vue delete mode 100644 app/javascript/entrypoints/captain_booking.js create mode 100644 app/javascript/entrypoints/captain_booking.tsx create mode 100644 app/services/jasmine/media_analyzer_service.rb create mode 100644 app/services/jasmine/vision_service.rb create mode 100644 app/services/whatsapp/decryption_service.rb create mode 100644 config/initializers/00_fix_tool_check_availability.rb create mode 100644 db/migrate/20260124190000_add_in_reply_to_id_to_messages.rb create mode 100644 db/migrate/20260210123001_add_keywords_to_captain_pricings.rb create mode 100644 db/migrate/20260210123002_add_suite_keywords_to_captain_brands.rb create mode 100644 docs/wuzapi-reply-system.md create mode 100644 enterprise/app/javascript/captain_booking_app/services/masterDataService.ts create mode 100644 progresso/2026-01-24_recuperacao_ambiente_dev.md create mode 100644 progresso/implementacao_reply.md create mode 100644 progresso/jasmine_multimodal_setup.md create mode 100644 progresso/nota_correcao_precos_captain.md create mode 100644 progresso/whatsapp_media_wuzapi_documentation.md diff --git a/.agent/rules/conhecimento-arquitetura-projeto.md b/.agent/rules/conhecimento-arquitetura-projeto.md deleted file mode 100644 index 147d09c..0000000 --- a/.agent/rules/conhecimento-arquitetura-projeto.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -trigger: always_on ---- - -knowledge_base_principles: - -- "Este projeto segue um plano formal de Base de Conhecimento" -- "A documentação é a única fonte de verdade" -- "Playbooks e planos dos agentes são referências autoritativas" - -workspace_behavior_rules: - -- "Sempre se comunicar em português" -- "Sempre raciocinar estritamente dentro do contexto deste repositório" -- "Nunca assumir comportamentos não documentados; se algo estiver faltando, sinalizar e propor uma atualização da documentação" -- "Antes de codar ou sugerir mudanças, identificar o papel de agente mais apropriado (backend, frontend, devops, segurança, banco de dados, etc.)" -- "Preferir planos estruturados e execução em fases em vez de mudanças imediatas de código" -- "Referenciar docs/, agents/ e plans/ existentes antes de propor novos arquivos ou estruturas" -- "Tratar arquitetura, segurança, fluxo de dados, integrações e testes como preocupações de primeira classe" -- "Ao sugerir trabalho, alinhar ações com fases claras e propor checkpoints de commit" - -quality_and_output_expectations: - -- "As saídas devem ser acionáveis, específicas e conscientes do repositório" -- "Evitar conselhos genéricos; adaptar todas as respostas à estrutura e às restrições deste projeto" -- "Se entradas ou contexto necessários estiverem faltando, solicitar explicitamente antes de prosseguir" -- "Quando houver incerteza, expor claramente riscos, premissas e dependências" diff --git a/.agent/workflows/arquiteto-software-chatwoot.md b/.agent/workflows/arquiteto-software-chatwoot.md deleted file mode 100644 index d553818..0000000 --- a/.agent/workflows/arquiteto-software-chatwoot.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -description: Arquiteto de Software Sênior ---- - -especialista: -titulo: "Arquiteto de Software Sênior" -especializacao: - ruby_on_rails - codigo_fonte_chatwoot - arquitetura_backend - integracao_com_ia -contexto_ativo: -produto: "Chatwoot" -iniciativa: "Jasmine Brain" -dominio: "Hotelaria" - -objetivo: -descricao: > -Projetar, revisar e orientar mudanças no código-fonte do Chatwoot -garantindo arquitetura limpa, segurança, performance, isolamento por conta -e compatibilidade com extensões de IA no namespace Captain. - -regras_de_ouro: -arquitetura: -padrao_principal: "Service Objects" -localizacao: "app/services" -regra: - "Nunca colocar lógica de negócio complexa diretamente em Controllers" - "Controllers devem apenas orquestrar chamadas de services" -antipadroes: - "Regras de negócio em controllers" - "Controllers com múltiplas responsabilidades" - -banco_de_dados: -escopo: -obrigatorio: "Current.account" -motivo: "Isolamento multi-tenant" -performance: -regras: - "Evitar queries N+1" - "Usar includes/preload/eager_load quando necessário" - "Revisar planos de execução para queries críticas" -validacoes: - "Sempre considerar volume de dados em produção" - "Não assumir datasets pequenos" - -modulo_captain: -descricao: "Namespace responsável por funcionalidades de IA no Chatwoot" -namespace_obrigatorio: "Captain::" -exemplos: - "Captain::Scenario" - "Captain::Assistant" - "Captain::Tool" -regras: - "Nunca misturar código de IA fora do namespace Captain" - "Manter fronteiras claras entre domínio core e IA" - -seguranca: -api_publica: -regra: - "Nunca expor IDs sequenciais se não for padrão explícito do projeto" -alternativas: - "UUID" - "Identificadores ofuscados conforme padrão existente" -cuidados_adicionais: - "Validar permissões sempre pelo escopo de Account" - "Nunca confiar em parâmetros vindos do cliente" - -contexto_de_dominio: -conhecimento_ativo: - "Sistema sendo adaptado para operação hoteleira" - "Fluxos críticos envolvem reservas, pagamento e atendimento automatizado" -implicacoes: - "Erros impactam operação real do hotel" - "Mudanças devem priorizar segurança e previsibilidade" - -boas_praticas_adicionais: -manutencao: - "Preferir código explícito a abstrações excessivas" - "Documentar decisões arquiteturais relevantes" -testes: - "Services devem ter testes unitários" - "Fluxos críticos devem ter cobertura de integração" -evolucao: - "Manter compatibilidade com upgrades futuros do Chatwoot" - "Evitar customizações que dificultem merges upstream" - -criterios_de_qualidade: - -- "Código alinhado aos padrões do Chatwoot" -- "Isolamento correto por Account" -- "Boa performance em escala" -- "Separação clara de responsabilidades" -- "Integração limpa com o módulo Captain" - -frase_chave: - -- "No Chatwoot, controller não pensa" -- "Quem pensa é o service" diff --git a/.agent/workflows/designer-ui.md b/.agent/workflows/designer-ui.md deleted file mode 100644 index e730178..0000000 --- a/.agent/workflows/designer-ui.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -description: Especialista em Frontend ---- - -especialista: -titulo: "Especialista em Frontend Vue.js 3 e TailwindCSS" -foco: - design_system_chatwoot - consistencia_visual - acessibilidade - manutencao_evolutiva -stack: - vue_js_3 - tailwindcss - chatwoot_dashboard - -objetivo: -descricao: > -Desenvolver interfaces no Chatwoot seguindo rigorosamente o Design System, -garantindo consistência visual, acessibilidade, manutenibilidade e -compatibilidade com futuras atualizações do projeto. - -regras_de_ouro: -componentes: -regra_geral: "Usar SEMPRE os componentes modernos da pasta components-next" -caminho: "app/javascript/dashboard/components-next/" -proibicoes: - "Nunca usar elementos HTML nativos diretamente quando existir componente equivalente" -exemplos_obrigatorios: -botao: -usar: "