Skip to content

【提案】 为计划模式补齐 Gateway 计划审批 RPC #688

@Yumiue

Description

@Yumiue

目标问题(Why)

  • 当前痛点:计划模式已经能够在会话中生成带 plan_idrevision 的 draft 计划,但 Web 端缺少一条经 Gateway 显式批准计划的稳定 RPC 通道,客户端只能继续发送普通文本来推动执行,无法把“用户批准的计划 revision”作为可校验的控制面动作记录下来。
  • 触发场景:用户在 Web Chat 中查看最新 draft 计划后,希望明确同意该计划,并选择以 defaultbypass 权限模式进入 build 执行阶段。
  • 影响范围:该问题跨越 Web、Gateway、CLI bridge 与 Runtime。若没有统一 RPC,前端容易绕过 Gateway 边界或把计划审批语义混入普通聊天输入,导致计划 revision 过期、计划 ID 不匹配、状态非 draft 等异常无法被稳定映射为协议错误。

设计方案(How)

  • 核心设计:新增 gateway.approvePlan JSON-RPC 方法与 approve_plan Frame Action,参数包含 session_idplan_idrevision,只允许批准当前会话中匹配的 draft 计划 revision。
  • 关键机制:
    • Gateway 负责鉴权、ACL、参数校验、运行时超时、错误码映射与 ack 返回。
    • Runtime 保持计划状态判断与批准逻辑的唯一来源,返回可识别的计划审批业务错误。
    • CLI bridge 仅做 Gateway 输入到 Runtime ApproveCurrentPlan 的适配,不在 Gateway 或 Web 中内嵌 Runtime 细节。
    • Web 端在最新 draft 计划下展示审批入口;审批成功后再发起 build 模式执行,失败时保留可重试状态。
  • 边界与非目标:
    • 不改变计划生成、计划展示和 todo bootstrap 的既有语义。
    • 不引入跨层直连,Web 不直接访问 Runtime 或 Session。
    • 不把 provider 差异或模型厂商字段引入 Gateway、Runtime 或 Web 协议。
    • 不在本提案中扩展多计划历史管理、计划回滚或批量审批能力。

落地清单(What)

  • 在 Gateway 协议层补充 gateway.approvePlan 方法、参数类型、Frame Action、请求归一化与 payload 校验。
  • 在 Gateway runtime port 中补充可选计划审批端口,并在 bootstrap、registry、dispatch、security、metrics 中接入。
  • 在 CLI bridge 中把计划审批请求适配到 Runtime 当前计划批准能力,并把可预期业务拒绝映射为 invalid_action
  • 在 Runtime 中暴露可判定的计划审批错误类型,区分计划缺失、ID 不匹配、revision 不匹配和状态非法。
  • 在 Web Gateway API 与协议类型中补充 approvePlan 调用,Chat 面板展示计划审批操作、执行入口和失败重试。
  • 同步更新 Gateway RPC 文档与参考文档。

验收标准(Done)

  • gateway.approvePlan 在已认证 WebSocket 控制面请求中可通过 ACL,并返回 approve_plan ack。
  • 缺失 session_id、缺失 plan_idrevision <= 0 等输入能返回稳定协议错误。
  • 当前计划不存在、计划 ID 不匹配、revision 过期、状态非 draft 时,错误能映射为 invalid_action,不会暴露内部错误细节。
  • Web 端只对最新 draft 计划展示审批入口;用户拒绝当前 revision 后不再反复弹出,新的 revision 可重新展示。
  • 审批成功后 Web 端以 build 模式发起执行,并允许用户选择 defaultbypass 权限模式。
  • build 执行启动失败时不重复批准计划,保留重试执行入口并可恢复流绑定。
  • Go 与 Web 单元测试覆盖正常路径、参数校验、错误映射和 UI 交互回归。

风险与回滚

  • 风险:新增 RPC 若参数校验不严格,可能批准过期计划 revision 或跨会话计划;Web 若把审批和执行耦合过深,可能在执行失败时造成用户无法重试。
  • 回滚方案:移除 gateway.approvePlan 方法、approve_plan Frame Action、Web 审批入口与相关文档,恢复为用户通过普通输入推动计划执行;Runtime 既有计划生成和展示链路不受影响。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions