dsh-mobile-upgrade
Mobile UI fixes for the DeepSeek Harness web profile: composer upload, restart row, narrow drawer and tabs, and a full-width model menu.
- Stars
- 1
- Language
- JavaScript
- Created
- Sep 7, 2026
- Updated
- Sep 8, 2026
Introduction
dsh-mobile-upgrade
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español | Français | Deutsch | Русский
Mobile quality-of-life fixes for the DeepSeek Harness (dsh) web profile, shipped as a single plugin. Everything renders through the host's own slots and state signals — no layout takeover, no floating widgets, no DOM polling of chat content.
What you get
- Composer attachment upload — a paperclip button beside the composer's tool row. Images go through the editor's native paste-attachment path; any other file is uploaded to the server and its absolute path is pasted into the draft so the agent can read it with its file tools.
- Restart row — a "Restart service" entry in Settings → General. Confirms first, restarts the
dshprocess, and reloads the page automatically once the service answers again. - Input-modality switches — text/image/video checkboxes on every model row of the native provider editor, writing the model's
inputarray intosettings.yaml(with a backup next to the file). Catalog models without a user-customised route show the switches read-only. - Narrow-screen drawer — below 1024px the sidebar collapses to a small corner chip that keeps the host's own toggle; expanding it floats the full sidebar as a drawer over full-width content, and picking a session closes it again.
- Narrow settings tabs — below 700px the settings dialog's side navigation becomes a row of horizontally scrollable tabs.
- Full-width model menu — below 700px the composer's model menu re-anchors to exactly the phone width (12px margins) instead of landing past the screen edge, while the host keeps owning the vertical placement above the trigger.
- Details-overlay settle — the fullscreen tool-details overlay whose close control is inert in the current host is not rendered on narrow screens, so it cannot trap the chat.
- Per-feature toggles — the plugin installs a
mobile-ui-fixsection in Settings → Plugins with a switch per feature.
Install
dsh plugin --profile web add dsh-mobile-upgrade
Restart dsh web, then open the web profile on your phone: the paperclip sits in the composer, the restart row in Settings → General, and the feature toggles in Settings → Plugins → mobile-ui-fix.
Requires dsh 0.1.2-rc.1 or newer.
Configuration
The plugin's settings card takes:
| Key | Default | Meaning |
|---|---|---|
uploadDir | <dsh home>/mobile-uploads | Where non-image uploads are stored |
restartEnabled | true | Offer the restart row and its route |
Feature toggles
Every feature above can be switched in Settings → Plugins → mobile-ui-fix (effective on the next page load), or overridden per device with a localStorage key — mfx-attach, mfx-restart, mfx-settle, mfx-drawer, mfx-settings, mfx-modality, mfx-menus — where the value "0" turns a feature off.
Limitations
- The client hooks specific host UI elements by their hashed CSS class names (menu, drawer toggle, provider editor). A host build that renames them degrades individual features until this plugin catches up; everything else keeps working.
- Input-modality switches can only patch provider routes you have customised yourself; catalog-only routes are read-only by design, because fabricating a catalog section collapses the model directory.
Security notes
The plugin's HTTP routes (upload, restart, settings editing) perform no authentication of their own — they trust the dsh web surface they are loaded into. Put the deployment behind whatever gate protects the rest of the UI (reverse-proxy auth, loopback binding) before exposing it beyond localhost.
License
Distributed under the Synthetic Source License (SySL), Version 1.0.
NOTICE: This software includes code generated by artificial intelligence. See the LICENSE file for the Synthetic Source License terms, including model disclosure requirements.