把别的工具的旧对话迁进 DSH:格式差在哪
配方模板 · 尚未在本站完成实测
本页是配方模板,尚未在本站完成实测。运行记录、token与耗时会在复测后补上;在那之前不填任何估算数字。
适用场景
换了工具,想把之前几百条对话带过来。直觉是「都是JSONL,改个名就能用」,实际不是。
准备
- 宿主版本
- 待填(实测时记录具体rc版本号)
- 模型
- 待填
- 模式 / 权限
- 建议先用标准模式 + 工作区内修改
- 需装插件
- 无(如用到插件,在实测后补齐名称与版本)
- 输入材料
- 放在独立工作区,原始文件先备份
完整指令
我想把另一个工具的旧对话迁进 DSH。请先帮我确认 DSH 这一侧的存储事实,再谈迁移方案。
1. DSH 的会话存在哪?给我完整路径规则(含工作区路径怎么转义成目录名)。
2. 单个会话是一个文件还是多个?文件是什么压缩格式?
3. 文件第一行是什么结构?后续每行的结构是什么(哪个字段是做序号、哪个是时间戳)?
4. 事件类型举出你确认存在的几种,并说明哪些是流式增量(chunk)、哪些是完整消息。
5. 基于以上,把别的工具的对话迁进来说清三件事:哪些能直接映射、哪些需要合成、哪些必然丢失。
要求:
- 每条事实都要说明依据(文档章节、包源码路径、或实测)。凭印象的标「推测」。
- 不要写「一般会话格式都是 JSONL 所以可以直接用」。如果压缩格式或事件词汇不同导致不能直接用,明确说出来。
- 给我一条检查命令,用来验证「一个会话文件是否合法」,能不看内容就判断它是否可被读取。
最后给一张迁移可行性表:数据项 | 能否迁移 | 需要做什么 | 风险。运行记录
| 项目 | 数值 | 备注 |
|---|---|---|
| 耗时 | 待实测 | |
| 结果 | 待实测 | |
| 输入 / 输出token | 待实测 | |
| 残留 | 待实测 |
产物
跑通后在这里给出文件清单与截图,并说明原始文件有没有被改动。
验收清单
点一下可勾选,用来逐条核对。
- 路径规则给全了,包含工作区路径转义成目录名的具体做法
- 说清了压缩格式是多帧追加还是单帧(这决定能否一次性解压)
- 第一行与后续行的结构分别给出,且指出序号与时间戳字段
- 区分了流式chunk事件与完整消息事件
- 区分了「能直接映射 / 需合成 / 必然丢失」三类,没有笼统说「可以迁」
失败与边界
- 实测事实:路径是 $DSH_HOME/sessions/<工作区转义>/<会话uuid>/session.jsonl.zstd。工作区C://Users//netbe//Documents//blog转义成 --C-Users-netbe-Documents-blog--(盘符冒号与斜杠都变成连字符,首尾各补 --)。
- 实测事实:是zstd多帧追加压缩。用一次性decompress只能拿到第一帧(271字节那一次就是踩了这个坑),必须用stream_reader顺序解全部帧。实测一个1.4 MB文件解压出3.36 MB / 5393行。
- 实测事实:第一行是 {"type":"session","version":0,"id","createdAt","cwd","parentSession","origin","delegationDepth","agentPreset"};后续每行是 {"type":"<事件>","seq":N,"time":<毫秒>,"data":{}}。
- 实测事件分布(5393行样本):tool-call-chunks / assistant/chunk / reasoning-chunks / tool/call / tool/result / step/start / assistant/message / step/end / text-chunks / todo/write。注意chunk类事件行数远超完整消息——直接搬别的工具的消息级格式,会让一次回答变成十几行增量。
- 所以「改个文件名就能用」不成立:压缩要重编、事件词汇要映射、chunk与完整消息要重新组织。这条配方的价值在于把这三个坎说清楚。
- 卡在哪:DSH这一侧的格式已实测(路径转义、zstd多帧、首行与会话事件结构);还缺另一侧的真实样本——手头没有Claude Code或Codex的会话文件,因此「哪些能映射」只能给判断,不能给实测。