dsh-workspace-session-drag:侧栏拖拽在工作区之间移动会话

前言

在 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),核心一句:在侧栏把会话从一个工作区拖到另一个工作区,确认后真正移动会话日志与工作区归属;支持子代理跟随、列表边缘自动滚动、已打开且空闲的会话即时生效。

插件分宿主半侧(路由、注册表刷新、文件移动)与浏览器半侧(拖拽 UI、确认框、自动滚动),通过 Cordis bundle patch 注入桌面/Web 客户端。

核心功能

跨工作区拖动与确认

  1. 在左侧侧栏按住某个会话拖动。
  2. 拖到目标工作区的标题或该分组内任意会话区域;目标会出现蓝色虚线框高亮。
  3. 松开鼠标后弹出确认框,例如:是否将《会话名》从《工作区 A》移动到《工作区 B》?
  4. 点「移动」后尽量即时生效:刷新工作区归属,一般不用重启 DSH。

同一工作区内拖动仍走 DSH 自带排序,不会弹确认框。

未分组与工作区双向拖动

  • 「未分组」里的会话拖到某个工作区分组 → 归入该工作区。
  • 工作区里的会话拖到「未分组」分组,或侧栏列表空白处 → 确认后移出工作区,变为未分组。移出只改 workspace.json 归属,会话日志、cwd、内容不动,可随时再拖回原工作区(若 cwd 未变则只恢复归属、不重复搬文件)。

长列表边缘自动滚动

拖到侧栏列表顶部或底部边缘时自动滚动,越靠边缘滚得越快。列表很长时便于把会话拖到下方工作区或拖回上方;同工作区内排序时同样生效。

已打开、空闲的会话

没有正在跑的任务(对话回复、子代理、后台任务、提醒)时,已打开的会话也可移动:先 flush 事件,再切换写句柄目录,后续事件写入新工作区路径。子代理会话随父会话一起移动。

确认后的底层改动与备份

确认后先自动备份,再:

  1. 改写会话日志 header 里的 cwd。
  2. 将会话日志目录移动到目标工作区的 session-project 目录。
  3. 同步标题缓存。
  4. 即时刷新工作区注册表(detach 旧 / attach 新;已打开会话走等价的记录改写)。

若宿主半侧注册表刷新失败,文件会整体回滚并报错,不留下半移动状态。移动前备份位于 %USERPROFILE%\.dsh\backups\session-drag-<时间>/。

安装与启用

要求:DeepSeek Harness Desktop(Windows / Web 均可)。安装时 DSH 须完全退出(窗口与托盘图标)。插件要求 Node >= 20。

资料中的安装方式如下,没有 dsh plugin add github:owner/repo 形式的一键远程安装,需使用 link 或本地目录。

方式 A:一键安装(Windows,推荐)

  1. 下载或克隆本仓库到任意目录(例如 D:\dsh-plugins\<本仓库>)。
  2. 完全退出 DeepSeek Harness。
  3. 双击目录中的 安装.cmd。
  4. 重新打开 DeepSeek Harness。
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 操作步骤一致:

  1. 侧栏按住会话拖动。
  2. 拖到目标工作区标题或分组内区域(注意顶部/底部边缘可触发自动滚动)。
  3. 松开 → 确认框 →「移动」。
  4. 成功后有提示,工作区列表自动刷新。

移出工作区:拖到「未分组」或侧栏空白 →「移出工作区」确认 → 仅归属变化,日志与 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 / 幻方无官方从属关系。

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

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

Xiaoye