dsh-workspace-pins: Pinned Workspace Order in the Sidebar

前言

在 DeepSeek Harness(DSH)里用 Web UI 管多个项目时,工作区一多,侧边栏里常用的条目容易被新开的文件夹顶到下面。宿主注册新工作区时会把新项插到列表最前面,每多建一个目录,正在用的那几个就往下挪一格。下面介绍社区插件 dsh-workspace-pins:把常用工作区钉在侧边栏顶部并保持固定顺序,必要时还能连同对话记录永久移除工作区注册(不删磁盘上的项目文件夹)。

这是什么

dsh-workspace-pins 是面向 DSH Web 客户端的插件,维护者为 junjundesk,在 SkillHub 插件目录 中归类为「客户端」。它不新增业务状态、不改内置包,复用宿主已有的工作区排序、归档与会话能力,用浏览器本地存储记住「钉住」名单,并在侧边栏底部提供图钉入口与浮层面板。

核心功能

固定与排序

  1. 点侧边栏底部图钉按钮,在面板里点某行左侧图钉即可固定该工作区。
  2. 固定项立刻升到列表最上面;后固定的接在固定区末尾,先固定的始终在上。
  3. 悬停固定项可用 ↑ ↓ 调整固定区内的先后;固定区整体始终在所有未固定工作区之上。
  4. 再点一次图钉可取消固定;面板支持「全部取消固定」。取消固定不影响工作区本身与会话。

顺序通过宿主 workspaces.insertBefore() 写进工作区注册表,关页面后置顶仍有效;下次打开页面会再校正一次(例如页面关闭期间新建的工作区会被推回固定区之后)。

筛选

工作区超过 6 个时,面板顶部会出现筛选框,可按名字或路径过滤。

永久删除工作区(含会话记录)

悬停任意一行,点最右侧垃圾桶,确认后会依次:归档该工作区名下的会话(正在运行的先停止)→ 删除这些会话的记录文件 → 刷新会话列表 → 移除工作区注册。任一步失败会停下并在面板上显示原因,避免出现「工作区没了、对话还在」的半截状态。

删的是对话记录,不是项目文件夹:工作区目录里的源码和文件不动。操作不可恢复,确认条会写明受影响的会话数量。

宿主没有「删除会话」的公开 API,插件在 Host 侧注册最小 HTTP 端点:

POST /dsh-workspace-pins/delete-sessions   { sessionIds: string[] }

在会话根目录下按约定路径删除对应 session-<id> 目录,并对 session id 与批量数量做了约束,避免路径穿越。

环境与依赖

项 说明
支持 dsh >=0.2.2-alpha.2(engines.dsh 声明;实测 0.2.2-alpha.2,Windows 11 + web profile)
平台 Web(dsh.client.platform: web)
第三方依赖 无
许可证 MIT
Node >=22(见 package.json)

低于声明的 dsh 版本时,安装清单检查会在跑 pnpm 之前拒绝安装。查看本机版本:

dsh --version

安装与启用

插件以当前 dsh 进程权限运行;安装前建议在 GitHub 仓库核对源码与 MIT 许可证。SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。

方式一:插件管理器(推荐)

  1. 打开 dsh Web UI(默认 http://127.0.0.1:3080);
  2. 左下角 设置 → 插件;
  3. 选 从本地目录安装,link: 目标指向本地的 dsh-workspace-pins 目录;
  4. 装完刷新页面,侧边栏底部、设置图标旁会出现图钉按钮。

管理器会自动写好依赖、dsh.profile.bundles 和 cordis.patch.yml,无需手工改文件。

方式二:命令行 + 手工清单

先把插件目录放到本机,再在 profile 目录里链入包:

git clone https://github.com/junjundesk/dsh-workspace-pins.git
cd dsh-workspace-pins
dsh plugin --profile web add link:"$(pwd)"

pnpm add 只会写依赖,还需手工补两处(插件管理器会自动完成):

~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组中加入 "dsh-workspace-pins"。

~/.dsh/profiles/web/cordis.patch.yml 末尾增加:

- insert:
    - id: workspace-pins
      name: dsh-workspace-pins

然后重启 dsh --profile web 或等待 HMR 重新装配。

装完怎么确认

dsh --profile web --dump-config | grep -n workspace-pins

能看到 workspace-pins 即表示已装配;页面上侧边栏底部应出现图钉图标。

卸载

dsh plugin --profile web remove dsh-workspace-pins

再从 dsh.profile.bundles 与 cordis.patch.yml 删掉对应项并重启。固定名单在浏览器 localStorage(键 dsh.workspace-pins.v1),卸载后可手动清除。

典型用法

经过上面的安装步骤后,日常可按下面顺序操作:

  1. 固定:图钉按钮 → 选工作区 → 点行左侧图钉。
  2. 调序:悬停固定项 → ↑ ↓。
  3. 找条目:超过 6 个工作区时用面板顶部筛选框。
  4. 彻底移除注册:悬停 → 垃圾桶 → 阅读确认条 → 确认(会话记录删除,项目目录保留)。
  5. 取消固定:再点图钉或「全部取消固定」。

固定名单仅存本机浏览器,不跨设备同步;换浏览器需重新固定。与宿主自带的工作区拖拽不冲突:拖动固定区内顺序会被下次校正覆盖,请用面板内 ↑ ↓;非固定区拖动不受影响。页面未打开时不跑顺序守卫,期间新建的工作区可能临时排在最前,下次打开会自动归位。

适用场景与注意

适合长期在 DSH Web UI 里切换多个仓库、希望「常开的几个」始终停在侧边栏顶部的开发者。不适合需要跨浏览器/跨设备同步固定名单的场景(当前设计为本地 localStorage)。

删除会话后,搜索索引(SQLite)可能短暂残留命中项,宿主会自行对账;若需立刻干净,可重启 dsh。修改 Host 半边 index.js 后需禁用再启用插件条目或重启;改 lib/client.js 可走 HMR,刷新即可。

维护者提供离线自检(不依赖浏览器):

node test/client-selfcheck.mjs

结尾

dsh-workspace-pins 用宿主已有接口解决「新工作区把常用的挤下去」和「清理不要的工作区与会话记录」两类问题,入口轻量(侧边栏图钉 + 面板)。进一步了解可查看 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye