Live-tune the DSH Web conversation UI from Settings: message font size, Claude Desktop-style markdown tables, dialog width, an optional timeline rail, and a GitBar with branch management, per-file diff, and commit & push.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-ui-tweaks
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:wlj521/dsh-ui-tweaks
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. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A DeepSeek Harness (DSH) web plugin that live-tunes the conversation UI from the Settings panel.
Preview
![]() |
![]() |
| Conversation timeline: right-side rail — hover to preview messages, click to jump, scroll-highlighting, auto-dodges a right sidebar | Table style: the Claude Desktop look (light-gray rounded cards) |
![]() |
![]() |
| Dialog width: message column, composer and stats line widen together | Settings panel: font size / table style / dialog width / timeline |
Features
- Message font size (px) — type any value (10–32); applies to message text, headings, tables and code.
- Table style — choose
Defaultor the Claude Desktop look (light-gray rounded cell cards with small gaps, no borders; cells share the inline-code background; header not bold). - Dialog width (px) — type any value (600–1600); the message column, the composer input and the stats line below it widen together.
- Conversation timeline (toggleable, off by default) — a thin navigation rail at the right of the message area: one indicator line per user message, hover to expand a preview panel, scroll-highlighting of the current position, click to smooth-scroll to that message (loading older history on demand). Works in light and dark mode, and always hugs the message area's right edge — even with a right sidebar installed and expanded (e.g. dsh-better-sidebar), the rail dodges it instead of overlapping. Auto-hidden while a session has fewer than two user messages.
All changes apply live — no reload needed. The same values can be hand-edited in the settings document:
ui-tweaks:
fontSize: 16
tableStyle: claude
dialogWidth: 880
timelineEnabled: true # defaults to false (off); set true to enable
Settings entry: Settings → UI Tweaks.
Install
# from npm (recommended, prebuilt)
npx -y @deepseek-ai/dsh plugin --profile web add dsh-ui-tweaks
# from GitHub (source; runs the self-contained prepare build)
npx -y @deepseek-ai/dsh plugin --profile web add github:wlj521/dsh-ui-tweaks
For GitHub installs, pnpm may ask you to approve the package's build script —
add the exact key it prints to the profile's pnpm-workspace.yaml:
allowBuilds:
dsh-ui-tweaks: true
…then run add again. Restart DSH web once after installing (bundle plugins
are scanned at process start).
If pnpm reports symlink/hoist errors, set
nodeLinker: hoistedin the profile'spnpm-workspace.yaml.
Development
pnpm install
pnpm build # tsc (server) + tsc (client) + bundle lib/client.js
pnpm typecheck
Load against a running DSH with an overlay, or install as a bundle:
npx -y @deepseek-ai/dsh web --patch ./cordis.patch.yml # dev overlay
npx -y @deepseek-ai/dsh plugin --profile web add . # bundle install from this checkout
How it works
- Server (
src/index.ts) registers theui-tweakssettings namespace and mounts a same-origin route (/_dsh/ui-tweaks/settings) — the Web settings RPC only exposes a fixed allowlist of namespaces in rc.6, so a custom route is how a plugin owns a configuration page.src/timeline.tsalso registers thedshChatTimelinesession projection that durably enumerates user messages. - Browser (
src/client/index.tsx) reads/writes that route, renders the Settings section, and applies the values live via a runtime<style>element that overrides stable DSH anchors ([data-chat-flow],[data-composer-card],bodymarkdown font tokens, markdown tables inside[data-slot="conversation.chat.node"]). - Timeline (
src/client/timeline.tsx) mounts in theconversation.input.dockslot and portals tobody. Data sources, fastest first: session projection → loaded chat nodes → backgroundloadOlder. Its position is anchored by measuring the right edge and vertical center of[data-conversation-scroll](the message area), so it follows both the DSH column grid and any right-sidebar layout push (#rootmargin-right); colors ride DSH theme tokens (--dsw-alias-*) for correct light/dark rendering.
License
MIT
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 3649
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 1731
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1646
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 288
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 194
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 161
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.



