dsh-better-workspace:DSH 侧边栏主题分组插件

前言

DeepSeek Harness 的原生侧栏只提供基础的工作区与会话列表,缺乏主题分组与批量操作能力。当会话分散在不同工作区时,查找、归档或整理变得繁琐。dsh-better-workspace 是一个叠加在原生“工作区”区域之上的主题分组插件:它不会替换官方列表,而是在同一区域重新组织显示,并提供宿主没有的批量操作与安全删除。

这是什么

dsh-better-workspace 是 DeepSeek Harness 的侧边栏主题分组插件,由 whybebabo 维护。它叠加在原生“工作区”区域之上,不替换官方列表:会话仍由宿主管理,插件只在这块区域上重新组织显示,并补上宿主没有的批量操作与安全删除。

核心功能

主题分组

每个工作区内部是一棵树,用 emoji 标记的“分组”文件夹收纳会话,另有系统默认分组与「已归档」桶。

  • 新建分组:在工作区 ⋯ 菜单或标题栏 + 菜单里的「新建主题并放入…」;也可以把会话拖到目标分组来实现归类。新分组默认排在该工作区分组列表的最上面。
  • 新建会话:分组行尾的 + 直接在该分组下新建会话(工作区行尾的 + 则在该工作区新建)。
  • 改名:双击分组名直接内联编辑(重名与非法字符会即时提示并禁用保存)。
  • 排序:拖动分组行,拖到目标行的上/下半区决定插入位置,拖动时显示插入指示线。
  • 只看此分组:分组 ⋯ 菜单里的筛选会同时锁定它所属的工作区——同名分组不会跨工作区串味。
  • 删除分组:只清除归属,组内会话回到系统默认分组,不删会话。

每个工作区都有系统默认分组,不能改名或删除,但可以像普通分组一样拖动排序。

筛选与搜索

  • 工作区下拉筛选
  • 面板内本地搜索
  • 「只看此分组」

批量操作

点标题栏的「选择」进入选择模式,选择模式接管标题栏:退出、已选数量、归档/取消归档/移动/永久删除排成一行原生图标按钮,窄侧栏不折行。

选择混入已归档条目时,归档与移动置灰;混入未归档条目时取消归档置灰;混入未分组会话时移动置灰。工具栏下方直接说明置灰原因,悬停也有提示。暂存中的「新会话」占位行不参与批量选择。「全选」只包含当前显示出来的行:分组头复选框、分组 ⋯ 菜单、工作区 ⋯ 菜单走同一个派生(selectableIds),超过「显示全部 60 条」的分组会提示「已选中 N 条;另有 M 条未显示」,展开后再选即可——不会悄悄把没渲染过的会话带进批量删除。

安全删除

DSH 本身没有删除会话的命令,插件自行实现,规则是“宁可拒删”。

删除会移除磁盘上的会话记录,无法恢复(工作区文件本身不受影响)。流程是:调 /delete/preview 拿逐条判定 → 用户在对话框里确认 → 调 /delete/execute 执行。

  • 会话正在运行 → 先按官方方式 agent.cancel({kind:'user'}) 并等待离开 running(上限 3 秒),停不下来就不删。
  • 有子智能体会话 → 拦下,请删除主会话(会级联清理并在 preview 中计数)。
  • 用户分叉(带 parentSession、origin 为空)是顶层会话,可单独删除,不会被当成子智能体。
  • 删除当前正在看的会话后,自动切到一个新的空白会话。

与宿主一致

状态点、置顶上浮、行内悬浮卡、行尾操作条、定时任务时钟、图标与配色,都对齐宿主自己的实现。

失效保护

插件不会接管 DSH 的其余部分:侧栏折叠、窄视口或路由不可达时,面板会完全隐藏并交还原生 UI。

面板渲染在 shell.overlay,用结构选择器定位原生工作区区域,覆盖矩形与该区域自身盒子重合。被覆盖区域加上 inert + aria-hidden,官方弹窗出现时自动释放。

主题数据单独存放

分组与归属关系写在 <DSH_HOME>/dsh-better-workspace/topics.v1.json 这个单文件 sidecar 里,可直接备份、可与宿主升级解耦;卸载插件后数据仍在。

写入采用 临时文件 → fsync → rename,并在覆盖前保留 .bak。主文件损坏时自动回退备份并进入只读模式(面板顶部横幅提示);回退期间发生的那次写入不会再拿损坏的主文件覆盖 .bak。主文件与备份同时不可解析时拒绝一切写入(不会用空状态覆盖磁盘),修好文件后只读模式自动解除,无需重启宿主。

