前言¶
在 DeepSeek Harness(DSH)里用 GPT 等第三方模型跑 Agent 时,常见一类失败:会话已是 All Access(danger-full-access + approval=never),模型却仍从 bash、pwsh、write、edit 的 Schema 里看到 sandbox_permissions 和 justification,填参后在校验阶段被拒,然后换参数重试,陷入循环。
DSH 0.1.0-rc8、0.1.1-rc.1、0.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-write、danger-full-access |
workspace-write |
ask |
仅 danger-full-access |
danger-full-access |
ask |
不展示升级参数 |
| 任意模式 | never |
不展示升级参数 |
投影覆盖 bash、pwsh、write、edit;Native Tool Call 与 Code Mode SDK 读取同一份定义,避免「一边修好、另一边仍误导模型」。
执行期最小兜底¶
当 requestedMode === effectiveMode 时,包装器删除冗余的 sandbox_permissions 与 justification 后委托原工具执行。降级请求、非法目标、缺失配对参数和真实升级请求仍交给 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.1、0.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 建议:
- 用安装插件的 Profile 启动 DSH。
- 选择原先在 All Access 下受影响的 OAI 系列模型。
- 将权限设为 All Access(
danger-full-access+ Approval Policynever)。 - 新建 Session,让 Agent Scope 在插件已加载状态下创建。
- 要求模型执行简单 Shell 命令或写入工作区文件。
修复生效时,bash、pwsh、write、edit 的模型可见 Schema 不再包含 sandbox_permissions 和 justification;即使模型发送同模式冗余升级参数,工具也会删除该对参数后正常执行。
适用场景与注意¶
适合谁: 在 DSH All Access 或 approval=never 下使用 GPT 等第三方模型,且 bash、pwsh、write、edit 因沙箱升级参数在校验阶段反复失败的用户。
版本要求: Node.js ^22.19.0 或 >=24.0.0;@deepseek-ai/dsh-* 支持 0.1.0-rc.5~0.1.0-rc.8、0.1.1-rc.1、0.1.1-rc.2;@deepseek-ai/cordis 4.0.1。混装不同 rc 版本会拒绝启动。
安全边界: 插件不修改 DSH 安装目录或核心包,不在 approval=never 时自动批准升级,不授予额外权限。approveEscalation()、审批流程与一次性授权语义保持原样。
插件协作: 本插件占用 Agent Exact Scope 中的 bash、pwsh、write、edit。另一包装插件须实现 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 后即可恢复 bash、pwsh、write、edit 的连续调用。
- SkillHub 目录:https://www.skillhub.cn/plugins/JUSTMONIKA2022/dsh-sandbox-escalation-fix
- GitHub 仓库:https://github.com/JUSTMONIKA2022/dsh-sandbox-escalation-fix