Add comprehensive documentation of the Windows linker error blocking the ONNX inference implementation from building. Issue: - ONNX Runtime uses dynamic C runtime (MD_DynamicRelease) - esaxx-rs (tokenizers dependency) uses static runtime (MT_StaticRelease) - Windows linker cannot mix these two runtime libraries Status: - All Rust code compiles successfully ✅ - Inference implementation is complete and correct ✅ - Final executable linking fails ❌ Solutions documented: 1. Wait for upstream runtime compatibility fix 2. Use alternative tokenizer without esaxx-rs 3. Move inference to separate service process 4. Use pre-tokenized inputs 5. Try pure-Rust inference with tract 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Activity Tracker MVP
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)
- SQLite3 (inclus automatiquement via Cargo)
Compilation
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
# 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é
# 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
# 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
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
# Supprimer les données de plus de 30 jours (par défaut)
activity-tracker cleanup --password "..." --days 30
5. Exporter toutes les données
# 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
- Mot de passe fort : Minimum 16 caractères, mélange de lettres/chiffres/symboles
- Ne pas stocker le mot de passe : Saisie manuelle à chaque commande
- Sauvegarde sécurisée : Chiffrez les exports JSON avant de les stocker ailleurs
Format de rapport (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 :
[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 :
activity-tracker start --password "..." --config config/settings.toml
Tests
# 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 :
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 :
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 pour les guidelines.
Licence
MIT License - voir LICENSE pour plus de détails.
Auteurs
Activity Tracker Team - Gitea
Remerciements
- Design inspiré du document
design-journal.md - Chiffrement via RustCrypto
- Screenshots via 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.