dsh-flutter-sandbox:在 workspace-write 沙箱裏跑 Flutter 與 Dart

前言

DeepSeek Harness(DSH)在 workspace-write 模式下,默認只允許命令寫入當前會話工作區和 /tmp。Flutter 與 Dart 工具鏈每次運行都會往 SDK 緩存、pub 緩存、Gradle 目錄等路徑寫文件,連 flutter --version 也可能因只讀文件系統失敗。社區插件 dsh-flutter-sandbox(維護者 liyuqian,GitHub 分類 admin-security)在保持其餘路徑仍受保護的前提下,爲沙箱額外開放 Flutter/Dart 生態常用的可寫目錄。

這是什麼

dsh-flutter-sandbox 是 DSH 插件:用自定義 sandbox provider 替換 dsh-base 自帶的 @deepseek-ai/dsh-sandbox-local,使 workspace-write 下的 shell 命令還能寫入 Flutter SDK、PUB_CACHE、Dart/Flutter 配置與 Android 構建相關目錄。read-only 與 danger-full-access 模式不受影響;模型會在上下文中被告知這些額外可寫路徑。

典型失敗現象(未裝插件時)類似:

update_engine_version.sh: line 71: .../flutter/bin/cache/engine.stamp.tmp: Read-only file system

核心功能

插件在檢測到目錄存在時,爲下列路徑授予寫權限(其餘仍受沙箱保護):

目錄 原因
Flutter SDK($FLUTTER_ROOT 或從 PATH 上的 flutter 解析) 每次運行會更新 bin/cache
$PUB_CACHE 或 ~/.pub-cache 包下載
~/.dart-tool、~/.dartServer 遙測與分析服務緩存
~/.flutter、$XDG_CONFIG_HOME/flutter(~/.config/flutter) Flutter 設置
$GRADLE_USER_HOME 或 ~/.gradle、~/.android Android 構建

實現上,bundle patch 禁用 dsh-base 的 sandbox 行並插入 sandbox-flutter(繼承自 stock provider)。每次 workspace-write 調用時,由 stock provider 構建 runner 命令,再在命令前的 -- 之前按 runner 類型插入 grant:

  • bubblewrap(Linux):--bind <dir> <dir>
  • Landlock(Linux):--rw <dir>
  • Seatbelt(macOS):(allow file-write* (subpath "<dir>"))

安裝與啓用

在對應 profile 下安裝(資料中的示例爲 tui profile):

dsh plugin --profile tui add github:liyuqian/dsh-flutter-sandbox

其他 profile 將 tui 換成 --profile web 或你的 profile 名。卸載:

dsh plugin --profile tui remove dsh-flutter-sandbox

插件以當前 dsh 進程權限運行;安裝前建議在 GitHub 查看源碼與 MIT 許可證,自行評估是否適合你的環境。

配置

默認無需改配置。若要關閉 Flutter 相關目錄或增加自定義可寫根路徑,在 profile 的 cordis.patch.yml(路徑:~/.dsh/profiles/<profile>/cordis.patch.yml)中覆蓋插件行:

- id: sandbox-flutter
  config:
    flutter: true               # 啓用上文列出的 Flutter/Dart/Gradle/Android 目錄
    extraWritableRoots:         # 額外絕對路徑
      - /home/me/.cocoapods

stock provider 的 runnerCommand、runnerFailureSignatures、probeTimeoutMs 同樣可在此配置。

典型用法與注意

  1. 安裝插件後,在 DSH 會話裏照常通過 shell 執行 flutter、dart pub、gradle 等;這些工具經 shell 發起的寫操作會命中擴展後的可寫目錄。
  2. 僅 shell 命令受益。 DSH 自帶的文件 write/edit 工具仍單獨校驗可寫路徑,不會自動放開 SDK 或 ~/.pub-cache;需要時仍可按流程申請權限。
  3. 不支持 Windows。 ACL runner 無法追加額外目錄,受限命令會明確報錯,而不是在無 grant 情況下靜默執行。
  4. 依賴 stock runner 參數佈局。 若 dsh 發行版改變佈局,插件會報 unexpected sandbox argv layout 並拒絕在非預期狀態下運行;README 註明在 dsh 0.1.1-rc.2 上測試過。package.json 中插件版本爲 0.1.0,peer 依賴 @deepseek-ai/dsh-sandbox-local >=0.1.1-rc.2。
  5. Pub workspace。 在 workspace 子包裏執行 flutter pub get 會向 workspace 根目錄寫入;DSH 會話應從該根目錄啓動。

開發與侷限小結

倉庫內可用 npm test 跑測試(覆蓋根目錄發現與各 runner 的 grant 插入,無需本地安裝 dsh)。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。若你在 Harness 裏用智能體做 Flutter 項目而沙箱寫權限卡在 SDK 與緩存路徑上,dsh-flutter-sandbox 是在不切換到 danger-full-access 的前提下補齊常見寫路徑的一種做法。

  • 目錄頁:https://www.skillhub.cn/plugins/liyuqian/dsh-flutter-sandbox
  • GitHub:https://github.com/liyuqian/dsh-flutter-sandbox
羽毛球分组比赛记分
小程序二维码

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

小夜