aissia/docs/SUCCESSION.md
StillHammer 1f6f95a3a0 docs: Update succession document for MCP integration session
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 17:17:03 +08:00

180 lines
6.2 KiB
Markdown

# 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<InternalTools>(m_io);
// 2. Tools MCP (via serveurs externes)
m_mcpClient = std::make_unique<mcp::MCPClient>();
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 <spdlog/sinks/stdout_color_sinks.h>` partout où `stdout_color_mt` est utilisé
- Ajout `#include <grove/IIO.h>` 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
```