SipengXie2024/dsh-auto-approval ↗★ 0
dsh-auto-approval
LLM-gated auto approval for DeepSeek Harness: a model judges every approval ask first, low-risk operations pass without prompting (out-of-tree plugin)
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:SipengXie2024/dsh-auto-approval说明文档
阅读完整 README ↗dsh-auto-approval
English: An LLM-gated auto-approval plugin for DeepSeek Harness (dsh). It adds an "auto" stance on top of dsh's four permission presets: every operation that would normally pop an approval prompt is first judged by your current default model — low-risk operations proceed without interrupting you, anything doubtful still asks. Fail-closed by design: judge errors, timeouts, and unparseable replies always fall back to the human. See 安装与使用 below (Chinese).
一个给 DeepSeek Harness(dsh)加「Auto 审批模式」的插件。
dsh 自带四种权限模式(Read-only / Workspace / Write / Full Access),但「要不要弹窗问用户」这件事只有 ask / never 两档。这个插件加了第五种姿态:每次要弹窗的操作,先由你当前选用的模型判定风险——明确安全的直接放行,拿不准的照常问你。思路与 Codex 的「替我审批」、Claude Code 的 auto 模式一致,但实现完全走 dsh 自己的审批管线。
工作原理
工具调用需要审批
│
▼
ApprovalService.request() ← 记 approval/asked 审计事件
│
▼
approval/request 瀑布(本插件 prepend 在链首)
│
├─ Auto 关 → next() → 内置 answerer 弹窗
▼
判定模型(当前默认模型)
输入:工具名 + 完整参数 JSON + 申请理由 + 工作区路径
│
├─ "approve" → 返回 allowed-once,不弹窗,直接执行
└─ 其他一切 → next() → 照常弹窗(ask / 解析失败 / 报错 / 30s 超时)
两个关键实现细节(都是踩坑换来的):
- 必须 prepend:
approval/request瀑布里,dsh 内置的 web answerer(dsh-host-apiproxy)在启动时注册,认领请求时不调next()——正常 append 的监听器永远轮不到执行。本插件以ctx.on('approval/request', fn, true)插到链首。 - 参数是旁路缓存的:
ApprovalRequest只带toolName / callId / reason,不带工具参数。插件另挂tools/pre-execute观察者,按callId缓存每个调用的参数快照,判定时拼进 prompt。
审计不受影响:approval/asked + approval/decided 由 ApprovalService 自己记录,无论谁认领。
安全边界
- 不改变沙箱:Read-only 模式下该被沙箱拦的操作照样被拦;Auto 只接管「本来要问你」的那一步。
- fail-closed:判定模型报错、超时(默认 30s)、返回无法解析的内容、或回答
ask——全部落到你熟悉的弹窗。 - 判定每次调用消耗一点额外 token(用的就是你当前会话的模型)。
安装与使用
从 Release 安装(推荐)
# 下载 release 里的 dsh-auto-approval-.tgz,然后:
dsh plugin --profile web add dsh-auto-approval-.tgz
# 重启 dsh
从源码构建
git clone https://github.com/SipengXie2024/dsh-auto-approval.git
cd dsh-auto-approval
npm install
npm run build # tsc(host)+ tsdown(client 闭包工厂 bundle)
npm pack # 产出 dsh-auto-approval-.tgz
dsh plugin --profile web add dsh-auto-approval-.tgz
# 重启 dsh