dsh-mobile-fix
Verified@myflv/dsh-mobile-fix Β· v0.1.1 Β· MIT Β· Web UI
Mobile UI polish for the dsh web GUI: composer/model-chip layout, session header, and the model popover on narrow viewports.
Install
dsh plugin add @myflv/dsh-mobile-fix Confirm the layer applied with dsh --profile default --dump-config β see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
@myflv/dsh-mobile-fix
A pure-CSS overlay plugin for the dsh web GUI (deepseek-harness) that polishes narrow/mobile viewports:
- Width axis β narrow screens redefine the layout variables so the message column, composer card, docks and stats line shrink together.
- Model trigger β the composer model chip caps its width by the tool-row container (180/140/128px tiers); on phones the effort label hides and row gaps tighten so the model name gets more room.
- Session header β breadcrumbs shrink and the tablist scrolls horizontally on narrow screens.
- Model popover β split by conversation phase. In a conversation
(
[data-phase='active'], composer docked at the bottom) the model menu becomes a fixed bottom sheet sitting right above the composer; in a new conversation ([data-phase='hero'], composer vertically centered) the menu stays anchored to the model chip and scrolls internally instead of clipping.
All rules live inside @media (max-width: β¦) / @container queries, so desktop is untouched.
Install
dsh plugin --profile web add @myflv/dsh-mobile-fix
dsh web
The bundle patch inserts a browser-plugin row (dsh.client, platform web); the browser half is served at /plugins/@myflv/dsh-mobile-fix/client.js.
Build
npm install
npm run build # emits lib/index.js (node half) + lib/client.js (browser half)
How it works
The browser half injects one <style> tag at apply time and removes it on unload. Selectors target stable hooks only β data-* attributes, ARIA roles, semantic tags β never hashed CSS Module classes, and avoid :has() for older mobile WebViews. The bundle follows the client-modules contract: CJS with a top-level window.__ModuleLoader__.load({ id, factory }) handoff where id equals the package name.