DSH(DeepSeek Harness)通过沙箱机制限制 Agent 的执行权限。当沙箱拦截某条命令并请求提升权限(如提升至 danger-full-access 档位)时,通常需要人工审批。手动审批效率低,且无法实现基于命令特征的自动化放行。
dsh-approve-prefix 插件通过分析命令行的前缀,在满足特定条件时自动放行提权请求,同时引入会话级“夜间模式”管理审批流。
插件简介¶
- 名称:
dsh-approve-prefix - 作者:
azazo1 - 分类:
admin-security - 定位:通过前缀匹配实现 DSH 沙箱提权请求的自动化放行。
该插件解决了 DSH 提权审批请求通常只包含 toolName 和 reason 而不包含命令原文的问题。它将命令记录插入到审批瀑布流的最前面,通过确定性规则(前缀匹配)替代模型的不确定性判断。
核心功能¶
- 前缀自动放行:仅当提权请求来自
bash或pwsh等工具,且命令为“恰好一条简单命令”(无管道、重定向、链式操作符)且 argv 命中放行前缀时,自动放行。 - 夜间模式:提供会话级开关。开启后,非放行前缀的提权请求、其它插件的审批询问(如 Chrome 插件的首次弹窗)将直接拒绝,不再弹出卡片。
- 命令过滤:管道(
|)、链式(;,&&)、重定向(>,<)或命令替换($(...))的命令一律转人工审批。 - 管理能力:支持静态前缀、持久前缀与会话级临时前缀配置,支持通过会话视图 Tab 管理当前会话的临时前缀。
安装与启用¶
安装插件后必须重启宿主进程(Host 与 Client 半边)才能生效。
Web 端安装¶
装进 web profile:
dsh plugin --profile web add azazo1/dsh-approve-prefix
安装完成后重启 dsh web,刷新浏览器页面即可。
依赖要求¶
插件依赖 DeepSeek Harness 引擎版本不低于 0.2.0-rc.1。
配置¶
配置位于 profile 的 cordis.patch.yml 中,字段均有默认值:
- insert:
- id: dsh-approve-prefix
name: dsh-approve-prefix
config:
prefixes: []
tools:
- bash
- pwsh
allowedEscalationModes:
- danger-full-access
| 字段 | 默认值 | 说明 |
|---|---|---|
prefixes |
[] |
静态放行前缀表,默认为空。 |
tools |
['bash', 'pwsh'] |
参与记录与判定的工具名。 |
allowedEscalationModes |
['danger-full-access'] |
允许自动放行的提权档位,默认仅 danger-full-access。 |
nightBlockedTools |
['ask_user_question'] |
夜间模式下直接拒绝的工具名列表。 |
nightExemptTools |
['exit_plan_mode'] |
即使在 nightBlockedTools 中也放行的例外。 |
nightCommand |
true |
是否注册 /night 命令切换夜间模式。 |
典型用法¶
插件按“单条简单命令”判定。以下示例中假设已配置前缀 gh api:
- 自动放行:
gh api user --jq .login
- 人工审批(包含管道):
gh api user | jq .login
- 人工审批(包含链式操作符):
gh api user; rm -rf /tmp/x
- 人工审批(包含重定向):
gh api user > /tmp/out.json
注意事项¶
- 重启生效:修改配置或安装插件后,必须重启宿主进程才能使配置生效。
- Night 模式逻辑:开启 Night 模式后,如果工具参数中写了
approved: true但命令不符合放行前缀,请求会被拒绝,不会转人工。 - Approved 字段含义:模型在 schema 中填写的
approved: true是自检声明,用于完成条件核对,不是批准请求,也不会改变 Night 状态。 - 会话视图管理:临时前缀与会话视图中的 Night 开关修改后需点“应用”才会写入 Host 内存。