- Add run.sh script to automatically load .env before running - Update README.md with interactive mode instructions - Update PROMPT_SUCCESSEUR.md: mark all 110 tests as passing - Document available run modes (interactive, MCP server, normal) All tests now passing: 110/110 ✅ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.8 KiB
Prompt Successeur - AISSIA
Contexte
Tu reprends le développement d'AISSIA, 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/aissia --mcp-server
✅ Mode interactif : ./run.sh ou ./build/aissia --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.* |
AISSIA 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
# 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/aissia --interactive # ou -i
# Tape "quit" ou "q" pour quitter
# Run normal (boucle principale sans interaction)
./build/aissia
# Run comme serveur MCP (pour Claude Code)
./build/aissia --mcp-server
# Tests
cp tests/fixtures/mock_mcp.json build/tests/fixtures/
./build/tests/aissia_tests # Tous (110/110) ✅
./build/tests/aissia_tests "[mcp]" # MCP (50/50)
./build/tests/aissia_tests "[transport]" # Transport (20/20)
./build/tests/aissia_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
-
Tester la boucle agentique 🔥 - Utilise
./run.shpour 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)
- Essayer "Quelle heure est-il ?" (tool
-
Fixer les 8 tests modules✅ FAIT - Tous les 110 tests passent -
Exposer InternalTools via MCP Server - Actuellement seuls FileSystem +
get_current_timesont 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_KEYdans 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.jsonavant tests client
Changements Récents (cette session)
- Fix python → python3 dans configs et tests MCP
- 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)
- Ajout mode interactif (
--interactive) pour tester la boucle LLM