Replies: 2 comments
|
核验通过(对照 main HEAD 1. 根因确认。 2. 增量点一:现有测试会破。 3. 增量点二:工具层 validation 在 approveEscalation 之前,只改 escalation 覆盖不到"不带 justification"的模型。 三个强制执行族在入口先跑 4. 安全性评估同意。 同模式授予的就是当前已有权限;更窄请求(schema 层 综合:你的补丁 + 测试更新 + (可选)工具层同模式短路,三件套就是完整 PR。需要的话我可以补一份带回归测试的完整 diff。 |
|
补上了:cherry-pick-ready 分支 https://github.com/zoahdev/deepseek-harness/tree/fix/escalation-same-mode-pass-through 内容 = 提案补丁 + 测试更新(同模式放行 ×3 用例 + 非更宽夹具改为真正更窄/不可比的对)。验证(2026-08-19,Windows / Node 24 / pnpm 11):
工具层同模式短路(跳过 validateEscalationArgs 的那半)我留在分支外——它需要在 validation 时就有 effectiveMode 上下文,值得单独评估,防止把不相关改动塞进一个最小修复。待 PR 通道开放时可 cherry-pick。 |
Uh oh!
There was an error while loading. Please reload this page.
问题
部分模型习惯每次调
pwsh/bash都带上sandbox_permissions,大概是被训练成"显式声明权限"了。当会话本来就是danger-full-access时,这种无害请求会直接报错:单用户本地环境默认就是这个配置,所以很常见。模型带着同样的参数反复重试,工具反复拒绝,一次 turn 就这么耗掉了。
根因
approveEscalation(packages/sandbox/sandbox/src/escalation.ts)的"严格更宽"检查会拒绝任何不在WIDER_MODES[effectiveMode]里的模式。WIDER_MODES没有danger-full-access的条目,因为它已经是最高级。结果 full-access 会话请求 full-access 就报"not strictly wider"。但这个请求根本不是升级——调用方只是要求在当前模式下执行。没有权限增益,不该走到审批,也不该 fail-closed。
建议改法(改动很小,不影响安全)
requestedMode等于effectiveMode时直接放行,真正的升级仍然走严格更宽检查 + 审批:安全性
mode === effectiveMode授予的就是调用方当前已有的权限,danger-full-access → danger-full-access不改变进程能做什么。read-only → workspace-write、workspace-write → danger-full-access这些真升级,仍然要过严格更宽检查 + 审批。workspace-write → read-only)依然被拒。为什么要改
模型的工具调用行为差异很大,不是所有模型都能遵守"没被拒绝就别传 sandbox_permissions"。我们测的几个流行模型(GPT 系列)会在大多数调用里带上这个字段,默认配置下每次调用都硬失败,报的错还让人摸不着头脑。接受同模式请求,把这个无操作变成静默通过,至少不会白白烧重试。
All reactions