dsh-workspace-mover
拖拽跨工作区真迁移会话,找回失联与未记账会话,文件夹改名后一键原地重定向工作区;ID 与历史原样保留,步步备份回滚。
安装
dsh plugin --profile web add dsh-workspace-mover
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-workspace-mover
当前版本:2.4.3。已通过 DSH Desktop 0.2.1-rc.5 删除、还原、即时显示、继续发送及语言切换验收,详见[2.4.3 验收与 PR 审查记录](docs/compatibility/issue-11-pr-12-review-2026-11-02.md)。
支持即时迁移的会话:空闲时释放写入句柄、实际搬移并重新加载;运行中可取消,或明确选择「停止任务并迁移」。迁移保留标题和历史。安装或热更新后请彻底重启 DSH 一次,以接入会话生命周期;无法安全释放的会话会明确阻止拖动迁移。旧队列仍保留恢复与取消入口。后端验证与实际验收结果见 [即时迁移记录](docs/compatibility/immediate-migration-2026-10-26.md)。
[!IMPORTANT]
非官方项目,由社区成员独立开发和维护。
<!-- Hero -->
<div align="center">
<b style="font-size: 1.15em;">在侧边栏把会话拖到另一个工作区——真迁移原始档案,而不是复制</b><br /><br />
<p style="font-size: 0; line-height: 1;">
<a href="https://github.com/PianoPrince/dsh-workspace-mover/actions/workflows/test.yml"><img alt="CI" src="https://github.com/PianoPrince/dsh-workspace-mover/actions/workflows/test.yml/badge.svg" style="height:20px; margin:0 2px;" /></a>
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
<a href="https://www.npmjs.com/package/dsh-workspace-mover"><img alt="npm 最近 30 天下载量" src="https://img.shields.io/npm/dm/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
<img alt="plugin version" src="https://img.shields.io/badge/dsh--plugin-2.4.3-4d6bfe" style="height:20px; margin:0 2px;" />
<img alt="DSH tested 0.2.1-rc.5" src="https://img.shields.io/badge/DSH_tested-0.2.1--rc.5-4c8dff" style="height:20px; margin:0 2px;" />
<img alt="Node" src="https://img.shields.io/badge/Node-%E2%89%A522-339933" style="height:20px; margin:0 2px;" />
</p>
<p style="font-size: 0; line-height: 1;">
<a href="https://github.com/PianoPrince/dsh-workspace-mover/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/PianoPrince/dsh-workspace-mover" style="height:20px; margin:0 2px;" /></a>
<a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg" style="height:20px; margin:0 2px;" /></a>
<a href="https://awesome-dsh-plugin.com"><img alt="Awesome DSH Plugin" src="https://awesome-dsh-plugin.com/badge.svg" style="height:20px; margin:0 2px;" /></a>
<a href="https://www.dsh.so/artifact/dsh-workspace-mover/"><img alt="dsh.so risk: low" src="https://www.dsh.so/badge/dsh-workspace-mover.svg" style="height:20px; margin:0 2px;" /></a>
<img alt="真迁移" src="https://img.shields.io/badge/-真迁移-4d6bfe" style="height:20px; margin:0 2px;" />
<img alt="零 token 消耗" src="https://img.shields.io/badge/-零%20token%20消耗-4d6bfe" style="height:20px; margin:0 2px;" />
<img alt="备份回滚" src="https://img.shields.io/badge/-备份回滚-4d6bfe" style="height:20px; margin:0 2px;" />
</p>
<p style="font-size: 0; line-height: 1;">
<img alt="GitHub clones observed(自 2026-08-25 累计,含 unique)" src="https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2FPianoPrince%2Fc14345658550a4a308570acfbaf9d170%2Fraw%2Fwsm-clones-total.json" style="height:20px; margin:0 2px;" />
<!-- release-downloads-badge:start --> <!-- release-downloads-badge:end -->
</p>
</div>
<div align="center">
🌏 中文 · <a href="./README_EN.md">English</a>
</div>
📑 目录
- [✨ 功能](#-功能)
- [🚀 安装](#-安装)
- [🖼️ 特性巡礼](#️-特性巡礼)
- [⌨️ 使用](#️-使用)
- [🔌 如何接入 DSH](#-如何接入-dsh)
- [🤝 与其他插件共存](#-与其他插件共存)
- [🧩 兼容性与卸载](#-兼容性与卸载)
- [🔐 安全台账](#-安全台账safety-ledger)
- [⚠️ 已知限制](#️-已知限制)(含 [可调策略](#-可调策略环境变量))
- [🆕 最近版本](#-最近版本)
✨ 功能
DeepSeek Harness 侧边栏可以拖拽排序同一工作区内的会话,但拖到另一个工作区上会被静默忽略。本插件补上跨工作区迁移:
- 🖱️ 拖拽迁移:把空闲会话行拖到目标工作区标题行,确认后完成移动
- 📦 批量迁移 / 分组合并:Ctrl/Shift 多选后整批拖移,或用组标题「⋯」菜单「整组迁移…」;源分组清空后可一键删除,两条命令完成合并(单批至多 50 个,失败互不牵连)
- 🚚 真迁移 · 零 token:会话 ID 与完整历史原样保留,不复制第二条会话、不重新注入上下文
- 🏠 工作区搬家向导:项目文件夹被移动/改名后,一键把失效分组原地重定向到新位置;id、标题、排序、归档位保持,名下会话连同旧路径散件一起迁移
- 🛟 会话救援(设置 → 会话救援):一键找回「失联」「未记账」「挂错分组」的会话;已归档会话可恢复;支持一键修复与筛选
- 🗑️ 回收站与备份:删除先进回收站,可还原到原位置或任意分组;迁移自动生成恢复快照,可按会话恢复或清理
- 🛡️ 数据保护:相同会话内容只保留一份物理快照,往返迁移不会无限增长;每次迁移仍写入历史,备份列表显示快照份数与占用
- ⏪ 移动历史与撤回:记录最近 100 次跨工作区移动,批量聚合为一条,整批可一键撤回
- 🧾 迁移任务中心:批量迁移逐项持久化记录(完成/失败、最后错误与尝试时间),失败项一键重试——按会话当前位置重新迁移,不用陈旧路径
- ⏳ 即时迁移:接入生命周期的空闲会话释放句柄后直接搬移并重新加载;运行中需明确选择停止任务。旧队列仍可查询、取消和重试
- 🔎 迁移预览:确认前展示来源、目标路径、冲突、运行状态、适配器和本次预计新增备份大小;已有内容快照会明确显示复用
- 📂 空分组清理 / 打开文件夹:只列出真正零成员的工作区;组菜单可直达系统文件管理器
- 🤖 Agent 工具:
mover_list_sessions/mover_move_session/mover_repair_sessions/mover_doctor/mover_create_workspace/mover_rename_workspace六个模型可调用工具——在对话里说「把这个会话挪到某组」即可触发与面板完全相同的备份回滚管线,也能新建、改名工作区;迁移、修复与改名执行前经宿主审批弹窗确认(改名在完全访问模式下免确认),未装 dsh-tools 的宿主自动停用
🚀 安装
dsh plugin --profile web add "github:PianoPrince/dsh-workspace-mover" # 重启 dsh web 一次
零构建授权:纯 JavaScript 源码即产物(无 TypeScript、无构建步骤)。从 GitHub 安装时不需要 allowBuilds 构建授权。
<details>
<summary><b>npm 渠道</b></summary>
dsh plugin --profile web add dsh-workspace-mover
</details>
<details>
<summary><b>本地开发安装</b></summary>
dsh plugin --profile web add "link:C:/path/to/dsh-workspace-mover"
</details>
<details>
<summary><b>桌面版安装(DSH v0.2 桌面客户端)</b></summary>
1. 安装并打开官方桌面版,左侧进入「插件」页;
2. 点右上角「添加插件」,搜索 dsh-workspace-mover 安装并启用;
3. 完成——桌面 profile 与 web profile 相互独立,需要各自安装一次。
桌面 profile 由 Electron 应用专属管理(独立 CLI 不接受 --profile desktop),请以应用内插件页为准。
</details>
<details>
<summary><b>常见问题</b></summary>
现象 · 原因与解决
拖了但没反应 · 请在分组视图把会话行拖到工作区标题行;「扁平列表」视图没有标题行,本插件在该视图不激活
提示会话正在运行中 · 等该会话回合结束再拖即可
移动失败的 toast · 操作前有自动备份、失败会回滚;按提示处理后重试。详细原因见宿主日志中的 MOVE FAILED
移动成功但侧边栏没归位 · 刷新页面即可
有些会话从侧边栏不见了 · 打开 设置 → 会话救援 自动扫描并找回
升级 DSH 0.2 后,旧会话切换模型报 Unknown agent preset · 0.2 不再读取 0.1.x 旧格式的自定义预设目录,需迁移为声明行——与插件无关,完整步骤见 [docs/dsh-0.2-preset-migration.md](docs/dsh-0.2-preset-migration.md)
</details>
🖼️ 特性巡礼
以下均为真实界面实拍(点击可放大)。
拖拽跨工作区迁移
把空闲会话行拖到目标工作区标题行,出现虚线高亮 · 确认框亮出目标工作区路径,一键移动
 · 
设置 → 会话救援:一键找回失联与未记账的会话 ·

以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:9,最后更新 2026-11-02