dsh-approval-auto-review:用锁定的 Guardian 代理自动审查 DSH 审批请求

前言

让智能体在 DeepSeek Harness(DSH)里跑长任务时,审批环节是个两难:每次工具调用都人工确认,任务被频繁打断;完全放开权限,模型的错误命令又没有闸门。折中的做法是引入一个独立的、能力受限的审查代理,让它逐条评估待审批的操作并给出决定。本文介绍的 dsh-approval-auto-review 就是实现这一思路的插件。

这是什么

dsh-approval-auto-review 是 DeepSeek Harness 的自动审批审查插件,由 perlied03 维护,许可证为 MIT,当前版本 0.6.1。它处理被路由到所配置权限预设的审批请求:用锁定的 Guardian 代理评估每条请求的确切计划操作,并返回单一的审批决定。

两点定位值得注意。第一,它不创建持久的允许规则,每次决定只适用于单条审批请求,不会形成累积放行。第二,审查行为始终 fail-closed:审查超时按拒绝处理,宁可不放行。

核心功能

Guardian trunk 与并发审查

每个父代理有一个可复用的 Guardian trunk,审查请求优先走这条路径。trunk 忙时,插件启动独立的临时审查者处理请求,并发审批不会排队。审查者代理使用空的工具允许列表和专属的审查 persona,能力被限制在“读转录、给决定”范围内。

独立的审查者模型路由

审查者可以使用与父代理不同的模型:插件级配置 modelProvidermodel 指定审查路由;也可以通过 modelOverrides 按父模型 id 覆盖 provider 与 model。缺省的路由字段可通过 fallback 配置从父代理继承。

有界的输入输出

发送给审查的父转录与工具参数均做长度上限,避免长会话撑爆审查上下文。拒绝理由在进入父转录之前也做长度限制,防止一条冗长的拒绝说明污染父代理的对话。

拒绝熔断与审计

重复自动拒绝会触发熔断,终止父回合,避免代理在反复被拒后陷入循环。所有被审查的命令与审查者判定写入持久的 JSONL 审计日志。

安装与启用

先安装插件。以 profile web 为例,从 GitHub 安装:

dsh plugin --profile web add github:perlied03/dsh-approval-auto-review

本地 checkout 安装:

dsh plugin --profile web add ./dsh-approval-auto-review

环境要求:Node ^22.19.0 || >=24.0.0,包管理器 pnpm@11.7.0。GitHub 安装会执行包的 prepare 构建;pnpm 10 及以上版本在询问构建许可时,需要在 profile 的 pnpm-workspace.yamlallowBuilds 下加入 dsh-approval-auto-review: true,然后重复上面的安装命令。

主机组合需要提供以下 DSH 服务与插件:

  • dsh-agent
  • dsh-session
  • dsh-settings
  • dsh-user-approval
  • dsh-subagent
  • 按配置名注册的进程内 spawn 与 fork provider

启用方式:在对话的权限菜单选择 Approve for me,后续审批请求即路由给 Guardian;切回 Request approval 则恢复人工决定。

配置示例

在 Cordis 组合中注册插件的写法:

import * as ApprovalAutoReview from 'dsh-approval-auto-review'

await ctx.plugin(ApprovalAutoReview, {
  provider: 'spawn',
  ephemeralProvider: 'fork',
  modelProvider: 'deepseek-official',
  model: 'deepseek-v4-flash',
  fallback: 'parent',
})

等价的 Loader 配置:

- id: approval-auto-review
  name: 'dsh-approval-auto-review'
  config:
    provider: spawn
    ephemeralProvider: fork
    modelProvider: deepseek-official
    model: deepseek-v4-flash
    fallback: parent

字段含义:provider 是可复用 Guardian trunk 使用的子代理 provider;ephemeralProvider 是并发一次性审查使用的 provider;modelProvidermodel 指定审查者的模型路由;fallback 设为 parent 时,缺失的路由字段从父代理继承。不需要并发路径的部署,两个 provider 可以填同一个名字。

审计相关的行为:audit 控制是否记录每条终局审查结果;auditPath 指定审计文件路径,在挂载时固定,修改需重启后生效。

审查策略

Guardian 只评估审批请求所提供的确切操作,不扩大审查范围。授权证据的分级是明确的:用户的直接消息与 AGENTS.md 显式加载的内容为可信授权证据;助手消息、工具调用/结果、文件内容、命令输出以及普通插件上下文均视为不可信。也就是说,模型自己在对话里生成的“用户已同意”之类的表述,不会被当作放行依据。

Web 界面

插件提供两处 Web 界面:

  1. 设置页 Plugins 区的 Automatic approval review 卡片,用于调整审查者的模型路由。
  2. 对话头部的只读 Review 标签页,用于查看当前会话的审查记录与审查者判定。该标签页需要 dsh-host-webserver 提供只读审计路由;audit 设为 off 时历史为空。

适用场景与注意

适合在 DSH 上跑长任务、希望减少逐条人工审批打断、同时又不想完全放开权限的开发者。它把审批决定交给一个受约束的审查代理,并保留了完整的审计与熔断兜底。

使用前注意几点:

  1. 插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(MIT)。
  2. 行为始终 fail-closed:超时的审查按拒绝处理。
  3. 不创建持久允许规则,每次决定只作用于单条审批请求。
  4. auditPath 在挂载时固定,改路径需要重启后生效。

结尾

dsh-approval-auto-review 在“全程人工审批”与“完全放开”之间给出了第三种选择:一个工具列表为空、输入输出有界、fail-closed 的 Guardian 代理替你看每一条待审批操作,并留下 JSONL 审计记录。对需要在自动化与安全之间找平衡的 DSH 用户来说,值得试一试。

  • 社区目录页:https://www.skillhub.cn/plugins/perlied03/dsh-approval-auto-review
  • GitHub 仓库:https://github.com/perlied03/dsh-approval-auto-review

社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

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

小夜