dsh-workspace-folders:为 DSH 工作区添加多个工作目录

前言

在 DeepSeek Harness(DSH)里,一个工作区通常只对应一个项目根目录。模型读文件、改代码、跑命令,默认都围绕这个目录展开。实际开发里却经常要同时看共享库、文档仓或另一个前端工程——要么来回切换工作区,要么把路径写进提示词,让模型自己拼绝对路径,体验和 Claude Code 的 additional directories / /add-dir 相比差一截。

下面介绍社区插件 dsh-workspace-folders(维护者 Fleey,分类:客户端)。它在不改 DSH 上游的前提下,通过官方扩展点给同一工作区挂上额外目录,并在 UI 和斜杠命令里统一管理读写权限。

这是什么

dsh-workspace-folders 是 DSH 插件:除工作区本身目录外,可把其他文件夹加入当前工作区,让模型在同一套会话里读取;对标记为「读写」的目录,在默认 workspace-write 沙箱下还可经插件自动批准对 write / edit 的提权写入。

README 写明适配 DSH 0.2.1-alpha.5(DSH NEXT 2.0.18-next、DSH Desktop Beta,以及 dsh web)。实现依赖 systemPrompt.context、tools/execute、approval/request、commands、connection.fetch,以及在 Web 客户端 conversation.input.left 槽位注入按钮。

核心功能

输入框旁的「工作目录」按钮

保存后从下一轮对话起生效,本工作区下所有会话共享同一套额外目录列表。

  1. 工具栏出现 📁 +N(N 为额外目录数量),点开可添加、移除目录,并切换「读写 / 只读」。
  2. 添加方式:在对话框输入框里直接输入绝对路径或 ~/路径(回车或点「添加」),或点「选择文件夹…」。
  3. 重复路径会被拒绝(末尾斜杠、符号链接、~/… 等等价写法会归一后比对),并高亮已有行;已是工作区内路径或全局目录的路径同样不能再加。
  4. 「选择文件夹…」按环境切换:DSH NEXT / DSH Desktop 用系统文件夹对话框;本机 dsh web 由 Host 打开系统对话框;局域网或远程浏览器则用应用内文件夹浏览器(从工作区所在目录起步,可跳转路径、显示隐藏项)。

斜杠命令

任何带命令入口的界面均可使用:

  • /add-dir <路径> [--read-only] — 添加目录(支持绝对路径、~/路径、相对当前工作目录);已在列表中则报错,改权限需先 /remove-dir。
  • /remove-dir <路径> — 移除。
  • /dirs — 列出当前工作区全部额外目录。

模型可见与写入策略

每次请求的运行时上下文(紧跟沙箱策略之后)会列出额外目录及读写权限,并写入会话日志,回放可还原。

在 workspace-write 模式下,对工作区根目录外的「读写」额外目录,write / edit 的写入可由插件自动批准(审批记录仍进 approval/asked / approval/decided)。「只读」目录不会自动批准;终端 bash 写入额外目录仍走正常确认;会话为只读模式时不自动批准;完全访问模式不受此限制。

配置项 autoApproveWrites: false 时,读写目录的每次写入也需人工确认。

全局目录与指令文件(可选)

  • globalDirectories:在 profile 的 cordis.patch.yml 里配置,对所有工作区生效。
  • loadInstructions(默认 false):为 true 时,每个额外目录根部优先读 AGENTS.md,没有可用 AGENTS.md 时再读 CLAUDE.md,作为第二段运行时上下文发给模型;总大小受 maxInstructionBytes(默认 32768 字节)限制。

安装与启用

插件以当前 DSH 进程权限运行,安装前建议浏览 GitHub 仓库 源码与 MIT 许可证。

DSH NEXT / DSH Desktop

在应用内打开 DSH 终端,执行:

dsh plugin --profile desktop add github:Fleey/dsh-workspace-folders

然后完全重启应用(托盘 → 退出并重启,或设置顶部 → 重启应用)。输入框工具栏应出现文件夹按钮。

若希望固定到某一 commit,可使用 github:Fleey/dsh-workspace-folders#<commit>。

卸载:

dsh plugin --profile desktop remove dsh-workspace-folders

卸载后同样需要重启。

普通 dsh web

dsh plugin --profile <你的 profile> add github:Fleey/dsh-workspace-folders

仓库已包含构建好的 lib/,从 GitHub 安装无需本地 npm run build,也不需要在 profile 里授权 allowBuilds。

配置示例

在 profile 自己的 cordis.patch.yml(例如 ~/.dsh/profiles/desktop/cordis.patch.yml)中覆盖插件配置,需写全保留键:

- id: workspace-folders
  config:
    autoApproveWrites: true
    globalDirectories:
      - { path: ~/notes, access: read-only }
    loadInstructions: false
    maxInstructionBytes: 32768

可选 storeFile 指定列表存储路径,默认 $DSH_HOME/workspace-folders.json(一般为 ~/.dsh/workspace-folders.json)。配置错误会在加载时报错,不会静默忽略。

目录列表按工作区路径保存在该 JSON 中,可手动编辑后重启生效;文件损坏时插件拒绝加载并打日志,不会用空列表覆盖。

典型用法

  1. 在桌面端装好插件并重启,打开目标项目工作区,点输入框旁 📁,把共享库路径设为「读写」,文档仓设为「只读」。
  2. 或用命令快速添加:
/add-dir ~/src/shared-lib
/add-dir ~/docs --read-only
/dirs
  1. 从下一轮对话起,模型在运行时上下文里能看到目录列表;对读写目录用 write / edit 改文件时,在默认沙箱下由插件处理提权(若未关闭 autoApproveWrites)。
  2. 若希望额外目录根部的 AGENTS.md 进入上下文,将 loadInstructions 设为 true 并重启。

适用场景与注意

适合:单工作区内要同时参考或修改多个代码树;团队有固定「全局只读笔记库」;习惯用斜杠命令管理目录而不是纯 UI。

限制(README 已说明):

  • 额外目录按工作区生效,不是单会话。
  • @ 补全、技能发现仍只认工作区根;访问额外目录请用绝对路径或让模型按路径读。
  • DSH 自带对工作区 AGENTS.md 的读取与 loadInstructions 互不替代;子目录中的指令文件、.local 覆盖不会读;额外目录若是工作区上级,开启 loadInstructions 可能导致同一指令出现两次。
  • 尚未发过消息的新会话里执行 /dirs,结果可能不在空白首页显示,用按钮查看更直观。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-workspace-folders 把「一个工作区、多个工作目录」落到 UI、命令、运行时上下文和沙箱提权一条链上,用法上接近 Claude 的 additional directories。需要多仓协同的 DSH 用户可按上文安装命令启用,细节以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/Fleey/dsh-workspace-folders
  • GitHub:https://github.com/Fleey/dsh-workspace-folders
羽毛球分组比赛记分
小程序二维码

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

Xiaoye