dsh-mobile-comfort
Touch-device comfort fixes for the DeepSeek Harness web client: ghost tooltip suppression + touch-action policy
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 25, 2026
- Updated
- Aug 25, 2026
Introduction
@oksure/dsh-client-ui-mobile-comfort
Touch-device comfort fixes for the DeepSeek Harness web client, packaged as an out-of-tree dsh bundle plugin.
What it fixes
On phone and tablet browsers the dsh web UI shows two touch-specific problems:
- Ghost tooltips. Tapping a sidebar control synthesizes
mouseenter/focus, which mounts a tooltip; when the tapped control then moves (sidebar collapse animation), no trailingmouseleaveever fires on touch browsers, so the bubble lingers indefinitely. Reproduced on WebKit: the tooltip stays visible 3+ seconds after every tap with no pointer anywhere near. This sheet hides[role="tooltip"]under(hover: none) and (pointer: coarse)— tooltips are a hover affordance, and coarse pointers get none. - Double-tap-zoom ambiguity. The app ships no
touch-actionrules, so on iOS Safari rapid second taps zoom the page instead of clicking (and first clicks carry the legacy delay). The sheet setstouch-action: manipulationon interactive elements, leaving pinch zoom untouched.
Desktop pointers are unaffected: both rules key off input modality (touch-action) or pointer class (hover/pointer media features).
Install
dsh plugin --profile web add file:/path/to/dsh-mobile-comfort
Then restart the profile (dsh web). Verify by loading the UI on a phone: tapping the sidebar toggle must not leave a tooltip behind.
Files
lib/client.js— browser half: injects one stylesheet for the lifetime of the plugin fiber (ctx.effect, HMR-safe disposer).lib/index.js— host half: no-op (browser-only plugin).cordis.patch.yml— bundle patch inserting theui-mobile-comfortrow.
Notes for upstream
The root causes live in @deepseek-ai/dsh-client-ui-primitives (Tooltip.tsx: onFocus shows immediately and only disabled handles the no-mouseleave case) and in the absence of any touch-action policy. A full diagnosis with engine-level event traces is in docs/mobile-touch-report.md; it is written up to be posted to the upstream Discussions as well.
License
MIT