feat(execution): cascade post-raccourci pilotée par DialogHandler/OCR
Le pHash global 8x8 sur écran 1920x1080 ne détecte pas l'ouverture d'un dialog modal dans une VM QEMU (un dialog 800x500 couvre ~3 pixels pHash, distance Hamming typique = 1-2, sous le seuil de 3). Découvert sur Win11/ Notepad : Ctrl+Shift+S ouvrait bien le dialog mais Léa abortait à tort. _handle_post_shortcut() poll désormais DialogHandler.handle_if_dialog() toutes les 500ms (EasyOCR + KNOWN_DIALOGS). 8s pour le premier dialog, 3s de stabilité entre dialogs successifs, 60s budget total. KNOWN_DIALOGS réordonné : popups modaux (confirmer/remplacer/écraser) prioritaires sur fenêtres parents (enregistrer sous/save as) car l'OCR full-screen capte les deux simultanément. DialogHandler bascule sur UITarsGrounder subprocess one-shot (au lieu du serveur HTTP localhost:8200 qui n'existait plus). InfiGUI worker, think_arbiter et ui_tars_grounder alignés sur le même contrat. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
This commit is contained in:
@@ -896,15 +896,15 @@ def execute_action(action_type: str, params: dict) -> dict:
|
||||
_fc_target_text = params.get('_step_label', '')
|
||||
_action_types = {'click_anchor', 'double_click_anchor', 'right_click_anchor',
|
||||
'hover_anchor', 'focus_anchor', 'scroll_to_anchor'}
|
||||
if _fc_target_text in _action_types and screenshot_base64:
|
||||
try:
|
||||
from core.execution.input_handler import _describe_anchor_image
|
||||
_desc = _describe_anchor_image(screenshot_base64)
|
||||
if _desc:
|
||||
print(f"🏷️ [Vision] Ancre décrite: '{_desc}'")
|
||||
_fc_target_text = _desc
|
||||
except Exception:
|
||||
pass
|
||||
# Note: plus d'appel à _describe_anchor_image() (qwen2.5vl) ici.
|
||||
# Le crop d'ancre (screenshot_base64) est utilisé directement par
|
||||
# le template matching pixel-perfect en avant-poste, puis InfiGUI
|
||||
# en mode fusionné si nécessaire (option 2.c+2.a). Économise ~9.4 GB
|
||||
# de VRAM Ollama qui rentrait en conflit avec InfiGUI.
|
||||
if _fc_target_text in _action_types:
|
||||
# Marquer le label comme garbage pour que le pipeline
|
||||
# bascule sur le mode fusionné via template_b64.
|
||||
_fc_target_text = ''
|
||||
_fc_target_desc = params.get('visual_anchor', {}).get('description', '')
|
||||
|
||||
x, y, confidence, method_used = None, None, 0, ''
|
||||
|
||||
Reference in New Issue
Block a user