Mobile UI for the Web GUI on narrow screens: full-width responsive layout, overlay session drawer, 44px touch targets, safe-area support, and reading enhancements with zero desktop impact.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:TZHR-invest/dsh-plugins#path:/packages/dsh-mobile-ui
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
Mobile UI enhancements for the DeepSeek Harness Web GUI — turns dsh into a real mobile experience on phones (≤768px viewport):
- Responsive layout — hides the left icon rail, content goes full-width; session list opens as an overlay drawer
- Touch-optimized — 44px touch targets (iOS HIG), no double-tap zoom delay, no tap highlight, 16px inputs (prevents iOS focus auto-zoom)
- Reading enhancements — message spacing, bubble width, and helper text (tool rows / context-injection / status stats) scaled for small screens
- Right-top menu — the drawer (new session / sessions / settings) opens from a floating round button
- Safe-area aware —
env(safe-area-inset-*)support for notched displays - Zero desktop impact — every enhancement lives inside a
max-width: 768pxmedia query
Install
# from the plugin source directory
bash install.sh # install (idempotent)
bash install.sh --restart # install + restart dsh web (headless smoke test; aborts on plugin problems)
bash install.sh --uninstall # remove completely
Or via npm:
dsh plugin --profile web add dsh-mobile-ui
What the installer does:
- Source kept at
~/.dsh/plugins/dsh-mobile-ui/ - Runtime copy at
~/.dsh/profiles/node_modules/dsh-mobile-ui/ - Web profile bundle wiring (
cordis.patch.ymlinsert)
Development
bash scripts/build.sh # syntax + contract preflight (incl. classic-script check)
bash scripts/package.sh # build dist/dsh-mobile-ui-install.tar.gz
Fast local iteration: copy to ~/.dsh/profiles/node_modules/dsh-mobile-ui/ and refresh the page (client plugins have an HMR channel — client.js edits apply on refresh).
How it works
- CSS layer: injects
style[data-plugin-css=dsh-mobile-ui], all rules wrapped in@media (max-width:768px)— desktop loads none of it - JS layer:
matchMedia-driven; on narrow screens the main grid goes single-column, the sidebar is hidden and becomes a fixed overlay drawer with scrim - QA card (
ask_user_question, Mbwy4a component): JS detects the card and pins it as a floating panel (position:fixed; top:100px) — no:has()dependency (works in WeChat/X5-style engines); the footer button row wraps when narrow, so the submit button is always visible; conversation stays visible below
Maintenance notes (important)
- dsh frontend class names are build artifacts (hash prefixes). After a dsh upgrade, if selectors break:
- Verify
body.dsh-mobile-uiand#dsh-mobile-menu-btnexist in the console - Breakage usually hits layout classes (
[class*=frame]etc.) — adjust CSS/JS to the new prefix - Re-run
bash install.shafter fixing
- Verify
- Layout detection uses structural heuristics ("3-column grid + 56px first column"), not hard-coded class names, and buttons prefer
aria-label— this tolerates class-name drift - All DOM work is try/catch wrapped; any failure degrades silently (CSS layer still applies)
- Never move React-rendered DOM nodes with JS (
insertBefore/appendChildonpXSMma_rootetc.): React's fiber tree still records the old parent, so a re-render throwsremoveChildNotFoundError and the whole conversation view unmounts (blank page). Express every layout need in CSS (flex / order / :has) — the hero title pinning and the QA card are pure CSS for this reason.
Rollback
bash install.sh --uninstall + restart dsh removes everything (no residual styles/DOM).
License
MIT. Chinese documentation: README.zh.md
Part of dsh-plugins — a small monorepo of DSH plugins: dsh-lan-gateway, dsh-vision-tool, dsh-mobile-ui.
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 2622
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.
ccch1mneyyy/dsh-TUI★ 1231
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 1198
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
omdsh-dev/dsh-at-file★ 214
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 159
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 114
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.