dsh-workspace-sidebar: Sidebar Workspace Overrides and Conversation Fork Tree

前言

在 DSH(DeepSeek Harness)里,侧栏「工作区」负责浏览分组、切换工作区、在列表里找会话。官方 @deepseek-ai/dsh-client-ui-workspace 提供分组树、扁平列表、置顶与归档等能力;当会话通过 fork 产生父子关系时,列表仍是扁平排序,父子关系主要靠标题后缀或记忆来辨认。若你经常在同一工作区里开多条分支会话,并希望批量归档、折叠整棵分支,就需要一套把 fork 关系画成树、并在工作区标题上提供批量操作的界面实现。

下面介绍社区插件 dsh-workspace-sidebar:它整块接管侧栏工作区区域及相关插槽,在官方 ui-workspace 源码基础上改行为,而不是在外层再包一层。

这是什么

dsh-workspace-sidebar 是 DSH Web 客户端的侧栏「工作区」覆写插件,维护者为 longyi-0x0,分类为客户端插件。安装后侧栏工作区浏览、会话主视觉区的工作区选择器、会话行菜单与悬停按钮等位置由本插件实现;自带的 ui-workspace 经 bundle patch 关闭,避免两套实现同时注册同一插槽。

宿主侧 index.js 的 apply 为空,仅满足 Loader 对插件入口的形状要求;业务与 UI 都在浏览器侧的 client.js 里。

接管哪些界面

位置 内容
侧栏工作区区域 工作区分组 / 分组树 / 扁平三种浏览,工作区与嵌套工作区的展开、拖拽重排、新建、重命名、删除,会话列表与搜索
会话行 展开水位线、置顶与手动排序、运行 / 待处理 / 完成提醒、定时任务标记、归档过滤,以及行菜单与悬停按钮
会话行插槽 sidebar.workspaces.session.menu.item、sidebar.workspaces.session.row.action、sidebar.session.row.leading 等由本插件声明并注册内置动作;其他客户端插件仍可往这些插槽追加项
会话主视觉区 新会话的 Workspace 选择器(conversation.hero.workspace),含组合式目录选择器插槽
提示层 行内操作的 toast(workspace.toast)与确认对话框

相对上游的核心改动

插件基于 @deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.5 的源码副本(MIT)。在保留上游排序与水位线语义的前提下,主要增量如下。

分叉会话树
子会话按 parentId 嵌套在父行下:父行在前,子行逐代缩进,祖先竖线在分支末尾渐隐。

分支折叠
有子行的会话显示折叠箭头,点击可收起或展开整条分支。折叠状态存在浏览器本地视图 store(dsh.workspace.view.v5),刷新后保留。

前导格
折叠箭头与运行圆点共用 16px 前导格:空闲分支显示箭头,运行中的行显示圆点;悬停运行中的分支时圆点换回箭头,仍可折叠。

分叉标题
fork 时不再递增标题的 (n) 后缀,分支关系由树结构表达。

归档全部会话
工作区标题行在有会话时出现「归档全部会话」按钮:跳过运行中和空白会话,完成后 toast 报出归档与跳过数量,并提供「显示已归档」入口。

样式热替换
客户端样式注入会先移除上一代 style 标签,rebuild 后不再沿用旧 CSS。

安装与启用

仓库已提交构建产物 client.js,从 GitHub 或本地链接安装均无需现场构建。

从 GitHub 安装:

dsh plugin --profile desktop add "github:longyi-0x0/dsh-workspace-sidebar"

或链接本地检出目录:

dsh plugin --profile desktop add "link:/path/to/dsh-workspace-sidebar"

macOS 桌面版若未把 dsh 加入 PATH,可使用应用内 CLI 完整路径:

"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add "github:longyi-0x0/dsh-workspace-sidebar"

装完后需要重启 DSH。client.js 在启动时装配进浏览器 bundle,仅刷新浏览器页面不够。

典型用法

  1. 按树浏览 fork 会话:在工作区会话列表中,子会话缩进在父行下;点折叠箭头收起或展开整支分支,状态在本地保留。
  2. 批量归档:在工作区标题行点「归档全部会话」;运行中与空白会话会被跳过,完成后根据 toast 中的数量与「显示已归档」入口核对结果。
  3. 与官方能力并用:分组 / 分组树 / 扁平浏览、拖拽重排工作区、置顶与会话行菜单等仍来自同一套 ui-workspace 衍生实现;本插件替换的是官方包在侧栏上的注册,不要在同一 profile 里再启用一份上游 ui-workspace。

其他客户端插件若向 sidebar.workspaces.session.menu.item 等插槽注册项,行为与未覆写时一致,仍由宿主加载顺序与本插件的插槽声明共同决定。

适用场景与注意

适合谁
经常在单个工作区内 fork 多路会话、需要树形折叠与「归档全部」的 Web 客户端用户;希望侧栏工作区行为与官方 0.2.1-rc.5 系 ui-workspace 一致、仅增强分叉与批量归档场景的人。

权限与信任
插件以当前 DSH 进程的权限运行,可访问与会话、工作区相关的客户端 API。安装前应阅读仓库源码与 MIT 许可证;src/ 等派生自官方 ui-workspace,上游说明见仓库 NOTICE.md。

兼容性与限制

  • 仅实现 Web 客户端半侧(dsh.client.platform: 'web'),无宿主服务、路由或后台任务。
  • 依赖 package.json 中 dsh.client.inject 列出的客户端包与插槽契约,由当前 DSH 版本提供;DSH 升级若改动插槽、控制器 API 或模块表,需同步上游源码重新打 bundle。本仓库对应上游 0.2.1-rc.5。
  • 不发布 npm 包,安装来源只有 GitHub 或本地 link:。

自行构建(可选)
若需从源码生成 client.js(Node >= 20):

pnpm install
pnpm run build

产物由 esbuild 从 src/client/index.ts 打出;仓库内 client.js 为提交物,手改会在 CI 比对中失败。

结尾

dsh-workspace-sidebar 用覆写方式替换侧栏工作区实现,在官方 ui-workspace 能力之上增加分叉会话树、分支折叠、工作区级批量归档与样式热替换,适合 fork 密集的工作流。插件目录与说明见 SkillHub 目录页,源码与安装说明见 GitHub 仓库。

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

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

Xiaoye