![dsh-web-mobile — 手机上也能好好用 DSH](assets/banner.png)

<p align="center">
  <strong>DSH Web UI 移动端适配：窄屏好用，宽屏适用</strong>
</p>

<p align="center">
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green?style=flat-square" alt="MIT" /></a>
  <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/topic-dsh--plugin-amber?style=flat-square" alt="dsh-plugin" /></a>
  <a href="https://awesome-dsh-plugin.com/p/mexiaosqwq/dsh-web-mobile/"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="awesome · DSH plugin" /></a>
</p>

> 📦 **已内置于 [DSHA](https://github.com/qiannianhuanxiang/DSHA)** —— DeepSeek Harness 安卓启动器把本插件作为内置移动端适配（打包时的源码快照），装 APK 开箱即用；本仓库之后的更新要等 DSHA 重新拉取源码并发布 App。感谢作者 [@qiannianhuanxiang](https://github.com/qiannianhuanxiang) 的集成与推广 🙏

---

**dsh-web-mobile** 是 DeepSeek Harness Web UI 的移动端适配插件——让 DSH 在手机竖屏下也能好好用：

- **弹窗变浮层**：设置、文件树、预览改成底部 sheet，触屏好点
- **状态栏避让**：刘海安全区、深/浅主题、双击缩放都处理
- **输入区不打架**：权限胶囊、模型名、切换菜单在窄屏下不重叠
- **长会话不卡流量**：宿主返回的大 JSON（会话历史等）自动 gzip/brotli 压缩，手机端加载明显提速
- **平板也管**：768–1023px 触屏设备限宽居中，≥1024px 触屏大平板的会话行 ⋯ 菜单仍带「删除会话」；桌面端（鼠标指针）任何宽度都是完全 no-op，窄窗口/系统缩放也不会误启移动 UI

---

## 效果

| 会话主页 | 目录抽屉 | 设置界面 |
| --- | --- | --- |
| ![移动端会话主页](assets/hero.png) | ![目录抽屉](assets/drawer.png) | ![移动端设置界面](assets/settings.png) |

## 更新内容

### v3.2.1 (兼容 0.2.1 及以后)

- 手机端一批真机反馈的排版与交互修正：头部与对话区留白重排、输入卡片功能键对齐、插件面板与图片查看更顺手
- 提问卡的问题正文不再消失，也能长按选中、复制
- 首次进入点「继续」不再卡几秒；大响应返回时也不再拖住同进程的其它请求
- 兼容：桌面/平板档不受影响（改动全在移动媒体查询内）；宿主代际仍为 0.2.1 及以后

**新功能**

- 原图灯箱支持双指缩放：只缩放图片本身，页面不再跟着一起放大

**修复**

- 手机端会话头部更紧凑：标题与页签行之间的多余空白收回，发送/停止键同步收小
- 对话区留白重排：运行状态、回复与输入卡片之间的空隙更均匀，输入卡片里的功能键与文字重新对齐
- 输入卡片的功能图标统一到同一档灰度，功能键尺寸放大到与发送/停止键一致
- 插件面板进到子页后按返回只退一层，不再一次把整个面板关掉
- 插件页页首的标题与工具按钮回到同一行，不再被挤成多行堆叠
- 看大图时遮罩右侧一条没盖住、也点不动；遮罩现在铺满整屏
- 退出插件面板时不再弹出输入法
- 头部「智能体团队」与「子智能体」两颗芯片开关面板时不再闪一块灰底
- 会话数据诊断面板的折叠三角更容易点中，快速滑动时顶部吸顶的行不再撕裂闪烁
- 首次进入「预览版说明」点「继续」不再停在「正在保存…」几秒；几 MB 的响应返回时，同进程的其它请求不再被堵住

### v3.2.0 (兼容 0.2.1 及以后)

- 手机端一批真机报障修复：浏览器里点输入框不再把整页顶出屏幕、iOS 侧区能正常起手滚动、抽屉会话列表多出 40px、开着壁纸不再透明
- 宿主 0.2.1 适配：统计条与上下文环、后台任务文案重新对齐；第三方「模型能力」面板退场后，为它写的换行适配一并退休
- 工程侧：仓库文档改分层披露（根指令瘦身，验收、协作与发版文案手册独立成篇），带日期的审计与 fork 对账记录转为本地保留
- 兼容：0.1.7-rc.1 起仍照常支持，0.1.6-alpha.2 建议维持 3.0.0、0.1.5 之前仍建议 2.4.1

**修复**

- 手机浏览器（Chrome / Edge for Android）点开输入框时整页被顶上去、顶栏一起出屏——内置 WebView 与桌面不受影响（#226, by @FanetheDivine）
- iOS 上侧边抽屉与文件面板从静止起手时纵向滚动失效，只有屏幕正中一条窄缝能滚（#222, PR #223）
- 抽屉底部的「导出会话日志」胶囊独占一行、占掉约 1.2 个会话的高度——入口改到抽屉品牌行右端，会话列表多出 40px（#225, PR #227）
- 开着壁纸插件时抽屉整列与深色顶栏变透明、背后内容透出（#228, PR #229）
- 宿主 0.2.1 上统计条与上下文环退回原生小药丸、百分比数字外露（#216）
- 宿主 0.2.1 上后台任务文案挤回标题行、被右上角文件夹图标压住（#217）
- dsh-our-free-model 的设置页在手机上滚动掉帧，它的公告提示也不再被抽屉盖住（#214、#221）
- 插件不再自行补写模型的思考档位：改由官方设置页管理，手动关掉的档位不会再被写回，已写入的配置照旧生效（#218）

### v3.1.0 (兼容 0.1.7-rc.1 及以后)

- 顶栏座位重做、性能第一批与补丁秩序上线
- 这也是第一次大规模重构：TS / JS 源文件拆得更工整，随之而来的是更顺手的后续维护

**新功能**

- 自定义 API 里声明不支持自定义思考强度的模型自动归入「跟随模型默认」，不再因强行写入档位而报错
- 兼容补丁登记门禁：每个补丁必须自报用途与对应测试，登记表与源码不一致时构建直接失败

**修复**

- 状态栏 TPS 读数有时停在旧宽度——纯文本更新唤不醒排版任务
- 侧边栏面板退出途中出错时，屏幕上会留下一张永不自清的全屏快照
- 快速重进面板时，上一次退场的清理会误删这一次刚挂上的快照
- 市场「已安装」列表的行样式在列表根节点换代的宿主上可能整列表静默漏写
- TPS 缺席时状态行的多余全表扫描（改为可短路）
- 顶栏拥挤的几处：后台任务圆点移入标题行、子智能体 chip 钉在标签行右端、长标题改省略号且可展开、预设 chip 不再贴住邻居
- 顶栏、TPS 读数、模型菜单、回形针浮层各自反复读尺寸的问题——合并到每帧一次，滚动与流式输出更顺
- 市场「已安装」列表每帧重复定位整个列表容器——现在缓存容器、只在容器内扫描
- 本批手机档改动收进 ≤767px 作用域，平板档几何与本批之前零差异

### v3.0.6 (兼容 0.2.0-rc.1 / rc.2)

- 移动端交互、布局与性能整批修复：会话行单击切换、文件面板工具栏、0.2.0 会话头部、推理等级面板宽度、流式状态条去重、深色顶栏衔接、上下文环落位。0.1.x 全线照常支持，0.1.6-alpha.2 建议维持 3.0.0、0.1.5 之前仍建议 2.4.1。

**新功能**

- 回形针「上传附件」接上 App 的文件选择通道（桥优先，无桥回落系统选择器）
- 会话行的归档 / 置顶快捷按钮在手机档收进 ⋯ 菜单（#154）

**修复**

- 与 dsh-pocket 同装时不再因 locale 命名空间重名把整站启动打挂（#165）
- 会话行单击即可切换，并修掉随之而来的重复选中
- 文件面板在手机档固定只留「收起右侧边栏」，分栏与退出全屏不再误触
- 0.2.0 的会话头部标题不再压到左上角开关上
- 子代理运行时的停止键与发送键贴回右缘（#191）
- 抽屉底色跟随宿主主题，暗色下不再发白（#192）
- 底部安全区补齐：769–1023px 触屏设备的会话内容不再压进系统手势条（#193）
- 流式输出期间状态条的重复读写收敛（#194）
- 设置面板遮罩淡入恢复正常（此前一条非法选择器让整条规则被静默丢弃）
- 竖屏下 mattskills 状态栏胶囊的尾巴（技能 ⊞ / 收起 ⌄）不再被裁掉
- 手机上的推理等级面板收窄到内容宽度，不再占掉半屏
- 正在输出时输入内容，上下文环不再压住停止键
- 深色下会话头部与页面底色一致，顶部不再出现一条突兀的灰带（#176）
- 文档预览与插件页一批：屏外代码行不再参与布局、插件条目整卡可点、Models 页模型行不再被超长 chip 挤成竖条

### v3.0.5 (兼容 0.2.0-rc.1 / rc.2)

- 自定义 API 的模型开箱可选思考等级，并收掉一批手机端交互问题：0.1.x 全线照常支持，0.1.6-alpha.2 建议维持 3.0.0、0.1.5 之前仍建议 2.4.1。

**新功能**

- 自定义 API 的模型开箱可选思考等级：手写的供应商模型不必再逐条补档位配置，官方「推理等级」控件直接可用（默认给出 off / low / medium / high / max，只补用户自己层里没写档位的模型、不覆盖已写档位）
- 手机上的文件分享入口：文件树行尾与预览头部各一个按钮，可一键把文件送出去；当前环境不支持系统分享时（如内置 WebView），按钮如实显示为「下载「x」」并走系统保存流程，不拿「分享」二字骗人

**修复**

- 删除会话不再误报失败：宿主先把会话落库、随后把响应掐断时，改以会话列表为准判定结果
- 模型与推理等级菜单在手机上不再自动弹出软键盘（点搜索框仍然照常输入）
- 回形针两选项浮层不再「弹一下」：定位稳定后再显形
- 第三方模型档位面板在手机上不再移出屏幕（#152 by @BuvkB）
- iOS 输入框不再沉到系统辅助条下面（#149, PR #150）
- 长按选区拖拽手柄不再把视口带到会话顶部，并落地一批手机端修复（PR #155）

## 安装

> [DSHA](https://github.com/qiannianhuanxiang/DSHA) 用户无需单独安装：DSHA 内置本插件，但内置的是它打包时的源码快照——本仓库之后的新版本要等上游重新拉取并发布 App 更新才会带上，想立刻用上本版仍按下文单独安装。

从 npm 一行装（仓库自带构建产物，无需构建配置），装完重启 `dsh web`：

```sh
dsh plugin --profile web add dsh-web-mobile
```

GitHub 直装：`dsh plugin --profile web add github:mexiaosqwq/dsh-web-mobile`

本地开发：

```sh
dsh plugin --profile web add link:/path/to/dsh-web-mobile
```

## 构建

```sh
pnpm install
pnpm build
```

`lib/` 与源码同步入库，改动源码后重新构建再提交。

## 贡献与工程

欢迎大家的 issue 和 PR，我会尽可能地进行解决!

工程约定见 [AGENTS.md](AGENTS.md)；回归探针 `scripts/probes/` 22 个锚点可单跑，兼作宿主升级绊线。

## License

[MIT](LICENSE)
