dsh-matrix-rain
awa-123-cw
DeepSeek Harness WebUI 动效美化插件:聊天背景黑客帝国代码雨,雨字内容 = 当前会话 AI 思考链(流式实时),设置页调色盘 + 全套 DIY
PROJECT TOPICS
PROJECT README
A dsh web client plugin that makes the GUI usable on phones/tablets (viewport ≤ 768px by default). It only activates in the mobile media query — desktop is byte-for-byte untouched.
One block — installs the plugin and registers the loader row:
dsh plugin --profile web add github:davidgereb/dsh-plugin-better-mobile-ui
PATCH="${DSH_HOME:-$HOME/.dsh}/profiles/web/cordis.patch.yml"
grep -q "name: dsh-plugin-better-mobile-ui" "$PATCH" 2>/dev/null || cat >> "$PATCH" <<'EOF'
- insert:
- id: ui-better-mobile
name: dsh-plugin-better-mobile-ui
EOF
# 1. build
node scripts/build-client.js
# 2. make the package resolvable by the profile
dsh plugin --profile web link /path/to/dsh-plugin-better-mobile-ui
# 3. register the loader row in cordis.patch.yml (see above)
html/body are locked
against document scrolling, the bar re-anchors to
visualViewport.offsetTop, and the app frame tracks
visualViewport.height (via --bmu-vh) so the composer always rides
above the keyboard. The override is cleared when the keyboard closes
(falling back to 100dvh), and a slow re-sync interval plus
window/orientation listeners keep the frame from getting stuck raised if a
keyboard show/hide event is missed.Swipes deliberately do not trigger on buttons/links/inputs, on transient popups (menus/dialogs — the settings panel is a full-screen page, so it is exempt), or on horizontally scrollable areas (wide tables, the attachment rail). Swiping on the message box (composer) is allowed on purpose — it sits at thumb height.
dsh-plugin-better-mobile-ui/
├── package.json # dsh.client web plugin declaration
├── lib/
│ ├── index.js # host-side stub (empty apply; makes the loader entry real)
│ └── client.js # browser bundle (generated)
├── src/
│ └── client-source.js # single source of truth for the browser half
└── scripts/
└── build-client.js # generates lib/client.js
dsh.client in package.json; exports["./client"] is the ModuleLoader
bundle; the bundle's inject asks for the layout service so the
plugin can drive the app's sidebar state (ctx.layout.toggleSidebar()).<style> whose rules are all inside
@media (max-width: <breakpoint>px) (plus display:none chrome rules
outside it), tags the shell frame/columns/composer/settings-modal with
stable data-bmu-* handles (class names are hashed; the tags are not), and
runs the pointer-gesture controller + top-bar/dropdown wiring.!important; the columns are
pinned to their grid tracks so the center column keeps full width while the
sidebar drawer floats above it.100vw (no transform
ancestors, so the modal's absolute positioning just fills the viewport).node scripts/build-client.js
dsh plugin --profile web add github:davidgereb/dsh-plugin-better-mobile-ui
# the running GUI hot-swaps rebuilt bundles via the client-hmr SSE channel
# (no refresh needed for bundle-only changes once the plugin is loaded).
Before boot, window.__BETTER_MOBILE_UI_CONFIG__ = { breakpoint: 820 }
overrides the mobile breakpoint (default 768). Read once at apply time.
ui-better-mobile row from cordis.patch.yml.dsh plugin --profile web rm dsh-plugin-better-mobile-uiCompatibility. Tested against dsh
0.1.0-rc.6on Node.js v24.19.0 (dsh web profile). Older or newer dsh releases may change the internals this plugin hooks into — check the changelog before upgrading.
⚠️ AI-generated, provided as-is. This project was written with the assistance of an AI. It is provided AS IS without warranty of any kind, express or implied. The author cannot be held responsible for any damage, data loss, or misbehaviour that results from using it. Use at your own risk.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。