dsh-approval-session-allow:DSH 审批面板「本对话均允许」

前言

DeepSeek Harness(DSH)在工具越权时会弹出审批面板,默认只有「允许一次」和「拒绝」。一条稍长的任务里,同一个工具(例如 pwsh 访问工作区外路径、write 写敏感位置)可能被问十几次,每次只能放行一次,打断节奏。下面介绍社区插件 dsh-approval-session-allow:在面板上增加第三个选项「本对话均允许」,按工具记住当前对话的授权,后续同类请求自动放行,并可随时撤销。

这是什么

dsh-approval-session-allow 是 DSH 的客户端审批面板增强插件,维护者为 Miaoyeah,仓库 GitHub,在 SkillHub 目录中归类为 admin-security。它不改动 Host 侧代码,通过 DSH 插件机制接管内置 @deepseek-ai/dsh-client-ui-approval 的面板职责,在「临时决定」之上增加会话级、按工具粒度的放行策略。

核心功能

内置面板只有两个答案时,本插件补上第三个按钮,行为对比如下。

按钮 行为
拒绝(Esc) 拒绝这一次
允许一次(Enter) 只放行这一次,与 DSH 默认一致
本对话均允许 放行这一次,且本对话内同一工具不再询问

点「本对话均允许」之后,同一对话里同一工具再次需要越权授权时,审批面板不会出现;插件在 approval/request 瀑布里直接返回 allowed-once。每次审批仍会写入会话日志(approval/asked / approval/decided),Host 侧看到的仍是正常的 allowed-once,审计链保持完整。

授权范围按 (会话, 工具名) 记在浏览器 localStorage(键 dsh.approval.sessionAllow.v1):

  • 只对当前对话生效;新建对话即失效,其他对话、其他工作区不受影响。
  • 只对点按钮时的那个工具生效;给 pwsh 授权不会自动放过 write。
  • 子代理是独立会话,需单独授权。
  • 刷新页面、重启应用后同一对话内仍有效;清空站点数据会清空账本。

撤销方式:下一次仍会出现审批面板时,界面会显示「本对话已自动允许」及已放行工具列表,点工具名后的 × 立即撤销;也可新建对话,或在开发者工具执行 localStorage.removeItem('dsh.approval.sessionAllow.v1')。

安装与启用

方式一:DSH Web 插件页(推荐)

在 DSH Web 界面的插件页粘贴仓库地址安装:

https://github.com/Miaoyeah/dsh-approval-session-allow

安装会写入 profile 的 dsh.profile.bundles 并默认启用,包内 cordis.patch.yml 随即生效(禁用内置审批面板并插入本插件条目)。与 agent 调用 plugin_manager 的 install_bundle 效果相同。

资料中明确说明:只执行 dsh plugin add <git-url> 不够——该命令把参数转发给 pnpm add,只装依赖、不会选中组合包。若走该命令,还需手动把 dsh-approval-session-allow 加进 profile package.json 的 dsh.profile.bundles 列表,否则插件不会加载。

安装后一般无需重启:profile 的 patch 与插件文件被运行中的 Host 监听,数秒内自动重组,浏览器通过 HMR 更新插件图。

方式二:手动接入 profile

把仓库目录登记为 link: 依赖,并在 profile 的 cordis.patch.yml 末尾追加:

- id: ui-approval
  name: '@deepseek-ai/dsh-client-ui-approval'
  disabled: true
- insert:
    - id: approval-session-allow
      name: 'dsh-approval-session-allow'

两种方式不要同时用:同一 Loader id 插入两次属于配置错误;用方式一则不必手写上述片段。

卸载

dsh plugin --profile <profile> remove dsh-approval-session-allow

手动安装时删除 profile cordis.patch.yml 里对应条目,内置审批面板会自动恢复。

典型用法

1、在 DSH Web / 桌面 GUI 中完成插件安装(推荐粘贴 GitHub 地址)。

2、Agent 触发需要审批的工具调用时,在面板中选择「本对话均允许」而非「允许一次」。

3、同一对话内该工具后续越权请求应不再弹窗;若需恢复询问,在后续面板中撤销对应工具,或开新对话。

插件复用内置包的槽位(conversation.composer、conversation.approval.detail 等),工具自带的审批详情(例如 pwsh 命令预览)仍照常显示。

原理简述

approval/request 瀑布
   ├─ 命中本会话授权  → 直接返回 allowed-once(面板不渲染)
   └─ 未命中          → 渲染面板:拒绝 / 允许一次 / 本对话均允许
  • lib/index.js:Host 侧空实现,供 Loader 启动条目。
  • lib/client.js:浏览器侧面板、授权账本与 approval/request 监听,懒加载 CJS bundle。

适用场景与注意

适合:在 DSH 0.2.x Web / 桌面 GUI 里做较长对话、同一工具反复越权(脚本、写文件、跨路径操作)的开发者,希望减少重复点「允许一次」。

兼容性:面向带浏览器面板的客户端插件层;CLI、headless、ACP 等走各自审批通道,本插件不适用。依赖内置包暴露的客户端接口;DSH 大版本升级后若接口变化,插件可能在列表中加载失败,卸下插件即可恢复内置面板。

安全:插件以当前 DSH 进程与浏览器 localStorage 为边界运行,授权仅会话内、按工具生效,并非全局永久放行。安装前应阅读 仓库源码 与 MIT 许可证,确认符合你的安全策略。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-approval-session-allow 在不大改 DSH 审批模型的前提下,用「本对话均允许」把重复弹窗收敛到一次选择,并保留撤销与日志审计。目录页:https://www.skillhub.cn/plugins/Miaoyeah/dsh-approval-session-allow;源码与完整说明:https://github.com/Miaoyeah/dsh-approval-session-allow。

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

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

小夜