zljr/dsh-share
dsh-share
dsh-share is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx @deepseek-ai/dsh plugin --profile web add @zljr/dsh-shareRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/zljr-dsh-share)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from zljr/dsh-share, cleaned of badges and images.
dsh-share
Share a DeepSeek Harness session over your LAN as a read-only, token-guarded snapshot.
dsh-share is a DeepSeek Harness plugin that adds a Share button to the session header. One click freezes the current conversation into a self-contained, read-only HTML page and prints a LAN URL β e.g. http://192.168.1.20:3081/s/<token> β that any device on the same network can open in a browser.
The main harness keeps listening on 127.0.0.1 (and so never exposes the agent's command execution). Sharing is served by a separate, read-only HTTP server that only ever returns a pre-rendered snapshot page for a valid token.
Features
- π One-click share β a Share button in the session header (beside the official "Session log" action).
- π Read-only & isolated β the share server binds
0.0.0.0:<port>on its own; it exposes nothing butGET /s/<token>. No RPC, no writes, no session reads on view. - π§ Frozen snapshot β the transcript and session stats are captured at share time; later edits or compactions never change an already-shared page.
- π Revocable + optional expiry β 128-bit random tokens; stop sharing anytime, or pick a 1h / 24h / 7d expiry.
- π Markdown transcript β user & assistant messages are Markdown-rendered (safe: raw HTML is escaped,
javascript:URLs are blocked). - πͺ Readable β long messages auto-fold behind a preview; consecutive tool calls collapse into one "π tool calls" group.
- π Session stats header β turns, steps, wall-clock duration, tool-call time, cache hits, input/output tokens, and current context occupancy with a per-category composition bar.
- π Dark & light theme β the share page follows
prefers-color-scheme. - πΎ Persists across restarts β shares are stored in
~/.dsh/dsh-share.json. - π‘ Smart LAN address β filters out virtual adapters (WSL / Hyper-V / Docker / VPN / β¦) and probes the default route so the phone-reachable IP is listed first.
How it works
dsh-share is a dual-face dsh package, like other harness plugins:
| Half | Runs in | Role |
|---|---|---|
Host (src/host) | Node (harness process) | Folds the session event log into a transcript + stats, stores the frozen snapshot, and serves it over a separate node:http server at /s/<token>. Also exposes a /dsh-share RPC (create / revoke / list). |
Client (src/client) | Browser | Registers the Share button in conversation.session.header.utilities and renders the dialog (expiry picker, copy / revoke / open). |
Token estimation for the context composition reuses the harness's own fixed-density heuristic (~4 chars β 1 token), matching dsh-context.
Install
From npm
dsh plugin --profile web add @zljr/dsh-share
dsh --profile web
That's it β the published package ships the built lib/, so end users never need a build step.
From source (local development)
# 1. Build the package artifacts (lib/)
pnpm install
pnpm build
# 2. Install into the web profile (local path)
dsh plugin --profile web add /absolute/path/to/dsh-share
# 3. Restart the web UI
dsh --profile web
Open any session and click Share in the header. The share server starts lazily on first use.
Configuration
Environment variables (or a config object supplied via cordis.patch.yml):
β¦

