前言¶
DeepSeek Harness (DSH) 的 Web 界面主要针对桌面端设计,在手机上使用时存在控件过小、缺乏手势交互、布局错位等问题。dsh-plugin-mobile-ui 是一个官方 slot 客户端插件,旨在将 DSH 的 Web 界面改造成适合手机操作的界面。它通过注入样式和替换部分组件,在不修改 DSH 源码的前提下,实现抽屉导航、键盘适配、横屏支持等功能。
插件概况¶
- 名称: dsh-plugin-mobile-ui
- 维护者: loeissu
- 许可: MIT
- 定位: 官方 slot 客户端插件,不 fork dsh-tether,不修改 DSH 源码。
核心功能¶
插件主要解决移动端的交互体验问题:
- 抽屉导航: 提供类似原生 App 的侧滑导航面板。
- 启动页: 优化冷启动和热启动的展示。
- 键盘适配: 使用 visualViewport 处理软键盘遮挡。
- 横屏支持: 适配横屏场景的布局。
- 工具卡: 替换部分官方工具卡(read/grep/edit/write),支持折叠和失败自动展开。
- 复制助手: 针对 Android WebView 中 async 剪贴板被拒的问题,提供兜底方案,确保复制功能可用。
- 自动重连: 程序回到前台时自动尝试重连。
安装与启用¶
安装需要从 GitHub Releases 下载发布包。
- 下载
dsh-plugin-mobile-ui-<版本>.tgz到固定目录(不要放在%TEMP%)。 - 执行安装命令:
dsh plugin --profile web add <那个 tgz 的完整路径>
安装完成后,必须重启 dsh web 服务,插件才会生效。如果后续需要重新加载插件内容(如修改了源码),直接刷新手机页面即可,无需重启服务。
典型用法¶
安装并重启服务后,在手机上访问 DSH Web 客户端:
- 打开导航: 点击顶栏最左的文字 「导航」。
- 管理会话: 在抽屉内,列表按分组显示:刚刚 / 今天 / 昨天 / 更早。
- 新建会话: 点击抽屉底部的 + 号。
- 查看设置: 点击抽屉底部的 设置,支持左右滑动切换分区。
- 刷新连接: 如果连接看起来卡住,点击抽屉底部的 刷新连接。
- 复制内容: 在消息下方点击 复制。插件接管了 WebView 的剪贴板逻辑,解决了 Android 上静默失败的问题。
开关与配置¶
插件的核心逻辑通过 src/client/config.ts 中的 FEATURES 开关控制。主要配置项包括:
splash: 启动页开关。drawerOverlay: 抽屉导航覆盖层开关。settings: 设置页移动端分区及弹层排版。toolCards: 工具卡列表(默认替换 read/grep/edit/write)。keyboardFit: 键盘遮挡适配。resumeReconnect: 回到前台自动重连。clipboardFallback: 剪贴板兜底逻辑。
适用场景与注意事项¶
- 适用场景: 主要用于在手机浏览器或 WebView 中使用 DSH 进行开发调试、查看日志或简单交互。
- 已知取舍: 工具卡替换了 4 张官方卡(
read/grep/edit/write),因此会失去官方的「在轨迹中查看」和点开文件的功能。 - 验证方式: 插件未包含 CI 和单元测试,主要依赖
npm run verify进行离线契约校验和 CDP 探针测试。 - 文件依赖: 安装包必须保留
.tgz文件,否则在后续执行dsh plugin操作时会报错找不到文件。
结语¶
该插件通过简单的安装和配置,显著改善了 DSH 在移动端的可用性。对于需要在移动设备上频繁使用 DSH 的开发者来说,它是解决交互痛点的有效方案。