dsh-session-tree:带标签与跨工作区拖动的 DSH 侧栏会话树

前言

在 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 扩展点推断为可复现的日常流程:

  1. 完成上一节的安装与禁用官方 ui-workspace,重载页面后侧栏应显示增强会话树。
  2. 在某一会话行通过行操作或菜单维护标签;数据经 PUT /api/dsh-session-manager/tags 落盘到 ~/.dsh/session-tags.json。
  3. 在树头部切换「按标签分组」,用标签芯片快速扫视同类会话。
  4. 将某会话行拖到目标工作区,对应 POST /api/dsh-session-manager/sessions/move;标签随会话迁移。
  5. 需要清理会话时,使用带备份能力的删除菜单项(具体备份策略以实现为准,入口在 sidebar.workspaces.session.menu.item)。
  6. 多窗口同时使用时,若标签未即时同步,等待最多约 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 仓库。

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

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

Xiaoye