dsh-workspace-only-plugin:爲 DSH 增加 Workspace Only 文件訪問開關

前言

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
羽毛球分组比赛记分
小程序二维码

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

小夜