Bundle
dsh-mobile-layout
Mobile experience suite for the DeepSeek Harness web UI — responsive reading layout, composable glass skinning, workspace-scoped file browsing/upload, and session-state healing. Zero package dependencies.
- Source
- crwsr124
- stars
- 1 stars
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-mobile-layout
DeepSeek Harness Web UI 移动端体验套件:让 dsh web 在手机上好看、好用。
**零依赖**,装上即用;关闭皮肤即完全还原 stock 外观。
## 功能一览
### 1. 移动端阅读布局(<1024px 自动生效)

- **侧栏抽屉化**:无常驻窄栏,会话区占满全宽;顶栏左上角鲸鱼按钮开合会话抽屉
- **字体密度**:正文 / 标题 / 代码适度收缩,一屏容纳更多内容
- **表格**:自然宽度 + 横向触摸滚动;长词、链接自动换行不再溢出
- **输入框**:上滑阅读、切换已有会话或刷新恢复已有会话时默认收起(不会唤起手机输入法),点击消息文字即可显示并聚焦;空白新会话保持可见,桌面端不受影响
- **设置面板**:导航横排适配手机宽度;模型编辑等长表单在内容区独立触摸滚动,底部操作不会被截断
### 2. 换肤(侧边栏「主题与背景」按钮)

- **模式**:无 / 玻璃 / 半透明,表面不透明度滑杆 0–100%
- **极光背景**:四套预设——蓝紫 / 暖阳 / 青绿(浅色底)+ 单色·墨(深色底),
彩色光斑缓慢漂移 + 电影颗粒质感
- **自定义背景**:图片 URL 或手机相册选图
- **文字对比度自动适配**:按背景明暗自动切换应用的深/浅文字主题,文字始终清晰
- **透明化**:用户气泡、代码块、滚动条滑杆随表面同源半透明,文字保持不透明
### 3. 文件浏览器(「文件」页签,与对话/轨迹并列)

- 文件根目录自动跟随当前会话所属工作区;同一工作区切换会话会保留当前目录、列表缓存和滚动位置(不刷新),只有切换到不同工作区才取消旧请求并从新根加载
- 在工作区内浏览:面包屑导航、手动刷新、md / 代码 / 图片 / PDF 预览、「新标签页打开」和「下载到设备」
- 下载走独立流式端点,不受 2 MB / 40 MB 预览大小上限影响
- 客户端只传 sessionId;Host 从服务端 Workspace 注册表解析可信根目录,跨工作区路径与符号链接逃逸均拒绝
- 对话页保持原生滚动;文件页签使用独立列表滚动,切换页签不会锁死或复用对话滚动位置
### 4. 上传文件(侧边栏「上传文件」按钮)
- 侧边栏底部动作区新增「上传文件」按钮(回形针图标,与主题按钮同款式),
点击选文件(支持多选),逐个上传,状态卡实时显示进度与结果
- **上传到当前工作区专用目录**:Host 根据发起时的 sessionId 解析工作区,自动创建并写入 `<workspace>/upload`,不污染工作区根目录
- **绝不覆盖**:文件名强制单段(无路径穿越),同名自动追加 ` (1)` 序号,
单个文件默认上限 500 MB(可配 `uploadMaxBytes`),失败自动清理半截文件
- 上传成功后文件页签自动刷新;成功显示落盘完整路径,8 秒自动收起
### 5. 稳定性增强
- 历史加载 abort 错误自动重试愈合(全端生效)
- 移动端从阅读态新建空白会话时强制恢复输入区,避免 body 级收起状态跨会话残留而只剩背景
## 安装
```bash
dsh plugin --profile <name> add github:crwsr124/dsh-mobile-layout
# 或本地源码: dsh plugin --profile <name> add file:<本目录绝对路径>
```
首次安装后**重启一次 dsh web 进程**(host 半的文件路由是冷路径;改 host 半
代码后同样需要重启)。
文件浏览和上传无需配置目录:根目录自动取当前会话所属的已注册工作区。只有上传大小上限是可选配置:
```yaml
- id: dsh-mobile-layout
config:
uploadMaxBytes: 524288000 # 可选;缺省 500 MB
```
> Host 根据 sessionId 从服务端 Workspace 注册表解析 canonical path;浏览器传入的绝对路径只能位于该根内。上传固定进入 `<workspace>/upload`。
> **反代部署注意**:若经 nginx 等网关访问,上传大文件需在网关侧放开
> `client_max_body_size`(nginx 默认仅 1 MB,超限返回 HTML 413 页)。
## 作用范围
- **仅移动端**(媒体查询门控):阅读布局、输入框滚动收起、Session log 隐藏、
设置面板移动端布局
- **跨端功能**(有意为之):换肤、文件页签、上传文件、abort 自愈
- **皮肤关闭 / 卸载插件 = 完全还原 stock 外观**
## 已知限制
- 会话轨迹(details)列在手机上无法打开(app shell 框架限制,CSS 无法干预)
- 上传路由无内置认证——公网部署务必保持 nginx basic auth 等外部防护(与
文件浏览路由同一威胁模型)
- 老内核浏览器:无毛玻璃模糊(透明与背景仍生效,面板内有支持诊断)
## 开发与设计细节
实现原理、兼容性处理、选择器约定与版本历史见 [docs/DESIGN.md](docs/DESIGN.md)。
## License
MIT
Install
dsh plugin --profile web add github:crwsr124/dsh-mobile-layout
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-mobile-layout from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.