前言¶
在 DeepSeek Harness(DSH)里,写文件、跑命令一类工具往往需要逐条弹出官方审批卡。写/命令类工具又是独占调度:第一张卡没处理完,后面的调用都会被堵住。Agent 没法「等以后审批齐了再一起执行」,只能让你一次次被打断。
社区插件 dsh-approval-ledger(维护者 yingcai233333,npm 包名 dsh-approval-ledger)面向同一类场景:先把一批操作声明成计划、一次审阅批准,再在每次真实调用时做风险门控,并把自动/手动决策记进可审计账本。它不替换 DSH 自带的计划卡、审批卡、问题卡,而是在官方 UI 之上接线;读不到、认不出或异常时一律回落官方审批(fail-closed)。
这是什么¶
一句话:为 DSH 提供批量审批、风险门控和可追溯决策账本的 Cordis 插件。
- 目录页:skillhub.cn/plugins/yingcai233333/dsh-approval-ledger(分类:admin-security)
- 源码与文档:github.com/yingcai233333/dsh-approval-ledger
- 许可证:MIT;运行要求 Node.js ≥ 22;DSH 版本
>=0.2.1-rc.2 <0.3.0-0(见package.json) - npm
latest为 1.1.1(README 写明;next仍为0.2.0-beta.15)
对外能力在目录元数据里写得很清楚:Host 侧提供工具 request_approvals 与命令 /approvals。
核心功能¶
一批一个计划,而不是一条条弹窗¶
Agent 调用 request_approvals 把本批操作交成清单,走官方 plan-review 卡;批准后再走官方多选,你只授权想授权的项,未勾选项保持 manual。计划项可声明 dependsOn,依赖消耗完才解锁下游。
默认是 observe-only:计划会被审查,但每次实际调用仍走官方审批卡;grant 只做模拟并记为 would-allow,不会返回真正的 allowed-once。要在计划范围内对 medium 风险自动放行,必须在配置里显式设 mode: active——这不是默认行为。
风险门控¶
每次真实工具调用会重新评估风险(assessRisk 为确定性建议,不替你做最终决定):
| 等级 | 自动放行策略(在 mode: active 且范围匹配时) |
|---|---|
| medium | 可配置自动放行 |
| high | 默认手动;需 opt-in(allowHighRiskGrants)且二次确认 |
| critical | 永不自动 |
| unknown | 一律手动 |
自动放行要过两道门:计划范围匹配 且 本次调用风险等级允许。路径匹配会解析 symlink/junction 的真实目标;硬链接按高风险处理(手动)。含 shell 元字符、解释器、脚本等特征的命令不参与自动匹配。grant 只在内存、按 session、按 turn;turn 结束、卸载或重启即失效。
决策账本与审计¶
/approvals audit(可加 --json)把审批、计划、拒绝和归属列清楚;审计格式 v1 已冻结,见仓库 docs/audit.md。账本不记录完整参数、命令、reason 或密钥;缺失记录会从持久事实派生并标注,不猜测。
另有 /approvals grants、/approvals sessions(只读展示各会话授权计数,不跨会话复用授权)。
ask_choices 与提醒¶
ask_choices 通过官方问题卡做结构化单选/多选;选项与补充内容会原样回传给模型(不再只回「已收到 N 个问题的选择」)。
Windows 下可对计划卡、问题卡、审批卡、每轮对话完成等事件做任务栏闪烁与合成提示音;完成提醒还可带任务栏绿色 overlay 徽标。子代理的内部 turn 不触发完成提醒。各项提醒可在 YAML 或 DSH 设置里单独关闭(见下文)。
设置面板(1.1.0+)¶
DSH 设置 → 「审批与提醒」(entry id approval-ledger)提供 10 个开关,即点即存,经 configForms 原子写入当前 profile 的 cordis.patch.yml 并热应用。mode、allowHighRiskGrants、审计保留期等策略项仍只在 YAML 维护,不进面板,避免误 weakening 审批策略。
安装与启用¶
安装命令以 README 为准(不要用 github:owner/repo 自行拼接):
dsh plugin --profile <profile> add dsh-approval-ledger@1.1.1
显式开启 medium 自动放行时,在对应 profile 的 cordis.patch.yml 里为该插件行增加配置:
# cordis.patch.yml 中该插件行
- id: approval-ledger
config:
mode: active
high 仍需 opt-in + 二次确认;critical 永不自动;unknown 保持手动。
提醒相关配置示例(可与 mode 同块合并):
- id: approval-ledger
config:
mode: active
notifications: true
notifyOnPlan: true
notifyOnQuestion: true
notifyOnApproval: true
notifyOnTurnEnd: true
turnEndOnlyWhenAway: true
flashWindow: true
soundAlert: true
notifyRepeatSeconds: 0
turnBadgeSeconds: 120
提醒为 best-effort:找不到窗口、PowerShell/EDR 拒绝或系统静音时会静默跳过,不影响审批本身。
典型用法¶
1. 让 Agent 交批计划
由模型在合适时机调用 Host 工具 request_approvals(参数结构见仓库设计文档)。你在计划审阅卡里看到每项操作、风险、依赖与阶段,批准后勾选要授权的项。
2. 查账本
在 DSH 会话里执行:
/approvals audit
需要机器可读输出时:
/approvals audit --json
3. 结构化提问(不执行、不改授权)
Agent 调用 ask_choices;你在官方问题卡中选择,选中文本回到模型上下文。
4. 只观察、不自动放行
不配置 mode: active 或保持默认时,插件仍会组织计划与记账,但每次真实调用仍走官方审批卡,grant 记为 would-allow。
适用场景与注意¶
适合谁
- 经常让 Agent 连续改多文件、跑多条命令,希望先看清整批再批准的人。
- 需要在
mode: active下对 medium 风险做可控自动放行,同时保留 high/critical/unknown 的手动或更强约束的人。 - 希望用
/approvals audit事后核对「谁批了什么、自动还是手动」的人。
务必知晓
- 插件以 当前 DSH 进程权限 运行;安装前请阅读源码、威胁模型 与 MIT 许可证,自行判断是否用于你的环境。
- 这是 非官方社区插件,与 DeepSeek 无隶属关系;SkillHub 目录站亦与 DeepSeek / 幻方无官方从属关系。
- 安全模型强调 fail-closed:任何异常、解析失败或不匹配都回退官方审批;不要指望插件在模糊情况下「帮你猜」。
结尾¶
dsh-approval-ledger 把「一批操作 → 一次计划审阅 → 按风险门控执行 → 账本可追溯」串成一条可配置的流水线,并保留 DSH 原生审批与问题卡体验。若你要试用或核对版本,可从目录页进入说明,或直接在 npm 安装 1.1.1。