Files
agent1/TODO.md
T

5.2 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 XMPP pour modifier ce fichier (confirmation avant écriture)
  • 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 : commande XMPP pour ajouter/modifier/supprimer une tâche (confirmation avant écriture)
  • Agent1 : charger ce fichier au démarrage et planifier les tâches via APScheduler
  • Remplacer / compléter l'actuel SCHEDULE: skill

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

  • Créer le fichier avec plage(s) horaire(s) de blackout (aucun agent ne travaille)
  • Format : [{"start": "02:00", "end": "05:00", "label": "maintenance"}]
  • Agent1 : vérifier ce fichier avant chaque délégation de tâche
  • Agent1 : vérifier ce fichier avant chaque tâche planifiée

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

Nouveau topic MQTT : agents/<name>/control

  • Chaque agent2_* : s'abonner à agents/<name>/control
  • Payload {"command": "pause"} → flag self.paused = True, stopper le worker
  • Payload {"command": "resume"} → flag self.paused = False, relancer le worker
  • Agent1 en veille : rester connecté XMPP, n'accepter que !agentsON / !agentON agent1

Commandes XMPP (sylvain → agent1)

  • !agentOFF <nom> → envoyer pause à l'agent ciblé
  • !agentON <nom> → envoyer resume à l'agent ciblé
  • !agentsOFF → agent1 en veille + pause à tous les agent2_*
  • !agentsON → agent1 sort de veille + resume à tous les agent2_*
  • !agentOFF agent1 → agent1 en veille uniquement
  • Mettre à jour agents_online.json à chaque changement d'état

5. Rapports journaliers

Chaque agent2_* (stats locales)

  • Tracker en mémoire : tasks_total, tasks_success, tasks_error, avg_duration_s, uptime_s, last_error
  • Alimenter ces stats depuis la queue.db
  • Répondre à la demande de rapport d'agent1 via MQTT (agents/<name>/control payload {"command": "report"})
  • Publier le rapport sur agents/daily_report avec toutes les stats

Agent1 (compilation)

  • S'abonner à agents/daily_report
  • Stocker les rapports reçus en mémoire + SQLite (daily_reports table dans executions.db)
  • Nouveau skill skills/daily_report.py : trigger DAILY_REPORT:
    • Compiler les rapports de tous les agents
    • Formater un résumé lisible
    • Envoyer à sylvain@xmpp.ovh via XMPP
    • Stocker pour historique
  • Planifier DAILY_REPORT: dans tasks_schedule.json (ex: 22:30)
  • Disponible aussi à la demande : DAILY_REPORT: depuis CLI

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

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