Skip to content

feat: 支持 OpenClaw exec 审批弹窗(监听 exec.approval.request 事件) #334

Description

@gaowei68cn

场景
OpenClaw 在 tools.exec.mode: allowlist + ask: on-miss 配置下,当命令不匹配 allowlist 时,会通过 WebSocket 广播 exec.approval.request 事件,等待客户端决定批准或拒绝。ClawPanel 目前已有 /communication 页面的审批转发配置,以及 exec.approval.list/get 的 RPC 方法,但缺少实时审批弹窗 UI——收到审批请求时没有任何提示,导致命令卡死。

建议实现
在 ws-client.js 的事件分发中,订阅 exec.approval.request 事件:
复制
// 在 _handleMessage 的 event 转发分支添加
if (msg.event === 'exec.approval.request') {
this._emit('exec.approval', msg.payload)
}
实现一个审批弹窗组件(Modal),包含:

待执行的命令文本(带高亮)
命令来源信息(agent、session)
三个按钮:允许一次(Allow Once)、始终允许(Allow Always)、拒绝(Deny)
审批结果通过 RPC exec.approval.respond 或 /approve 指令返回给 Gateway。

参考实现
OpenClaw Control UI 的审批弹窗行为
ws-client.js 中已有的 execApprovalList() / execApprovalGet() 方法
技术背景
OpenClaw approvals 文档见:https://docs.openclaw.ai/tools/exec-approvals
WebSocket 审批事件包格式(未公开文档化,建议参考 Control UI 源码或直接测试抓包)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions