DeepSeek Harness 会话导出、备份与迁移实操
一条真实录屏里的防升级翻车路线:把安装克隆成带独立 HOME 和端口的隔离 lane,先验收副本再动版本,对话按 lane 备份——坏插件或升版本,都带不走你的会话历史。
最近更新: 2026-09-29

Harness 存你工作的方式,和浏览器存标签页一样:每个会话、每条轨迹、每次批准,全都住在那套安装的 HOME 目录里。所以拥有 dsh 最惊险的时刻不是写错提示词,而是升级——插件和运行时不匹配时,dsh 自己就会在日志里写下这页攻略的立论:强行运行可能导致崩溃或数据丢失。下面这段录屏演示的就是防御性布局:日常那套不动,先克隆一条隔离 lane,让副本自证能跑,然后再谈换版本。
每张截图都来自这段录屏,并深链回它的秒数;录屏没有字幕,所有事实——卡片文案、日志行、自检字段——都是逐帧从画面上读出来的。涉及会话存储内部结构的地方,我们引用另一支署名来源。画面里的版本号(0.1.5 到 0.2.0 的 RC)是 2026 年 9 月的快照,lane 这套打法才是耐用的部分。会话历史里读的那一面,见 会话回放与复盘
速览
- ▸别在唯一的一套上升级。dsh 日志会明说:不匹配的插件可能导致崩溃或数据丢失——录屏的对策是日常 lane 不动,在副本上折腾。
- ▸DSH 多版本启动器(dsh-lanes)把安装克隆成独立的安装树和 HOME:录屏把 global 复制成 global-copy——45,323 个文件、1.6 GB、用时 308 秒——独占端口 3083,API key 自动继承。
- ▸副本只继承 key:会话与设置按 lane 各自独立。用卡片上的「备份对话…」归档这条 lane 的聊天;把 lane 的安装树和 HOME 两个目录一起拷走,就是全套快照。
- ▸信任靠回执不靠感觉:让副本做一次环境自检(版本、DSH_HOME、它自己的 DSH_WEB_URL),读那一轮的轨迹,然后就地升级——克隆的路径和 HOME 链接一条都不变。
逐步实操
把安装克隆成一条隔离 lane
- 1
动手之前,先读懂克隆回执
启动器为每套安装保留一张卡片,录屏里一共四张:global(日常那套,端口 3080,标着「★主要版本」)、next 在 3081、stable 在 3082,还有用「复制…」做出的 global-copy 在 3083。实时日志把整个操作打了回执:安装树 D:\dsh-lanes\clones\global-copy,HOME 在 D:\dsh-lanes\homes\global-copy,45,323 个文件 / 1.6 GB 用时 308 秒,继承 DEEPSEEK_API_KEY,接着是你接下来要跑的三条命令。状态栏一行收尾:lane 4 条(运行 1),根目录 D:\dsh-lanes。
$py dsh_lanes.py open global-copy --no-browser$py dsh_lanes.py verify global-copy$py dsh_lanes.py upgrade global-copy <版本>
克隆回执:独立的安装树、HOME 和端口——然后是你要跑的三条命令。看原片 1:10 - 2
让副本自己证明克隆成功
打开副本的 Web UI,让它做一次环境自检。报告给的是证据不是口头保证:DSH 版本 0.1.7-rc.2(release candidate)、npm 全局安装的 @deepseek-ai/dsh、它解析到的 dsh.cmd 路径,以及它做过的检查——dsh --version 的输出、package.json 的 name/version、npm 依赖树。对这页攻略最关键的是运行时环境一节:DSH_HOME = D:\dsh-lanes\homes\global-copy、DSH_PROFILE = web、DSH_WEB_URL = http://127.0.0.1:3083——副本是在自己的 HOME、自己的端口上回答问题的,跟你日常那套无关。

副本自己开口:它的版本、它自己的 HOME、它自己的端口。看原片 3:30 - 3
打开轨迹,把「验收」再验收一遍
同一轮的轨迹视图让结论变得可查:一排工具步骤依次列出克隆 HOME 里的内容、读 package.json、检查进程命令行以确认到底是哪套安装在跑、枚举 dsh-lanes 根目录、查看正在运行的 lane 进程和它的启动器。这个习惯——先要一份检查,再读它怎么检查的——正是「能信的备份」和「希望它行的备份」之间的差别。

