Refactor cockpit to use DockerTmuxController pattern

Based on claude-code-tools TmuxCLIController, this refactor:

- Added DockerTmuxController class for robust tmux session management
- Implements send_keys() with configurable delay_enter
- Implements capture_pane() for output retrieval
- Implements wait_for_prompt() for pattern-based completion detection
- Implements wait_for_idle() for content-hash-based idle detection
- Implements wait_for_shell_prompt() for shell prompt detection

Also includes workflow improvements:
- Pre-task git snapshot before agent execution
- Post-task commit protocol in agent guidelines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
admin
2026-01-14 10:42:16 -03:00
commit ec33ac1936
265 changed files with 92011 additions and 0 deletions

467
config.json Normal file
View File

@@ -0,0 +1,467 @@
{
"orchestrator": {
"name": "sarlo-orchestrator",
"description": "Central orchestrator for all Sarlo server projects",
"model": "sonnet",
"max_concurrent_subagents": 10
},
"qa_preflight": {
"enabled": true,
"check_timeout_seconds": 10,
"timeout_categories": {
"short": 300,
"long": 600,
"async": 0
},
"logging_level": "info",
"block_on_service_unhealthy": false,
"block_on_privilege_required": true,
"block_on_capability_gap": true,
"warn_on_timeout_mismatch": true,
"use_historical_learning": true
},
"projects": {
"admin": {
"path": "/home/admin",
"description": "System administration",
"subagent_model": "haiku",
"tools": [
"Read",
"Bash",
"Glob",
"Grep"
],
"focus": "Server management, user admin, MCP servers",
"color": "#FFFFFF"
},
"overbits": {
"path": "/home/overbits",
"description": "Digital Production Factory",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "React/TypeScript frontend development",
"color": "#FFFF00"
},
"musica": {
"path": "/home/musica",
"description": "Digital Music Portal",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Music app, Strudel patterns, React frontend",
"color": "#FF00FF"
},
"dss": {
"path": "/home/dss",
"description": "Digital Signature Service",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "TypeScript backend, cryptography",
"color": "#00FFFF",
"extra_mounts": [
"/opt/dss:/opt/dss"
]
},
"librechat": {
"path": "/home/librechat",
"description": "LibreChat AI Platform",
"subagent_model": "haiku",
"tools": [
"Read",
"Bash",
"Glob",
"Grep"
],
"focus": "Chat platform operations",
"color": "#00FF00"
},
"bbot": {
"path": "/home/bbot",
"description": "Trading Bot",
"subagent_model": "haiku",
"tools": [
"Read",
"Bash",
"Glob",
"Grep"
],
"focus": "Trading automation",
"color": "#FF6600"
},
"assistant": {
"path": "/home/assistant",
"description": "Bruno's Personal AI Assistant",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Bruno's Personal AI Assistant",
"color": "#FF1493"
},
"botum": {
"path": "/home/botum",
"description": "Project user",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Project user",
"color": "#87CEEB"
},
"bruno": {
"path": "/home/bruno",
"description": "Project user",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Project user",
"color": "#DDA0DD"
},
"claude": {
"path": "/home/claude",
"description": "Claude Integration Agent",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Claude Integration Agent",
"color": "#4169E1"
},
"collabook": {
"path": "/home/collabook",
"description": "Collaboration notebook",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Collaboration notebook",
"color": "#90EE90"
},
"gemini": {
"path": "/home/gemini",
"description": "Gemini Integration Agent",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Gemini Integration Agent",
"color": "#FFD700"
},
"luzia": {
"path": "/opt/server-agents/orchestrator",
"description": "Luzia Orchestrator (dogfooding)",
"subagent_model": "sonnet",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep",
"Write"
],
"focus": "Self-improvement, orchestration CLI, meta-development",
"color": "#FF6B6B",
"user": "admin"
},
"git": {
"path": "/home/git",
"description": "Project user",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Project user"
},
"gitea": {
"path": "/home/gitea",
"description": "Gitea",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Gitea"
},
"guest": {
"path": "/home/guest",
"description": "Web Guest Account",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Web Guest Account"
},
"josito": {
"path": "/home/josito",
"description": "Josito (8 years old)",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Josito (8 years old)"
},
"liza": {
"path": "/home/liza",
"description": "Liza",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Liza"
},
"luzuy": {
"path": "/home/luzuy",
"description": "Luz.uy Operator",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Luz.uy Operator"
},
"miguel": {
"path": "/home/miguel",
"description": "Project user",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Project user"
},
"nico": {
"path": "/home/nico",
"description": "Nico's operator workspace",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Nico's operator workspace"
},
"oscar": {
"path": "/home/oscar",
"description": "Oscar Sarlo",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Oscar Sarlo"
},
"presi": {
"path": "/home/presi",
"description": "Project presi",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Project presi"
},
"rio": {
"path": "/home/rio",
"description": "Rio",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Rio"
},
"rut": {
"path": "/home/rut",
"description": "Ruth (Mother)",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Ruth (Mother)"
},
"sarlo": {
"path": "/home/sarlo",
"description": "Sarlo",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Sarlo"
},
"vita": {
"path": "/home/vita",
"description": "Project user",
"subagent_model": "haiku",
"tools": [
"Read",
"Edit",
"Bash",
"Glob",
"Grep"
],
"focus": "Project user"
},
"livekit-agents": {
"path": "/home/livekit-agents",
"description": "LiveKit Agents - Real-time AI voice/video agent framework",
"subagent_model": "sonnet",
"tools": [
"Read",
"Write",
"Edit",
"Bash",
"Glob",
"Grep",
"WebFetch",
"WebSearch"
]
}
},
"shared_tools": {
"zen": "Deep reasoning via PAL MCP",
"sarlo-admin": "Server administration"
},
"routes": {
"management": [
"list",
"status",
"stop",
"cleanup",
"logs"
],
"project_execution": [
"<project> <task>"
],
"special_operations": [
"work on <project>",
"think deep <topic>",
"research <topic>",
"fix <issue>"
],
"internal": [
"--exec <project> <command>",
"--write <project> <path> <content>",
"--read <project> <path>",
"--context <project>"
]
},
"troubleshooting": {
"config_corrupted": {
"error_patterns": [
"configuration corrupted",
"invalid json",
"corrupted",
"config"
],
"fix": "Run restore script in user home: ~/restore-claude-config.sh",
"source_script": "/home/dss/restore-claude-config.sh",
"note": "Script should exist in each project home"
},
"build_failed": {
"error_patterns": [
"build failed",
"build error",
"build"
],
"fix": "Check npm/cargo logs, verify dependencies, run clean build",
"source_script": null,
"note": "Run: npm cache clean && npm install or cargo clean && cargo build"
},
"container_issue": {
"error_patterns": [
"container",
"docker",
"connection refused"
],
"fix": "Restart Docker daemon or check container logs: docker logs <container>",
"source_script": null,
"note": "Use: luzia stop <project> && luzia <project> <task>"
}
}
}