時間視窗去重

work_queue 只對 new / in_progress 參照去重 —— 一旦項目完成,同一參照又會再入列,重送的 webhook 也會被重複處理。本功能補上缺少的「最近 N 秒看過這個 id → 丟棄」收件匣,把至少一次投遞轉換成 視窗內恰好一次。

純標準函式庫;不匯入 PySide6。時鐘可注入,因此 TTL 驅逐在 CI 中完全具決定性。

無頭 API

from je_auto_control import DedupWindow

inbox = DedupWindow(ttl_s=3600)
if inbox.check_and_mark(event_id):
    process(event)           # 視窗內首次
else:
    skip(event)              # 重複 / 重送

check_and_mark 在視窗內首次看到某 id 時原子性回傳 True``(並標記),重複則回傳 ``Falseseen / mark 是分離的查詢/記錄兩半,``purge_expired`` 丟棄過期項目,``size`` 回報有效數量。超過 ttl_s 的 項目會在每次操作時驅逐,因此視窗保持有界。

執行器命令

AC_dedup_check 在具名視窗(TTL ttl_s)中對 message_id 做 check-and-mark,回傳 {first_seen, size}。它使用具名實例登錄,並以 MCP 工具 ac_dedup_check 以及 Script Builder 中 Flow 分類下的命令提供。