dsh-workspace-sidebar · 工作区侧栏覆写插件
DSH(DeepSeek Harness)Web 客户端的侧栏「工作区」覆写插件。它整块接管侧栏的工作区浏览区域、会话主视觉区的工作区选择器,以及会话行菜单与悬停按钮的插槽,替换 DSH 自带的 ui-workspace。分叉会话树、工作区批量归档这些改动直接落在源码里,不是对官方包的外层包装。
安装后侧栏与选择器就是本插件的实现;自带的 ui-workspace 由本插件的 bundle patch 关闭,不会再有两套注册同时挂在同一批插槽上。
接管哪些界面
| 位置 | 内容 |
|---|---|
| 侧栏工作区区域 | 工作区分组 / 分组树 / 扁平三种浏览方式,工作区与嵌套工作区的展开、拖拽重排、新建、重命名、删除,会话列表与搜索 |
| 会话行 | 展开水位线(「显示更多」/「收起」)、置顶与手动排序、运行 / 待处理 / 完成提醒、定时任务标记、归档过滤,以及行菜单与悬停按钮 |
| 会话行插槽 | sidebar.workspaces.session.menu.item、sidebar.workspaces.session.row.action、sidebar.session.row.leading 等由本插件声明并注册内置动作,其他客户端插件照常往里加 |
| 会话主视觉区 | 新会话的 Workspace 选择器(conversation.hero.workspace),含组合式目录选择器插槽 |
| 提示层 | 行内操作的 toast(workspace.toast)与确认对话框 |
宿主侧没有业务逻辑:index.js 的 apply 为空,只为满足 Loader 对一行插件的形状要求。
相对上游的改动
基于 @deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.5 的源码副本,当前有这些改动:
| 改动 | 行为 |
|---|---|
| 分叉会话树 | 子会话按 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 时用完整路径:
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
plugin --profile desktop add "github:longyi-0x0/dsh-workspace-sidebar"
装完重启 DSH。client.js 是启动时装配的浏览器 bundle,改完也要重启,浏览器刷新不够。
构建
pnpm install
pnpm run build # src/client → client.js
构建只做一件事:用 esbuild 把 src/client/index.ts 打成模块表格式的 client.js。React、Cordis、DSH 客户端模块保持 external,由运行时的模块表提供;clsx、src/vendor/ 里的纯工具层内联;CSS Modules 走 local-css,样式文本在 factory 执行时注入。
client.js 是提交进仓库的产物,不要手改。CI 会重新构建并比对,产物过期即失败。
目录
package.json 包名、exports、dsh 清单、构建脚本
cordis.patch.yml 关闭 ui-workspace 行,插入本插件行
index.js 宿主入口(空 apply,只为 Loader 形状)
client.js 浏览器半侧产物(提交,勿手改)
build/build.mjs esbuild 构建脚本
src/client/index.ts 客户端入口:注册浏览器、选择器、行动作与提示
src/client/rows/ 工作区分组、会话行、分叉树与样式
src/client/session-actions/ 置顶、重命名、分叉、归档、复制 ID 与确认对话框
src/client/toast/ 行内操作提示
src/client/contract/ 插槽与提示的类型契约
src/client/tree.ts 会话行与分叉树的纯推导
src/vendor/ 上游纯工具层副本(构建时内联)
locale/{zh,en}.json 插件页标题与描述
docs/upstream/ 上游包文档存档,仅供对照
兼容性与限制
- 只实现 Web 客户端半侧(
dsh.client.platform: 'web'),没有宿主服务、路由或后台任务。 - 依赖
package.json里dsh.client.inject列出的客户端包与插槽契约,这些由当前 DSH 版本提供。DSH 升级若改动插槽、控制器 API 或模块表,需要同步上游源码重新打 bundle;本仓库对应 0.2.1-rc.5。 - 本插件替换自带
ui-workspace,不要在同一 profile 里再启用一份上游包。 - 不发布 npm 包,安装来源只有 GitHub 或本地链接。
许可证与来源
本仓库以 MIT 许可证发布,见 LICENSE。
src/、locale/ 与 docs/upstream/ 派生自 DeepSeek Harness 官方的 @deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.5(MIT,Copyright (c) 2026 DeepSeek),上游许可见 NOTICE.md。上游文档原件存档在 docs/upstream/。
No comments yet. Be the first to write one.