dsh-width-tiers
A client plugin for the DeepSeek Harness Web GUI that adds chat content width tiers with a floating picker button (bottom-right, above the composer): 标准 / 中等 / 宽 / 超宽 / 全宽 (standard / medium / wide / ultra / full).
Why
The DSH Web app hard-codes a readable content width on the conversation root
(--dsh-chat-content-width: 748px). That caps the message column — and every
table inside it — at 748px no matter how wide your window or panels are,
so wide tables always need horizontal scrolling.
This plugin overrides that variable per tier:
| Tier | Content width | Sidebar |
|---|---|---|
| standard 标准 | 748px (app default) | untouched |
| medium 中等 | 960px | untouched |
| wide 宽 | 1280px | untouched |
| ultra 超宽 | 1400px | untouched |
| full 全宽 | 100% (fills the window) | collapsed to the icon rail |
The choice persists in localStorage and is restored on the next visit; the
menu highlights the current tier, and the button's five level-bars show it at
a glance.
Install
dsh plugin --profile web add dsh-width-tiers
Then register it as a loader entry in
~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: dsh-width-tiers
name: dsh-width-tiers
Restart dsh web (the plugin loads at boot) and hard-refresh the page
(Ctrl+Shift+R). A round button with five bars appears at the bottom-right.
Installing from a local checkout:
dsh plugin --profile web add file:/path/to/dsh-width-tiers. Local-development gotcha:file:dependencies are copied into the profile'snode_modules(pnpm does not symlink them). After editing the plugin source, re-sync the copy (e.g.rsync -a --delete --exclude .git /path/to/dsh-width-tiers/ ~/.dsh/profiles/web/node_modules/dsh-width-tiers/) or re-install after removing it, then restartdsh weband hard-refresh.
Usage
- Click the round button → pick a tier; the current one is highlighted.
fullcollapses the sidebar to the icon rail through the app's own toggle — it is never force-hidden or locked: click a rail icon any time to expand it, and it stays expanded.- Non-standard tiers also close the details panel (re-closed automatically if
reopened);
standardleaves everything to the app.
Language
All picker copy (tier labels, button aria-label and title) follows the
app's Settings → Language (中文 / English), through the app's own locale
service. Switching the language re-renders the button and menu immediately;
when no explicit language is chosen the app falls back to the browser's
language, and Chinese is the last resort. No plugin-side setting needed.
How it works
- The element that defines
--dsh-chat-content-widthis located at runtime (the first element whose computed value is non-empty) and the tier is applied as an inline override — no hashed class names, so it survives bundle upgrades. - Panels are driven through the layout service (
ctx.layout), never by simulating clicks. - The sidebar is only ever collapsed by the
fulltier; returning tostandardrestores it only if this plugin collapsed it. - Dictionaries are registered with the app's locale service
(
ctx.locale.register/bind) and re-rendered through its change subscription, so the copy always matches the app's active language.
Limitations
- Content width cannot exceed the window: on a narrow window, wider tiers are
capped by the available column. Use
full(which also collapses the sidebar) for the maximum. - Requires the DSH Web client plugin system (dsh ≥ 0.1.0-rc.x with a
webprofile).
Uninstall
dsh plugin --profile web remove dsh-width-tiers
Remove the dsh-width-tiers row from ~/.dsh/profiles/web/cordis.patch.yml,
then restart dsh web.
License
MIT — see LICENSE. Copyright (c) 2026 aaronlei.
No comments yet. Be the first to write one.