ACP 綁定指令授權(提案)

狀態:已提案,尚未實作

本文件描述 ACP 綁定對話中原生指令的長期授權模型。這是一份實驗提案,不取代目前的正式行為。

已實作的行為請參閱原始碼和測試:

  • src/telegram/bot-native-commands.ts
  • src/discord/monitor/native-command.ts
  • src/auto-reply/reply/commands-core.ts

問題

目前有指令專屬的檢查(例如 /new/reset)需要在 ACP 綁定的頻道/主題中正常運作,即使白名單為空。這解決了立即的 UX 問題,但基於指令名稱的例外機制無法擴展。

長期方向

將指令授權從即興的處理器邏輯轉移至指令中繼資料加上共用的策略評估器。

1) 為指令定義新增 auth 策略中繼資料

每個指令定義應宣告 auth 策略。範例結構:

type CommandAuthPolicy =
  | { mode: "owner_or_allowlist" } // 預設,目前的嚴格行為
  | { mode: "bound_acp_or_owner_or_allowlist" } // 在明確綁定的 ACP 對話中允許
  | { mode: "owner_only" };

/new/reset 使用 bound_acp_or_owner_or_allowlist。 其他多數指令維持 owner_or_allowlist

2) 跨頻道共用一個評估器

引入一個輔助函式,使用以下資訊評估指令 auth:

  • 指令策略中繼資料
  • 發送者授權狀態
  • 解析的對話綁定狀態

Telegram 和 Discord 的原生處理器都應呼叫相同的輔助函式,以避免行為偏差。

3) 使用綁定匹配作為繞過邊界

當策略允許綁定 ACP 繞過時,僅在當前對話解析到已設定的綁定匹配時授權(而非僅因目前 session key 看起來像 ACP)。

這讓邊界保持明確並最小化意外的擴展。

為何這樣更好

  • 無需為未來的指令新增更多指令名稱條件就能擴展。
  • 跨頻道行為一致。
  • 透過要求明確的綁定匹配保留現行安全模型。
  • 白名單維持為選用的強化而非普遍的需求。

上線計畫(未來)

  1. 在指令登錄型別和指令資料中新增指令 auth 策略欄位。
  2. 實作共用評估器並遷移 Telegram + Discord 原生處理器。
  3. /new/reset 移至中繼資料驅動的策略。
  4. 為每種策略模式和頻道介面新增測試。

非目標

  • 本提案不改變 ACP session 生命週期行為。
  • 本提案不要求所有 ACP 綁定指令都需要白名單。
  • 本提案不改變既有的路由綁定語義。

備註

本提案刻意為附加性質,不刪除或取代既有的實驗文件。