Pipeline replay visuel : - VLM-first : l'agent appelle Ollama directement pour trouver les éléments - Template matching en fallback (seuil strict 0.90) - Stop immédiat si élément non trouvé (pas de clic blind) - Replay depuis session brute (/replay-session) sans attendre le VLM - Vérification post-action (screenshot hash avant/après) - Gestion des popups (Enter/Escape/Tab+Enter) Worker VLM séparé : - run_worker.py : process distinct du serveur HTTP - Communication par fichiers (_worker_queue.txt + _replay_active.lock) - Le serveur HTTP ne fait plus jamais de VLM → toujours réactif - Service systemd rpa-worker.service Capture clavier : - raw_keys (vk + press/release) pour replay exact indépendant du layout - Fix AZERTY : ToUnicodeEx + AltGr detection - Enter capturé comme \n, Tab comme \t - Filtrage modificateurs seuls (Ctrl/Alt/Shift parasites) - Fusion text_input consécutifs, dédup key_combo Sécurité & Internet : - HTTPS Let's Encrypt (lea.labs + vwb.labs.laurinebazin.design) - Token API fixe dans .env.local - HTTP Basic Auth sur VWB - Security headers (HSTS, CSP, nosniff) - CORS domaines publics, plus de wildcard Infrastructure : - DPI awareness (SetProcessDpiAwareness) Python + Rust - Métadonnées système (dpi_scale, window_bounds, monitors, os_theme) - Template matching multi-scale [0.5, 2.0] - Résolution dynamique (plus de hardcode 1920x1080) - VLM prefill fix (47x speedup, 3.5s au lieu de 180s) Modules : - core/auth/ : credential vault (Fernet AES), TOTP (RFC 6238), auth handler - core/federation/ : LearningPack export/import anonymisé, FAISS global - deploy/ : package Léa (config.txt, Lea.bat, install.bat, LISEZMOI.txt) UX : - Filtrage OS (VWB + Chat montrent que les workflows de l'OS courant) - Bibliothèque persistante (cache local + SQLite) - Clustering hybride (titre fenêtre + DBSCAN) - EdgeConstraints + PostConditions peuplés - GraphBuilder compound actions (toutes les frappes) Agent Rust : - Token Bearer auth (network.rs) - sysinfo.rs (DPI, résolution, window bounds via Win32 API) - config.txt lu automatiquement - Support Chrome/Brave/Firefox (pas que Edge) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
RPA Vision Agent (Rust) — Phases 1-5
Agent complet pour RPA Vision V3, ecrit en Rust.
Parite fonctionnelle avec l'agent Python (agent_v0/agent_v1/) en un seul executable de 2.4 Mo.
Fonctionnalites
Phase 1 — Agent minimal (headless)
- Heartbeat : capture ecran toutes les 5s, JPEG, dedup par hash perceptuel
- Replay : poll serveur, execute actions (click, type, key_combo, scroll, wait)
- Resolution visuelle : resolution de cibles via le serveur (template matching)
- Serveur de capture : port 5006 (GET /capture, GET /health, POST /file-action)
Phase 3 — Systray + Notifications
- Systray : icone avec cercle colore (gris=idle, rouge=enregistrement, vert=connecte, bleu=replay)
- Menu contextuel : Machine ID, statut, Apprenez-moi, C'est termine, Mes taches, ARRET D'URGENCE, Chat, Fichiers, Quitter
- Notifications toast : via winrt-notification (bienvenue, session, replay, connexion)
- Etat partage : thread-safe via AtomicBool + Mutex
Phase 4 — Chat WebView2
- WebView2 : fenetre 520x720, charge http://{server}:5004/chat
- Positionnement : bas-droite pres du systray
- Fallback : HTML embarque si le serveur est indisponible
- Toggle : show/hide via menu systray
Phase 5 — Parite complete
- Enregistrement : capture evenements souris/clavier via rdev, envoi au serveur
- Floutage : detection de champs de saisie + blur gaussien (protection donnees sensibles)
- Configuration : BLUR_SENSITIVE, LOG_RETENTION_DAYS, CHAT_PORT
- Health check : verification connexion serveur toutes les 30s
Build
Linux (pour tests)
sudo apt install libpipewire-0.3-dev libclang-dev libgbm-dev libxdo-dev
cargo build --release
Cross-compilation vers Windows
rustup target add x86_64-pc-windows-gnu
sudo apt install gcc-mingw-w64-x86-64
cargo build --release --target x86_64-pc-windows-gnu
Deploiement sur le PC cible
sshpass -p 'loli' scp -o StrictHostKeyChecking=no \
target/x86_64-pc-windows-gnu/release/rpa-agent.exe \
dom@192.168.1.11:"C:\\rpa_vision\\rpa-agent.exe"
Configuration
| Variable | Defaut | Description |
|---|---|---|
RPA_SERVER_URL |
http://localhost:5005/api/v1 |
URL du serveur streaming |
RPA_MACHINE_ID |
{hostname}_{os} |
Identifiant de la machine |
RPA_CAPTURE_PORT |
5006 |
Port du serveur de capture |
RPA_HEARTBEAT_INTERVAL |
5 |
Intervalle heartbeat (secondes) |
RPA_JPEG_QUALITY |
85 |
Qualite JPEG (1-100) |
RPA_BLUR_SENSITIVE |
true |
Flouter les zones sensibles |
RPA_LOG_RETENTION_DAYS |
180 |
Retention des logs (jours) |
RPA_CHAT_PORT |
5004 |
Port du serveur de chat |
Architecture
src/
├── main.rs — Orchestrateur, 7 threads (heartbeat, replay, serveur, health, recorder, chat, tray)
├── config.rs — Configuration (env vars + defauts)
├── state.rs — Etat partage thread-safe (AtomicBool, Mutex)
├── capture.rs — Capture ecran (xcap), JPEG, hash perceptuel
├── network.rs — Client HTTP (heartbeat, poll replay, rapport resultat)
├── replay.rs — Boucle de polling replay avec notifications
├── executor.rs — Execution actions (click, type, key_combo, scroll, wait)
├── visual.rs — Resolution visuelle des cibles via le serveur
├── server.rs — Mini serveur HTTP port 5006 (/capture, /health, /file-action)
├── tray.rs — Icone systray + menu contextuel (tray-icon, winit)
├── notifications.rs — Notifications toast Windows (winrt-notification)
├── chat.rs — Fenetre de chat WebView2 (wry)
├── recorder.rs — Capture evenements souris/clavier (rdev)
└── blur.rs — Floutage zones sensibles (detection + box blur)
Taille du binaire
| Configuration | Taille |
|---|---|
| Release (LTO + strip + opt-level z) | 2.4 Mo |
| Python equivalent (venv + packages) | ~200 Mo |
Compatibilite
- OS : Windows 10/11 (systray, notifications, chat WebView2)
- Fallback Linux : mode console (heartbeat, replay, serveur)
- Serveur : compatible api_stream.py (port 5005)