diff --git a/tools/session_cleaner.py b/tools/session_cleaner.py index aad075cb5..8c95ff8af 100644 --- a/tools/session_cleaner.py +++ b/tools/session_cleaner.py @@ -758,28 +758,12 @@ def clean_and_replay(): replay_actions = None error_message = "" - if _build_replay_fn is not None: - # Chemin principal : utiliser build_replay_from_raw_events - try: - replay_actions = _build_replay_fn( - cleaned_events, - session_id=session_id, - session_dir=str(session_dir), - ) - logger.info("build_replay_from_raw_events a produit %d actions", len(replay_actions)) - # Forcer visual_mode=False sur les clics pour eviter le crash - # agent "cannot unpack non-iterable NoneType" quand le visual - # resolve ne fonctionne pas. Les coords brutes suffisent pour - # un replay de nettoyage. Le mode visuel sera reactive quand - # le bug agent sera corrige. - if replay_actions: - for act in replay_actions: - if act.get("type") == "click": - act["visual_mode"] = False - except Exception as e: - logger.error("Erreur build_replay_from_raw_events : %s", e) - error_message = f"Erreur lors de la construction du replay : {e}" - + # Pour le session_cleaner, on utilise TOUJOURS le fallback simple. + # build_replay_from_raw_events transforme les events (réordonne, + # injecte du setup "ouvrir l'app", fusionne des actions) — ce qui + # décale les clics par rapport à l'enregistrement original. + # Le fallback simple reproduit les events 1:1 en coords brutes, + # ce qui est exactement ce qu'on veut pour "nettoyer et rejouer". if not replay_actions: # Fallback : filtrage simple et conversion directe. # Se declenche si build_replay_from_raw_events a crashe OU