Augustin b61c8e31a8 Fix: Replace tokenizers crate with custom SimpleTokenizer
Resolve Windows linker C runtime mismatch by implementing a custom
tokenizer that doesn't depend on esaxx-rs (which uses static runtime).

Changes:
- Remove tokenizers crate dependency (caused MT/MD conflict)
- Add custom SimpleTokenizer in src/ai/tokenizer.rs
  - Loads vocab.txt files directly
  - Implements WordPiece-style subword tokenization
  - Pure Rust, no C++ dependencies
  - Handles [CLS], [SEP], [PAD], [UNK] special tokens

- Update OnnxClassifier to use SimpleTokenizer
- Update ModelConfig to use vocab.txt instead of tokenizer.json
- Rename distilbert_tokenizer() to distilbert_vocab()

Build status:
 Compiles successfully
 Links without C runtime conflicts
 Executable works correctly
 All previous functionality preserved

This resolves the LNK2038 error completely while maintaining full
ONNX inference capability with NPU acceleration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 19:38:44 +02:00
2025-10-16 13:48:46 +02:00

Activity Tracker MVP

Version License Rust Platform

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

  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)

{
  "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.

Description
No description provided
Readme 170 KiB
Languages
Rust 89.2%
JavaScript 5.8%
HTML 5%