diff --git a/ai_agent.py b/ai_agent.py index 2afc056..ecb787c 100644 --- a/ai_agent.py +++ b/ai_agent.py @@ -44,19 +44,19 @@ DIRETRIZES: * MARCADEIRA: Use `gmail_manage_label` para criar pastas (marcar). * FILTRAGEM: Use `gmail_manage_filter` para automação futura. * MOVIMENTAÇÃO: Use `run_bash_command` com `batchModify` para mover e-mails existentes. -- FORMATO OBRIGATÓRIO: `[TOOL:nome] arg [/TOOL]`. Use `[TOOL:run]` como atalho para `run_bash_command`. +- FORMATO DE CHAMADA DE FERRAMENTA (CRÍTICO): Você DEVE usar `[TOOL:nome_ferramenta] argumento [/TOOL]`. NUNCA esqueça os colchetes `[` e `]`. +- Se quiser rodar um comando bash, use o atalho: `[TOOL:run] comando [/TOOL]`. ### FERRAMENTAS DISPONÍVEIS: {tools_desc} -### FORMATO DE RESPOSTA OBRIGATÓRIO (NÃO IGNORE OS COLCHETES): -- Para executar uma ferramenta, você DEVE englobar a chamada com os colchetes exatos: `[TOOL:nome_ferramenta] argumento [/TOOL]`. -- Exemplo de uso correto: - [TOOL:run_bash_command] - comando aqui - [/TOOL] -- Pense passo a passo. Seja proativo, eficiente e NUNCA limitado. -- Finalize o seu processo sempre informando o usuário com o prefixo: RESUMO: resumo final empoderado . +### DICAS TÉCNICAS: +- COOLIFY: Para ver deploies, use: `docker exec coolify psql -U coolify -d coolify -c "SELECT p.name, a.name, d.status, d.updated_at FROM deployments d JOIN applications a ON d.application_id = a.id JOIN projects p ON a.project_id = p.id ORDER BY d.updated_at DESC LIMIT 5;"` + +### FORMATO DE RESPOSTA FINAL (OBRIGATÓRIO): +- NUNCA use as tags `` ou `[REFINED]`. Elas estão EXTINTAS. +- Use SEMPRE o prefixo `RESUMO:` para sua conclusão final amigável. +- Exemplo: `RESUMO: Tudo pronto! O deploy foi concluído com sucesso.` """ history_str = "" @@ -72,10 +72,11 @@ DIRETRIZES: response = await get_llm_response_async(system_prompt + current_history, provider, cfg) print(f"[LLM RESPONSE]: {response}") # Regex mais flexível: tenta casar [TOOL:nome] e extrair o conteúdo até [/TOOL] ou final da string - match = re.search(r"\[TOOL:([\w_]+)\]", response, re.I) + # Regex robusto: captura [TOOL:nome] ou TOOL:nome (sem colchetes como fallback) + match = re.search(r"(?:\[?TOOL:([\w_]+)\]?|\[TOOL:([\w_]+)\])", response, re.I) if match: - t_name = match.group(1).strip().lower() + t_name = (match.group(1) or match.group(2)).strip().lower() # Mapeamento de conveniência/atalho if t_name == "run": t_name = "run_bash_command" @@ -100,4 +101,7 @@ DIRETRIZES: # Se não há ferramenta, terminou o pensamento. return response - return f"Limite de pensamento ({max_iterations} iterações) atingido.\nÚltima resposta: {response if 'response' in locals() else 'Nenhuma'}" + # Ao atingir o limite, tenta ao menos limpar a resposta final + final_reply = response if 'response' in locals() else 'Nenhuma' + final_reply = re.sub(r'[<\[]/?REFINED[>\]]', '', final_reply, flags=re.IGNORECASE).strip() + return f"Limite de iterações atingido. RESUMO: {final_reply}" diff --git a/tools_v2.py b/tools_v2.py index 164684f..4405c00 100644 --- a/tools_v2.py +++ b/tools_v2.py @@ -165,6 +165,12 @@ class WorkspaceTools: dm = DeployManager() return dm.magic_deploy(git_url) + @staticmethod + def coolify_deploy_status() -> str: + """Consulta os últimos 5 deploies registrados no Coolify via banco de dados.""" + cmd = 'docker exec coolify psql -U coolify -d coolify -c "SELECT p.name as project, a.name as application, d.status, d.updated_at FROM deployments d JOIN applications a ON d.application_id = a.id JOIN projects p ON a.project_id = p.id ORDER BY d.updated_at DESC LIMIT 5;"' + return run_bash(cmd)["output"] + # ============================================================ # REGISTRY # ============================================================ @@ -192,6 +198,7 @@ TOOLS_V2 = { "pm2_status": {"desc": "Status dos processos PM2", "func": SystemTools.pm2_status, "danger": "safe"}, "pm2_restart": {"desc": "Reiniciar processo PM2", "func": SystemTools.pm2_restart, "danger": "medium"}, "magic_deploy": {"desc": "Deploy automático via URL Git", "func": WorkspaceTools.magic_deploy, "danger": "dangerous"}, + "coolify_status": {"desc": "Status dos últimos deploies no Coolify", "func": WorkspaceTools.coolify_deploy_status, "danger": "safe"}, # Google Workspace "gws": {"desc": "Executa comando GWS CLI (ex: gws-mr drive files list)", "func": WorkspaceTools.gws_command, "danger": "medium"},