DeepSeek Harness plugin

dsh-conv-export

dsh-conv-export(对话导出)— export the current DeepSeek Harness conversation as Markdown, PDF, or a long PNG image.

Jump to install

Source facts

Repository
beijingwahw/dsh-conv-export
Latest update
Aug 17, 2026
Category
Memory
GitHub stars
3
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/beijingwahw/dsh-conv-export
Plugin: dsh-conv-export
Author: beijingwahw

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

dsh-conv-export(对话导出)

![License: MIT](LICENSE) ![dsh-plugin](https://github.com/topics/dsh-plugin) ![DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)

English | 中文

Export the current DeepSeek Harness conversation as Markdown, PDF (print dialog), or a long PNG image — one click in the session header, zero core changes.

Problems it solves

  • Conversations evaporate: long sessions hold decisions, code, and error trails, but the harness has no built-in way to take them out. This plugin turns the rendered transcript into portable artifacts.
  • One format never fits: sharing with a teammate wants Markdown; archiving for compliance wants PDF; pasting into chat wants an image. All three ship in one menu.
  • Exports must match what you see: extraction runs at click time over the rendered DOM (including paged-in history), so the artifact is exactly the transcript on screen — code fences, tables, and emphasis preserved.

Features

  • Header export button (download glyph) registered into the conversation.session.header.actions slot — additive, safely uninstalled, and mirrors its open state via aria-pressed.
  • Dropdown menu with three sinks:

- Markdown (.md) — client-side download; assistant turns are serialized back from rendered HTML (headings, lists, fenced code with language, tables, blockquotes, links, inline emphasis). - PDF (download) — the conversation is rasterized, sliced into A4-proportioned pages, and downloaded as a self-contained multi-page PDF. No print window, no dialog: the app tab never freezes. - Long image (PNG) — offscreen render measured and rasterized through SVG foreignObject at 2x, images inlined as data URLs, downloaded as one tall PNG (height capped at 16000px).

  • Sensible file names from the session title (sanitized, capped).
  • Follows the harness --dsw-alias-* design tokens; menu labels switch zh/en by document language.
  • Menu hygiene: Escape or outside-click closes; a toast reports long-image raster failures.

Install

Requires Node.js ≥ 22 and pnpm (npm install -g pnpm) — dsh plugin add installs the bundle into the profile with pnpm.

One-liner

dsh plugin add beijingwahw/dsh-conv-export --profile web
dsh web   # restart the server to pick the plugin up

> Common follow-ups: upgrade dsh plugin upgrade dsh-conv-export --profile web; uninstall dsh plugin remove dsh-conv-export --profile web; local-path install dsh plugin add ./dsh-conv-export --profile web.

The package declares dsh.bundle.patch (mounts the host registration row) and dsh.client (serves the browser half at /plugins/<id>/client.js). lib/ is committed, so the GitHub tarball installs without a build step.

Usage

Open any conversation, click the download icon in the session header, pick a format. All three formats download directly — no dialogs, the app tab stays responsive.

How it works

  • The host half is an empty cordis registration shell; all behavior lives in the browser bundle (lib/client.js), mounted by the stock loader with zero core changes.
  • Extraction walks [data-conversation-scroll] in document order, pairing user rows ([class*="_userRow"] bubbles) with assistant markdown containers ([class*="_markdown_"]) — the stock renderer's stable class contracts.
  • The long-image path serializes a clean clone (explicit XHTML namespace, no offscreen offsets) into an SVG foreignObject, validates it with DOMParser, then rasterizes on a 2x canvas. External images are fetched and inlined first; unreachable ones are dropped rather than tainting the canvas.

Known limitations

  • The long-image and PDF paths rasterize through SVG foreignObject (all evergreen browsers paint it); exotic embedded content may flatten.
  • PDF pages are raster images (text is not selectable); for selectable text use the Markdown export.
  • Export scope is the active conversation column only — sidebar titles and settings pages are out of scope.

Troubleshooting

  • 'pnpm' is not recognized during dsh plugin add → install pnpm first: npm install -g pnpm.
  • ETIMEDOUT fetching the GitHub tarball → pnpm/Node ignores the Windows system proxy (browsers read it; terminals don't). Fix once, forever — persist your proxy into npm config (pnpm reads it too):

``powershell $s = Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' if ($s.ProxyEnable -and $s.ProxyServer) { npm config set proxy "http://$($s.ProxyServer)" npm config set https-proxy "http://$($s.ProxyServer)" } ``

Every later dsh plugin add / pnpm / npm call then goes through the proxy with no env vars. Undo with npm config delete proxy; npm config delete https-proxy when running without the proxy tool. Per-session alternative: $env:HTTPS_PROXY = "http://$($s.ProxyServer)". Or switch the proxy tool to TUN/global mode so all traffic is covered. Prefer a fixed port? Pick an obscure one such as 49151 — the last registered port before the dynamic range, so no common service, no ephemeral allocation, and no proxy tool default ever lands on it. Port-free fallback: download the tarball in your browser and install locally: dsh plugin --profile web add .\Downloads\main.tar.gz.

  • EADDRINUSE ... :3080 on dsh web → a previous dsh web is still bound to the port. Stop it (Ctrl+C in its terminal; on Windows: Get-NetTCPConnection -LocalPort 3080 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }), or start on another port with dsh web --port 3081.

License

MIT