メインコンテンツへスキップ
N

dsh-chat-import

nwflower/dsh-chat-import

13 種のコーディングエージェント(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode ほか)のチャット履歴を完全な忠実度で取り込み、再開可能な DeepSeek Harness セッションに変換。Claude Code への逆エクスポートにも対応。

インストール

dsh plugin --profile web add github:nwflower/dsh-chat-import

README

📥 DSH Chat Import

Import 15+ external agent conversation histories into DeepSeek Harness as full-fidelity, resumable sessions — and export / sync back to Claude Code, Codex, Kimi, or a portable interchange bundle.

English 简体中文

npm version npm downloads License: MIT Node.js >= 22.13 CI GitHub stars Listed in Awesome DeepSeek Harness Awesome DSH Plugin dsh.so security Listed in Awesome DSH Plugins

💡 Intro · 🚀 Install · ✨ Features · 🗂 Supported sources · 🛠 Usage · 🔑 Key behaviors · 📚 Docs · ⭐ Star History · 🤝 Contributing

16+ agent sources, one plugin — full-fidelity import into DeepSeek Harness, seamless resume, matrix interop / backup / handoff on the way out.

Qoder CLI

Changelog: CHANGELOG.md · Roadmap: ROADMAP.md · Interchange protocol: docs/INTERCHANGE.md


💡 Intro

dsh-chat-import imports conversation histories from Claude Code, Codex, ChatGPT, Cursor, Gemini, Reasonix, opencode, MiMo Code, ZCode, Grok Build, OpenClaw, Pi Coding Agent, Hermes, Kimi CLI / Kimi Code, Qoder CLI and DSH session logs — tool calls, reasoning and all — as full-fidelity, resumable DeepSeek Harness sessions. Source files are read read-only (never rewritten), the DSH engine is never touched, and every import becomes a fresh session grouped into the workspace of its source cwd.

The reverse direction is covered too: export_claude serializes a DSH session back into a Claude Code JSONL transcript that Claude Code can load with --resume (read-only — your DSH log is never modified), sync_to_claude incrementally appends a session's new turns back to a Claude Code file — guarded, never silently overwriting — and the same matrix extends to Codex rollouts (export_codex) and Kimi wire files (export_kimi), plus a portable interchange bundle (export_bundle / restore_bundle) with SHA-256 fingerprints and cross-machine restore.

Requires Node.js ≥ 22.13, targets dsh 0.1.x (tested on 0.1.0-rc.6 / 0.1.0-rc.7).


🚀 Install

dsh plugin --profile web add dsh-chat-import                    # npm package
dsh plugin --profile web add -w link:/path/to/dsh-chat-import   # local checkout (symlink)

Then:

  1. Import — call any import_* tool in a DSH session:
import_claude({ path: "~/.claude/projects" })
import_chatgpt({ path: "~/Downloads/chatgpt-export/conversations.json" })
import_local_jsonl({ path: "D:\downloads\session.jsonl" })
  1. Resume — refresh the session list, open the imported session, and keep chatting from where the source left off.
  2. Discover & batchscan_discover() previews read-only; the sidebar "Import sessions" panel browses by workspace and supports multi-select import; /import-all batch-imports everything.
  3. Sync (optional) — the panel's "Sync" tab offers bidirectional incremental sync (external → DSH, DSH → external), default off.

Uninstall: remove the import-claude insert line from your profile's bundles and restart dsh; imported sessions stay untouched and the plugin never auto-deletes.


✨ Features

CapabilityEntry pointsDescription
Batch import from 16+ sourcesimport_* (17 tools) · scan_discover · sidebar panel · /importA file, a directory or a whole database — each conversation becomes its own session
Full-fidelity resumeImported sessionsTool calls & results, reasoning, titles, models and timestamps carry over; sessions group into the source cwd workspace
Matrix exportexport_claude / export_codex / export_kimiSerialize DSH sessions back to Claude / Codex / Kimi formats; every lossy item is reported
Portable backupexport_bundle / restore_bundleInterchange bundle with dual SHA-256 fingerprints, restorable across machines
Incremental write-backsync_to_claudeAppends new complete turns back to a Claude Code file — guarded, never overwriting
Agent asset migrationimport_agentsConverts pi / opencode / Claude / Codex agents, prompts, skills, instructions into persistent DSH skills
MCP mirror planimport_mcp / /mcp-statusReads Claude / Codex MCP servers and generates a reviewable DSH MCP client YAML snippet
Settings translationimport_settings / /settings-suggestTurns Claude settings / Codex config into DSH migration suggestions (read-only)
Handoff summaries/resume-claude / /resume-codexTreats external transcripts as untrusted history and injects a handoff summary into the current session
Read-only audit / checkupverify_session / doctor / CLI dsh-chat-import doctorStructural audit and migration health check
Idempotency & protectionAll import toolsexpectedHash / restamp / context-budget protection; unchanged sources skip, grown sources append
Preset mode + system promptSettings tab in the Plugins sectionImported sessions record the default preset; optional "import system prompt" as a context injection (off by default)

