Files
agent1/TODO.md
T

4.0 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

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