前言¶
DeepSeek Harness (DSH) 的设计理念是“一切皆插件”。在开发智能体工具时,经常会遇到需要提升权限的场景,例如将沙箱权限从默认提升至 danger-full-access。这种提升通常需要通过审批对话框手动确认,如果需要反复测试或调试,每次请求都进行确认会降低效率。
dsh-session-allow 是一个 DSH Web GUI 插件,它在审批对话框中新增了“本会话允许”选项。开发者点击一次后,该模式(mode)将在当前会话内获得永久授权,后续的相同请求将自动通过,无需再次弹窗。
功能说明¶
该插件通过替换 DSH 核心的审批面板来实现功能,不涉及核心包的修改。
- 新增选项:审批对话框中会出现“本会话允许”选项( alongside “拒绝” 和 “允许一次”)。
- 自动批准:一旦授予某模式,当前会话内再次请求该模式时,系统会自动通过,不再弹出对话框。
- 按模式隔离:只有与已授予模式匹配的请求才会被自动批准,其他模式仍会正常提示。
- 可撤销:对话框底部会显示当前会话已授予的模式列表(芯片形式),点击 × 即可撤销授权。
- 会话隔离:刷新页面或开启新会话后,之前的授权记录会自动清空,权限状态重置。
安装与启用¶
通过以下命令安装插件。安装完成后需重启 dsh web 以加载新组件。
dsh plugin --profile web add https://github.com/AnakinCao/dsh-session-allow.git
提示:请选择一种安装方式,不要重复挂载。
工作原理¶
此插件通过覆盖 conversation.composer 链槽来实现功能。
- 注册优先级:DSH 核心审批面板在
conversation.composer链槽注册的优先级为 1。本插件以优先级 0 注册了相同的选择器。根据链槽机制,优先级 0 的组件会完全替换优先级 1 的组件。 - 数据存储:授权记录存储在
localStorage['dsh.sessionAllow.v1']中。 - 授权键:系统会解析请求原因(通常为
escalate sandbox to <mode>: ...),提取模式作为授权键(mode:<mode>)。非升级类的请求会使用tool:<tool>:<reason>作为键。 - 网络通信:匹配的请求在网络上会被自动回答为
allowed-once,但主机的审计日志仍会记录approval/asked和approval/decided。
典型用法¶
场景一:首次请求危险模式
工具请求提升权限到 danger-full-access。对话框显示:
* 拒绝
* 允许一次
* 本会话允许 danger-full-access
场景二:执行授权
点击“本会话允许 danger-full-access”。当前请求被允许,且该模式被授予当前会话。
场景三:重复请求
在同一会话内再次请求 danger-full-access。对话框不再出现,系统静默自动批准请求。
场景四:请求其他模式
在同一会话内请求一个尚未被授权的模式(例如 tool:web-search)。对话框正常弹出,提示用户进行审批。
场景五:撤销授权
在对话框底部,可以看到当前会话已授予的模式芯片。点击芯片上的 ×,该模式被撤销,下次请求时将重新弹出对话框。
卸载与清理¶
dsh plugin --profile web remove dsh-session-allow
若要手动清理授权数据,可在浏览器开发者工具的控制台中删除 localStorage['dsh.sessionAllow.v1']。
文件结构¶
dsh-session-allow/
├── package.json # 插件声明
├── cordis.patch.yml # 加载器注册入口
├── lib/
│ ├── index.js # 主机端占位符插件
│ └── client.js # 客户端包(接管面板 + 会话授权)
├── test/
│ └── behavior.test.mjs # 授权、自动批准、撤销的回归测试
└── README.md