DSH Hub

zljr/dsh-share

dsh-share

UIWeb UI2 GitHub starsΒ· updated 2026-08-16

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-share

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-share DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/zljr-dsh-share.svg)](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 but GET /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:

HalfRuns inRole
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)BrowserRegisters 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):

…

Related plugins