位置 作用
<DSH_HOME>/dsh-better-workspace/topics.v1.json 分组与归属关系(单文件,可直接备份)
<DSH_HOME>/dsh-better-workspace/topics.v1.json.bak 上一次成功写入的副本
<DSH_HOME>/dsh-better-workspace/topics.v1.json.corrupt-<ts> 主文件无法解析时保留的损坏副本,供人工抢救
<DSH_HOME>/dsh-better-workspace/topics.v1.lock 跨进程写锁(内容为 <pid>-<随机> 令牌)
localStorage["dsh-better-workspace:prefs:v1"] 工作区/分组筛选、折叠、搜索、拖拽顺序

安装与启用

环境要求

  • DeepSeek Harness Desktop 或 Web 0.2.1-rc.x,@deepseek-ai/cordis 4.0.5;
  • Node.js ≥ 22.19;
  • 本机可用 Git(以 github: 方式安装时)。

从 npm 安装(推荐)

dsh plugin --profile web add @whybebabo/dsh-better-workspace

DSH 会把插件装进 Web profile,并把 @whybebabo/dsh-better-workspace 注册到 dsh.profile.bundles,不需要克隆仓库、手动安装依赖或构建客户端。

没有全局 dsh 命令时,用 npx 执行:

npx @deepseek-ai/dsh plugin --profile web add @whybebabo/dsh-better-workspace

安装命令需要本机可以使用 Git 与 pnpm;使用 npx 时还需要 Node.js。

Desktop 会修改 desktop profile,装之前建议先备份 cordis.patch.yml / package.json / pnpm-lock.yaml:

dsh plugin --profile desktop add @whybebabo/dsh-better-workspace

从 GitHub 安装

不经过 npm,直接从仓库安装某个发布版本:

dsh plugin --profile web add github:whybebabo/dsh-better-workspace#v0.1.3

把 #v0.1.3 换成你要的 tag。这条路径同样需要 Git 与 pnpm,也不需要克隆仓库。

从源码安装

需要改代码或跟 main 分支时:

git clone https://github.com/whybebabo/dsh-better-workspace.git
cd dsh-better-workspace
npm install && npm run build

先在不影响现有 profile 的隔离环境里验证一遍:

dsh --profile topic-e2e --from-default-profile web --dump-config
dsh plugin --profile topic-e2e add "link:$(pwd)"
dsh --profile topic-e2e --no-open --port 8791      # 打印带 token 的 URL

确认无误后装到日常使用的 profile:

dsh plugin --profile web add "link:$(pwd)"

以 link: 方式安装时,宿主读取的始终是当前目录的产物:改完代码 npm run build 并重启即可,不必重新 add。

启动或重启 DSH

安装后关闭旧的 DSH Web 进程并重新启动:

dsh web

使用 npx 的启动方式:

npx @deepseek-ai/dsh web

打开侧栏,点「工作区」标题旁出现的 ▾,或把鼠标移到「工作区」上——看到工作区下拉与分组树,说明插件已加载。

升级

发布新版本后重新执行安装命令并替换版本:

dsh plugin --profile web add @whybebabo/dsh-better-workspace

随后重启 DSH。以源码方式安装的则用:

git pull && npm install && npm run build

卸载

dsh plugin --profile web remove @whybebabo/dsh-better-workspace

主题数据保留在 <DSH_HOME>/dsh-better-workspace/,需要清除请手动删除该目录。

典型用法

分组操作

  1. 在工作区标题旁的 ▾ 打开下拉菜单,选择「新建主题并放入…」。
  2. 在弹出的对话框中选择目标分组,或留空让新分组默认出现在顶部。
  3. 双击分组名进行重命名。
  4. 拖动分组行到目标位置,上/下半区决定插入位置。

会话归档

  1. 鼠标悬停在会话行尾,点击 ⋯ 菜单里的「归档」。
  2. 或进入选择模式,勾选多个会话,然后点击标题栏的「归档」按钮。

批量移动

  1. 点击标题栏的「选择」进入选择模式。
  2. 勾选需要移动的会话。
  3. 点击标题栏的「移动」按钮,选择目标分组。

安全删除

  1. 进入选择模式,勾选需要删除的会话。
  2. 点击标题栏的「永久删除」按钮。
  3. 在弹出的对话框中确认删除(会有预览信息)。
  4. 确认后插件会逐条执行删除,正在运行或包含子智能体的会话会被拒绝。

适用场景与注意

  • 适合需要频繁整理会话、按主题分组的 DSH 用户。
  • 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
  • 主题数据存储在本地,卸载后仍可手动清理。
  • 与宿主版本有兼容性要求:DeepSeek Harness Desktop 或 Web 0.2.1-rc.x,@deepseek-ai/cordis 4.0.5。

短结尾

dsh-better-workspace 在不改变 DSH 原生行为的前提下,为侧栏增加了主题分组、批量操作与安全删除能力。适合需要精细化管理会话的用户。插件目录页与源码仓库见下方链接。

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

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

小夜