前言¶
在 DSH 的 Web 或桌面客户端里,侧栏会话树通常由官方 ui-workspace 提供:按工作区列出会话,基础操作够用,但标签整理、按标签分组、把会话拖到另一个工作区、删除前备份等能力并不完整。社区维护者 minhaoli 在官方 @deepseek-ai/dsh-client-ui-workspace(README 写明基于其 0.1.7 树)上做了独立打包的增强版 dsh-session-tree,与官方包并存安装会冲突,需要按文档关闭官方行后再启用。下面介绍它解决什么问题、依赖什么、如何安装,以及使用时要注意的点。
这是什么¶
dsh-session-tree 是 DSH 的客户端插件(分类:客户端),仓库 minhaoli/dsh-session-tree,目录页 skillhub.cn 条目。一句话定位:在官方侧栏会话树之上增加标签芯片、按标签分组、跨工作区拖动移动会话,以及可带备份的删除;归档/取消归档入口在行菜单中(README 提到 GUI 侧缺的 unarchive 方向由这里补上)。
它与官方实现注册同一个 Cordis 服务名 uiWorkspace,因此不能和官方 ui-workspace 同时启用。标签的读写、移动、删除并不走浏览器到宿主 IPC,而是调用同源 REST API /api/dsh-session-manager/,由配套插件 dsh-session-manager 提供;未安装时树仍能渲染,但标签为空、写入无效、拖动与删除会失败。
环境要求¶
README 给出的开发与测试基线如下(更早的 DSH 版本未测试):
| 项 | 要求 |
|---|---|
| DSH | 0.2.1-rc.2 |
@deepseek-ai/cordis |
~4.0.5 |
| React | 18.2+ |
| 运行模式 | Web UI(web 或 desktop profile) |
| 配套插件 | dsh-session-manager(标签、移动、删除所必需) |
当前包版本为 0.2.0,许可证 MIT(捆绑客户端衍生自官方 ui-workspace,再分发时需留意上游许可说明)。
核心功能¶
以下能力均来自 README 功能表与说明,可与官方树对照理解「多出来的部分」:
| 能力 | 界面位置(扩展点) |
|---|---|
| 会话行上的标签芯片 | sidebar.workspaces.session.row.action |
| 标签 / 移动 / 删除等菜单项 | sidebar.workspaces.session.menu.item |
| 按标签分组显示树 | 树头部 |
| 将会话拖到另一个工作区 | 会话行拖动 |
| 归档与取消归档 | 行菜单 |
标签数据由 dsh-session-manager 写入 ~/.dsh/session-tags.json,重启后保留,会话跨工作区移动时标签随会话一起走。客户端每 20 秒 轮询刷新标签;因此在另一个窗口写的标签,最晚约一个轮询周期后会在当前窗口出现。
浏览器侧依赖的 REST 接口(均由 dsh-session-manager 提供):
| 用途 | 方法与路径 |
|---|---|
| 读取全部标签 | GET /api/dsh-session-manager/tags |
| 写入某会话标签 | PUT /api/dsh-session-manager/tags |
| 删除会话 | POST /api/dsh-session-manager/sessions/delete |
| 移动会话 | POST /api/dsh-session-manager/sessions/move |
README 还列出可选生态插件:语义搜索后端 dsh-session-query-vector、会话内查找 dsh-session-search、一键重载前端 dsh-ui-reload。它们不是启用本树所必需。
安装与启用¶
安装顺序固定为两个包,且必须使用 README 中的命令(将 <your-profile> 换成你的 profile 名):
dsh plugin --profile <your-profile> add github:minhaoli/dsh-session-manager
dsh plugin --profile <your-profile> add github:minhaoli/dsh-session-tree
本插件与官方 ui-workspace 都注册 uiWorkspace 服务,安装后需要禁用官方 ui-workspace 行。在 profile 的 Cordis 补丁中增加:
# ~/.dsh/profiles/<profile>/cordis.patch.yml
- id: ui-workspace
disabled: true
客户端以独立模块提供,安装完成后重新加载页面再观察侧栏。若标签始终为空或拖动/删除无效,先确认 dsh-session-manager 已安装且其 webServer 已注册,上述四个 API 可访问。
典型用法¶
README 未给出逐步点击教程,但行为可从接口与 UI 扩展点推断为可复现的日常流程:
- 完成上一节的安装与禁用官方
ui-workspace,重载页面后侧栏应显示增强会话树。 - 在某一会话行通过行操作或菜单维护标签;数据经
PUT /api/dsh-session-manager/tags落盘到~/.dsh/session-tags.json。 - 在树头部切换「按标签分组」,用标签芯片快速扫视同类会话。
- 将某会话行拖到目标工作区,对应
POST /api/dsh-session-manager/sessions/move;标签随会话迁移。 - 需要清理会话时,使用带备份能力的删除菜单项(具体备份策略以实现为准,入口在
sidebar.workspaces.session.menu.item)。 - 多窗口同时使用时,若标签未即时同步,等待最多约 20 秒轮询,或确认 session-manager 服务正常。
适用场景与注意¶
适合谁:长期在 DSH Web/桌面客户端中管理大量会话、需要轻量标签与跨工作区整理、并愿意用社区 fork 替换官方 ui-workspace 行的开发者。
权限与安全:插件与 DSH 进程同权限运行;安装前建议阅读仓库源码与 MIT 许可证,并理解捆绑 lib/client.js 源自官方 ui-workspace(README 说明 source map 与 CSS dataset.plugin 仍指向上游,属来源标注而非缺陷)。
依赖关系:无 dsh-session-manager 时界面仍可显示,但标签与移动/删除实质不可用;排查时优先检查该插件与 REST 路由。
与官方关系:DSH 生态强调「一切皆插件」;skillhub.cn 为社区目录,与 DeepSeek / 幻方无官方从属关系,本文事实以 GitHub README 与 package 元数据为准。
结尾¶
dsh-session-tree 在不动官方 dsh-client-ui-workspace 包的前提下,以独立 bundle 提供带标签、分组、跨区拖动与可备份删除的侧栏会话树,并与 dsh-session-manager 通过同源 REST 协同。需要时可从目录页 minhaoli/dsh-session-tree 进入说明,源码与安装细节见 GitHub 仓库。