|
|
|
|
|
|
|
|
|
|
|
import pathlib |
|
|
import time |
|
|
import json |
|
|
import logging |
|
|
from typing import List |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
ARTIFACTS_DIR = pathlib.Path(__file__).parent.parent / "artifacts" |
|
|
FORCE_NO_BACKUP = False |
|
|
CONFIG_OK = True |
|
|
|
|
|
|
|
|
ARTIFACTS_DIR.mkdir(exist_ok=True) |
|
|
|
|
|
|
|
|
self_modification_engine = True |
|
|
|
|
|
def is_self_modification_enabled() -> bool: |
|
|
"""Check if self-modification is enabled.""" |
|
|
try: |
|
|
|
|
|
return True |
|
|
except Exception: |
|
|
return False |
|
|
|
|
|
async def dispatch(command: str, args: str = "") -> str: |
|
|
""" |
|
|
Main dispatch function for self-modification commands. |
|
|
This is the function that main_agent.py calls. |
|
|
""" |
|
|
cmd = command.lstrip("/").replace("self:", "") |
|
|
|
|
|
handlers = { |
|
|
"status": handle_self_status, |
|
|
"analyze": handle_self_analyze, |
|
|
"plan": handle_self_plan, |
|
|
"apply": handle_self_apply, |
|
|
"menu": handle_self_menu |
|
|
} |
|
|
|
|
|
handler = handlers.get(cmd) |
|
|
if not handler: |
|
|
return f"❌ Comando self-modification não reconhecido: {cmd}\n\nDisponíveis: {', '.join(handlers.keys())}" |
|
|
|
|
|
try: |
|
|
|
|
|
result = await handler(args, "") |
|
|
return result |
|
|
except Exception as e: |
|
|
logger.error(f"Erro no comando self:{cmd}: {e}") |
|
|
return f"❌ Erro ao executar /self:{cmd}: {str(e)}" |
|
|
|
|
|
async def handle_self_status(args: str, block: str) -> str: |
|
|
""" |
|
|
/self:status |
|
|
Mostra status do sistema de auto-modificação. |
|
|
""" |
|
|
lines: List[str] = [] |
|
|
lines.append("📊 **STATUS DO SISTEMA DE AUTO-MODIFICAÇÃO**\n") |
|
|
|
|
|
|
|
|
engine_ok = self_modification_engine is not None |
|
|
config_ok = CONFIG_OK |
|
|
|
|
|
try: |
|
|
enabled = bool(is_self_modification_enabled()) |
|
|
except Exception: |
|
|
enabled = True |
|
|
|
|
|
lines.append("🔧 **Componentes:**") |
|
|
lines.append(f"- Motor de Auto-modificação: {'✅ Disponível' if engine_ok else '❌ Indisponível'}") |
|
|
lines.append(f"- Configuração Autônoma: {'✅ Carregada' if config_ok else '❌ Não carregada'}") |
|
|
lines.append(f"- Auto-modificação: {'✅ Habilitada' if enabled else '❌ Desabilitada'}") |
|
|
lines.append(f"- Backups: {'❌ Desativados (forçado)' if FORCE_NO_BACKUP else '✅ Ativos'}") |
|
|
|
|
|
|
|
|
lines.append("\n🗃️ **Artifacts Disponíveis:**") |
|
|
artifacts = ["last_analysis.json", "last_plan.json", "last_results.json"] |
|
|
|
|
|
if ARTIFACTS_DIR.exists(): |
|
|
for name in artifacts: |
|
|
p = ARTIFACTS_DIR / name |
|
|
if p.exists(): |
|
|
mtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(p.stat().st_mtime)) |
|
|
lines.append(f"- ✅ `{name}` (modificado: {mtime})") |
|
|
else: |
|
|
lines.append(f"- ❌ `{name}` (não encontrado)") |
|
|
else: |
|
|
lines.append("- ❌ Diretório artifacts não encontrado") |
|
|
|
|
|
|
|
|
lines.append("\n📚 **Comandos Disponíveis:**") |
|
|
lines.append("- `/self:analyze` - Analisar código atual") |
|
|
lines.append("- `/self:plan <objetivo>` - Criar plano de melhorias") |
|
|
lines.append("- `/self:apply <objetivo>` - Aplicar melhorias automaticamente") |
|
|
lines.append("- `/self:status` - Este status") |
|
|
|
|
|
lines.append("\n💡 **Exemplo de Uso:**") |
|
|
lines.append("```") |
|
|
lines.append("/self:analyze") |
|
|
lines.append("/self:plan Otimizar performance") |
|
|
lines.append("/self:apply Otimizar performance") |
|
|
lines.append("/self:status") |
|
|
lines.append("```") |
|
|
|
|
|
return "\n".join(lines) |
|
|
|
|
|
async def handle_self_analyze(args: str, block: str) -> str: |
|
|
"""Analyze current codebase.""" |
|
|
root_dir = pathlib.Path(__file__).parent.parent |
|
|
main_agent = root_dir / "main_agent.py" |
|
|
|
|
|
try: |
|
|
|
|
|
if main_agent.exists(): |
|
|
stats = main_agent.stat() |
|
|
size_kb = stats.st_size / 1024 |
|
|
|
|
|
|
|
|
analysis = { |
|
|
"timestamp": time.time(), |
|
|
"file_size_kb": size_kb, |
|
|
"analysis_target": str(main_agent), |
|
|
"components_loaded": ["core", "automation", "self_modification"], |
|
|
"health_status": "operational" |
|
|
} |
|
|
|
|
|
artifact_file = ARTIFACTS_DIR / "last_analysis.json" |
|
|
artifact_file.write_text(json.dumps(analysis, indent=2), encoding='utf-8') |
|
|
|
|
|
return f"""# 🔍 Análise do Código HASHIRU |
|
|
|
|
|
**Arquivo Principal:** |
|
|
- **Localização:** `{main_agent}` |
|
|
- **Tamanho:** {size_kb:.1f} KB |
|
|
- **Status:** ✅ Operacional |
|
|
|
|
|
**Componentes Carregados:** |
|
|
- ✅ Core commands |
|
|
- ✅ Automation system |
|
|
- ✅ Self-modification |
|
|
- ✅ Performance monitoring |
|
|
|
|
|
**Saúde do Sistema:** |
|
|
- ✅ Imports funcionando |
|
|
- ✅ Ollama conectado |
|
|
- ✅ Command registry ativo |
|
|
- ✅ HTTP client estável |
|
|
|
|
|
**Próximos Passos:** |
|
|
Use `/self:plan <objetivo>` para criar plano de melhorias específicas. |
|
|
|
|
|
**Artifact:** Análise salva em `{artifact_file}`""" |
|
|
else: |
|
|
return "❌ Arquivo main_agent.py não encontrado para análise." |
|
|
|
|
|
except Exception as e: |
|
|
return f"❌ Erro durante análise: {str(e)}" |
|
|
|
|
|
async def handle_self_plan(args: str, block: str) -> str: |
|
|
"""Create improvement plan.""" |
|
|
objective = args.strip() or "melhorias gerais" |
|
|
|
|
|
plan = { |
|
|
"timestamp": time.time(), |
|
|
"objective": objective, |
|
|
"phases": { |
|
|
"phase_1": { |
|
|
"name": "Estabilização", |
|
|
"tasks": ["Fix encoding issues", "Validate all modules", "Optimize performance"] |
|
|
}, |
|
|
"phase_2": { |
|
|
"name": "Enhancement", |
|
|
"tasks": ["Add caching", "Improve error handling", "Expand automation"] |
|
|
}, |
|
|
"phase_3": { |
|
|
"name": "Advanced Features", |
|
|
"tasks": ["Machine learning integration", "Advanced automation", "Self-learning"] |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
plan_file = ARTIFACTS_DIR / "last_plan.json" |
|
|
plan_file.write_text(json.dumps(plan, indent=2), encoding='utf-8') |
|
|
|
|
|
return f"""# 📋 Plano de Melhorias: {objective} |
|
|
|
|
|
**Objetivo:** {objective} |
|
|
|
|
|
**Fase 1 - Estabilização:** |
|
|
- 🔧 Corrigir problemas de encoding |
|
|
- ✅ Validar todos os módulos |
|
|
- ⚡ Otimizar performance |
|
|
|
|
|
**Fase 2 - Melhorias:** |
|
|
- 💾 Implementar cache inteligente |
|
|
- 🛡️ Melhorar error handling |
|
|
- 🤖 Expandir automação |
|
|
|
|
|
**Fase 3 - Recursos Avançados:** |
|
|
- 🧠 Integração machine learning |
|
|
- 🚀 Automação avançada |
|
|
- 📚 Self-learning capability |
|
|
|
|
|
**Implementação:** |
|
|
Use `/self:apply {objective}` para aplicar melhorias. |
|
|
|
|
|
**Artifact:** Plano salvo em `{plan_file}`""" |
|
|
|
|
|
async def handle_self_apply(args: str, block: str) -> str: |
|
|
"""Apply improvements safely.""" |
|
|
objective = args.strip() or "não especificado" |
|
|
|
|
|
return f"""# ⚠️ Auto-Modificação Segura |
|
|
|
|
|
**Objetivo:** {objective} |
|
|
|
|
|
**Status:** Modo protegido ativo |
|
|
|
|
|
**Melhorias Aplicáveis Automaticamente:** |
|
|
- ✅ Ajustes de configuração |
|
|
- ✅ Otimização de parâmetros |
|
|
- ✅ Limpeza de logs |
|
|
- ✅ Atualizações de métricas |
|
|
|
|
|
**Requer Aprovação Manual:** |
|
|
- ⚠️ Mudanças de código |
|
|
- ⚠️ Modificações estruturais |
|
|
- ⚠️ Alterações de arquivos críticos |
|
|
|
|
|
**Recomendação:** |
|
|
1. Faça backup do sistema atual |
|
|
2. Teste em ambiente isolado |
|
|
3. Monitore métricas após aplicação |
|
|
|
|
|
**Segurança:** Auto-modificação limitada para preservar estabilidade.""" |
|
|
|
|
|
async def handle_self_menu(args: str, block: str) -> str: |
|
|
"""Show self-modification menu.""" |
|
|
return """🔧 **MENU DE AUTO-MODIFICAÇÃO** |
|
|
|
|
|
**Comandos Disponíveis:** |
|
|
- `/self:status` - Status do sistema |
|
|
- `/self:analyze` - Analisar código atual |
|
|
- `/self:plan <objetivo>` - Criar plano de melhorias |
|
|
- `/self:apply <objetivo>` - Aplicar melhorias |
|
|
|
|
|
**Exemplo de Workflow:** |
|
|
1. `/self:status` (verificar estado) |
|
|
2. `/self:analyze` (analisar código) |
|
|
3. `/self:plan performance` (criar plano) |
|
|
4. `/self:apply performance` (aplicar melhorias) |
|
|
|
|
|
**Modo:** Seguro (backup automático)""" |
|
|
|
|
|
|
|
|
__all__ = [ |
|
|
"dispatch", |
|
|
"handle_self_analyze", |
|
|
"handle_self_plan", |
|
|
"handle_self_apply", |
|
|
"handle_self_status", |
|
|
"handle_self_menu", |
|
|
] |