xiaoshenming/dsh-session-surgeon
dsh-session-surgeon
dsh-session-surgeon is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx @deepseek-ai/dsh plugin --profile web add "github:xiaoshenming/dsh-session-surgeon#main"Restart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-session-surgeon)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from xiaoshenming/dsh-session-surgeon, cleaned of badges and images.
dsh-session-surgeon
Copy a session ID from the sidebar ⋯ menu, then paste it into a new chat so the new session can learn from the old one — the Codex-style “continue from this thread” move that stock DSH does not expose.
Also repairs DeepSeek Harness sessions that refuse to load — seq gap, torn zstd, lone surrogates, and events missing their message id. 官方以后修加载器,也救不回已经坏掉的 session.jsonl.zstd。
Compatible with
@deepseek-ai/[email protected].
Why copy the session ID
Stock DSH session ⋯ only has rename / fork / archive. There is no “copy ID”.
After this plugin:
-
Left sidebar, click ⋯ on a session → 复制会话 ID
-
Open a new chat and paste something like:
Continue from session session-1e66cda9-a046-4893-8f4b-b817080acbea. Read that log if you need prior context.or, for an agent with tools:
session_inspect id=session-1e66cda9-a046-4893-8f4b-b817080acbea Then keep going from where that conversation left off.
The ID is the durable handle (with or without the session- prefix — same session). Fork duplicates a file; copying the ID lets a new session refer to the old one, the way people pass a Codex thread id around.
Install
One command, same as other DSH plugins:
dsh plugin --profile web add "github:xiaoshenming/dsh-session-surgeon#main"
Restart dsh web. Then:
- Session ⋯ menu: 复制会话 ID (the everyday action) / inspect / dry-run repair
- Sidebar 会话医生 / Session surgeon: browse conversations, copy id, dry-run repair, apply repair, compact preview, export JSONL
Developers working in a checkout can still use dsh plugin --profile web add link:"$(pwd)".
Also: repair unloadable sessions
Real crash families from official Discussions:
- #317 stack overflow on huge history
- #1497 / #1586
seq gap in committed region - #436 lone UTF-16 surrogate → permanent HTTP 400
- #674 leftover
.tmpplaintext
Default repair is dry-run. --apply writes .bak.<utc> first, never invents missing seqs, and fills missing message ids without dropping events.
CLI
No dsh web required after the plugin (or this repo) is on disk:
npx --yes github:xiaoshenming/dsh-session-surgeon scan
npx --yes github:xiaoshenming/dsh-session-surgeon inspect <session-id>
npx --yes github:xiaoshenming/dsh-session-surgeon repair <session-id> # dry-run
npx --yes github:xiaoshenming/dsh-session-surgeon repair <session-id> --apply # writes .bak.<utc> first
Or from a clone: node bin/dsh-session-surgeon.mjs scan.
Agent tools after install: session_scan / session_inspect / session_repair (apply defaults to false).
Commands
| command | meaning |
|---|---|
scan [root] | list sessions + header health + orphan .tmp |
inspect <id> | decode every zstd frame, expand packed rows, report seq gaps |
repair <id> | default --dry-run; --apply rewrites after .bak.<utc> |
compact <id> --keep-last-turns N | keep the last N complete turns, renumber seq from 0 |
export <id> | JSONL dump; redacts secrets unless --no-redact |
index [root] | session / parent / goal / health table |
…

