dsh-sandbox-tune:在 DSH 沙箱內跑通 go build 與 npm install

前言

在 DeepSeek Harness(DSH)裏讓模型執行 go build、npm install 一類命令時,默認的 workspace-write 沙箱只允許寫入工作區、/tmp 和用戶臨時目錄。Go 編譯緩存、npm 緩存、Cargo 目錄等卻落在工作區外,內核會拒絕寫入,模型只能反覆申請 danger-full-access 提權,界面上就會出現大量審批彈窗。社區插件 dsh-sandbox-tune(維護者 kennethfan,分類 admin-security)針對這類文件沙箱邊界問題,用緩存重定向、可寫目錄授權和可選的命令自動批准,儘量在沙箱內完成日常開發命令,而不是每次都升權。

這是什麼

dsh-sandbox-tune 是 DSH 的沙箱調優插件:讓 go build / go test / npm install 等開發命令在沙箱內正常跑通,減少重複的提權審批彈窗。

插件通過 cordis.patch.yml 替換 DSH 自帶的 bash-sandbox / pwsh-sandbox / sandbox 相關實現,提供執行器(sandbox-tune-bash)和沙箱 provider(sandbox-tune-provider)兩套能力。依賴 DSH 自帶的 dsh-bash-sandbox、dsh-sandbox-local、dsh-shell 等,無需額外安裝第三方沙箱組件。

版本要求(以 README 爲準):DSH 0.2.1-rc.2 或更高(插件在該版本上開發與驗證);運行平臺爲 macOS / Linux / Windows,具體能力因後端而異。插件當前包版本爲 0.1.6,許可證 MIT。

目錄頁:https://www.skillhub.cn/plugins/kennethfan/dsh-sandbox-tune
源碼與文檔:https://github.com/kennethfan/dsh-sandbox-tune

爲什麼會有彈窗

DSH 文件沙箱(workspace-write)的可寫範圍可以概括爲:

工作區目錄  +  /tmp  +  用戶臨時目錄($TMPDIR)

常見構建工具卻把緩存寫到沙箱外,例如 Go 的 GOCACHE、GOMODCACHE,npm 的 NPM_CONFIG_CACHE,Cargo 的 CARGO_HOME。在 macOS 上常表現爲 Seatbelt 的 Operation not permitted。README 中同一沙箱內的對比示例:

GOCACHE=~/Library/Caches/go-build  go build ./...   → exit 1(operation not permitted)
GOCACHE=$TMPDIR/dsh/go-build       go build ./...   → exit 0

插件作者根據本機 517 次歷史審批統計,將彈窗原因大致分爲:構建緩存寫不進去(約 28%)、寫工作區外用戶配置目錄(約 27%)、gh 讀鑰匙串(約 19%,非文件路徑問題,插件不支持)、寫 ~/.dsh profile(約 11%,部分可用 sandboxRoots)、其餘約 15% 不適合用白名單放寬。

核心功能

下面介紹三個能力模塊及其作用域。

模塊 作用 作用域
緩存處理 純緩存重定向,或在 in-place 下授權真實緩存目錄 全局 + 會話
可寫目錄授權 將用戶級目錄等加入沙箱白名單 全局 + 會話
命令授權 按規則自動批准沙箱升權 僅全局

兩種工作模式

mode 只在執行器 sandbox-tune-bash 上配置一處,provider 會跟隨。

模式 做法 與終端共用緩存 後端要求
redirect(默認) 用環境變量把純緩存指到 $TMPDIR/dsh(或 cacheRoot) 否,兩套獨立 任意後端
in-place 路徑不變,把真實緩存目錄授權爲可寫 是 Seatbelt / bwrap;不支持時回退 redirect

緩存分兩類,處理方式不同:

  • 純緩存(cache):如 GOCACHE、NPM_CONFIG_CACHE、PIP_CACHE_DIR,丟失只會變慢,可在 redirect 下重定向。
  • 依賴倉庫(store):如 GOMODCACHE、CARGO_HOME,重定向到空目錄會導致編譯失敗;redirect 不動 store 類,僅在 in-place 下授權。

自動探測路徑

啓用 autoDetect 時,插件在 Host 側執行只讀命令(如 go env GOCACHE、npm config get cache)獲取本機真實路徑。靜態默認值可能猜錯(例如 gvm 下的 GOMODCACHE),猜錯等於未授權。

