veza/scripts/archive/start-agents.sh
2025-12-12 21:34:34 -05:00

337 lines
10 KiB
Bash

#!/bin/bash
# Script de démarrage des agents IA
# Démarre tous les agents configurés pour Veza Platform
set -e
# Configuration
AGENTS_DIR=".cursor/agents"
CONFIG_FILE=".cursor/agents/config.yaml"
LOG_DIR="logs"
PID_DIR=".cursor/agents/pids"
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Fonction d'aide
show_help() {
echo -e "${CYAN}🤖 Script de démarrage des agents IA - Veza Platform${NC}"
echo ""
echo "Usage: $0 [OPTIONS] [AGENT]"
echo ""
echo "Options:"
echo " -h, --help Afficher cette aide"
echo " -a, --all Démarrer tous les agents"
echo " -s, --status Afficher le statut des agents"
echo " -k, --kill Arrêter tous les agents"
echo " -r, --restart Redémarrer tous les agents"
echo " -l, --logs Afficher les logs des agents"
echo " -c, --config Afficher la configuration"
echo ""
echo "Agents disponibles:"
echo " planner Agent planificateur"
echo " researcher Agent chercheur"
echo " implementer Agent implémenteur"
echo " qa Agent QA"
echo " docs Agent documentation"
echo " maintainer Agent maintenance"
echo ""
echo "Exemples:"
echo " $0 --all # Démarrer tous les agents"
echo " $0 planner # Démarrer seulement l'agent planificateur"
echo " $0 --status # Afficher le statut"
echo " $0 --kill # Arrêter tous les agents"
}
# Fonction pour créer les répertoires nécessaires
setup_directories() {
echo -e "${BLUE}[INFO]${NC} Configuration des répertoires..."
mkdir -p "$LOG_DIR"
mkdir -p "$PID_DIR"
mkdir -p "$AGENTS_DIR"/{planner,researcher,implementer,qa,docs,maintainer}
echo -e "${GREEN}[SUCCESS]${NC} Répertoires configurés"
}
# Fonction pour vérifier la configuration
check_config() {
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${RED}[ERROR]${NC} Fichier de configuration non trouvé: $CONFIG_FILE"
exit 1
fi
if ! command -v yq &> /dev/null; then
echo -e "${YELLOW}[WARNING]${NC} yq non installé, utilisation de grep pour la configuration"
return 1
fi
return 0
}
# Fonction pour démarrer un agent
start_agent() {
local agent_name="$1"
local agent_dir="$AGENTS_DIR/$agent_name"
local pid_file="$PID_DIR/$agent_name.pid"
local log_file="$LOG_DIR/$agent_name.log"
# Vérifier si l'agent est déjà en cours d'exécution
if [ -f "$pid_file" ] && kill -0 "$(cat "$pid_file")" 2>/dev/null; then
echo -e "${YELLOW}[WARNING]${NC} Agent $agent_name est déjà en cours d'exécution (PID: $(cat "$pid_file"))"
return 0
fi
echo -e "${BLUE}[INFO]${NC} Démarrage de l'agent $agent_name..."
# Créer le script de l'agent s'il n'existe pas
local agent_script="$agent_dir/run.sh"
if [ ! -f "$agent_script" ]; then
create_agent_script "$agent_name" "$agent_script"
fi
# Démarrer l'agent en arrière-plan
nohup bash "$agent_script" > "$log_file" 2>&1 &
local pid=$!
echo $pid > "$pid_file"
# Attendre un peu pour vérifier que l'agent démarre correctement
sleep 2
if kill -0 $pid 2>/dev/null; then
echo -e "${GREEN}[SUCCESS]${NC} Agent $agent_name démarré (PID: $pid)"
echo "Agent $agent_name démarré" > "$agent_dir/status.txt"
else
echo -e "${RED}[ERROR]${NC} Échec du démarrage de l'agent $agent_name"
rm -f "$pid_file"
return 1
fi
}
# Fonction pour créer le script d'un agent
create_agent_script() {
local agent_name="$1"
local script_path="$2"
cat > "$script_path" << EOF
#!/bin/bash
# Script d'exécution pour l'agent $agent_name
set -e
# Configuration
AGENT_NAME="$agent_name"
AGENT_DIR=".cursor/agents/$agent_name"
LOG_FILE="logs/$agent_name.log"
PID_FILE=".cursor/agents/pids/$agent_name.pid"
# Fonction de nettoyage
cleanup() {
echo "Arrêt de l'agent \$AGENT_NAME..."
rm -f "\$PID_FILE"
exit 0
}
# Capturer les signaux d'arrêt
trap cleanup SIGTERM SIGINT
# Boucle principale de l'agent
while true; do
case "\$AGENT_NAME" in
"planner")
echo "\$(date): Exécution de l'agent Planificateur..." >> "\$LOG_FILE"
# Logique de planification
sleep 60
;;
"researcher")
echo "\$(date): Exécution de l'agent Chercheur..." >> "\$LOG_FILE"
# Logique de recherche
sleep 300
;;
"implementer")
echo "\$(date): Exécution de l'agent Implémenteur..." >> "\$LOG_FILE"
# Logique d'implémentation
sleep 30
;;
"qa")
echo "\$(date): Exécution de l'agent QA..." >> "\$LOG_FILE"
# Logique de QA
sleep 120
;;
"docs")
echo "\$(date): Exécution de l'agent Documentation..." >> "\$LOG_FILE"
# Logique de documentation
sleep 180
;;
"maintainer")
echo "\$(date): Exécution de l'agent Maintenance..." >> "\$LOG_FILE"
# Logique de maintenance
sleep 600
;;
*)
echo "\$(date): Agent inconnu: \$AGENT_NAME" >> "\$LOG_FILE"
sleep 60
;;
esac
done
EOF
chmod +x "$script_path"
}
# Fonction pour arrêter un agent
stop_agent() {
local agent_name="$1"
local pid_file="$PID_DIR/$agent_name.pid"
if [ -f "$pid_file" ]; then
local pid=$(cat "$pid_file")
if kill -0 "$pid" 2>/dev/null; then
echo -e "${BLUE}[INFO]${NC} Arrêt de l'agent $agent_name (PID: $pid)..."
kill "$pid"
rm -f "$pid_file"
echo "Agent $agent_name arrêté" > "$AGENTS_DIR/$agent_name/status.txt"
echo -e "${GREEN}[SUCCESS]${NC} Agent $agent_name arrêté"
else
echo -e "${YELLOW}[WARNING]${NC} Agent $agent_name n'était pas en cours d'exécution"
rm -f "$pid_file"
fi
else
echo -e "${YELLOW}[WARNING]${NC} Fichier PID non trouvé pour l'agent $agent_name"
fi
}
# Fonction pour afficher le statut des agents
show_status() {
echo -e "${CYAN}🤖 Statut des Agents IA - Veza Platform${NC}"
echo ""
echo "| Agent | PID | Statut | Dernière activité |"
echo "|-------|-----|--------|-------------------|"
for agent in planner researcher implementer qa docs maintainer; do
local pid_file="$PID_DIR/$agent.pid"
local status_file="$AGENTS_DIR/$agent/status.txt"
if [ -f "$pid_file" ]; then
local pid=$(cat "$pid_file")
if kill -0 "$pid" 2>/dev/null; then
local status="🟢 Actif"
local last_activity=$(stat -c %y "$status_file" 2>/dev/null | cut -d' ' -f2 | cut -d'.' -f1 || echo "N/A")
else
local status="🔴 Arrêté"
local last_activity="N/A"
fi
else
local status="⚪ Inactif"
local last_activity="N/A"
fi
printf "| %-10s | %-3s | %-10s | %-17s |\n" "$agent" "${pid:-N/A}" "$status" "$last_activity"
done
echo ""
}
# Fonction pour afficher les logs
show_logs() {
local agent_name="$1"
if [ -n "$agent_name" ]; then
local log_file="$LOG_DIR/$agent_name.log"
if [ -f "$log_file" ]; then
echo -e "${CYAN}📋 Logs de l'agent $agent_name${NC}"
echo ""
tail -f "$log_file"
else
echo -e "${RED}[ERROR]${NC} Fichier de log non trouvé: $log_file"
fi
else
echo -e "${CYAN}📋 Logs de tous les agents${NC}"
echo ""
for agent in planner researcher implementer qa docs maintainer; do
local log_file="$LOG_DIR/$agent.log"
if [ -f "$log_file" ]; then
echo -e "${YELLOW}=== $agent ===${NC}"
tail -5 "$log_file"
echo ""
fi
done
fi
}
# Fonction pour afficher la configuration
show_config() {
if [ -f "$CONFIG_FILE" ]; then
echo -e "${CYAN}⚙️ Configuration des Agents IA${NC}"
echo ""
if command -v yq &> /dev/null; then
yq eval '.agents' "$CONFIG_FILE"
else
cat "$CONFIG_FILE"
fi
else
echo -e "${RED}[ERROR]${NC} Fichier de configuration non trouvé: $CONFIG_FILE"
fi
}
# Fonction principale
main() {
case "${1:-}" in
-h|--help)
show_help
;;
-a|--all)
setup_directories
echo -e "${CYAN}🚀 Démarrage de tous les agents...${NC}"
for agent in planner researcher implementer qa docs maintainer; do
start_agent "$agent"
done
echo -e "${GREEN}✅ Tous les agents démarrés${NC}"
;;
-s|--status)
show_status
;;
-k|--kill)
echo -e "${CYAN}🛑 Arrêt de tous les agents...${NC}"
for agent in planner researcher implementer qa docs maintainer; do
stop_agent "$agent"
done
echo -e "${GREEN}✅ Tous les agents arrêtés${NC}"
;;
-r|--restart)
echo -e "${CYAN}🔄 Redémarrage de tous les agents...${NC}"
for agent in planner researcher implementer qa docs maintainer; do
stop_agent "$agent"
done
sleep 2
for agent in planner researcher implementer qa docs maintainer; do
start_agent "$agent"
done
echo -e "${GREEN}✅ Tous les agents redémarrés${NC}"
;;
-l|--logs)
show_logs "$2"
;;
-c|--config)
show_config
;;
planner|researcher|implementer|qa|docs|maintainer)
setup_directories
start_agent "$1"
;;
"")
show_help
;;
*)
echo -e "${RED}[ERROR]${NC} Option ou agent inconnu: $1"
show_help
exit 1
;;
esac
}
# Exécuter la fonction principale
main "$@"