- Inicio
- Plugins
- Sesiones y mensajes
- dsh-chat-import
dsh-chat-import
nwflower/dsh-chat-import
Importa historiales de chat con fidelidad completa de 13 agentes de codificación (Claude Code, Codex, ChatGPT, Cursor, Gemini, opencode y más) como sesiones reanudables de DeepSeek Harness, con exportación inversa de vuelta a Claude Code.
Instalar
dsh plugin --profile web add github:nwflower/dsh-chat-importREADME
📥 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.
💡 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.
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:
- 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" })
- Resume — refresh the session list, open the imported session, and keep chatting from where the source left off.
- Discover & batch —
scan_discover()previews read-only; the sidebar "Import sessions" panel browses by workspace and supports multi-select import;/import-allbatch-imports everything. - Sync (optional) — the panel's "Sync" tab offers bidirectional incremental sync (external → DSH, DSH → external), default off.
Uninstall: remove the
import-claudeinsert line from your profile's bundles and restart dsh; imported sessions stay untouched and the plugin never auto-deletes.
✨ Features
| Capability | Entry points | Description |
|---|---|---|
| Batch import from 16+ sources | import_* (17 tools) · scan_discover · sidebar panel · /import | A file, a directory or a whole database — each conversation becomes its own session |
| Full-fidelity resume | Imported sessions | Tool calls & results, reasoning, titles, models and timestamps carry over; sessions group into the source cwd workspace |
| Matrix export | export_claude / export_codex / export_kimi | Serialize DSH sessions back to Claude / Codex / Kimi formats; every lossy item is reported |
| Portable backup | export_bundle / restore_bundle | Interchange bundle with dual SHA-256 fingerprints, restorable across machines |
| Incremental write-back | sync_to_claude | Appends new complete turns back to a Claude Code file — guarded, never overwriting |
| Agent asset migration | import_agents | Converts pi / opencode / Claude / Codex agents, prompts, skills, instructions into persistent DSH skills |
| MCP mirror plan | import_mcp / /mcp-status | Reads Claude / Codex MCP servers and generates a reviewable DSH MCP client YAML snippet |
| Settings translation | import_settings / /settings-suggest | Turns Claude settings / Codex config into DSH migration suggestions (read-only) |
| Handoff summaries | /resume-claude / /resume-codex | Treats external transcripts as untrusted history and injects a handoff summary into the current session |
| Read-only audit / checkup | verify_session / doctor / CLI dsh-chat-import doctor | Structural audit and migration health check |
| Idempotency & protection | All import tools | expectedHash / restamp / context-budget protection; unchanged sources skip, grown sources append |
| Preset mode + system prompt | Settings tab in the Plugins section | Imported sessions record the default preset; optional "import system prompt" as a context injection (off by default) |
🗂 Supported sources
| Source | Storage location | Import tool |
|---|---|---|
| Claude Code | ~/.claude/projects/<slug>/<sessionId>.jsonl | import_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-*.jsonl | import_codex |
| ChatGPT (web export) | anywhere you saved the export — conversations.json | import_chatgpt |
| Cursor | ~/.cursor/projects/<slug>/agent-transcripts/<id>/<id>.jsonl | import_cursor |
| Gemini CLI | ~/.gemini/history/<slot>/chats/session-*.json | import_gemini |
| Reasonix (CLI + desktop) | ~/.reasonix/sessions/desktop-*.jsonl · %APPDATA%\reasonix\projects\<slug>\sessions\*.jsonl | import_reasonix |
| opencode | ~/.local/share/opencode/opencode.db | import_opencode |
| MiMo Code (opencode fork) | ~/.local/share/mimocode/mimocode.db | import_mimocode |
| ZCode (z.ai CLI) | ~/.zcode/cli/db/db.sqlite | import_zcode |
| Grok Build | ~/.grok/sessions/<project>/<session_id>/ | import_grokbuild |
| OpenClaw | ~/.openclaw/agents/<agent>/sessions/*.jsonl | import_openclaw |
| Pi Coding Agent | ~/.pi/agent/sessions/--<cwd>--/<timestamp>_<uuid>.jsonl | import_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.jsonl | import_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 JSONL | any .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.createand write the default preset id back toSessionHeader.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/developerprompt 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
| Document | Description |
|---|---|
| Usage Reference | Full parameters, examples and edge cases for every tool / command |
| Interchange protocol | Interchange v1 protocol and bundle format |
| Changelog | Version history |
| Roadmap | Shipped / planned |
| Contributing | Development setup, commit rules, security & privacy |
⭐ Star History
🤝 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.
Plugins relacionados
dsh-turn-rewind
anionex/dsh-turn-rewind
dsh-suite (plugin-session-export)
whyihaveyou/dsh-suite
dsh-interconnect
chinesezjc/dsh-interconnect
dsh-message-edit
moeblack/dsh-message-edit