diff --git a/AlternativesAnalysis.md b/AlternativesAnalysis.md index bc58082..fceefc0 100644 --- a/AlternativesAnalysis.md +++ b/AlternativesAnalysis.md @@ -1,7 +1,7 @@ -# Analyse des Alternatives Techniques - AISSIA +# Analyse des Alternatives Techniques - CELUNA **Date:** 27 octobre 2025 -**Contexte:** Analyse comparative de toutes les options techniques discutées pour le développement d'AISSIA +**Contexte:** Analyse comparative de toutes les options techniques discutées pour le développement d'CELUNA --- @@ -140,7 +140,7 @@ ImGui UI (C++) ↓ IPC (IntraIO) WarFactory Engine Core ↓ DLL/SO Loader -AISSIA Modules (.dll/.so) +CELUNA Modules (.dll/.so) - MonitoringModule.dll - SchedulerModule.dll - AIModule.dll @@ -238,7 +238,7 @@ Native OS APIs // ui-imgui.dll module class UIModule : public IModule { void Render() { - ImGui::Begin("AISSIA Dashboard"); + ImGui::Begin("CELUNA Dashboard"); // Render planning, tasks, settings ImGui::End(); } @@ -371,7 +371,7 @@ MainWindow window; // Qt Widgets **Architecture :** ```cpp -// aissia.exe - tout en un +// celuna.exe - tout en un int main() { MonitoringSystem monitor; SchedulerSystem scheduler; @@ -439,7 +439,7 @@ Frontend **Architecture :** ``` -aissia-core.exe (Engine WarFactory) +celuna-core.exe (Engine WarFactory) ↓ DLL/SO Loader modules/ monitoring.dll @@ -493,9 +493,9 @@ Similaire à Option 3 mais sans l'architecture complète WarFactory (IEngine, IM **Architecture :** ``` User Machine -├── aissia-core.exe +├── celuna-core.exe ├── modules/*.dll -├── aissia.db (SQLite) +├── celuna.db (SQLite) └── gameconfig.json ``` @@ -552,8 +552,8 @@ S3 Storage **Architecture :** ``` User Machine (Primary) -├── aissia-core.exe (local) -├── aissia.db (SQLite local) +├── celuna-core.exe (local) +├── celuna.db (SQLite local) └── Sync Service (optionnel) ↓ HTTPS (si activé) Cloud Sync Server (optionnel) @@ -657,7 +657,7 @@ User Machine A User Machine B └─────────────┬───────────────────────┘ │ IntraIO (IPC local) ┌─────────────▼───────────────────────┐ -│ aissia-core.exe │ +│ celuna-core.exe │ │ (WarFactory Engine) │ │ ┌────────────────────────────────┐ │ │ │ ICoordinationModule │ │ @@ -728,11 +728,11 @@ User Machine A User Machine B #### 7. **Simplicité Déploiement** ✅ **Copier-coller dossier = fonctionne** ``` -aissia/ -├── aissia-core.exe +celuna/ +├── celuna-core.exe ├── modules/*.dll ├── gameconfig.json -└── aissia.db +└── celuna.db ``` - Pas de Docker, K8s, services cloud - Pas d'installation complexe @@ -878,7 +878,7 @@ aissia/ ### Maintenabilité - ✅ **Modules indépendants** : Build autonome `cmake .` - ✅ **Tests isolés** : Chaque module testable seul -- ✅ **Documentation complète** : `aissia/docs/` (copié WarFactory) +- ✅ **Documentation complète** : `celuna/docs/` (copié WarFactory) --- diff --git a/CDCDraft.md b/CDCDraft.md index 9f9d3dc..e78399c 100644 --- a/CDCDraft.md +++ b/CDCDraft.md @@ -1,4 +1,4 @@ -# Cahier des Charges - AISSIA (AI Smart Schedule & Interactive Assistant) +# Cahier des Charges - CELUNA (AI Smart Schedule & Interactive Assistant) **Version:** 0.4 - Architecture Hybride Proposée **Date:** 27 octobre 2025 @@ -132,7 +132,7 @@ Assistant personnel intelligent et proactif qui : ### 4.1 Proposition Architecturale : Architecture Hybride WarFactory + WASM -**PROPOSITION ARCHITECTURALE** : AISSIA pourrait réutiliser l'architecture modulaire WarFactory avec compilation multi-target optionnelle (DLL/SO/WASM). +**PROPOSITION ARCHITECTURALE** : CELUNA pourrait réutiliser l'architecture modulaire WarFactory avec compilation multi-target optionnelle (DLL/SO/WASM). **⚠️ IMPORTANT - Phases d'implémentation :** - **Phase 1 (local_dev) = OBLIGATOIRE** : Cible principale MVP avec WarFactory DLL Windows uniquement @@ -156,7 +156,7 @@ UN SEUL CODE, TROIS DÉPLOIEMENTS ! - 🎯 **Développement 100% Windows** : Visual Studio 2022, DLL, ImGui, hot-reload 0.4ms (validé) - ⚠️ **Modules C++ écrits UNE FOIS** : Compilés en DLL (dev), SO (serveur), WASM (browser) (hypothétique - à tester) - ⚠️ **Déploiement flexible** : gameconfig.json bascule entre mode `local_dev` et `production_pwa` (hypothétique) -- ✅ **MVP = Mode Local OBLIGATOIRE** : aissia-core.exe + DLL + ImGui + SQLite ($0 coût) +- ✅ **MVP = Mode Local OBLIGATOIRE** : celuna-core.exe + DLL + ImGui + SQLite ($0 coût) - ⚠️ **Production optionnelle CONDITIONNELLE** : React PWA + WASM client + Docker serveur ($3-5/mois) - SI Phase 2 validée - ⚠️ **Cross-platform automatique** : Docker + WASM = tourne partout sans effort (hypothétique - complexité à évaluer) - ⚠️ **Mobile optionnel** : PWA installable (Phase 3+, SEULEMENT si besoin validé) @@ -174,7 +174,7 @@ UN SEUL CODE, TROIS DÉPLOIEMENTS ! ### 4.2 Modes de Déploiement -**AISSIA propose DEUX modes de déploiement distincts, potentiellement sélectionnables via `gameconfig.json` :** +**CELUNA propose DEUX modes de déploiement distincts, potentiellement sélectionnables via `gameconfig.json` :** **⚠️ Clarification priorités :** - **Mode 1 (local_dev) = OBLIGATOIRE** : Cible MVP, sera implémenté en Phase 1 @@ -187,7 +187,7 @@ UN SEUL CODE, TROIS DÉPLOIEMENTS ! ┌─────────────────────────────────────┐ │ Windows PC │ │ ┌───────────────────────────────┐ │ -│ │ aissia-core.exe │ │ +│ │ celuna-core.exe │ │ │ │ (WarFactory Engine) │ │ │ │ ├─ IEngine (DebugEngine) │ │ │ │ ├─ IModuleSystem (Sequential)│ │ @@ -202,14 +202,14 @@ UN SEUL CODE, TROIS DÉPLOIEMENTS ! │ │ ├─ storage.dll │ │ │ │ └─ ui-imgui.dll │ │ │ └───────────────────────────────┘ │ -│ SQLite local (aissia.db) │ +│ SQLite local (celuna.db) │ └─────────────────────────────────────┘ ``` **Caractéristiques :** - ✅ **Hot-reload** : 0.4ms (750,000x plus rapide que rebuild complet) - ✅ **UI** : Dear ImGui (C++, intégré WarFactory) -- ✅ **Storage** : SQLite local (aissia.db) +- ✅ **Storage** : SQLite local (celuna.db) - ✅ **Coût** : $0 (tout local) - ✅ **Privacy** : Données jamais uploadées (sauf appels Claude API) - ✅ **Performance** : Native C++ (pas de WASM overhead) @@ -282,7 +282,7 @@ UN SEUL CODE, TROIS DÉPLOIEMENTS ! - **CI/CD** : GitHub Actions #### Mode `local_dev` - Modules C++ (DLL) -- **Core Engine** : WarFactory (aissia-core.exe) +- **Core Engine** : WarFactory (celuna-core.exe) - IEngine (DebugEngine) - IModuleSystem (SequentialModuleSystem) - IIO (IntraIO pour communication locale) @@ -292,9 +292,9 @@ UN SEUL CODE, TROIS DÉPLOIEMENTS ! - `scheduler.dll` : Algorithmes planning, détection procrastination - `ai.dll` : Claude Haiku API integration - `voice.dll` : SAPI TTS (Windows) + Whisper.cpp STT - - `storage.dll` : SQLite local (aissia.db) + - `storage.dll` : SQLite local (celuna.db) - `ui-imgui.dll` : Interface ImGui -- **Base de données** : SQLite local (aissia.db) +- **Base de données** : SQLite local (celuna.db) - **Coût** : $0 (tout local, sauf appels Claude API $10-20/mois) #### Mode `production_pwa` - Backend Serveur (SO) @@ -423,7 +423,7 @@ cmake -B build-windows -G "Visual Studio 17 2022" cmake --build build-windows --config Release # Build SO (serveur Linux via Docker) -docker build -t aissia-backend -f docker/Dockerfile.backend . +docker build -t celuna-backend -f docker/Dockerfile.backend . # Build WASM (client browser via Emscripten) emcmake cmake -B build-wasm @@ -632,7 +632,7 @@ Le mode `local_dev` seul reste une excellente solution pour le besoin initial (h └────────────────────┴────────────────────┘ │ Tous accèdent à la même PWA - https://aissia.app + https://celuna.app ┌───────────────────────────────────────────────────────────────┐ │ SERVICES EXTERNES │ @@ -811,7 +811,7 @@ Schedule **Objectif** : Version locale fonctionnelle avec hot-reload WarFactory (mode `local_dev` DLL uniquement) **Core Engine :** -- [ ] aissia-core.exe (WarFactory engine) +- [ ] celuna-core.exe (WarFactory engine) - IEngine (DebugEngine) - IModuleSystem (SequentialModuleSystem) - IIO (IntraIO) @@ -835,7 +835,7 @@ Schedule - Whisper.cpp STT (speech-to-text local) - Subscribe "ai_response", speak() - [ ] StorageModule.dll - - SQLite local (aissia.db) + - SQLite local (celuna.db) - CRUD tâches, historique, métriques - [ ] UIModule-ImGui.dll - Dear ImGui interface @@ -944,7 +944,7 @@ Schedule ## 8. KPIs de Succès ### Phase 1 - MVP Local -- ✅ aissia-core.exe fonctionnel (WarFactory engine) +- ✅ celuna-core.exe fonctionnel (WarFactory engine) - ✅ 6 modules DLL opérationnels (monitoring, scheduler, ai, voice, storage, ui) - ✅ Hot-reload 0.4ms validé - ✅ Utilisation personnelle quotidienne (dogfooding) @@ -985,7 +985,7 @@ MÊME code C++ (IModule WarFactory) - **Dev** : Windows 10/11, Visual Studio 2022, WarFactory engine - **Modules** : DLL (monitoring, scheduler, ai, voice, storage, ui-imgui) - **UI** : Dear ImGui (C++, intégré) -- **Storage** : SQLite local (aissia.db) +- **Storage** : SQLite local (celuna.db) - **Coût** : $0 hosting + $10-20/mois Claude API **Mode 2 : `production_pwa` (Phase 3 - Optionnel) :** @@ -1029,7 +1029,7 @@ MÊME code C++ (IModule WarFactory) - Vérifier performance WASM acceptable 3. **Création structure projet** (si POC validé) : ``` - aissia/ + celuna/ ├── modules/ # C++ modules sources │ ├── SchedulerModule/ │ ├── StorageModule/ @@ -1130,7 +1130,7 @@ MÊME code C++ (IModule WarFactory) - gameconfig.json mode `local_dev` uniquement 2. **Implémentation Phase 1** : - - aissia-core.exe (WarFactory engine) + - celuna-core.exe (WarFactory engine) - 6 modules DLL (monitoring, scheduler, ai, voice, storage, ui-imgui) - Validation dogfooding usage personnel diff --git a/CLAUDE.md b/CLAUDE.md index 4fc1bfb..a9b5f22 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ -# AISSIA - Assistant Personnel Intelligent +# Celuna AI by Etheryale 🌙✨ -Assistant pour gérer le temps, l'hyperfocus et l'apprentissage de langues. Basé sur **GroveEngine** (C++17 hot-reload module system). +Assistant céleste pour gérer le temps, l'hyperfocus et l'apprentissage de langues. Basé sur **GroveEngine** (C++17 hot-reload module system). ## Statut @@ -35,7 +35,7 @@ Assistant pour gérer le temps, l'hyperfocus et l'apprentissage de langues. Bas ## Structure ``` -Aissia/ +Celuna/ ├── src/ │ ├── main.cpp # Main loop 10Hz + hot-reload │ └── modules/ # Modules implémentés @@ -50,13 +50,13 @@ Aissia/ ```bash cmake -B build && cmake --build build -j4 -./build/aissia +./build/celuna # Hot-reload: rebuild modules seulement cmake --build build --target modules # Mode MCP Server (expose tools via JSON-RPC stdio) -./build/aissia --mcp-server +./build/celuna --mcp-server ``` ## Documentation @@ -64,6 +64,6 @@ cmake --build build --target modules | Doc | Contenu | |-----|---------| | `docs/GROVEENGINE_GUIDE.md` | API complète IModule, IIO, IDataNode, hot-reload | -| `docs/project-overview.md` | Architecture AISSIA, phases dev | +| `docs/project-overview.md` | Architecture Celuna, phases dev | | `docs/architecture/intelligent-document-retrieval.md` | AIAssistantModule: retrieval agentique, multi-provider LLM | | `README.md` | Quick start, roadmap | diff --git a/CMakeLists.txt b/CMakeLists.txt index 88a2bdc..40f452b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.20) -project(Aissia VERSION 0.2.0 LANGUAGES CXX) +project(Celuna VERSION 0.2.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -60,31 +60,31 @@ FetchContent_MakeAvailable(httplib) # ============================================================================ # LLM Providers Library -add_library(AissiaLLM STATIC +add_library(CelunaLLM STATIC src/shared/llm/LLMProviderFactory.cpp src/shared/llm/ClaudeProvider.cpp src/shared/llm/OpenAIProvider.cpp src/shared/llm/ToolRegistry.cpp ) -target_include_directories(AissiaLLM PUBLIC +target_include_directories(CelunaLLM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${httplib_SOURCE_DIR} ) -target_link_libraries(AissiaLLM PUBLIC +target_link_libraries(CelunaLLM PUBLIC GroveEngine::impl spdlog::spdlog ) # Link Winsock for httplib on Windows if(WIN32) - target_link_libraries(AissiaLLM PUBLIC ws2_32) + target_link_libraries(CelunaLLM PUBLIC ws2_32) endif() if(OPENSSL_FOUND) - target_link_libraries(AissiaLLM PUBLIC OpenSSL::SSL OpenSSL::Crypto) - target_compile_definitions(AissiaLLM PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) + target_link_libraries(CelunaLLM PUBLIC OpenSSL::SSL OpenSSL::Crypto) + target_compile_definitions(CelunaLLM PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) endif() # Tools Library (Internal tools + FileSystem tools + MCP client + MCP server + MCP Server Tools) -add_library(AissiaTools STATIC +add_library(CelunaTools STATIC src/shared/tools/InternalTools.cpp src/shared/tools/FileSystemTools.cpp src/shared/tools/MCPServerTools.cpp @@ -92,51 +92,51 @@ add_library(AissiaTools STATIC src/shared/mcp/MCPClient.cpp src/shared/mcp/MCPServer.cpp ) -target_include_directories(AissiaTools PUBLIC +target_include_directories(CelunaTools PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ) -target_link_libraries(AissiaTools PUBLIC +target_link_libraries(CelunaTools PUBLIC GroveEngine::impl spdlog::spdlog ) # Platform Library (window tracking) -add_library(AissiaPlatform STATIC +add_library(CelunaPlatform STATIC src/shared/platform/WindowTrackerFactory.cpp ) -target_include_directories(AissiaPlatform PUBLIC +target_include_directories(CelunaPlatform PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ) -target_link_libraries(AissiaPlatform PUBLIC +target_link_libraries(CelunaPlatform PUBLIC spdlog::spdlog ) if(WIN32) - target_link_libraries(AissiaPlatform PUBLIC psapi) + target_link_libraries(CelunaPlatform PUBLIC psapi) endif() # Audio Library (TTS/STT) -add_library(AissiaAudio STATIC +add_library(CelunaAudio STATIC src/shared/audio/TTSEngineFactory.cpp src/shared/audio/STTEngineFactory.cpp src/shared/audio/VoskSTTEngine.cpp src/shared/audio/PocketSphinxEngine.cpp src/shared/audio/WhisperCppEngine.cpp ) -target_include_directories(AissiaAudio PUBLIC +target_include_directories(CelunaAudio PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${httplib_SOURCE_DIR} ${nlohmann_json_SOURCE_DIR}/include ) -target_link_libraries(AissiaAudio PUBLIC +target_link_libraries(CelunaAudio PUBLIC spdlog::spdlog ) # Link Winsock for httplib on Windows if(WIN32) - target_link_libraries(AissiaAudio PUBLIC ws2_32 sapi ole32) + target_link_libraries(CelunaAudio PUBLIC ws2_32 sapi ole32) endif() if(OPENSSL_FOUND) - target_link_libraries(AissiaAudio PUBLIC OpenSSL::SSL OpenSSL::Crypto) - target_compile_definitions(AissiaAudio PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) + target_link_libraries(CelunaAudio PUBLIC OpenSSL::SSL OpenSSL::Crypto) + target_compile_definitions(CelunaAudio PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) endif() # Note: Si OpenSSL n'est pas trouvé, on ne définit PAS CPPHTTPLIB_OPENSSL_SUPPORT # httplib utilisera HTTP simple sans SSL @@ -145,8 +145,8 @@ endif() find_library(VOSK_LIBRARY vosk) if(VOSK_LIBRARY) message(STATUS "Vosk found: ${VOSK_LIBRARY}") - target_link_libraries(AissiaAudio PUBLIC ${VOSK_LIBRARY}) - target_compile_definitions(AissiaAudio PRIVATE HAS_VOSK) + target_link_libraries(CelunaAudio PUBLIC ${VOSK_LIBRARY}) + target_compile_definitions(CelunaAudio PRIVATE HAS_VOSK) else() message(STATUS "Vosk not found - STT will use fallback engines only") endif() @@ -156,9 +156,9 @@ find_library(POCKETSPHINX_LIBRARY pocketsphinx) find_library(SPHINXBASE_LIBRARY sphinxbase) if(POCKETSPHINX_LIBRARY AND SPHINXBASE_LIBRARY) message(STATUS "PocketSphinx found: ${POCKETSPHINX_LIBRARY}") - target_link_libraries(AissiaAudio PUBLIC ${POCKETSPHINX_LIBRARY} ${SPHINXBASE_LIBRARY}) - target_compile_definitions(AissiaAudio PRIVATE HAVE_POCKETSPHINX) - target_include_directories(AissiaAudio PRIVATE /usr/include/pocketsphinx /usr/include/sphinxbase) + target_link_libraries(CelunaAudio PUBLIC ${POCKETSPHINX_LIBRARY} ${SPHINXBASE_LIBRARY}) + target_compile_definitions(CelunaAudio PRIVATE HAVE_POCKETSPHINX) + target_include_directories(CelunaAudio PRIVATE /usr/include/pocketsphinx /usr/include/sphinxbase) else() message(STATUS "PocketSphinx not found - keyword spotting unavailable") endif() @@ -167,9 +167,9 @@ endif() find_library(WHISPER_LIBRARY whisper PATHS ${CMAKE_SOURCE_DIR}/external/whisper.cpp/build/src) if(WHISPER_LIBRARY) message(STATUS "Whisper.cpp found: ${WHISPER_LIBRARY}") - target_link_libraries(AissiaAudio PUBLIC ${WHISPER_LIBRARY}) - target_compile_definitions(AissiaAudio PRIVATE HAVE_WHISPER_CPP) - target_include_directories(AissiaAudio PRIVATE + target_link_libraries(CelunaAudio PUBLIC ${WHISPER_LIBRARY}) + target_compile_definitions(CelunaAudio PRIVATE HAVE_WHISPER_CPP) + target_include_directories(CelunaAudio PRIVATE ${CMAKE_SOURCE_DIR}/external/whisper.cpp/include ${CMAKE_SOURCE_DIR}/external/whisper.cpp/ggml/include) else() @@ -179,40 +179,40 @@ endif() # ============================================================================ # Infrastructure Services Library (linked into main) # ============================================================================ -add_library(AissiaServices STATIC +add_library(CelunaServices STATIC src/services/LLMService.cpp src/services/StorageService.cpp src/services/PlatformService.cpp src/services/VoiceService.cpp src/services/STTService.cpp ) -target_include_directories(AissiaServices PUBLIC +target_include_directories(CelunaServices PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ) -target_link_libraries(AissiaServices PUBLIC +target_link_libraries(CelunaServices PUBLIC GroveEngine::impl spdlog::spdlog - AissiaLLM - AissiaTools - AissiaPlatform - AissiaAudio + CelunaLLM + CelunaTools + CelunaPlatform + CelunaAudio SQLite::SQLite3 ) # ============================================================================ # Main Executable (with services) # ============================================================================ -add_executable(aissia +add_executable(celuna src/main.cpp ) -target_link_libraries(aissia PRIVATE +target_link_libraries(celuna PRIVATE GroveEngine::impl spdlog::spdlog - AissiaServices + CelunaServices ) -target_include_directories(aissia PRIVATE +target_include_directories(celuna PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) @@ -370,12 +370,12 @@ endif() # Create data directory file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/data) -# Run Aissia +# Run Celuna add_custom_target(run - COMMAND $ - DEPENDS aissia modules + COMMAND $ + DEPENDS celuna modules WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running Aissia" + COMMENT "Running Celuna" ) # ============================================================================ @@ -391,7 +391,7 @@ add_executable(test_stt_engines tests/manual/test_stt_engines.cpp ) target_link_libraries(test_stt_engines - AissiaAudio + CelunaAudio spdlog::spdlog ) -# Link Winsock for httplib on Windows (already linked via AissiaLLM PUBLIC dependency) +# Link Winsock for httplib on Windows (already linked via CelunaLLM PUBLIC dependency) diff --git a/PLAN_FILESYSTEM_TOOLS.md b/PLAN_FILESYSTEM_TOOLS.md index 97583b9..db5e21a 100644 --- a/PLAN_FILESYSTEM_TOOLS.md +++ b/PLAN_FILESYSTEM_TOOLS.md @@ -1,4 +1,4 @@ -# Plan : FileSystem Tools pour AISSIA +# Plan : FileSystem Tools pour CELUNA ## Objectif @@ -42,7 +42,7 @@ src/shared/tools/ #include #include -namespace aissia::tools { +namespace celuna::tools { struct FileSystemTools { // Définitions des tools pour le LLM @@ -61,7 +61,7 @@ private: static nlohmann::json grepFiles(const nlohmann::json& params); }; -} // namespace aissia::tools +} // namespace celuna::tools ``` ### Dépendances @@ -106,7 +106,7 @@ nlohmann::json LLMService::executeTool(const std::string& name, { "allowed_paths": [ "/mnt/e/Users/Alexis Trouvé/Documents/Projets/", - "/tmp/aissia/" + "/tmp/celuna/" ], "blocked_patterns": [ "*.env", @@ -137,10 +137,10 @@ nlohmann::json LLMService::executeTool(const std::string& name, ```bash # Test read_file -echo '{"tool": "read_file", "params": {"path": "/tmp/test.txt"}}' | ./build/aissia --test-tool +echo '{"tool": "read_file", "params": {"path": "/tmp/test.txt"}}' | ./build/celuna --test-tool # Test edit_file -echo '{"tool": "edit_file", "params": {"path": "/tmp/test.txt", "old_string": "foo", "new_string": "bar"}}' | ./build/aissia --test-tool +echo '{"tool": "edit_file", "params": {"path": "/tmp/test.txt", "old_string": "foo", "new_string": "bar"}}' | ./build/celuna --test-tool ``` ## Estimation diff --git a/PLAN_TESTS_INTEGRATION.md b/PLAN_TESTS_INTEGRATION.md index ce47ee3..4fc183c 100644 --- a/PLAN_TESTS_INTEGRATION.md +++ b/PLAN_TESTS_INTEGRATION.md @@ -1,4 +1,4 @@ -# Plan d'Implementation - Tests d'Integration AISSIA +# Plan d'Implementation - Tests d'Integration CELUNA ## Vue d'Ensemble @@ -65,7 +65,7 @@ public: #### MockTransport.hpp ```cpp -class MockTransport : public aissia::mcp::IMCPTransport { +class MockTransport : public celuna::mcp::IMCPTransport { public: bool m_running = false; std::vector sentRequests; @@ -622,7 +622,7 @@ FetchContent_Declare( FetchContent_MakeAvailable(Catch2) # Test executable -add_executable(aissia_tests +add_executable(celuna_tests tests/main.cpp # Mocks @@ -642,14 +642,14 @@ add_executable(aissia_tests tests/mcp/MCPClientTests.cpp ) -target_link_libraries(aissia_tests PRIVATE +target_link_libraries(celuna_tests PRIVATE Catch2::Catch2WithMain GroveEngine::impl - AissiaTools + CelunaTools spdlog::spdlog ) -target_include_directories(aissia_tests PRIVATE +target_include_directories(celuna_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/tests ) @@ -660,12 +660,12 @@ file(COPY tests/fixtures/ DESTINATION ${CMAKE_BINARY_DIR}/tests/fixtures) # CTest integration include(CTest) include(Catch) -catch_discover_tests(aissia_tests) +catch_discover_tests(celuna_tests) # Custom target for running tests add_custom_target(test_all COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure - DEPENDS aissia_tests + DEPENDS celuna_tests COMMENT "Running all integration tests" ) ``` @@ -724,10 +724,10 @@ cmake --build build cmake --build build --target test_all # Executer tests specifiques -./build/aissia_tests "[scheduler]" # Tests scheduler -./build/aissia_tests "[mcp]" # Tests MCP -./build/aissia_tests "[integration]" # Tous les TI +./build/celuna_tests "[scheduler]" # Tests scheduler +./build/celuna_tests "[mcp]" # Tests MCP +./build/celuna_tests "[integration]" # Tous les TI # Avec verbose -./build/aissia_tests -s -d yes +./build/celuna_tests -s -d yes ``` diff --git a/PROMPT_SUCCESSEUR.md b/PROMPT_SUCCESSEUR.md index 9760490..03dde24 100644 --- a/PROMPT_SUCCESSEUR.md +++ b/PROMPT_SUCCESSEUR.md @@ -1,8 +1,8 @@ -# Prompt Successeur - AISSIA +# Prompt Successeur - CELUNA ## Contexte -Tu reprends le développement d'**AISSIA**, un assistant vocal agentique en C++17 basé sur GroveEngine. +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) @@ -12,8 +12,8 @@ Tu reprends le développement d'**AISSIA**, un assistant vocal agentique en C++1 ✅ 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` +✅ 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 @@ -24,7 +24,7 @@ Tu reprends le développement d'**AISSIA**, un assistant vocal agentique en C++1 |---------|------| | `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/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) | @@ -55,21 +55,21 @@ cmake -B build && cmake --build build -j4 ./run.sh # Run avec interface stdin interactive (manuel) -source .env && ./build/aissia --interactive # ou -i +source .env && ./build/celuna --interactive # ou -i # Tape "quit" ou "q" pour quitter # Run normal (boucle principale sans interaction) -./build/aissia +./build/celuna # Run comme serveur MCP (pour Claude Code) -./build/aissia --mcp-server +./build/celuna --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) +./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 diff --git a/README.md b/README.md index 563ea99..3634c51 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# AISSIA - AI Smart Schedule & Interactive Assistant +# Celuna AI by Etheryale 🌙✨ -**AISSIA** is an intelligent personal assistant for time management, hyperfocus detection, and language learning, powered by **GroveEngine**. +**Celuna** is a celestial personal assistant for time management, hyperfocus detection, and language learning, powered by **GroveEngine**. -## What is AISSIA? +## What is Celuna? -AISSIA helps manage: +Celuna helps manage: - **Hyperfocus**: Detects when you've been working too long and need a break - **Time Management**: Intelligent scheduling and task planning - **Language Learning**: Interactive practice in target languages @@ -12,7 +12,7 @@ AISSIA helps manage: ## Built on GroveEngine -AISSIA leverages **GroveEngine**, a C++17 hot-reload module system that enables: +Celuna leverages **GroveEngine**, a C++17 hot-reload module system that enables: - **Hot-Reload**: Modify code at runtime without losing state (<1ms reload latency) - **Modular Architecture**: Self-contained modules (200-300 lines each) @@ -31,7 +31,7 @@ AISSIA leverages **GroveEngine**, a C++17 hot-reload module system that enables: ## Project Structure ``` -Aissia/ +Celuna/ ├── external/ │ └── GroveEngine/ # GroveEngine (symlink) ├── src/ @@ -113,13 +113,13 @@ cmake --build build --target modules ./run.sh # Or manually with .env loaded -source .env && ./build/aissia -i +source .env && ./build/celuna -i # MCP Server mode (for Claude Code integration) -./build/aissia --mcp-server +./build/celuna --mcp-server # Normal mode (background daemon) -./build/aissia +./build/celuna ``` **Note**: Create a `.env` file with your API key: @@ -129,7 +129,7 @@ ANTHROPIC_API_KEY=sk-ant-... ### Hot-Reload Workflow -1. Start AISSIA: `./build/aissia` +1. Start Celuna: `./build/celuna` 2. Edit a module: `src/modules/SchedulerModule.cpp` 3. Rebuild: `cmake --build build --target modules` 4. **Module reloads automatically with state preserved** @@ -188,7 +188,7 @@ See `docs/GROVEENGINE_GUIDE.md` for detailed module development guide. ## Architecture -AISSIA runs on a simple loop (10Hz for assistant workload): +Celuna runs on a simple loop (10Hz for assistant workload): ``` ┌─────────────────────────────────────────────┐ diff --git a/audits/2025-11-26-engine-compliance-audit.md b/audits/2025-11-26-engine-compliance-audit.md index 6dd6932..f519a43 100644 --- a/audits/2025-11-26-engine-compliance-audit.md +++ b/audits/2025-11-26-engine-compliance-audit.md @@ -1,4 +1,4 @@ -# AUDIT DE CONFORMITÉ GROVEENGINE - AISSIA +# AUDIT DE CONFORMITÉ GROVEENGINE - CELUNA **Date** : 2025-11-26 **Auditeur** : Claude Code @@ -192,11 +192,11 @@ void StorageModule::setState(const grove::IDataNode& state) { **CMakeLists.txt:86-101** : ```cmake -add_library(AissiaLLM STATIC ...) -target_link_libraries(AIModule PRIVATE AissiaLLM) +add_library(CelunaLLM STATIC ...) +target_link_libraries(AIModule PRIVATE CelunaLLM) ``` -**Problème** : Les libs `AissiaLLM`, `AissiaPlatform`, `AissiaAudio` sont compilées en STATIC et linkées dans chaque .so. +**Problème** : Les libs `CelunaLLM`, `CelunaPlatform`, `CelunaAudio` sont compilées en STATIC et linkées dans chaque .so. **Impact** : - Code dupliqué dans chaque module diff --git a/config/README_MCP.md b/config/README_MCP.md index 7babee3..c1d0eb0 100644 --- a/config/README_MCP.md +++ b/config/README_MCP.md @@ -1,6 +1,6 @@ -# AISSIA MCP Configuration for Claude Code +# Celuna MCP Configuration for Claude Code -This directory contains an example MCP (Model Context Protocol) configuration for integrating AISSIA with Claude Code. +This directory contains an example MCP (Model Context Protocol) configuration for integrating Celuna with Claude Code. ## Quick Setup @@ -32,13 +32,13 @@ C:\Users\YourUsername\AppData\Roaming\Code\User\globalStorage\saoudrizwan.claude Copy the contents of `claude_code_mcp_config.json` to the Claude Code MCP settings file. -**Important**: Update the `command` path to point to your actual AISSIA executable: +**Important**: Update the `command` path to point to your actual Celuna executable: ```json { "mcpServers": { - "aissia": { - "command": "C:\\path\\to\\your\\aissia\\build\\aissia.exe", + "celuna": { + "command": "C:\\path\\to\\your\\celuna\\build\\celuna.exe", "args": ["--mcp-server"], "disabled": false } @@ -52,23 +52,23 @@ Restart VS Code (or reload window: `Ctrl+Shift+P` → "Developer: Reload Window" ### 4. Verify Integration -Open Claude Code and check that AISSIA tools are available: +Open Claude Code and check that Celuna tools are available: ``` You: Can you list the available MCP servers? Claude: I have access to the following MCP servers: -- aissia: 13 tools available +- celuna: 13 tools available ``` ## Available Tools -Once configured, Claude will have access to these 13 AISSIA tools: +Once configured, Claude will have access to these 13 Celuna tools: -### AISSIA Core (5 tools) -1. **chat_with_aissia** ⭐ - Dialogue with AISSIA's AI assistant (Claude Sonnet 4) +### Celuna Core (5 tools) +1. **chat_with_celuna** ⭐ - Dialogue with Celuna's AI assistant (Claude Sonnet 4) 2. **transcribe_audio** - Transcribe audio files to text 3. **text_to_speech** - Convert text to speech audio files -4. **save_memory** - Save notes to AISSIA's persistent storage +4. **save_memory** - Save notes to Celuna's persistent storage 5. **search_memories** - Search through saved memories ### File System (8 tools) @@ -88,8 +88,8 @@ Once configured, Claude will have access to these 13 AISSIA tools: ```json { "mcpServers": { - "aissia": { - "command": "path/to/aissia.exe", + "celuna": { + "command": "path/to/celuna.exe", "args": ["--mcp-server"], "disabled": false } @@ -104,11 +104,11 @@ To skip confirmation prompts for specific tools: ```json { "mcpServers": { - "aissia": { - "command": "path/to/aissia.exe", + "celuna": { + "command": "path/to/celuna.exe", "args": ["--mcp-server"], "disabled": false, - "alwaysAllow": ["chat_with_aissia", "read_file", "write_file"] + "alwaysAllow": ["chat_with_celuna", "read_file", "write_file"] } } } @@ -116,13 +116,13 @@ To skip confirmation prompts for specific tools: ### Disable Server -To temporarily disable AISSIA without removing the configuration: +To temporarily disable Celuna without removing the configuration: ```json { "mcpServers": { - "aissia": { - "command": "path/to/aissia.exe", + "celuna": { + "command": "path/to/celuna.exe", "args": ["--mcp-server"], "disabled": true // <-- Set to true } @@ -132,7 +132,7 @@ To temporarily disable AISSIA without removing the configuration: ## Prerequisites -Before running AISSIA in MCP server mode, ensure these config files exist: +Before running Celuna in MCP server mode, ensure these config files exist: ### config/ai.json ```json @@ -141,14 +141,14 @@ Before running AISSIA in MCP server mode, ensure these config files exist: "api_key": "sk-ant-api03-...", "model": "claude-sonnet-4-20250514", "max_iterations": 10, - "system_prompt": "Tu es AISSIA, un assistant personnel intelligent..." + "system_prompt": "Tu es Celuna, un assistant personnel intelligent..." } ``` ### config/storage.json ```json { - "database_path": "./data/aissia.db", + "database_path": "./data/celuna.db", "journal_mode": "WAL", "busy_timeout_ms": 5000 } @@ -176,23 +176,23 @@ You can test the MCP server independently before integrating with Claude Code: ```bash # Test tools/list -echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | ./build/aissia.exe --mcp-server +echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | ./build/celuna.exe --mcp-server -# Test chat_with_aissia tool -echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"chat_with_aissia","arguments":{"message":"What time is it?"}}}' | ./build/aissia.exe --mcp-server +# Test chat_with_celuna tool +echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"chat_with_celuna","arguments":{"message":"What time is it?"}}}' | ./build/celuna.exe --mcp-server ``` ## Troubleshooting ### "Server not found" or "Connection failed" -1. Verify the `command` path is correct and points to `aissia.exe` -2. Make sure AISSIA compiles successfully: `cmake --build build` -3. Test running `./build/aissia.exe --mcp-server` manually +1. Verify the `command` path is correct and points to `celuna.exe` +2. Make sure Celuna compiles successfully: `cmake --build build` +3. Test running `./build/celuna.exe --mcp-server` manually ### "LLMService not initialized" -AISSIA requires `config/ai.json` with a valid Claude API key. Check: +Celuna requires `config/ai.json` with a valid Claude API key. Check: 1. File exists: `config/ai.json` 2. API key is valid: `"api_key": "sk-ant-api03-..."` 3. Provider is set: `"provider": "claude"` @@ -215,21 +215,21 @@ These will be completed in Phase 8.1 and 8.2. ## Example Use Cases -### 1. Ask AISSIA for Help +### 1. Ask Celuna for Help ``` -You: Use chat_with_aissia to ask "What are my top productivity patterns?" -Claude: [calls chat_with_aissia tool] -AISSIA: Based on your activity data, your most productive hours are 9-11 AM... +You: Use chat_with_celuna to ask "What are my top productivity patterns?" +Claude: [calls chat_with_celuna tool] +Celuna: Based on your activity data, your most productive hours are 9-11 AM... ``` ### 2. File Operations + AI ``` -You: Read my TODO.md file and ask AISSIA to prioritize the tasks +You: Read my TODO.md file and ask Celuna to prioritize the tasks Claude: [calls read_file("TODO.md")] -Claude: [calls chat_with_aissia with task list] -AISSIA: Here's a prioritized version based on urgency and dependencies... +Claude: [calls chat_with_celuna with task list] +Celuna: Here's a prioritized version based on urgency and dependencies... ``` ### 3. Voice Transcription (future) @@ -244,13 +244,13 @@ Result: "Welcome to the team meeting. Today we're discussing..." ### Multiple MCP Servers -You can configure multiple MCP servers alongside AISSIA: +You can configure multiple MCP servers alongside Celuna: ```json { "mcpServers": { - "aissia": { - "command": "C:\\path\\to\\aissia\\build\\aissia.exe", + "celuna": { + "command": "C:\\path\\to\\celuna\\build\\celuna.exe", "args": ["--mcp-server"], "disabled": false }, @@ -273,17 +273,17 @@ You can configure multiple MCP servers alongside AISSIA: ### Environment Variables -Pass environment variables to AISSIA: +Pass environment variables to Celuna: ```json { "mcpServers": { - "aissia": { - "command": "C:\\path\\to\\aissia\\build\\aissia.exe", + "celuna": { + "command": "C:\\path\\to\\celuna\\build\\celuna.exe", "args": ["--mcp-server"], "disabled": false, "env": { - "AISSIA_LOG_LEVEL": "debug", + "Celuna_LOG_LEVEL": "debug", "CLAUDE_API_KEY": "sk-ant-api03-..." } } @@ -301,5 +301,5 @@ Pass environment variables to AISSIA: For issues or questions: 1. Check the full documentation: `docs/CLAUDE_CODE_INTEGRATION.md` -2. Review logs: AISSIA writes to stderr in MCP mode -3. Test manually: `./build/aissia.exe --mcp-server` and send JSON-RPC requests +2. Review logs: Celuna writes to stderr in MCP mode +3. Test manually: `./build/celuna.exe --mcp-server` and send JSON-RPC requests diff --git a/config/ai.json b/config/ai.json index bbe181d..ed285b8 100644 --- a/config/ai.json +++ b/config/ai.json @@ -18,5 +18,5 @@ } }, - "system_prompt": "Tu es AISSIA, un assistant personnel specialise dans la gestion du temps et de l'attention. Tu aides l'utilisateur a rester productif tout en evitant l'hyperfocus excessif. Tu es bienveillant mais ferme quand necessaire pour encourager les pauses. Reponds toujours en francais." + "system_prompt": "Tu es Celuna 🌙, un assistant céleste spécialisé dans la gestion du temps et de l'attention. Tu aides l'utilisateur à rester productif tout en évitant l'hyperfocus excessif. Tu es bienveillant mais ferme quand nécessaire pour encourager les pauses. Réponds toujours en français avec une touche d'élégance céleste." } diff --git a/config/claude_code_mcp_config.json b/config/claude_code_mcp_config.json index 2766c62..ba86e36 100644 --- a/config/claude_code_mcp_config.json +++ b/config/claude_code_mcp_config.json @@ -1,7 +1,7 @@ { "mcpServers": { - "aissia": { - "command": "C:\\Users\\alexi\\Documents\\projects\\aissia\\build\\aissia.exe", + "celuna": { + "command": "C:\\Users\\alexi\\Documents\\projects\\aissia\\build\\celuna.exe", "args": ["--mcp-server"], "disabled": false, "alwaysAllow": [] diff --git a/config/storage.json b/config/storage.json index 4d2eefd..58b206d 100644 --- a/config/storage.json +++ b/config/storage.json @@ -1,5 +1,5 @@ { - "database_path": "./data/aissia.db", + "database_path": "./data/celuna.db", "journal_mode": "WAL", "busy_timeout_ms": 5000 } diff --git a/docs/CLAUDE_CODE_INTEGRATION.md b/docs/CLAUDE_CODE_INTEGRATION.md index f1e82f0..5ec7635 100644 --- a/docs/CLAUDE_CODE_INTEGRATION.md +++ b/docs/CLAUDE_CODE_INTEGRATION.md @@ -1,26 +1,26 @@ -# AISSIA - Claude Code Integration (Phase 8) +# CELUNA - Claude Code Integration (Phase 8) ## Overview -AISSIA can now be exposed as an **MCP Server** (Model Context Protocol) to integrate with Claude Code and other MCP-compatible clients. This allows Claude to use AISSIA's capabilities as tools during conversations. +CELUNA can now be exposed as an **MCP Server** (Model Context Protocol) to integrate with Claude Code and other MCP-compatible clients. This allows Claude to use CELUNA's capabilities as tools during conversations. -**Mode MCP Server**: `./aissia --mcp-server` +**Mode MCP Server**: `./celuna --mcp-server` -This mode exposes AISSIA's services via JSON-RPC 2.0 over stdio, following the MCP specification. +This mode exposes CELUNA's services via JSON-RPC 2.0 over stdio, following the MCP specification. ## Available Tools -AISSIA exposes **13 tools** total: +CELUNA exposes **13 tools** total: -### 1. AISSIA Core Tools (Priority) +### 1. CELUNA Core Tools (Priority) -#### `chat_with_aissia` ⭐ **PRIORITY** -Dialogue with AISSIA's built-in AI assistant (Claude Sonnet 4). Send a message and get an intelligent response with access to AISSIA's knowledge and capabilities. +#### `chat_with_celuna` ⭐ **PRIORITY** +Dialogue with CELUNA's built-in AI assistant (Claude Sonnet 4). Send a message and get an intelligent response with access to CELUNA's knowledge and capabilities. **Input**: ```json { - "message": "string (required) - Message to send to AISSIA", + "message": "string (required) - Message to send to CELUNA", "conversation_id": "string (optional) - Conversation ID for continuity", "system_prompt": "string (optional) - Custom system prompt" } @@ -29,14 +29,14 @@ Dialogue with AISSIA's built-in AI assistant (Claude Sonnet 4). Send a message a **Output**: ```json { - "response": "AISSIA's response text", + "response": "CELUNA's response text", "conversation_id": "conversation-id", "tokens": 1234, "iterations": 2 } ``` -**Example use case**: "Hey AISSIA, can you analyze my focus patterns this week?" +**Example use case**: "Hey CELUNA, can you analyze my focus patterns this week?" #### `transcribe_audio` Transcribe audio file to text using Speech-to-Text engines (Whisper.cpp, OpenAI Whisper API, Google Speech). @@ -84,7 +84,7 @@ Convert text to speech audio file using Text-to-Speech synthesis. Generates audi **Status**: ⚠️ Not yet implemented - requires TTS engine file output support #### `save_memory` -Save a note or memory to AISSIA's persistent storage. Memories can be tagged and searched later. +Save a note or memory to CELUNA's persistent storage. Memories can be tagged and searched later. **Input**: ```json @@ -107,7 +107,7 @@ Save a note or memory to AISSIA's persistent storage. Memories can be tagged and **Status**: ⚠️ Not yet implemented - requires StorageService sync methods #### `search_memories` -Search through saved memories and notes in AISSIA's storage. Returns matching memories with relevance scores. +Search through saved memories and notes in CELUNA's storage. Returns matching memories with relevance scores. **Input**: ```json @@ -157,13 +157,13 @@ Create or edit your Claude Code MCP configuration file: **Windows**: `%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json` **macOS/Linux**: `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` -Add AISSIA as an MCP server: +Add CELUNA as an MCP server: ```json { "mcpServers": { - "aissia": { - "command": "C:\\path\\to\\aissia\\build\\aissia.exe", + "celuna": { + "command": "C:\\path\\to\\celuna\\build\\celuna.exe", "args": ["--mcp-server"], "disabled": false } @@ -171,29 +171,29 @@ Add AISSIA as an MCP server: } ``` -**Note**: Replace `C:\\path\\to\\aissia\\build\\aissia.exe` with the actual path to your compiled AISSIA executable. +**Note**: Replace `C:\\path\\to\\celuna\\build\\celuna.exe` with the actual path to your compiled CELUNA executable. ### 2. Verify Configuration Restart Claude Code (or VS Code) to reload the MCP configuration. -Claude should now have access to all 13 AISSIA tools during conversations. +Claude should now have access to all 13 CELUNA tools during conversations. ### 3. Test Integration In Claude Code, try: ``` -"Can you use the chat_with_aissia tool to ask AISSIA what time it is?" +"Can you use the chat_with_celuna tool to ask CELUNA what time it is?" ``` -Claude will call the `chat_with_aissia` tool, which internally uses AISSIA's LLM service to process the query. +Claude will call the `chat_with_celuna` tool, which internally uses CELUNA's LLM service to process the query. ## Architecture ### Synchronous Mode (MCP Server) -When running as an MCP server, AISSIA uses **synchronous blocking calls** instead of the async pub/sub architecture used in normal mode: +When running as an MCP server, CELUNA uses **synchronous blocking calls** instead of the async pub/sub architecture used in normal mode: ```cpp // Normal mode (async) @@ -239,9 +239,9 @@ for (auto& toolDef : FileSystemTools::getToolDefinitions()) { registry.registerTool(toolDef); } -// 3. AISSIA tools (5 tools) -MCPServerTools aissiaTools(llmService, storageService, voiceService); -for (const auto& toolDef : aissiaTools.getToolDefinitions()) { +// 3. CELUNA tools (5 tools) +MCPServerTools celunaTools(llmService, storageService, voiceService); +for (const auto& toolDef : celunaTools.getToolDefinitions()) { registry.registerTool(toolDef); } ``` @@ -250,7 +250,7 @@ Total: **13 tools** ## Configuration Files -AISSIA MCP Server requires these config files (same as normal mode): +CELUNA MCP Server requires these config files (same as normal mode): - `config/ai.json` - LLM provider configuration (Claude API key) - `config/storage.json` - Database path and settings @@ -289,7 +289,7 @@ AISSIA MCP Server requires these config files (same as normal mode): - [ ] Add vector embeddings for semantic search ### Phase 8.3 - Advanced Tools -- [ ] `schedule_task` - Add tasks to AISSIA's scheduler +- [ ] `schedule_task` - Add tasks to CELUNA's scheduler - [ ] `get_focus_stats` - Retrieve hyperfocus detection stats - [ ] `list_active_apps` - Get current monitored applications - [ ] `send_notification` - Trigger system notifications @@ -303,12 +303,12 @@ AISSIA MCP Server requires these config files (same as normal mode): ### 1. AI Assistant Collaboration -Claude Code can delegate complex reasoning tasks to AISSIA: +Claude Code can delegate complex reasoning tasks to CELUNA: ``` -Claude: "I need to analyze user behavior patterns. Let me ask AISSIA." -→ calls chat_with_aissia("Analyze recent focus patterns") -AISSIA: "Based on monitoring data, user has 3 hyperfocus sessions daily averaging 2.5 hours..." +Claude: "I need to analyze user behavior patterns. Let me ask CELUNA." +→ calls chat_with_celuna("Analyze recent focus patterns") +CELUNA: "Based on monitoring data, user has 3 hyperfocus sessions daily averaging 2.5 hours..." ``` ### 2. Voice Transcription Workflow @@ -322,7 +322,7 @@ Claude: "Transcribe meeting-2025-01-30.wav" ### 3. Knowledge Management ``` -Claude: "Save this important insight to AISSIA's memory" +Claude: "Save this important insight to CELUNA's memory" → calls save_memory( title="Project architecture decision", content="We decided to use hot-reload modules for business logic...", @@ -333,9 +333,9 @@ Claude: "Save this important insight to AISSIA's memory" ### 4. File + AI Operations ``` -Claude: "Read todos.md, ask AISSIA to prioritize tasks, update file" +Claude: "Read todos.md, ask CELUNA to prioritize tasks, update file" → calls read_file("todos.md") -→ calls chat_with_aissia("Prioritize these tasks: ...") +→ calls chat_with_celuna("Prioritize these tasks: ...") → calls write_file("todos-prioritized.md", content=...) ``` @@ -397,15 +397,15 @@ Test with `nc` or `socat`: ```bash # Send tools/list request -echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | ./build/aissia.exe --mcp-server +echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | ./build/celuna.exe --mcp-server # Send tool call -echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"chat_with_aissia","arguments":{"message":"Hello AISSIA"}}}' | ./build/aissia.exe --mcp-server +echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"chat_with_celuna","arguments":{"message":"Hello CELUNA"}}}' | ./build/celuna.exe --mcp-server ``` Expected output format: ```json -{"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"chat_with_aissia","description":"...","inputSchema":{...}}]}} +{"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"chat_with_celuna","description":"...","inputSchema":{...}}]}} ``` ## Troubleshooting @@ -430,7 +430,7 @@ Voice tools are optional. If you don't need STT/TTS, this is normal. Make sure `config/storage.json` exists: ```json { - "database_path": "./data/aissia.db", + "database_path": "./data/celuna.db", "journal_mode": "WAL", "busy_timeout_ms": 5000 } @@ -443,7 +443,7 @@ Check `tools/list` output to see which tools are actually registered. ## References - **MCP Specification**: https://github.com/anthropics/mcp -- **AISSIA Architecture**: `docs/project-overview.md` +- **CELUNA Architecture**: `docs/project-overview.md` - **GroveEngine Guide**: `docs/GROVEENGINE_GUIDE.md` - **LLM Service**: `src/services/LLMService.hpp` - **MCPServer**: `src/shared/mcp/MCPServer.hpp` diff --git a/docs/PHASE6_VALIDATION.md b/docs/PHASE6_VALIDATION.md index 51468e7..931af10 100644 --- a/docs/PHASE6_VALIDATION.md +++ b/docs/PHASE6_VALIDATION.md @@ -8,7 +8,7 @@ ## Résumé Exécutif -AISSIA fonctionne parfaitement en mode interactif avec : +CELUNA fonctionne parfaitement en mode interactif avec : - ✅ **Claude Sonnet 4** : Conversations agentiques complètes - ✅ **TTS espeak-ng** : Synthèse vocale française - ✅ **18 outils** : Scheduler, Storage, Filesystem, MCP, etc. @@ -21,15 +21,15 @@ AISSIA fonctionne parfaitement en mode interactif avec : ### Commande ```bash -echo "Bonjour AISSIA ! Quelle heure est-il ?" | ./build/aissia -i +echo "Bonjour CELUNA ! Quelle heure est-il ?" | ./build/celuna -i ``` ### Résultat **Requête utilisateur** : -> "Bonjour AISSIA ! Quelle heure est-il ?" +> "Bonjour CELUNA ! Quelle heure est-il ?" -**Réponse AISSIA** : +**Réponse CELUNA** : > Il est actuellement 7h41 ce vendredi 29 novembre 2025. Tu es matinal aujourd'hui ! Comment puis-je t'aider à bien commencer cette journée ? Veux-tu que je vérifie tes tâches prévues ou que nous planifions ta matinée ensemble ? **Actions automatiques** : @@ -65,7 +65,7 @@ echo "Bonjour AISSIA ! Quelle heure est-il ?" | ./build/aissia -i ### 4. Statistiques Session ``` -[07:42:20.355] [Aissia] [debug] Session: 0m32s, 7 modules actifs, 4 services +[07:42:20.355] [Celuna] [debug] Session: 0m32s, 7 modules actifs, 4 services [AIModule] [info] AIModule arrete. Queries: 0, Tokens: 4298 [VoiceModule] [info] VoiceModule arrete. Spoken: 1, Transcribed: 0 [StorageService] [info] StorageService shutdown. Total queries: 2 @@ -139,7 +139,7 @@ echo "Bonjour AISSIA ! Quelle heure est-il ?" | ./build/aissia -i ### ✅ TTS Multilingue - Voix française (fr-fr) - Détection automatique espeak-ng -- Parle toutes les réponses AISSIA +- Parle toutes les réponses CELUNA ### ✅ Hot-Reload - 7 modules chargés dynamiquement @@ -199,7 +199,7 @@ echo "Bonjour AISSIA ! Quelle heure est-il ?" | ./build/aissia -i **Tools** : `get_current_time` ### 2. Conversation Proactive ✅ -**Input** : "Bonjour AISSIA !" +**Input** : "Bonjour CELUNA !" **Output** : Propose de vérifier tâches et planifier la journée **Tools** : Aucun (conversation pure) @@ -238,7 +238,7 @@ echo "Bonjour AISSIA ! Quelle heure est-il ?" | ./build/aissia -i ## Conclusion -✅ **AISSIA est FONCTIONNEL en mode interactif** ! +✅ **CELUNA est FONCTIONNEL en mode interactif** ! **Résultats** : - Conversation naturelle ✅ diff --git a/docs/PLAN_MCP_INTEGRATION.md b/docs/PLAN_MCP_INTEGRATION.md index 4bb1215..7f67b70 100644 --- a/docs/PLAN_MCP_INTEGRATION.md +++ b/docs/PLAN_MCP_INTEGRATION.md @@ -2,13 +2,13 @@ ## Objectif -Transformer AISSIA en "Claude Code vocal" : un assistant qui peut utiliser des tools (internes + MCP) pour accomplir des tâches, piloté par la voix. +Transformer CELUNA en "Claude Code vocal" : un assistant qui peut utiliser des tools (internes + MCP) pour accomplir des tâches, piloté par la voix. ## Architecture Cible ``` ┌─────────────────────────────────────────────────────────────────────────────┐ -│ AISSIA - Agent Vocal │ +│ CELUNA - Agent Vocal │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ ┌─────────────────────────────────────┐ │ diff --git a/docs/README.md b/docs/README.md index 5b84ef9..a1167d0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,10 @@ -# AISSIA Documentation +# CELUNA Documentation -**AISSIA** (AI Smart Schedule & Interactive Assistant) - Assistant personnel intelligent pour la gestion du temps et de l'hyperfocus. +**CELUNA** (AI Smart Schedule & Interactive Assistant) - Assistant personnel intelligent pour la gestion du temps et de l'hyperfocus. ## Vue d'Ensemble -AISSIA est un assistant personnel proactif qui aide à gérer le temps, les priorités et l'hyperfocus en utilisant l'architecture modulaire WarFactory pour un développement rapide avec hot-reload. +CELUNA est un assistant personnel proactif qui aide à gérer le temps, les priorités et l'hyperfocus en utilisant l'architecture modulaire WarFactory pour un développement rapide avec hot-reload. ### Problème Résolu @@ -24,7 +24,7 @@ Assistant intelligent qui : ## Architecture -AISSIA réutilise l'**architecture modulaire WarFactory** : +CELUNA réutilise l'**architecture modulaire WarFactory** : - **Hot-reload 0.4ms** : Modifications instantanées sans restart - **Modules 200-300 lignes** : Développement optimisé pour Claude Code @@ -71,7 +71,7 @@ docs/ → Comprendre les 5 interfaces fondamentales (IEngine, IModule, IModuleSystem, IIO, ICoordinationModule) 2. **[architecture-technique.md](architecture/architecture-technique.md)** - → Voir comment AISSIA utilise WarFactory pour ses modules + → Voir comment CELUNA utilise WarFactory pour ses modules 3. **[intelligent-document-retrieval.md](architecture/intelligent-document-retrieval.md)** → Architecture retrieval agentique pour AIAssistantModule (gestion documents, context window) @@ -79,7 +79,7 @@ docs/ 4. **[CLAUDE-HOT-RELOAD-GUIDE.md](implementation/CLAUDE-HOT-RELOAD-GUIDE.md)** → Workflow de développement avec hot-reload 0.4ms -### 2. Modules AISSIA Prévus +### 2. Modules CELUNA Prévus **MVP Phase 1 (Local uniquement) :** - `SchedulerModule` : Planning intelligent des tâches @@ -155,12 +155,12 @@ DataOrientedEngine + ClusterModuleSystem + NetworkIO **Documents principaux à la racine :** -- **[CDCDraft.md](../CDCDraft.md)** : Cahier des charges complet AISSIA +- **[CDCDraft.md](../CDCDraft.md)** : Cahier des charges complet CELUNA - **[AlternativesAnalysis.md](../AlternativesAnalysis.md)** : Analyse comparative des options techniques ## Liens Externes -- **WarFactory Engine** : Architecture source utilisée par AISSIA +- **WarFactory Engine** : Architecture source utilisée par CELUNA - **Claude Code** : https://docs.claude.com/en/docs/claude-code ## Contribution diff --git a/docs/STT_CONFIGURATION.md b/docs/STT_CONFIGURATION.md index ba5a2ec..54768bc 100644 --- a/docs/STT_CONFIGURATION.md +++ b/docs/STT_CONFIGURATION.md @@ -1,6 +1,6 @@ # Configuration STT - Speech-to-Text -AISSIA supporte **4 engines STT** différents, configurables via `config/voice.json`. +CELUNA supporte **4 engines STT** différents, configurables via `config/voice.json`. ## Engines Disponibles diff --git a/docs/STT_SETUP.md b/docs/STT_SETUP.md index 5e14950..f5d93cc 100644 --- a/docs/STT_SETUP.md +++ b/docs/STT_SETUP.md @@ -4,7 +4,7 @@ Guide pour configurer les moteurs de reconnaissance vocale STT sur Windows. ## État Actuel -AISSIA supporte **5 moteurs STT** avec priorités automatiques : +CELUNA supporte **5 moteurs STT** avec priorités automatiques : | Moteur | Type | Status | Requis | |--------|------|--------|--------| @@ -154,7 +154,7 @@ python create_test_audio_simple.py Ceci testera automatiquement tous les moteurs disponibles. -### Option 2 : Test depuis AISSIA +### Option 2 : Test depuis CELUNA Les moteurs STT sont intégrés dans `VoiceModule` et accessibles via : - `voice:start_listening` (pub/sub) @@ -218,7 +218,7 @@ GOOGLE_API_KEY=AIzaSy... ### Whisper.cpp - ✅ Intégré dans le build (external/whisper.cpp) -- ✅ Lié statiquement à AissiaAudio +- ✅ Lié statiquement à CelunaAudio - ❌ Modèle requis : téléchargé dans `models/` ### APIs Cloud diff --git a/docs/SUCCESSION.md b/docs/SUCCESSION.md index 8815838..a858652 100644 --- a/docs/SUCCESSION.md +++ b/docs/SUCCESSION.md @@ -1,8 +1,8 @@ -# Document de Succession - AISSIA +# Document de Succession - CELUNA ## Contexte -AISSIA = Assistant vocal agentique basé sur GroveEngine (C++17 hot-reload). Architecture "Claude Code en vocal" avec tools internes + FileSystem + MCP. +CELUNA = Assistant vocal agentique basé sur GroveEngine (C++17 hot-reload). Architecture "Claude Code en vocal" avec tools internes + FileSystem + MCP. **Dernier commit** : `37b62b5` @@ -26,15 +26,15 @@ AISSIA = Assistant vocal agentique basé sur GroveEngine (C++17 hot-reload). Arc cmake -B build && cmake --build build -j4 # Run (depuis racine ou build/) -./build/aissia +./build/celuna # Mode MCP Server (expose les tools via JSON-RPC stdio) -./build/aissia --mcp-server +./build/celuna --mcp-server # Tests cmake -B build -DBUILD_TESTING=ON -./build/tests/aissia_tests "[scheduler],[notification]" # Modules -./build/tests/aissia_tests "[types]" # MCP types +./build/tests/celuna_tests "[scheduler],[notification]" # Modules +./build/tests/celuna_tests "[types]" # MCP types ``` ### Variables d'Environnement @@ -127,7 +127,7 @@ src/modules/StorageModule.* ``` src/shared/mcp/MCPTypes.hpp src/shared/mcp/MCPClient.* # Client MCP (consomme des serveurs externes) -src/shared/mcp/MCPServer.* # Serveur MCP (expose AISSIA comme serveur) +src/shared/mcp/MCPServer.* # Serveur MCP (expose CELUNA comme serveur) src/shared/mcp/StdioTransport.* config/mcp.json ``` @@ -139,12 +139,12 @@ config/mcp.json cmake -B build -DBUILD_TESTING=ON && cmake --build build -j4 # Par catégorie -./build/tests/aissia_tests "[scheduler]" # 10 tests -./build/tests/aissia_tests "[notification]" # 10 tests -./build/tests/aissia_tests "[types]" # 15 tests MCP +./build/tests/celuna_tests "[scheduler]" # 10 tests +./build/tests/celuna_tests "[notification]" # 10 tests +./build/tests/celuna_tests "[types]" # 15 tests MCP # Tous les modules -./build/tests/aissia_tests "[scheduler],[notification],[monitoring],[ai],[voice],[storage]" +./build/tests/celuna_tests "[scheduler],[notification],[monitoring],[ai],[voice],[storage]" ``` **Résultats actuels** : @@ -170,10 +170,10 @@ cmake -B build -DBUILD_TESTING=ON && cmake --build build -j4 ## MCP Server Mode -AISSIA peut fonctionner comme **serveur MCP**, exposant ses tools à des clients externes via JSON-RPC sur stdio. +CELUNA peut fonctionner comme **serveur MCP**, exposant ses tools à des clients externes via JSON-RPC sur stdio. ```bash -./build/aissia --mcp-server +./build/celuna --mcp-server ``` ### Protocole @@ -181,11 +181,11 @@ AISSIA peut fonctionner comme **serveur MCP**, exposant ses tools à des clients Communication JSON-RPC 2.0 sur stdin/stdout : ```json -// Client → AISSIA +// Client → CELUNA {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"clientInfo":{"name":"client","version":"1.0"}}} -// AISSIA → Client -{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","serverInfo":{"name":"aissia","version":"0.2.0"},...}} +// CELUNA → Client +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","serverInfo":{"name":"celuna","version":"0.2.0"},...}} // Lister les tools {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}} @@ -200,8 +200,8 @@ Ajouter dans la config MCP : ```json { "servers": { - "aissia": { - "command": "/chemin/vers/build/aissia", + "celuna": { + "command": "/chemin/vers/build/celuna", "args": ["--mcp-server"] } } diff --git a/docs/architecture/architecture-technique.md b/docs/architecture/architecture-technique.md index b6be2e3..f386ad7 100644 --- a/docs/architecture/architecture-technique.md +++ b/docs/architecture/architecture-technique.md @@ -1,4 +1,4 @@ -# Architecture Technique - AISSIA +# Architecture Technique - CELUNA ## Vision Globale @@ -96,7 +96,7 @@ class IModule { #### Évolution Progressive Détaillée -**Phase 1 : Debug/Prototype (MVP AISSIA)** +**Phase 1 : Debug/Prototype (MVP CELUNA)** ```cpp DebugEngine + SequentialModuleSystem + IntraIO ``` @@ -139,7 +139,7 @@ DataOrientedEngine + ClusterModuleSystem + NetworkIO #### Évolution Progressive Sans Régression ```cpp -// Phase 1 : Prototype (MVP AISSIA) +// Phase 1 : Prototype (MVP CELUNA) DebugEngine + SequentialModuleSystem + IntraIO → Développement ultra-rapide, Claude Code 100% focus logique @@ -327,9 +327,9 @@ cd modules/language-learning/ # Context: CLAUDE.md (65) + LanguageLearningModule.cpp (145) + IModule.h (30) ``` -## Modules AISSIA (Exemples) +## Modules CELUNA (Exemples) -L'architecture modulaire permet de créer des modules spécialisés pour AISSIA : +L'architecture modulaire permet de créer des modules spécialisés pour CELUNA : ### SchedulerModule - **Responsabilité** : Planning intelligent des tâches @@ -368,7 +368,7 @@ L'architecture modulaire permet de créer des modules spécialisés pour AISSIA **Protocole uniforme** : JSON-only entre tous les modules via interfaces IIO -### Mode Local (MVP AISSIA) +### Mode Local (MVP CELUNA) **Architecture :** - Tous modules locaux (IntraIO) diff --git a/docs/architecture/intelligent-document-retrieval.md b/docs/architecture/intelligent-document-retrieval.md index 7dcd8b1..0b0309a 100644 --- a/docs/architecture/intelligent-document-retrieval.md +++ b/docs/architecture/intelligent-document-retrieval.md @@ -2,7 +2,7 @@ ## Vue d'Ensemble -Ce document décrit l'architecture pour la récupération intelligente de documents dans AISSIA. Le système permet à l'AIAssistantModule de sélectionner et lire des documents de manière efficace sans saturer le context window du LLM. +Ce document décrit l'architecture pour la récupération intelligente de documents dans CELUNA. Le système permet à l'AIAssistantModule de sélectionner et lire des documents de manière efficace sans saturer le context window du LLM. ### Problème Adressé @@ -1631,5 +1631,5 @@ void testProviderConsistency() { - [Anthropic Tool Use Guide](https://docs.anthropic.com/en/docs/build-with-claude/tool-use) - [OpenAI Function Calling](https://platform.openai.com/docs/guides/function-calling) - [Ollama API](https://github.com/ollama/ollama/blob/main/docs/api.md) -- [architecture-technique.md](./architecture-technique.md) - Architecture système AISSIA +- [architecture-technique.md](./architecture-technique.md) - Architecture système CELUNA - [claude-code-integration.md](./claude-code-integration.md) - Patterns développement Claude Code diff --git a/docs/project-overview.md b/docs/project-overview.md index 82e3cfc..c3b975c 100644 --- a/docs/project-overview.md +++ b/docs/project-overview.md @@ -1,8 +1,8 @@ -# AISSIA - Vue d'Ensemble du Projet +# CELUNA - Vue d'Ensemble du Projet ## Description -AISSIA est un assistant personnel intelligent conçu pour : +CELUNA est un assistant personnel intelligent conçu pour : - Gérer le temps et l'hyperfocus (sessions max 2h) - Faciliter l'apprentissage de langues - Fournir des interventions proactives via IA pour forcer les transitions et planifier intelligemment @@ -135,7 +135,7 @@ Tous les modules communiquent exclusivement via messages JSON : ## Structure du Projet ``` -Aissia/ +Celuna/ ├── CLAUDE.md # Instructions développement (obsolète → ce fichier) ├── docs/ # Documentation technique │ ├── README.md # Vue d'ensemble diff --git a/plans/PHASE7_COMPILATION_ISSUE.md b/plans/PHASE7_COMPILATION_ISSUE.md index e64a4e5..a0f7f9d 100644 --- a/plans/PHASE7_COMPILATION_ISSUE.md +++ b/plans/PHASE7_COMPILATION_ISSUE.md @@ -159,7 +159,7 @@ Problème: JsonDataNode.h définit probablement des macros comme: Créer un fichier séparé sans includes GroveEngine: ```cpp // stt_impl.cpp - PAS d'include JsonDataNode.h -namespace aissia::stt_impl { +namespace celuna::stt_impl { // Toute la logique STT ici } ``` @@ -179,7 +179,7 @@ namespace aissia::stt_impl { ### Option D: Compiler en Bibliothèque Statique 📦 ```cmake # Compiler STTService en lib séparée AVANT VoiceService -add_library(AissiaSTT STATIC src/services/STTService.cpp) +add_library(CelunaSTT STATIC src/services/STTService.cpp) # Avec flags de compilation spécifiques ``` diff --git a/plans/PHASE7_STT_IMPLEMENTATION.md b/plans/PHASE7_STT_IMPLEMENTATION.md index eb7dabc..5a353af 100644 --- a/plans/PHASE7_STT_IMPLEMENTATION.md +++ b/plans/PHASE7_STT_IMPLEMENTATION.md @@ -2,7 +2,7 @@ **Date de création** : 2025-11-29 **Objectif** : Architecture STT complète avec support multi-engines (Vosk, PocketSphinx, Whisper) -**Nom de l'assistant** : Celuna (anciennement AISSIA) +**Nom de l'assistant** : Celuna (anciennement CELUNA) --- @@ -78,7 +78,7 @@ Créer une couche service qui abstrait la complexité des engines STT et gère : #include #include -namespace aissia { +namespace celuna { enum class STTMode { PASSIVE, // Keyword spotting (économe) @@ -167,7 +167,7 @@ public: virtual std::string getCurrentEngine() const = 0; }; -} // namespace aissia +} // namespace celuna ``` **Estimation** : 50 lignes @@ -285,7 +285,7 @@ unzip vosk-model-small-fr-0.22.zip -d models/ #include #include -namespace aissia { +namespace celuna { class VoskSTTEngine : public ISTTEngine { public: @@ -363,7 +363,7 @@ private: } }; -} // namespace aissia +} // namespace celuna ``` **Estimation** : 200 lignes @@ -399,7 +399,7 @@ hey celuna /1e-50/ #include #include -namespace aissia { +namespace celuna { class PocketSphinxEngine : public ISTTEngine { public: @@ -478,7 +478,7 @@ private: } }; -} // namespace aissia +} // namespace celuna ``` **Estimation** : 180 lignes @@ -520,7 +520,7 @@ make #include "WhisperCppEngine.hpp" #include "WhisperAPIEngine.hpp" -namespace aissia { +namespace celuna { std::unique_ptr STTEngineFactory::create( const std::string& type, @@ -556,7 +556,7 @@ std::unique_ptr STTEngineFactory::create( return std::make_unique(); } -} // namespace aissia +} // namespace celuna ``` **Estimation** : 80 lignes diff --git a/plans/PROMPT_INTEGRATION_TESTS.md b/plans/PROMPT_INTEGRATION_TESTS.md index 50c0797..d4aec7e 100644 --- a/plans/PROMPT_INTEGRATION_TESTS.md +++ b/plans/PROMPT_INTEGRATION_TESTS.md @@ -1,10 +1,10 @@ # Prompt pour Implémenter le Système de Tests d'Intégration -Salut ! Je reprends l'implémentation du **système de tests d'intégration** pour AISSIA. +Salut ! Je reprends l'implémentation du **système de tests d'intégration** pour CELUNA. ## 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. +CELUNA 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** : - ✅ 7 modules fonctionnels (Scheduler, Notification, Monitoring, AI, Voice, Storage, Web) @@ -257,7 +257,7 @@ extern "C" { ``` ======================================== - AISSIA Integration Tests + CELUNA Integration Tests Running 13 tests... ======================================== @@ -318,7 +318,7 @@ ls build/tests/integration/ # ... # Lancer les tests -./build/aissia --run-tests +./build/celuna --run-tests # Vérifier exit code echo $? # Doit être 0 si tous passent @@ -357,10 +357,10 @@ cmake --build build -j4 cmake --build build --target integration_tests # Run tests avec verbose -./build/aissia --run-tests --verbose +./build/celuna --run-tests --verbose # Run tests avec JSON output -./build/aissia --run-tests --json-output results.json +./build/celuna --run-tests --json-output results.json # Run un seul test (debug) # (charger manuellement le .so dans le code) diff --git a/plans/PROMPT_NEXT_INTEGRATION_TESTS.md b/plans/PROMPT_NEXT_INTEGRATION_TESTS.md index 18b2fd2..be6f762 100644 --- a/plans/PROMPT_NEXT_INTEGRATION_TESTS.md +++ b/plans/PROMPT_NEXT_INTEGRATION_TESTS.md @@ -1,4 +1,4 @@ -# État des Tests d'Intégration AISSIA - Phase 5 TERMINÉE ✅ +# État des Tests d'Intégration CELUNA - Phase 5 TERMINÉE ✅ ## Résumé Exécutif @@ -59,7 +59,7 @@ ## 📊 Résultats d'Exécution (Dernière Run) ```bash -cd build && ./aissia --run-tests +cd build && ./celuna --run-tests ``` **Résumé** : `1/13 PASS (7.7%)` | Durée totale : `130.7s` @@ -98,7 +98,7 @@ cd build && ./aissia --run-tests ANTHROPIC_API_KEY=sk-ant-xxx # Puis : -cd build && source ../.env && ./aissia --run-tests +cd build && source ../.env && ./celuna --run-tests ``` **Impact** : 9/13 tests ne peuvent pas s'exécuter sans API Claude @@ -238,8 +238,8 @@ plans/PROMPT_NEXT_INTEGRATION_TESTS.md +517 lignes (ce fichier) **Tâches** : 1. Modifier `main.cpp` pour charger modules en mode test -2. Rebuild : `cmake --build build --target aissia` -3. Tester avec API : `cd build && source ../.env && ./aissia --run-tests` +2. Rebuild : `cmake --build build --target celuna` +3. Tester avec API : `cd build && source ../.env && ./celuna --run-tests` 4. Valider : 13/13 PASS ✅ **Durée estimée** : 15 minutes @@ -319,7 +319,7 @@ Tous les topics IIO utilisés dans les tests ont été vérifiés dans le code s ```bash # 1. Vérifier l'état -cd /mnt/e/Users/Alexis\ Trouvé/Documents/Projets/Aissia +cd /mnt/e/Users/Alexis\ Trouvé/Documents/Projets/Celuna git log --oneline -3 # Devrait montrer : 24810a7, 93800ca, d5cbf3b @@ -329,7 +329,7 @@ cat plans/PROMPT_NEXT_INTEGRATION_TESTS.md # 3. Choisir Option A ou B (voir ci-dessus) # 4. Tester -cd build && ./aissia --run-tests +cd build && ./celuna --run-tests cat test-results.json | python3 -m json.tool ``` diff --git a/plans/PROMPT_WEBMODULE.md b/plans/PROMPT_WEBMODULE.md index 001099b..2c1ae2a 100644 --- a/plans/PROMPT_WEBMODULE.md +++ b/plans/PROMPT_WEBMODULE.md @@ -1,10 +1,10 @@ # Prompt pour Implémenter WebModule -Salut ! Je reprends l'implémentation du **WebModule** pour AISSIA. +Salut ! Je reprends l'implémentation du **WebModule** pour CELUNA. ## 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. +CELUNA 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) @@ -121,13 +121,13 @@ Avant de considérer le travail terminé : ```bash # Build cmake --build build --target modules -j4 -cmake --build build --target aissia_tests -j4 +cmake --build build --target celuna_tests -j4 # Tests -./build/tests/aissia_tests "[web]" +./build/tests/celuna_tests "[web]" # Vérifier que tous les tests passent toujours -./build/tests/aissia_tests --reporter compact +./build/tests/celuna_tests --reporter compact ``` **Critère de succès** : 120/120 tests passent (110 existants + 10 nouveaux) @@ -135,7 +135,7 @@ cmake --build build --target aissia_tests -j4 ### Hot-Reload Teste manuellement le hot-reload : ```bash -# 1. Lance AISSIA +# 1. Lance CELUNA ./run.sh # 2. Modifie WebModule.cpp (change un log) @@ -164,10 +164,10 @@ cmake -B build && cmake --build build -j4 cmake --build build --target modules # Tests avec filtre -./build/tests/aissia_tests "[web]" +./build/tests/celuna_tests "[web]" # Tous les tests -./build/tests/aissia_tests --reporter compact +./build/tests/celuna_tests --reporter compact # Git git add -A diff --git a/plans/integration-tests-plan.md b/plans/integration-tests-plan.md index d35d2bd..0e5ec6d 100644 --- a/plans/integration-tests-plan.md +++ b/plans/integration-tests-plan.md @@ -1,6 +1,6 @@ # Plan Complet : Système de Tests d'Intégration avec Modules Dynamiques -**Objectif** : Créer un système de tests d'intégration qui valide le fonctionnement complet d'AISSIA en conditions réelles, en utilisant l'architecture modulaire de GroveEngine pour rendre chaque test isolé, extensible et hot-reloadable. +**Objectif** : Créer un système de tests d'intégration qui valide le fonctionnement complet d'CELUNA en conditions réelles, en utilisant l'architecture modulaire de GroveEngine pour rendre chaque test isolé, extensible et hot-reloadable. **Date** : 2025-11-28 **Auteur** : Claude Code @@ -11,7 +11,7 @@ ### 1.1 But Principal -Valider automatiquement qu'AISSIA fonctionne correctement en **conditions réelles** : +Valider automatiquement qu'CELUNA fonctionne correctement en **conditions réelles** : - Communication inter-modules via IIO - Services infrastructure (LLM, Storage, Platform, Voice) - MCP tools (17 tools internes + externes) @@ -44,7 +44,7 @@ Chaque test d'intégration est un module GroveEngine indépendant : ``` ┌─────────────────────────────────────────────────────┐ -│ AISSIA --run-tests │ +│ CELUNA --run-tests │ │ │ │ ┌────────────────────────────────────────────┐ │ │ │ TestRunnerModule │ │ @@ -75,7 +75,7 @@ Chaque test d'intégration est un module GroveEngine indépendant : │ └────────────────────────────────────────────┘ │ │ ▼ │ │ ┌────────────────────────────────────────────┐ │ -│ │ Modules AISSIA (testés) │ │ +│ │ Modules CELUNA (testés) │ │ │ │ Scheduler, Notification, Monitoring, │ │ │ │ AI, Voice, Storage, Web │ │ │ └────────────────────────────────────────────┘ │ @@ -93,8 +93,8 @@ Chaque test d'intégration est un module GroveEngine indépendant : ### 2.2 Flux d'Exécution ``` -1. User: ./build/aissia --run-tests -2. AISSIA démarre en mode test +1. User: ./build/celuna --run-tests +2. CELUNA démarre en mode test 3. Charge TestRunnerModule (au lieu des modules normaux) 4. TestRunnerModule: a. Lit config/test_runner.json @@ -173,7 +173,7 @@ private: **But** : Interface commune pour tous les modules de test ```cpp -namespace aissia::testing { +namespace celuna::testing { struct TestResult { bool passed = false; @@ -190,7 +190,7 @@ public: virtual std::string getDescription() const = 0; }; -} // namespace aissia::testing +} // namespace celuna::testing ``` ### 3.3 Modules de Test Individuels @@ -287,7 +287,7 @@ Exemple : `IT_001_GetCurrentTime.cpp` #include #include -namespace aissia::testing { +namespace celuna::testing { class IT_001_GetCurrentTime : public ITestModule { public: @@ -387,12 +387,12 @@ private: int m_timeout = 10000; }; -} // namespace aissia::testing +} // namespace celuna::testing // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_001_GetCurrentTime(); + return new celuna::testing::IT_001_GetCurrentTime(); } void destroyModule(grove::IModule* module) { @@ -423,7 +423,7 @@ Chaque test a son JSON : `config/integration/IT_001.json` ``` ======================================== - AISSIA Integration Tests + CELUNA Integration Tests Running 13 tests... ======================================== @@ -671,16 +671,16 @@ ls build/tests/integration/ ```bash # Lancer tous les tests -./build/aissia --run-tests +./build/celuna --run-tests # Avec config custom -./build/aissia --run-tests --test-config config/my_tests.json +./build/celuna --run-tests --test-config config/my_tests.json # Verbose mode -./build/aissia --run-tests --verbose +./build/celuna --run-tests --verbose # Sauvegarder résultats JSON -./build/aissia --run-tests --json-output results.json +./build/celuna --run-tests --json-output results.json ``` ### 8.3 CI/CD @@ -696,7 +696,7 @@ cmake -B build -DBUILD_TESTING=ON cmake --build build --target integration_tests -j4 # Run tests -./build/aissia --run-tests --json-output test-results.json +./build/celuna --run-tests --json-output test-results.json # Exit code: 0 = success, 1 = failure if [ $? -eq 0 ]; then @@ -811,4 +811,4 @@ README.md # Documenter système de tests **Plan prêt pour implémentation** 🚀 -Ce plan détaille un système de tests d'intégration innovant qui utilise l'architecture modulaire de GroveEngine pour rendre chaque test isolé, extensible et hot-reloadable. L'approche "un module = un test" démontre la puissance du système tout en fournissant une validation complète d'AISSIA en conditions réelles. +Ce plan détaille un système de tests d'intégration innovant qui utilise l'architecture modulaire de GroveEngine pour rendre chaque test isolé, extensible et hot-reloadable. L'approche "un module = un test" démontre la puissance du système tout en fournissant une validation complète d'CELUNA en conditions réelles. diff --git a/plans/webmodule-implementation.md b/plans/webmodule-implementation.md index 9a1545f..cedf13a 100644 --- a/plans/webmodule-implementation.md +++ b/plans/webmodule-implementation.md @@ -58,7 +58,7 @@ #include #include -namespace aissia { +namespace celuna { class WebModule : public grove::IModule { public: @@ -96,7 +96,7 @@ private: int m_failedRequests = 0; }; -} // namespace aissia +} // namespace celuna ``` #### `src/modules/WebModule.cpp` (180 lignes) @@ -251,8 +251,8 @@ TI_WEB_010: Error Response Format 7. **Exécuter les tests** ```bash - cmake --build build --target aissia_tests - ./build/tests/aissia_tests "[web]" + cmake --build build --target celuna_tests + ./build/tests/celuna_tests "[web]" ``` ### Phase 3: Documentation & Exemples (30min) diff --git a/src/main.cpp b/src/main.cpp index e54e760..5d6d034 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -187,7 +187,7 @@ int runMCPServer() { // === Initialize Services === // 1. LLMService (PRIORITY: for chat_with_aissia) - auto llmService = std::make_unique(); + auto llmService = std::make_unique(); if (!llmService->loadConfig("config/llm.json")) { spdlog::warn("Failed to load LLM config, chat_with_aissia will be unavailable"); } @@ -195,16 +195,16 @@ int runMCPServer() { llmService->initializeTools(); // Load internal tools + MCP tools // 2. StorageService (for save_memory/search_memories) - auto storageService = std::make_unique(); + auto storageService = std::make_unique(); storageService->initialize(nullptr); // 3. VoiceService (for TTS/STT) - auto voiceService = std::make_unique(); + auto voiceService = std::make_unique(); // Note: Voice config is optional voiceService->initialize(nullptr); // === Create Tool Registry === - aissia::ToolRegistry registry; + celuna::ToolRegistry registry; // Register get_current_time tool registry.registerTool( @@ -221,20 +221,20 @@ int runMCPServer() { ); // Register FileSystem tools - for (const auto& toolDef : aissia::tools::FileSystemTools::getToolDefinitions()) { + for (const auto& toolDef : celuna::tools::FileSystemTools::getToolDefinitions()) { std::string toolName = toolDef["name"].get(); registry.registerTool( toolName, toolDef["description"].get(), toolDef["input_schema"], [toolName](const nlohmann::json& input) -> nlohmann::json { - return aissia::tools::FileSystemTools::execute(toolName, input); + return celuna::tools::FileSystemTools::execute(toolName, input); } ); } // === Register AISSIA Tools (Phase 8) === - aissia::tools::MCPServerTools aissiaTools( + celuna::tools::MCPServerTools aissiaTools( llmService.get(), storageService.get(), voiceService.get() @@ -247,7 +247,7 @@ int runMCPServer() { spdlog::info("Registered {} tools total", registry.size()); // Create and run MCP server - aissia::mcp::MCPServer server(registry); + celuna::mcp::MCPServer server(registry); server.setServerInfo("aissia", "0.2.0"); server.run(); @@ -356,7 +356,7 @@ int main(int argc, char* argv[]) { auto voiceIO = grove::IOFactory::create("intra", "VoiceService"); // LLM Service - aissia::LLMService llmService; + celuna::LLMService llmService; llmService.initialize(llmIO.get()); llmService.loadConfig(configDir + "ai.json"); @@ -375,7 +375,7 @@ int main(int argc, char* argv[]) { ); // Storage Service - aissia::StorageService storageService; + celuna::StorageService storageService; storageService.initialize(storageIO.get()); { auto storageConfig = loadConfig(configDir + "storage.json"); @@ -386,7 +386,7 @@ int main(int argc, char* argv[]) { } // Platform Service - aissia::PlatformService platformService; + celuna::PlatformService platformService; platformService.initialize(platformIO.get()); { auto monitorConfig = loadConfig(configDir + "monitoring.json"); @@ -396,7 +396,7 @@ int main(int argc, char* argv[]) { } // Voice Service - aissia::VoiceService voiceService; + celuna::VoiceService voiceService; voiceService.initialize(voiceIO.get()); { // Load voice.json directly as nlohmann::json for Phase 7 STT diff --git a/src/modules/AIModule.cpp b/src/modules/AIModule.cpp index a11f0ab..c274b8a 100644 --- a/src/modules/AIModule.cpp +++ b/src/modules/AIModule.cpp @@ -2,7 +2,7 @@ #include #include -namespace aissia { +namespace celuna { AIModule::AIModule() { m_logger = spdlog::get("AIModule"); @@ -191,13 +191,13 @@ void AIModule::setState(const grove::IDataNode& state) { m_logger->info("Etat restore: queries={}, tokens={}", m_totalQueries, m_totalTokens); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::AIModule(); + return new celuna::AIModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/AIModule.h b/src/modules/AIModule.h index 21a398c..4e86746 100644 --- a/src/modules/AIModule.h +++ b/src/modules/AIModule.h @@ -9,7 +9,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief AI Assistant Module - Pure business logic @@ -73,7 +73,7 @@ private: void publishSuggestion(const std::string& message, int duration); }; -} // namespace aissia +} // namespace celuna extern "C" { grove::IModule* createModule(); diff --git a/src/modules/MonitoringModule.cpp b/src/modules/MonitoringModule.cpp index 8dbd39a..1dcbe57 100644 --- a/src/modules/MonitoringModule.cpp +++ b/src/modules/MonitoringModule.cpp @@ -3,7 +3,7 @@ #include #include -namespace aissia { +namespace celuna { MonitoringModule::MonitoringModule() { m_logger = spdlog::get("MonitoringModule"); @@ -273,13 +273,13 @@ void MonitoringModule::setState(const grove::IDataNode& state) { m_logger->info("Etat restore: app={}, productif={}s", m_currentApp, m_totalProductiveSeconds); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::MonitoringModule(); + return new celuna::MonitoringModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/MonitoringModule.h b/src/modules/MonitoringModule.h index dff814f..098d636 100644 --- a/src/modules/MonitoringModule.h +++ b/src/modules/MonitoringModule.h @@ -10,7 +10,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Monitoring Module - App classification logic only @@ -77,7 +77,7 @@ private: void handleToolQuery(const grove::IDataNode& request); }; -} // namespace aissia +} // namespace celuna extern "C" { grove::IModule* createModule(); diff --git a/src/modules/NotificationModule.cpp b/src/modules/NotificationModule.cpp index a1b2c2d..ea2f0d9 100644 --- a/src/modules/NotificationModule.cpp +++ b/src/modules/NotificationModule.cpp @@ -1,7 +1,7 @@ #include "NotificationModule.h" #include -namespace aissia { +namespace celuna { NotificationModule::NotificationModule() { m_logger = spdlog::get("NotificationModule"); @@ -157,13 +157,13 @@ void NotificationModule::setState(const grove::IDataNode& state) { m_logger->info("État restauré: {} notifications historiques", m_notificationCount); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::NotificationModule(); + return new celuna::NotificationModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/NotificationModule.h b/src/modules/NotificationModule.h index 1c1d705..cd8d59e 100644 --- a/src/modules/NotificationModule.h +++ b/src/modules/NotificationModule.h @@ -9,7 +9,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Notification Module - Alertes système et TTS @@ -88,7 +88,7 @@ private: std::string priorityToEmoji(Priority p); }; -} // namespace aissia +} // namespace celuna extern "C" { grove::IModule* createModule(); diff --git a/src/modules/SchedulerModule.cpp b/src/modules/SchedulerModule.cpp index ab8a332..ad102f8 100644 --- a/src/modules/SchedulerModule.cpp +++ b/src/modules/SchedulerModule.cpp @@ -1,8 +1,9 @@ #include "SchedulerModule.h" #include #include +#include -namespace aissia { +namespace celuna { SchedulerModule::SchedulerModule() { m_logger = spdlog::get("SchedulerModule"); @@ -44,69 +45,43 @@ const grove::IDataNode& SchedulerModule::getConfiguration() { } void SchedulerModule::process(const grove::IDataNode& input) { - float currentTime = input.getDouble("gameTime", 0.0); - - // Update last activity time - m_lastActivityTime = currentTime; - - // Process incoming messages + m_lastActivityTime = input.getDouble("gameTime", 0.0); processMessages(); - - // Convertir le temps en minutes pour les calculs - float sessionMinutes = (currentTime - m_sessionStartTime) / 60.0f; - - // Verifier l'hyperfocus - checkHyperfocus(currentTime); - - // Verifier les rappels de pause - checkBreakReminder(currentTime); - - // Log periodique (toutes les 5 minutes simulees) + float sessionMinutes = (m_lastActivityTime - m_sessionStartTime) / 60.0f; + checkHyperfocus(m_lastActivityTime); + checkBreakReminder(m_lastActivityTime); + // Log periodique (toutes les 5 minutes) static float lastLog = 0; - if (currentTime - lastLog > 300.0f) { // 300 secondes = 5 minutes - lastLog = currentTime; - m_logger->debug("Session: {:.1f}min, Focus aujourd'hui: {}min, Tache: {}", - sessionMinutes, m_totalFocusMinutesToday, - m_currentTaskId.empty() ? "(aucune)" : m_currentTaskId); + if (m_lastActivityTime - lastLog > 300.0f) { + lastLog = m_lastActivityTime; + m_logger->debug("Session: {:.1f}min, Focus: {}min, Tache: {}", sessionMinutes, + m_totalFocusMinutesToday, m_currentTaskId.empty() ? "(aucune)" : m_currentTaskId); } } void SchedulerModule::processMessages() { if (!m_io) return; - while (m_io->hasMessages() > 0) { auto msg = m_io->pullMessage(); - if (msg.topic == "user:task_switch" && msg.data) { std::string taskId = msg.data->getString("taskId", ""); - if (!taskId.empty()) { - startTask(taskId); - } + if (!taskId.empty()) startTask(taskId); } - else if (msg.topic == "monitoring:idle_detected" && msg.data) { - // User went idle - pause tracking + else if (msg.topic == "monitoring:idle_detected" && msg.data) m_logger->debug("User idle, pausing session tracking"); - } - else if (msg.topic == "monitoring:activity_resumed" && msg.data) { - // User returned - resume tracking + else if (msg.topic == "monitoring:activity_resumed" && msg.data) m_logger->debug("User active, resuming session tracking"); - } - // Tool query handlers - else if (msg.topic == "scheduler:query" && msg.data) { + else if (msg.topic == "scheduler:query" && msg.data) handleToolQuery(*msg.data); - } - else if (msg.topic == "scheduler:command" && msg.data) { + else if (msg.topic == "scheduler:command" && msg.data) handleToolCommand(*msg.data); - } } } void SchedulerModule::handleToolQuery(const grove::IDataNode& request) { - std::string correlationId = request.getString("correlation_id", ""); - std::string action = request.getString("action", ""); - auto response = std::make_unique("response"); - response->setString("correlation_id", correlationId); + response->setString("correlation_id", request.getString("correlation_id", "")); + std::string action = request.getString("action", ""); if (action == "get_current_task") { Task* task = findTask(m_currentTaskId); @@ -114,7 +89,16 @@ void SchedulerModule::handleToolQuery(const grove::IDataNode& request) { response->setString("task_name", task ? task->name : (m_currentTaskId.empty() ? "Aucune tache active" : m_currentTaskId)); float sessionMinutes = m_currentTaskId.empty() ? 0 : (m_lastActivityTime - m_sessionStartTime) / 60.0f; response->setInt("duration_minutes", static_cast(sessionMinutes)); - response->setString("started_at", ""); // TODO: format timestamp + // Format timestamp: calculate start time from elapsed seconds + if (!m_currentTaskId.empty()) { + auto now = std::chrono::system_clock::now() - std::chrono::seconds(static_cast(m_lastActivityTime - m_sessionStartTime)); + auto ts = std::chrono::system_clock::to_time_t(now); + char buf[64]; + std::strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", std::gmtime(&ts)); + response->setString("started_at", buf); + } else { + response->setString("started_at", ""); + } } else if (action == "list_tasks") { bool includeCompleted = request.getBool("include_completed", false); @@ -142,17 +126,15 @@ void SchedulerModule::handleToolQuery(const grove::IDataNode& request) { } void SchedulerModule::handleToolCommand(const grove::IDataNode& request) { - std::string correlationId = request.getString("correlation_id", ""); - std::string action = request.getString("action", ""); - auto response = std::make_unique("response"); - response->setString("correlation_id", correlationId); + response->setString("correlation_id", request.getString("correlation_id", "")); + std::string action = request.getString("action", ""); if (action == "start_task") { std::string taskId = request.getString("task_id", ""); - if (taskId.empty()) { + if (taskId.empty()) response->setString("error", "missing_task_id"); - } else { + else { startTask(taskId); response->setBool("success", true); response->setString("task_id", taskId); @@ -160,15 +142,11 @@ void SchedulerModule::handleToolCommand(const grove::IDataNode& request) { } else if (action == "complete_task") { std::string taskId = request.getString("task_id", ""); - if (taskId.empty()) { - // Complete current task + if (taskId.empty()) completeCurrentTask(); - } else { - // Complete specific task + else { Task* task = findTask(taskId); - if (task) { - task->completed = true; - } + if (task) task->completed = true; } response->setBool("success", true); } @@ -177,34 +155,25 @@ void SchedulerModule::handleToolCommand(const grove::IDataNode& request) { std::string reason = request.getString("reason", "break"); m_lastBreakTime = m_lastActivityTime; m_logger->info("Pause demarree: {} minutes ({})", duration, reason); - - // Publish break started event auto event = std::make_unique("break"); event->setInt("duration", duration); event->setString("reason", reason); m_io->publish("scheduler:break_started", std::move(event)); - response->setBool("success", true); response->setInt("duration", duration); } - else { + else response->setString("error", "unknown_action"); - } m_io->publish("scheduler:response", std::move(response)); } void SchedulerModule::checkHyperfocus(float currentTime) { if (m_currentTaskId.empty()) return; - float sessionMinutes = (currentTime - m_sessionStartTime) / 60.0f; - if (sessionMinutes >= m_hyperfocusThresholdMinutes && !m_hyperfocusAlertSent) { m_hyperfocusAlertSent = true; - m_logger->warn("HYPERFOCUS DETECTE! Session de {:.0f} minutes sur '{}'", - sessionMinutes, m_currentTaskId); - - // Publish hyperfocus alert + m_logger->warn("HYPERFOCUS DETECTE! Session de {:.0f} minutes sur '{}'", sessionMinutes, m_currentTaskId); if (m_io) { auto event = std::make_unique("alert"); event->setString("type", "hyperfocus"); @@ -217,12 +186,9 @@ void SchedulerModule::checkHyperfocus(float currentTime) { void SchedulerModule::checkBreakReminder(float currentTime) { float timeSinceBreak = (currentTime - m_lastBreakTime) / 60.0f; - if (timeSinceBreak >= m_breakReminderIntervalMinutes) { m_lastBreakTime = currentTime; m_logger->info("RAPPEL: Pause de {} minutes recommandee!", m_breakDurationMinutes); - - // Publish break reminder if (m_io) { auto event = std::make_unique("reminder"); event->setString("type", "break"); @@ -234,21 +200,12 @@ void SchedulerModule::checkBreakReminder(float currentTime) { } void SchedulerModule::startTask(const std::string& taskId) { - // Completer la tache precedente si necessaire - if (!m_currentTaskId.empty()) { - completeCurrentTask(); - } - + if (!m_currentTaskId.empty()) completeCurrentTask(); m_currentTaskId = taskId; m_sessionStartTime = m_lastActivityTime; m_hyperfocusAlertSent = false; - Task* task = findTask(taskId); - if (task) { - m_logger->info("Tache demarree: {} (estime: {}min)", task->name, task->estimatedMinutes); - } - - // Publish task started + if (task) m_logger->info("Tache demarree: {} (estime: {}min)", task->name, task->estimatedMinutes); if (m_io) { auto event = std::make_unique("started"); event->setString("taskId", taskId); @@ -259,20 +216,14 @@ void SchedulerModule::startTask(const std::string& taskId) { void SchedulerModule::completeCurrentTask() { if (m_currentTaskId.empty()) return; - Task* task = findTask(m_currentTaskId); float sessionMinutes = (m_lastActivityTime - m_sessionStartTime) / 60.0f; - if (task) { task->actualMinutes = static_cast(sessionMinutes); task->completed = true; m_totalFocusMinutesToday += task->actualMinutes; - - m_logger->info("Tache terminee: {} (reel: {}min vs estime: {}min)", - task->name, task->actualMinutes, task->estimatedMinutes); + m_logger->info("Tache terminee: {} (reel: {}min vs estime: {}min)", task->name, task->actualMinutes, task->estimatedMinutes); } - - // Publish task completed if (m_io) { auto event = std::make_unique("completed"); event->setString("taskId", m_currentTaskId); @@ -281,7 +232,6 @@ void SchedulerModule::completeCurrentTask() { event->setBool("hyperfocus", m_hyperfocusAlertSent); m_io->publish("scheduler:task_completed", std::move(event)); } - m_currentTaskId.clear(); } @@ -303,15 +253,12 @@ std::unique_ptr SchedulerModule::getHealthStatus() { } void SchedulerModule::shutdown() { - if (!m_currentTaskId.empty()) { - completeCurrentTask(); - } + if (!m_currentTaskId.empty()) completeCurrentTask(); m_logger->info("SchedulerModule arrete. Focus total: {}min", m_totalFocusMinutesToday); } std::unique_ptr SchedulerModule::getState() { auto state = std::make_unique("state"); - state->setString("currentTaskId", m_currentTaskId); state->setDouble("sessionStartTime", m_sessionStartTime); state->setDouble("lastBreakTime", m_lastBreakTime); @@ -319,7 +266,6 @@ std::unique_ptr SchedulerModule::getState() { state->setBool("hyperfocusAlertSent", m_hyperfocusAlertSent); state->setInt("totalFocusMinutesToday", m_totalFocusMinutesToday); state->setInt("taskCount", m_tasks.size()); - m_logger->debug("Etat sauvegarde: {} taches, focus={}min", m_tasks.size(), m_totalFocusMinutesToday); return state; } @@ -331,19 +277,16 @@ void SchedulerModule::setState(const grove::IDataNode& state) { m_lastActivityTime = state.getDouble("lastActivityTime", 0.0); m_hyperfocusAlertSent = state.getBool("hyperfocusAlertSent", false); m_totalFocusMinutesToday = state.getInt("totalFocusMinutesToday", 0); - - m_logger->info("Etat restaure: tache='{}', focus={}min", - m_currentTaskId.empty() ? "(aucune)" : m_currentTaskId, - m_totalFocusMinutesToday); + m_logger->info("Etat restaure: tache='{}', focus={}min", m_currentTaskId.empty() ? "(aucune)" : m_currentTaskId, m_totalFocusMinutesToday); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::SchedulerModule(); + return new celuna::SchedulerModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/SchedulerModule.h b/src/modules/SchedulerModule.h index 76d9397..c1c2ca7 100644 --- a/src/modules/SchedulerModule.h +++ b/src/modules/SchedulerModule.h @@ -9,8 +9,11 @@ #include #include #include +#include +#include +#include -namespace aissia { +namespace celuna { /** * @brief Scheduler Module - Gestion du temps et détection d'hyperfocus @@ -93,7 +96,7 @@ private: void handleToolCommand(const grove::IDataNode& request); }; -} // namespace aissia +} // namespace celuna extern "C" { grove::IModule* createModule(); diff --git a/src/modules/StorageModule.cpp b/src/modules/StorageModule.cpp index 0c7ce76..362508c 100644 --- a/src/modules/StorageModule.cpp +++ b/src/modules/StorageModule.cpp @@ -1,8 +1,10 @@ #include "StorageModule.h" #include #include +#include +#include -namespace aissia { +namespace celuna { StorageModule::StorageModule() { m_logger = spdlog::get("StorageModule"); @@ -133,12 +135,14 @@ void StorageModule::handleToolCommand(const grove::IDataNode& request) { if (content.empty()) { response->setString("error", "missing_content"); } else { - // Create note in memory Note note; note.id = "note_" + std::to_string(m_notes.size()); note.content = content; - note.timestamp = "now"; // TODO: proper timestamp - + // Format timestamp as ISO 8601 + auto ts = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + char buf[64]; + std::strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", std::gmtime(&ts)); + note.timestamp = buf; m_notes.push_back(note); m_logger->info("Note saved: {}", note.id); @@ -237,13 +241,13 @@ void StorageModule::setState(const grove::IDataNode& state) { m_logger->info("Etat restore: lastSession={}, saved={}", m_lastSessionId, m_totalSaved); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::StorageModule(); + return new celuna::StorageModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/StorageModule.h b/src/modules/StorageModule.h index 45cca53..7eb7fd9 100644 --- a/src/modules/StorageModule.h +++ b/src/modules/StorageModule.h @@ -8,8 +8,10 @@ #include #include #include +#include +#include -namespace aissia { +namespace celuna { /** * @brief Storage Module - Pure business logic for data persistence @@ -79,7 +81,7 @@ private: void handleToolCommand(const grove::IDataNode& request); }; -} // namespace aissia +} // namespace celuna extern "C" { grove::IModule* createModule(); diff --git a/src/modules/TestRunnerModule.cpp b/src/modules/TestRunnerModule.cpp index 59a8cc5..f90c0e3 100644 --- a/src/modules/TestRunnerModule.cpp +++ b/src/modules/TestRunnerModule.cpp @@ -8,7 +8,7 @@ namespace fs = std::filesystem; -namespace aissia { +namespace celuna { TestRunnerModule::TestRunnerModule() = default; TestRunnerModule::~TestRunnerModule() = default; @@ -322,12 +322,12 @@ void TestRunnerModule::setState(const grove::IDataNode& state) { m_executed = state.getBool("executed", false); } -} // namespace aissia +} // namespace celuna // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::TestRunnerModule(); + return new celuna::TestRunnerModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/TestRunnerModule.h b/src/modules/TestRunnerModule.h index b3ddb1c..3d382bb 100644 --- a/src/modules/TestRunnerModule.h +++ b/src/modules/TestRunnerModule.h @@ -9,7 +9,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Orchestrator for integration tests @@ -76,4 +76,4 @@ private: bool m_executed = false; }; -} // namespace aissia +} // namespace celuna diff --git a/src/modules/VoiceModule.cpp b/src/modules/VoiceModule.cpp index 0a8e3d5..3d4a61c 100644 --- a/src/modules/VoiceModule.cpp +++ b/src/modules/VoiceModule.cpp @@ -2,7 +2,7 @@ #include #include -namespace aissia { +namespace celuna { VoiceModule::VoiceModule() { m_logger = spdlog::get("VoiceModule"); @@ -208,13 +208,13 @@ void VoiceModule::setState(const grove::IDataNode& state) { m_logger->info("Etat restore: spoken={}, transcribed={}", m_totalSpoken, m_totalTranscribed); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::VoiceModule(); + return new celuna::VoiceModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/VoiceModule.h b/src/modules/VoiceModule.h index 3c8e6f0..6483ee3 100644 --- a/src/modules/VoiceModule.h +++ b/src/modules/VoiceModule.h @@ -9,7 +9,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Voice Module - Voice interaction logic only @@ -77,7 +77,7 @@ private: void handleToolCommand(const grove::IDataNode& request); }; -} // namespace aissia +} // namespace celuna extern "C" { grove::IModule* createModule(); diff --git a/src/modules/WebModule.cpp b/src/modules/WebModule.cpp index 754ead0..2898491 100644 --- a/src/modules/WebModule.cpp +++ b/src/modules/WebModule.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { WebModule::WebModule() { m_logger = spdlog::get("WebModule"); @@ -221,12 +221,12 @@ void WebModule::setState(const grove::IDataNode& state) { m_totalRequests, m_successfulRequests, m_failedRequests); } -} // namespace aissia +} // namespace celuna -#ifndef AISSIA_TEST_BUILD +#ifndef CELUNA_TEST_BUILD extern "C" { grove::IModule* createModule() { - return new aissia::WebModule(); + return new celuna::WebModule(); } void destroyModule(grove::IModule* module) { diff --git a/src/modules/WebModule.h b/src/modules/WebModule.h index c8bcf3f..a075664 100644 --- a/src/modules/WebModule.h +++ b/src/modules/WebModule.h @@ -3,7 +3,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief WebModule - Handles HTTP requests via IIO pub/sub @@ -59,4 +59,4 @@ private: int m_failedRequests = 0; }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/ISTTService.hpp b/src/services/ISTTService.hpp index ec3010a..dffb683 100644 --- a/src/services/ISTTService.hpp +++ b/src/services/ISTTService.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { enum class STTMode { PASSIVE, // Keyword spotting (économe) @@ -100,4 +100,4 @@ public: virtual std::string getCurrentEngine() const = 0; }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/IService.hpp b/src/services/IService.hpp index 615457e..28dbe85 100644 --- a/src/services/IService.hpp +++ b/src/services/IService.hpp @@ -3,7 +3,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Interface for infrastructure services @@ -36,4 +36,4 @@ public: virtual bool isHealthy() const = 0; }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/LLMService.cpp b/src/services/LLMService.cpp index 8180e26..3ad02f1 100644 --- a/src/services/LLMService.cpp +++ b/src/services/LLMService.cpp @@ -4,7 +4,7 @@ #include #include -namespace aissia { +namespace celuna { LLMService::LLMService() { m_logger = spdlog::get("LLMService"); @@ -372,4 +372,4 @@ LLMService::SyncResponse LLMService::sendMessageSync( return syncResp; } -} // namespace aissia +} // namespace celuna diff --git a/src/services/LLMService.hpp b/src/services/LLMService.hpp index d81d35e..cb79a94 100644 --- a/src/services/LLMService.hpp +++ b/src/services/LLMService.hpp @@ -19,7 +19,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief LLM Service - Async HTTP calls to LLM providers @@ -137,4 +137,4 @@ private: void publishResponses(); }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/PlatformService.cpp b/src/services/PlatformService.cpp index 9235d5c..6547b04 100644 --- a/src/services/PlatformService.cpp +++ b/src/services/PlatformService.cpp @@ -2,7 +2,7 @@ #include -namespace aissia { +namespace celuna { PlatformService::PlatformService() { m_logger = spdlog::get("PlatformService"); @@ -136,4 +136,4 @@ void PlatformService::shutdown() { m_logger->info("PlatformService shutdown"); } -} // namespace aissia +} // namespace celuna diff --git a/src/services/PlatformService.hpp b/src/services/PlatformService.hpp index 5a5d17f..164e347 100644 --- a/src/services/PlatformService.hpp +++ b/src/services/PlatformService.hpp @@ -10,7 +10,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Platform Service - OS-specific APIs (window tracking, etc.) @@ -64,4 +64,4 @@ private: void publishWindowChanged(const std::string& oldApp, const std::string& newApp, int duration); }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/STTService.cpp b/src/services/STTService.cpp index 6aed1a2..b942538 100644 --- a/src/services/STTService.cpp +++ b/src/services/STTService.cpp @@ -12,7 +12,7 @@ #include #include -namespace aissia { +namespace celuna { STTService::STTService(const nlohmann::json& config) : m_config(config) @@ -186,4 +186,4 @@ void STTService::loadEngines() { } } -} // namespace aissia +} // namespace celuna diff --git a/src/services/STTService.hpp b/src/services/STTService.hpp index ec55617..b1d8e8c 100644 --- a/src/services/STTService.hpp +++ b/src/services/STTService.hpp @@ -7,7 +7,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief STT Service implementation @@ -60,4 +60,4 @@ private: void loadEngines(); }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/StorageService.cpp b/src/services/StorageService.cpp index 58d6ff7..6a90f91 100644 --- a/src/services/StorageService.cpp +++ b/src/services/StorageService.cpp @@ -7,7 +7,7 @@ namespace fs = std::filesystem; -namespace aissia { +namespace celuna { StorageService::StorageService() { m_logger = spdlog::get("StorageService"); @@ -345,4 +345,4 @@ void StorageService::shutdown() { m_logger->info("StorageService shutdown. Total queries: {}", m_totalQueries); } -} // namespace aissia +} // namespace celuna diff --git a/src/services/StorageService.hpp b/src/services/StorageService.hpp index b40ff22..d1f9e1f 100644 --- a/src/services/StorageService.hpp +++ b/src/services/StorageService.hpp @@ -14,7 +14,7 @@ struct sqlite3; struct sqlite3_stmt; -namespace aissia { +namespace celuna { /** * @brief Storage Service - SQLite persistence @@ -88,4 +88,4 @@ private: void publishError(const std::string& message); }; -} // namespace aissia +} // namespace celuna diff --git a/src/services/VoiceService.cpp b/src/services/VoiceService.cpp index 882674c..528e0e1 100644 --- a/src/services/VoiceService.cpp +++ b/src/services/VoiceService.cpp @@ -13,7 +13,7 @@ // Include spdlog after VoiceService.hpp #include -namespace aissia { +namespace celuna { VoiceService::VoiceService() { m_logger = spdlog::get("VoiceService"); @@ -291,4 +291,4 @@ bool VoiceService::textToSpeechSync( throw std::runtime_error("textToSpeechSync file output not yet implemented - TTS engine needs file output support"); } -} // namespace aissia +} // namespace celuna diff --git a/src/services/VoiceService.hpp b/src/services/VoiceService.hpp index 617ee4e..5909d76 100644 --- a/src/services/VoiceService.hpp +++ b/src/services/VoiceService.hpp @@ -16,7 +16,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Voice Service - TTS and STT engines @@ -114,4 +114,4 @@ private: void handleKeyword(const std::string& keyword); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/EspeakTTSEngine.hpp b/src/shared/audio/EspeakTTSEngine.hpp index 157a36b..84d2f31 100644 --- a/src/shared/audio/EspeakTTSEngine.hpp +++ b/src/shared/audio/EspeakTTSEngine.hpp @@ -11,7 +11,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Linux espeak-ng Text-to-Speech engine @@ -130,6 +130,6 @@ private: } }; -} // namespace aissia +} // namespace celuna #endif // __linux__ diff --git a/src/shared/audio/ISTTEngine.hpp b/src/shared/audio/ISTTEngine.hpp index 2a9a6db..0b1ee9a 100644 --- a/src/shared/audio/ISTTEngine.hpp +++ b/src/shared/audio/ISTTEngine.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Callback for transcription results (low-level engine) @@ -67,4 +67,4 @@ public: const std::string& apiKey = ""); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/ITTSEngine.hpp b/src/shared/audio/ITTSEngine.hpp index 3d7b128..02ca2e2 100644 --- a/src/shared/audio/ITTSEngine.hpp +++ b/src/shared/audio/ITTSEngine.hpp @@ -3,7 +3,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Interface for Text-to-Speech engines @@ -64,4 +64,4 @@ public: static std::unique_ptr create(); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/PocketSphinxEngine.cpp b/src/shared/audio/PocketSphinxEngine.cpp index 0422164..c6b6736 100644 --- a/src/shared/audio/PocketSphinxEngine.cpp +++ b/src/shared/audio/PocketSphinxEngine.cpp @@ -8,7 +8,7 @@ #include #endif -namespace aissia { +namespace celuna { PocketSphinxEngine::PocketSphinxEngine(const std::string& modelPath, const std::vector& keywords) @@ -194,4 +194,4 @@ std::string PocketSphinxEngine::getEngineName() const { return "pocketsphinx"; } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/PocketSphinxEngine.hpp b/src/shared/audio/PocketSphinxEngine.hpp index 308507b..61e39d9 100644 --- a/src/shared/audio/PocketSphinxEngine.hpp +++ b/src/shared/audio/PocketSphinxEngine.hpp @@ -12,7 +12,7 @@ typedef struct ps_decoder_s ps_decoder_t; struct cmd_ln_s; typedef struct cmd_ln_s cmd_ln_t; -namespace aissia { +namespace celuna { /** * @brief CMU PocketSphinx Speech-to-Text engine @@ -77,4 +77,4 @@ private: cmd_ln_t* m_config = nullptr; }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/SAPITTSEngine.hpp b/src/shared/audio/SAPITTSEngine.hpp index 4ca2334..b5fa564 100644 --- a/src/shared/audio/SAPITTSEngine.hpp +++ b/src/shared/audio/SAPITTSEngine.hpp @@ -9,7 +9,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Windows SAPI Text-to-Speech engine @@ -112,6 +112,6 @@ private: std::shared_ptr m_logger; }; -} // namespace aissia +} // namespace celuna #endif // _WIN32 diff --git a/src/shared/audio/STTEngineFactory.cpp b/src/shared/audio/STTEngineFactory.cpp index bd9a784..1b57f64 100644 --- a/src/shared/audio/STTEngineFactory.cpp +++ b/src/shared/audio/STTEngineFactory.cpp @@ -6,7 +6,7 @@ #include #include -namespace aissia { +namespace celuna { // Stub STT for when API key is not available class StubSTTEngine : public ISTTEngine { @@ -117,4 +117,4 @@ std::unique_ptr STTEngineFactory::create( return std::make_unique(); } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/TTSEngineFactory.cpp b/src/shared/audio/TTSEngineFactory.cpp index a33fec5..24e90fc 100644 --- a/src/shared/audio/TTSEngineFactory.cpp +++ b/src/shared/audio/TTSEngineFactory.cpp @@ -8,7 +8,7 @@ #include "EspeakTTSEngine.hpp" #endif -namespace aissia { +namespace celuna { // Stub TTS for unsupported platforms class StubTTSEngine : public ITTSEngine { @@ -48,4 +48,4 @@ std::unique_ptr TTSEngineFactory::create() { return std::make_unique(); } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/VoskSTTEngine.cpp b/src/shared/audio/VoskSTTEngine.cpp index d5db654..1c632be 100644 --- a/src/shared/audio/VoskSTTEngine.cpp +++ b/src/shared/audio/VoskSTTEngine.cpp @@ -11,7 +11,7 @@ #include #include -namespace aissia { +namespace celuna { VoskSTTEngine::VoskSTTEngine(const std::string& modelPath, float sampleRate) : m_sampleRate(sampleRate) @@ -249,4 +249,4 @@ bool VoskSTTEngine::readWavFile(const std::string& filePath, std::vector& return true; } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/VoskSTTEngine.hpp b/src/shared/audio/VoskSTTEngine.hpp index 461d9c8..af39dd3 100644 --- a/src/shared/audio/VoskSTTEngine.hpp +++ b/src/shared/audio/VoskSTTEngine.hpp @@ -13,7 +13,7 @@ struct VoskModel; struct VoskRecognizer; -namespace aissia { +namespace celuna { /** * @brief Vosk Speech Recognition Engine @@ -74,4 +74,4 @@ private: bool readWavFile(const std::string& filePath, std::vector& outSamples); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/WhisperAPIEngine.hpp b/src/shared/audio/WhisperAPIEngine.hpp index 63b15b8..46b5545 100644 --- a/src/shared/audio/WhisperAPIEngine.hpp +++ b/src/shared/audio/WhisperAPIEngine.hpp @@ -6,7 +6,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief OpenAI Whisper API Speech-to-Text engine @@ -153,4 +153,4 @@ private: } }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/WhisperCppEngine.cpp b/src/shared/audio/WhisperCppEngine.cpp index 7ddef80..db24d60 100644 --- a/src/shared/audio/WhisperCppEngine.cpp +++ b/src/shared/audio/WhisperCppEngine.cpp @@ -9,7 +9,7 @@ #include #endif -namespace aissia { +namespace celuna { WhisperCppEngine::WhisperCppEngine(const std::string& modelPath) : m_modelPath(modelPath) @@ -167,4 +167,4 @@ std::string WhisperCppEngine::getEngineName() const { return "whisper-cpp"; } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/audio/WhisperCppEngine.hpp b/src/shared/audio/WhisperCppEngine.hpp index 442a019..fe0af5e 100644 --- a/src/shared/audio/WhisperCppEngine.hpp +++ b/src/shared/audio/WhisperCppEngine.hpp @@ -10,7 +10,7 @@ struct whisper_context; struct whisper_full_params; -namespace aissia { +namespace celuna { /** * @brief Whisper.cpp Speech-to-Text engine @@ -76,4 +76,4 @@ private: whisper_context* m_ctx = nullptr; }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/http/HttpClient.hpp b/src/shared/http/HttpClient.hpp index 49e3651..cd633e0 100644 --- a/src/shared/http/HttpClient.hpp +++ b/src/shared/http/HttpClient.hpp @@ -17,7 +17,7 @@ #include #include -namespace aissia { +namespace celuna { using json = nlohmann::json; @@ -206,4 +206,4 @@ private: std::shared_ptr m_logger; }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/ClaudeProvider.cpp b/src/shared/llm/ClaudeProvider.cpp index a3fe2af..c9388ea 100644 --- a/src/shared/llm/ClaudeProvider.cpp +++ b/src/shared/llm/ClaudeProvider.cpp @@ -2,7 +2,7 @@ #include #include -namespace aissia { +namespace celuna { ClaudeProvider::ClaudeProvider(const json& config) { m_logger = spdlog::get("ClaudeProvider"); @@ -178,4 +178,4 @@ json ClaudeProvider::buildAssistantContent(const LLMResponse& response) { return content; } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/ClaudeProvider.hpp b/src/shared/llm/ClaudeProvider.hpp index e3f6cf8..bcfcd68 100644 --- a/src/shared/llm/ClaudeProvider.hpp +++ b/src/shared/llm/ClaudeProvider.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Anthropic Claude API provider @@ -50,4 +50,4 @@ private: json buildAssistantContent(const LLMResponse& response); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/ILLMProvider.hpp b/src/shared/llm/ILLMProvider.hpp index dfb7907..3a3c60f 100644 --- a/src/shared/llm/ILLMProvider.hpp +++ b/src/shared/llm/ILLMProvider.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { using json = nlohmann::json; @@ -106,4 +106,4 @@ public: virtual std::string getModel() const = 0; }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/LLMProviderFactory.cpp b/src/shared/llm/LLMProviderFactory.cpp index a4a5837..c15d174 100644 --- a/src/shared/llm/LLMProviderFactory.cpp +++ b/src/shared/llm/LLMProviderFactory.cpp @@ -4,7 +4,7 @@ #include #include -namespace aissia { +namespace celuna { std::unique_ptr LLMProviderFactory::create(const nlohmann::json& config) { std::string providerName = config.value("provider", "claude"); @@ -43,4 +43,4 @@ std::unique_ptr LLMProviderFactory::createProvider( throw std::runtime_error("Unknown LLM provider: " + providerName); } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/LLMProviderFactory.hpp b/src/shared/llm/LLMProviderFactory.hpp index 8161e0e..22b5ce1 100644 --- a/src/shared/llm/LLMProviderFactory.hpp +++ b/src/shared/llm/LLMProviderFactory.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Factory for creating LLM providers @@ -53,4 +53,4 @@ public: const nlohmann::json& providerConfig); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/OpenAIProvider.cpp b/src/shared/llm/OpenAIProvider.cpp index b119768..f792ff1 100644 --- a/src/shared/llm/OpenAIProvider.cpp +++ b/src/shared/llm/OpenAIProvider.cpp @@ -2,7 +2,7 @@ #include #include -namespace aissia { +namespace celuna { OpenAIProvider::OpenAIProvider(const json& config) { m_logger = spdlog::get("OpenAIProvider"); @@ -198,4 +198,4 @@ void OpenAIProvider::appendAssistantMessage(json& messages, const LLMResponse& r messages.push_back(assistantMsg); } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/OpenAIProvider.hpp b/src/shared/llm/OpenAIProvider.hpp index aca9472..0640818 100644 --- a/src/shared/llm/OpenAIProvider.hpp +++ b/src/shared/llm/OpenAIProvider.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief OpenAI GPT API provider @@ -50,4 +50,4 @@ private: json m_lastRawResponse; }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/ToolRegistry.cpp b/src/shared/llm/ToolRegistry.cpp index 7640143..352f73a 100644 --- a/src/shared/llm/ToolRegistry.cpp +++ b/src/shared/llm/ToolRegistry.cpp @@ -1,7 +1,7 @@ #include "ToolRegistry.hpp" #include -namespace aissia { +namespace celuna { void ToolRegistry::registerTool(const std::string& name, const std::string& description, @@ -61,4 +61,4 @@ bool ToolRegistry::hasTool(const std::string& name) const { return m_tools.find(name) != m_tools.end(); } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/llm/ToolRegistry.hpp b/src/shared/llm/ToolRegistry.hpp index 95240f6..7f51cd2 100644 --- a/src/shared/llm/ToolRegistry.hpp +++ b/src/shared/llm/ToolRegistry.hpp @@ -6,7 +6,7 @@ #include #include -namespace aissia { +namespace celuna { using json = nlohmann::json; @@ -85,4 +85,4 @@ private: std::map m_tools; }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/mcp/MCPClient.cpp b/src/shared/mcp/MCPClient.cpp index 2424316..2c39c9f 100644 --- a/src/shared/mcp/MCPClient.cpp +++ b/src/shared/mcp/MCPClient.cpp @@ -3,7 +3,7 @@ #include -namespace aissia::mcp { +namespace celuna::mcp { MCPClient::MCPClient() { m_logger = spdlog::get("MCPClient"); @@ -299,4 +299,4 @@ std::pair MCPClient::parseToolName(const std::string& }; } -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/MCPClient.hpp b/src/shared/mcp/MCPClient.hpp index 6090a93..2283082 100644 --- a/src/shared/mcp/MCPClient.hpp +++ b/src/shared/mcp/MCPClient.hpp @@ -12,7 +12,7 @@ #include #include -namespace aissia::mcp { +namespace celuna::mcp { using json = nlohmann::json; @@ -107,4 +107,4 @@ private: std::pair parseToolName(const std::string& toolName); }; -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/MCPServer.cpp b/src/shared/mcp/MCPServer.cpp index 49878a1..25e112b 100644 --- a/src/shared/mcp/MCPServer.cpp +++ b/src/shared/mcp/MCPServer.cpp @@ -4,9 +4,9 @@ #include #include -namespace aissia::mcp { +namespace celuna::mcp { -MCPServer::MCPServer(aissia::ToolRegistry& registry) : m_registry(registry) { +MCPServer::MCPServer(celuna::ToolRegistry& registry) : m_registry(registry) { m_logger = spdlog::get("MCPServer"); if (!m_logger) { // Log to stderr so stdout stays clean for JSON-RPC @@ -273,4 +273,4 @@ void MCPServer::sendNotification(const std::string& method, const json& params) writeLine(notification.dump()); } -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/MCPServer.hpp b/src/shared/mcp/MCPServer.hpp index 84f555e..607e8b8 100644 --- a/src/shared/mcp/MCPServer.hpp +++ b/src/shared/mcp/MCPServer.hpp @@ -11,7 +11,7 @@ #include #include -namespace aissia::mcp { +namespace celuna::mcp { using json = nlohmann::json; @@ -31,7 +31,7 @@ using json = nlohmann::json; */ class MCPServer { public: - explicit MCPServer(aissia::ToolRegistry& registry); + explicit MCPServer(celuna::ToolRegistry& registry); ~MCPServer(); // Server configuration @@ -66,7 +66,7 @@ private: void sendNotification(const std::string& method, const json& params = json::object()); // State - aissia::ToolRegistry& m_registry; + celuna::ToolRegistry& m_registry; std::atomic m_running{false}; bool m_initialized{false}; @@ -82,4 +82,4 @@ private: std::shared_ptr m_logger; }; -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/MCPTransport.hpp b/src/shared/mcp/MCPTransport.hpp index 6c5eaf8..3fc2615 100644 --- a/src/shared/mcp/MCPTransport.hpp +++ b/src/shared/mcp/MCPTransport.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::mcp { +namespace celuna::mcp { using json = nlohmann::json; @@ -48,4 +48,4 @@ public: virtual void sendNotification(const std::string& method, const json& params) = 0; }; -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/MCPTypes.hpp b/src/shared/mcp/MCPTypes.hpp index 4dfc739..187b8b2 100644 --- a/src/shared/mcp/MCPTypes.hpp +++ b/src/shared/mcp/MCPTypes.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::mcp { +namespace celuna::mcp { using json = nlohmann::json; @@ -183,4 +183,4 @@ struct MCPServerConfig { } }; -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/StdioTransport.cpp b/src/shared/mcp/StdioTransport.cpp index 50cbe5d..fe810d0 100644 --- a/src/shared/mcp/StdioTransport.cpp +++ b/src/shared/mcp/StdioTransport.cpp @@ -8,7 +8,7 @@ #include #include -namespace aissia::mcp { +namespace celuna::mcp { StdioTransport::StdioTransport(const MCPServerConfig& config) : m_config(config) { m_logger = spdlog::get("MCP:" + config.name); @@ -423,4 +423,4 @@ std::string StdioTransport::readLine() { return line; } -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/mcp/StdioTransport.hpp b/src/shared/mcp/StdioTransport.hpp index d09c6ba..d069db1 100644 --- a/src/shared/mcp/StdioTransport.hpp +++ b/src/shared/mcp/StdioTransport.hpp @@ -18,7 +18,7 @@ #include #endif -namespace aissia::mcp { +namespace celuna::mcp { /** * @brief Stdio transport for MCP servers @@ -77,4 +77,4 @@ private: void handleMessage(const json& message); }; -} // namespace aissia::mcp +} // namespace celuna::mcp diff --git a/src/shared/platform/IWindowTracker.hpp b/src/shared/platform/IWindowTracker.hpp index a8a5d22..44a72cb 100644 --- a/src/shared/platform/IWindowTracker.hpp +++ b/src/shared/platform/IWindowTracker.hpp @@ -3,7 +3,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Interface for window tracking across platforms @@ -63,4 +63,4 @@ public: static std::unique_ptr create(); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/platform/Win32WindowTracker.hpp b/src/shared/platform/Win32WindowTracker.hpp index c58958c..b2b2aa0 100644 --- a/src/shared/platform/Win32WindowTracker.hpp +++ b/src/shared/platform/Win32WindowTracker.hpp @@ -7,7 +7,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Windows implementation of window tracking @@ -85,6 +85,6 @@ public: } }; -} // namespace aissia +} // namespace celuna #endif // _WIN32 diff --git a/src/shared/platform/WindowTrackerFactory.cpp b/src/shared/platform/WindowTrackerFactory.cpp index 5a7a381..3b80b64 100644 --- a/src/shared/platform/WindowTrackerFactory.cpp +++ b/src/shared/platform/WindowTrackerFactory.cpp @@ -8,7 +8,7 @@ #include "X11WindowTracker.hpp" #endif -namespace aissia { +namespace celuna { // Stub implementation for unsupported platforms class StubWindowTracker : public IWindowTracker { @@ -45,4 +45,4 @@ std::unique_ptr WindowTrackerFactory::create() { return std::make_unique(); } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/platform/X11WindowTracker.hpp b/src/shared/platform/X11WindowTracker.hpp index 8da0beb..fd6222a 100644 --- a/src/shared/platform/X11WindowTracker.hpp +++ b/src/shared/platform/X11WindowTracker.hpp @@ -10,7 +10,7 @@ #include #include -namespace aissia { +namespace celuna { /** * @brief Linux X11 implementation of window tracking @@ -119,6 +119,6 @@ private: } }; -} // namespace aissia +} // namespace celuna #endif // __linux__ diff --git a/src/shared/testing/ITestModule.h b/src/shared/testing/ITestModule.h index 919cc1c..469f72f 100644 --- a/src/shared/testing/ITestModule.h +++ b/src/shared/testing/ITestModule.h @@ -4,7 +4,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Result of a test execution @@ -45,4 +45,4 @@ public: virtual std::string getDescription() const = 0; }; -} // namespace aissia::testing +} // namespace celuna::testing diff --git a/src/shared/tools/FileSystemTools.cpp b/src/shared/tools/FileSystemTools.cpp index 26c36f2..c9acb69 100644 --- a/src/shared/tools/FileSystemTools.cpp +++ b/src/shared/tools/FileSystemTools.cpp @@ -8,7 +8,7 @@ namespace fs = std::filesystem; -namespace aissia::tools { +namespace celuna::tools { // Static configuration defaults std::vector FileSystemTools::s_allowedPaths = {}; @@ -592,4 +592,4 @@ json FileSystemTools::makeSuccess(const json& content) { return result; } -} // namespace aissia::tools +} // namespace celuna::tools diff --git a/src/shared/tools/FileSystemTools.hpp b/src/shared/tools/FileSystemTools.hpp index ca96610..7f1cf62 100644 --- a/src/shared/tools/FileSystemTools.hpp +++ b/src/shared/tools/FileSystemTools.hpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::tools { +namespace celuna::tools { using json = nlohmann::json; @@ -71,4 +71,4 @@ private: static size_t s_maxWriteSize; }; -} // namespace aissia::tools +} // namespace celuna::tools diff --git a/src/shared/tools/IOBridge.hpp b/src/shared/tools/IOBridge.hpp index b7a3737..c0dc6e5 100644 --- a/src/shared/tools/IOBridge.hpp +++ b/src/shared/tools/IOBridge.hpp @@ -13,7 +13,7 @@ #include #include -namespace aissia { +namespace celuna { using json = nlohmann::json; @@ -184,4 +184,4 @@ private: } }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/tools/InternalTools.cpp b/src/shared/tools/InternalTools.cpp index b58deb5..4f34487 100644 --- a/src/shared/tools/InternalTools.cpp +++ b/src/shared/tools/InternalTools.cpp @@ -1,7 +1,7 @@ #include "InternalTools.hpp" #include -namespace aissia { +namespace celuna { InternalTools::InternalTools(grove::IIO* io) : m_io(io) { m_logger = spdlog::get("InternalTools"); @@ -409,4 +409,4 @@ json InternalTools::speak(const json& input) { }; } -} // namespace aissia +} // namespace celuna diff --git a/src/shared/tools/InternalTools.hpp b/src/shared/tools/InternalTools.hpp index 647c1c2..fc6047f 100644 --- a/src/shared/tools/InternalTools.hpp +++ b/src/shared/tools/InternalTools.hpp @@ -10,7 +10,7 @@ #include #include -namespace aissia { +namespace celuna { using json = nlohmann::json; @@ -67,4 +67,4 @@ private: void registerTools(); }; -} // namespace aissia +} // namespace celuna diff --git a/src/shared/tools/MCPServerTools.cpp b/src/shared/tools/MCPServerTools.cpp index cf6e441..da7a940 100644 --- a/src/shared/tools/MCPServerTools.cpp +++ b/src/shared/tools/MCPServerTools.cpp @@ -5,7 +5,7 @@ #include -namespace aissia::tools { +namespace celuna::tools { MCPServerTools::MCPServerTools( LLMService* llm, @@ -20,17 +20,17 @@ MCPServerTools::MCPServerTools( std::vector MCPServerTools::getToolDefinitions() { std::vector tools; - // Tool 1: chat_with_aissia (PRIORITÉ) + // Tool 1: chat_with_celuna (PRIORITÉ) if (m_llmService) { tools.push_back({ - "chat_with_aissia", - "Dialogue with AISSIA assistant (Claude Sonnet 4). Send a message and get an intelligent response with access to AISSIA's knowledge and capabilities.", + "chat_with_celuna", + "Dialogue with Celuna AI assistant (Claude Sonnet 4). Send a message and get an intelligent response with access to Celuna's knowledge and capabilities.", { {"type", "object"}, {"properties", { {"message", { {"type", "string"}, - {"description", "Message to send to AISSIA"} + {"description", "Message to send to Celuna"} }}, {"conversation_id", { {"type", "string"}, @@ -43,7 +43,7 @@ std::vector MCPServerTools::getToolDefinitions() { }}, {"required", json::array({"message"})} }, - [this](const json& input) { return handleChatWithAissia(input); } + [this](const json& input) { return handleChatWithCeluna(input); } }); } @@ -148,8 +148,8 @@ std::vector MCPServerTools::getToolDefinitions() { } json MCPServerTools::execute(const std::string& toolName, const json& input) { - if (toolName == "chat_with_aissia") { - return handleChatWithAissia(input); + if (toolName == "chat_with_celuna") { + return handleChatWithCeluna(input); } else if (toolName == "transcribe_audio") { return handleTranscribeAudio(input); } else if (toolName == "text_to_speech") { @@ -169,7 +169,7 @@ json MCPServerTools::execute(const std::string& toolName, const json& input) { // Tool Handlers // ============================================================================ -json MCPServerTools::handleChatWithAissia(const json& input) { +json MCPServerTools::handleChatWithCeluna(const json& input) { if (!m_llmService) { return {{"error", "LLMService not available"}}; } @@ -179,7 +179,7 @@ json MCPServerTools::handleChatWithAissia(const json& input) { std::string conversationId = input.value("conversation_id", ""); std::string systemPrompt = input.value("system_prompt", ""); - spdlog::info("[chat_with_aissia] Message: {}", message.substr(0, 100)); + spdlog::info("[chat_with_celuna] Message: {}", message.substr(0, 100)); // Call synchronous LLM method auto response = m_llmService->sendMessageSync(message, conversationId, systemPrompt); @@ -191,7 +191,7 @@ json MCPServerTools::handleChatWithAissia(const json& input) { {"iterations", response.iterations} }; } catch (const std::exception& e) { - spdlog::error("[chat_with_aissia] Error: {}", e.what()); + spdlog::error("[chat_with_celuna] Error: {}", e.what()); return {{"error", e.what()}}; } } @@ -307,4 +307,4 @@ json MCPServerTools::handleSearchMemories(const json& input) { } } -} // namespace aissia::tools +} // namespace celuna::tools diff --git a/src/shared/tools/MCPServerTools.hpp b/src/shared/tools/MCPServerTools.hpp index 13bd296..c222868 100644 --- a/src/shared/tools/MCPServerTools.hpp +++ b/src/shared/tools/MCPServerTools.hpp @@ -6,21 +6,21 @@ #include // Forward declarations -namespace aissia { +namespace celuna { class LLMService; class StorageService; class VoiceService; } -namespace aissia::tools { +namespace celuna::tools { using json = nlohmann::json; /** - * @brief MCP Server Tools - Bridge between MCP Server and AISSIA services + * @brief MCP Server Tools - Bridge between MCP Server and Celuna services * - * Provides tool definitions for AISSIA modules exposed via MCP Server: - * - chat_with_aissia: Dialogue with AISSIA (Claude Sonnet 4) + * Provides tool definitions for Celuna modules exposed via MCP Server: + * - chat_with_celuna: Dialogue with Celuna (Claude Sonnet 4) * - transcribe_audio: Speech-to-text (Whisper.cpp/OpenAI/Google) * - text_to_speech: Text-to-speech synthesis * - save_memory: Save note/memory to storage @@ -33,7 +33,7 @@ public: /** * @brief Construct MCP server tools with service dependencies * - * @param llm LLMService for chat_with_aissia (can be nullptr) + * @param llm LLMService for chat_with_celuna (can be nullptr) * @param storage StorageService for save/search memories (can be nullptr) * @param voice VoiceService for TTS/STT (can be nullptr) */ @@ -61,7 +61,7 @@ public: private: // Tool handlers - json handleChatWithAissia(const json& input); + json handleChatWithCeluna(const json& input); json handleTranscribeAudio(const json& input); json handleTextToSpeech(const json& input); json handleSaveMemory(const json& input); @@ -73,4 +73,4 @@ private: VoiceService* m_voiceService; }; -} // namespace aissia::tools +} // namespace celuna::tools diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e7ac0de..f38f297 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================ -# AISSIA Integration Tests +# Celuna Integration Tests # ============================================================================ # Fetch Catch2 @@ -47,7 +47,7 @@ add_executable(aissia_tests target_link_libraries(aissia_tests PRIVATE Catch2::Catch2WithMain GroveEngine::impl - AissiaTools + CelunaTools spdlog::spdlog ) @@ -65,7 +65,7 @@ if(OPENSSL_FOUND) endif() # Disable module factory functions during testing -target_compile_definitions(aissia_tests PRIVATE AISSIA_TEST_BUILD) +target_compile_definitions(aissia_tests PRIVATE CELUNA_TEST_BUILD) target_include_directories(aissia_tests PRIVATE ${CMAKE_SOURCE_DIR}/src diff --git a/tests/integration/IT_001_GetCurrentTime.cpp b/tests/integration/IT_001_GetCurrentTime.cpp index be75ca1..4c7d5a5 100644 --- a/tests/integration/IT_001_GetCurrentTime.cpp +++ b/tests/integration/IT_001_GetCurrentTime.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test MCP tool get_current_time via AIModule @@ -162,12 +162,12 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_001_GetCurrentTime(); + return new celuna::testing::IT_001_GetCurrentTime(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_002_FileSystemWrite.cpp b/tests/integration/IT_002_FileSystemWrite.cpp index 3f1587d..e4b020c 100644 --- a/tests/integration/IT_002_FileSystemWrite.cpp +++ b/tests/integration/IT_002_FileSystemWrite.cpp @@ -9,7 +9,7 @@ namespace fs = std::filesystem; -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test MCP tool filesystem_write via AIModule @@ -185,11 +185,11 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_002_FileSystemWrite(); + return new celuna::testing::IT_002_FileSystemWrite(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_003_FileSystemRead.cpp b/tests/integration/IT_003_FileSystemRead.cpp index ef54924..92d6c63 100644 --- a/tests/integration/IT_003_FileSystemRead.cpp +++ b/tests/integration/IT_003_FileSystemRead.cpp @@ -9,7 +9,7 @@ namespace fs = std::filesystem; -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test MCP tool filesystem_read via AIModule @@ -175,11 +175,11 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_003_FileSystemRead(); + return new celuna::testing::IT_003_FileSystemRead(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_004_MCPToolsList.cpp b/tests/integration/IT_004_MCPToolsList.cpp index 3de1d86..d8c7334 100644 --- a/tests/integration/IT_004_MCPToolsList.cpp +++ b/tests/integration/IT_004_MCPToolsList.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test MCP tools inventory @@ -176,11 +176,11 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_004_MCPToolsList(); + return new celuna::testing::IT_004_MCPToolsList(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_005_VoiceToAI.cpp b/tests/integration/IT_005_VoiceToAI.cpp index 44e876a..e21a645 100644 --- a/tests/integration/IT_005_VoiceToAI.cpp +++ b/tests/integration/IT_005_VoiceToAI.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test Voice → AI communication flow @@ -141,11 +141,11 @@ private: int m_timeout = 10000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_005_VoiceToAI(); + return new celuna::testing::IT_005_VoiceToAI(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_006_AIToLLM.cpp b/tests/integration/IT_006_AIToLLM.cpp index 795adce..bf441db 100644 --- a/tests/integration/IT_006_AIToLLM.cpp +++ b/tests/integration/IT_006_AIToLLM.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test AI → LLM flow with real Claude API @@ -170,11 +170,11 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_006_AIToLLM(); + return new celuna::testing::IT_006_AIToLLM(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_007_StorageWrite.cpp b/tests/integration/IT_007_StorageWrite.cpp index 7f3361f..35e16b2 100644 --- a/tests/integration/IT_007_StorageWrite.cpp +++ b/tests/integration/IT_007_StorageWrite.cpp @@ -9,7 +9,7 @@ namespace fs = std::filesystem; -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test Storage write via AI tool @@ -183,11 +183,11 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_007_StorageWrite(); + return new celuna::testing::IT_007_StorageWrite(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_008_StorageRead.cpp b/tests/integration/IT_008_StorageRead.cpp index ee38051..237c6d9 100644 --- a/tests/integration/IT_008_StorageRead.cpp +++ b/tests/integration/IT_008_StorageRead.cpp @@ -9,7 +9,7 @@ namespace fs = std::filesystem; -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test Storage read via AI tool @@ -173,11 +173,11 @@ private: int m_timeout = 30000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_008_StorageRead(); + return new celuna::testing::IT_008_StorageRead(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_009_FullConversationLoop.cpp b/tests/integration/IT_009_FullConversationLoop.cpp index 4b216d0..039907e 100644 --- a/tests/integration/IT_009_FullConversationLoop.cpp +++ b/tests/integration/IT_009_FullConversationLoop.cpp @@ -9,7 +9,7 @@ namespace fs = std::filesystem; -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test complet de la boucle conversationnelle end-to-end @@ -284,11 +284,11 @@ private: int m_timeout = 60000; }; -} // namespace aissia::testing +} // namespace celuna::testing extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_009_FullConversationLoop(); + return new celuna::testing::IT_009_FullConversationLoop(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_010_SchedulerHyperfocus.cpp b/tests/integration/IT_010_SchedulerHyperfocus.cpp index 95b9548..647d5d7 100644 --- a/tests/integration/IT_010_SchedulerHyperfocus.cpp +++ b/tests/integration/IT_010_SchedulerHyperfocus.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test SchedulerModule hyperfocus detection @@ -160,12 +160,12 @@ private: int m_timeout = 5000; }; -} // namespace aissia::testing +} // namespace celuna::testing // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_010_SchedulerHyperfocus(); + return new celuna::testing::IT_010_SchedulerHyperfocus(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_011_NotificationAlert.cpp b/tests/integration/IT_011_NotificationAlert.cpp index 03ba48d..9688641 100644 --- a/tests/integration/IT_011_NotificationAlert.cpp +++ b/tests/integration/IT_011_NotificationAlert.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test NotificationModule alert processing @@ -131,12 +131,12 @@ private: int m_timeout = 2000; }; -} // namespace aissia::testing +} // namespace celuna::testing // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_011_NotificationAlert(); + return new celuna::testing::IT_011_NotificationAlert(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_012_MonitoringActivity.cpp b/tests/integration/IT_012_MonitoringActivity.cpp index 9b45560..1fd2d52 100644 --- a/tests/integration/IT_012_MonitoringActivity.cpp +++ b/tests/integration/IT_012_MonitoringActivity.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test MonitoringModule activity classification @@ -163,12 +163,12 @@ private: int m_timeout = 3000; }; -} // namespace aissia::testing +} // namespace celuna::testing // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_012_MonitoringActivity(); + return new celuna::testing::IT_012_MonitoringActivity(); } void destroyModule(grove::IModule* module) { diff --git a/tests/integration/IT_013_WebRequest.cpp b/tests/integration/IT_013_WebRequest.cpp index f0efee0..572aa4a 100644 --- a/tests/integration/IT_013_WebRequest.cpp +++ b/tests/integration/IT_013_WebRequest.cpp @@ -5,7 +5,7 @@ #include #include -namespace aissia::testing { +namespace celuna::testing { /** * @brief Test WebModule HTTP request @@ -177,12 +177,12 @@ private: int m_timeout = 10000; }; -} // namespace aissia::testing +} // namespace celuna::testing // Factory functions extern "C" { grove::IModule* createModule() { - return new aissia::testing::IT_013_WebRequest(); + return new celuna::testing::IT_013_WebRequest(); } void destroyModule(grove::IModule* module) { diff --git a/tests/manual/test_stt_engines.cpp b/tests/manual/test_stt_engines.cpp index f68cc02..3abe570 100644 --- a/tests/manual/test_stt_engines.cpp +++ b/tests/manual/test_stt_engines.cpp @@ -18,7 +18,7 @@ #include #include -using namespace aissia; +using namespace celuna; struct TestResult { std::string engineName; diff --git a/tests/mcp/MCPClientTests.cpp b/tests/mcp/MCPClientTests.cpp index c567389..90693e3 100644 --- a/tests/mcp/MCPClientTests.cpp +++ b/tests/mcp/MCPClientTests.cpp @@ -10,8 +10,8 @@ #include #include -using namespace aissia::mcp; -using namespace aissia::tests; +using namespace celuna::mcp; +using namespace celuna::tests; using json = nlohmann::json; // ============================================================================ diff --git a/tests/mcp/MCPTypesTests.cpp b/tests/mcp/MCPTypesTests.cpp index 227b3f4..6469e08 100644 --- a/tests/mcp/MCPTypesTests.cpp +++ b/tests/mcp/MCPTypesTests.cpp @@ -6,7 +6,7 @@ #include #include "shared/mcp/MCPTypes.hpp" -using namespace aissia::mcp; +using namespace celuna::mcp; using json = nlohmann::json; // ============================================================================ diff --git a/tests/mcp/StdioTransportTests.cpp b/tests/mcp/StdioTransportTests.cpp index 107d755..7784093 100644 --- a/tests/mcp/StdioTransportTests.cpp +++ b/tests/mcp/StdioTransportTests.cpp @@ -10,7 +10,7 @@ #include #include -using namespace aissia::mcp; +using namespace celuna::mcp; using json = nlohmann::json; // ============================================================================ diff --git a/tests/mocks/MockIO.cpp b/tests/mocks/MockIO.cpp index 85b63a1..823a89e 100644 --- a/tests/mocks/MockIO.cpp +++ b/tests/mocks/MockIO.cpp @@ -1,6 +1,6 @@ #include "MockIO.hpp" -namespace aissia::tests { +namespace celuna::tests { void MockIO::publish(const std::string& topic, std::unique_ptr data) { // Convert IDataNode to JSON for easy verification @@ -85,4 +85,4 @@ void MockIO::clearPublished() { m_publishedMessages.clear(); } -} // namespace aissia::tests +} // namespace celuna::tests diff --git a/tests/mocks/MockIO.hpp b/tests/mocks/MockIO.hpp index d0967e7..ddd4253 100644 --- a/tests/mocks/MockIO.hpp +++ b/tests/mocks/MockIO.hpp @@ -10,7 +10,7 @@ #include #include -namespace aissia::tests { +namespace celuna::tests { using json = nlohmann::json; @@ -126,4 +126,4 @@ public: std::vector m_subscriptions; }; -} // namespace aissia::tests +} // namespace celuna::tests diff --git a/tests/mocks/MockTransport.hpp b/tests/mocks/MockTransport.hpp index be0b500..ad865c1 100644 --- a/tests/mocks/MockTransport.hpp +++ b/tests/mocks/MockTransport.hpp @@ -7,9 +7,9 @@ #include #include -namespace aissia::tests { +namespace celuna::tests { -using namespace aissia::mcp; +using namespace celuna::mcp; /** * @brief Mock implementation of IMCPTransport for testing MCPClient @@ -189,4 +189,4 @@ public: std::function m_requestHandler; }; -} // namespace aissia::tests +} // namespace celuna::tests diff --git a/tests/modules/AIModuleTests.cpp b/tests/modules/AIModuleTests.cpp index 3108116..899db8d 100644 --- a/tests/modules/AIModuleTests.cpp +++ b/tests/modules/AIModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/AIModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/modules/MonitoringModuleTests.cpp b/tests/modules/MonitoringModuleTests.cpp index fa0c607..7c784e9 100644 --- a/tests/modules/MonitoringModuleTests.cpp +++ b/tests/modules/MonitoringModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/MonitoringModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/modules/NotificationModuleTests.cpp b/tests/modules/NotificationModuleTests.cpp index e596d99..dd78c63 100644 --- a/tests/modules/NotificationModuleTests.cpp +++ b/tests/modules/NotificationModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/NotificationModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/modules/SchedulerModuleTests.cpp b/tests/modules/SchedulerModuleTests.cpp index af216fc..f9af5f3 100644 --- a/tests/modules/SchedulerModuleTests.cpp +++ b/tests/modules/SchedulerModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/SchedulerModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/modules/StorageModuleTests.cpp b/tests/modules/StorageModuleTests.cpp index b2f0289..f6a3ef5 100644 --- a/tests/modules/StorageModuleTests.cpp +++ b/tests/modules/StorageModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/StorageModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/modules/VoiceModuleTests.cpp b/tests/modules/VoiceModuleTests.cpp index 8a94211..e9218be 100644 --- a/tests/modules/VoiceModuleTests.cpp +++ b/tests/modules/VoiceModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/VoiceModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/modules/WebModuleTests.cpp b/tests/modules/WebModuleTests.cpp index 348a874..a20d0b2 100644 --- a/tests/modules/WebModuleTests.cpp +++ b/tests/modules/WebModuleTests.cpp @@ -11,8 +11,8 @@ #include "modules/WebModule.h" #include -using namespace aissia; -using namespace aissia::tests; +using namespace celuna; +using namespace celuna::tests; // ============================================================================ // Test Fixture diff --git a/tests/utils/TestHelpers.hpp b/tests/utils/TestHelpers.hpp index 3517d6e..47fdf2e 100644 --- a/tests/utils/TestHelpers.hpp +++ b/tests/utils/TestHelpers.hpp @@ -4,7 +4,7 @@ #include #include -namespace aissia::tests { +namespace celuna::tests { using json = nlohmann::json; @@ -79,4 +79,4 @@ constexpr const char* TAG_MCP_CLIENT = "[mcp][client]"; constexpr const char* TAG_INTEGRATION = "[integration]"; constexpr const char* TAG_UNIT = "[unit]"; -} // namespace aissia::tests +} // namespace celuna::tests diff --git a/tests/utils/TimeSimulator.hpp b/tests/utils/TimeSimulator.hpp index b6f2989..660aca9 100644 --- a/tests/utils/TimeSimulator.hpp +++ b/tests/utils/TimeSimulator.hpp @@ -4,7 +4,7 @@ #include #include -namespace aissia::tests { +namespace celuna::tests { using json = nlohmann::json; @@ -89,4 +89,4 @@ private: float m_gameTime = 0.0f; }; -} // namespace aissia::tests +} // namespace celuna::tests