前言¶
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