前言¶
DSH 的 sandbox mode 会区分不同的文件访问策略,例如 read-only、workspace-write、danger-full-access 和 auto。这些模式已经能处理只读、工作区写、完全访问等权限,但有时还需要一个独立开关:只要访问工作目录以外的文件,就先弹窗让用户确认。下面介绍 dsh-workspace-only-plugin。
这是什么¶
dsh-workspace-only-plugin 由 CsBpRd 维护,MIT 许可。它为 DeepSeek Harness(DSH)增加 “Workspace Only” 开关,把任意 sandbox mode 下工作区外的文件访问收口到用户确认。
GitHub 仓库:
https://github.com/CsBpRd/dsh-workspace-only-plugin
核心功能¶
工作区外访问统一确认¶
开启开关后,以下模式都会受到同一规则约束:
read-only
workspace-write
danger-full-access
auto
当 DSH 访问工作目录以外的文件时,会派发用户确认请求。用户批准后,放行这一次调用;用户拒绝或没有可应答渠道时,拒绝该次调用。
Full access 下也会弹窗¶
确认请求通过以下通道派发:
approval/request
这会绕过审批策略闸门。即使当前会话是 Full access,审批策略为 never,也不会静默通过,而是弹出确认。
覆盖的文件访问调用¶
以下工具调用如果越出工作区,都会触发确认:
read
write
edit
read_image
glob
grep
bash
pwsh
内嵌路径也会被词法扫描捕获,例如:
node -e
python -c
这类字符串中如果出现绝对路径,也会触发弹窗。
与 auto 插件共存¶
如果同时使用以下插件:
@nanmicoder/dsh-auto-mode
它会照常运行,但会被本插件收编。工作区内的调用由它的分类器裁决;越出工作区的调用先经过本插件的用户确认。
预设显示名¶
插件会把 workspace-write 权限预设的显示名永久改为:
Write Only
这个改名与开关状态无关。
全局开关¶
开关是全局设置,持久化到:
settings.yaml
设置页和输入栏各有一个开关。
安装与启用¶
一行安装¶
先执行安装命令:
curl -fsSL https://raw.githubusercontent.com/CsBpRd/dsh-workspace-only-plugin/main/install.sh | bash
脚本会自动把插件装进 profile 的 bundle 层栈,打两个必需核心补丁,并在检测到运行中的 dsh web 时以原命令行重启。
可用以下环境变量调整:
DSH_PROFILE
DSH_HOME
DSH_NO_RESTART=1
其中 DSH_PROFILE 默认值是:
web
手动安装¶
如果不使用安装脚本,先编辑 web profile 的依赖文件:
~/.dsh/profiles/web/package.json
在 dependencies 中增加:
"dsh-workspace-only-plugin": "github:CsBpRd/dsh-workspace-only-plugin"
然后在 dsh.profile.bundles 末尾追加:
dsh-workspace-only-plugin
接着安装依赖:
cd ~/.dsh/profiles/web && pnpm install
最后重启 dsh web 服务。
Node 与依赖¶
package.json 声明的 Node 要求是:
^22.19.0 || >=24.0.0
package.json 中列出的 peerDependencies 均为 optional。
核心补丁¶
核心补丁包括在以下组件的白名单中加入命名空间:
@deepseek-ai/dsh-host-apiproxy
白名单名为:
WEB_SETTINGS_NAMESPACES
加入的值是:
workspace-only
另一处补丁是 auto 插件标签补丁。
升级 DSH 后,重新执行:
node scripts/patch-core.mjs
即可重打核心补丁。
如果与 auto 插件共存,需要同步修改:
@nanmicoder/dsh-auto-mode
的:
lib/client.js
把:
REQUIRED_PERMISSION_LABELS
中的:
Workspace Write
改为:
Write Only
典型用法¶
下面是一个可复现的启用流程。
1、在设置页或输入栏打开 Workspace Only 开关。
2、在 DSH 会话中让智能体读取、搜索当前工作区内的文件。工作区内的调用按原有 sandbox mode 或 auto 插件策略执行。
3、让智能体访问工作区外的文件,例如越界读取或写入。插件会派发用户确认请求。
4、用户批准后,这一次调用被放行;用户拒绝时,该次调用被拒绝。
5、在 danger-full-access 或 Full access 场景中,工作区外文件访问仍会先经过这一步确认。
适用场景与注意¶
这个插件适合希望在 DSH 中保留现有 sandbox mode,同时把工作区外文件访问统一交给用户确认的场景。
注意以下几点:
- 这是工具层闸门,核心是词法路径扫描,不是内核级隔离。完全动态计算的路径仍是残余风险面。
- 在
Write Only(workspace-write)会话中,批准后的越界写仍会被内核围栏拦截,并按 DSH escalation 流程再次确认。相关流程名为:
sandbox_permissions
- 写操作始终需要用户明确同意。
- 技能加载、会话持久化等 DSH 内部机制不受影响。
- 插件会随当前 DSH 进程运行,安装前应检查源码与 MIT 许可证。
链接¶
GitHub 仓库:
https://github.com/CsBpRd/dsh-workspace-only-plugin