Files
sylvain 3575b391b6 Ajout !agentUPDATE/UPGRADE : mises à jour agents depuis git
- skills/agent_update.py : check_update (git fetch + log) et do_upgrade (git pull + systemctl restart)
- agent1.py : commandes !agentUPDATE <nom>, !agentsUPDATE, !agentUPGRADE <nom>, !agentsUPGRADE
  - _handle_agent_command retourne (handled, reply) pour gérer le self-upgrade agent1
  - !agentUPGRADE agent1 : envoie la réponse XMPP avant systemctl restart
  - !agentsUPGRADE : met à jour tous les agents puis agent1 en dernier
- agents_registry.json : ajout install_path, service_name, git_branch + entrée agent1
- README.md : documentation des nouvelles commandes
- TODO.md : tâches marquées comme terminées

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 15:55:31 +00:00

5.8 KiB

TODO — Évolutions agents autonomes

1. Fichiers de configuration (dans /opt/agent/config/)

reports_schedule.json (géré par agent1 avec confirmation utilisateur)

  • Créer le fichier avec horaires de sollicitation des rapports par agent
  • Agent1 : commande !reports pour afficher, PENDING_CONFIG pour confirmation modification
  • Agent1 : planifier les demandes de rapport selon ce fichier (APScheduler)
  • Chaque agent2_* : répondre à la demande de rapport avec ses stats locales

tasks_schedule.json (géré par agent1 avec confirmation utilisateur)

  • Créer le fichier avec les tâches planifiées par agent
  • Agent1 : !tasks pour afficher, PENDING_CONFIG pour modification avec confirmation
  • Agent1 : charger ce fichier au démarrage et planifier les tâches via APScheduler

blackout_hours.json (édité directement par l'utilisateur)

  • Créer le fichier avec plage(s) horaire(s) de blackout (aucun agent ne travaille)
  • Agent1 : vérifier ce fichier avant chaque délégation de tâche (delegate.py)

2. Plages horaires par agent (work_hours dans agents_registry.json)

  • Ajouter work_hours: {start, end, days} pour chaque agent dans agents_registry.json
  • Modifier skills/delegate.py : vérifier plage horaire avant d'envoyer la tâche
  • Si hors plage → retourner message d'indisponibilité (pas d'exécution)
  • Prendre en compte le blackout_hours.json également dans delegate.py

3. File d'attente locale par agent (SQLite)

Pour chaque agent2_* (/opt/agent2_*/queue.db)

  • Créer table tasks_queue(id, received_at, started_at, completed_at, task, status, result, duration_s)
  • on_mqtt_message() : sauvegarder immédiatement le message en base (status: pending)
  • Worker FIFO dans un thread séparé : traiter les tâches une par une
  • Si paused : worker s'arrête, tâches s'accumulent en base
  • Au resume : worker reprend depuis les tâches pending
  • MQTT : passer à clean_session=False + QoS=1 pour ne pas perdre les messages offline

4. Mode pause / veille par agent

Topic MQTT : agents/<name>/control

  • Chaque agent2_* : s'abonner à agents/<name>/control
  • pause → worker stoppé, resume → worker relancé
  • Agent1 en veille : n'accepte que !agentsON / !agentON agent1

Commandes XMPP (sylvain → agent1)

  • !agentOFF <nom> / !agentON <nom>
  • !agentsOFF / !agentsON
  • !agentOFF agent1 / !agentON agent1 (veille agent1 uniquement)

5. Rapports journaliers

  • Chaque agent2_* : stats depuis queue.db, envoi sur agents/daily_report
  • Agent1 : souscription agents/daily_report, stockage en mémoire
  • skills/daily_report.py : DAILY_REPORT: [agent]
  • APScheduler : sollicitation agents à 22:00/22:05/22:10, rapport journalier à 22:30

6. Ordre d'implémentation suggéré

  1. blackout_hours.json + work_hours dans registry (simple, peu de code)
  2. File d'attente SQLite + mode pause dans chaque agent2_*
  3. Commandes !agentON/OFF dans agent1
  4. reports_schedule.json + stats + rapport journalier
  5. tasks_schedule.json + gestion par agent1 avec confirmation
  6. Tests end-to-end


6. Gestion des mises à jour depuis les dépôts git

Commandes XMPP (sylvain → agent1)

Commande Effet
!agentUPDATE <nom> Vérifie si une mise à jour est disponible sur le dépôt git de l'agent (git fetch + comparaison)
!agentsUPDATE Vérifie les dépôts de tous les agents enregistrés
!agentUPGRADE <nom> Tire les modifications (git pull) + redémarre le service systemd de l'agent
!agentsUPGRADE Git pull + restart de tous les agents

Comportement attendu

  • !agentUPDATE : affiche le résultat de git fetch + git log HEAD..origin/main --oneline
    • Réponse : "Mise à jour disponible : X commit(s)" ou "Déjà à jour"
  • !agentUPGRADE :
    1. git pull origin main dans le répertoire de l'agent
    2. systemctl restart <service_name> pour relancer le service
    3. Confirmation ou erreur envoyée via XMPP
    4. Attendre que le service soit de nouveau EN LIGNE (statut MQTT) avant de confirmer

Informations nécessaires par agent

Ajouter dans agents_registry.json :

"agent2_debian13": {
  "install_path" : "/opt/agent2_debian13",
  "service_name" : "agent2_debian13",
  "git_branch"   : "main"
}

Fichiers à modifier / créer

Fichier Action
config/agents_registry.json Ajouter install_path, service_name, git_branch par agent
agent1.py Gérer !agentUPDATE/UPGRADE et !agentsUPDATE/UPGRADE
skills/agent_update.py Créer — logique git fetch/pull + systemctl restart

Points d'attention

  • Exécuter git et systemctl via subprocess
  • Timeout sur les commandes git/systemctl
  • !agentUPGRADE agent1 : git pull + réponse XMPP envoyée avant systemctl restart agent
  • Gérer le cas où install_path n'est pas dans le registre
  • !agentUPDATE suggère !agentUPGRADE si commits disponibles

Fichiers impactés

Fichier Action
config/agents_registry.json Ajouter work_hours par agent
config/reports_schedule.json Créer
config/tasks_schedule.json Créer
config/blackout_hours.json Créer
agent1.py Commandes !agent*, veille, souscription daily_report, gestion configs
skills/delegate.py Check work_hours + blackout avant délégation
skills/daily_report.py Créer — compilation rapport journalier
skills/schedule_tasks.py Intégrer tasks_schedule.json
agent2_debian13/agent2_debian13.py Queue SQLite, pause/resume, stats, rapport
agent2_ansible/agent2_ansible.py Queue SQLite, pause/resume, stats, rapport
agent2_deploy/agent2_deploy.py Queue SQLite, pause/resume, stats, rapport