# Document de Succession - AISSIA Agent Vocal ## Contexte Actuel AISSIA est maintenant un **assistant vocal agentique** basé sur GroveEngine, capable d'utiliser des tools (internes + MCP) pour accomplir des tâches. Architecture "Claude Code en vocal". **Dernier commit** : `059709c` - feat: Implement MCP client and internal tools for agentic LLM ## Ce qui a été fait (Session actuelle) ### 1. Infrastructure Tools Internes Créé `src/shared/tools/` : | Fichier | Description | |---------|-------------| | `IOBridge.hpp` | Request/response synchrone sur IIO async (correlation_id) | | `InternalTools.hpp/.cpp` | 11 tools pour interagir avec les modules GroveEngine | **Tools disponibles** : - **Scheduler** : `get_current_task`, `list_tasks`, `start_task`, `complete_task`, `start_break` - **Monitoring** : `get_focus_stats`, `get_current_app` - **Storage** : `save_note`, `query_notes`, `get_session_history` - **Voice** : `speak` ### 2. Client MCP Créé `src/shared/mcp/` : | Fichier | Description | |---------|-------------| | `MCPTypes.hpp` | Types MCP (Tool, Resource, ServerConfig, JSON-RPC) | | `MCPTransport.hpp` | Interface transport abstrait | | `StdioTransport.hpp/.cpp` | Transport stdio (fork/exec + JSON-RPC) | | `MCPClient.hpp/.cpp` | Orchestration multi-serveurs MCP | **Serveurs MCP supportés** (désactivés par défaut dans `config/mcp.json`) : - `filesystem` - read/write fichiers - `brave-search` - recherche web - `fetch` - HTTP requests - `memory` - knowledge graph ### 3. Handlers dans les Modules Chaque module répond aux requêtes tools via IIO : | Module | Topics écoutés | Topic réponse | |--------|---------------|---------------| | SchedulerModule | `scheduler:query`, `scheduler:command` | `scheduler:response` | | MonitoringModule | `monitoring:query` | `monitoring:response` | | StorageModule | `storage:query`, `storage:command` | `storage:response` | | VoiceModule | `voice:command` | (fire-and-forget) | ### 4. Intégration LLMService `LLMService` unifie tous les tools : ```cpp void LLMService::initializeTools() { // 1. Tools internes (via GroveEngine IIO) m_internalTools = std::make_unique(m_io); // 2. Tools MCP (via serveurs externes) m_mcpClient = std::make_unique(); m_mcpClient->loadConfig("config/mcp.json"); m_mcpClient->connectAll(); } ``` ## Architecture Finale ``` ┌─────────────────────────────────────────────────────────────┐ │ LLMService │ │ (Agentic Loop) │ ├─────────────────────────────────────────────────────────────┤ │ ToolRegistry │ │ ├── InternalTools (11 tools) ─────► IIO pub/sub │ │ └── MCPClient (tools externes) ─────► stdio JSON-RPC │ └─────────────────────────────────────────────────────────────┘ │ ┌──────────────┬─────┴──────┬──────────────┐ Scheduler Monitoring Storage Voice Module Module Module Module ``` ## État du Build ✅ **Compile sans erreur** - `cmake --build build -j4` Fixes appliqués cette session : - Ajout `#include ` partout où `stdout_color_mt` est utilisé - Ajout `#include ` dans les modules .cpp - `const_cast` pour `getChildReadOnly` (IDataNode non-const) - Fonction `cloneDataNode()` dans main.cpp (workaround pour `clone()` manquant) - Restauration du symlink `external/GroveEngine` ## Fichiers Clés ### Nouveaux (cette session) ``` src/shared/tools/ ├── IOBridge.hpp ├── InternalTools.hpp └── InternalTools.cpp src/shared/mcp/ ├── MCPTypes.hpp ├── MCPTransport.hpp ├── StdioTransport.hpp ├── StdioTransport.cpp ├── MCPClient.hpp └── MCPClient.cpp config/mcp.json docs/PLAN_MCP_INTEGRATION.md ``` ### Modifiés (cette session) ``` CMakeLists.txt # Ajout AissiaTools lib src/services/LLMService.hpp # Ajout InternalTools + MCPClient src/services/LLMService.cpp # initializeTools() src/modules/SchedulerModule.* # Tool handlers src/modules/MonitoringModule.* # Tool handlers src/modules/StorageModule.* # Tool handlers + Note struct src/modules/VoiceModule.* # Tool handlers ``` ## Prochaines Étapes ### Priorité Haute 1. **Tester la boucle agentique** - Envoyer une requête LLM et vérifier que les tools sont appelés 2. **Activer un serveur MCP** - Tester avec `filesystem` par exemple 3. **Streaming responses** - Pour feedback temps réel pendant la génération ### Priorité Moyenne 4. **Améliorer IOBridge** - Le timeout de 5s peut être trop court pour certains tools 5. **Ajouter plus de tools internes** - Ex: `add_task`, `set_reminder`, etc. 6. **Persistance des notes** - Actuellement en mémoire dans StorageModule ### Priorité Basse 7. **Tests unitaires** - Mock IIO pour tester InternalTools 8. **Tests MCP** - Mock server pour tester StdioTransport 9. **Optimisation latence** - Le request/response via IIO ajoute ~100ms ## Pour Tester ```bash # Build cd /mnt/e/Users/Alexis\ Trouvé/Documents/Projets/Aissia cmake -B build && cmake --build build -j4 # Run ./build/aissia # Les modules se chargent automatiquement depuis build/modules/ # Les tools sont enregistrés au démarrage de LLMService ``` ## Variables d'Environnement Requises ```bash # Pour Claude API export ANTHROPIC_API_KEY="sk-ant-..." # Pour MCP servers (optionnel) export BRAVE_API_KEY="..." # Si brave-search activé ``` ## Commandes Git Utiles ```bash # Voir les derniers commits git log --oneline -5 # Voir les changements depuis le refactoring git diff 26a5d34..HEAD --stat ```