337 lines
10 KiB
Bash
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 "$@"
|