# Document de Succession - Refactoring AISSIA

## Contexte

Refactoring du code AISSIA pour le rendre conforme aux principes GroveEngine (audit initial : 33% conforme, 2/6 modules).

## Ce qui a été fait

### 1. Architecture Services (nouveau)

Créé 4 services dans `src/services/` qui gèrent l'infrastructure :

| Service | Fichiers | Responsabilité |
|---------|----------|----------------|
| LLMService | `LLMService.hpp/.cpp` | HTTP vers Claude/OpenAI API |
| StorageService | `StorageService.hpp/.cpp` | SQLite persistence |
| PlatformService | `PlatformService.hpp/.cpp` | Win32 window tracking |
| VoiceService | `VoiceService.hpp/.cpp` | TTS/STT engines |

Interface commune : `IService.hpp`

### 2. Modules refactorisés (logique pure)

| Module | Avant | Après | Changements |
|--------|-------|-------|-------------|
| AIModule | 306 lignes, HTTP direct | ~170 lignes | Publie `llm:request`, écoute `llm:response` |
| StorageModule | 273 lignes, sqlite3 | ~130 lignes | Publie `storage:save_*` |
| MonitoringModule | 222 lignes, Win32 | ~190 lignes | Écoute `platform:window_*` |
| VoiceModule | 209 lignes, COM/TTS | ~155 lignes | Publie `voice:speak` |
| SchedulerModule | - | - | Topics corrigés (`:` au lieu de `/`) |
| NotificationModule | - | - | Déjà conforme |

### 3. main.cpp réécrit

- Initialise les 4 services avant les modules
- `MessageRouter` gère le routage IIO entre services et modules
- Services process() avant modules dans la boucle principale

### 4. CMakeLists.txt

- SQLite bundled dans `deps/sqlite/` (amalgamation)
- OpenSSL rendu optionnel
- Nouvelles targets : `AissiaServices`, `AissiaLLM`, `AissiaPlatform`, `AissiaAudio`

## État du build

### Problème actuel
```
CMake Error: Cannot determine link language for target "sqlite3"
```

### Fix appliqué (dans CMakeLists.txt)
```cmake
enable_language(C)  # SQLite is C code
add_library(sqlite3 STATIC
    ${CMAKE_CURRENT_SOURCE_DIR}/deps/sqlite/sqlite3.c
)
set_target_properties(sqlite3 PROPERTIES LINKER_LANGUAGE C)
```

### Pour terminer le build
```bash
cd C:\Users\alexi\Documents\projects\aissia
rm -rf build  # Clean start recommandé
cmake -G "MinGW Makefiles" -B build
cmake --build build -j4
```

## Fichiers créés/modifiés

### Nouveaux fichiers
- `src/services/IService.hpp`
- `src/services/LLMService.hpp` / `.cpp`
- `src/services/StorageService.hpp` / `.cpp`
- `src/services/PlatformService.hpp` / `.cpp`
- `src/services/VoiceService.hpp` / `.cpp`
- `deps/sqlite/sqlite3.c` (téléchargé)
- `deps/sqlite/sqlite3.h`

### Fichiers modifiés
- `src/main.cpp` - réécrit complètement
- `src/modules/AIModule.h` / `.cpp`
- `src/modules/StorageModule.h` / `.cpp`
- `src/modules/MonitoringModule.h` / `.cpp`
- `src/modules/VoiceModule.h` / `.cpp`
- `src/modules/SchedulerModule.h` / `.cpp`
- `CMakeLists.txt`
- `external/GroveEngine/CMakeLists.txt` (OpenSSL optionnel)

## Communication Inter-Modules (Topics)

Format : `module:event` (utiliser `:` pas `/`)

### LLM
- `llm:request` - Module -> Service
- `llm:response` - Service -> Module
- `llm:error` - Service -> Module

### Storage
- `storage:save_session` - Module -> Service
- `storage:save_app_usage` - Module -> Service
- `storage:session_saved` - Service -> Module
- `storage:ready` - Service -> Module

### Platform
- `platform:window_info` - Service -> Module
- `platform:window_changed` - Service -> Module
- `platform:idle_detected` - Service -> Module

### Voice
- `voice:speak` - Module -> Service
- `voice:speaking_started` - Service -> Module

### Scheduler (existant)
- `scheduler:hyperfocus_alert`
- `scheduler:break_reminder`
- `scheduler:focus_session_started`

## Prochaines étapes

1. Terminer le build (fix SQLite C language)
2. Tester compilation de tous les modules
3. Vérifier hot-reload fonctionne
4. Tests d'intégration services <-> modules
