Skip to content
dsh.fish
Bundle

dsh-session-port

DSH plugin: bundle a session (logs, subagents, referenced media + workspace files) into one ZIP and restore it — GET/wsx/session-pack, POST/wsx/session-pack/import + Session Header Export/Import actions

Source
seth-hg
License
MIT
Updated
Updated 23 hours ago

Readme

# dsh-session-port

Port a session in and out of DeepSeek Harness — bundle one session into a single ZIP and restore it anywhere.

[中文](README_zh.md)

## What it does

Export a session with everything it references — the log (root + subagents), media, and the workspace files — into one archive, then import that archive on another DSH, fully restored and re-attached to its workspace.

| Action | What it does |
| --- | --- |
| **Export** | Streams one ZIP: manifest → logs → subagents → media → referenced workspace files |
| **Import** | Restores sessions, media, and workspace files; remaps paths; auto-attaches the session to its workspace |
| **Repair** | Re-attaches an imported session and re-folds its title (fixes "ungrouped" / missing name) |

## Install

Requires Node.js ≥ 22.10 and `pnpm` (`dsh plugin` uses pnpm underneath).

```sh
# From GitHub (default branch, or pin a tag)
dsh plugin --profile web add "github:seth-hg/dsh-session-port"
dsh plugin --profile web add "github:seth-hg/dsh-session-port#v0.1.4"

# From a local checkout
dsh plugin --profile web add /path/to/dsh-session-port
```

Restart `dsh web`. Two **Export / Import** buttons appear in the session header.

## Usage

### From the session header

- **Export** — downloads `session-port-<id>.zip`.
- **Import** — pick a `.zip`; it restores into the current session's workspace (the header cwd).

Import also accepts DSH's built-in session-log export (the header `/export` download): it restores the root session, subagents, and media. That export carries no workspace files, so none are expected.

### From the HTTP routes (loopback-trusted)

```sh
# Export (scope=referenced by default, or workspace)
curl 'http://127.0.0.1:3080/wsx/session-pack?sessionId=<id>&scope=referenced' -o out.zip

# Import into a workspace (path remap: old::new)
curl -X POST 'http://127.0.0.1:3080/wsx/session-pack/import?workspace=/path/to/workspace&remap=/old::/new' \
  --data-binary @out.zip

# Repair an imported session (re-attach + re-fold title)
curl -X POST 'http://127.0.0.1:3080/wsx/session-pack/repair?sessionId=<id>'
```

## HTTP API

| Route | Method | Purpose |
| --- | --- | --- |
| `/wsx/session-pack?sessionId=<id>&scope=referenced\|workspace&level=0-9` | GET | Stream the ZIP archive |
| `/wsx/session-pack/import?workspace=<dir>&remap=<old>::<new>` | POST | Restore an archive (JSON summary) |
| `/wsx/session-pack/repair?sessionId=<id>` | POST | Re-attach + re-fold title (idempotent) |

## License

MIT

Install

dsh plugin --profile web add github:seth-hg/dsh-session-port

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source