- Inicio
- Plugins
- Seguridad y permisos
- dsh-approval-gate
dsh-approval-gate
iamnewhands/dsh-approval-gate
Maintained fork of dsh-approval-gate. A neutral operation whose confirmation count has reached the threshold auto-approves when the judge is unavailable, instead of prompting a human again; approver-facing explanations are generated in Chinese from the real sandbox mode, command and paths. Also carries deterministic hard-deny for credential exfiltration and system-path destruction, judge-input redaction, a judge model candidate chain, fingerprint-scoped allow rules, and an approval view with unified diff and one-click revert.
Instalar
dsh plugin --profile web add github:iamnewhands/dsh-approval-gateREADME
简体中文 | English
dsh-approval-gate
DeepSeek Harness 自动审批门控 —— 最小人工介入,安全自动放行、危险转人工(fail-safe)。
判定模型预判每次沙箱越界:常规操作自动放行,硬风险操作(删除 / 凭据 / 远程 / 系统 / 批量)永远转人工确认;学习沉淀只针对你确认过的操作,并提供界面化人工审查入口。
判定管道:硬拒(凭据 / 系统路径,判定模型无权推翻)→ 硬事实人工 → 危险词 → 白名单 → denyRules → 脱敏 → 判定(JSON 硬类别优先 → allow/ask/deny)→ 学习沉淀。
来源:本项目是 moon09300731/dsh-approval-gate 的 fork, 在其基础上修复了若干缺陷并扩展了多机规则共享。原作者版权与 MIT 许可见 LICENSE。 本仓库(IamNewHands/dsh-approval-gate)为维护中的版本。 其中 5 项能力移植自 NanmiCoder/dsh-auto-mode(MIT),见下文「吸收自 dsh-auto-mode」。
✨ 特性
- ⚡ 模型风险预判:每次沙箱越界由判定模型给出严格 JSON 裁决(
allow/ask/deny),可回补操作自动放行 - 🛑 确定性硬拒(吸收):凭据外泄与根/系统路径销毁基于真实路径与凭据事实直接拒绝(不弹窗),判定模型无权推翻;DSH_HOME / home 根等转人工
- 🔒 判定输入脱敏(吸收):密钥与大块正文在送判定模型前被抹除/截断,避免密钥随判定请求出站
- 🛡️ 硬风险永远人工:删除、凭据、远程/生产、系统路径、批量不可回补五类操作直接转人工,不计数、不学习、不可追认;这是一道对称安全闸——无论判定模型给
allow还是deny,命中硬类别一律转人工(v0.7.0 修正:此前deny会抢先静默拒绝,使硬类别配置失效) - 🎯 确认制学习:同一操作人工确认 N 次后,第 N+1 次起自动放行;沉淀规则携带操作指纹,只放行你确认过的操作
- 🧠 语义同类验证:措辞变化但意图相同的操作,由判定模型对照你的确认样本语义判断,不再依赖关键词
- ♻️ 判定器失败兜底(吸收,v0.8.0 语义修正):判定器不可用第一次就转人工(不再静默拒绝——判定器挂了不等于你的操作有害);失败原因(超时/上游报错/正文为空)写进审计与审批记录;批准后沉淀带指纹的放行规则,同类调用不再过判定器。阈值
judgeFailureLimit(默认 1,设为 >1 回到旧的"先静默拒绝"节奏) - 🔗 判定模型候选链(v0.8.0):主判定模型 → 会话默认模型 → 内置兜底;单通道抖动(502/超时)不再等于判定器整体不可用
- 🧮 学习兑现优先于判定器(v0.8.2):确认计数已满阈值(
riskyThreshold)的neutral操作,在判定器不可用时直接按已完成的确认放行,不再因为判定器抖动而反复弹人工审批。硬拒 / 硬事实 / 危险词 / 白名单仍排在判定之前,硬风险类别照旧每次人工确认 - 💬 提示层减负(吸收):预设激活期间向会话注入
<auto_approve_policy>,从源头减少需要判定的越界请求 - 🔧 配置热更新:
allowlist.json修改即时生效,无需重启 - ✅ 人工审查 UI:自动放行时输入框上方出现绿色提示;「审批」视图(轨迹右侧)展示当前会话完整放行时间线,静默拒绝单独标红
- 🈶 审批说明中文化(v0.8.1):审批卡片与「审批」视图的说明一律中文——原文是英文或带宿主英文前缀(
escalate sandbox to …)时,用真实事实(目标沙箱模式、真实命令、真实目标路径)生成中文说明并交代后果(可写范围 / 能否回滚 / 是否影响工作区外);命令与路径原样保留,模型原文作附注追加。事件新增zh字段承载中文说明,justification原文仍留档 - 🔔 拒绝提示条常驻(v0.7.0+):静默拒绝与人工拒绝的提示条不再几秒消失,而是一直挂在对话框上方(带「查看审批记录」/「重新审批通过」按钮),直到你切到「审批」tab 才收起;已读位置本地持久化,刷新不丢也不重复打扰。追认过的拒绝已放行,既不计入待处理,也不会再弹红色提示条(v0.7.1)
- ↩️ 追认被拒操作(v0.7.0+):审批记录里的静默拒绝可一键「重新审批通过」——写入带操作指纹的自动放行规则并投递重试指令让 AI 重跑。围栏:确定性硬拒档与硬风险类别不可追认(给按钮就是假承诺)
- 📄 文件改动对比与撤销(v0.5.0+):审批涉及的文件可点击查看 unified diff——变动行带上下 5 行上下文、多处修改按 hunk 分区并以「N unmodified lines」分隔条折叠、绿加红删灰上下文、双行号;一键「撤销此改动」投递指令让 AI 按快照恢复文件
- 🗂️ 会话级快照管理(v0.5.0+):快照按事件归属会话,审批视图按当前会话统计;清理支持「仅清本会话」与「清空全部」两档,避免误删其他会话未查看的 diff 记录
🔌 吸收自 dsh-auto-mode
以下 5 项移植自 NanmiCoder/dsh-auto-mode(MIT License),按本仓库的判定管道语义改写并补充了回归测试:
| 能力 | 说明 |
|---|---|
| 确定性硬拒 | src/paths.mjs + hardDenyFacts():路径事实熔断(文件系统根 / 系统与凭据关键路径 / Windows 设备命名空间 / 保留设备名)+ 凭据外泄判定,分「直接拒绝」与「转人工」两档 |
| 判定输入脱敏 | src/sanitize.mjs:私钥/令牌/Bearer/key=value → [redacted-secret];密钥类字段整字段抹除;大块正文只留长度;深度 3 / 数组 25 / 对象 50 |
| 结构化裁决协议 | src/classifier.mjs:严格 JSON {decision, reason, category},替代原文本 SAFE / RISKY:<类别>;任何格式偏差抛错并 fail-safe |
| 连续失败计数 | 按会话计数;judgeFailureLimit 默认 1(第一次失败即转人工,v0.8.0 修正),设为 >1 则前 N-1 次静默拒绝、第 N 次转人工;成功即清零。失败原因(超时/上游报错/正文为空)记入审计与事件 |
| 动态系统提示 | systemPrompt.context 注入 <auto_approve_policy>,仅在本预设激活时输出 |
差异:上游挂在工具管道(ctx.tools.guard + tools/pre-execute)且只做一次性判定、无跨会话学习;本仓库挂在 approval/request,保留确认制学习、操作指纹、同类语义验证与快照撤销。
📸 界面速览
① 审批视图

