From 2a144cb2f18895c2dfe9874657abb6b394c3324c Mon Sep 17 00:00:00 2001 From: Rodrigo Borba Date: Mon, 19 Jan 2026 19:26:23 -0300 Subject: [PATCH] ajustes gerais e novas funcionalidades --- .../rules/conhecimento-arquitetura-projeto.md | 37 +- .../workflows/arquiteto-software-chatwoot.md | 66 +++ .agent/workflows/designer-ui.md | 73 ++++ .../workflows/engenharia-de-prompt-hoteis.md | 78 ++++ .agent/workflows/jasmine-padrao.md | 100 +++++ .agent/workflows/jasmine-padrao2.md | 223 ++++++++++ .../accounts/frequent_questions_controller.rb | 11 + .../api/v1/accounts/inboxes_controller.rb | 2 +- .../api/v1/captain/payments_controller.rb | 25 ++ .../dashboard/api/captain/reservations.js | 8 + .../dashboard/api/captain/scenarios.js | 8 + .../dashboard/api/frequentQuestions.js | 13 + .../assistant/AddNewScenariosDialog.vue | 80 +++- .../captain/assistant/ScenariosCard.vue | 133 +++++- .../settings/AssistantBasicSettingsForm.vue | 7 + .../settings/AssistantSystemSettingsForm.vue | 180 +++++++++ .../reservations/EditReservationDialog.vue | 145 +++++++ .../components-next/sidebar/Sidebar.vue | 5 + .../i18n/locale/en/integrations.json | 35 +- .../i18n/locale/pt_BR/generalSettings.json | 1 + .../i18n/locale/pt_BR/integrations.json | 349 ++++++++++++++-- .../dashboard/i18n/locale/pt_BR/report.json | 8 + .../dashboard/captain/assistants/Index.vue | 1 - .../captain/assistants/guardrails/Index.vue | 75 ++-- .../captain/assistants/guidelines/Index.vue | 18 +- .../captain/assistants/inboxes/Index.vue | 1 - .../captain/assistants/playground/Index.vue | 1 - .../captain/assistants/scenarios/Index.vue | 155 +++++-- .../captain/assistants/settings/Settings.vue | 8 +- .../captain/assistants/tools/Index.vue | 54 ++- .../dashboard/captain/brands/BrandModal.vue | 45 ++- .../routes/dashboard/captain/brands/Index.vue | 77 ++-- .../captain/configurations/Index.vue | 29 +- .../dashboard/captain/extras/ExtraModal.vue | 36 +- .../routes/dashboard/captain/extras/Index.vue | 71 +++- .../dashboard/captain/pricings/Index.vue | 293 ++++++++++++-- .../captain/pricings/PricingModal.vue | 169 +++++--- .../dashboard/captain/reservations/Index.vue | 189 +++++++-- .../conversation/captain/ReservationPanel.vue | 64 ++- .../dashboard/settings/inbox/Settings.vue | 3 + .../inbox/components/InboxAutoResolve.vue | 86 ++++ .../reports/FrequentQuestionsIndex.vue | 136 +++++++ .../settings/reports/reports.routes.js | 7 + app/jobs/conversations/auto_label_job.rb | 134 ++++++ app/jobs/conversations/cluster_job.rb | 86 ++++ app/jobs/conversations/resolution_job.rb | 21 +- app/models/account.rb | 5 +- app/models/conversation.rb | 1 + app/models/frequent_question.rb | 8 + app/models/inbox.rb | 1 + app/services/captain/inter_service.rb | 2 +- .../providers/wuzapi/payload_parser.rb | 12 +- .../whatsapp/providers/wuzapi_service.rb | 22 +- .../frequent_questions/index.json.jbuilder | 8 + .../api/v1/captain/payments/show.html.erb | 136 +++++++ cleanup_agents.rb | 19 + clear_chat_history.rb | 45 +++ config/agents/tools.yml | 5 + config/initializers/ruby_llm.rb | 1 + config/routes.rb | 11 +- config/schedule.yml | 7 + create_jorge_agent.rb | 31 ++ create_maria_fotos_agent.rb | 41 ++ ...allback_message_to_captain_tool_configs.rb | 5 + ...000001_add_inbox_id_to_captain_pricings.rb | 6 + ...16000002_create_captain_pricing_inboxes.rb | 16 + ...33_add_active_scenario_to_conversations.rb | 9 + ...d_trigger_keywords_to_captain_scenarios.rb | 5 + ...14_add_auto_resolve_duration_to_inboxes.rb | 5 + ...0260119150720_create_frequent_questions.rb | 13 + db/schema.rb | 32 +- debug_issue.rb | 20 + docs/jasmine_daniela_flow.md | 199 +++++++++ duplicate_daniela_to_camila.rb | 17 + .../accounts/captain/assistants_controller.rb | 8 +- .../accounts/captain/pricings_controller.rb | 31 +- .../captain/reservations_controller.rb | 11 + .../accounts/captain/scenarios_controller.rb | 49 ++- .../v1/accounts/captain/tools_controller.rb | 4 +- .../conversation/debounce_response_job.rb | 31 ++ .../conversation/response_builder_job.rb | 214 +++++++++- .../jobs/captain/intent_classification_job.rb | 87 ++++ enterprise/app/models/captain/assistant.rb | 14 +- enterprise/app/models/captain/pix_charge.rb | 18 + enterprise/app/models/captain/pricing.rb | 3 + .../app/models/captain/pricing_inbox.rb | 6 + enterprise/app/models/captain/reservation.rb | 1 + .../models/concerns/captain_tools_helpers.rb | 20 +- .../captain/assistant/agent_runner_service.rb | 151 ++++++- .../app/services/captain/inter/cob_service.rb | 30 +- .../captain/llm/assistant_chat_service.rb | 60 ++- .../app/services/captain/llm/jasmine_brain.rb | 289 ++++++++++++- .../captain/llm/system_prompts_service.rb | 33 +- .../app/services/captain/tools/base_tool.rb | 59 +++ .../captain/tools/check_availability_tool.rb | 380 ++++++++++++++++-- .../tools/copilot/get_article_service.rb | 4 +- .../tools/copilot/get_contact_service.rb | 4 +- .../tools/copilot/get_conversation_service.rb | 4 +- .../tools/copilot/search_articles_service.rb | 6 +- .../tools/copilot/search_contacts_service.rb | 6 +- .../copilot/search_conversations_service.rb | 7 +- .../copilot/search_linear_issues_service.rb | 4 +- .../tools/create_reservation_intent_tool.rb | 280 ++++++++++++- .../app/services/captain/tools/definitions.rb | 16 + .../captain/tools/generate_pix_tool.rb | 153 +++++-- .../captain/tools/react_to_message_tool.rb | 26 +- .../services/captain/tools/reminder_tool.rb | 6 +- .../tools/search_documentation_service.rb | 4 +- .../captain/tools/status_suites_tool.rb | 2 +- .../captain/tools/suite_watchdog_tool.rb | 6 +- .../app/services/captain/tools/tool_runner.rb | 54 ++- .../captain/tools/update_contact_tool.rb | 67 ++- .../hook_execution_service.rb | 76 +++- .../captain/pricings/_pricing.json.jbuilder | 4 + .../models/captain/_reservation.json.jbuilder | 8 +- .../v1/models/captain/_scenario.json.jbuilder | 1 + .../captain/tools/add_contact_note_tool.rb | 2 +- .../tools/add_label_to_conversation_tool.rb | 2 +- .../captain/tools/add_private_note_tool.rb | 2 +- .../lib/captain/tools/base_public_tool.rb | 18 +- .../lib/captain/tools/faq_lookup_tool.rb | 141 ++++++- enterprise/lib/captain/tools/handoff_tool.rb | 12 +- enterprise/lib/captain/tools/http_tool.rb | 26 ++ .../captain/tools/list_reservations_tool.rb | 43 ++ .../captain/tools/scenario_delegator_tool.rb | 327 ++++++++++++++- .../lib/captain/tools/update_priority_tool.rb | 2 +- lib/tasks/captain_tool_keys.rake | 16 + lib/wuzapi/client.rb | 8 + .../2026-01-16_runbook_captain_tools_pix.md | 88 ++++ .../2026-01-16_runbook_faq_lookup_tool.md | 71 ++++ ...-16_runbook_reserva_pix_daniela_jasmine.md | 131 ++++++ progresso/2026-01-17_hardening_reservas.md | 51 +++ ...26-01-17_manifesto_arquitetura_reservas.md | 87 ++++ progresso/2026-01-18_impl_pix_one_tap.md | 53 +++ ...6-01-18_substituicao_daniela_por_camila.md | 69 ++++ progresso/chatwoot-develop.code-workspace | 11 + ...mentacao-relatorio-perguntas-frequentes.md | 57 +++ restore_camila_prompt.rb | 35 ++ routes_log.txt | 68 ++++ script/generate_test_questions.rb | 34 ++ script/test_auto_label.rb | 47 +++ script/test_auto_resolve_inbox.rb | 153 +++++++ seed_jasmine_hotel_v3.rb | 123 ++++++ seed_pricings.rb | 81 ++++ skills/brainstorming-ideas/SKILL.md | 60 +++ skills/creating-jasmine-tools/SKILL.md | 99 +++++ skills/creating_skills/SKILL.md | 91 +++++ skills/exemplifying-workflow/SKILL.md | 28 ++ skills/planning-work/SKILL.md | 86 ++++ skills/resolving-problems/SKILL.md | 94 +++++ update_daniela_prompt.rb | 60 +++ 151 files changed, 7972 insertions(+), 569 deletions(-) create mode 100644 .agent/workflows/arquiteto-software-chatwoot.md create mode 100644 .agent/workflows/designer-ui.md create mode 100644 .agent/workflows/engenharia-de-prompt-hoteis.md create mode 100644 .agent/workflows/jasmine-padrao.md create mode 100644 .agent/workflows/jasmine-padrao2.md create mode 100644 app/controllers/api/v1/accounts/frequent_questions_controller.rb create mode 100644 app/controllers/public/api/v1/captain/payments_controller.rb create mode 100644 app/javascript/dashboard/api/frequentQuestions.js create mode 100644 app/javascript/dashboard/components-next/captain/reservations/EditReservationDialog.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/inbox/components/InboxAutoResolve.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/FrequentQuestionsIndex.vue create mode 100644 app/jobs/conversations/auto_label_job.rb create mode 100644 app/jobs/conversations/cluster_job.rb create mode 100644 app/models/frequent_question.rb create mode 100644 app/views/api/v1/accounts/frequent_questions/index.json.jbuilder create mode 100644 app/views/public/api/v1/captain/payments/show.html.erb create mode 100644 cleanup_agents.rb create mode 100644 clear_chat_history.rb create mode 100644 create_jorge_agent.rb create mode 100644 create_maria_fotos_agent.rb create mode 100644 db/migrate/20260116000000_add_fallback_message_to_captain_tool_configs.rb create mode 100644 db/migrate/20260116000001_add_inbox_id_to_captain_pricings.rb create mode 100644 db/migrate/20260116000002_create_captain_pricing_inboxes.rb create mode 100644 db/migrate/20260116215233_add_active_scenario_to_conversations.rb create mode 100644 db/migrate/20260118153534_add_trigger_keywords_to_captain_scenarios.rb create mode 100644 db/migrate/20260119131814_add_auto_resolve_duration_to_inboxes.rb create mode 100644 db/migrate/20260119150720_create_frequent_questions.rb create mode 100644 debug_issue.rb create mode 100644 docs/jasmine_daniela_flow.md create mode 100644 duplicate_daniela_to_camila.rb create mode 100644 enterprise/app/jobs/captain/conversation/debounce_response_job.rb create mode 100644 enterprise/app/jobs/captain/intent_classification_job.rb create mode 100644 enterprise/app/models/captain/pricing_inbox.rb create mode 100644 enterprise/lib/captain/tools/list_reservations_tool.rb create mode 100644 lib/tasks/captain_tool_keys.rake create mode 100644 progresso/2026-01-16_runbook_captain_tools_pix.md create mode 100644 progresso/2026-01-16_runbook_faq_lookup_tool.md create mode 100644 progresso/2026-01-16_runbook_reserva_pix_daniela_jasmine.md create mode 100644 progresso/2026-01-17_hardening_reservas.md create mode 100644 progresso/2026-01-17_manifesto_arquitetura_reservas.md create mode 100644 progresso/2026-01-18_impl_pix_one_tap.md create mode 100644 progresso/2026-01-18_substituicao_daniela_por_camila.md create mode 100644 progresso/chatwoot-develop.code-workspace create mode 100644 progresso/implementacao-relatorio-perguntas-frequentes.md create mode 100644 restore_camila_prompt.rb create mode 100644 routes_log.txt create mode 100644 script/generate_test_questions.rb create mode 100644 script/test_auto_label.rb create mode 100644 script/test_auto_resolve_inbox.rb create mode 100644 seed_jasmine_hotel_v3.rb create mode 100644 seed_pricings.rb create mode 100644 skills/brainstorming-ideas/SKILL.md create mode 100644 skills/creating-jasmine-tools/SKILL.md create mode 100644 skills/creating_skills/SKILL.md create mode 100644 skills/exemplifying-workflow/SKILL.md create mode 100644 skills/planning-work/SKILL.md create mode 100644 skills/resolving-problems/SKILL.md create mode 100644 update_daniela_prompt.rb diff --git a/.agent/rules/conhecimento-arquitetura-projeto.md b/.agent/rules/conhecimento-arquitetura-projeto.md index cffa4a2..147d09c 100644 --- a/.agent/rules/conhecimento-arquitetura-projeto.md +++ b/.agent/rules/conhecimento-arquitetura-projeto.md @@ -2,27 +2,26 @@ trigger: always_on --- -This workspace represents a single, specific application repository. +knowledge_base_principles: -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" -- This project follows a formal Knowledge Base plan. -- Documentation is the single source of truth. -- Agent playbooks and plans are authoritative references. +workspace_behavior_rules: -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" -- Always reason strictly within the context of this repository. -- Never assume undocumented behavior; if something is missing, flag it and propose a documentation update. -- Before coding or suggesting changes, identify the most appropriate agent role (backend, frontend, devops, security, database, etc.). -- Prefer structured plans and phased execution over immediate code changes. -- Reference existing docs/, agents/, and plans/ before proposing new files or structures. -- Treat architecture, security, data flow, integrations, and testing as first-class concerns. -- When suggesting work, align actions with clear phases and propose commit checkpoints. +quality_and_output_expectations: -Quality and output expectations: - -- Outputs must be actionable, specific, and repository-aware. -- Avoid generic advice; tailor all responses to this project’s structure and constraints. -- If required inputs or context are missing, explicitly request them before proceeding. -- When uncertainty exists, surface risks, assumptions, and dependencies clearly. +- "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 new file mode 100644 index 0000000..d553818 --- /dev/null +++ b/.agent/workflows/arquiteto-software-chatwoot.md @@ -0,0 +1,66 @@ +--- +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 new file mode 100644 index 0000000..e730178 --- /dev/null +++ b/.agent/workflows/designer-ui.md @@ -0,0 +1,73 @@ +--- +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: "