# Prompt pour Implémenter WebModule Salut ! Je reprends l'implémentation du **WebModule** pour AISSIA. ## Contexte AISSIA est un assistant vocal agentique en C++17 basé sur GroveEngine. Le projet utilise une architecture modulaire avec hot-reload et communication pub/sub via IIO. **État actuel** : - ✅ 6 modules fonctionnels (Scheduler, Notification, Monitoring, AI, Voice, Storage) - ✅ 110/110 tests passent - ✅ LLM Service avec Claude Sonnet 4 - ✅ HttpClient.hpp déjà implémenté et fonctionnel ## Objectif Implémenter un **WebModule** qui permet aux autres modules de faire des requêtes HTTP de manière dynamique via IIO pub/sub. ## Plan d'Implémentation Le plan complet est dans `plans/webmodule-implementation.md`. Lis-le attentivement avant de commencer. **Résumé des étapes** : ### Phase 1: Core Module (1h) 1. Créer `src/modules/WebModule.h` (voir plan section 2.1) 2. Créer `src/modules/WebModule.cpp` (voir plan section 2.1) 3. Créer `config/web.json` (voir plan section 2.2) 4. Ajouter le module au `CMakeLists.txt` 5. Ajouter le module au `src/main.cpp` ### Phase 2: Tests (1h) 6. Créer `tests/modules/WebModuleTests.cpp` (10 tests - voir plan section 2.3) 7. Exécuter et valider tous les tests ### Phase 3: Documentation (30min) 8. Mettre à jour `README.md` 9. Mettre à jour `CLAUDE.md` 10. Créer un exemple d'utilisation ## Contraintes Importantes ### Règles GroveEngine (voir CLAUDE.md) - **200-300 lignes max** par module - **Logique métier pure** : pas de threading/network dans les modules - **Communication JSON** via IIO pub/sub - **Hot-reload ready** : sérialiser l'état dans `getState()` / `setState()` ### Protocole IIO **Requête** (`web:request`) : ```json { "requestId": "unique-id-123", "url": "https://api.example.com/data", "method": "GET", "headers": {}, "body": "", "timeoutMs": 30000 } ``` **Réponse** (`web:response`) : ```json { "requestId": "unique-id-123", "success": true, "statusCode": 200, "body": "{...}", "durationMs": 234 } ``` ### Réutiliser l'existant **IMPORTANT** : Utilise `src/shared/http/HttpClient.hpp` qui est déjà implémenté et fonctionnel. Regarde comment il est utilisé dans `src/shared/llm/ClaudeProvider.cpp` pour un exemple. Exemple d'utilisation : ```cpp #include "../shared/http/HttpClient.hpp" HttpClient client; HttpResponse response = client.get("https://example.com"); // response.statusCode, response.body, response.headers ``` ## Fichiers à Créer/Modifier **Nouveaux fichiers** : - [ ] `src/modules/WebModule.h` - [ ] `src/modules/WebModule.cpp` - [ ] `config/web.json` - [ ] `tests/modules/WebModuleTests.cpp` **Fichiers à modifier** : - [ ] `CMakeLists.txt` (ajouter WebModule target) - [ ] `src/main.cpp` (charger WebModule) - [ ] `README.md` (documenter WebModule) ## Tests à Implémenter Liste des 10 tests (voir plan section 2.3) : 1. `TI_WEB_001_SimpleGetRequest` 2. `TI_WEB_002_PostRequestWithBody` 3. `TI_WEB_003_InvalidUrlHandling` 4. `TI_WEB_004_TimeoutHandling` 5. `TI_WEB_005_MultipleConcurrentRequests` 6. `TI_WEB_006_RequestIdTracking` 7. `TI_WEB_007_StatisticsTracking` 8. `TI_WEB_008_StateSerialization` 9. `TI_WEB_009_ConfigurationLoading` 10. `TI_WEB_010_ErrorResponseFormat` Utilise le pattern des tests existants (voir `tests/modules/AIModuleTests.cpp` pour exemple). ## Validation Avant de considérer le travail terminé : ### Build & Tests ```bash # Build cmake --build build --target modules -j4 cmake --build build --target aissia_tests -j4 # Tests ./build/tests/aissia_tests "[web]" # Vérifier que tous les tests passent toujours ./build/tests/aissia_tests --reporter compact ``` **Critère de succès** : 120/120 tests passent (110 existants + 10 nouveaux) ### Hot-Reload Teste manuellement le hot-reload : ```bash # 1. Lance AISSIA ./run.sh # 2. Modifie WebModule.cpp (change un log) # 3. Rebuild juste le module cmake --build build --target modules # 4. Vérifie que le module se recharge automatiquement # Les stats doivent être préservées ``` ### Code Review - [ ] Pas de warnings de compilation - [ ] Code suit le style existant - [ ] Commentaires clairs - [ ] Gestion d'erreurs complète - [ ] Logs informatifs ## Commandes Utiles ```bash # Build complet cmake -B build && cmake --build build -j4 # Build modules seulement cmake --build build --target modules # Tests avec filtre ./build/tests/aissia_tests "[web]" # Tous les tests ./build/tests/aissia_tests --reporter compact # Git git add -A git commit -m "feat: Add WebModule for HTTP requests via IIO" git push ``` ## Ressources ### Fichiers de référence - `src/modules/AIModule.cpp` - Exemple de module bien structuré - `src/modules/MonitoringModule.cpp` - Exemple de pub/sub IIO - `src/shared/http/HttpClient.hpp` - Client HTTP à réutiliser - `src/shared/llm/ClaudeProvider.cpp` - Utilisation de HttpClient - `tests/modules/AIModuleTests.cpp` - Pattern de tests ### Documentation - `plans/webmodule-implementation.md` - Plan complet détaillé - `docs/GROVEENGINE_GUIDE.md` - Guide GroveEngine complet - `CLAUDE.md` - Règles de développement ## Notes Importantes 1. **Pas de threading** : Les requêtes HTTP sont synchrones via HttpClient. C'est OK car le module process() est appelé dans la main loop. 2. **State management** : Les stats (total, success, failed) doivent être sauvegardées dans `getState()` et restaurées dans `setState()` pour le hot-reload. 3. **Error handling** : Toutes les erreurs doivent être catchées et transformées en message `web:response` avec `success: false`. 4. **Request ID** : Le `requestId` permet aux modules clients de matcher les requêtes/réponses. C'est crucial pour le pub/sub asynchrone. 5. **Testing** : Utilise MockIO pour les tests (voir tests existants). Pas besoin de vrai serveur HTTP, les tests peuvent mocker les réponses. ## Questions Fréquentes **Q: Comment tester sans vrai serveur HTTP ?** R: Utilise MockIO pour injecter des messages `web:request` et vérifier les `web:response`. Tu peux aussi créer un simple echo server en Python pour les tests d'intégration (optionnel). **Q: Le module doit-il gérer le retry ?** R: Non, pas dans la v1. Le module client doit gérer le retry s'il en a besoin. **Q: Faut-il supporter websockets ?** R: Non, seulement HTTP/HTTPS classique pour la v1. **Q: Cache HTTP ?** R: Non pour la v1. C'est une extension future (voir plan section 7). --- **Bonne chance !** Suis le plan étape par étape et n'hésite pas si tu as des questions. L'objectif est d'avoir un module clean, testé, et qui s'intègre parfaitement avec l'architecture existante. **Timeline suggérée** : - Jour 1 : Phase 1 (Core Module) - Jour 2 : Phase 2 (Tests) - Jour 3 : Phase 3 (Documentation) + Validation finale **Auteur du plan** : Claude Code (Session précédente) **Date** : 2025-11-28