🗂 Supported sources

SourceStorage locationImport tool
Claude Code~/.claude/projects/<slug>/<sessionId>.jsonlimport_claude
Claude-3p (new client)%LOCALAPPDATA%\Claude-3p\claude-code-sessions (metadata → JSONL via cliSessionId)import_claude
Codex / ChatGPT CLI~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonlimport_codex
ChatGPT (web export)anywhere you saved the export — conversations.jsonimport_chatgpt
Cursor~/.cursor/projects/<slug>/agent-transcripts/<id>/<id>.jsonlimport_cursor
Gemini CLI~/.gemini/history/<slot>/chats/session-*.jsonimport_gemini
Reasonix (CLI + desktop)~/.reasonix/sessions/desktop-*.jsonl · %APPDATA%\reasonix\projects\<slug>\sessions\*.jsonlimport_reasonix
opencode~/.local/share/opencode/opencode.dbimport_opencode
MiMo Code (opencode fork)~/.local/share/mimocode/mimocode.dbimport_mimocode
ZCode (z.ai CLI)~/.zcode/cli/db/db.sqliteimport_zcode
Grok Build~/.grok/sessions/<project>/<session_id>/import_grokbuild
OpenClaw~/.openclaw/agents/<agent>/sessions/*.jsonlimport_openclaw
Pi Coding Agent~/.pi/agent/sessions/--<cwd>--/<timestamp>_<uuid>.jsonlimport_pi
Hermes~/.hermes/ (Windows %LOCALAPPDATA%\hermes)import_hermes
Kimi CLI / Kimi Code~/.kimi/sessions/<workdir-md5>/<sessionId>/wire.jsonl · ~/.kimi-code/sessions/<workspaceId>/<sessionId>/agents/main/wire.jsonlimport_kimi
Qoder CLI~/.qoder/projects/<encoded-project>/<sessionId>.jsonl (subagents in <sessionId>/subagents/*.jsonl)import_qoder
DSH session logs~/.dsh/sessions/<encoded-workspace>/<sessionId>/session.jsonl(.zstd)import_dsh
Any local JSONLany .jsonl file / directory (auto-detected)import_local_jsonl

Each import preserves what the source actually records; anything a format cannot preserve is explicitly flagged in the import report. Per-format details and edge cases live in Usage Reference.


🛠 Usage

All import_* tools share the same path semantics: a single file becomes one session, a directory is scanned recursively for batch import. Common options: preview (zero side effects), force (new full copy), sessionId (override target id), expectedHash (SHA-256 verification), restamp (shift timestamps to now), workspaceMode / workspaceDir (grouping control).

import_claude({ path: "C:\Users\<you>\.claude\projects\<slug>\<sessionId>.jsonl" })
import_opencode({ path: "C:\Users\<you>\.local\share\opencode\opencode.db" })
import_local_jsonl({ path: "D:\downloads\session.jsonl", format: "claude" })

import_chatgpt / import_opencode / import_zcode / import_hermes always return batch results — one file / database contains every session, and each conversation becomes its own session in a single call.

Full per-tool / per-command usage lives in docs/USAGE.md.


🔑 Key behaviors

  • Read-only import — source transcripts and databases are never rewritten; imported DSH history is append-only.
  • Idempotent + incremental — unchanged sources skip without re-reading; grown sources append only new turns; shrinking is detected and reported.
  • Auto workspace grouping — sessions land in the workspace of their source cwd (authoritative mapping → slug decode → home-directory sandbox guard; falls back to the source file's directory when the path does not exist locally).
  • Preset mode — imported sessions mount the default preset scope via agents.create and write the default preset id back to SessionHeader.agentPreset, so the UI shows the preset-mode chip exactly like a normal session.
  • System prompt (optional, off by default) — the "Import system prompt" setting (a tab in the settings Plugins section) preserves the source transcript's system / developer prompt as a "context injection" collapsed row, prefixed with a note that the environment changed and tools / permissions / instructions now follow DSH. Claude Code transcripts do not persist a system prompt, so the toggle is a no-op for that source.
  • Fail loudly — malformed lines, suspected secrets, format limitations and export degradations are all reported; every persisted session gets a structural self-check.
  • Sandbox — reading sources or writing exports outside the workspace requires the session sandbox to allow that path.

📚 Docs

DocumentDescription
Usage ReferenceFull parameters, examples and edge cases for every tool / command
Interchange protocolInterchange v1 protocol and bundle format
ChangelogVersion history
RoadmapShipped / planned
ContributingDevelopment setup, commit rules, security & privacy

⭐ Star History

Star History Chart


🤝 Contributing

Contributions welcome — fork the repo, create a feature/<name> branch, and open a PR. Full guide: CONTRIBUTING.md.

  • Tests: npm test · Cross-platform guard: npm run check:linux
  • Repo conventions: AGENTS.md — conventional commits, bilingual READMEs must stay in sync, plugin consumes public dsh host services only, multi-session file-claim protocol.

📄 License

MIT — see LICENSE.

関連プラグイン