dsh-workspace-categories:DSH 桌面版工作区分类树

前言

DeepSeek Harness(DSH)桌面版左侧栏默认提供工作区与会话列表。工作区一多,平铺列表里找目录、找历史会话的成本会明显上升。社区插件 dsh-workspace-categories(维护者 Knight-Zjy)把同一槽位换成 VS Code 风格的三级树:分类 → 工作区 → 会话,分类与折叠状态保存在本机浏览器侧,不改动 host 上的工作区数据模型。

这是什么

dsh-workspace-categories 是面向 DeepSeek Harness 桌面版 的客户端插件:接管侧边栏 sidebar.workspaces 槽位,用可折叠的分类树替代官方 ui-workspace 的默认浏览器 UI。官方工作区服务(ctx.uiWorkspace、workspaces、sessions 等 Cordis 服务)仍照常挂载;本插件以 priority: -100 注册,高于官方默认的 priority: 0,因此无需禁用官方插件即可显示分类树,卸载或 dispose 后原生列表会立刻恢复。

树的大致结构如下(摘自项目 README):

分类 A                     ← 自建分类(可拖动工作区归类)
  └ 工作区 A-1             ← 会话数 / 新建会话 / 归入分类
      └ 会话 1
      └ 会话 2
  └ 工作区 A-2
未分类                     ← 未归类的工作区落在这里
  └ 工作区 B

npm 包名:dsh-workspace-categories(当前资料中版本 0.1.1,许可证 MIT)。要求 DSH >=0.2.0-rc.2。

如何接管左侧栏(与官方 UI 共存)

DSH 侧边栏的 sidebar.workspaces 是 single 槽位:同一槽位可注册多条,按 priority 决定谁渲染,priority 最小者获胜。

本插件与官方 ui-workspace 的关系可以概括为:

  1. 本插件 priority: -100,官方浏览器 priority: 0 → 安装启用后显示分类树。
  2. ui-workspace 仍在 bundle 中,ctx.uiWorkspace 及其实它扩展点可用。
  3. 切换视图不需要改配置、不需要重启:树顶栏右侧的列表图标,或侧边栏底部(sidebar.footer.action)的文件夹图标,可在「分类树 / 原生列表」之间切换;选择写入 localStorage 键 dsh.workspace-tree.state.v1。

数据全部来自客户端 Cordis 服务,无 RPC。分类名、工作区归属分类等是纯 UI 元数据,存在浏览器 localStorage,没有 host 侧状态;host 半 lib/index.js 仅为空 apply(),供 Loader 发现 ./client。

核心功能

下面能力均来自项目 README 中的功能表与说明。

能力 说明
分类管理 顶栏 + 新建;分类行铅笔重命名、× 删除(删除后工作区回到「未分类」)
归类 工作区行右侧下拉框,或把工作区行拖到分类行上
折叠 分类行 / 工作区行点击折叠,状态持久化
会话 展开工作区时默认显示 5 条,「显示更多」每次 +10;点会话行打开该会话
运行中标记 会话行右侧脉冲点
新建会话 工作区行的 +,调用 ctx.uiWorkspace.startSession(workspaceId)
新建工作区 顶栏文件夹按钮、各分类行 +、「未分类」行 +:系统目录选择器选中目录后立即成为工作区;从分类行发起时自动归入该分类
筛选 顶部输入框同时匹配工作区(标题/路径)和会话(标题/路径/id)
排序 置顶会话优先,其余按 updatedAt 倒序(与官方浏览器一致)

新建工作区与官方走同一条链路:优先 globalThis.__DSH_DIRECTORY_PICKER__?.pick(),否则 ctx.get('uiWorkspace').pickDirectory();采纳为 await ctx.get('workspaces').create({ path })。用户取消选择时不做任何操作;失败时在树顶显示可关闭的错误条。

侧边栏折叠为窄轨(wide === false)时,本插件会退化为图标轨道,与槽位 props 约定一致。

安装与启用

包已发布到 npm,包名 dsh-workspace-categories。推荐通过 profile 包管理器安装,会自动写入该 profile 的 dsh.profile.bundles:

dsh plugin --profile desktop add dsh-workspace-categories

也可以在应用内 设置 → 插件 中添加,填写包名 dsh-workspace-categories。

安装后重启桌面应用。cordis.yml 为生成物,不要手改。

卸载:

dsh plugin --profile desktop remove dsh-workspace-categories

卸载后同样需要重启。

从源码开发时,可按 README 将目录软链到 ~/.dsh/profiles/desktop/node_modules/dsh-workspace-categories,并把包名追加到该 profile 的 package.json 的 dsh.profile.bundles 末尾;开发结束后应切回 npm 安装,避免软链版与 npm 版并存。

典型用法

  1. 按项目或主题建分类:树顶栏点 + 创建分类,例如「客户端」「文档仓库」。
  2. 把工作区归入分类:在工作区行右侧下拉框选分类,或把工作区行拖到目标分类行上。
  3. 在同一工作区下切换会话:展开工作区,点击会话行打开;需要更多历史时点「显示更多」。
  4. 快速新建:在工作区行点 + 新建会话;在顶栏或某分类行点 + / 文件夹按钮,用系统目录选择器添加已有目录为新工作区。
  5. 临时回到官方列表:点树顶列表图标或底部文件夹图标,无需卸插件;归档会话等官方列表独有能力可在原生视图中操作。

顶部筛选框输入关键词后,工作区与会话列表会同步过滤;展开工作区时会话也按同一关键词过滤。

适用场景与注意

适合谁:长期在 DSH 桌面版维护多个磁盘目录作为工作区、且希望用自建分类组织列表的开发者。与 DSH「一切皆插件」的生态一致;插件目录页在 SkillHub,与 DeepSeek / 幻方无官方从属关系,安装前仍建议查看 GitHub 源码 与 MIT 许可证。

已知限制(README 原文):

  • 拖拽仅支持「工作区 → 分类」,不支持分类排序、不支持工作区在分类内手动排序。
  • 新建工作区使用系统目录选择器,只能选已存在的目录;未实现官方 browse 式应用内浏览。
  • 归档会话不出现在树中;恢复归档需切回官方列表。
  • 分类仅存本机 localStorage,不换机同步;清缓存会丢失分类。

安全与权限:插件在 DSH 客户端进程内运行,读写本机 localStorage 并调用与工作区、会话相关的 Cordis 服务;安装前应确认包来源(npm 包名或你信任的源码路径)。

若你的插件要在同一棵树中扩展 UI,README 提到可在 priority: -100 之下继续注册,或直接 fork 本插件作为 sidebar.workspaces 实现;槽位 props 为 { wide, expandSidebar }。

结尾

dsh-workspace-categories 在不替换官方工作区服务的前提下,用分类树重组左侧栏浏览体验,并支持一键切回原生列表。安装命令为 dsh plugin --profile desktop add dsh-workspace-categories,启用后重启桌面应用即可。

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

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

Xiaoye