dsh-managed-workspaces:在可配置根目录下自建工作区并关联多文件夹

前言

在 DeepSeek Harness(DSH)里,工作区通常对应侧边栏里的一条路径:会话的当前工作目录(cwd)就落在该文件夹下。若你同时在多个仓库或子项目间切换,要么反复改工作区路径,要么把代码都拷贝到一个目录里,维护和检索都不顺手。

下面介绍的 dsh-managed-workspaces 由社区维护者 CoraxEldridge 发布,分类属于工作流。插件在指定根目录下由 DSH 自建工作区目录,并允许把多个已有文件夹以链接形式挂到同一工作区,而不必把整个项目树搬进单一目录。

这是什么

dsh-managed-workspaces 是 DSH 插件(npm 包名同为 dsh-managed-workspaces,当前资料中版本为 1.3.0,许可证 MIT)。它解决的是:工作区不必再必须指向一个已存在的单一路径;可以在可配置根目录下创建托管工作区,并通过 _roots/<别名> 关联多个外部文件夹(Windows 上使用 NTFS junction,无需管理员权限)。

插件归属与源码见 GitHub 仓库;社区目录页为 SkillHub 插件页。DSH 生态以「一切皆插件」为方向,SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

工作区模型

默认根目录为 <用户目录>/DSH-Workspaces,可在托管面板中修改。目录结构示意如下:

<根目录>/
  demo/                       ← 工作区主目录,注册进侧边栏,会话 cwd 即此目录
    _roots/                   ← 固定目录,存放关联文件夹的链接
      web/                    ← junction → 例如 D:\repos\web
      api/                    ← junction → 例如 D:\repos\api

工作区主目录由插件创建,并通过 ctx.workspaceRegistry 注册;在侧边栏出现后,直接在该行新建会话即可。关联路径保留真实绝对路径;解除关联只删除链接,不删除被关联的文件夹;从插件移出工作区只删除注册与插件记录,不删除文件夹或会话。

核心功能

新建与关联

  1. 在托管面板设置工作区根目录并保存。
  2. 输入名称点「新建」:创建 <根目录>/<名称>/ 并注册到侧边栏。
  3. 展开工作区,填入要关联的文件夹(可指定别名),点「关联」。
  4. 在该工作区行新建会话开始工作。

接入已有工作区

侧边栏里已有的工作区可「接入」插件,纳入同一套管理(便于再关联额外文件夹),不移动、不改名、不新建任何文件:

  • 界面:右键工作区 →「接入托管工作区」;或在托管面板「已有工作区(未接入)」中逐项或全部接入。
  • 工具:managed_workspace({ action: "adopt", all: true }),或 managed_workspace({ action: "adopt", folder: "路径" })。

接入后的工作区在第一次「关联」之前不会创建空的 _roots/。

侧边栏与「添加工作区」

插件以更高优先级接管侧边栏「+」流程,提供:新建托管工作区 / 选择已有文件夹(保留宿主官方行为)/ 接入已有工作区 / 打开托管面板。已托管工作区右键可打开托管面板、关联文件夹、迁移、修复、移出插件等。卸载插件后官方选择器自动恢复。

迁移工作区

通过「迁移…」或 managed_workspace({ action: "migrate", destination: "目标路径", workspace: "名称" }) 将整个工作区目录移动,并重建 _roots 下链接。若工作区仍有会话,会自动采用 anchor 模式:原路径保留为指向新位置的目录链接,以便会话头中不可变的 cwd 仍有效;无会话时可用 clean 模式直接迁址并重新注册。

managed_workspace 工具

未指定 workspace 时,工具以当前会话所在工作区为上下文。常用 action 包括:status、list、create、adopt、attach、detach、register、forget(详见仓库 README 表格)。

状态持久化

%DSH_HOME%\managed-workspaces\manifest.json(DSH_HOME 未设置时为 ~/.dsh)记录根目录、工作区与关联关系;写入采用临时文件加 rename,损坏时会备份并以空状态继续,界面会告警。

安装与启用

包已发布到 npm:https://www.npmjs.com/package/dsh-managed-workspaces。

推荐用 DSH 插件命令(将 desktop 换成你的 profile 名):

dsh plugin --profile desktop add dsh-managed-workspaces

该命令会在 profile 中安装包,并把新增 bundle 自动加入 dsh.profile.bundles;重启 DSH 后生效。

也可通过 plugin_manager 安装:

plugin_manager({ action: "install_bundle", target: "dsh-managed-workspaces" })

从 GitHub 或本地目录安装时,使用资料中的 install_bundle 目标 URL 或本地路径。安装后点侧边栏「+」可见托管工作区入口;若提示 restart-required,需重启 DSH。更新时重复对应安装命令即可。

插件在你的 DSH 进程权限下运行;安装前建议查看 源码 与 MIT 许可证,确认符合你的环境策略。

典型用法小结

经过上面的安装步骤后,可按 README 中的顺序:打开托管面板设根目录 → 新建工作区 → 关联 web、api 等别名目录 → 在工作区下开会话。需要把现有侧边栏工作区纳入管理时,用「接入」而非重建目录。跨盘或换机整理目录时,用「迁移」并注意有会话时的 anchor 与磁盘上原路径链接是否可长期保留。

通过工具批量操作时,例如查看未接入列表:

managed_workspace({ action: "list" })

关联文件夹示例:

managed_workspace({ action: "attach", folder: "D:\\repos\\web", alias: "web" })

适用场景与注意

适合:多仓库并行、希望一个 DSH 工作区里统一会话 cwd,又要把真实代码留在原路径的团队或个人;需要在不改仓库布局的前提下给已有工作区加「虚拟多根」的场景。

务必留意的限制(均来自插件文档):

  • 从工作区根做 glob/grep 时不会自动跟随 _roots 下的链接;应对每个别名路径显式指定,例如 grep({ path: "_roots/web" })。
  • 在 workspace-write 沙箱下无法写入关联文件夹内容;修改关联目录中的文件需将会话切到 danger-full-access。
  • 不支持将 junction 指向 UNC 网络共享。
  • 依赖宿主原生目录选择器时,「选择已有文件夹」在部分宿主上可能不可用,可改用手动路径输入。
  • 会话不能跨工作区拖动;归属由会话头 cwd 决定,整理位置应使用「迁移工作区」。
  • 工作区或链接被外部删除后需点「修复」;_roots/<别名> 若被真实文件占用,插件只报冲突不覆盖。

卸载插件不会删除磁盘上的工作区文件夹、链接或会话。

结尾

dsh-managed-workspaces 把 DSH 工作区从「必须指向单一已有目录」扩展为「根目录下自建 + 多文件夹链接」的模型,并覆盖接入、迁移、修复等日常运维。若你在 SkillHub 或 GitHub 检索工作流类插件,可按本文命令安装试用。

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

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

Xiaoye