前言¶
DSH 的智能体工作流里,审批卡片负责控制高风险操作。默认权限保持 workspace-write + ask 时,Agent 每遇到一次高权限请求都会弹出审批。对于同一个任务内多次同类请求,重复确认会增加操作成本;但直接放开全局高权限,又容易超出当前任务需要的范围。
dsh-turn-approval 针对 DSH Web 的审批卡片增加一个任务级授权入口:点击「允许本次任务」后,当前 turn 内后续明确匹配的 danger-full-access 升级可以自动放行;turn/end 后授权消失。
这是什么¶
dsh-turn-approval 是 DeepSeek Harness(DSH)社区插件,仓库为 arrow949/dsh-turn-approval,License 为 MIT。
它为 DSH Web 审批卡片增加「允许本次任务」按钮,用于在单个 turn 内临时放行特定类型的高权限升级。它不改变 DSH 默认权限模型,也不把整个 session 切换为 full access。
核心功能¶
默认情况下,DSH 权限保持 workspace-write + ask。当 Agent 请求 danger-full-access 时,审批卡片会提供三个选择:
[拒绝] [允许一次] [允许本次任务]
- 拒绝:拒绝当前操作。
- 允许一次:只放行当前操作。
- 允许本次任务:当前
turn内,后续明确匹配的danger-full-access请求自动放行;turn/end后授权自动失效。
该插件的关键约束如下:
- 授权仅保存在内存,不写入磁盘。
- 授权绑定
session + turn,一个session的授权不影响另一个session。 - 子代理使用独立
session,不继承该授权。 - 只自动放行明确匹配的
danger-full-access升级;workspace-write和其他审批仍逐一询问。 grant只能由审批卡片按钮建立,模型没有自行开启任务授权的入口。- 自动放行仍保留完整的审批事件记录。
- 仅支持 DSH Web;
headless profile没有 UI 入口,任务授权端点不会注册。
安装与启用¶
从 GitHub 安装时,命令使用 <commit-sha> 占位符;已核实资料未提供具体 SHA,替换前请自行确认要固定的提交:
dsh plugin --profile web add github:arrow949/dsh-turn-approval#<commit-sha>
该包是已提交构建产物的纯 ESM JavaScript。从 GitHub 安装时不需要 prepare 脚本或 pnpm allowBuilds 权限。
安装后执行以下步骤:
1、重启 DSH Web。
2、在浏览器中硬刷新:
Ctrl+Shift+R
3、检查审批卡片是否出现第三个按钮「允许本次任务」。出现后表示插件已加载。
也可以查看当前 profile 是否挂载插件层:
dsh --profile web --dump-config
典型用法¶
1、正常使用 DSH,权限仍保持 workspace-write + ask。
2、当 Agent 请求 danger-full-access 时,先阅读审批原因与命令。
3、如果当前任务内还需要多次同类高权限操作,点击「允许本次任务」。
4、当前任务内后续同类 danger-full-access 请求会按规则自动放行。
5、当前任务结束后,下一条消息会重新逐项询问。
如果端点返回非 2xx 或网络请求失败,卡片会明确提示失败并保持可重试;它不会假装授权已建立,也不会静默降级为「允许一次」。
安全边界¶
授权失效是 fail-closed 的。以下情况会使任务授权失效:
- DSH 进程重启。
- 插件卸载。
session或 agent 被释放。
它不会把整个 session 切换为 full access。一个 session 的授权不影响另一个 session;子代理使用独立 session,不继承授权。
从触发入口看,grant 只能由审批卡片按钮建立。即使当前任务内已授权,插件也只会自动放行明确匹配的 danger-full-access 升级;workspace-write 和其他审批仍逐一询问。
自动放行仍保留完整的审批事件记录,后续排查时仍能看到相关审批事件。
实现与兼容性¶
该插件作为 DSH bundle 的一部分接入:package.json 声明 dsh.bundle.patch,cordis.patch.yml 将插件加入 profile。client half 通过官方 conversation.composer chain 槽位以更高优先级渲染审批卡片。
它不修改任何 DSH 官方 bundle 文件。卸载后 Node half 与 client half 会一并移除,审批卡片回到 DSH 官方默认的两个按钮。
当前外观复用官方 ApprovalPanel 的内部 CSS 类名。若未来 DSH 改动该组件结构或 CSS module 类名,可能需要发布兼容更新。
卸载¶
卸载命令:
dsh plugin --profile web remove dsh-turn-approval
卸载后不会遗留对 DSH 官方文件的修改。
结尾¶
dsh-turn-approval 的价值在于把「允许一次」和「全局放开」之间拆出一个更小的粒度:当前 turn。它适合需要在 DSH Web 中减少重复审批、但不想扩大权限范围的场景。
GitHub 仓库:
https://github.com/arrow949/dsh-turn-approval