dsh-approval-inbox: Converting Blocking Approvals to Background Queuing

前言

在 DeepSeek Harness(DSH)里跑 Agent,常见两种时间浪费:一是工具调用需要人点头时,整条会话停在当前 step,你不在屏幕前,后面不需要授权的活也干不了;二是 DeepSeek 按峰谷价计费,峰时盲目「全停」会把不占 token 的本地构建、测试也一起闲置。原生弹窗式审批解决的是「当场决定」,但没有把「等你」和「Agent 继续干别的」拆开。

下面介绍社区插件 dsh-approval-inbox(维护者 Aily-DSH,分类 admin-security,MIT 许可证)。它用规则把该拦的调用拦下入队、拒绝当前 step,让模型在同一回合继续别的任务;你在「决策收件箱」里批量或逐条批准,批准后经一次性凭据放行重试,并可配合峰谷策略把吃算力的调用压到谷时。

这是什么

dsh-approval-inbox 是 DSH 的审批收件箱插件:命中规则的待授权调用不再以阻塞式 ask 卡住 Agent,而是 defer 入队并立刻结束当前 step;左侧常驻「决策收件箱」按项目、会话分区展示队列,会话行带待批数量角标;规则集可 JSON 导出导入;可选与 dsh-peak-guard 或内置日历联动,峰时批准可排到谷时边界,并对 task、web_search 等工具族自动压后。

环境要求(来自仓库说明):DSH >= 0.2.1-rc.2,Node.js ^22.19.0 || >=24.0.0,宿主进程需保持运行;可选 dsh-peak-guard >= 0.3.2。

核心功能

不阻塞 Agent

插件在 tools/pre-execute 阶段处理调用。规则动作为 defer 时,请求写入队列并返回 deny,当前 step 立即结束,不产生等待中的 Promise;模型收到「已排队、继续别的」后可继续其他 step。你点批准后,经 schedule.create 投递重试消息,并发放一次性凭据,重试同一调用时放行一次;再次执行仍会重新排队(出厂规则只拦不可逆或离开本机的操作,只读与本地构建默认放行)。

收件箱 UI

  • 左侧导航行 决策收件箱:常驻、不可关闭(sidebar.panellist 席位)。
  • 全局面板:项目 → 会话两级分区;支持批准、拒绝、总是允许、批量批准与批注;顶部显示当前峰/谷与下次切换时间。
  • 右侧栏 待批阅 标签:仅当前会话,可从侧栏引导页重新打开。
  • 会话行角标:转圈时仍显示黄色数字(1–99,超过为 99+),表示该会话待批数量。
  • 界面中英双语,跟随 DSH 语言设置。

规则引擎

规则是有序列表,先匹配先生效。每条规则一个动作:

动作 含义
allow 直接放行
defer 入队,拒绝当前 step,要求模型继续别的
deny 直接拒绝并告知模型勿重试

条件字段包括:tool、kind、scope、project、session、contains、notContains、regex、notRegex、path、minRisk(0–3)。出厂 7 条规则覆盖工作区内读写、本地构建放行,以及强推、破坏性删除、写系统路径、发布、向人提问等 defer 场景。面板内可导出下载、粘贴导入(merge 按 id 覆盖 / replace 整体替换),并对假想调用试跑匹配结果。

峰谷联动

读取 dsh-peak-guard 阶段快照;未安装时使用内置日历(chinese-days + 官方峰时窗口)。配置项 peak.hold 为 true 时,峰时批准会把投递排到谷时边界;peak.deferTools 默认包含 task、subagent、web_search、image_gen、video_gen,峰时自动压后、谷时自动批准投递。

外部接入

宿主在回环地址提供 HTTP API(需与 GUI 相同的 token),例如 POST /api/dsh-approval-inbox/raise 登记待决项。也可向文件投递箱写入 JSON:

~/.dsh/dsh-approval-inbox/inbox/*.json

约 30 秒 tick 消费后删除。与 dsh-superagent 联动时,工单进入 blocked 或向人提问的事件可自动进收件箱。

安装与启用

从 GitHub 安装(README 推荐命令):

dsh plugin --profile <profile> add "git+https://github.com/Aily-DSH/dsh-approval-inbox.git"

若 dsh 不在 PATH,可使用客户端自带 CLI(示例路径以 Windows 为例,按本机调整):

cd "/d/Program Files/DeepSeek Harness/resources/runtime/cli/bin"
./dsh.cmd plugin --profile desktop add "git+https://github.com/Aily-DSH/dsh-approval-inbox.git"

desktop profile 由 Electron 独占管理时,CLI 可能拒绝写入。可行方式:客户端内 设置 → 插件 → 从 Git 地址安装;或按 README「手动装」修改 ~/.dsh/profiles/desktop/package.json 后 npx --yes pnpm@11 install(开发场景已文档化)。

本地开发可指向目录:

dsh plugin --profile <profile> add "file:D:/path/to/dsh-approval-inbox"

装完后必须重启 DSH:宿主半只在启动时挂载,客户端注入清单也只在启动时计算,不重启不会生效。

主配置文件(首次启动自动生成):

~/.dsh/dsh-approval-inbox/config.json

常用字段:enabled(总开关)、nativeApproval(rule / allow / defer)、grantTtlMinutes(默认 30)、grantScope(exact / tool)、maxQueue、expireHours、peak.hold、peak.deferTools、rules。面板内可改大部分项。

典型用法

  1. 重启后确认左侧出现 决策收件箱,打开面板查看峰/谷状态。
  2. 发送会命中出厂「删除类」规则的请求,例如:
   请执行 rm -rf ./dsh-selftest-tmp,然后告诉我结果。
  1. 期望:无阻塞弹窗;面板出现 bash 待批项;会话未卡住,模型在拒绝说明后继续回复。
  2. 点击 批准:模型收到可重试消息,同一调用重试时凭据放行一次;再执行会重新入队。
  3. 对某类操作选 总是允许:会提升为 allow 规则,可在规则区查看或删除。

适用场景与注意

适合:长时间 unattended 跑 Agent、多项目多会话并行、需要可审计的批准记录与可导入规则集、希望在峰时仍做本地构建但把吃算力调用压到谷时的团队或个人。

注意:

  • 插件在当前 DSH 宿主进程权限下拦截与投递;安装前请阅读源码与 MIT 许可证,确认规则与出厂默认符合你的安全策略。
  • 关闭 DSH 后无人拦截、无人投递队列。
  • enabled 为 false 时 UI 仍在,但不拦任何调用。
  • 社区目录 SkillHub 插件页 与 GitHub 仓库 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系;以仓库 README 与 docs/RULES.md 为准。

结尾

dsh-approval-inbox 把「等你点头」改成「排队等你点头」:Agent 遇授权步骤先入队、继续别的活;你在收件箱里按项目与会话集中决策,规则可导出复用,峰时可与算力定价策略联动。需要细节时查阅仓库 README、配置说明与 HTTP API 表。

  • 目录页:https://www.skillhub.cn/plugins/Aily-DSH/dsh-approval-inbox
  • GitHub:https://github.com/Aily-DSH/dsh-approval-inbox
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye