dsh-sandbox-escalation-fix:按会话投影沙箱升级 Schema,修复第三方模型工具调用循环

前言

在 DeepSeek Harness(DSH)里用 GPT 等第三方模型跑 Agent 时,常见一类失败:会话已是 All Access(danger-full-access + approval=never),模型却仍从 bashpwshwriteedit 的 Schema 里看到 sandbox_permissionsjustification,填参后在校验阶段被拒,然后换参数重试,陷入循环。

DSH 0.1.0-rc80.1.1-rc.10.1.1-rc.2 通过 approval=never 的运行时提示做了部分改善,但工具注册仍暴露静态升级字段,执行期校验逻辑未改;0.1.1-rc.2 的更新集中在图像处理,与本问题无关。下面介绍社区插件 dsh-sandbox-escalation-fix:按每个 Session 的实时 Sandbox Mode 与 Approval Policy 投影模型可见 Schema,零配置安装到 Profile 后即可生效。

这是什么

dsh-sandbox-escalation-fix 由社区维护者 JUSTMONIKA2022 发布,分类为 admin-security,当前包版本 0.1.1-rc2,许可证 MIT。它是独立社区插件,不由 DeepSeek 官方发布或背书,也不修改 DSH 核心包。

一句话定位:让 DSH 只向模型展示当前会话真正能用的沙箱升级选项,并在执行前对同模式冗余升级请求做最小兜底。

若你遇到过下列错误,README 标明插件即针对此类场景:

Error: invalid justification: expected a non-empty sentence
Error: sandbox escalation to "danger-full-access" is not strictly wider than this call's current "danger-full-access" mode
Error: sandbox escalation to "workspace-write" is not strictly wider than this call's current "danger-full-access" mode

核心功能

按会话动态投影工具 Schema

DSH 工具注册时公开静态升级字段,但真正可请求的升级目标取决于 Session 当前的 Sandbox Mode 与 Approval Policy。本插件在 Agent Exact Scope 内按实时状态投影模型可见参数:

当前模式 审批策略 模型看到的结果
read-only ask workspace-writedanger-full-access
workspace-write ask danger-full-access
danger-full-access ask 不展示升级参数
任意模式 never 不展示升级参数

投影覆盖 bashpwshwriteedit;Native Tool Call 与 Code Mode SDK 读取同一份定义,避免「一边修好、另一边仍误导模型」。

执行期最小兜底

requestedMode === effectiveMode 时,包装器删除冗余的 sandbox_permissionsjustification 后委托原工具执行。降级请求、非法目标、缺失配对参数和真实升级请求仍交给 DSH 原有校验;插件不自动填充虚假 justification,不绕过 approveEscalation() 的严格变宽检查。

清理矛盾的升级提示

会话无合法升级目标时,插件会裁剪 Shell 工具描述中的升级引导段落,并清理 Shell、文件工具、job_output 结果里已不成立的 escalation available 提示,避免参数 Schema、工具描述与失败输出互相矛盾。

生命周期与多 Session 隔离

插件按 Agent/Session 独立包装,监听 Agent 创建、销毁、Preset 切换与 agent.ctx.tools.restrict() 等事件;动态限制解除后无需重建 Agent 即可恢复投影。同一进程内不同 Session 互不影响。README 记载自动测试 28 项,覆盖 Schema 投影、Code Mode SDK、动态限制、多 Agent 隔离与卸载等路径。

安装与启用

安装前建议先在实际 Profile 上复现同类错误;DSH 0.1.0-rc8 / 0.1.1-rc.1 / 0.1.1-rc.2 用户尤应先观察内置行为,确认仍有问题再安装。安装或升级前须完全关闭 DSH。

命令行安装(推荐)

README 建议从可信仓库锁定 Commit SHA,安装到指定 Profile:

dsh plugin --profile <profile> add github:JUSTMONIKA2022/dsh-sandbox-escalation-fix#<commit-sha>

