把 DeepSeek Harness 的会话导出为 Markdown,便于用普通编辑器搜索和查阅。但如果用“创建时间+首句话”命名,两段会话可能得到同一个文件名。第二次导出看似成功,却把第一段对话覆盖了。
我检查过的一份导出代码就存在这个问题:它取创建时间和首条消息的前 20 个字符作为文件名,没有用会话 id 区分。本文做一个独立导出器,用 id 确定文件归属,再用 DSH 自己写出的会话文件验证结果。
1. 先区分两种覆盖
不同会话应该分别保存;同一会话再次导出,则应该更新原来的那份副本。标题只能帮助人阅读,不适合决定文件归属。
本例取完整会话 id 的 SHA-256 摘要,生成 64 位十六进制文件名。这样,同一个 id 会定位到同一份文件,不同 id 不会仅仅因为时间和标题相同而相撞,id 里的斜杠也不会被解释成目录。
这里依赖的是“id 能区分会话”这一前提。若合并多个来源,而且不同来源会复用同一个 id,需要把来源标识也加入计算。完整 SHA-256 不作截短,但仍不应被描述成数学上绝对没有碰撞。
输出目录专门保存生成的副本。同 id 再次导出会替换旧副本,不适合在里面手工改稿;原始会话文件则保持不变。
2. 本篇读取哪一种文件
导出器使用 Node.js 24.22.1 的内置模块,无需第三方依赖。