DeepSeek Harness Plugin

SpookySandwich/dsh-plugin-smooth-stream

Stars ★ 11 Downloads (30d) 2,365 Category UI Enhancements Added 2026-08-16 npm dsh-plugin-smooth-stream

Better streaming text animation for DeepSeek Harness.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-plugin-smooth-stream

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:SpookySandwich/dsh-plugin-smooth-stream

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

简体中文 | English

CI

Replaces token-by-token streaming twitch with paragraph-batched, fading reveals. Scroll follows smoothly while streaming, and reasoning blocks show a live one-line summary.

Left: native DSH rendering · Right: Smooth Stream — same question, started together:

comparison demo

Install

dsh plugin --profile web add dsh-plugin-smooth-stream

Takes effect in any open session. Settings live under Settings → Smooth Stream.

What it changes

  • Paragraph-batched reveal — body text no longer jitters in token by token; it accumulates and enters a paragraph at a time with a fade. Batch boundaries avoid unclosed code fences and tables, so half-rendered Markdown never appears.
  • Smooth scroll-follow — while streaming, the conversation glides toward the bottom covering a fraction of the remaining distance each frame: large appends catch up without teleporting. Scrolling up hands control back to you; returning to the bottom re-engages the follow.
  • Reasoning summary — while thinking runs, the collapsed row live-scrolls its latest line, with soft fades instead of hard clipping at both edges. When a turn completes, a closing underline retracts — finished, not merely stopped.
  • Markdown & math — body text renders through the host's own renderer: code highlighting, copy buttons, tables and KaTeX math look exactly like native output.

Settings

The Smooth Stream section in the settings panel; changes apply live and persist:

Setting Default Notes
Enable Smooth Stream On Off hands rendering back to the built-in view instantly — handy for comparing
Reveal animation Fade Fade / Rise / Dissolve / Wipe / Focus / Glow / Iris / Soak
Animation duration 520 ms Entrance duration (120–1200 ms)
Batch size 500 chars Text accumulated before a batch reveals; smaller feels more live, larger reads calmer
Smooth scroll-follow On The streaming-time scroll glide

Includes a live preview and one-click reset. The settings UI follows DSH's display language.

Reveal styles

Eight entrances, each tuned to its own rhythm; all recorded over the same reply for a direct comparison.

Fade Rise
fade rise
Dissolve Wipe
dissolve wipe
Focus Glow
focus glow
Iris Soak
iris soak

Compatibility

Version 1.6.0: Support official dsh 0.2.2-rc.1 (while retaining 0.2.0-rc.2, 0.2.1-rc.2, and 0.2.1-rc.5 compatibility). Bind chatFileMentions.forClosing in the replacement assistant node entry to preserve actionable closing-turn file mentions; restore native Quote and file context menu interactions by marking text interaction sources on settled assistant replies and expanded reasoning bodies, enabling Quote selection popovers to insert directly into the composer, and forwarding deferred file target resolution into the host context menu provider.

Version 1.5.0: Support official dsh 0.2.1-rc.5 (while retaining 0.2.0-rc.2 and 0.2.1-rc.2 compatibility). Adapt reasoning display preparation for official rc.5 reasoning signatures: strip leading signature envelopes and trailing LF/CRLF from streaming summaries and history views, hide partial envelopes during streaming, and omit signature-only rows from display while leaving raw host block data intact. Fix CSS specificity overrides for prefers-reduced-motion so animation suppression and instant scroll behavior reliably apply across all reveal styles, wipe overlays, and container scroll.

Version 1.4.0: Support official dsh 0.2.1-rc.2 (while retaining 0.2.0-rc.2 compatibility). Filter assistant blocks, interruption markers, and plain-text fallback by host groupPart (reasoning / response) seats so thinking and answer blocks do not duplicate across split seats; assistant images on 0.2.1-rc.2 fall back to plain <img> rendering without the native gallery/lightbox.

Version 1.3.0: Load on official dsh 0.2.0-rc.2. Rendering still registers on conversation.chat.node and settings.section.

Version 1.2.0: Declare the current UI renderer service provider and the verified DSH release range. Existing rendering behavior passes the current host checks.

The declared host range is >=0.2.0-rc.2 <0.3.0-0 || 0.2.1-rc.2 || 0.2.1-rc.5 || 0.2.2-rc.1; official dsh 0.2.0-rc.2, 0.2.1-rc.2, 0.2.1-rc.5, and 0.2.2-rc.1 satisfy it. Keep the previous plugin release on older DSH. Validation record.

Download the archive from the GitHub Release, then run dsh plugin --profile desktop add ./dsh-plugin-smooth-stream-1.6.0.tgz.

This release targets DSH 0.2.2-rc.1. Run npm ci, npm test, and npm run check:package to verify the build and package. Restart DSH after updating.

  • Uses the host client services, Markdown and image APIs; automated tests cover loading and component rendering.
  • This plugin owns the conversation view's assistant rendering (the assistant-step cell of conversation.chat.node) and is mutually exclusive with other plugins that take over the same rendering — with both installed, only one wins.
  • Respects prefers-reduced-motion: with reduced motion enabled, all animation and smooth scrolling switch off.
  • A rendering failure degrades to plain text for that message instead of breaking the conversation.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.