前言¶
在 DeepSeek Harness(DSH)里做 vibe coding 时,工具调用往往要等人点审批。请求堆在对话里、模型同步等着,一轮任务很容易卡死。常见补救是「按权限类别一次性放行」,但那样批准的是整类能力而不是某一件具体的事,授权面会悄悄变大,事后也很难对照「批了什么」和「实际跑了什么」。
下面介绍社区插件 dsh-approval-preflight(GitHub:Making-acid/dsh-approval-preflight,维护者 Making-acid,分类 admin-security,当前 package 版本 2.0.0,MIT)。它把流程改成:模型先提交带语义节点的计算图,你在侧栏按节点批准;一次批准只覆盖该节点的一次成功执行,未申报的操作仍走原生审批卡,节点内留有审计痕迹。
这是什么¶
dsh-approval-preflight 是 DSH 的 Host + Web 客户端插件:在 Cordis 侧注册模型工具、拦截审批、挂审计;在浏览器侧注入计算图与节点面板。权限只能由用户授予——模型没有工具能代替你批准节点,面板走带登录凭据的宿主通道。
社区目录页:SkillHub · making-acid/dsh-approval-preflight。目录简介仍提到「按粗粒度权限类别批量授权」;插件 README 明确 v1 该做法已废弃,v2 以计算图节点为授权单位。本文以 GitHub README 与 package.json 为准。
核心功能¶
计算图与批准语义¶
- 模型用
preflight_graph提交计算图(goal+nodes),每个节点写清这件事的本质(动作、来源、目标等),并标出会碰外部世界的范围; - 你在右侧面板按依赖顺序逐节点点「批准」——批准的是「这件事」,不是某一条具体命令;
- 批准后模型调用
preflight_node_start{id}开始执行;执行期间,节点impacts覆盖的工具调用自动放行,超出范围的退回原生审批卡; preflight_node_end{id, success}结束节点:成功则消耗该次批准,失败则保留批准可重试;- 需要追加工作时用
preflight_graph_append,不会作废旧批准;preflight_status可查看待批准、执行中、已完成等状态。
与 v1「点一次 = 本会话同类全免审」相比,v2 越界不会静默放行,失败重试不必重新点头,并有节点级审计。
影响类型与放行范围¶
插件把工具归类为三类影响(其余不参与自动放行):
| 影响类型 | 覆盖的工具 |
|---|---|
fs-write |
write / edit |
exec |
pwsh / bash |
network |
web_fetch / web_search |
terminal_* 与 MCP 工具不自动放行:前者难以定义「一次调用」边界,后者无法统一归类。插件也不接管原生审批卡——临时在原生卡上点批准只生效一次,不产生节点批准。
面板与审计¶
面板顶部展示目标与计数;计算图概览用圆点表示节点状态,待批准项带徽标。节点卡展示影响类型、标题、语义字段、依赖与说明。待批准可操作「批准 / 拒绝」,已批准可「撤销批准」,执行中不可操作。有历史的节点可展开「查看实际执行」,逐条记录工具、摘要与成败(不保存完整参数/输出)。
配置¶
在 DSH 插件配置中可调整(字段名以 README 为准):
- id: approval-preflight
config:
approvalTimeoutSeconds: 90 # 节点未覆盖的审批等待多久后让路;0 = 关闭让路
nodeIdleSeconds: 600 # 节点执行超时自动关闭(不消耗批准)
maxNodes: 80 # 计算图节点上限
wakeOnGrant: true # 用户批准后主动唤醒模型
状态与断点续跑¶
无独立数据库:图来自 preflight_graph / preflight_graph_append 参数,批准来自用户消息标记 [[preflight:approve:<版本>:<节点>]],执行区间来自 preflight_node_start / preflight_node_end,审计来自区间内的 tool/call 与 tool/result。重启后按事件顺序回放;回放异常(缺 start、版本不匹配、未知节点)fail-closed,相关批准按未批准处理。
安装与启用¶
DSH 生态里插件通常通过 Harness 安装;SkillHub 目录为该插件提供「发送给 DeepSeek Harness 安装」的指引,插件标识为 Making-acid/dsh-approval-preflight。安装前请在 GitHub 仓库 阅读 README、docs/grant-model.md 与源码,确认授权模型与信任边界是否符合你的环境。
package.json 中 dsh.client 会在 Web 平台立即注入对话与布局相关 UI 模块;Host 入口为 index.js,并通过 cordis.patch.yml 参与 bundle。目录站 SkillHub 与 DeepSeek / 幻方无官方从属关系,它是社区插件索引,不是官方应用商店。
典型用法(模型侧工作流)¶
经过上面的安装与配置后,模型侧应按 README 约定顺序使用工具。节点常用字段包括:id、title、effect、action、source、target、details、note、dependsOn、impacts、escalate、permission。
- 调用
preflight_graph,提交目标与节点列表; - 等待用户在面板批准目标节点;
- 调用
preflight_node_start{id},在impacts范围内执行写文件、命令或联网等操作; - 未覆盖的调用会弹原生卡;若开启
approvalTimeoutSeconds,等待超时后调用快速失败,模型可切换其他节点继续工作; - 调用
preflight_node_end{id, success}收尾;中途新增步骤用preflight_graph_append。
维护者在仓库中提供离线验证命令(需在克隆后的插件目录执行,此处仅作能力说明):
npm test
# 或分别运行:
node scripts/selftest.mjs
node scripts/contract-test.mjs
node scripts/client-test.mjs
README 写明真机链路已验证:计算图登记、面板渲染、节点批准、执行放行、审计与日志重建。
适用场景与注意¶
适合谁:需要在 DSH 里长时间跑多步任务、又不想被逐条命令审批拖死,同时又希望「批的是一件事、不是整类权限」的团队或个人;分类 admin-security,适合把审批当成管理面能力来用的场景。
务必知晓:
- 插件以当前 dsh 进程权限运行,安装前应检查源码与 MIT 许可证,理解它拦截与放行哪些工具调用。
- 语义不可验证:插件无法证明 shell 命令是否真的做了节点描述的事;信任边界靠你的批准 + 节点级审计事后核对。
- 同一时刻只允许一个执行中节点,不能并行跑两个节点,换干净的审计归属。
- 已知限制还包括:不记录完整工具参数/输出;原生卡临时批准与节点批准是两套机制。
结尾¶
dsh-approval-preflight 把 DSH 审批从「整类放权」收束到「计算图节点 + 一次成功执行」,未申报操作仍走原生卡,超时让路避免整轮挂死,并保留节点审计。若要安装或查看元数据,可打开 SkillHub 目录页 与 GitHub 仓库。