← Back to home@plyflai

dsh-ux-plus

UX enhancements and quality-of-life plugins that make DeepSeek Harness easier to handle.

Stars
12
Language
JavaScript
Created
Oct 8, 2026
Updated
Oct 13, 2026
GitHub repo

Introduction

dsh-ux-plus

UX enhancements and quality-of-life plugins that make DeepSeek Harness easier to handle.

CI License: MIT

English · 简体中文

Currently targeting the Web UI of DeepSeek Harness 0.2.0-rc.1.

Features

FeatureWhy you'll like itPreview
Conversation typography[One-click comfort] Pick a comfortable font size and reading width for the chat area. Long answers read easier, wide screens get used properly — without zooming the whole interface.Chat area rendering
Session ID menu[Grab it in one click] Copy a session's ID straight from its row menu — for --session resumes, locating records, or debugging, with no manual text selection.Session row menu
Workspace recency order[Jump back + auto-tidy] Freshest workspaces and sessions float to the top; workspaces idle for over a day collapse on their own and show how long ago they were last updated.Workspace age labels
Ask question expanded[Fewer clicks on review] When a question finishes, the question and its answer stay expanded — checking a decision costs one less click.—
Inherit conversation[Switch models, keep going] Pick a model in the session menu: a brand-new session in the current workspace reads the old conversation's progress and carries on.Model picker popover

Feature details

Conversation typography

The chat area defaults to 14px. When answers get dense, bump the font size and narrow the reading width under Settings → General → Chat area — it only affects conversation content, never the whole interface.

Session menu: Session ID & Inherit conversation

Each session row's overflow menu gains two items (placed before the native Pin / Rename entries):

  • Session ID: copies the session's ID to the clipboard — for --session resumes, log digging and similar workflows.
  • Inherit conversation: see below.

Inherit conversation

Clicking "Inherit conversation" opens a lightweight model picker at the click position, listing every routable model (grouped by provider):

After you pick a model, the plugin:

  1. creates a brand-new session in the original session's workspace;
  2. switches the new session to the model you just picked;
  3. posts an inheritance prompt — the inherited session's ID plus "Summarize and inherit this conversation's progress, giving the most attention to the latest turns";
  4. jumps to the new session, where the model starts reading the old conversation, summarizing progress and carrying on.

Great for: a session that ran too long and deserves a pricier model to finish; a rate-limited provider where you want to continue elsewhere; or simply transplanting progress into another model's context. The original session is untouched, and the Session ID copy stays as-is.

Workspace recency order (incl. idle collapse)

Workspace groups and their session rows sort by most recent activity, so multiple parallel projects never bury the one you were just in; only the visual order changes — the host's sort settings and data stay intact.

The same feature also handles idle tidying: a workspace with no real activity for over 24 hours (blank and subagent sessions don't count — same signal as the ordering) collapses automatically once when the page opens, and every workspace row shows its age on the right — now / Nm / Nh / Nd / Nmo / Ny — styled exactly like the host's session-row timestamps and hidden on hover.

Auto-collapse fires at most once per workspace per page load: re-expand it manually and it stays expanded. Workspaces without sessions (or with only blank / subagent sessions) have no activity signal — never labeled, never collapsed. Labels follow the DSH language and light/dark theme.

Settings

Open Settings → UX Plus: all five features have independent switches, on by default, applied instantly.

UX Plus settings

Install

Requires Node.js ≥ 22, pnpm on PATH, and a DSH Web profile.

dsh plugin --profile <name> add github:plyflai/dsh-ux-plus

Restart the profile afterwards. Open Settings → UX Plus to toggle each feature; features are on by default and each switch applies instantly.

Conversation font size and width live under Settings → General → Chat area.

Compatibility

  • Web UI (browser) only — not the terminal TUI.
  • Every feature mounts on public host extension points (sidebar slots, settings forms, DOM tweaks); no host source is modified, and each feature can be switched off individually.
  • Host upgrades may shift internal DOM and slot contracts; file an issue if something breaks and it usually gets fixed in the next version.

Development

npm install
npm test        # node --test, incl. static assertions on the built artifact and injected deps
npm run build   # tsdown emits lib/client.js (classic script, committed to the repo)
  • Each feature is a private features/<name>/ module (host + client halves) registered in the feature lists of src/index.js and src/switches.js — not a standalone plugin.
  • The client bundles into a single classic script injected into window.__ModuleLoader__; external dependencies are strictly limited to the module seeds the host provides, enforced by the build script.
  • Every push to main appends one entry to the update log below and syncs CHANGELOG.md.

Update log

The three most recent entries; full history in CHANGELOG.md.

  • v0.1.7 · 2026-10-14 — README restructured: English-first with a Chinese counterpart, screenshots moved into the feature table, update log trimmed to the three latest entries.
  • v0.1.6 · 2026-10-14 — Idle workspace collapse and age labels are no longer a standalone feature: folded into Workspace recency order (same switch, same activity signal); settings back to five rows.
  • v0.1.5 · 2026-10-14 — Workspaces idle for 24 hours auto-collapse (at most once per page load); workspace rows show a host-styled "last updated" age label that follows the DSH language and theme.

License

MIT © 2026 plyflai