動作效果分類(我的點擊有沒有效果?)
代理點擊後最關鍵的問題是「這有沒有效果,而且是*正確的*效果嗎?」——但在*第一步*就回答這個
問題的功能並不存在。screen_state.diff_snapshots 與 element_diff 回報變了什麼,卻從不
把變化歸因回該動作;``loop_guard`` 只在相同摘要重複 N 次後才標記 no-op(因此代理會先空轉
2–8 次);``actionability`` 純粹是*動作前*的閘門。action_effect 補上這個迴圈:比對前後
觀測,並依動作的目標點分類結果,讓代理能立即反應。
判定為下列之一:``no_op``(無變化)、``changed_near_target``(變化發生在我們動作之處——按鈕被 按下)、``changed_elsewhere``(別處彈出意外對話框)、或 ``changed``(有變化但動作沒有可歸因的 座標點)。
純標準函式庫,作用於元素字典 + 動作記錄;重用 element_diff.match_elements 做重疊配對與
observation_delta 的欄位變更檢查。完全確定性、可在無裝置下單元測試。不匯入 PySide6。
無頭 API
from je_auto_control import classify_effect, effect_near_point, is_no_op
verdict = classify_effect(before_elements, after_elements,
{"type": "click", "x": 480, "y": 260})
if verdict.effect == "no_op":
retry_or_repair()
elif verdict.effect == "changed_elsewhere":
handle_unexpected_dialog()
if is_no_op(before_elements, after_elements):
...
classify_effect 回傳 EffectVerdict``(``effect / changed_near_target /
changed_count / changed_centers / reason)。effect_near_point 回答任一變化是否
落在任意點的 radius 內;``is_no_op`` 是布林捷徑。
執行器指令
AC_classify_effect``(``before / after / action / radius →
{effect, changed_near_target, changed_count, changed_centers, reason})與
AC_effect_near_point``(``before / after / point / radius → {near})。
兩者以 MCP 工具 ac_classify_effect / ``ac_effect_near_point``(唯讀)及 Script Builder 指令
Classify Action Effect / Effect Near Point?**(位於 **Native UI 分類下)形式提供。