wangxing-git/dsh-autogate ↗★ 0
dsh-autogate
DeepSeek Harness 自动审批插件:在 workspace-write 沙箱之上增加 Auto 档——确定性规则放行/拒绝,模糊操作由 LLM 裁决,危险操作转人工。保留工作区沙箱边界,不放宽为 full-access。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:wangxing-git/dsh-autogate说明文档
阅读完整 README ↗语言: English · 简体中文(本页)
dsh-autogate
DeepSeek Harness 自动审批插件:在 workspace-write 沙箱之上 增加「半自动(auto-ask)+ 全自动(auto)」两档权限,采用「确定性规则 + LLM 安全审批 +(半自动下)被拒绝方主动人工审批」分层决策。保留工作区沙箱边界,不放宽为 full-access。
分层设计
| 层 | 决策 | 说明 |
|---|---|---|
| L0 确定性规则 | allow / deny | 零成本、零 LLM:只读、会话状态、工作区内编辑与删除、build/test、run_code 容器直接放行;工作区外普通路径读直接放行;工作区外的写/删除(敏感 shell/凭据配置文件写除外)放行交由 workspace-write 沙箱拦截 + escalation 弹窗;工作区外敏感配置文件写交 LLM 审查;空命令、动态命令名、参数缺失等兜底放行交由沙箱;提权、自毁、凭据外传、关键路径删除硬拒绝 |
| L1 LLM 安全审批 | allow / deny | 沙箱不拦截但语义危险的操作(未识别工具、模糊 shell、敏感路径读、动态目标、块设备、持久终端、git 状态变更、网络/数据库操作、工作区内受保护路径写)交 LLM 两态裁决:用户明确授权的操作放行,减少人工批准 |
| L2 人工审批 | ask | 两条通道:① AI 用 ask_user_question 问用户确认操作合法,确认后重新执行再过 LLM;② AI 用 sandbox_permissions + justification 重试走 DSH 沙箱提权(escalation),本插件先过 LLM 判断——合理越界直接批准不弹窗,危险/不确定才人工弹窗 |
两种模式
| 预设键 | 模式 | escalation 提权审批兜底 |
|---|---|---|
auto-ask | 半自动(默认) | LLM 拒绝/异常 → 委派人工弹窗(L2 兜底) |
auto | 全自动 | LLM 拒绝/异常 → 直接拒绝,不人工弹窗(LLM 裁决为最终决定) |
两种模式共享同一套 L0 确定性规则与 L1 LLM 分类器,唯一区别是 L2 人工兜底:半自动保留人工弹窗,全自动把 LLM 裁决作为最终决定。硬 deny(L0 guard)与 preflight 开关在两种模式下行为一致。
与同类插件的关键区别
- 沙箱保持 workspace-write:即使 LLM 误判放行,文件写入仍被沙箱限制在工作区(不同于使用 danger-full-access 的同类插件)。
- 未识别工具默认走 LLM 分类而非放行:但
run_code作为代码执行容器直接放行——它内部的每次工具调用仍各自经过本策略与沙箱评估。 - fail-closed:分类器异常 / 超时 / 无路由 / 格式错误一律拒绝,由被拒绝方(AI)视情况主动向用户发起人工审批。
安装
# 从 GitHub 安装(编译产物 lib/ 已随仓库提交)
dsh plugin --profile web add github:wangxing-git/dsh-autogate
# 重启 dsh
配置
配置经 DSH settings 服务(ctx.settings)接入:在 $DSH_HOME/settings.yaml 写 autogate: 段即时热重载;未挂载 settings 服务时回退 cordis.patch.yml 的 entry config(config: {})。
关于设置 UI:DSH 0.1.0-rc.6 的 Web 设置页对第三方插件 namespace 有硬编码 allowlist(
dsh-host-apiproxy的 ), 默认不在其中,设置卡片可能不会显示。要让卡片显示,可在该数组中追加 后重启 dsh(改官方包,DSH 升级后需重做);否则直接用下方 手动配置,功能等同。