前言¶
在 DeepSeek Harness (DSH) 中,当沙箱策略拒绝一次写入操作时,模型通常需要发送第二次调用,并在请求中携带 sandbox_permissions 和 justification,用户才能看到批准卡片。这种机制导致轮次浪费,且模型必须重复工具调用逻辑。
dsh-approval-first 插件通过影子工具机制,在沙箱策略拒绝写入之前,直接向用户展示批准卡片。这使得模型无需重复调用工具,用户也能在第一次看到请求时进行审查。
插件介绍¶
定位:DeepSeek Harness (DSH) 插件,用于实现“先批准后编辑/写入”的安全控制。
维护者:joao-paulo-santos
核心价值:拦截模型意图,在策略允许前进行人工介入,减少模型无效重试,提供更清晰的审查对象(diff 而非模型生成的 prose)。
核心功能¶
-
影子工具拦截
插件通过影子工具在模型重复调用前添加一个批准步骤。如果模型尝试执行一个会被当前沙箱策略拒绝的突变,系统会先展示批准卡片,而不是让模型发送带有sandbox_permissions的第二次调用。 -
静默与弹窗区分
- 在策略内的写入:保持静默,行为与 DSH 原生工具一致。
- 在策略外的目标:获得批准卡片,用户首次看到请求。
-
“先读”门控
系统检查“先读”门控。如果已发布的edit工具会拒绝一个从未被读取的文件(例如edit requires reading "..." first),插件会自动退让,让模型走原生路径并直接获得 harness 的错误提示,避免浪费批准卡片。 -
漂移感应器
由于影子工具是基于冻结副本工作的,插件在启动时会进行校验。如果 DSH 更新导致底层edit或write工具定义发生变化,漂移感应器会拒绝插件启动,防止提供过时的行为。
安装与启用¶
该插件需要在一个 DeepSeek Harness 的检出目录下安装,并指定一个 profile(例如 web)。
- 克隆仓库:
git clone https://github.com/joao-paulo-santos/dsh-approval-first
- 从 Harness checkout 目录安装插件:
pnpm dsh plugin --profile web add /path/to/dsh-approval-first
- 验证配置组合成功:
pnpm dsh --profile web --dump-config
安装后,插件会自动激活,无需额外的配置文件。它适用于任何模式不是 danger-full-access 的会话。
工作原理¶
- 注册机制:影子工具注册在代理(agent)级别,并跟随会话的当前模式。在会话中途切换模式(例如从
read-only切换到workspace-write)时,影子工具会立即生效或停用。 - 审查对象:批准卡片上显示的审查对象是 diff(差异),而不是模型生成的文本描述。
- 拒绝处理:如果用户拒绝批准,结果是一个正常的拒绝结果(
edit rejected by the user; file unchanged),而不是红色的错误。
适用场景与注意事项¶
适用场景:
* 需要在沙箱限制下严格审查模型对文件系统的写入操作。
* 希望在第一次尝试写入时获得用户批准,而不是等待模型重试。
注意事项:
1. 过渡性存根:该插件目前是一个过渡性存根,预期未来会被 DSH 原生的一轮升级机制取代。
2. 作用范围:仅影响 edit 和 write 工具。Bash 命令保持其经典升级路径。
3. 插件冲突:如果另一个插件已经为某个代理影子了 edit 或 write 工具,该代理会被跳过,避免影子工具冲突。
4. 启动条件:插件要求 profile 的默认模式不是 danger-full-access,否则不会激活。
5. 许可证:MIT 许可证。
总结¶
dsh-approval-first 通过在 DSH 生态中引入影子工具机制,优化了受限沙箱环境下的审批流程。它减少了模型的无谓重试,将审查对象聚焦于代码差异,并在插件底层工具定义发生变化时提供保护。