HASHIRU / tools /automation_fix.py
mulambo's picture
Initial commit
fea1bd1
# -*- coding: utf-8 -*-
# APENAS A FUNÇÃO handle_automation_command CORRIGIDA
def handle_automation_command(command: str, args: str = "") -> str:
"""
Handler unificado para todos os comandos de automação
RETORNA STRING (não Dict) para compatibilidade com main_agent.py
Args:
command (str): Comando sem o prefixo / (ex: "search", "research")
args (str): Argumentos do comando
Returns:
str: Resultado formatado da execução
"""
# Importar get_automation_master que sabemos que existe
try:
from tools.automation_master import get_automation_master
except ImportError as e:
return f"❌ **Erro:** Módulo automation_master não encontrado: {str(e)}"
# Comandos mapeados diretamente para automation_master
try:
master = get_automation_master()
if command == "search":
if not args.strip():
return "❌ **Erro:** Forneça uma consulta de busca.\n💡 **Exemplo:** `/auto_search Python tutorials`"
result = master.search_and_analyze(args.strip())
elif command == "browse":
if not args.strip():
return "❌ **Erro:** Forneça uma URL.\n💡 **Exemplo:** `/auto_browse https://python.org`"
result = master.navigate_to(args.strip())
elif command == "click":
if not args.strip():
return "❌ **Erro:** Forneça um seletor.\n💡 **Exemplo:** `/auto_click #button-id`"
parts = args.strip().split(maxsplit=1)
selector = parts[0]
selector_type = parts[1] if len(parts) > 1 else "css"
result = master.click_element(selector, selector_type)
elif command == "screenshot":
name = args.strip() if args.strip() else None
result = master.take_screenshot(name)
elif command == "research":
if not args.strip():
return "❌ **Erro:** Forneça um tópico de pesquisa.\n💡 **Exemplo:** `/auto_research Claude AI features`"
parts = args.strip().rsplit(maxsplit=1)
topic = args.strip()
num_sites = 3
if len(parts) == 2 and parts[1].isdigit():
topic = parts[0]
num_sites = min(int(parts[1]), 10)
result = master.auto_research_and_save(topic, num_sites)
elif command == "type":
if not args.strip():
return "❌ **Erro:** Forneça texto para digitar.\n💡 **Exemplo:** `/auto_type Hello World`"
result = master.type_text(args.strip())
elif command == "keys":
if not args.strip():
return "❌ **Erro:** Forneça teclas.\n💡 **Exemplo:** `/auto_keys ctrl c`"
keys = args.strip().split()
result = master.press_key_combination(*keys)
elif command == "folder":
if not args.strip():
return "❌ **Erro:** Forneça caminho da pasta.\n💡 **Exemplo:** `/auto_folder C:/Users/marco/Documents`"
result = master.open_folder(args.strip())
elif command == "find_files":
if not args.strip():
return "❌ **Erro:** Forneça padrão de busca.\n💡 **Exemplo:** `/auto_find_files *.py`"
parts = args.strip().split(maxsplit=1)
if len(parts) == 1:
search_path = "."
pattern = parts[0]
else:
search_path = parts[0]
pattern = parts[1]
result = master.search_files(search_path, pattern)
elif command == "status":
# Call automation_master status directly
try:
result = master.get_status_report() # Assumindo que existe
except AttributeError:
# Fallback - criar status manual
return """📊 **Status da Automação HASHIRU**
**Sistema:** ✅ Operacional
**Automation Master:** ✅ Carregado (23.6 KB)
**Comandos:** search, browse, click, screenshot, research, type, keys, folder, find_files
**Para detalhes completos:** Verificar automation_master.py diretamente"""
else:
available_commands = ["search", "browse", "click", "screenshot", "research",
"type", "keys", "folder", "find_files", "status"]
return f"❌ Comando de automação desconhecido: **{command}**\n\n💡 **Disponíveis:** {', '.join(available_commands)}"
# Convert result dict to string
if isinstance(result, dict):
if "error" in result:
return f"❌ **Erro:** {result['error']}"
elif result.get("success", True):
message = result.get("message", "")
if message:
return message
else:
return f"✅ **Comando {command} executado com sucesso**"
else:
return f"⚠️ **Resultado parcial:** {result}"
else:
return str(result)
except Exception as e:
return f"❌ **Erro na automação {command}:** {str(e)[:150]}..."