Contournement temporaire du crash agent "cannot unpack non-iterable
NoneType object" qui se produit quand l'agent Windows tente une
résolution visuelle (visual_mode=True) sur les actions replay.
Les actions construites par build_replay_from_raw_events gardent
leurs coordonnées enrichies (x_pct, y_pct calculés depuis la
session) mais sont envoyées avec visual_mode=False pour que l'agent
clique aux coords brutes sans passer par le grounding.
C'est un compromis temporaire : moins intelligent (pas de résolution
adaptative) mais fonctionnel (les clics arrivent aux bonnes coords).
Le mode visuel sera réactivé quand le bug agent sera diagnostiqué
et corrigé (le traceback n'est pas visible côté serveur, le
redéploiement de l'agent avec debug n'a pas pris effet).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deux bugs dans _simple_build_replay :
1. Mauvais noms de champs : x_percent/y_percent au lieu de x_pct/y_pct
attendus par l'agent executor. Et valeurs en 0-100 au lieu de 0-1.
Résultat : l'agent recevait x_pct=None → crash "cannot unpack
non-iterable NoneType object".
2. Pas de visual_mode=False explicite. Sans enrichissement
(target_spec vide, pas d'anchor), l'agent tentait une résolution
visuelle sur du vide → crash.
Aussi : la condition de fallback empêchait le déclenchement quand
build_replay_from_raw_events crashait (error_message non vide bloquait
la branche). Corrigé : le fallback se déclenche sur `not replay_actions`
(couvre None, liste vide, et crash du build principal).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Petit serveur Flask standalone (tools/session_cleaner.py) qui permet de :
- Lister les sessions enregistrees recentes
- Visualiser chaque session avec ses screenshots (crop + full)
- Marquer les clics parasites a supprimer (auto-detection des toasts,
clics droit, fenetres Lea/systray, derniers 3 evenements)
- Re-construire un replay nettoye et l'injecter dans la queue via
POST /api/v1/traces/stream/replay/raw
Option A du rapport audit VWB : "Le besoin reel est supprimer 3 clics
parasites et relancer — c'est 30 secondes d'UX, pas un Visual Workflow
Builder."
Port : 5006
Dependencies : Flask (deja dans le venv), aucune nouvelle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>