🚀 Auto-deploy: BotVPS atualizado em 29/03/2026 18:31:38

This commit is contained in:
2026-03-29 18:31:38 +00:00
parent 7a3790344e
commit 7c165d0353
97 changed files with 4220 additions and 9 deletions

View File

@@ -94,23 +94,91 @@ class SupabaseTools:
return str(res.json())
except Exception as e: return f"Erro Supabase: {e}"
# ============================================================
# SYSTEM TOOLS (MASTER SKILL)
# ============================================================
class SystemTools:
@staticmethod
def execute_bash(command: str) -> str:
"""Executa um comando bash arbitrário na VPS."""
return run_bash(command)["output"]
@staticmethod
def read_file(path: str) -> str:
"""Lê o conteúdo total de um arquivo na VPS."""
try:
with open(path, 'r') as f:
return f.read()
except Exception as e:
return f"Erro ao ler arquivo: {e}"
@staticmethod
def write_file(path_content: str) -> str:
"""Escreve conteúdo em um arquivo. Formato esperado: 'caminho|conteúdo'"""
try:
if "|" not in path_content:
return "Erro: Use o formato 'caminho|conteúdo'"
path, content = path_content.split("|", 1)
path = path.strip()
# Garante que o diretório existe
os.makedirs(os.path.dirname(os.path.abspath(path)), exist_ok=True)
with open(path, 'w') as f:
f.write(content)
return f"Sucesso: {path} atualizado."
except Exception as e:
return f"Erro ao escrever: {e}"
@staticmethod
def list_dir(path: str = ".") -> str:
"""Lista arquivos e pastas de um diretório."""
try:
items = os.listdir(path)
return "\n".join(items)
except Exception as e:
return f"Erro ao listar {path}: {e}"
# ============================================================
# WORKSPACE TOOLS (GWS CLI)
# ============================================================
class WorkspaceTools:
@staticmethod
def gws_command(cmd: str) -> str:
"""Executa um comando gws completo (ex: gws-mr gmail +send ...)."""
return run_bash(cmd)["output"]
# ============================================================
# REGISTRY
# ============================================================
TOOLS_V2 = {
"docker_ps": {"desc": "Lista containers", "func": DockerTools.ps, "danger": "safe"},
"docker_stats": {"desc": "Uso de recursos", "func": DockerTools.stats, "danger": "safe"},
"docker_logs": {"desc": "Ver logs", "func": DockerTools.logs, "danger": "safe"},
# Docker
"docker_ps": {"desc": "Lista containers ativos", "func": DockerTools.ps, "danger": "safe"},
"docker_stats": {"desc": "Uso de CPU/RAM por container", "func": DockerTools.stats, "danger": "safe"},
"docker_logs": {"desc": "Ver logs de um container", "func": DockerTools.logs, "danger": "safe"},
"docker_restart": {"desc": "Reiniciar container", "func": DockerTools.restart, "danger": "dangerous"},
"git_pull": {"desc": "Atualizar código", "func": GitTools.pull, "danger": "medium"},
"git_status": {"desc": "Ver status git", "func": GitTools.status, "danger": "safe"},
"gitea_repos": {"desc": "Listar repos no Gitea", "func": GiteaTools.list_repos, "danger": "safe"},
"supabase_tables": {"desc": "Listar tabelas Supabase", "func": SupabaseTools.list_tables, "danger": "safe"},
# Git
"git_pull": {"desc": "Faz pull no repositório atual", "func": GitTools.pull, "danger": "medium"},
"git_status": {"desc": "Verifica status do git", "func": GitTools.status, "danger": "safe"},
"gitea_repos": {"desc": "Lista repositórios no Gitea", "func": GiteaTools.list_repos, "danger": "safe"},
# Supabase
"supabase_tables": {"desc": "Lista tabelas no Supabase", "func": SupabaseTools.list_tables, "danger": "safe"},
# System (Master Skill)
"bash": {"desc": "Executa comando shell direto", "func": SystemTools.execute_bash, "danger": "dangerous"},
"read_file": {"desc": "Lê conteúdo de um arquivo", "func": SystemTools.read_file, "danger": "safe"},
"write_file": {"desc": "Cria ou edita arquivo (caminho|conteúdo)", "func": SystemTools.write_file, "danger": "dangerous"},
"ls": {"desc": "Lista arquivos num diretório", "func": SystemTools.list_dir, "danger": "safe"},
# Google Workspace
"gws": {"desc": "Executa comando GWS CLI (ex: gws-mr drive files list)", "func": WorkspaceTools.gws_command, "danger": "medium"},
}
def get_all_tools_formatted() -> str:
res = "🛠️ **Ferramentas Disponíveis**:\n\n"
res = "🛠️ **Ferramentas Antigravity Ativas (V2)**:\n\n"
for name, info in TOOLS_V2.items():
res += f"- `{name}`: {info['desc']} [{info['danger'].upper()}]\n"
return res