# ProjectOrganizer - GroveEngine Module ## Vue d'ensemble Module GroveEngine C++ pour analyse, classification et organisation automatique de dossiers de projets avec génération de visualisations et rapports. ### Objectif Créer un module GroveEngine qui : - Analyse récursivement un dossier projet - Classifie et organise tous les documents - Détecte et mappe les relations entre fichiers - Génère des visualisations (graphes de dépendances) - Produit des outputs structurés (JSON, Markdown, HTML) --- ## Spécifications Techniques ### Intégration GroveEngine **Type** : IModule (DLL/SO hot-reloadable) **Communication** : Via IIO (IntraIO) **Architecture** : ``` Application ↓ GroveEngine (IEngine) ↓ ProjectOrganizerModule (IModule) ├─ Reçoit requêtes via IIO ├─ Analyse filesystem ├─ Classifie/organise ├─ Génère outputs └─ Retourne résultats via IIO ``` ### API IIO **Input messages** : ```json { "action": "analyze", "source_path": "/path/to/project", "output_path": "/path/to/results", "options": { "use_llm": false, "file_types": ["txt", "md", "pdf", "doc", "docx", "ppt", "pptx"], "max_depth": -1, "generate_graphs": true, "copy_source": true } } ``` **Output messages** : ```json { "status": "success", "output_path": "/path/to/results", "stats": { "files_processed": 142, "files_classified": 138, "relations_found": 67, "duration_ms": 1243 }, "summary": { "categories": { "documentation": 45, "code": 23, "config": 12, "data": 58 } } } ``` --- ## Fonctionnalités ### Phase 1 - MVP Sans LLM (Court terme) **Formats supportés** : `.txt`, `.md` **Capacités** : - [x] Copie récursive du dossier source - [x] Scan tous fichiers txt/md - [x] Classification basique par : - Extension de fichier - Localisation (dossier parent) - Patterns dans nom fichier - [x] Détection relations : - Liens markdown `[text](file.md)` - Références explicites chemin fichier - Mentions de noms de fichiers - [x] Génération outputs : - JSON : Structure complète + métadonnées - Markdown : Rapport lisible + index - HTML : Visualisation interactive **Graphes générés** : - Graph de dépendances (qui référence qui) - Graph de catégories (regroupement thématique) - Graph de structure (arborescence dossiers) **Livrables** : ``` output/ ├── organized/ # Copie organisée du projet │ ├── documentation/ │ ├── code/ │ ├── config/ │ └── data/ ├── analysis/ │ ├── structure.json # Données brutes │ ├── relations.json # Graphe de relations │ ├── report.md # Rapport markdown │ └── index.html # Visualisation interactive └── graphs/ ├── dependencies.svg ├── categories.svg └── structure.svg ``` **Durée estimée** : 1-2 semaines ### Phase 2 - Formats Avancés (Moyen terme) **Nouveaux formats** : `.pdf` (OCR), `.doc`, `.docx`, `.ppt`, `.pptx` **Capacités additionnelles** : - [x] Extraction texte PDF avec OCR (Tesseract/PaddleOCR) - [x] Parsing Office documents (LibreOffice SDK / Apache POI via JNI) - [x] Détection langage automatique - [x] Extraction métadonnées (auteur, date, tags) **Durée estimée** : 2-3 semaines ### Phase 3 - Analyse LLM (Long terme) **Intégration LLM** : Via IIO vers module LLM externe **Capacités LLM** : - Classification sémantique profonde - Détection relations implicites - Extraction concepts clés - Génération résumés - Suggestions réorganisation **Architecture** : ``` ProjectOrganizerModule ↓ (IIO message) LLMModule (Claude/GPT via API) ↓ (response) ProjectOrganizerModule ``` **Durée estimée** : 3-4 semaines ### Phase 4 - Analyse Code (Très long terme) **Langages supportés** : C++, Python, JavaScript, Java, etc. **Capacités** : - Parsing AST (Abstract Syntax Tree) - Détection dépendances imports - Call graph génération - Détection fonctions inutilisées - Analyse complexité **Outils** : - Clang LibTooling (C++) - Tree-sitter (multi-langage) - LSP integration possible **Note** : Pas prioritaire, code n'est pas la target principale **Durée estimée** : 4-6 semaines --- ## Workflows Typiques ### Workflow 1 : Analyse Projet Existant ```cpp // 1. User lance via IIO io->send("ProjectOrganizer", { "action": "analyze", "source_path": "E:/Projets/MyProject", "output_path": "E:/Projets/MyProject_Analysis" }); // 2. Module process // - Copie récursive // - Scan fichiers // - Classification // - Détection relations // - Génération outputs // 3. Module répond io->receive([](const Message& msg) { if (msg.status == "success") { // Ouvrir index.html system("start E:/Projets/MyProject_Analysis/analysis/index.html"); } }); ``` ### Workflow 2 : Watch Mode (Future) ```cpp // Mode surveillance continue io->send("ProjectOrganizer", { "action": "watch", "source_path": "E:/Projets/MyProject", "update_interval_ms": 5000 }); // Module update analysis automatiquement toutes les 5s ``` --- ## Architecture Interne Module ### Classes Principales ```cpp // Module principal class ProjectOrganizerModule : public IModule { public: void initialize(const IDataNode& config, IIO* io) override; void update(float deltaTime) override; void shutdown() override; private: FileScanner scanner_; Classifier classifier_; RelationDetector relationDetector_; OutputGenerator outputGenerator_; }; // Scanner filesystem class FileScanner { public: std::vector scanRecursive(const std::string& path); }; // Classification fichiers class Classifier { public: Category classify(const FileInfo& file); }; // Détection relations class RelationDetector { public: std::vector detect(const std::vector& files); }; // Génération outputs class OutputGenerator { public: void generateJSON(const Analysis& analysis, const std::string& path); void generateMarkdown(const Analysis& analysis, const std::string& path); void generateHTML(const Analysis& analysis, const std::string& path); void generateGraphs(const Analysis& analysis, const std::string& path); }; ``` ### Structures de Données ```cpp struct FileInfo { std::string path; std::string name; std::string extension; size_t size; time_t modified; Category category; std::string content; // Si text-based }; enum class Category { Documentation, Code, Config, Data, Media, Archive, Unknown }; struct Relation { std::string from; // Fichier source std::string to; // Fichier cible RelationType type; // Link, Import, Reference std::string context; // Ligne où trouvé }; struct Analysis { std::vector files; std::vector relations; std::map stats; std::chrono::milliseconds duration; }; ``` --- ## Dépendances ### Requises (Phase 1) - **C++17** : Filesystem API (``) - **nlohmann_json** : Génération JSON (déjà dans GroveEngine) - **Graphviz** : Génération graphes SVG (external process call) ### Optionnelles (Phases 2+) - **Tesseract/PaddleOCR** : OCR pour PDFs - **LibreOffice SDK** : Parsing Office documents - **Tree-sitter** : Parsing code (Phase 4) ### Note Toutes les dépendances lourdes (LLM, OCR) via IIO vers modules externes, pas intégrées directement. --- ## Génération Visualisations ### Format Graphviz DOT **Example dependencies graph** : ```dot digraph dependencies { rankdir=LR; node [shape=box]; "README.md" -> "docs/architecture.md"; "README.md" -> "docs/setup.md"; "src/main.cpp" -> "include/engine.h"; "include/engine.h" -> "include/module.h"; } ``` **Génération** : ```cpp void OutputGenerator::generateGraphs(const Analysis& analysis, const std::string& path) { // 1. Créer fichier DOT std::ofstream dot(path + "/dependencies.dot"); dot << "digraph dependencies {\n"; for (const auto& rel : analysis.relations) { dot << " \"" << rel.from << "\" -> \"" << rel.to << "\";\n"; } dot << "}\n"; dot.close(); // 2. Appeler Graphviz system("dot -Tsvg dependencies.dot -o dependencies.svg"); } ``` ### Format HTML Interactif **Technologies** : - **vis.js** : Graphes interactifs - **D3.js** : Alternative visualisations - **Bootstrap** : UI propre **Features** : - Zoom/pan sur graphe - Click fichier → Affiche infos - Filtres par catégorie - Search bar --- ## Performance ### Cibles - **Scan 1000 fichiers** : < 1s - **Classification** : < 100ms (sans LLM) - **Détection relations** : < 500ms - **Génération outputs** : < 2s ### Optimisations - Multi-threading scan filesystem - Cache résultats (inotify/FileSystemWatcher pour détecter changements) - Lazy loading contenu fichier (seulement si nécessaire) - Streaming génération HTML (pas tout en RAM) --- ## Configuration Module **Fichier config** : `config/project_organizer.json` ```json { "default_output_path": "~/.groveengine/project_analysis", "file_types": { "phase1": ["txt", "md"], "phase2": ["pdf", "doc", "docx", "ppt", "pptx"], "phase4": ["cpp", "h", "py", "js", "java"] }, "classification_rules": { "documentation": ["README", "docs/", ".md"], "code": ["src/", "include/", ".cpp", ".h"], "config": ["config/", ".json", ".yaml", ".toml"] }, "graph_engine": "graphviz", "max_file_size_mb": 10, "use_cache": true } ``` --- ## Tests ### Tests Unitaires ```cpp TEST(FileScanner, ScanRecursive) { FileScanner scanner; auto files = scanner.scanRecursive("test_data/sample_project"); EXPECT_GT(files.size(), 0); } TEST(Classifier, ClassifyMarkdown) { Classifier classifier; FileInfo file{"README.md", "README.md", "md", 1024, 0, Category::Unknown, ""}; EXPECT_EQ(classifier.classify(file), Category::Documentation); } TEST(RelationDetector, DetectMarkdownLinks) { RelationDetector detector; FileInfo file{"test.md", "test.md", "md", 0, 0, Category::Unknown, "See [other](other.md) for details"}; auto relations = detector.detect({file}); EXPECT_EQ(relations.size(), 1); EXPECT_EQ(relations[0].to, "other.md"); } ``` ### Tests Intégration - Test projet réel (couple_matters repo) - Validation outputs générés - Performance benchmarks --- ## Roadmap Développement ### Phase 1 - MVP (1-2 semaines) - [ ] Setup module GroveEngine boilerplate - [ ] FileScanner implementation - [ ] Classifier basique (extension + path) - [ ] RelationDetector markdown links - [ ] OutputGenerator JSON + MD - [ ] Tests unitaires basiques - [ ] Exemple fonctionnel ### Phase 2 - Formats Avancés (2-3 semaines) - [ ] Intégration OCR (PDF) - [ ] Parser Office docs - [ ] OutputGenerator HTML interactif - [ ] Graph generation (Graphviz) - [ ] Performance optimizations - [ ] Tests intégration ### Phase 3 - LLM (3-4 semaines) - [ ] IIO protocol vers LLM module - [ ] Classification sémantique - [ ] Détection relations implicites - [ ] Génération résumés - [ ] A/B testing LLM vs non-LLM ### Phase 4 - Code Analysis (4-6 semaines) - [ ] Tree-sitter integration - [ ] AST parsing multi-langage - [ ] Call graph generation - [ ] Unused code detection - [ ] Complexity metrics --- ## Problèmes Anticipés ### 1. Performance Gros Projets **Problème** : Projet 10,000+ fichiers = scan lent **Solutions** : - Multi-threading (std::async) - Filtrage intelligent (ignorer node_modules, .git) - Incremental analysis (cache + watch mode) ### 2. Encodings Fichiers **Problème** : Fichiers UTF-8, UTF-16, ISO-8859-1, etc. **Solutions** : - Auto-détection encoding (libiconv/ICU) - Fallback UTF-8 + ignore errors - Log fichiers non-parsables ### 3. Graphes Trop Complexes **Problème** : 1000+ nodes = illisible **Solutions** : - Clustering par catégorie - Zoom levels (overview → détail) - Filtres interactifs HTML ### 4. Faux Positifs Relations **Problème** : Détecte "test.md" dans commentaire comme lien **Solutions** : - Heuristiques strictes (markdown syntax only) - LLM validation (Phase 3) - Whitelist/blacklist user --- ## Exemples Utilisation ### Exemple 1 : Analyse couple_matters Repo **Input** : ```json { "action": "analyze", "source_path": "E:/Users/Alexis Trouvé/Documents/Projets/couple_matters", "output_path": "E:/couple_matters_analysis" } ``` **Output attendu** : - 200+ fichiers markdown classifiés - Relations détectées : - `CLAUDE.md` → `ToRemember/schema.md` - `personnalités/Tingting.md` → `personnalités/TingtingWork.md` - `Projects/Status_Projets.md` → tous les `Projects/*/projet.md` - Graphe catégories : - Couple (50%) - Projets (30%) - Planning (10%) - Autres (10%) ### Exemple 2 : Analyse Codebase C++ **Input** : ```json { "action": "analyze", "source_path": "E:/Projets/GroveEngine", "options": { "file_types": ["cpp", "h", "md"] } } ``` **Output attendu** : - Headers classifiés par module - Includes graph - Documentation liée au code --- ## Risques | Risque | Probabilité | Impact | Mitigation | |--------|-------------|--------|------------| | **Over-engineering** | Élevée | Moyen | MVP strict Phase 1, features après | | **Performance inacceptable gros projets** | Moyenne | Élevé | Benchmarks early, optimizations prioritaires | | **OCR/Office parsing complexe** | Moyenne | Moyen | Phase 2 optionnelle, focus txt/md d'abord | | **Graphviz dépendance externe** | Faible | Faible | Fallback text-based graph si absent | | **Scope creep vers IDE** | Élevée | Élevé | Focus analyse/organisation, pas édition | --- ## Statut Actuel ### Code - ❌ Aucun code écrit - ❌ Module pas créé dans GroveEngine ### Design - ✅ Spécifications complètes - ✅ API IIO définie - ✅ Architecture interne définie ### Tests - ❌ Aucun test ### Documentation - ✅ Ce fichier (fiche projet) - ⏳ Guide utilisateur à écrire --- ## Prochaines Étapes ### Immédiat 1. [ ] Créer `GroveEngine/modules/ProjectOrganizer/` folder structure 2. [ ] Setup CMake pour module 3. [ ] Créer squelette `ProjectOrganizerModule.cpp` 4. [ ] Implement FileScanner basique 5. [ ] Test scan sur petit projet ### Court terme 1. [ ] Classifier implementation 2. [ ] RelationDetector markdown 3. [ ] OutputGenerator JSON 4. [ ] Test sur couple_matters repo ### Moyen terme 1. [ ] OutputGenerator Markdown + HTML 2. [ ] Graphviz integration 3. [ ] Performance optimization 4. [ ] Documentation utilisateur --- ## Ressources ### Repos - **GroveEngine** : `E:/Projets/GroveEngine/` - **Module location** : `E:/Projets/GroveEngine/modules/ProjectOrganizer/` - **Test data** : `E:/Users/Alexis Trouvé/Documents/Projets/couple_matters/` ### Documentation - `GroveEngine/docs/architecture-modulaire.md` : Système IModule - `GroveEngine/docs/CLAUDE-HOT-RELOAD-GUIDE.md` : Hot-reload workflow ### External Tools - **Graphviz** : https://graphviz.org/ - **vis.js** : https://visjs.org/ - **PaddleOCR** : https://github.com/PaddlePaddle/PaddleOCR (Phase 2) --- *Créé : 28 novembre 2025* *Statut : CONCEPT → WIP (Phase 1)* *Stack : C++17, GroveEngine IModule, nlohmann_json, Graphviz* *Target : Analyse/organisation projets documentation-heavy*