Marsax110/dsh-model-fixer0

dsh-model-fixer

模型无关的沙箱升级修正 + 按模型定制的协议提示段:任何模型(GPT 系最常见)在工具调用中错误携带 sandbox_permissions/justification 导致 "not strictly wider" 死循环时,在工具执行前自动剥离;并按会话模型动态注入适配该模型的协议提示段。

包名
dsh-model-fixer
版本
0.1.0
许可证
MIT
最近更新
2026年8月25日

安装

此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗

dsh-model-fixer

模型无关的沙箱升级修正 + 按模型定制的协议提示段。

针对代理进 DeepSeek Harness 的模型(GPT 系最常见,但任何模型都可能)在工具调用中 错误携带 sandbox_permissions / justification 导致的 sandbox escalation ... is not strictly wider ... 死循环。

社区项目,非 DeepSeek 官方插件。

先回答两个问题

Q:这个插件只针对 GPT 吗?

A:不是。它由两部分组成,务必分清:

部分范围说明
剥离tools/execute模型无关任何模型只要在工具调用里带了无效的 sandbox_permissions/justification,执行前就被剥离。GPT 只是最常见的触发者;DeepSeek 等从不发这些参数的模型是纯 no-op
提示段systemPrompt按模型定制默认只给 GPT 系(targetModels: ['gpt'] / targetProviders: ['openai'])注入协议提示段;其他模型按需配置(见「做你自己的 fix」)

Q:我怎么知道自己的模型需不需要它?

A:看「如何发现你自己的模型的问题」。装好后什么都不用做——剥离对所有模型自动生效; 如果日志里出现 [dsh-model-fixer] 已剥离 ...,说明你的模型就是需要修正的那类。

它解决的问题(以 GPT 为例)

dsh 的沙箱升级协议要求请求模式严格更宽于当前生效模式 (read-onlyworkspace-writedanger-full-access)。满权限下没有任何更宽模式, 因此任何携带 sandbox_permissions 的调用立即失败:

Error: sandbox escalation to "" is not strictly wider than this call's current "" mode

GPT 系模型即使系统提示已说明不要设置,仍会带上这些参数,并在报错后「切换权限档位重试 同一条命令」——形成无限重试循环(真实会话连续报 7 次相同错误后才被中止)。 因为工具 schema 是 registry-global 的,无法按会话对模型隐藏字段,最稳妥的修复点在执行时

插件做什么

  1. 剥离(模型无关,auto 模式):
    • 非严格更宽的升级请求(同档、降档、未知目标、字段不配对、审批通道缺失)→ 剥离参数, 命令在会话当前权限下直接执行,不再报错;
    • 真正更宽、且审批通道可用的升级 → 放行,走 dsh 正常的单次操作审批流。
    • 剥离发生时打印 [dsh-model-fixer] 日志(logStrips,默认开)——这是你发现 「自己的模型有问题」的第一信号。
  2. 提示段(按模型定制):命中 targetModels / targetProviders 的会话才渲染 协议提示段;非命中会话(如 DeepSeek)的系统提示不含该段。

如何发现「你自己的模型」的问题

现象含义怎么处理
日志出现 [dsh-model-fixer] 已剥离 ...(模型 X)你的模型在工具调用里错误携带升级参数,已被自动剥离无需处理,已兜底;可顺手把 targetModels 加上 X,让它也收到协议提示段
满权限下工具调用报 not strictly wider死循环正在发生插件已拦截;确认安装生效(见「验证」)
invalid escalation: sandbox_permissions requires a justification字段不配对插件已剥离兜底
命令能跑,但模型反复「换权限档位重试」死循环被剥离打断正常,观察日志即可
系统提示里看不到协议段targetModels/targetProviders 没命中你的模型调配置(见下)
协议段文案不适合你的模型默认文案是 GPT 视角sectionText 写你自己的文案

做你自己的 fix(不写代码)

安装后编辑 profile cordis.patch.yml 中该插件的 config

- insert:
    - id: dsh-model-fixer
      name: dsh-model-fixer
      config:
        strip: auto                  # auto | true | false
        targetModels: [gpt]          # 命中才注入提示段(大小写不敏感子串)
        targetProviders: [openai]    # provider 命中才注入
        # sectionText: |             # 换成你自己模型的协议文案
        #   # 你的模型专属规则……
        # logStrips: true            # 剥离时打印诊断日志
选项默认含义
strip'auto'true 总是剥离;false 从不;'auto' 剥离非严格更宽的升级请求,合法升级放行
targetModels['gpt']注入提示段的模型名匹配
targetProviders['openai']注入提示段的 provider 匹配
sectionName'gpt:harness-protocol'提示段名
sectionOrder5渲染顺序
sectionText内置 GPT 文案自定义协议提示段正文
logStripstrue剥离时用 ctx.logger.warn 记录,便于发现模型问题

示例:给 Claude 用 →

config:
  targetModels: [claude]
  targetProviders: [anthropic]
  sectionText: |
    # dsh 工具协议(Claude 适配)
    1. 常规调用不要填写 sandbox_permissions / justification……
    2. 需要越界访问时,只此一次重发并带 danger-full-access + justification……

做你自己的 fix(扩展插件,模型有别的怪癖时)

剥离只处理「乱带升级参数」这一类问题。如果你的模型还有其他工具调用怪癖:

  1. fork 本仓库,在 index.mjsctx.on('tools/execute', ...) 监听器里加你的修正逻辑 (同一扩展点,可读取 exec.name / exec.arguments / exec.agent.options);
  2. 需要给特定模型注入专属提示时,用 sectionText(字符串)或改 text 函数;
  3. 把有用的配置/文案共享回来:提 Issue / PR,或在本仓库 Discussion 里贴你的配置。

安装(非 bundle 插件,HMR 实时生效、无需重启)

  • 在 DeepSeek Harness 插件管理里安装 github:Marsax110/dsh-model-fixer, 或 dshpm install github:Marsax110/dsh-model-fixer --profile web
  • 安装后写入 profile 的 cordis.patch.ymldsh-plugin-manager:managed 区块), config HMR 立即生效。

验证

npm test   # 单元测试:剥离判定(true/false/auto)+ 模型门控 + 自定义文案 + 诊断日志

安装后:用 GPT 会话确认工具调用不再报 not strictly wider;日志出现 [dsh-model-fixer] 说明剥离在工作;DeepSeek 会话的系统提示不含协议段。

许可证与归属

MIT。本插件由社区 preset MirageEarl/dsh-gpt-standard (MIT)的守卫插件演化而来;协议文案参考 DeepSeek Harness 的沙箱升级协议。见 NOTICE。 DeepSeek 与 DeepSeek Harness 均为其权利人所有。