Replies: 3 comments
沙箱 / 权限(「Bug: sandbox escalation error occurs when current mode is already danger-full-access」)
把 dsh 精确版本号和触发工具名贴出来,便于对照 changelog。 |
|
This is the same root cause as #4976, and both of your error messages come from a single execution check. Mechanism (source-verified at 0.1.2-alpha.1,
Why "narrower also throws" is intentional: the spec test "a non-widening request fails closed with its own text and never asks" ( Design tension worth noting: escalation.ts:34-37 documents why the full enum is advertised — cutting it down to the modes wider than the composition's default would strand a session whose effective mode sits below that default with no lever. So the fix is not "trim the schema at composition time"; it needs per-call resolution — e.g. filter what's advertised against the call's effective mode, or treat an equal-mode request as a no-op (success without approval) instead of a throw. That direction is discussed in #4976. rc.2 workaround: when the session is already |
|
这个现象看起来是“请求权限”和“当前有效权限”比较时没有把非扩展请求当作 no-op 处理: 在修复合入前,可以先让模型/调用方在已经处于 做运行时选型时也建议把“当前会话权限”和“执行后端隔离”分开验证。比如 SandBase Harness 的沙箱表明确区分 local process(不与宿主隔离)以及 Docker/Kubernetes/worker 后端(隔离能力取决于部署),可作为检查权限语义与执行边界的参考:sandbox backends。 |
Uh oh!
There was an error while loading. Please reload this page.
但是调用
pwsh、write或edit工具时,工具层仍然把请求识别为 Sandbox 权限升级,并报错:当请求改为:
则报错:
这个问题会导致当前会话无法继续执行普通的文件写入、文件编辑和 shell 命令。
复现环境
deepseek-ai/deepseek-harness0.1.1-rc.2danger-full-accessneverpwshwriteedit复现步骤
启动一个 DeepSeek Harness 会话。
将 Sandbox 模式设置为:
将 Approval 策略设置为:
在当前 workspace 中执行普通的文件编辑或命令,例如:
Get-Location或者修改 workspace 内的文件。
工具调用携带以下任意参数:
或:
调用失败,并出现:
或:
期望行为
当当前 Sandbox 模式已经是
danger-full-access时:danger-full-access不应被识别为权限升级。workspace-write不应被识别为权限升级 downgrade。danger-full-access模式下执行。sandbox_permissions。danger-full-access模式下的普通操作。实际行为
当前工具层似乎将所有带有
sandbox_permissions的调用都当作权限升级请求,并要求:因此出现以下错误判断:
被错误地当作无效升级。
同时:
也被错误地送入 escalation 分支,而不是被识别为当前权限已足够,或者被明确识别为 downgrade 请求。
可能的根因
问题可能位于 Sandbox 工具调用参数处理、权限模式比较逻辑或 escalation dispatcher,具体可能包括:
sandbox_permissions,就无条件走 escalation 流程。danger-full-access与其他 Sandbox 模式之间的等级关系。sandbox_permissions,但运行时逻辑又要求在当前权限足够时不要传入该字段。danger-full-access没有被视为无需进一步升级、无需 provider/approval 的特殊模式。根据
dsh-bash-sandbox的文档,danger-full-access是无约束模式,并且不会经过提供方的 Sandbox 限制。因此当前模式下不应再次请求同级或更高权限。建议的权限判断逻辑
权限处理逻辑可以调整为:
也可以抽象为:
表示使用当前会话模式,而不是触发权限升级。
当:
时,应直接执行普通操作,不再进入 escalation 流程。
建议重点检查的代码位置
建议检查以下部分:
pwsh工具参数 schemawrite工具参数 schemaedit工具参数 schemadanger-full-access时的特殊处理sandbox_permissions与普通 Sandbox 拒绝的区别
这个问题不是普通的文件访问拒绝。
普通访问拒绝应类似:
而当前问题发生在权限升级判断阶段:
也就是说,命令或文件操作本身可能根本没有执行,调用在 Sandbox 参数解析阶段就被拦截了。
Approval 策略的影响
该问题与 Approval 策略有关联,但根因不应归结为 Approval 策略。
在以下状态下都可能出现问题:
此时权限已经是最高模式,工具调用不应该再依赖审批。
当 Approval 策略切换为
ask后,如果请求的是从workspace-write升级到danger-full-access,审批流程可以正常存在;但当当前模式已经是danger-full-access时,再次请求danger-full-access不应被视为升级。影响
该问题会导致:
edit修复代码。write创建文件。pwsh运行构建和测试命令。danger-full-access的会话无法继续工作。期望修复结果
修复后,在以下环境中:
执行:
Get-Location以及 workspace 内的文件编辑操作时,应当直接执行成功,不再出现:
同时,从:
升级到:
的真实权限升级请求仍应保留正常的审批流程。
All reactions