「审批」标签页(轨迹右侧)按时间倒序展示当前会话的自动放行与人工审批记录:每条记录含工具名(bash / edit)、判定标签(「自动放行 · Flash 判定安全」「人工通过」等)、时间与操作说明。顶部统计栏显示本会话的 diff 快照占用(2.9 KB · 3 条),并提供两个清理入口:「仅清本会话」(只删除当前会话的快照,不影响其他会话未查看的 diff)与 「清空全部」(二次确认后清空所有会话,防止误删)。
被静默拒绝的记录(红「已直接拒绝」)额外带一个 「重新审批通过」 按钮:点了就写入带操作指纹的自动放行规则,并向会话投递重试指令让 AI 重跑该操作。标题旁的 待处理 N 角标显示还有几条拒绝没追认。追认之后该行翻转为 「已追认放行 · …(曾直接拒绝)」 完成色,并从待处理计数中移除。确定性硬拒档(凭据外泄 / 系统路径销毁)与硬风险类别(删除 / 凭据 / 远程 / 系统 / 批量)不显示该按钮——前者白名单盖不过、后者必须每次人工确认,给按钮就是假承诺。
② 文件改动对比(diff)

点击审批记录中的文件即可打开对比面板:以 unified diff 展示改动前后差异——新增行绿底(+)、删除行红底(-)、上下文行灰底;左侧显示原/新双行号;多处修改按 hunk 分区,块间以灰色「6 unmodified lines」分隔条折叠未变更区间。顶部统计 +2 / -2 行变更 · 20 行未变。底部 「撤销此改动」 一键向对话投递撤销指令,AI 将按审批前的快照恢复文件。
③ 设置 · 自动审批

设置页「自动审批」分区提供完整配置:初始化权限预设(一键写入 cordis.patch.yml 的 auto-approve 预设)、当前判定管道总览(DENY → 白名单 → denyRules → Flash → 学习)、危险词黑名单(预置条目 + 自定义添加)、以及热更新说明(修改即时生效,无需重启)。
🚀 快速开始
dsh plugin --profile web add "github:IamNewHands/dsh-approval-gate#main"
npm 上的
dsh-approval-gate是上游 0.5.0,不含本仓库修复,请勿按包名安装。
- 配置权限预设:在
~/.dsh/profiles/web/cordis.patch.yml添加auto-approve预设(详见指南) - 重启
dsh web - 选择预设:会话权限下拉选中「自动审批(Flash)」
📖 文档
📄 License
MIT
Plugins relacionados
dsh-infinite-gen-4
minglink/dsh-infinite-gen-4
api-relay-audit
toby-bridges/api-relay-audit
dsh-redteam-model
seaof0/dsh-redteam-model
dsh-auto-review
perrylink/dsh-auto-review