# Activity Tracker MVP ![Version](https://img.shields.io/badge/version-0.1.0-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Rust](https://img.shields.io/badge/rust-1.70+-orange) ![Platform](https://img.shields.io/badge/platform-Windows-blue) **Activity Tracker** est un système de suivi d'activité **Windows uniquement** conçu pour aider les utilisateurs à reconstruire leur historique de travail via une analyse automatisée des actions numériques. ## Caractéristiques (MVP) - **Capture passive** : Screenshots toutes les 5 minutes + métadonnées fenêtres Windows - **API Windows native** : Utilise GetForegroundWindow et les APIs Win32 - **Stockage sécurisé** : Base SQLite avec chiffrement AES-256-GCM - **Analyse intelligente** : Classification automatique en 5 catégories - **Rapports journaliers** : Export JSON avec statistiques détaillées - **Privacy-first** : Toutes les données sont chiffrées localement ## Installation ### Prérequis - **Windows 10 ou supérieur** (requis) - Rust 1.70+ et Cargo (installer via [rustup](https://rustup.rs/)) - SQLite3 (inclus automatiquement via Cargo) ### Compilation ```powershell git clone https://gitea.legion-muyue.fr/Muyue/activity-tracker.git cd activity-tracker cargo build --release ``` Le binaire compilé sera disponible dans `target\release\activity-tracker.exe`. ### Installation système ```powershell # Ajoutez le répertoire à votre PATH ou copiez le binaire copy target\release\activity-tracker.exe C:\Program Files\ActivityTracker\ # Ou utilisez directement depuis le dossier target\release ``` ## Utilisation ### 1. Démarrer la capture d'activité ```bash # Lancer avec mot de passe pour chiffrement activity-tracker start --password "votre_mot_de_passe_sécurisé" # Avec intervalle personnalisé (en secondes, défaut: 300 = 5 min) activity-tracker start --password "..." --interval 600 ``` **Note** : Le processus s'exécute en boucle jusqu'à interruption (Ctrl+C). ### 2. Générer un rapport ```bash # Rapport du jour (par défaut) activity-tracker report --password "..." --output rapport_aujourdhui.json # Rapport des 7 derniers jours activity-tracker report --password "..." --days 7 --output rapport_semaine.json ``` ### 3. Consulter les statistiques ```bash activity-tracker stats --password "..." ``` Affiche : - Nombre total de captures - Taille de la base de données - Répartition par catégorie - Date de la première/dernière capture ### 4. Nettoyer les anciennes données ```bash # Supprimer les données de plus de 30 jours (par défaut) activity-tracker cleanup --password "..." --days 30 ``` ### 5. Exporter toutes les données ```bash # Export complet (365 derniers jours) activity-tracker export --password "..." --output backup.json ``` ## Sécurité ### Chiffrement - **Algorithme** : AES-256-GCM (authentification + chiffrement) - **Dérivation de clé** : PBKDF2-HMAC-SHA512 (100 000 itérations) - **Salt** : Généré aléatoirement pour chaque session - **Nonce** : 12 bytes GCM (généré aléatoirement par capture) ### Bonnes pratiques 1. **Mot de passe fort** : Minimum 16 caractères, mélange de lettres/chiffres/symboles 2. **Ne pas stocker le mot de passe** : Saisie manuelle à chaque commande 3. **Sauvegarde sécurisée** : Chiffrez les exports JSON avant de les stocker ailleurs ## Format de rapport (JSON) ```json { "metadata": { "version": "1.0.0", "user_id": "default_user", "period": { "start": "2025-10-16T00:00:00Z", "end": "2025-10-17T00:00:00Z" } }, "activities": [ { "id": "capture_1697456789000", "start": "2025-10-16T09:00:00Z", "end": "2025-10-16T09:05:00Z", "category": "Development", "entities": { "project": "activity-tracker", "tools": ["vscode"], "languages": ["Rust"] }, "confidence": 0.92 } ], "stats": { "total_time_formatted": "8h 30m", "activity_count": 102, "by_category": { "Development": { "time_formatted": "4h 30m", "percentage": 52.9 }, "Meeting": { ... }, ... } } } ``` ## Catégories d'activités Le MVP classifie automatiquement les activités en 5 catégories : | Catégorie | Exemples d'applications | |-----------|------------------------| | **Development** | VSCode, IntelliJ, Terminal, GitHub | | **Meeting** | Zoom, Teams, Google Meet, Slack Call | | **Research** | Chrome, Firefox, StackOverflow, Documentation | | **Design** | Figma, Sketch, Photoshop, Illustrator | | **Other** | Toute autre activité non classifiée | ## Configuration Créez un fichier `config/settings.toml` : ```toml [capture] interval_seconds = 300 # 5 minutes screenshot_quality = 80 # Qualité WebP (0-100) inactivity_threshold = 600 # 10 minutes [storage] max_storage_mb = 500 retention_days = 30 db_path = "data\\activity_tracker.db" [ai] categories = ["Development", "Meeting", "Research", "Design", "Other"] batch_size = 10 confidence_threshold = 0.7 [security] salt_length = 16 pbkdf2_iterations = 100000 encryption_algorithm = "AES-256-GCM" ``` Puis lancez : ```bash activity-tracker start --password "..." --config config/settings.toml ``` ## Tests ```bash # Tests unitaires cargo test # Tests avec couverture cargo test --coverage # Tests d'intégration cargo test --test integration_tests ``` ## Structure du projet ``` activity-tracker/ ├── src/ │ ├── capture/ # Module de capture (screenshots + métadonnées) │ │ ├── mod.rs │ │ ├── screenshot.rs │ │ ├── window.rs │ │ └── activity.rs │ ├── storage/ # Module de stockage (SQLite + chiffrement) │ │ ├── mod.rs │ │ ├── database.rs │ │ ├── encryption.rs │ │ └── schema.rs │ ├── analysis/ # Module d'analyse IA │ │ ├── mod.rs │ │ ├── classifier.rs │ │ └── entities.rs │ ├── report/ # Module de génération de rapports │ │ ├── mod.rs │ │ ├── generator.rs │ │ ├── timeline.rs │ │ └── export.rs │ ├── config.rs # Configuration │ ├── error.rs # Gestion des erreurs │ ├── lib.rs # Bibliothèque principale │ └── main.rs # Point d'entrée CLI ├── config/ # Fichiers de configuration ├── data/ # Base de données locale ├── tests/ # Tests d'intégration ├── Cargo.toml # Dépendances Rust └── README.md ``` ## Développement ### Ajouter une nouvelle catégorie Modifiez `src/analysis/mod.rs` : ```rust pub enum ActivityCategory { Development, Meeting, Research, Design, Communication, // Nouvelle catégorie Other, } ``` Puis ajoutez les patterns dans `src/analysis/classifier.rs`. ### Améliorer la classification Les patterns sont définis dans `classifier.rs`. Ajoutez vos propres règles : ```rust Pattern::new(vec!["slack", "discord", "telegram"], 0.9), ``` ## Roadmap Post-MVP - [ ] **Keylogging optionnel** (avec consentement explicite RGPD) - [ ] **Synchronisation cloud** chiffrée E2E - [ ] **Plugins sécurisés** (sandbox WASM) - [ ] **Intégration Mistral 7B** pour analyse avancée - [ ] **Interface Electron** pour visualisation - [ ] **Détection audio** de réunions - [ ] **Intégrations** (Trello, Jira, calendriers) ## Plateforme supportée - **Windows uniquement** : Fonctionne avec Windows 10 et supérieur - Utilise les APIs Windows natives pour la capture de fenêtres - Aucune autorisation spéciale requise (privilèges standards suffisants) - Les plateformes Linux et macOS ne sont **pas supportées** ## Contribution Les contributions sont les bienvenues ! Consultez [CONTRIBUTING.md](CONTRIBUTING.md) pour les guidelines. ## Licence MIT License - voir [LICENSE](LICENSE) pour plus de détails. ## Auteurs **Activity Tracker Team** - [Gitea](https://gitea.legion-muyue.fr/Muyue/activity-tracker) ## Remerciements - Design inspiré du document `design-journal.md` - Chiffrement via [RustCrypto](https://github.com/RustCrypto) - Screenshots via [xcap](https://github.com/nashaofu/xcap) --- **Note** : Ce projet est un MVP (Minimum Viable Product). Les fonctionnalités avancées (IA complète, plugins, sync cloud) sont prévues pour les versions futures.