# Prompt Successeur - CELUNA

## Contexte

Tu reprends le développement d'**CELUNA**, un assistant vocal agentique en C++17 basé sur GroveEngine.

**Architecture** : Services (non hot-reload) + Modules (.so hot-reload) + MCP (client et serveur)

## État Actuel

✅ Build OK : `cmake -B build && cmake --build build -j4`
✅ 6 modules hot-reload fonctionnels
✅ 4 services infrastructure (LLM, Storage, Platform, Voice)
✅ 17 tools pour l'agent LLM
✅ Mode MCP Server : `./build/celuna --mcp-server`
✅ Mode interactif : `./run.sh` ou `./build/celuna --interactive`
✅ **Tests MCP : 50/50 passent** (transport + client)
✅ **Tests totaux : 110/110 passent** ✨ TOUS LES TESTS PASSENT ✨
✅ **Script wrapper `run.sh`** pour charger `.env` automatiquement

## Fichiers Clés

| Fichier | Rôle |
|---------|------|
| `src/main.cpp` | Entry point, charge modules, route messages, mode interactif |
| `src/services/LLMService.*` | Boucle agentique, ToolRegistry, appels Claude |
| `src/shared/mcp/MCPServer.*` | CELUNA comme serveur MCP (stdio JSON-RPC) |
| `src/shared/mcp/MCPClient.*` | Consomme serveurs MCP externes |
| `src/shared/mcp/StdioTransport.*` | Transport stdio pour MCP (spawne process enfant) |
| `src/shared/tools/FileSystemTools.*` | 6 tools fichiers (read/write/edit/glob/grep) |
| `src/shared/tools/InternalTools.*` | 11 tools internes (scheduler, voice, storage) |

## Communication

```
┌─────────────┐     IIO pub/sub      ┌─────────────┐
│   Modules   │ ◄──────────────────► │  Services   │
│  (.so hot)  │    JsonDataNode      │  (static)   │
└─────────────┘                      └─────────────┘
                                            │
                                     HTTP   │
                                            ▼
                                     ┌─────────────┐
                                     │  Claude API │
                                     └─────────────┘
```

## Commandes

```bash
# Build
cmake -B build && cmake --build build -j4

# Run mode interactif (recommandé) - charge .env automatiquement
./run.sh

# Run avec interface stdin interactive (manuel)
source .env && ./build/celuna --interactive   # ou -i
# Tape "quit" ou "q" pour quitter

# Run normal (boucle principale sans interaction)
./build/celuna

# Run comme serveur MCP (pour Claude Code)
./build/celuna --mcp-server

# Tests
cp tests/fixtures/mock_mcp.json build/tests/fixtures/
./build/tests/celuna_tests              # Tous (110/110) ✅
./build/tests/celuna_tests "[mcp]"      # MCP (50/50)
./build/tests/celuna_tests "[transport]"  # Transport (20/20)
./build/tests/celuna_tests "[client]"   # Client (15/15)
```

## ~~Tests qui échouent (8)~~ ✅ TOUS FIXÉS

Anciens échecs (maintenant résolus) :
- ✅ `MonitoringModuleTests.cpp` : 4 tests (ajout appName + classification)
- ✅ `AIModuleTests.cpp` : 2 tests (publishSuggestion + simulation LLM)
- ✅ `VoiceModuleTests.cpp` : 1 test (support config flat)
- ✅ `StorageModuleTests.cpp` : 1 test (support durationMinutes)

## Prochaines Étapes Suggérées

1. **Tester la boucle agentique** 🔥 - Utilise `./run.sh` pour lancer le mode interactif
   - Essayer "Quelle heure est-il ?" (tool `get_current_time`)
   - Essayer "Liste les fichiers dans src/" (tool `glob_files`)
   - Essayer "Lis le fichier README.md" (tool `read_file`)
   - Tester les InternalTools : "Quelle est ma tâche actuelle ?" (tool `get_current_task`)

2. ~~**Fixer les 8 tests modules**~~ ✅ FAIT - Tous les 110 tests passent

3. **Exposer InternalTools via MCP Server** - Actuellement seuls FileSystem + `get_current_time` sont exposés. Les InternalTools (scheduler, voice, storage) nécessitent que les modules tournent (IIO). Défi architectural à résoudre.

## Notes Techniques

- **API key** : `ANTHROPIC_API_KEY` dans env ou `.env`
- **WSL** : window tracker et TTS utilisent des stubs
- **GroveEngine** : symlink vers `../GroveEngine`
- **Hot-reload** : modifier un .so dans `build/modules/` → rechargé automatiquement
- **Tests fixtures** : toujours copier `mock_mcp.json` avant tests client

## Changements Récents (cette session)

1. **Fix python → python3** dans configs et tests MCP
2. **Fix StdioTransport** :
   - Préserve l'ID de requête fourni par l'utilisateur
   - Détecte les commandes invalides (waitpid après 100ms)
   - Stop non-bloquant (ferme stdout avant join reader)
   - Ignore les messages avec id=null (notifications)
3. **Ajout mode interactif** (`--interactive`) pour tester la boucle LLM
