Need to restore a DeepSeek Harness conversation on another computer, another
deployment, or a new workspace? This plugin reads .zip archives and bare
.jsonl logs produced by DSH /export, validates their structure and SHA-256
fingerprint, and restores the content as a new DSH session. The complete
workflow is available from an Import conversation dialog on the new-session
page.
- DSH Image2 Draw adds
gpt-image-2text-to-image and image-to-image support to DSH. - DSH Reasoning Settings configures independent reasoning levels and wire values for third-party providers and models.
- Imports
.ziparchives and bare.jsonlsession logs produced by DSH/export. - Adds an Import conversation button to the new-session page with file selection and drag-and-drop support.
- Previews the title, message counts, tool activity, turns, original workspace, model, and session state before importing.
- Always allocates a new session ID and never overwrites an existing session.
- Supports a target workspace, custom title, original timestamps or restamping to the current time.
- Selectively synchronizes model and reasoning effort, agent preset, permissions, sandbox, approval policy, and plan mode.
- Displays SHA-256 and optionally enforces an
expectedHashmatch. - Supports side-effect-free
dryRun=1validation and immediateopen=1session resume. - Rolls back persistence, workspace attachment, or load-validation failures so partial sessions are not left behind.
- Restricts deletion to sessions successfully imported and registered by the current plugin process instead of accepting arbitrary cold-session IDs.
- Validates ZIP CRC-32, central-directory metadata, entry bounds, and local header names, and rejects encrypted, multi-disk, and ZIP64 archives.
- Handles request cancellation, file-selection races, Escape, focus restore, and responsive layouts in the browser client.
- Install Node.js. DSH currently supports Node.js
22.19.x or version 24 and newer; Node.js 24 LTS is recommended. Node.js
includes
npmandnpx. - Install Git so the plugin can be fetched from GitHub.
- Install pnpm. Both methods require pnpm because
dsh plugininvokes it in the profile directory to install or remove plugins. - Your network must reach
registry.npmjs.organdgithub.com. Configure a working network proxy if npm or GitHub is unavailable or unstable. - Method 1 does not require a DeepSeek Harness source checkout. Method 2 also requires that checkout.
Check the basic environment first:
node --version
npx --version
git --version
corepack enable
pnpm --versionIf corepack enable fails with a permission error, run it once from an
Administrator PowerShell. Alternatively, use another option from the
pnpm installation guide.
If downloads fail with ECONNRESET, ETIMEDOUT, or a GitHub connection error,
set a proxy for the current PowerShell window. Port 7890 is only an example;
replace it with your proxy's actual port:
$proxy = "http://127.0.0.1:7890"
$env:HTTP_PROXY = $proxy
$env:HTTPS_PROXY = $proxy
$env:npm_config_proxy = $proxy
$env:npm_config_https_proxy = $proxyThese variables only affect the current PowerShell window and disappear when it is closed.
This method does not require a DeepSeek Harness source checkout or a global
dsh installation, but Git and pnpm must already be available:
npx --yes -p @deepseek-ai/dsh dsh plugin --profile web add github:JuneLearn/dsh-session-importStart Web through the same package runner after installation:
npx --yes -p @deepseek-ai/dsh dsh webEnter the DeepSeek Harness source root. Install its dependencies once, then install the plugin:
cd D:\deepseek-harness
pnpm install
pnpm dsh plugin --profile web add github:JuneLearn/dsh-session-importStart Web from that source directory afterward:
cd D:\deepseek-harness
pnpm dsh webThe package's dsh.bundle declaration adds the plugin to the Web profile
automatically. Neither method requires editing cordis.patch.yml. Web listens
on http://127.0.0.1:3080 by default.
Link the working tree directly into the Web profile while developing locally:
cd D:\deepseek-harness
pnpm dsh plugin --profile web add "D:\CodexFile\临时文件夹\dsh-session-import"
pnpm dsh webAfter a local link install, source changes normally require only a dsh web
restart and browser refresh rather than another installation.
Run the corresponding installation command again. No uninstall or manual profile-patch maintenance is required.
npx method:
npx --yes -p @deepseek-ai/dsh dsh plugin --profile web add github:JuneLearn/dsh-session-importpnpm source method:
cd D:\deepseek-harness
pnpm dsh plugin --profile web add github:JuneLearn/dsh-session-importnpx method:
npx --yes -p @deepseek-ai/dsh dsh plugin --profile web remove dsh-session-importpnpm source method:
cd D:\deepseek-harness
pnpm dsh plugin --profile web remove dsh-session-importUninstalling the plugin does not remove sessions that were already imported.
Restart dsh web; the import button and HTTP endpoints are then removed.
- Open DSH Web and click New session at the top of the left sidebar.
- Find the workspace and mode controls above the central prompt input.
- Click Import conversation to the right of Standard mode.
- Select or drop a
.zip/.jsonlfile produced by DSH/export. - Review the structural verdict, SHA-256, counts, original workspace, and synchronizable state.
- Select a target workspace and adjust title, restamping, and synchronization options as needed.
- Click Start import. The new session appears in the sidebar and opens automatically.
The control row is approximately:
[Select workspace] [Standard mode] [Import conversation]
The plugin also exposes local HTTP endpoints. See the complete API documentation for parameters and response formats.
- The upload and decompressed root session log are each limited to 256 MB.
- One ZIP may contain at most 10,000 entries, and the expanded root log may contain at most 1,000,000 events.
subagents/logs andmedia/files are counted but are not currently imported with the root session.- Structural validation covers event sequence, time, type, references,
turn/step and tool-call pairing, message envelopes,
surfaceOp, andsourceEventSeqs. - SHA-256 proves equality with a supplied fingerprint, but DSH exports are not digitally signed and therefore do not prove author identity.
- Deletion ownership is kept only for the current DSH process. Imported sessions continue to work after restart, but can no longer be removed through the plugin rollback endpoint.
- Uploaded files are parsed locally in memory and are never sent to an external service.
- The plugin makes no outbound network requests and does not access API keys or other DSH credentials.
- Import writes only to DSH's own session persistence and workspace registry.
- Rollback only acts on sessions successfully imported and registered by this plugin process.
| Symptom | Cause and action |
|---|---|
| Import conversation is missing | Open the new-session page, restart dsh web, then press Ctrl+F5 |
loaded without registering |
An old client bundle is cached; update the plugin, restart DSH, and hard-refresh |
400 bad-file |
The file is not valid ZIP/JSONL, or is damaged, encrypted, oversized, or unsupported |
409 hash-mismatch |
The uploaded file does not match the expected SHA-256 fingerprint |
422 structure |
Events are broken or references are invalid; failed imported artifacts are rolled back |
403 not-imported |
The target was not registered by this plugin process, or DSH has restarted |
503 persistence / workspace |
The active profile lacks required persistence or workspace services |
npm test
npm run check
npm pack --dry-runtests/plugin.test.mjs covers log and ZIP parsing, structural validation,
sequence remapping, transactional rollback, deletion protection, client helper
functions, module identity, and package metadata.
The current release targets the public session format, dual-end plugin,
WebServer, workspace, and session-persistence interfaces of DeepSeek Harness
0.1.0-rc.6. Harness is still in Developer Preview. If an upgrade breaks the
plugin, check event types, message envelopes, Host service names, and the
dsh.client.inject declaration first.
This project is based on the MIT-licensed kinyokun/dsh-session-import. Thanks to kinyokun for the original work. The upstream copyright and license notice remain in LICENSE. See NOTICE and the upstream comparison for attribution and a detailed change summary.