Files
agent1/TODO.md
T
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

142 lines
5.8 KiB
Markdown

# TODO — Évolutions agents autonomes
## 1. Fichiers de configuration (dans `/opt/agent/config/`)
### `reports_schedule.json` _(géré par agent1 avec confirmation utilisateur)_
- [x] Créer le fichier avec horaires de sollicitation des rapports par agent
- [x] Agent1 : commande !reports pour afficher, PENDING_CONFIG pour confirmation modification
- [x] Agent1 : planifier les demandes de rapport selon ce fichier (APScheduler)
- [x] Chaque agent2_* : répondre à la demande de rapport avec ses stats locales
### `tasks_schedule.json` _(géré par agent1 avec confirmation utilisateur)_
- [x] Créer le fichier avec les tâches planifiées par agent
- [x] Agent1 : !tasks pour afficher, PENDING_CONFIG pour modification avec confirmation
- [x] Agent1 : charger ce fichier au démarrage et planifier les tâches via APScheduler
### `blackout_hours.json` _(édité directement par l'utilisateur)_
- [x] Créer le fichier avec plage(s) horaire(s) de blackout (aucun agent ne travaille)
- [x] 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`)
- [x] Ajouter `work_hours: {start, end, days}` pour chaque agent dans `agents_registry.json`
- [x] Modifier `skills/delegate.py` : vérifier plage horaire avant d'envoyer la tâche
- [x] Si hors plage → retourner message d'indisponibilité (pas d'exécution)
- [x] 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`)
- [x] Créer table `tasks_queue(id, received_at, started_at, completed_at, task, status, result, duration_s)`
- [x] `on_mqtt_message()` : sauvegarder immédiatement le message en base (status: `pending`)
- [x] Worker FIFO dans un thread séparé : traiter les tâches une par une
- [x] Si paused : worker s'arrête, tâches s'accumulent en base
- [x] Au resume : worker reprend depuis les tâches `pending`
- [x] 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`
- [x] Chaque agent2_* : s'abonner à `agents/<name>/control`
- [x] pause → worker stoppé, resume → worker relancé
- [x] Agent1 en veille : n'accepte que `!agentsON` / `!agentON agent1`
### Commandes XMPP (sylvain → agent1)
- [x] `!agentOFF <nom>` / `!agentON <nom>`
- [x] `!agentsOFF` / `!agentsON`
- [x] `!agentOFF agent1` / `!agentON agent1` (veille agent1 uniquement)
---
## 5. Rapports journaliers
- [x] Chaque agent2_* : stats depuis queue.db, envoi sur `agents/daily_report`
- [x] Agent1 : souscription `agents/daily_report`, stockage en mémoire
- [x] `skills/daily_report.py` : DAILY_REPORT: [agent]
- [x] 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` :
```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
- [x] Exécuter `git` et `systemctl` via subprocess
- [x] Timeout sur les commandes git/systemctl
- [x] `!agentUPGRADE agent1` : git pull + réponse XMPP envoyée avant `systemctl restart agent`
- [x] Gérer le cas où `install_path` n'est pas dans le registre
- [x] `!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 |