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) 在命令定义中添加认证策略元数据

每个命令定义应声明认证策略。/new/reset 使用 bound_acp_or_owner_or_allowlist,其他命令保持 owner_or_allowlist

2) 跨频道共享一个评估器

引入一个辅助,使用命令策略元数据、发送方授权状态和已解析的会话绑定状态来评估命令认证。Telegram 和 Discord 原生处理器都应调用同一辅助以避免行为漂移。

3) 使用绑定匹配作为绕过边界

当策略允许绑定 ACP 绕过时,仅在当前会话解析到了配置的绑定匹配时才授权(而非仅因为当前 session key 看起来像 ACP)。

为什么更好

  • 扩展到未来命令无需添加更多命令名条件
  • 跨频道行为保持一致
  • 通过要求显式绑定匹配保持当前安全模型
  • 白名单保持为可选加固而非普遍要求

上线计划(未来)

  1. 在命令注册表类型和命令数据中添加命令认证策略字段
  2. 实现共享评估器并迁移 Telegram + Discord 原生处理器
  3. /new/reset 迁移到元数据驱动策略
  4. 按策略模式和频道表面添加测试

不做的事

  • 不改变 ACP 会话生命周期行为
  • 不要求所有 ACP 绑定命令都有白名单
  • 不改变现有路由绑定语义

说明

本提案是有意的增量添加,不删除或替换现有的实验文档。