新功能 (2026-06-19) — 交易式工作佇列
把 AutoControl 從「跑一支腳本」升級成「跑一個機器人」。以 SQLite 為底的 工作佇列實作了標準生產級 RPA 的 dispatcher/performer 模式:dispatcher 把工作項目入列,*performer* 一次處理一項,具備每項狀態、去重與重試—— 因此處理上千項的執行能在**當機後續跑**,並可由多個 worker 平行處理。
純標準庫、完全 headless,走完整五層(facade、AC_* 執行器指令、
MCP 工具、Script Builder)。由競品研究指出為相對 UiPath Orchestrator
佇列 / REFramework 所缺的一塊。
Dispatcher / performer
from je_auto_control import WorkQueue
q = WorkQueue("run.db", name="invoices")
# Dispatcher:把工作入列(依 live reference 去重)。
for inv in invoices:
q.add({"path": inv}, reference=inv)
# Performer:把佇列處理完,可跨重啟續跑。
item = q.get_next()
while item is not None:
try:
process(item.data)
q.complete(item.id, output={"ok": True})
except BusinessError as exc: # 資料有問題——不重試
q.fail(item.id, str(exc), kind="business")
except Exception as exc: # 暫時性——重試
q.fail(item.id, str(exc), kind="application")
item = q.get_next()
get_next 會原子性地認領最舊的 new 項目(標為 in_progress),
因此多個 performer 不會重複處理。
失敗語意
兩種失敗類型,對應 REFramework:
**application**(暫時性——逾時、stale element):重試至
max_retries(預設 3)次,然後標為failed。**business**(資料本身無效):永不重試——立即標為
failed。請丟出BusinessError或傳kind="business"。
stats() 回傳各狀態計數(new / in_progress / success /
failed),供儀表板與執行報告使用。
執行器指令
AC_queue_add— 入列data``(依 ``reference去重)。AC_queue_next— 認領下一項(排空時回 null)。AC_queue_complete— 標記項目成功。AC_queue_fail— 以kind``(``application/business)失敗。AC_queue_stats— 各狀態計數。
同一個 db 檔 + name 識別一個佇列,因此 dispatcher 腳本與 performer
腳本(或多個平行 performer)可共用它。