<profile> 换成实际 Profile 名(如 web),<commit-sha> 换成你审核过的提交哈希。Git 安装会运行包的 prepare 构建脚本;pnpm 10 首次可能拒绝执行,按 DSH 输出在该 Profile 的 pnpm-workspace.yaml 中加入:

allowBuilds:
  dsh-sandbox-escalation-fix: true

然后重新执行安装命令,并用下列命令确认插件层已加载:

dsh --profile <profile> --dump-config

输出中应包含 dsh-sandbox-escalation-fix 层和 sandbox-escalation-fix 行。

Release 一键安装(Windows)

0.1.1-rc1 Release 包提供 install-release.ps1.tgz,适用于 DSH rc5、rc6、rc7、rc8、0.1.1-rc.10.1.1-rc.2。在 Release 目录打开 PowerShell,安装到默认 web Profile:

powershell -NoProfile -ExecutionPolicy Bypass -File ".\install-release.ps1"

脚本定位同目录唯一的 .tgz 并执行 dsh plugin --profile web add <tgz-absolute-path>。安装到其他 Profile 时加 -Profile headless 等参数。完成后重启 DSH。

卸载

dsh plugin --profile <profile> remove dsh-sandbox-escalation-fix

卸载后再次执行 --dump-config,确认输出中不再出现 dsh-sandbox-escalation-fix 层。

典型用法

插件为零配置:安装到实际使用的 Profile 后,按原方式启动即可,无需改模型配置、Sandbox Mode 或 Agent Preset:

dsh --profile <profile>

验证修复时,README 建议:

  1. 用安装插件的 Profile 启动 DSH。
  2. 选择原先在 All Access 下受影响的 OAI 系列模型。
  3. 将权限设为 All Access(danger-full-access + Approval Policy never)。
  4. 新建 Session,让 Agent Scope 在插件已加载状态下创建。
  5. 要求模型执行简单 Shell 命令或写入工作区文件。

修复生效时,bashpwshwriteedit 的模型可见 Schema 不再包含 sandbox_permissionsjustification;即使模型发送同模式冗余升级参数,工具也会删除该对参数后正常执行。

适用场景与注意

适合谁: 在 DSH All Access 或 approval=never 下使用 GPT 等第三方模型,且 bashpwshwriteedit 因沙箱升级参数在校验阶段反复失败的用户。

版本要求: Node.js ^22.19.0>=24.0.0@deepseek-ai/dsh-* 支持 0.1.0-rc.50.1.0-rc.80.1.1-rc.10.1.1-rc.2@deepseek-ai/cordis 4.0.1。混装不同 rc 版本会拒绝启动。

安全边界: 插件不修改 DSH 安装目录或核心包,不在 approval=never 时自动批准升级,不授予额外权限。approveEscalation()、审批流程与一次性授权语义保持原样。

插件协作: 本插件占用 Agent Exact Scope 中的 bashpwshwriteedit。另一包装插件须实现 Symbol.for('dsh.tool-wrapper.v1') 协议方可链式协作;未实现协议时 Agent 注册会明确失败,需用户择一保留。

安装前自查: 插件以当前 DSH 进程权限运行,安装前应阅读源码与 MIT 许可证,确认行为符合你的安全策略。SkillHub 社区目录(https://www.skillhub.cn/plugins/JUSTMONIKA2022/dsh-sandbox-escalation-fix)为独立站点,与 DeepSeek / 幻方无官方从属关系;访问时若页面不可用,可直接以 GitHub 仓库为准。

小结

dsh-sandbox-escalation-fix 从根因侧解决第三方模型在 DSH 下的沙箱升级 Schema 与实时会话状态不一致问题:按 Session 投影可见参数、清理无效升级提示,并对同模式冗余请求做克制兜底。零配置安装到 Profile 后即可恢复 bashpwshwriteedit 的连续调用。

  • SkillHub 目录:https://www.skillhub.cn/plugins/JUSTMONIKA2022/dsh-sandbox-escalation-fix
  • GitHub 仓库:https://github.com/JUSTMONIKA2022/dsh-sandbox-escalation-fix
羽毛球分组比赛记分
小程序二维码

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

小夜