前言¶
DeepSeek Harness(dsh)把模型、工具、会话、沙箱和界面都做成插件,官方仓库的口号就是「Everything is a Plugin / 一切皆插件」。换到这套运行时之后,真正卡住的往往不是装插件,而是历史对话还散落在别处:Claude Code 的 JSONL、Codex 的 rollout、Cursor 的 agent-transcripts、Reasonix 的会话目录,再算上 ChatGPT 网页导出、opencode / ZCode 的 SQLite。
这些文件各自能打开,但不能直接当成 dsh 会话继续聊。工具调用、思考块、工作区路径对不上,侧边栏里也看不到它们。dsh-chat-import 做的就是这件事:把外部 Agent 的聊天记录读进来,写成可 resume 的 DeepSeek Harness 会话,必要时还能按目标格式导回去。
本文按社区插件目录页、GitHub 仓库 README(中英文)、package.json、CHANGELOG 和 npm 页面交叉核对后整理。社区目录 deepseek-harness-plugin.com 是独立站点,和 DeepSeek / 幻方没有官方从属关系,不要把它理解成官方应用商店。
这是什么¶
dsh-chat-import 是一款「会话与消息」类 DeepSeek Harness 插件,由 Nwflower 维护,GitHub 仓库为 Nwflower/dsh-chat-import。许可证为 MIT(Copyright 2026 Nwflower、Scarlett)。npm 包名同为 dsh-chat-import,当前版本 0.5.1(2026-08-16 发布)。主要语言是 JavaScript,运行要求 Node.js >= 22.13(仓库说明这是 node:sqlite 免 flag 的首个版本)。面向 dsh 0.1.x 线,peer 依赖 @deepseek-ai/dsh-tools ^0.1.0-rc.6,README 写明在 dsh 0.1.0-rc.6 上测过。
它解决的问题很具体:把 Claude Code、Codex、ChatGPT、Cursor、Gemini、Reasonix、opencode、ZCode、Grok Build、OpenClaw、Pi Coding Agent、Hermes、Kimi CLI / Kimi Code 以及 DSH 自己的会话日志,导入成全保真、可继续的 dsh 会话。源文件只读,不改写;不碰 dsh 引擎。导入后的会话按源 cwd 归入对应工作区,打开即可从源记录停下的地方接着聊。
GitHub 仓库页面在笔者查阅时显示 49 颗星;社区目录页当时标注 30 颗星。星标以仓库页面为准,目录数字可能滞后。
核心功能¶
仓库把能力分成导入、续聊、互转、备份几类。下面只写 README 里已经写明、可以按文档复现的部分。
14 种来源加本地 JSONL¶
每种来源对应一条导入工具,目录或单文件都能喂进去。存储位置以仓库文档为准:
| 来源 | 默认位置 | 工具 |
|---|---|---|
| Claude Code | ~/.claude/projects/ 下的 .jsonl |
import_claude |
| Claude-3p(新端) | Windows %LOCALAPPDATA%\Claude-3p\claude-code-sessions |
import_claude |
| Codex / ChatGPT CLI | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl |
import_codex |
| ChatGPT 网页导出 | 任意路径下的 conversations.json |
import_chatgpt |
| Cursor | ~/.cursor/projects/ 下的 agent-transcripts |
import_cursor |
| Gemini CLI | ~/.gemini/history/ 下的 session-*.json |
import_gemini |
| Reasonix(CLI + 桌面) | ~/.reasonix/sessions/,Windows 另有 %APPDATA%\reasonix\projects\ |
import_reasonix |
| opencode | ~/.local/share/opencode/opencode.db |
import_opencode |
| ZCode | ~/.zcode/cli/db/db.sqlite |
import_zcode |
| Grok Build | ~/.grok/sessions/ |
import_grokbuild |
| OpenClaw | ~/.openclaw/agents/ 下的 sessions/*.jsonl |
import_openclaw |
| Pi Coding Agent | ~/.pi/agent/sessions/ |
import_pi |
| Hermes | ~/.hermes/(Windows 为 %LOCALAPPDATA%\hermes) |
import_hermes |
| Kimi CLI / Kimi Code | ~/.kimi/sessions/ 与 ~/.kimi-code/sessions/ 下的 wire.jsonl |
import_kimi |
| DSH 会话日志 | ~/.dsh/sessions/ 下的 session.jsonl(可带 .zstd) |
import_dsh |
| 任意本地 JSONL | 任意 .jsonl 文件或目录 |
import_local_jsonl |
源里有什么就保留什么:session id、cwd、标题、模型、时间戳、工具调用与结果、思考块。格式本身记不下的内容,会在导入报告里标明,而不是悄悄丢掉。import_local_jsonl 会自动识别 dsh / claude / codex / cursor / reasonix / pi / openclaw / hermes,识别不准时用 format 强制指定。
全保真导入和可续聊¶
导入不是把文本粘进当前对话框,而是新建一条 dsh 会话。仓库说明:会话创建优先走 host 的 agents.create,挂上默认 preset scope、绑定默认模型,因此导入会话的工具面和原生会话一致。打开它就可以继续对话。
工作区归组按源 cwd 走:Claude 侧会查 ~/.claude.json 的项目映射,Reasonix 会对项目 slug 做磁盘存在性解码,并带主目录沙箱防护(cwd 等于用户主目录时不当工作区)。本机没有这条路径时,回退到源文件所在目录,避免全部堆进「未分组」。
幂等、增量、预览¶
同一源再导一次,未变化的文件会标 already-imported 并跳过;增长的文件只把新轮次 append 进同一会话(appended);源被截断会报 sourceShrunk。需要完整新副本时用 force: true,旧会话不会被改写。
preview: true(别名 dryRun: true)走完整解析和转换,但不落盘。适合先看会导入什么,再去掉该参数正式导入。
超长会话会按上下文预算裁剪(可用环境变量 DSH_IMPORT_CONTEXT_BUDGET),裁剪结果会写进返回值。Claude 长会话还可以 compacted: true,只导最后一次压缩摘要加尾部。
反向导出和便携备份¶
导入只是一条边。README 还提供:
export_claude/export_codex/export_kimi:把任意 dsh 会话(导入的或原生的)序列化成目标格式。Claude 侧默认写到~/.claude/projects,文件名是新的 UUID v4,不覆盖已有文件;Codex / Kimi 默认写到~/.dsh/exports。sync_to_claude:把会话里新增的完整轮次追加回 Claude Code 文件,带守卫,文件被外部改过或缩小时不会静默覆盖。export_bundle/restore_bundle:写出带双重 SHA-256 指纹的.dshbundle.json,可拷到另一台机器还原。目标机没有原cwd时会回退并在结果里报告,不会静默丢分组信息。- 每次导出都会列出有损项(
degradations:孤儿工具结果、跳过的注入、跳过的附件)。
侧边栏「导入会话」面板还有同步页:外部 → DSH、DSH → 外部两个方向默认关闭,要在面板里打开或点「立即同步」。配置文件在 $DSH_HOME/dsh-chat-import/sync.json。
发现、校验、交接¶
scan_discover():只读扫描各格式默认数据根,返回标题、项目、cwd、路径、导入状态;零副作用。- 浏览器侧边栏底部有「导入会话」入口(dsh web),按工作区分组,可筛选来源、搜索、分页多选导入。
/import、/import-all:在挂载了 dshcommands服务的环境里直接导入,不占模型轮次。/resume-claude、/resume-codex:把外部 transcript 当不可信静态历史,生成交接摘要(目标、文件、停止点、下一步)注入当前会话;多条匹配时列候选,不擅自猜。verify_session:只读结构审计(seq、事件白名单、工具配对等),并给出按 kind 的修复提示。list_imported_sessions/retract_import:列出本插件导入过的会话;撤回只清 registry 并给出手动删除指引,插件不会自动删任何会话数据。
另外还有 import_agents(把 pi / opencode / Claude 的 agent、prompt、skills 落成持久化 DSH skill)和可选的 Claude 上下文桥(环境变量 DSH_IMPORT_CONTEXT_BRIDGE=1,默认关)。这两项不是主路径,需要时再看仓库文档。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行:
dsh plugin add github:Nwflower/dsh-chat-import
如需可复现安装,按目录页说明固定 commit 哈希:
dsh plugin add github:Nwflower/dsh-chat-import#<commit>
仓库 README 还提供 npm 包和本地源码两种写法,针对 web profile:
dsh plugin --profile web add dsh-chat-import
dsh plugin --profile web add -w link:/path/to/dsh-chat-import
package.json 里客户端注入声明了 "platform": "web",侧边栏面板是给 dsh web 用的。dsh plugin 会把插件的 bundle 声明收进当前 profile,重启 dsh 之后插件才生效。卸载时从 profile 的 bundles 里去掉对应 insert 行并重启;已导入的会话仍留在 dsh 数据目录里。
目录页和仓库都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。
典型用法¶
导入会即时落盘,但 dsh 的会话列表不会自动刷新。导入后要刷新页面或会话列表,才能看到新会话。读取工作区之外的源文件、写出工作区之外的导出文件,都需要会话沙箱放行对应路径。
1. 先发现,再导入¶
只读预览本机有哪些可导入会话:
scan_discover()
scan_discover({ path: "~/.codex/sessions", format: "codex" })
也可以在 dsh web 侧边栏打开「导入会话」面板,按来源过滤后单条或批量导入。面板和 import_* 工具走同一套管线,幂等跳过、增量续写、force、上下文预算的语义一致。
2. 按来源导入文件或目录¶
每个 import_* 都接受 path。目录会递归扫描,每个文件或每段对话变成独立会话:
import_claude({ path: "~/.claude/projects" })
import_codex({ path: "~/.codex/sessions" })
import_chatgpt({ path: "~/Downloads/chatgpt-export/conversations.json" })
import_opencode({ path: "~/.local/share/opencode/opencode.db" })
import_local_jsonl({ path: "~/downloads/session.jsonl" })
先预览、不落盘:
import_claude({ path: "~/.claude/projects", preview: true })
ChatGPT 导出若要还原全部分支,用 import_chatgpt({ path: "...", branch: "all" }),每条 root→leaf 分支会变成独立会话。
斜杠命令等价写法(短名、来源 id 或完整工具名都可以):
/import claude ~/.claude/projects
/import-all
3. 打开导入的会话继续聊¶
刷新会话列表,找到新会话(默认 id 形如 import-<源sessionId>),打开后从源记录停下的地方继续。需要交接而不是整段导入时:
/resume-claude id:282095ab-1111-4222-8333-444455556666
/resume-codex 修复登录
空参数取最近一条;多条匹配时会列出候选。仓库明确把外部 transcript 当不可信历史:不复述 system / developer / thinking,旧工具输出视为过期证据。
4. 导出、备份、校验¶
export_claude({ sessionId: "import-019f5f27-…" })
export_codex({ sessionId: "…", dryRun: true })
export_bundle({ sessionId: "import-019f5f27-…" })
restore_bundle({ path: "~/backup/sess.dshbundle.json", preview: true })
verify_session({ sessionId: "import-019f5f27-…" })
sync_to_claude({ sessionId: "import-019f5f27-…", dryRun: true })
export_bundle 默认写到 ~/.dsh/exports/<id>.dshbundle.json。跨机器还原前建议先 preview: true。
适用场景与注意事项¶
比较适合这几类用法:
- 已经在 Claude Code、Codex、Cursor、Reasonix 等工具里积累了项目会话,希望把工作区迁到 DeepSeek Harness,还想保留工具调用和思考过程。
- 需要在 DSH、Claude Code、Codex、Kimi 之间做格式互转,或用
.dshbundle.json做跨机器备份。 - 批量搬迁前想先
scan_discover或preview: true看清楚,再正式导入。
使用前要注意:
- 权限与沙箱。插件以当前 dsh 进程权限运行;读工作区外的历史文件、写导出目录,都要沙箱放行。安装前阅读 仓库源码 和 MIT 许可证。
- 只读源、不自动删。导入不改写源 JSONL / 数据库;卸载插件也不删除已导入会话。
retract_import只清登记记录并提示你手动删。 - 双向同步默认关。面板里的 External → DSH 和 DSH → External 不会在安装后自动开。写回 Claude Code 时优先用
dryRun看守卫结果。 - 运行时版本。需要 Node.js >= 22.13,以及 dsh 0.1.x(文档实测 rc.6)。客户端面板面向 web profile。
- 失败会上报,不会静默吞。畸形行、疑似敏感信息按位置计数(只报行号和 kind,不输出内容);格式保不住的字段和导出有损项都会出现在结果里。
- 路线图未完成项。README 仍把「Codex 官方 App Server API 源」标为未完成(REQ-52),当前 Codex 导入走的是 rollout JSONL 路线。
小结¶
dsh-chat-import 把外部 Agent 的会话文件变成 DeepSeek Harness 里可 resume 的会话,并补上导出、bundle 备份和交接摘要。它是社区 MIT 插件,不是 DeepSeek 官方组件;目录页只负责收录和给出安装命令。
安装入口以目录页为准:
dsh plugin add github:Nwflower/dsh-chat-import
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-chat-import/
GitHub:https://github.com/Nwflower/dsh-chat-import