4.0 KiB
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 dansagents_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=1pour 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é
blackout_hours.json+work_hoursdans registry (simple, peu de code)- File d'attente SQLite + mode pause dans chaque agent2_*
- Commandes
!agentON/OFFdans agent1 reports_schedule.json+ stats + rapport journaliertasks_schedule.json+ gestion par agent1 avec confirmation- 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 |