Skills Plugins MCP Prompt Model 导航 博客 资讯 我的中心
界面增强 #deepseek-harness#deepseek-harness-plugin#deepseek-harness-plugins#dsh#dsh-plugin#dsh-plugins

dsh-plugin-better-mobile-ui

Better UI for DeepSeek Harness's web view on mobile.

davidgereb @davidgereb ⬇ 1 ★ 0 main

安装

dsh plugin --profile web add github:davidgereb/dsh-plugin-better-mobile-ui
下载安装清单

需要可复现安装时,可在仓库后追加 #commit 固定提交。

Better UI for DeepSeek Harness's web view on mobile.

该插件未提供要点说明,请参考仓库 README。

deepseek-harnessdeepseek-harness-plugindeepseek-harness-pluginsdshdsh-plugindsh-plugins
  1. 安装并启动 DeepSeek Harness:npx @deepseek-ai/dsh web
  2. 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
  3. 用 dsh plugins list 确认已安装,必要时重启 Harness 生效

插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。

代码仓库github.com/davidgereb/dsh-plugin-better-mobile-ui
许可证MIT
主要语言main
下载量1
GitHub 星标0
最近推送2026-08-15
收录日期2026-09-19
分类界面增强

事实信息来自公开插件目录快照(2026-10-03),介绍文案由本站再加工。

以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。

# dsh-plugin-better-mobile-ui

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.

## Install

### From GitHub

One block — installs the plugin and registers the loader row:

```sh
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
```

### From a local checkout

```sh
# 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)
```

## What it fixes

1. **Sidebar → swipe drawer** — the sidebar grid track is forced to 0 on
   mobile, so the collapsed 56px rail no longer eats screen space. The sidebar
   becomes an off-canvas drawer:
   * swipe **right** anywhere on the conversation (mid-screen works — Android
     owns the screen edges) to slide it in;
   * swipe **left** anywhere to go back (see the navigation stack below);
   * the ☰ button in the top bar toggles it;
   * the app's own layout store is kept in the "expanded" state on mobile, so
     the drawer always shows the full sidebar (sessions, workspaces), never
     the icon rail.
2. **Settings as drawer screens** (Android-settings style navigation stack).
   The app's settings modal renders inside the sidebar column, so on mobile it
   becomes two screens:
   * tapping **Settings** in the drawer shows the section list (General,
     Models, Plugins, …) filling the drawer, with a ← back arrow;
   * selecting a section **expands the drawer to the full viewport** as the
     settings page;
   * the **X** dismisses back to the settings list; the **left-swipe** backs
     are fully **drag-follow** like the sidebar — the drawer follows the
     finger and snaps on release: settings page → settings list → sidebar →
     hidden.
3. **Session header dropdown** — the header (session title + Chat/Trajectory
   mode tabs) is hidden on mobile and becomes a **dropdown menu** under the
   **⋯** button in the top bar (tabs stack vertically). Picking a tab or
   crumb dismisses it; **action/utility buttons inside it (e.g. the
   cost-lens cheapass toggle) stay usable** with the menu open. Tapping
   outside or pressing Escape dismisses it too.
4. **Top action bar** — a 48px fixed bar shows the **session title** next to
   a ☰ sidebar button, with the **⋯** menu button on the right. The background
   is fully opaque; a gradient fades its bottom edge into the content. It
   stays pinned while the mobile keyboard is open: `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.
5. **Composer toolbar** — the model selector used to get crushed to zero width
   while its label overlapped the "+" commands button. The toolbar now wraps,
   the trailing group shrinks instead of overflowing, the token-context meter
   is dropped on mobile, and the model name ellipsizes instead of colliding
   with icons. **Plain Enter inserts a newline** (mobile only); submission
   happens via the blue send button (modifier chords like Ctrl/Cmd+Enter keep
   the app's accelerated behavior). **While the agent runs**, the primary
   button becomes Stop, so an extra **send button** appears next to it —
   tapping it queues the message via the app's own steering path without
   stopping the run.
6. **Sidebar navigation** — opening a session (or New Session) closes the
   drawer; expanding/collapsing a workspace or its action buttons keep it
   open.

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.

## Layout

```
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
```

## How it works

* `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()`).
* The browser half injects one `

数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。