dsh-approval-guardian:为 DSH 沙箱升级审批接入一次性 reviewer

前言

DSH 生态强调「一切皆插件」。在一些自动化流程里,交互式审批是个实际断点:当 agent 需要扩大 sandbox 时,DSH 可能弹出给人看的 allow / deny 提示;如果流程希望无人值守,就需要一个边界清晰的前置审批路径。

dsh-approval-guardian 就是针对这个点做的 DeepSeek Harness(DSH)bundle:它只认领 strict sandbox escalation approvals,把这类请求交给一次性 approval-reviewer agent,并应用其结构化 allowdeny

需要说明:社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;本文也不把它描述为官方应用商店。

这是什么

dsh-approval-guardian 的定位是一个 DSH profile bundle:它拦截真实 sandbox escalation prompts,并把它们路由给专门的审批 reviewer。

它解决的核心问题是:自动化运行中,agent 需要扩大 sandbox 时,原本可能需要人工确认;该插件只处理与本次工具执行相关的 strict sandbox escalation,其他请求继续交给 downstream answerer。

可核实资料中:

  • 仓库地址:https://github.com/karuboniru/dsh-approval-guardian
  • 目录页:https://www.skillhub.cn/plugins/karuboniru/dsh-approval-guardian
  • 许可证:MIT
  • 维护者字段:可核实资料未给出 package.json 中的 author/maintainer 字段,因此本文不将仓库路径中的 karuboniru 描述为已确认的维护者。

核心能力

下面介绍已核实的路由边界。一次工具执行会落入三种情况之一:

  1. 操作在当前 sandbox mode 内可执行:插件不干预。
  2. approval 不是由本次工具执行发出,或不是 strict widening:插件调用 downstream answerer,保持 DSH 原有行为。
  3. 一次 strict sandbox escalation 且与本次工具执行精确相关:插件启动新的 one-shot approval-reviewer agent,并应用其结构化 allowdeny

结果注入方式:

  • reviewer 完成后,结果通过 deferContext 排队,并注入到匹配的 tool/result 之后。
  • 插件通过 package.json 中的 dsh.bundle.patch 注册,指向 cordis.patch.yml

失败模式:

  • failureMode 支持 fail-closedfallback-to-user
  • fail-closed:reviewer timeout、unavailable 或 invalid output 时返回 unavailable
  • fallback-to-user:只在 reviewer failure 时把请求交回 downstream answerer。
  • 显式 deny 是最终决定,在两种模式下都不回落到用户。

安装与启用

先确认运行环境:

  • Node.js:^22.19.0>=24.0.0
  • pnpm
  • peer packages:@deepseek-ai/cordis ^4.0.1,以及 ^0.1.0-rc.5 的 DSH packages
  • 已核实对照 DSH CLI 0.1.0-rc.6

安装已发布包:

dsh plugin --profile <profile-name> add dsh-approval-guardian@0.1.1

这一步会把插件注册到指定 profile。插件通过 package.jsondsh.bundle.patch 指向 cordis.patch.yml,安装后重启 DSH surface 即可加载。

如果从本地 checkout 安装:

pnpm install
pnpm run build
dsh plugin --profile web add .

Git 安装会执行 prepare script。pnpm 10+ 可能需要在目标 profile 的 pnpm-workspace.yaml 中允许该包运行 build scripts。

升级:

dsh plugin --profile <profile-name> add dsh-approval-guardian@<new-version>

禁用:在 profile 的 cordis.patch.yml 中设置 id approval-guardiandisabled: true,然后重启:

- id: approval-guardian
  disabled: true

移除:

dsh plugin --profile <profile-name> remove dsh-approval-guardian

如果之前添加过 profile-level override,也移除对应 approval-guardian 块,然后重启。

典型用法与配置

最小安装后即可使用。需要定制部署策略时,在 profile 的 cordis.patch.yml 中覆盖同一个 id。已核实的配置点包括:

  • prompt:可承载 deployment-specific security policy;如果包含内部规则,不要放入公共仓库。
  • providermodel:必须同时提供或同时省略;只提供一个属于配置错误,插件会拒绝启动。
  • failureMode:选择 fail-closedfallback-to-user
  • 模型供应商凭据由 DSH 的 model routing 管理,该插件没有插件专属环境变量。

示例形态(仅列出已核实字段):

- id: approval-guardian
  config:
    prompt: |
      - Deny operations that touch protected paths unless the user explicitly names them.
    provider: <provider-id>
    model: <model-id>
    failureMode: fail-closed

说明:示例中的 promptprovidermodelfailureMode 均属于已核实资料中出现的配置项;示例中的占位值需要按部署环境替换。

适用场景与注意

适合:

  • 希望 automation 中避免人工弹窗的 strict sandbox escalation 审批。
  • 希望 reviewer 使用结构化 allow / deny,失败时有明确 fallback 的团队。
  • 只对真实 sandbox 扩大请求做前置策略,不替代 general approval policy 的场景。

注意:

  • 不要期望它处理 sandbox 内可执行的普通操作;这类操作不进入该流程。
  • 非 strict、非本次工具执行相关的 approval 会继续到 downstream answerer。
  • 插件以当前 dsh 进程权限运行;安装前应检查源码、许可证和依赖版本。
  • prompt 可能包含内部安全规则,公共仓库中应避免写入。
  • 可核实资料中 README 的 Permissions & data 段落被截断,完整数据读取行为未确认;使用前请自行核对源码和运行日志。
  • dsh-approval-guardian 不是 general approval-policy replacement;它只认领 genuine sandbox widening requests,其他请求交给下游 answerer。

结尾

dsh-approval-guardian 的价值比较具体:把 DSH 中真实出现的 strict sandbox escalation approvals 路由到一次性 reviewer,并保持结构化 allow / deny 与失败回退边界清晰。它适合需要无人值守、可解释审批路径的 DSH profile,也适合希望保留原有 interactive answerer 作为 fallback 的团队。

目录页:

https://www.skillhub.cn/plugins/karuboniru/dsh-approval-guardian

GitHub:

https://github.com/karuboniru/dsh-approval-guardian
羽毛球分组比赛记分
小程序二维码

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

Xiaoye