前言¶
在 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 说明。
面板与多会话¶
- 当前会话存在可答复的审批时,在界面右上角(
shell.overlay槽位)出现面板。 - 面板跟随主视图中的会话:只展示该会话的审批,其他会话的待审项在切换过去之前不打扰;标题栏显示会话名称。
- 默认展开,可收折为半透明「Pending review」胶囊,避免挡住对话;每次新的审批再次默认展开。
- 各审批各自保留原因草稿,多会话来回切换不会冲掉已在其他审批里输入的文字。
带原因拒绝与纯拒绝¶
在面板中输入原因后点 Reject with reason:
- 向运行中的会话发送 steering 用户消息,正文形如
(approval rejection reason) <text>,通过remote.session.prompt,mode: "steer"。 - 若当前轮次已不能接受 steering,则改为排队(
mode: "queue")。 - 随后将审批答复为
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。
典型用法¶
- 启动或切换到使用 Web profile 的 DSH,确保已按上节装好插件并重启(若文档要求)。
- 在智能体流程中触发需要审批的工具调用,待右上角面板出现。
- 若拒绝需要说明:在文本框写好原因(注意 500 字上限),点 Reject with reason;模型应在同轮或排队送达后看到带
(approval rejection reason)前缀的说明。 - 若无需说明:点 Reject,行为与未装插件时一致。
- 审批较多时可收折面板为胶囊,切换会话时各自草稿仍保留。
适用场景与注意¶
适合经常在 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 为准。