動作前接地防護

guardrail 掃描文字找提示注入、loop_guard 偵測卡住的迴圈——但兩者都不在派發前驗證*座標動作*。agent 迴圈會 執行模型回傳的任何東西,毫無邊界或目標檢查,因此幻覺出的 (9999, -5) 點擊會打到空處,而偏 5 像素的點擊會錯過 按鈕。validate_action 加入「執行前偵測錯位動作」防護:拒絕螢幕外點擊,並把接近但偏離的座標吸附到最近已知元素 的中心。

純標準函式庫幾何,作用於純元素字典(x / y / width / height),因此完全可單元測試。不匯入 PySide6

無頭 API

from je_auto_control import validate_action, snap_to_element, in_bounds

check = validate_action(model_action, screen_size=(1920, 1080), targets=elements)
if not check["ok"]:
    print("rejected:", check["reason"])         # 例如 "out of bounds"
else:
    x, y = check["snapped"] or (model_action["x"], model_action["y"])
    click(x, y)                                  # 已吸附到真正的按鈕

in_bounds(x, y, screen_size) 是螢幕邊界判斷式;``snap_to_element`` 回傳某點所在(或在 max_dist 內最近) 元素的中心,否則 None;``validate_action`` 結合兩者,回傳 {ok, reason, snapped}——拒絕越界座標,並在提供 targets 時吸附接近偏離者。沒有座標的動作一律通過。

執行器命令

AC_validate_action``(``action / screen / targets{ok, reason, snapped};``screen`` 預設為實際 螢幕)。它以 MCP 工具 ac_validate_action 以及 Script Builder 中 Native UI 分類下的命令提供。