前言¶
在 DeepSeek Harness(DSH)里用 Web UI 管多个项目时,工作区一多,侧边栏里常用的条目容易被新开的文件夹顶到下面。宿主注册新工作区时会把新项插到列表最前面,每多建一个目录,正在用的那几个就往下挪一格。下面介绍社区插件 dsh-workspace-pins:把常用工作区钉在侧边栏顶部并保持固定顺序,必要时还能连同对话记录永久移除工作区注册(不删磁盘上的项目文件夹)。
这是什么¶
dsh-workspace-pins 是面向 DSH Web 客户端的插件,维护者为 junjundesk,在 SkillHub 插件目录 中归类为「客户端」。它不新增业务状态、不改内置包,复用宿主已有的工作区排序、归档与会话能力,用浏览器本地存储记住「钉住」名单,并在侧边栏底部提供图钉入口与浮层面板。
核心功能¶
固定与排序¶
- 点侧边栏底部图钉按钮,在面板里点某行左侧图钉即可固定该工作区。
- 固定项立刻升到列表最上面;后固定的接在固定区末尾,先固定的始终在上。
- 悬停固定项可用
↑↓调整固定区内的先后;固定区整体始终在所有未固定工作区之上。 - 再点一次图钉可取消固定;面板支持「全部取消固定」。取消固定不影响工作区本身与会话。
顺序通过宿主 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 / 幻方无官方从属关系。
方式一:插件管理器(推荐)¶
- 打开 dsh Web UI(默认
http://127.0.0.1:3080); - 左下角 设置 → 插件;
- 选 从本地目录安装,
link:目标指向本地的dsh-workspace-pins目录; - 装完刷新页面,侧边栏底部、设置图标旁会出现图钉按钮。
管理器会自动写好依赖、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),卸载后可手动清除。
典型用法¶
经过上面的安装步骤后,日常可按下面顺序操作:
- 固定:图钉按钮 → 选工作区 → 点行左侧图钉。
- 调序:悬停固定项 →
↑↓。 - 找条目:超过 6 个工作区时用面板顶部筛选框。
- 彻底移除注册:悬停 → 垃圾桶 → 阅读确认条 → 确认(会话记录删除,项目目录保留)。
- 取消固定:再点图钉或「全部取消固定」。
固定名单仅存本机浏览器,不跨设备同步;换浏览器需重新固定。与宿主自带的工作区拖拽不冲突:拖动固定区内顺序会被下次校正覆盖,请用面板内 ↑ ↓;非固定区拖动不受影响。页面未打开时不跑顺序守卫,期间新建的工作区可能临时排在最前,下次打开会自动归位。
适用场景与注意¶
适合长期在 DSH Web UI 里切换多个仓库、希望「常开的几个」始终停在侧边栏顶部的开发者。不适合需要跨浏览器/跨设备同步固定名单的场景(当前设计为本地 localStorage)。
删除会话后,搜索索引(SQLite)可能短暂残留命中项,宿主会自行对账;若需立刻干净,可重启 dsh。修改 Host 半边 index.js 后需禁用再启用插件条目或重启;改 lib/client.js 可走 HMR,刷新即可。
维护者提供离线自检(不依赖浏览器):
node test/client-selfcheck.mjs
结尾¶
dsh-workspace-pins 用宿主已有接口解决「新工作区把常用的挤下去」和「清理不要的工作区与会话记录」两类问题,入口轻量(侧边栏图钉 + 面板)。进一步了解可查看 SkillHub 目录页 与 GitHub 仓库。