PianoPrince/dsh-workspace-mover
拖拽真迁移 DSH 会话跨工作区:批量移动、分组合并、挂错归位、回收站、备份恢复;步步备份可回滚,零 token / True migration of DSH sessions across workspaces: bulk move, group merge, misfiled homing, recycle bin & backup restore; every step backed up, zero tokens
Project Overview项目介绍
dsh-workspace-mover is a DeepSeek Harness plugin that enables true cross-workspace session migration. In the sidebar's grouped view, drag an idle session row onto a target workspace header to physically relocate the original session.jsonl.zstd file, rewrite the cwd header, and update the registry—preserving session IDs and history with zero token consumption. Features include batch multi-select (up to 50), one-click undo, orphan session rescue, and a workspace relocation wizard. Byte-level backups occur before every move, with automatic rollback on failure. It activates only in grouped view, not flat list; running sessions must finish their turn before migration.
dsh-workspace-mover 是 DeepSeek Harness 的会话工作区迁移插件。在侧边栏「分组视图」下拖拽空闲会话行到目标工作区标题行,即可真迁移原始 session.jsonl.zstd 档案、改写头部 cwd 并更新注册表,会话 id 与历史原样保留,零 token 消耗。支持批量多选(≤50)、一键撤回、孤儿会话救援与工作区搬家向导。每次移动前字节级备份,任一步失败自动回滚。仅在分组视图激活,扁平列表不可用;运行中的会话需等回合结束再迁移。
请帮我了解并安装插件:【dsh-workspace-mover】【https://github.com/PianoPrince/dsh-workspace-mover】
Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add dsh-workspace-mover
把 PianoPrince/dsh-workspace-mover 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-workspace-mover
> 非官方项目,由社区成员独立开发和维护。
📑 目录
✨ 功能
DeepSeek Harness 侧边栏可以拖拽排序同一工作区内的会话,但拖到另一个工作区上会被静默忽略。本插件补上跨工作区迁移:
- 🖱️ 拖拽迁移:把空闲会话行拖到目标工作区标题行,确认后完成移动
- 📦 批量迁移 / 分组合并:Ctrl/Shift 多选后整批拖移,或用组标题「⋯」菜单「整组迁移…」;源分组清空后可一键删除,两条命令完成合并(单批至多 50 个,失败互不牵连)
- 🚚 真迁移 · 零 token:会话 ID 与完整历史原样保留,不复制副本、不重新注入上下文
- 🏠 工作区搬家向导:项目文件夹被移动/改名后,一键把失效分组原地重定向到新位置;id、标题、排序、归档位保持,名下会话连同旧路径散件一起迁移
- 🛟 会话救援(设置 → 会话救援):一键找回「失联」「未记账」「挂错分组」的会话;已归档会话可恢复;支持一键修复与筛选
- 🗑️ 回收站与备份:删除先进回收站,可还原到原位置或任意分组;迁移自动生成备份,可按会话恢复或清理
- ⏪ 移动历史与撤回:记录最近 100 次跨工作区移动,批量聚合为一条,整批可一键撤回
- 📂 空分组清理 / 打开文件夹:只列出真正零成员的工作区;组菜单可直达系统文件管理器
🚀 安装
dsh plugin --profile web add "github:PianoPrince/dsh-workspace-mover"
# 重启 dsh web 一次
零构建授权:纯 JavaScript 源码即产物(无 TypeScript、无构建步骤)。从 GitHub 安装时不需要
allowBuilds构建授权。
npm 渠道
dsh plugin --profile web add dsh-workspace-mover
本地开发安装
dsh plugin --profile web add "link:C:/path/to/dsh-workspace-mover"
常见问题
| 现象 | 原因与解决 |
|---|---|
| 拖了但没反应 | 请在分组视图把会话行拖到工作区标题行;「扁平列表」视图没有标题行,本插件在该视图不激活 |
| 提示会话正在运行中 | 等该会话回合结束再拖即可 |
| 移动失败的 toast | 操作前有自动备份、失败会回滚;按提示处理后重试。详细原因见宿主日志中的 MOVE FAILED |
| 移动成功但侧边栏没归位 | 刷新页面即可 |
| 有些会话从侧边栏不见了 | 打开 设置 → 会话救援 自动扫描并找回 |
🖼️ 特性巡礼
以下均为真实界面实拍(点击可放大)。
拖拽跨工作区迁移
| 把空闲会话行拖到目标工作区标题行,出现虚线高亮 | 确认框亮出目标工作区路径,一键移动 |
![]() |
![]() |
| 设置 → 会话救援:一键找回失联与未记账的会话 | |
![]() |
批量迁移 · 多选拖拽
| Ctrl+点击选中多个会话(当前打开的会话自动带上),左下角亮出计数徽章;拖到目标工作区标题行即整批移动,Esc 清空 |
![]() |
| 组标题「⋯」菜单里的「整组迁移…」:整组搬移,迁入后可删除已空的源分组(分组合并) |
![]() |
工作区搬家向导 · 实测全程
以下为一次真实搬家的完整记录:把 Test1 文件夹改名为 Test2 后,用向导原地修复工作区。
改名前:Test1 分组正常工作 |
改名后侧边栏仍显示旧分组(磁盘上文件夹已不在) |
![]() |
![]() |
| 打开设置 → 会话修复:「工作区体检」把分组标为「路径失效」,填入新路径 | 确认框亮出起讫路径与将要迁移的会话数 |
![]() |
![]() |
| 搬家完成:分组原地更名为 Test2,会话与历史原样保留 | |
![]() |
⌨️ 使用
拖拽跨工作区迁移
- 重启后在侧边栏分组视图里,按住任意空闲会话行;
- 拖到目标工作区的标题行(出现虚线高亮)松手;
- 确认框显示目标工作区路径 → 点「移动」;
- 完成 toast 提示;若侧边栏未自动刷新,手动刷新页面即可。
运行中的会话会被拒绝;移动失败会自动回滚并在 toast 中说明原因。
会话救援面板
- 重启后打开 设置 → 会话救援,面板自动完成首次扫描;
- 失联行:选目标工作区 → 点「迁移过去」;
- 未记账行:点「补挂账」原地挂到路径匹配的工作区;
- 挂错分组行:点「归位」或「全部归位」;
- 一键修复:自动跑完可修复项,失败项隔离;
- 支持按标题 / 会话 ID / 路径 / 分组筛选;
- 已归档 / 回收站 / 备份:归档可恢复;删除进回收站,可还原或确认后彻底删除;迁移备份可恢复或清理。
批量迁移
- Ctrl/Cmd+点击加入多选,Shift+点击组内范围选择,Esc 清空;
- 拖任一选中行到目标工作区标题行 →「全部移动」;
- 或用 「⋯」菜单 →「整组迁移…」;源分组清空时可确认后删除(分组合并)。
工作区搬家向导
- 文件夹被移动/改名后,工作区体检会把对应分组标为「路径失效」;
- 填入文件夹现在的完整路径,点「搬家」;
- 确认起讫路径与会话数量后执行;运行中的会话本次跳过,结束后可续跑剩余部分。
🔌 如何接入 DSH
本插件面向使用者只承诺以下接入原则(实现细节见 docs/ARCHITECTURE.md):
- 使用 DSH 官方扩展点挂载,不修改 DSH 或 dsh-market 的安装文件;
- 会话归属变更走宿主提供的正式接口,不伪造持久化数据;
- 插件自有数据(历史、备份、回收站)写在独立数据目录,与会话档案分开;
- 与官方侧边栏同组排序互不干扰,只处理跨工作区场景。
🤝 与其他插件共存
设计上按「与生态共生」标准实现,冲突面很小:通信与样式使用独立命名空间;不改写官方安装文件;会话归属写入使用宿主正式接口。
| 同装插件类目 | 兼容性 | 说明 |
|---|---|---|
| 侧边栏增强 / better-sidebar / 终端 / 费用统计 / 记忆 / 导出分享 | ✅ 无冲突 | 面板与数据面完全不同 |
| 归档管理类插件 | ✅ 兼容 | 双方都使用官方归档数据,数据层一致(面板功能可能有些重复) |
| 排序 / 置顶类插件 | ⚠️ 基本兼容 | 移动后会精确重排「最近更新」;与置顶/排序插件并存通常无碍,仅各自面板展示顺序可能不完全一致 |
| 重画侧边栏的插件(自绘工作区树) | ⚠️ 降级共存 | 对方若替换官方侧边栏结构,本插件可能暂时无法识别会话行——表现为功能不触发,不会损坏数据 |
| 其他会话移动器 | ❌ 建议二选一 | 同类插件可能重复处理同一次拖拽;本插件已覆盖移动 / 批量 / 合并 / 归位 / 归档恢复 |
🧩 兼容性与卸载
- 已验证组合:DeepSeek Harness
0.1.5-rc.1、dsh-market1.45.1、Node.js≥ 22。不修改 DSH 源码,仅通过官方扩展点接入。 - 市场卡片的「宿主要求未知」:GitHub-only 插件没有 npm 发布清单时,dsh-market 可能无法从远端元数据推导宿主版本;显示「未知」不代表运行时不兼容。仓库
package.json已声明engines.dsh≥0.1.5-rc.1。 - 卸载可逆:移除插件不会删除会话档案、工作区或官方记账。插件自己的历史、任务、备份和回收站数据仍保留在插件数据目录(见 docs/ARCHITECTURE.md);移除后刷新或重启 DSH 即可清理注入的界面。
- 共存建议:不要与另一个跨工作区拖拽移动器同时启用;其他类型插件可按上表共存。
部分高级操作依赖较新的 DSH 能力;不支持时界面会明确提示,而不是静默失败。
🔐 安全承诺
- 移动前自动备份;搬运落地后再核对会话身份与路径,不符则整体回退;
- 失败时恢复到移动前状态(文件与记账一并恢复);
- 删除先进回收站,可还原到原位置或任意分组;彻底删除需二次确认;
- 无法自动恢复时,会在救援面板明确标出,需要人工确认;会话文件与备份始终保留,绝不静默丢弃;
- 近期打开过、仍驻留在 Harness 内存中的会话不能直接删除,需重启 Harness 后再删(界面会给出明确提示)。
失败路径优先保数据,不静默丢会话。
并非「任何错误都能自动恢复」:极端情况下会要求人工处理,但数据会留在原处。
⚠️ 已知限制
- 不支持把会话移入「Ungrouped」桶;
- 常驻内存的会话(近期打开过)不能直接删除,请重启 Harness 后再删;
- 若第三方插件整页重绘侧边栏,本插件可能暂时无法识别会话行(功能不触发,不损坏数据);
- 「扁平列表」视图无工作区标题行,本插件在该视图不激活;
- 宿主大版本升级若改变内部结构,相关能力可能降级或需重启后生效;搬家向导在无法安全写入时会在改动任何文件之前中止并提示。
🆕 最近版本
v2.0.2 · 2026-09-13
- 修复 GitHub Traffic badge 在下载数不超过 10 时更新失败的问题
- 完善架构说明与 RPC 清单,修正文档中的工作区投影刷新行为
- 发布
.tgz安装资产时同时包含架构文档与截图,并清理重复的历史版本记录 完整变更记录见 CHANGELOG.md。
实现与架构说明见 docs/ARCHITECTURE.md。
License
MIT










Renzic-Stone/DSH-EasyRewrite
baihejiangnan/deepseek-harness-desktop
MichengAI/dsh-codex-ui
HakureiMonika/dsh-sandbox-escalation-fix
UNLINEARITY/dsh-code
PerryLink/dsh-claude-move
Chang-Tong/dsh-import-agents
Player-MINEPIG/dsh-tavern