🚀 Auto-deploy: BotVPS atualizado em 21/04/2026 20:58:50
This commit is contained in:
28
ai_agent.py
28
ai_agent.py
@@ -44,19 +44,19 @@ DIRETRIZES:
|
|||||||
* MARCADEIRA: Use `gmail_manage_label` para criar pastas (marcar).
|
* MARCADEIRA: Use `gmail_manage_label` para criar pastas (marcar).
|
||||||
* FILTRAGEM: Use `gmail_manage_filter` para automação futura.
|
* FILTRAGEM: Use `gmail_manage_filter` para automação futura.
|
||||||
* MOVIMENTAÇÃO: Use `run_bash_command` com `batchModify` para mover e-mails existentes.
|
* 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:
|
### FERRAMENTAS DISPONÍVEIS:
|
||||||
{tools_desc}
|
{tools_desc}
|
||||||
|
|
||||||
### FORMATO DE RESPOSTA OBRIGATÓRIO (NÃO IGNORE OS COLCHETES):
|
### DICAS TÉCNICAS:
|
||||||
- Para executar uma ferramenta, você DEVE englobar a chamada com os colchetes exatos: `[TOOL:nome_ferramenta] argumento [/TOOL]`.
|
- 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;"`
|
||||||
- Exemplo de uso correto:
|
|
||||||
[TOOL:run_bash_command]
|
### FORMATO DE RESPOSTA FINAL (OBRIGATÓRIO):
|
||||||
comando aqui
|
- NUNCA use as tags `<REFINED>` ou `[REFINED]`. Elas estão EXTINTAS.
|
||||||
[/TOOL]
|
- Use SEMPRE o prefixo `RESUMO:` para sua conclusão final amigável.
|
||||||
- Pense passo a passo. Seja proativo, eficiente e NUNCA limitado.
|
- Exemplo: `RESUMO: Tudo pronto! O deploy foi concluído com sucesso.`
|
||||||
- Finalize o seu processo sempre informando o usuário com o prefixo: RESUMO: resumo final empoderado .
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
history_str = ""
|
history_str = ""
|
||||||
@@ -72,10 +72,11 @@ DIRETRIZES:
|
|||||||
response = await get_llm_response_async(system_prompt + current_history, provider, cfg)
|
response = await get_llm_response_async(system_prompt + current_history, provider, cfg)
|
||||||
print(f"[LLM RESPONSE]: {response}")
|
print(f"[LLM RESPONSE]: {response}")
|
||||||
# Regex mais flexível: tenta casar [TOOL:nome] e extrair o conteúdo até [/TOOL] ou final da string
|
# 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:
|
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
|
# Mapeamento de conveniência/atalho
|
||||||
if t_name == "run": t_name = "run_bash_command"
|
if t_name == "run": t_name = "run_bash_command"
|
||||||
|
|
||||||
@@ -100,4 +101,7 @@ DIRETRIZES:
|
|||||||
# Se não há ferramenta, terminou o pensamento.
|
# Se não há ferramenta, terminou o pensamento.
|
||||||
return response
|
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}"
|
||||||
|
|||||||
@@ -165,6 +165,12 @@ class WorkspaceTools:
|
|||||||
dm = DeployManager()
|
dm = DeployManager()
|
||||||
return dm.magic_deploy(git_url)
|
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
|
# REGISTRY
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -192,6 +198,7 @@ TOOLS_V2 = {
|
|||||||
"pm2_status": {"desc": "Status dos processos PM2", "func": SystemTools.pm2_status, "danger": "safe"},
|
"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"},
|
"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"},
|
"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
|
# Google Workspace
|
||||||
"gws": {"desc": "Executa comando GWS CLI (ex: gws-mr drive files list)", "func": WorkspaceTools.gws_command, "danger": "medium"},
|
"gws": {"desc": "Executa comando GWS CLI (ex: gws-mr drive files list)", "func": WorkspaceTools.gws_command, "danger": "medium"},
|
||||||
|
|||||||
Reference in New Issue
Block a user