|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
""" |
|
|
|
|
|
|
|
|
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)}" |
|
|
|
|
|
|
|
|
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": |
|
|
|
|
|
try: |
|
|
result = master.get_status_report() |
|
|
except AttributeError: |
|
|
|
|
|
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)}" |
|
|
|
|
|
|
|
|
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]}..." |