9a55dafd17
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.2 KiB
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 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
Nouveau topic MQTT : agents/<name>/control
- Chaque agent2_* : s'abonner à
agents/<name>/control - Payload
{"command": "pause"}→ flagself.paused = True, stopper le worker - Payload
{"command": "resume"}→ flagself.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>/controlpayload{"command": "report"}) - Publier le rapport sur
agents/daily_reportavec toutes les stats
Agent1 (compilation)
- S'abonner à
agents/daily_report - Stocker les rapports reçus en mémoire + SQLite (
daily_reportstable dansexecutions.db) - Nouveau skill
skills/daily_report.py: triggerDAILY_REPORT:- Compiler les rapports de tous les agents
- Formater un résumé lisible
- Envoyer à
sylvain@xmpp.ovhvia XMPP - Stocker pour historique
- Planifier
DAILY_REPORT:danstasks_schedule.json(ex: 22:30) - Disponible aussi à la demande :
DAILY_REPORT:depuis CLI
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 |