dsh-claude-move 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.es.md +285 -291
- package/README.hi.md +285 -292
- package/README.md +285 -317
- package/README.pt.md +285 -291
- package/README.zh.md +285 -311
- package/client/client.js +7 -3
- package/index.mjs +20 -10
- package/package.json +68 -4
package/README.md
CHANGED
|
@@ -1,317 +1,285 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
[ and [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
287
|
-
|
|
288
|
-
## 🔗 Related links
|
|
289
|
-
|
|
290
|
-
- DeepSeek Harness: [repo](https://github.com/deepseek-ai/deepseek-harness) · [site](https://www.deepseek.com/harness/) · [developer docs](https://deepseek-harness.github.io/deepseek-harness/develop/basic/)
|
|
291
|
-
- Plugin ecosystem: [`dsh` topic](https://github.com/topics/dsh) · [`dsh-plugin` topic](https://github.com/topics/dsh-plugin) · [Discord](https://discord.gg/Ycq5dCaS4)
|
|
292
|
-
|
|
293
|
-
## 📄 License
|
|
294
|
-
|
|
295
|
-
Apache License 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE). Third-party notices (including the MIT text for the MIT-licensed components) in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
296
|
-
|
|
297
|
-
## PerryLink DSH Plugin Family
|
|
298
|
-
|
|
299
|
-
This project is one of the [15 DeepSeek Harness plugins](https://github.com/PerryLink) maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
300
|
-
|
|
301
|
-
| Plugin | One-liner |
|
|
302
|
-
|---|---|
|
|
303
|
-
| [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
|
|
304
|
-
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Engineering-discipline guard: requirements grill, test gates, adversary review |
|
|
305
|
-
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Durable background child agents with a Web UI sidebar, messaging and interrupt |
|
|
306
|
-
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP diagnostics, formatting, completion, code actions and rename over language servers |
|
|
307
|
-
| [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-equivalent runtime style switching |
|
|
308
|
-
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
|
|
309
|
-
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-style declarative allow/deny/ask permission rules with audit |
|
|
310
|
-
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Second-model auto-review on the approval chain, fail-closed by default |
|
|
311
|
-
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
312
|
-
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Security-audit skill pack: secret scan, dependency and supply-chain review |
|
|
313
|
-
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Pin sessions in the Web sidebar with durable ordering |
|
|
314
|
-
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Terminal-style input history for the web composer: arrows, Ctrl+R search |
|
|
315
|
-
| [dsh-github](https://github.com/PerryLink/dsh-github) | GitHub PR/issues integration for DSH, every write gated by approval |
|
|
316
|
-
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
|
|
317
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🚚 dsh-claude-move
|
|
4
|
+
|
|
5
|
+
**Migrate Claude Code, Codex, OpenCode and Hermes into DeepSeek Harness — copy sessions, memories, skills, instructions and slash commands as resumable DSH sessions, copy-only and approval-gated.**
|
|
6
|
+
|
|
7
|
+
*Keep your Claude Code history when you move: one install, resumable sessions, live sync with a running Claude Code, and a four-source migration wizard.*
|
|
8
|
+
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/topics/dsh-plugin)
|
|
11
|
+
[](#)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-claude-move/actions)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-claude-move/releases)
|
|
14
|
+
[](https://www.npmjs.com/package/dsh-claude-move)
|
|
15
|
+
[](https://www.npmjs.com/package/dsh-claude-move)
|
|
16
|
+
|
|
17
|
+
[English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Compatibility
|
|
24
|
+
|
|
25
|
+
- Targets `dsh 0.1.0-rc.6` (web profile); peer dependencies pinned to `0.1.0-rc.6`. Node `^22.19 || >=24`.
|
|
26
|
+
- Last verified against a fresh tarball install: real scan, real batch import (idempotent re-import), workspace attach and persistence artifacts confirmed; macOS/Linux covered by the CI matrix.
|
|
27
|
+
|
|
28
|
+
### Compatibility matrix (public seams only)
|
|
29
|
+
|
|
30
|
+
| Surface | Used | Fallback when absent |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| Host services (`tools` / `sessionPersistence` / `workspaceRegistry` / `commands` / `systemPrompt` / `skills` / `webServer`) | required where listed | optional services register reactively; missing `fs` fails loud |
|
|
33
|
+
| `sessionPersistence.listSnapshots` / `readFrom` / `streamText`-capable `fs` / `ctx.jobs` / `ctx.agents.resume` | feature-detected | `list()` / whole-file read with loud rejection / own job map / handoff inject |
|
|
34
|
+
| Client shell services (`sessions.refresh/open`, `workspaces.refresh`) | feature-detected at panel apply | full-page reload |
|
|
35
|
+
| Newer platform capabilities are never hard requirements — the plugin stays bootable on rc.6. | | |
|
|
36
|
+
|
|
37
|
+
## What you get
|
|
38
|
+
|
|
39
|
+
1. **Auto-discovery** — `claude_scan` locates the Claude data root (`$CLAUDE_CONFIG_DIR`, fallback `~/.claude`) and indexes every project/session, memory, skill, global `CLAUDE.md` and `settings.json`, with incremental caching and parallel scanning (`scanConcurrency`).
|
|
40
|
+
2. **Full-fidelity import** — `import_claude` turns transcripts into balanced, resumable DSH sessions (`turn/start → step/start → user/message → assistant/message → tool/call → tool/result → step/end → turn/end`), repairs interrupted tool calls, and stream-imports transcripts larger than `maxTranscriptBytes` in chunks.
|
|
41
|
+
3. **One `claudecode` workspace** — every imported session lands in a dedicated workspace (default `$DSH_HOME/claudecode`); `workspaceMode: 'per-project'` restores one-workspace-per-project grouping.
|
|
42
|
+
4. **Copy-only & incremental** — nothing on either side is moved, rewritten, or deleted; re-running appends only the new turns (`force: true` saves an extra full copy under a new id).
|
|
43
|
+
5. **Personal context, always fresh** — memories injected as a live prompt section, Claude skills registered as real DSH skills (global + project-level), global + project `CLAUDE.md` injected early.
|
|
44
|
+
6. **Four-source migration wizard** — `/move` plus `move_detect` / `move_preview` / `move_run` migrate Claude Code, Codex, OpenCode and Hermes, approval-gated and idempotent (`move.json`).
|
|
45
|
+
7. **Web panel & commands** — `/claude-import-all`, `/resume-claude`, `/claude-move-reset`, and a floating migration panel.
|
|
46
|
+
|
|
47
|
+
## Four-source migration wizard
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
/move # one-shot wizard: detect → preview → execute → report (all four sources)
|
|
51
|
+
move_detect # scan Claude Code / Codex / OpenCode / Hermes
|
|
52
|
+
move_preview # per-item plan: new | unchanged | changed | conflict (with diff) | unsupported
|
|
53
|
+
move_run # execute behind the approval gate; conflict resolution:
|
|
54
|
+
# skip | overwrite | rename | merge (default skip — never guesses)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- **Sources** — Claude Code (`~/.claude`), Codex (`~/.codex`), OpenCode (data + config roots), Hermes (skills/memory roots); each source has its own parser + mapper.
|
|
58
|
+
- **Mapping** — memories/instructions → append-only managed sections in the DSH global `AGENTS.md` (one marked section per item); skills → real DSH skills (`SKILL.md` bundles copied verbatim, other formats converted); slash commands → registered DSH commands (rebuilt from `move.json` after a restart); sessions → resumable DSH sessions (the same importers as phase 1).
|
|
59
|
+
- **Idempotent** — every applied plan is recorded in `$DSH_HOME/claude-move/move.json` (`digest` / `targetDigest` / `appliedAt`); re-runs skip unchanged items and `force` re-applies them.
|
|
60
|
+
- **Approval-gated** — a run that would write anything asks `ctx.approval` first; anything but `allowed-once` means zero writes.
|
|
61
|
+
|
|
62
|
+
## Quick start
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
# 1. install the bundle into your profile
|
|
66
|
+
dsh plugin --profile web add "github:PerryLink/dsh-claude-move#master"
|
|
67
|
+
|
|
68
|
+
# or from npm (published releases)
|
|
69
|
+
dsh plugin --profile web add dsh-claude-move
|
|
70
|
+
|
|
71
|
+
# 2. restart and verify the row
|
|
72
|
+
dsh --profile web --dump-config | grep -A4 'id: claude-move'
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Then, in any DSH session, run one command:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
/claude-import-all # scan → copy every Claude session → report
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
No DSH restart is needed after importing — refresh the open Web page once and click any imported session to continue.
|
|
82
|
+
|
|
83
|
+
## Install & uninstall
|
|
84
|
+
|
|
85
|
+
- **git channel** (latest `master`): `dsh plugin --profile web add "github:PerryLink/dsh-claude-move#master"` — pure ESM, no `prepare` or `allowBuilds` step.
|
|
86
|
+
- **npm channel** (published releases): `dsh plugin --profile web add dsh-claude-move`.
|
|
87
|
+
- **tarball channel**: `npm pack` in this repo, then `dsh plugin --profile web add ./dsh-claude-move-<version>.tgz`.
|
|
88
|
+
- **uninstall**: remove the `claude-move` row from the profile's bundles and restart `dsh`. Imported sessions stay in DSH's data directory; the plugin only writes its cache (`$DSH_HOME/claude-move/`) and the `claudecode` workspace folder, and never touches Claude source data.
|
|
89
|
+
|
|
90
|
+
## What gets migrated
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
~/.claude (read-only)
|
|
94
|
+
├─ projects/*/*.jsonl ──→ resumable DSH sessions, grouped in one "claudecode" workspace (default)
|
|
95
|
+
├─ projects/*/memory/ ──→ live system-prompt memory section (re-read per request)
|
|
96
|
+
├─ skills/** ──→ real DSH skills
|
|
97
|
+
└─ CLAUDE.md + settings ──→ early prompt section + config suggestions (never auto-applied)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
| In Claude Code | Lands in DSH as |
|
|
101
|
+
|---|---|
|
|
102
|
+
| Session transcripts (`projects/*/*.jsonl`) | Balanced, resumable DSH sessions — full-fidelity `user`/`assistant`/`tool`/`thinking` mapping with interrupted-tool-call repair — grouped into one **`claudecode`** workspace or one per project |
|
|
103
|
+
| Memory files (`projects/*/memory/*.md`) | A live system-prompt context section, re-read on every request (`feedback > project > reference > user`) |
|
|
104
|
+
| Skills (`~/.claude/skills/**`) | Real DSH skills (kebab-case names, collision suffixes, max 30 by default; `README.md`/`MEMORY.md` and files without a description are skipped) |
|
|
105
|
+
| `CLAUDE.md` (global + per-project) | An early prompt section; the project file wins |
|
|
106
|
+
| `settings.json` | DSH configuration suggestions with an explicit unmappable-keys list |
|
|
107
|
+
| Project state (directory, git branch & dirty count) | Shown in the scan index, the Web panel badges, and the `/resume-claude` handoff |
|
|
108
|
+
|
|
109
|
+
## Usage
|
|
110
|
+
|
|
111
|
+
Call the tools in any session with the plugin mounted:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
claude_scan # full scan (incremental cache)
|
|
115
|
+
claude_scan { path: "~/.claude/projects/<slug>" } # partial scan
|
|
116
|
+
claude_scan { refresh: true } # skip cache, rescan everything
|
|
117
|
+
claude_scan { projectsLimit: 10, sessionsLimit: 5, fields: "brief" } # trim output
|
|
118
|
+
|
|
119
|
+
import_claude { path: "~/.claude/projects/<slug>/<sessionId>.jsonl" } # one session
|
|
120
|
+
import_claude { path: "~/.claude/projects" } # directory (recursive)
|
|
121
|
+
import_claude { path: "all" } # everything
|
|
122
|
+
# Re-run any time: unchanged files are skipped, grown transcripts append only the new turns.
|
|
123
|
+
# Files over maxTranscriptBytes are stream-imported in chunks (no memory ceiling).
|
|
124
|
+
import_claude { path: "...", force: true } # fresh full copy (previous copy kept)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Commands (user-triggered, no model turn):
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
/claude-import-all # one-shot: scan → import everything → report → inject into the current session
|
|
131
|
+
/resume-claude latest # continue the most recent Claude session
|
|
132
|
+
/resume-claude <sessionId> # by source session id or import-<src> id
|
|
133
|
+
/resume-claude <keyword> # match titles; multiple matches are listed, never guessed
|
|
134
|
+
/claude-move-reset # reset the plugin cache (bookmarks + import map); imported sessions are kept
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Web panel: a floating migration panel with the project/session tree, status badges (not imported / imported / imported-with-new-turns / source missing / directory missing / git dirty), keyword filter, paged rendering, per-session "Import & continue" + "Open session" + "Refresh session list", batch import with a live progress bar and cancel, and a cache-reset button. Texts follow the browser language (zh/en). Served through the plugin's own `/api/claude-move/*` JSON routes on the public `ctx.webServer` seam.
|
|
138
|
+
|
|
139
|
+
## After importing
|
|
140
|
+
|
|
141
|
+
**You do not need to restart DSH.** Imports land durably through the public `sessionPersistence` service the moment they complete:
|
|
142
|
+
|
|
143
|
+
- The server-side lists (`session.list` / `workspace.list` RPCs, the CLI, any new page load) show the imported sessions under the **`claudecode` workspace** immediately.
|
|
144
|
+
- The panel refreshes the already-open page's session list itself and offers an **Open session** button per imported session.
|
|
145
|
+
- Imported sessions can be opened, read, and resumed right away — `/resume-claude`, or click the session in the list. Re-running the import at any time syncs only the new turns into the same sessions.
|
|
146
|
+
|
|
147
|
+
## Configuration
|
|
148
|
+
|
|
149
|
+
All optional, overridable in cordis.yml.
|
|
150
|
+
|
|
151
|
+
| Key | Default | Meaning |
|
|
152
|
+
|---|---|---|
|
|
153
|
+
| `claudeHome` | `$CLAUDE_CONFIG_DIR` or `~/.claude` | Claude data root |
|
|
154
|
+
| `workspaceMode` | `claudecode` | `claudecode` (one dedicated workspace) · `per-project` (one workspace per source cwd) |
|
|
155
|
+
| `claudecodeDir` | `$DSH_HOME/claudecode` | The `claudecode` workspace folder (the only folder the plugin ever creates) |
|
|
156
|
+
| `scanGit` | `true` | Git probe level: `true` (full) · `'branch'` (zero git calls) · `false` |
|
|
157
|
+
| `gitTimeoutMs` | `5000` | Git subprocess timeout |
|
|
158
|
+
| `scanConcurrency` | `8` | Parallel project scan cap |
|
|
159
|
+
| `maxTranscriptBytes` | `67108864` | Stream-import threshold (chunked above) |
|
|
160
|
+
| `excludeProjects` | `[]` | Slug substrings to skip |
|
|
161
|
+
| `enableMemory` | `true` | Inject memories as a live prompt section |
|
|
162
|
+
| `memoryMaxBytes` | `8192` | Memory section cap |
|
|
163
|
+
| `memoryScope` | `current-project` | `current-project` · `all` (current first) |
|
|
164
|
+
| `enableSkills` | `true` | Register Claude skills as DSH skills |
|
|
165
|
+
| `maxSkills` | `30` | Skill count cap |
|
|
166
|
+
| `extraSkillDirs` | `[]` | Extra skill directories |
|
|
167
|
+
| `enableInstructions` | `true` | Inject global + project `CLAUDE.md` |
|
|
168
|
+
| `resumeMaxChars` | `2048` | Handoff summary char cap |
|
|
169
|
+
| `resumeMode` | `inject` | `inject` (handoff summary) · `agents` (ctx.agents.resume) |
|
|
170
|
+
| `enableWebPanel` | `true` | Register the `/api/claude-move/*` panel routes |
|
|
171
|
+
| `importConcurrency` | `4` | Parallel read+convert per batch |
|
|
172
|
+
| `requireApproval` | `true` | Wizard writes ask `ctx.approval` (allowed-once only) |
|
|
173
|
+
| `codexHome` | `$CODEX_HOME` or `~/.codex` | Codex data root |
|
|
174
|
+
| `opencodeDataHome` | platform XDG data dir/opencode | OpenCode data root |
|
|
175
|
+
| `opencodeConfigHome` | platform XDG config dir/opencode | OpenCode config root |
|
|
176
|
+
| `hermesHome` | `$HERMES_HOME` or `~/.hermes` | Hermes data root |
|
|
177
|
+
| `skillsDir` | `$DSH_HOME/skills` | Wizard skill target |
|
|
178
|
+
| `agentsMdPath` | `$DSH_HOME/AGENTS.md` | Wizard memory/instruction target |
|
|
179
|
+
| `moveWorkspaceMode` | `per-source` | `per-source` · `single` workspace grouping for wizard imports |
|
|
180
|
+
|
|
181
|
+
## Tools & surfaces
|
|
182
|
+
|
|
183
|
+
| Surface | Kind | Notes |
|
|
184
|
+
|---|---|---|
|
|
185
|
+
| `claude_scan` | tool | Structured index of projects/sessions/memories/skills/settings |
|
|
186
|
+
| `import_claude` | tool | Import one session, a directory, or `all` (incremental, `force` for a fresh copy) |
|
|
187
|
+
| `move_detect` / `move_preview` / `move_run` | tools | Four-source wizard: scan, per-item plan with diffs, execute behind approval |
|
|
188
|
+
| `/claude-import-all` | command | Scan → import everything → report |
|
|
189
|
+
| `/resume-claude` | command | Continue a Claude session (latest, id, or keyword) |
|
|
190
|
+
| `/claude-move-reset` | command | Reset the plugin cache (imported sessions kept) |
|
|
191
|
+
| `/move` | command | One-shot four-source wizard |
|
|
192
|
+
| Web migration panel | client | Floating panel with progress, cancel, paging, open session |
|
|
193
|
+
|
|
194
|
+
## Permissions & data
|
|
195
|
+
|
|
196
|
+
- **Permissions**: the workshop manifest declares `filesystem:read` and `filesystem:write`.
|
|
197
|
+
- **Reads** `~/.claude` (transcripts, memories, skills, `CLAUDE.md`, `settings.json`) — strictly read-only — and the project directories it imports into.
|
|
198
|
+
- **Writes** DSH session logs via the public `sessionPersistence` service (create + append only, never delete/rewrite/archive), workspace-registry records, its cache under `$DSH_HOME/claude-move/`, and the `claudecode` workspace folder.
|
|
199
|
+
- **Never** modifies Claude source files, touches other applications' data, or accesses the network. **No credentials** are read or transmitted.
|
|
200
|
+
|
|
201
|
+
## Security boundaries
|
|
202
|
+
|
|
203
|
+
- **Source files are read-only; DSH logs are append-only** (`create` + `append` only).
|
|
204
|
+
- **External transcripts are untrusted input** — nothing in them is executed; system/developer/thinking content never enters the resume handoff.
|
|
205
|
+
- **Public services only** — `sessionPersistence` / `workspaceRegistry` / `tools` / `commands` / `systemPrompt` / `skills` / `webServer`; no engine or UI changes.
|
|
206
|
+
- **Secrets reported by position only** (file:line:kind); `permission`/`permission-mode`/`queue-operation` records are counted, not imported.
|
|
207
|
+
- **Wizard writes are approval-gated** — anything but `allowed-once` means zero writes.
|
|
208
|
+
|
|
209
|
+
## Known limitations
|
|
210
|
+
|
|
211
|
+
- Titles come from `custom-title`/`ai-title`/first prompt; Claude `summary` records are reported but not mapped to DSH compaction nodes (synthesizing a valid compaction transaction would fabricate its seq range and checkpoint message).
|
|
212
|
+
- `thinking` blocks are kept as `reasoning` content but never enter the resume handoff.
|
|
213
|
+
- Interrupted tool calls are repaired with a synthetic error result (never dropped), reported as `repaired.synthesized`.
|
|
214
|
+
- Permission-class records are counted, not imported; DSH permission-preset suggestions are generated in reports.
|
|
215
|
+
- On hosts without a streaming `fs.streamText` surface, transcripts larger than `maxTranscriptBytes` fail loudly instead of partial import.
|
|
216
|
+
- In `workspaceMode: 'per-project'`, sessions whose source directory was deleted still import, but workspace attach fails (left ungrouped; `workspace.attached: false` plus a `reason`). The default `claudecode` workspace does not depend on the source directory.
|
|
217
|
+
- If a transcript was truncated or reset in place (fewer turns than the recorded import), re-import skips it and reports `sourceShrunk`; use `force: true` for a fresh full copy.
|
|
218
|
+
- The Web panel is a zero-build floating panel driven by the plugin's own JSON routes; it does not use the shell's internal UI slot system.
|
|
219
|
+
|
|
220
|
+
## Model Experience
|
|
221
|
+
|
|
222
|
+
- The model-facing surface is the two tools' descriptions/schemas and their outputs: `claude_scan` returns the structured index, `import_claude` returns per-file summaries with positions of warnings. Tool results are themselves logged `tool/result` events, so everything is reconstructable.
|
|
223
|
+
- No hidden model-facing text; memory/`CLAUDE.md` sections are registered on `ctx.systemPrompt` (prompt assembly, rebuildable from the session log).
|
|
224
|
+
|
|
225
|
+
## Troubleshooting
|
|
226
|
+
|
|
227
|
+
- Row not effective: `dsh --profile <p> --dump-config` should print `# == dsh-claude-move`; re-run `dsh plugin --profile <p> add ...`.
|
|
228
|
+
- Web boots but hangs silently: new profiles initialized by `dsh plugin add` contain only `dsh-base` — add `@deepseek-ai/dsh-web-app` to `dsh.profile.bundles`. Installing into the existing `web` profile needs nothing.
|
|
229
|
+
- Panel routes 404: they are served only when `enableWebPanel: true` and a web server is composed; check the boot log for FAILED fibers.
|
|
230
|
+
- Import fails with "transcript 过大": raise `maxTranscriptBytes` or import that file individually.
|
|
231
|
+
- Import succeeded but the sidebar shows no new session: the page was already open — click the panel's refresh button (or reload the page) once. No DSH restart is ever needed.
|
|
232
|
+
- Logs: boot failures print to the `dsh` console; the plugin logs `[claude-move]`-prefixed errors for workspace/import-map issues.
|
|
233
|
+
|
|
234
|
+
## Attribution (open-source components)
|
|
235
|
+
|
|
236
|
+
This project is licensed under the Apache License 2.0; the following MIT-licensed components retain their own licenses (full text in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)):
|
|
237
|
+
|
|
238
|
+
- Conversion core vendored from [Nwflower/dsh-chat-import](https://github.com/Nwflower/dsh-chat-import) (MIT).
|
|
239
|
+
- Discovery conventions & safety model from [Demogorgon314/dsh-resume-plugin](https://github.com/Demogorgon314/dsh-resume-plugin) (MIT).
|
|
240
|
+
- Memory/skills injection & frontmatter parsing patterns from [YYTbit/dsh-plugin-claude-bridge](https://github.com/YYTbit/dsh-plugin-claude-bridge) (MIT).
|
|
241
|
+
|
|
242
|
+
## Development
|
|
243
|
+
|
|
244
|
+
```sh
|
|
245
|
+
npm install # peer deps: @deepseek-ai/dsh-tools@0.1.0-rc.6, @deepseek-ai/cordis, schemastery
|
|
246
|
+
npm test # node --test test/*.test.mjs
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
CI runs the full suite on Node 22 across Linux/macOS/Windows via GitHub Actions ([test.yml](.github/workflows/test.yml)).
|
|
250
|
+
|
|
251
|
+
## Topics
|
|
252
|
+
|
|
253
|
+
`deepseek-harness`, `dsh-plugin`, `claude-code`, `migration`, `session-import`, `resume`
|
|
254
|
+
|
|
255
|
+
## Contributors
|
|
256
|
+
|
|
257
|
+
- [@PerryLink](https://github.com/PerryLink) — creator and maintainer: the import pipeline, the four-source migration wizard, the Web panel, docs, CI/CD and releases.
|
|
258
|
+
- [@OLDnana1](https://github.com/OLDnana1) — root-cause analysis of the interrupted tool-call corruption that made imported sessions permanently return HTTP 400 on resume.
|
|
259
|
+
- [@GooodWei](https://github.com/GooodWei) — identified `README.md` (and any description-less `.md`) being misregistered as a skill, which broke DSH's skill load.
|
|
260
|
+
|
|
261
|
+
## PerryLink DSH Plugin Family
|
|
262
|
+
|
|
263
|
+
This project is one of the DeepSeek Harness plugins maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
264
|
+
|
|
265
|
+
| Plugin | One-liner |
|
|
266
|
+
|---|---|
|
|
267
|
+
| [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
|
|
268
|
+
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Engineering-discipline guard: requirements grill, test gates, adversary review |
|
|
269
|
+
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Durable background child agents with a Web UI sidebar, messaging and interrupt |
|
|
270
|
+
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP diagnostics, formatting, completion, code actions and rename over language servers |
|
|
271
|
+
| [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-equivalent runtime style switching |
|
|
272
|
+
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
|
|
273
|
+
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-style declarative allow/deny/ask permission rules with audit |
|
|
274
|
+
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Second-model auto-review on the approval chain, fail-closed by default |
|
|
275
|
+
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
276
|
+
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Security-audit skill pack: secret scan, dependency and supply-chain review |
|
|
277
|
+
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Pin sessions in the Web sidebar with durable ordering |
|
|
278
|
+
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Terminal-style input history for the web composer: arrows, Ctrl+R search |
|
|
279
|
+
| [dsh-github](https://github.com/PerryLink/dsh-github) | GitHub PR/issues integration for DSH, every write gated by approval |
|
|
280
|
+
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
|
|
281
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
282
|
+
|
|
283
|
+
## License
|
|
284
|
+
|
|
285
|
+
[Apache License 2.0](LICENSE) © 2026 dsh-claude-move contributors
|