dsh-approval-reason-dock:为 Harness 审批拒绝附带可选原因

前言

在 DeepSeek Harness(DSH)里,智能体调用工具前常会弹出审批:Allow once 与 Reject。拒绝后,模型侧往往只看到「用户拒绝了工具 X」,没有结构化渠道把「为什么不批准」写进当前轮次。若你希望在拒绝的同时说明「网络不稳先别跑这条命令」「暂时别动那个文件」,通常只能等下一轮再打字补一句,模型可能已经按「莫名被拒」继续猜策略。

dsh-approval-reason-dock 是一款面向 Web 客户端的叠加型 DSH 插件:在原生审批卡片之上增加可选的拒绝原因输入,并在正式以 rejected 答复审批之前,把原因以 steering 用户消息注入正在进行的会话,让模型下一步就能读到上下文,而不是事后追问。

这是什么

插件全名 dsh-approval-reason-dock,维护者为 FzqxDedafeiyu,在 DSH 插件社区分类为 admin-security。源码与说明见 GitHub 仓库,npm 包名同为 dsh-approval-reason-dock(当前发布版本 0.1.1,许可证 MIT)。

它不替换内置审批卡,不修改审批协议或审计事件;面板渲染失败时会软降级,内置审批行为与未装插件时一致。

核心行为

下面介绍插件在 Web 端的主要逻辑,均来自官方 README 与 package.json 中的 engines.dsh 说明。

面板与多会话

  1. 当前会话存在可答复的审批时,在界面右上角(shell.overlay 槽位)出现面板。
  2. 面板跟随主视图中的会话:只展示该会话的审批,其他会话的待审项在切换过去之前不打扰;标题栏显示会话名称。
  3. 默认展开,可收折为半透明「Pending review」胶囊,避免挡住对话;每次新的审批再次默认展开。
  4. 各审批各自保留原因草稿,多会话来回切换不会冲掉已在其他审批里输入的文字。

带原因拒绝与纯拒绝

在面板中输入原因后点 Reject with reason:

  1. 向运行中的会话发送 steering 用户消息,正文形如 (approval rejection reason) <text>,通过 remote.session.prompt,mode: "steer"。
  2. 若当前轮次已不能接受 steering,则改为排队(mode: "queue")。
  3. 随后将审批答复为 rejected。

拒绝成功后面板立即关闭。仅当原因投递失败时,会留下可关闭的错误提示(含错误码)。面板上的 Reject 与内置按钮相同:不带原因直接拒绝。

隐私与内容形态

拒绝原因会以普通用户消息进入会话记录与模型上下文:纯文本、最长 500 字符、不以 HTML 渲染。插件自述不发起额外网络请求,除待处理审批元数据外不读取会话正文。

安装与版本对应

engines.dsh 要求 DSH >=0.2.2-rc.1 且 <0.3.0。README 给出的版本矩阵如下:

DSH 插件 状态
0.2.1-rc.2 0.1.0 已验证稳定;此线路不支持 0.1.1
0.2.2-rc.1 0.1.1+ 已验证(0.1.1 真机测试在此环境完成)

0.1.1 依赖客户端 uiSession 等注入服务,README 说明在 0.2.1 客户端上未验证该服务;插件管理器会按 engines.dsh 做兼容检查,在 0.2.1 上 0.1.1 可能被标为不兼容,故旧线应显式锁定 0.1.0。

在 DSH 0.2.1-rc.2 上安装已验证旧版:

dsh plugin --profile web add dsh-approval-reason-dock@0.1.0

在 DSH 0.2.2-rc.1 及之后 0.2.x 上,用 CLI 安装 npm 包(默认拉取当前主线):

dsh plugin --profile web add dsh-approval-reason-dock

也可在 DSH UI 的 Plugin Manager 中安装 bundle,使用包名或 GitHub 规格:

dsh-approval-reason-dock
github:FzqxDedafeiyu/dsh-approval-reason-dock

从 GitHub 源用 CLI 安装:

dsh plugin --profile web add github:FzqxDedafeiyu/dsh-approval-reason-dock

若自行维护 profile,可向 dsh.profile.bundles 增加 bundle,由补丁插入一行(见仓库内 cordis.patch.yml 示例):

- insert:
    - id: approval-reason-dock
      name: dsh-approval-reason-dock

卸载:在 Plugin Manager 中卸载,或从 dsh.profile.bundles 移除 dsh-approval-reason-dock 后重启 DSH。

典型用法

  1. 启动或切换到使用 Web profile 的 DSH,确保已按上节装好插件并重启(若文档要求)。
  2. 在智能体流程中触发需要审批的工具调用,待右上角面板出现。
  3. 若拒绝需要说明:在文本框写好原因(注意 500 字上限),点 Reject with reason;模型应在同轮或排队送达后看到带 (approval rejection reason) 前缀的说明。
  4. 若无需说明:点 Reject,行为与未装插件时一致。
  5. 审批较多时可收折面板为胶囊,切换会话时各自草稿仍保留。

适用场景与注意

适合经常在 Harness 里做工具审批、又希望「拒绝」自带可审计、可进入上下文的简短说明的开发者或运维。分类落在 admin-security,与审批流、会话 steering 相关,而不是替换服务端鉴权策略。

安装前建议自行查看 源码仓库 与 MIT 许可证;插件在浏览器半侧运行,依赖 DSH 客户端内部 API(shell.overlay、uiSession、remote.session.prompt 等),官方 README 标明这些并非稳定公开契约,Harness 大版本升级后可能需要跟随更新插件。插件以当前 DSH 进程与用户界面权限运作,是否安装应结合你对第三方 bundle 的信任与内网策略。

README 还提到:缺少内部 API 时面板隐藏,审批仍走内置卡片(fail-soft)。

结尾

dsh-approval-reason-dock 解决的是审批拒绝与对话上下文脱节的问题:在答复 rejected 之前把可选原因送进当前 turn,减少模型对拒绝原因的猜测。社区目录页:https://www.skillhub.cn/plugins/FzqxDedafeiyu/dsh-approval-reason-dock;问题与版本说明以 https://github.com/FzqxDedafeiyu/dsh-approval-reason-dock 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