dsh-workspace-migrate:把工作区、项目文件和对话迁到另一台电脑

前言

在 DeepSeek Harness(DSH)里长期做智能体或项目开发时,状态分散在本机:~/.dsh/sessions 里的会话事件流、workspace.json 里的项目登记,以及各项目目录下的成果文件。换电脑或重装系统时,如果只拷贝项目文件夹,对话里的工具调用、文件引用和 cwd 仍指向旧机器的绝对路径,续聊时模型会去读不存在的路径,表现就是「对话变乱」或请求在准备阶段失败。

手动逐项备份会话、登记和附件,再在新机上对齐路径,成本高且容易漏。下面介绍社区插件 dsh-workspace-migrate(维护者 lij0000-arch),它按工作区范围打包并导入:项目列表与会话归属、项目目录文件、完整对话事件流,以及可选的图片附件,并在导入时做路径重映射。

这是什么

dsh-workspace-migrate 是 DSH 社区目录中的工作流类插件,定位是「Workspace-scoped DeepSeek Harness migration: conversations, project files and attachments with path remapping」——把一台电脑上的 Harness 工作区相关状态整体搬到另一台。

迁移产物是文件夹(不是压缩包),整夹拷贝即可(U 盘、网盘、局域网均可)。导出时插件会把自身复制进迁移包的 plugin/dsh-migrate/,新电脑可从该目录安装,避免「包到了、插件没装」。

插件在 SkillHub 目录页 与 GitHub 仓库 发布;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。DSH 生态强调「一切皆插件」,本插件即在此思路下解决跨机迁移问题。

核心功能

读写范围与边界

读取:~/.dsh/sessions(会话事件流)、~/.dsh/storages/workspace.json(项目登记、置顶/归档集合)、~/.dsh/attachments、以及导出时勾选的项目目录。

写入:通过 Harness 公开服务新建会话与项目登记(sessionPersistence / workspaceRegistry),并按你在导入页填写的映射复制项目文件与附件。

删除:仅「撤销这次导入」会删,且只删本次进程内由本插件创建的项目登记与会话目录,其它 id 一律拒绝。

网络:不向外发起请求;仅在本机 127.0.0.1 注册 /api/dsh-migrate 供当前页面调用,并校验请求来源。

凭据:不读取、不导出 ~/.dsh/.credentials.yaml。迁移包含完整对话与项目文件,导出目录勿放在公开位置。

导出(旧电脑)

  1. 设置 → 迁移 → 导出(旧电脑)
  2. 勾选要带走的工作区(默认全选),按需勾选「同时打包项目文件」「同时打包图片附件」
  3. 导出位置留空则写到 ~/.dsh/migrations/dsh-migration-<时间>/
  4. 完成后把整个文件夹拷到新电脑

不带项目文件时只打包对话;带项目文件时会按目录排除 node_modules、.git、.venv、__pycache__ 等可重建目录。

增量同步(0.2.0+)

第一次导出后,可对同一个迁移包做增量更新,而不必每次整包重拷:

  • 设置 → 迁移 → 导出 → 增量更新已有迁移包,从列表选包或填路径
  • 只复制新增或修改过的文件;源里删掉的文件会从包里同步删除
  • 会话按源日志字节数与事件数判断,未变化的会话直接复用
  • 增量范围固定为该包原本包含的工作区

变更判断依赖「文件大小 + 修改时间」;内容变了但大小与时间都没变的文件不会被识别(正常编辑一般不会出现)。

导入与路径重写(新电脑)

  1. 装好 DSH,从迁移包的 plugin/dsh-migrate/ 安装本插件
  2. 设置 → 迁移 → 导入(新电脑)
  3. 选择迁移包,读取清单
  4. 填导入到(新根目录),例如 E:\DSH:各项目会建在 E:\DSH\<项目名> 下,目录不存在则创建;每一行仍可单独改路径
  5. 勾选重写对话里提到的旧路径(默认开启)
  6. 开始导入;结束后查看报告中的导入数、重写数、未归属数和提醒

会话历史里的工具调用、文件引用、报错信息常带旧机绝对路径。导入时会把被重映射的根路径在事件数据里整体替换成新路径,并报告替换次数。导入通过公开服务重建,不会覆盖已有同名会话;fork 会话会展开父会话前缀;归档/置顶状态会尽量恢复。导入错了可用「撤销这次导入」按本次报告中的 id 回滚。

导入前体检与附件

续聊时若会话引用的图片/文件在新机器不存在,可能在准备阶段失败(例如表现为「DeepSeek Messages transport failed」)。导入页的 导入前体检 会扫描包内各会话的附件引用,对照本机 ~/.dsh/attachments 报告缺失数量与涉及会话。

若包内带有 attachments 目录,导入时勾选「包含图片附件」可补齐。也可将旧机 ~/.dsh/attachments 整目录拷到新机同名位置后重启 DSH(附件引用为内容寻址,文件到位即可解析)。

其它能力

导出页的 清理失效项目 会删除路径已不存在且没有任何会话的项目登记,适用于导入后目标目录被移动或删除的情况。

安装与启用

插件按 profile 隔离:当前界面使用的 profile 与安装目标必须一致,装错时常见表现是「装好了,但设置里看不到迁移页签」。

  • DSH 桌面端 App → 一般为 desktop
  • 命令行 dsh web → web
  • 不确定时,在会话中执行 echo $env:DSH_PROFILE(PowerShell)或 echo $DSH_PROFILE(bash)

从 GitHub Release 安装(README 推荐示例):

dsh plugin --profile <你的 profile> add https://github.com/lij0000-arch/dsh-workspace-migrate/releases/download/v0.3.0/dsh-workspace-migrate-0.3.0.tgz

从本地文件夹或 tgz:

dsh plugin --profile <你的 profile> add "D:\path\to\dsh-migrate"

命令行安装完成后需重启 DSH(新包在启动时加载)。也可在设置 → 插件中安装,或在对话中让 agent 通过 plugin_manager 安装,返回 application: applied 后刷新页面,无需重启。

两边机器都需要安装同一插件。插件以当前 DSH 进程权限运行,安装前建议查看仓库源码与 MIT 许可证,确认符合你的环境策略。

典型用法小结

旧机:安装插件 → 导出 → 可选增量更新 → 拷贝整个迁移文件夹。

新机:安装 DSH → 从包内 plugin/dsh-migrate/ 安装插件 → 导入前体检(如有附件依赖)→ 填写新根目录与逐项目路径 → 开启路径重写 → 导入并阅读报告;必要时撤销后重导。

注意:

  • 日志格式有方向性:旧版本导出的包可由新版本导入(后端自动迁移),反向不行;两台 DSH 版本差距大时,建议先把旧机升级到与目标相近的版本再导出。
  • 凭据不迁移,新机需重新登录。
  • ~/.dsh/profiles/* 中的其它插件组合不会自动还原,需在新机自行安装(随包自带的只有本插件源码)。
  • 导出目录不能落在被导出的项目内部,否则会跳过该项目文件并给出提醒。

结尾

dsh-workspace-migrate 把 DSH 工作区级的会话、登记、项目文件与可选附件打成可搬运的文件夹,并在导入时重写对话中的旧路径,适合换机、备份与离线迁移场景。目录与文档:

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

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

小夜