dsh-write-protect:工作区路径只读保护

DeepSeek Harness (DSH) 的官方沙箱通常只有“整个工作区可写”和“全只读”两档策略。这意味着开发者很难在允许模型正常开发的同时,精细地保护工作区内的特定路径(例如 .git 目录)不被意外修改。dsh-write-protect 插件接管了沙箱策略,允许在 workspace-write 模式下对工作区内的指定路径进行只读保护,同时支持配置额外的可写根目录和会话级授权。

插件由 azazo1 维护,开源 MIT 许可证。它填补了 DSH 在路径级权限控制上的空白,适合需要精细管理模型文件写入行为的场景。

核心能力

插件拦截并限制了以下行为:

  1. 工具拦截:拦截 write 和 edit 工具对受保护路径的写入。
  2. 命令沙箱:在 Linux / macOS 上拦截命令沙箱(bwrap / Landlock / Seatbelt)对受保护路径的访问。
  3. 外部目录放行:在 workspace-write 模式下,支持放开某些外部目录的写入,而无需开启 danger-full-access。
  4. 规则文件:支持在工作区根目录放置只读规则文件(默认名为 .readonly),与插件页配置同语义。
  5. 会话授权:模型可申请本会话内的临时可写权限,权限仅限当前会话内存,不写入配置文件。

安装

在 Web 端安装进 web profile:

dsh plugin --profile web add azazo1/dsh-write-protect

固定版本安装:

dsh plugin --profile web add azazo1/dsh-write-protect#v0.2.0

安装后需重启应用或刷新窗口以生效。该插件依赖 DSH 引擎版本不低于 0.2.0-rc.1。

配置保护路径

保护路径支持 gitignore 语义的通配符和锚定规则,用于定义哪些路径是只读的。

  • 不包含 / 的条目(如 .git, vendor):在工作区内任意层级匹配。
  • 以 / 开头的条目(如 /.git, dist/a.txt):锚定到工作区根。
  • // 开头的条目:表示文件系统绝对路径。
  • 尾部 /:表示只匹配目录。

在插件页配置卡片或部署级 patch 中设置 readOnlyPaths。例如,保护 .git 和所有日志文件:

.git
*.log

若需排除特定文件(如示例配置中的 secrets/example.pem),可使用 ! 开头的排除规则,按最后匹配生效。

配置额外可写根

额外可写根用于在 workspace-write 模式下允许模型写入工作区外的目录,但不需要放开整个沙箱。

每行一条字面路径,支持以下展开方式:

  • ~ / ~/...:展开为当前用户家目录。
  • $NAME / ${NAME}:展开为环境变量。
  • // 前缀:表示文件系统绝对路径。
  • 相对路径:支持含 .. 的相对当前会话工作区的路径。

在插件页配置 writablePaths。例如,允许写入共享缓存目录:

../shared-scratch
~/scratch
$HOME/scratch
/tmp/dsh-extra

注意:工作区内的路径会被忽略并告警,文件系统根(/)会被拒绝。

工作区规则文件

工作区根目录可以放置一份与保护路径同语义的规则文件(默认 .readonly)。插件会逐行读取该文件并追加到保护路径中。

示例内容:

secrets/
/vendor
!vendor/public/**
**
  • 这份文件本身是唯一的硬保护,任何授权都无法覆盖它。
  • 它只认工作区根这一份,每个会话各读一份。
  • 超出工作区、符号链接、超限条目会被拒绝。

会话级写入授权

当任务需要反复写入同一片受保护区域时,模型可以调用工具申请本会话的可写授权。

申请工具:request_writable_path
参数:
* path:申请的路径(支持 ~、$VAR、//、相对路径含 ..)。
* justification:申请理由。

授权机制:
* 批准后,该路径(及其后代)在本次会话内可被 write/edit 工具和命令沙箱访问。
* 授权只在本会话内存里,不写配置文件,条数受 maxGrants 限制(默认 8)。
* 批准后的路径在会话区的“写入权限” tab 中可见,可手动撤回。

已知限制

  1. Windows 平台:Windows 上的 bash 或 pwsh 既挡不住 .git 的写入,也无法获取额外可写根。读取不受影响。
  2. 引擎版本:需要 DSH 引擎 @deepseek-ai/dsh-* 不低于 0.2.0-rc.1。
  3. 危险模式:在 danger-full-access 模式下,本插件不会介入。

生态信息

  • 插件目录:https://www.skillhub.cn/plugins/azazo1/dsh-write-protect
  • 源码地址:https://github.com/azazo1/dsh-write-protect
羽毛球分组比赛记分
小程序二维码

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

小夜