新功能 (2026-06-19) — 反應式觀察器

非阻塞的**螢幕觀察器**:在區域/條件上註冊監看,當被監看的目標**出現**、 **消失**或**改變**時,觸發回呼(或執行一段 action list)。這是阻塞式 wait_for_* 的互補——流程可以在做其他事的同時對對話框、進度或狀態 變化做出反應(SikuliX 的 observe 模型)。

純標準庫;走完整五層(facade、AC_* 執行器指令、MCP 工具、Script Builder)。

Python API

from je_auto_control import ScreenObserver, image_predicate, EVENT_APPEAR

obs = ScreenObserver(poll_interval_s=0.5)
obs.add("error-dialog",
        image_predicate("error.png", threshold=0.9),
        on_event=lambda event, value: dismiss(),
        events=(EVENT_APPEAR,))
obs.start()                 # 背景輪詢執行緒
...
obs.stop()

偵測與螢幕解耦:監看的 predicate 只回傳當前值(truthy 代表存在), 因此轉換邏輯可用合成值透過 poll_once() 做單元測試。內建的條件建構器 ——image_predicate()text_predicate()pixel_predicate()——包裝既有的 locate / OCR / pixel 輔助函式。

轉換:appear``(不存在→存在)、``vanish``(存在→不存在)、``change (存在且值改變)。可用 events= 只訂閱其中一部分。

執行器 / MCP 指令

  • AC_observe_add — 監看 kind``(``image / text / pixel) 的 event,觸發時執行 ``actions``(watchdog 模式,推廣到螢幕內容)。

  • AC_observe_remove / AC_observe_list — 管理監看。

  • AC_observe_poll — 評估每個監看一次並回傳觸發事件(決定性、免執行緒 ——適合腳本/測試)。

  • AC_observe_start / AC_observe_stop — 背景輪詢執行緒。

對應的 ac_observe_* MCP 工具提供相同介面。