前言¶
原型跑多了以后,侧边栏里会同时挂着不同 workspace 下的会话:有还在跑的,有等输入的,有刚归档的。DSH Desktop 自带的 Workspace 视图按 workspace 划分,很难表达「这几个来自不同 workspace 的会话其实属于同一个实验」这类横向关系。解决办法通常是来回搬会话,但搬动会牵动官方的 workspace 归属和会话日志。
dsh-session-grove 走的是另一条路:在官方侧边栏之上加一层只影响显示位置的分组,分组只改插件自己的记录,不碰 workspace 归属、workspace registry、会话日志,也不写 workspace.json。由 momijijin 维护,当前版本 0.4.0-beta.58。
它改了什么,不动什么¶
凡是分配会话到分组的操作,只改两件事:插件自己的 group 记录,以及该会话在 Free Groups 视图里的位置。以下是 README 列出的边界:
- 官方 workspace 成员关系、workspace registry 和会话日志从不被修改;
- 会话标题与归档状态只在显式用户操作,或启用 opt-in 的
controlSessionsAPI 时变化; workspace.json从不被写入。
因此同一个分组里可以同时放着不同 workspace 的会话,代价是需要维护插件自己的数据文件。
安装与兼容范围¶
安装走 dshmarket,在市场中搜索:
dsh-session-grove
README 注明市场条目仍在准备中;条目上线后,安装和更新都应完全通过 dshmarket / 插件管理器完成。插件不自行更新,也不知道下一版托管在哪里。本地 tarball 与命令行安装属于维护者排障路径,只在 docs/RELEASE.md 说明,普通用户应走市场入口。上一项本地 tarball 安装过的话,需要重新从市场装一次,以便安装来源绑定到目录。
兼容范围由插件捆绑的 DSH core/API 决定,而不是桌面壳名称。以下事实来自 README 和 package.json:
engines.dsh:>=0.2.0-rc.2 <0.3.0;主要适配@deepseek-ai/dsh0.2.1-rc.2 与 0.2.1-rc.5;engines.node:>=22.19.0;- 官方桌面验证:community DSH Desktop Stable 2.0.18(rc.2),official DeepSeek Harness desktop 0.2.1.0(rc.5);
- 明确不支持 community DSH Desktop Beta 和 community DSH NEXT,这两个可能碰巧加载,但不构成兼容性承诺。
平台侧,CI 在 Ubuntu、Windows、macOS 上跑 Node 级与打包验证,coverage gate 只在 Ubuntu 上跑。真实 DSH UI 只在 Windows 上做过验证,Linux、macOS 的 UI 支持仍属实验性,直到有真实的 host/UI 验证通过。运行时本身是平台中立的 JavaScript:src/ 中没有 process.platform 或 child_process 分支,也不调 PowerShell;scripts/qa/ 下的 PowerShell 只是维护者测试装置,不进 npm 包。
有用的地方在于,官方与社区桌面各自捆绑了不同的 DSH 版本和插件组合,两者需要分别回归。这一点 README 也明确写了。
分组与视图操作¶
以下是 README 里列出的可用能力。
分组:
- 创建根分组,支持最多 8 层嵌套;
- 重命名、换图标、选调色板颜色或自定义
#RRGGBB; - 拖拽重排、改父级,并带上子树;
- 菜单里的上移 / 下移作为拖拽的替代;
- 折叠 / 展开;
- 空叶子分组可直接删除;删除非空分组前,需要先为子会话和子分组选好去处;
- 在分组内新建会话时使用推断出的 workspace;workspace 切换或新建要走宿主 UI。
视图:
- Free Groups 与原生 Workspace 视图之间切换;
- 侧边栏宽度 264px 到视口 80%,默认 420px;
- 双击分隔条恢复默认宽度;
- 视图模式、宽度、折叠状态、归档过滤、对话框几何都会持久化。
会话、归档与搜索¶
会话侧支持把不同 workspace 的会话放进同一分组,也可以把会话拖回 Ungrouped;支持打开、重命名、归档 / 取消归档、分配分组;归档动作放在 hover 出的操作里;会话菜单里有 fork 和 Copy Session ID。fork 使用最后一条已完成的 turn,并把子会话放在源分组的首位(源属于 Ungrouped 时放在 Ungrouped 顶部)。归档中的搜索结果会变暗且无法打开。
搜索覆盖会话标题、workspace 和分组路径;点击结果会自动展开祖先、滚动到对应行并高亮。
头部只有三个统计按钮:Running、Waiting for input、Unread,各自是互斥的主状态,后台 job 计数不计入。每个气泡按分组列出会话,点击即打开。
对话框支持拖拽标题栏与八方向拉伸,点击遮罩不会关闭,Cancel/Escape 才关闭。
第一次运行时,有一张一次性提示说明分组只改变显示位置,以及如何建组、拖会话;该提示可关闭且状态存 localStorage。没有分组也没有会话时,空态提供创建第一个分组的入口。右上角视图选项含归档三态、Reset layout(只恢复布局,不动分组数据)和版本 / 范围信息。
数据与升级¶
group 记录的存放位置:
<dshHome>/storages/dsh-session-grove.json
写入时使用修订号比较和串行队列,避免并发写覆盖。
本地化方面,包内带 18 种以上语言字典(英文、中文、日语、韩语、德语、法语、西班牙语、巴西葡萄牙语、意大利语、荷兰语、波兰语、土耳其语、越南语、泰语、印尼语、俄语、印地语、繁体中文、阿拉伯语)。Locale id 按基础语言解析(ja-JP → ja,zh-Hant/zh-TW → zh-Hant,pt-BR → pt),不支持的语言回退英文;阿拉伯语会把插件根切到 RTL。插件向宿主注册这些字典,但不往宿主语言目录里加语言。
从 dsh-session-groups 升级¶
0.4.0-beta.1 的 identity reset 意味着这个包不会自动读取、复制或删除旧 dsh-session-groups 的记录和浏览器 key,以避免导入同名社区插件的数据。手工迁移清单写在 docs/MIGRATION-0.4.md。
适用场景与注意¶
适合同时维护多个 workspace、已经或即将超出原生 Workspace 视图组织能力的场景,尤其是需要把跨 workspace 的会话挂在一个主题下的情况。分组是显示层抽象,不改变会话的 workspace 成员关系和日志,所以搬移理由应以展示为限,不能用它代替真正的 workspace 拆分。
插件运行在宿主 dsh 进程中,权限等同当前 dsh 进程。安装前打开仓库检查源码和 LICENSE;本分发页面的星标、更新频率和社区反馈也值得先看一遍再决定是否长期依赖。官方文档见 GitHub 仓库,社区目录见 SkillHub 页面。
结尾¶
dsh-session-grove 的价值在于把「跨 workspace 的会话归属」变成可拖拽的显示层,同时刻意不碰官方的会话数据。它是 beta 版本,支持范围绑定 engines.dsh 区间,实际能否用要对照自己手上的 DSH 版本判断。
- SkillHub 目录页:https://www.skillhub.cn/plugins/momijijin/dsh-session-grove
- 源码仓库:https://github.com/momijijin/dsh-session-grove
(SkillHub 是独立社区目录站点,与 DeepSeek / 幻方无官方从属关系。)