用戶級目錄預設

userDirs 預設包括 ~/.config、~/.cache、~/.local/share、~/.local/state 等,默認全部不勾選;勾選會擴大可寫邊界,界面與文檔中均標明瞭收益與風險。user-cache 刻意不使用 macOS 的 ~/Library/Caches,僅 XDG 風格的 ~/.cache。

命令授權(可選)

全局字段 autoApproveMode 可爲 off、exact、safe-args;規則列表爲 autoApproveCommands。這是放寬升權審批,需自行評估風險;默認 off。

安裝與啓用

推薦安裝預構建 tarball,避免 dsh plugin add 對 npm/git 源觸發 allowBuilds 構建授權:

dsh plugin --profile web add https://github.com/kennethfan/dsh-sandbox-tune/releases/latest/download/dsh-sandbox-tune.tgz

也可從 GitHub 安裝(會走源碼構建,首次稍慢):

dsh plugin --profile web add github:kennethfan/dsh-sandbox-tune

裝完後重啓 DSH。插件自帶的 cordis.patch.yml 會禁用 base 的三行 sandbox 相關服務並替換爲本插件實現。

全局配置可在左側「設置」→「沙箱調優」修改,或直接編輯 profile 的 cordis.patch.yml;插件監聽該文件,無需重啓 DSH 即可熱更新。會話級可通過會話標題右側「沙箱調優」或 /sandbox-tune 覆蓋部分字段(列表字段疊加全局,標量字段替換全局)。

執行器配置示例(YAML 片段):

- id: sandbox-tune-bash
  name: 'dsh-sandbox-tune/executor'
  config:
    enabled: true
    mode: redirect
    cacheRoot: ''
    presets: [go, npm, bun, pip]
    env: {}
    autoApproveMode: off
    autoApproveCommands: []

Provider 配置示例:

- id: sandbox-tune-provider
  name: 'dsh-sandbox-tune/provider'
  config:
    enabled: true
    autoDetect: true
    presets: [go, npm, bun, cargo]
    sandboxRoots: []
    userDirs: []

典型用法

  1. 安裝插件並重啓 DSH 後,在全局「沙箱調優」中保持默認 redirect,勾選需要的工具預設(go、npm、bun、pip、cargo 等)。
  2. 若希望與本地終端共用同一份 Go/npm 緩存,且沙箱後端支持 Seatbelt 或 bwrap,將 mode 改爲 in-place;不支持時會自動回退 redirect。
  3. 若 CLI 仍因 ~/.config 等目錄寫入失敗,在 provider 卡片中按需勾選用戶級目錄預設,而不是一次性全開。
  4. 需要持久化 redirect 緩存時,可將 cacheRoot 設爲工作區內路徑(如 .dsh/cache),並加入 .gitignore;或改用 in-place。

README 建議用 go build ./...、npm install 等在沙箱內驗證是否仍觸發彈窗;關閉插件 enabled: false 可退化爲原生執行器做對比。

適用場景與注意

適合誰:長期在 DSH 裏跑 Go、Node、Python、Rust 等構建與安裝命令,且希望默認留在 workspace-write 沙箱內完成的開發者。

能力邊界:gh 讀鑰匙串、進程管理、隨意刪除清理等彈窗,插件文檔標明不適合或未支持;命令自動批准僅全局配置,會改變安全邊界,應謹慎開啓。

安全與信任:插件以當前 DSH 進程的權限運行,會修改沙箱白名單與環境變量,並可選自動批准升權。安裝前應閱讀源碼與 MIT 許可證,確認符合你的安全策略。SkillHub 上的插件目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係;星標與版本以 GitHub 頁面爲準。

已知限制:redirect 模式下 macOS 可能週期性清理臨時目錄,重啓後首次編譯偏冷;in-place 依賴沙箱後端能力;pip/cargo 的自動探測使用靜態默認值。

結尾

dsh-sandbox-tune 從緩存重定向、目錄白名單和可選命令授權三個層面,緩解 DSH 開發命令與 workspace-write 沙箱之間的常見衝突。經過上面的步驟安裝並在「沙箱調優」中按需配置後,多數 go build、npm install 類操作可以在沙箱內完成,而不必每條命令都點一次全量提權。

羽毛球分组比赛记分
小程序二维码

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

小夜