dsh-workspace-only-plugin:为 DSH 增加 Workspace Only 文件访问开关

前言

DSH 的 sandbox mode 会区分不同的文件访问策略,例如 read-onlyworkspace-writedanger-full-accessauto。这些模式已经能处理只读、工作区写、完全访问等权限,但有时还需要一个独立开关:只要访问工作目录以外的文件,就先弹窗让用户确认。下面介绍 dsh-workspace-only-plugin

这是什么

dsh-workspace-only-pluginCsBpRd 维护,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 Onlyworkspace-write)会话中,批准后的越界写仍会被内核围栏拦截,并按 DSH escalation 流程再次确认。相关流程名为:
sandbox_permissions
  • 写操作始终需要用户明确同意。
  • 技能加载、会话持久化等 DSH 内部机制不受影响。
  • 插件会随当前 DSH 进程运行,安装前应检查源码与 MIT 许可证。

链接

GitHub 仓库:

https://github.com/CsBpRd/dsh-workspace-only-plugin
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