From 3625a0af088c09e194eb612177fad6dd651a3e4c Mon Sep 17 00:00:00 2001 From: sylvain Date: Mon, 9 Mar 2026 12:21:59 +0000 Subject: [PATCH] Add TODO.md and BUGS.md Co-Authored-By: Claude Sonnet 4.6 --- BUGS.md | 37 +++++++++++++++ TODO.md | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 BUGS.md create mode 100644 TODO.md diff --git a/BUGS.md b/BUGS.md new file mode 100644 index 0000000..64a794b --- /dev/null +++ b/BUGS.md @@ -0,0 +1,37 @@ +# BUGS & PROBLÈMES CONNUS + +## Bugs résolus ✓ + +| # | Description | Résolution | +|---|-------------|------------| +| B01 | `ImportError: cannot import name 'BaseAgent' from 'agents_core'` — `sys.path.insert(0, "/opt")` faisait trouver `/opt/agents_core` comme namespace package avant l'install éditable | Supprimé dans tous les agents | +| B02 | `AttributeError: '_SlixClient' object has no attribute 'process'` — slixmpp 1.13 est full asyncio, `process()` supprimé | Remplacé par `asyncio.new_event_loop()` + `loop.run_forever()` | +| B03 | `TypeError: XEP_0045.join_muc() got an unexpected keyword argument 'wait'` | Supprimé `wait=True` | +| B04 | `[Registry] Erreur parsing capacités` au démarrage — messages MQTT retained vides mal gérés | `update_from_json()` ignore silencieusement les payloads vides | +| B05 | Mosquitto refusait de démarrer — `Duplicate persistence_location` entre `/etc/mosquitto/mosquitto.conf` et notre `agents.conf` | Supprimé `persistence` et `persistence_location` de `agents.conf` | +| B06 | `send_xmpp_message()` appelé depuis un thread non-asyncio → comportement indéfini | Utilisation de `loop.call_soon_threadsafe()` | +| B07 | MUC room incorrecte (`agents@conference.xmpp.ovh` au lieu de `agents@muc.xmpp.ovh`) | Corrigé dans config.json et deployer.py | + +--- + +## Bugs actifs + +| # | Sévérité | Description | Piste | +|---|----------|-------------|-------| +| B08 | Haute | **Nexus ne voit pas les autres agents comme connectés** — `/agents` ne liste aucun agent en ligne même si les agents tournent. Nexus surveille les topics `agents/+/status` pour les mises à jour de présence, mais les agents n'ont peut-être pas encore publié leur statut retained, ou le topic pattern ne correspond pas. | Vérifier que les agents publient bien sur `agents//status` (retained) au démarrage, et que Nexus souscrit à ce topic au bon moment | +| B09 | Moyenne | **`Task exception was never retrieved`** dans les logs asyncio — une coroutine slixmpp lève une exception non capturée | Identifier la coroutine concernée, ajouter un handler `loop.set_exception_handler()` | +| B10 | Moyenne | **`/update ` ne fait rien** — Nexus envoie la commande MQTT mais `BaseAgent` n'a pas de handler pour `/update` (git pull + restart) | Implémenter dans `base_agent.py` : handler `/update` → subprocess git pull → systemctl restart | +| B11 | Faible | **`/admins add ` non persistant** — l'ajout à chaud d'un admin fonctionne en mémoire mais est perdu au redémarrage de Nexus | Réécrire `config.json` après chaque `add_admin()` / `remove_admin()` | +| B12 | Faible | **`work_hours` non vérifié avant délégation** — `skills/delegate.py` envoie la tâche sans vérifier si l'agent cible est dans ses heures de travail | Lire `caps.work_hours` depuis le registry et bloquer si hors plage | + +--- + +## Points de vigilance + +| # | Description | +|---|-------------| +| W01 | Les agents `agent_debian`, `agent_ansible`, `agent_deploy` n'ont pas encore été installés et testés sur cette machine | +| W02 | OMEMO est un stub non fonctionnel — les conversations XMPP ne sont pas chiffrées | +| W03 | Le broker MQTT est sans authentification (`allow_anonymous true`) — acceptable en réseau local, à sécuriser si exposé | +| W04 | `slixmpp` 1.13 — API asyncio, vérifier la compatibilité des plugins XEP si d'autres sont ajoutés | +| W05 | `_SlixClient.start()` crée un nouveau event loop par thread — s'assurer qu'aucun autre code n'appelle `asyncio.get_event_loop()` sans précaution dans ce thread | diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..2948055 --- /dev/null +++ b/TODO.md @@ -0,0 +1,143 @@ +# TODO — Système multi-agents (Nexus + agents spécialisés) + +## Légende +- [x] Implémenté +- [ ] À faire +- [~] Partiel / à améliorer + +--- + +## 1. Infrastructure de base + +| Item | État | +|------|------| +| `agents_core` — librairie partagée (pip install -e) | [x] | +| `BaseAgent` — classe abstraite commune à tous les agents | [x] | +| Système de skills (plugins `.py` auto-découverts) | [x] | +| File d'attente SQLite FIFO par agent (`task_queue.py`) | [x] | +| Mode pause / resume par agent (`/pause`, `/resume`) | [x] | +| Plages horaires par agent (`work_hours` dans config.json) | [x] | +| Broker MQTT local (Mosquitto) | [x] | +| Topics MQTT structurés : inbox, status, capabilities, broadcast | [x] | +| LWT (Last Will Testament) MQTT → statut offline automatique | [x] | +| Reconnexion automatique MQTT | [x] | + +--- + +## 2. Nexus — orchestrateur + +| Item | État | +|------|------| +| Connexion XMPP + MUC | [x] | +| Multi-utilisateurs XMPP (`admin_jids`) | [x] | +| Commandes `/admins add/remove/list` | [x] | +| **Persistance des admins ajoutés à chaud** (réécriture config.json) | [ ] | +| Mode veille `/sleep` / `/wake` | [x] | +| Scheduler APScheduler (`/schedule`, `/schedules`, `/schedule cancel`) | [x] | +| Rapports quotidiens agrégés (`/report`) | [x] | +| Délégation directe `@agent message` | [x] | +| Broadcast `@all message` | [x] | +| Mise à jour agent `/update ` (envoi MQTT) | [x] | +| **Vérification `work_hours` avant délégation** (delegate skill) | [ ] | +| **Blackout global** (plage horaire où aucune tâche n'est envoyée) | [ ] | +| Commande `/status` détaillée (uptime, nb tâches, LLM actif…) | [~] | +| Skill `web_search` (DuckDuckGo) | [x] | +| Skill `web_read` (BeautifulSoup) | [x] | +| Skill `memory` (clé/valeur SQLite) | [x] | +| Skill `delegate` | [x] | +| Skill `mqtt_send` | [x] | + +--- + +## 3. agent_debian — administration système + +| Item | État | +|------|------| +| Skills : `sysinfo`, `apt`, `systemd`, `filesystem`, `network` | [x] | +| Skills : `process`, `journal`, `user`, `container`, `cron` | [x] | +| Skill `script` avec `$MQTT_REPLY_TOPIC` pour retour résultat | [x] | +| Skill `shell` (commandes arbitraires) | [x] | +| Monitoring proactif disque (>85%) → alerte MQTT | [x] | +| Monitoring proactif RAM (>90%) → alerte MQTT | [x] | +| **Venv + service systemd installés et testés** | [ ] | +| **Tests end-to-end des skills depuis Nexus** | [ ] | + +--- + +## 4. agent_ansible — automatisation + +| Item | État | +|------|------| +| Skill `playbook` | [x] | +| Skill `adhoc` (avec aliases : ping, facts, uptime…) | [x] | +| Skill `inventory` | [x] | +| Skill `galaxy` | [x] | +| Skill `vault` | [x] | +| `ansible.cfg` optimisé (pipelining, fact cache, 10 forks) | [x] | +| **Venv + service systemd installés et testés** | [ ] | + +--- + +## 5. agent_deploy — déploiement d'agents + +| Item | État | +|------|------| +| Déploiement SSH (Paramiko) + local | [x] | +| Catalogue d'agents (nexus, debian, ansible, deploy) | [x] | +| Skill `deploy` avec progress MQTT temps réel | [x] | +| Skill `ssh` (commande distante + SCP) | [x] | +| Skill `catalog` (list/show/add/remove) | [x] | +| **Venv + service systemd installés et testés** | [ ] | +| **Déployer agent_debian sur machine distante (test réel)** | [ ] | + +--- + +## 6. Mise à jour des agents (`/update`) + +| Item | État | +|------|------| +| Nexus envoie `/update` via MQTT à l'agent cible | [x] | +| **BaseAgent gère `/update` : `git pull` + `systemctl restart`** | [ ] | +| Vérification si mise à jour disponible (`git fetch` + diff) | [ ] | +| Confirmation XMPP après redémarrage réussi | [ ] | +| `/update` sur Nexus lui-même (git pull + restart) | [ ] | + +--- + +## 7. Sécurité / chiffrement + +| Item | État | +|------|------| +| Filtrage XMPP par `admin_jids` | [x] | +| OMEMO (stub présent, non fonctionnel) | [~] | +| **OMEMO réel** (slixmpp-omemo) | [ ] | +| **OpenPGP alternative** (si OMEMO trop complexe) | [ ] | +| Authentification MQTT (username/password) | [~] | +| TLS MQTT | [~] | + +--- + +## 8. Script d'installation (`install.sh`) + +| Item | État | +|------|------| +| Scan modèles Ollama disponibles + choix interactif | [x] | +| Multi-utilisateurs XMPP (collection `admin_jids`) | [x] | +| Choix domaine XMPP | [x] | +| Sélection des agents à installer | [x] | +| Génération `config.json` + service systemd | [x] | +| Mode `--update` et `--uninstall` | [x] | +| **Test complet end-to-end de install.sh** | [ ] | +| **Documenter les prérequis (compte XMPP, Ollama…)** | [ ] | + +--- + +## 9. Ordre de priorité suggéré + +1. **Implémenter `/update` dans BaseAgent** (git pull + restart) — fonctionnalité clé +2. **Installer et tester agent_debian** sur cette machine +3. **Persistance des admins** (réécriture config.json à chaud) +4. **Vérification `work_hours` dans delegate.py** +5. **Test install.sh complet** sur machine vierge +6. **OMEMO** (si slixmpp-omemo disponible) +7. **Blackout global** dans Nexus