报告里的每个结论,都能回溯到你打得开的一步工具调用。看原片 4:10 - 4
会话与设置按 lane 各自独立
global 卡片上的说明写得直白:新版本会自动复制它的 API key——只复制密钥,会话与设置仍各自独立。所以每条 lane 的设置对话框(通用设置、模型、内置插件、Agent 预设)改的都是它自己的配置,随时用「打开配置文件」直达。底层结构上,我们在下方引用的另一支 dsh 会话事件日志源码精讲把账本讲清楚了:dsh HOME 下,每个会话对应一个只追加的 JSONL 文件——这正是按 lane 拆 HOME 能让历史互不串门的原因。

继承的只有 key,其余各自独立:每条 lane 改的是自己的配置文件。看原片 2:00
副本就地升级,原版一点不动
- 5
在副本自己的安装树里升级版本
副本卡片上的「升级版本…」打开「换 DSH 版本:lane『global-copy』」:当前版本 0.1.7-rc.2,安装树 D:\dsh-lanes\clones\global-copy,以及最关键的一句承诺——在它自己的安装树里就地升级,路径不变,HOME 里的链接一条都不用重连。从 npm registry 列表里挑版本(0.2.0-rc.1 标着 next;0.1.7-rc.2 标着 latest 并注明「现在用的·本地已装」),也可以手打版本号;「先看会改什么」先预览改动,再点「升级到这一版」落地。

升级发生在克隆自己的安装树里——原版路径一步不动。看原片 3:15 - 6
日常维护带:每张卡片的动作 + 不粉饰的日志
每张卡片都挂着维护带:「备份对话…」归档这条 lane 的对话、「插件市场…」开它的插件市场、「升级版本…」、「复制…」再衍生一套,以及「删除这套 DSH」——它要求手打 lane 名字做二次确认。实时日志也不给升级描补:npm ERESOLVE 依赖警告就当着你的面滚过去。这份诚实正是意义所在——你盯着风险发生的地方,是那条失败了只损失副本的 lane,不是你的历史。

每条 lane 的保险带:「备份对话」归档聊天;升级的磕绊日志自己会招。看原片 2:20
会话备份 FAQ
决定你的历史能不能熬过下一次升级的几个问题。
dsh 到底把会话存在哪?
在你当前那套安装的 dsh HOME 目录下。录屏把这个事实拍在了明面上:日常那套报 DSH_HOME = C:\Users\Administrator\.dsh,克隆出来的 lane 报 DSH_HOME = D:\dsh-lanes\homes\global-copy。我们在下方引用的另一支会话事件日志源码精讲进一步讲了账本结构:dsh HOME 下,每个会话一个只追加的 JSONL 文件。实操结论:备份 HOME 就是备份会话——而每条 lane 的 HOME 天生分离。
克隆会把我的对话带上吗?
不会,而且是故意的。卡片写明新副本只自动继承 API key,会话与设置仍各自独立。要归档聊天,跑每条 lane 的「备份对话…」;要全套快照,把 lane 的两个目录一起拷走:clones 下的安装树加 homes 下的 HOME。把它们当一对看——clones 是程序,homes 是你的历史。
启动器是中文界面,这套打法还能照搬吗?
能。录屏里的工具是社区做的启动器,背后是 dsh_lanes.py 脚本,画面上出现的命令都是平白的关键词:open、verify、upgrade、stop。这套模式在任何系统都成立:日常那套用默认端口(官方包的 Web UI 默认就是 127.0.0.1:3080),给第二套安装配独立的 DSH_HOME 和端口,先升级第二套,自检通过再转正。
原版和副本能同时跑吗?
能——分端口就是为这个。录屏状态栏同时盯着四条 lane、其中一条在跑,日志也写明副本有自己的安装树和 HOME,可和原版同时开。同一段日志里还有一条提醒:钉在旧版 dsh 上的插件,撞上新运行时可能拒绝加载——这种事故,最好第一次就撞在副本上。
相关攻略
lane 搭好之后,接着去哪。
来源视频
截图全部来自第一支视频——一段没有字幕的 B 站录屏,所有事实都逐帧从画面读取;第二支是以幻灯片为主的 dsh 会话事件日志源码精讲,只为会话存储事实署名、未贡献任何画面。画面中的版本号是 2026 年 9 月的快照。会话历史里读的那一面,见 会话回放与复盘
