前言¶
在 DeepSeek Harness(DSH)里,会话默认跟工作区绑定:日志目录、header 里的 cwd、工作区注册表里的归属是一套整体。多工作区并行时,若要把某个会话从工作区 A 归到 B,或从「未分组」收进某个项目,靠改配置文件或手工搬目录既慢又容易半改半留。社区插件 dsh-workspace-session-drag(维护者 liangzz1998,分类:客户端)在侧栏用拖拽加确认,把会话真正移动或只改归属,并尽量即时刷新,无需重启 DSH。
下面按定位、功能、安装、用法、限制与排错说明,事实与仓库 README 及 package.json 一致。
这是什么¶
dsh-workspace-session-drag 是 MIT 许可的 DSH 插件(当前资料版本 0.4.0),核心一句:在侧栏把会话从一个工作区拖到另一个工作区,确认后真正移动会话日志与工作区归属;支持子代理跟随、列表边缘自动滚动、已打开且空闲的会话即时生效。
- 目录页:https://www.skillhub.cn/plugins/liangzz1998/dsh-workspace-session-drag
- 源码:https://github.com/liangzz1998/dsh-workspace-session-drag
- GitHub 星标:4(截至资料抓取)
插件分宿主半侧(路由、注册表刷新、文件移动)与浏览器半侧(拖拽 UI、确认框、自动滚动),通过 Cordis bundle patch 注入桌面/Web 客户端。
核心功能¶
跨工作区拖动与确认¶
- 在左侧侧栏按住某个会话拖动。
- 拖到目标工作区的标题或该分组内任意会话区域;目标会出现蓝色虚线框高亮。
- 松开鼠标后弹出确认框,例如:是否将《会话名》从《工作区 A》移动到《工作区 B》?
- 点「移动」后尽量即时生效:刷新工作区归属,一般不用重启 DSH。
同一工作区内拖动仍走 DSH 自带排序,不会弹确认框。
未分组与工作区双向拖动¶
- 「未分组」里的会话拖到某个工作区分组 → 归入该工作区。
- 工作区里的会话拖到「未分组」分组,或侧栏列表空白处 → 确认后移出工作区,变为未分组。移出只改
workspace.json归属,会话日志、cwd、内容不动,可随时再拖回原工作区(若cwd未变则只恢复归属、不重复搬文件)。
长列表边缘自动滚动¶
拖到侧栏列表顶部或底部边缘时自动滚动,越靠边缘滚得越快。列表很长时便于把会话拖到下方工作区或拖回上方;同工作区内排序时同样生效。
已打开、空闲的会话¶
没有正在跑的任务(对话回复、子代理、后台任务、提醒)时,已打开的会话也可移动:先 flush 事件,再切换写句柄目录,后续事件写入新工作区路径。子代理会话随父会话一起移动。
确认后的底层改动与备份¶
确认后先自动备份,再:
- 改写会话日志 header 里的
cwd。 - 将会话日志目录移动到目标工作区的 session-project 目录。
- 同步标题缓存。
- 即时刷新工作区注册表(detach 旧 / attach 新;已打开会话走等价的记录改写)。
若宿主半侧注册表刷新失败,文件会整体回滚并报错,不留下半移动状态。移动前备份位于 %USERPROFILE%\.dsh\backups\session-drag-<时间>/。
安装与启用¶
要求:DeepSeek Harness Desktop(Windows / Web 均可)。安装时 DSH 须完全退出(窗口与托盘图标)。插件要求 Node >= 20。
资料中的安装方式如下,没有 dsh plugin add github:owner/repo 形式的一键远程安装,需使用 link 或本地目录。
方式 A:一键安装(Windows,推荐)¶
- 下载或克隆本仓库到任意目录(例如
D:\dsh-plugins\<本仓库>)。 - 完全退出 DeepSeek Harness。
- 双击目录中的
安装.cmd。 - 重新打开 DeepSeek Harness。
方式 B:命令行 link 安装¶
dsh plugin --profile desktop add link:<插件目录>
若 dsh 不在 PATH,可使用桌面端自带 CLI:
%LOCALAPPDATA%\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd
(接上同样的 plugin --profile desktop add link:<插件目录> 参数。)
方式 C:手动安装¶
编辑 %USERPROFILE%\.dsh\profiles\desktop\package.json:
- 在
dependencies增加:
"dsh-workspace-session-drag": "link:<插件目录>"
- 在
dsh.profile.bundles增加"dsh-workspace-session-drag"。
再以管理员 CMD 建立目录联接:
mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-workspace-session-drag" "<插件目录>"
安装前建议在 GitHub 阅读源码与 MIT 许可证;插件以当前 DSH 进程权限访问会话目录与注册表,只从可信来源安装。
典型用法¶
与 README 操作步骤一致:
- 侧栏按住会话拖动。
- 拖到目标工作区标题或分组内区域(注意顶部/底部边缘可触发自动滚动)。
- 松开 → 确认框 →「移动」。
- 成功后有提示,工作区列表自动刷新。
移出工作区:拖到「未分组」或侧栏空白 →「移出工作区」确认 → 仅归属变化,日志与 cwd 不变。
适用场景与注意¶
适合:多工作区开发者需要把历史会话归档到对应项目、在未分组与会话池之间整理、或在不重启的情况下调整已打开但空闲的会话归属。
不能移动的情况(插件会拒绝并说明正在进行的任务类型):
- 正在跑任务的会话(含当前正在对话的会话)。
- 空白会话(DSH 本身不可拖,插件不处理)。
- 归档会话。
其他限制:拖回工作区且 cwd 已等于该工作区路径时,只恢复归属;若 DSH 未来改为 file:// + IPC 且无 webServer,宿主路由不可用时插件会安全跳过,不报错、不影响启动。
移动改了哪些文件(摘要)¶
| 位置 | 改动 |
|---|---|
会话日志 session.vN.jsonl.zstd |
仅首帧 header 的 cwd 改为目标工作区路径 |
%USERPROFILE%\.dsh\sessions\--<cwd>--\<会话ID>\ |
整个目录迁到目标工作区对应路径 |
投影缓存 session_projcache |
identity.cwd 同步,标题保留 |
workspace.json |
旧工作区移除、新工作区加入该会话 |
移出工作区只改 workspace.json。
排错与卸载¶
- 桌面端 F12 打开 Console,搜索
dsh-workspace-session-drag或dsh-wsd。 - 提示「无法连接宿主半侧」→ 检查 profile 的
bundles是否包含本包,重启 DSH。 - 移动失败并提示「已回滚」→ 查看
.dsh\backups\session-drag-*与 DSH 日志中的[dsh-workspace-session-drag]。 - 卸载:完全退出 DSH 后双击
卸载.cmd。
开发者本地可跑冒烟测试:
node test/smoke-move-core.mjs
node test/smoke-auto-scroll.mjs
结尾¶
dsh-workspace-session-drag 把「跨工作区归会话」收成侧栏拖拽加确认,并在备份与回滚约束下改日志目录、header cwd 和注册表,对子代理与空闲 live 会话做了兼容。DSH 生态强调「一切皆插件」;SkillHub 目录页为社区收录,与 DeepSeek / 幻方无官方从属关系。