在 DeepSeek Harness 中,会话数据通常与特定的工作区目录绑定。要在另一台设备上恢复完整的对话历史、子代理会话以及关联的附件,手动复制文件容易出错且难以维护。下面介绍 dsh-session-migrator,这是一个提供可视化工作流的插件,支持通过拖拽 ZIP、JSONL 或文件夹导入,实现跨设备的会话迁移。
核心功能¶
该插件提供了以下能力:
- 可视化工作流:通过侧边栏操作完成导入,无需记忆命令。
- 拖拽导入:支持将 Harness 会话 ZIP、
session.jsonl或完整的导出文件夹拖入页面。 - 跨设备工作区映射:自动重写导入会话的
cwd字段,适配目标设备的目录结构。 - 完整会话树:导入根会话及其所有
subagents/<id>/session.jsonl后代会话。 - 安全重复导入:如果目标工作区中已存在同名会话,插件会克隆整个导入树,生成新的 UUID 并重映射血缘关系,绝不覆盖现有数据。
- 附件迁移:恢复引用的 PNG、JPEG、WebP 和 GIF 附件,并验证其内容寻址 ID。
- Harness 原生验证:使用
decodeStorageRecord()解码存储行,并通过Session.create()验证重构日志,确保写入 Harness 的数据格式正确。 - 即时原始标题:导入时预热 Harness 的投影缓存,使工作区列表在会话打开前就能显示会话标题。
- 多语言支持:UI 自动跟随 Harness 当前语言(支持英文和中文)。
- CLI 回退:保留
/session-import命令,满足脚本化或本地工作流需求。
安装与启用¶
在运行 DeepSeek Harness 的机器上执行以下步骤:
git clone https://github.com/Suixin04/dsh-session-migrator.git
cd dsh-session-migrator
npm install
npm run build:client
安装到 Web 配置文件中:
dsh plugin --profile web add /absolute/path/to/dsh-session-migrator
安装完成后,重启现有的 dsh web 进程。侧边栏底部会出现 Import sessions 操作按钮。
典型用法¶
可视化导入¶
- 点击侧边栏的 Import sessions。
- 选择 ZIP/JSONL 文件、完整的导出文件夹,或直接将文件拖拽到 Harness 页面上。
- 选择或拖拽到目标工作区卡片上。
- 等待验证和持久化完成。
- 点击 Open imported session。
命令行导入¶
使用当前会话所在的工作区:
/session-import "/absolute/path/dsh-session-xxx.zip"
指定另一个已存在的工作区:
/session-import "/absolute/path/dsh-session-xxx.zip" --workspace "/absolute/path/to/project"
支持解压后的导出目录或单个 JSONL 文件:
/session-import "/path/to/unpacked-export" --workspace "/path/to/project"
/session-import "/path/to/session.jsonl" --workspace "/path/to/project"
适用场景与注意事项¶
适用场景:
- 需要在不同物理设备间迁移 DeepSeek Harness 的完整会话历史。
- 需要备份会话数据并恢复到新环境。
- 需要在保持血缘关系的前提下,在目标工作区中创建与源环境结构一致的会话副本。
注意事项:
- 版本要求:DeepSeek Harness 版本需为 0.1.1-rc.2 或兼容构建。
- 目录要求:目标工作区目录必须在目标主机上已存在。
- 文件范围:会话导出不包含项目文件(如 Git 仓库文件),需通过 Git 或其他同步方法单独迁移项目。
- 敏感数据:会话导出可能包含完整的提示词、响应、系统上下文、工具调用、绝对路径和图片。请将其视为敏感数据处理。
- 限制检查:插件强制执行归档、JSONL 和条目计数限制,拒绝不安全路径、重复条目、格式错误日志、重复 ID 和循环血缘。
- 持久化机制:Harness 持久化是仅追加模式。如果插件在写入过程中失败,可能会留下已成功提交的前缀。部分写入后再次导入会创建一个全新的克隆树。
- 迁移范围:该插件仅迁移会话状态和引用的图片,不迁移仓库文件、凭据、模型提供商设置或外部服务配置。