dsh-matrix-rain
awa-123-cw
DeepSeek Harness WebUI 动效美化插件:聊天背景黑客帝国代码雨,雨字内容 = 当前会话 AI 思考链(流式实时),设置页调色盘 + 全套 DIY
PROJECT TOPICS
PROJECT README
窄屏(默认视口宽度 ≤ 860px,可配置)下把 DeepSeek Harness Web GUI 从桌面三栏布局重构为全屏聊天布局:侧栏与右侧面板变为抽屉、顶部悬浮操作条 + 全屏按钮、返回键退栈,桌面宽度下零影响。

viewport-fit=cover 安全区适配(刘海/底部横条)、16px 输入框字号防 iOS 聚焦缩放、双击缩放禁用、PWA meta(可「添加到主屏幕」全屏运行)。body.dsh-mobile 开关类下,离开窄屏即恢复桌面三栏布局与原始 viewport meta。两个半区,通过 DSH 设置系统连接:
flowchart LR
subgraph Host["Host 半区(Node.js)"]
H["src/index.ts<br/>settings 命名空间 mobile-ui<br/>enabled / breakpoint"]
end
subgraph Client["浏览器半区(lib/client.js,纯原生 DOM)"]
C1["MobileUiEngine<br/>matchMedia(breakpoint) 驱动<br/>body.dsh-mobile 开关类"]
C2["设置卡片<br/>settings.plugin.item 席位"]
C3["注入样式表 + 顶部操作条<br/>+ viewport/PWA meta"]
end
DS["DSH settings<br/>(设置页 / settings.yaml)"]
H --> DS --> C1
DS --> C2
C1 --> C3
mobile-ui(无路由、无副作用),设置经 DSH settings 系统读写。data-sidebar-collapsed 属性;aionui 两列 = 解析 frame 内联 grid 轨道(MutationObserver 镜像为 dsh-mobile-explorer-open / dsh-mobile-preview-open 类),不与内部框架耦合。breakpoint;否则退回装配配置的默认值。web profile 为例)。# 1) 克隆本仓库
git clone https://github.com/21hbguo/dsh-mobile-ui.git
cd dsh-mobile-ui
# 2) 构建(产出 lib/)
bash scripts/build.sh
内部 peer 依赖(
@deepseek-ai/*)已在peerDependenciesMeta中标为 optional,外部环境npm install不会因它们失败。
在 DSH 会话中使用注入工具:
dev_install_package <dsh-mobile-ui 目录绝对路径>
在 ~/.dsh/profiles/web/cordis.patch.yml 中追加一行(与仓库内 cordis.patch.yml 一致):
- insert:
- id: mobile-ui
name: '@dsh-external/dsh-mobile-ui'
重启 DSH 后由 bundles 装配生效。
scripts/build.sh 需要定位 DSH 源码 checkout:
DSH_CHECKOUT 环境变量:DSH_CHECKOUT=/path/to/deepseek-harness bash scripts/build.sh$HOME/dsh-harness、$HOME/dsh、$HOME/.dsh/dsh-harness、$HOME/project/other/deepseek-harness构建产物:lib/index.js(host 半区)+ lib/client.js(浏览器半区,tsdown 打包)。
两种方式等效(设置页优先):
~/.dsh/settings.yaml:mobile-ui:
enabled: true
breakpoint: 860
| 现象 | 原因 | 解决 |
|---|---|---|
| 窄屏下仍是桌面三栏 | enabled: false 或断点小于视口宽度 |
设置页/settings.yaml 检查 mobile-ui.enabled 与 breakpoint(范围 400–1280,步长 20) |
| 顶部操作条不出现 | 移动布局未激活,或 frame 尚未被观察器挂载 | 确认视口 ≤ 断点;刷新页面让 frame 重新挂载;看控制台是否有 [mobile-ui] mount failed |
| 面板按钮不显示 | 未检测到 aionui 资源列/预览列 | 该按钮只在 frame 内存在 .aionui-explorer-col / .aionui-preview-col 时显示;未安装 aionui 时属正常 |
| 点 ⛶ 提示「添加到主屏幕」 | iOS Safari 无网页 Fullscreen API | 浏览器菜单 →「添加到主屏幕」,以 standalone 模式全屏运行 |
| 返回键没反应/直接离开页面 | 只在「移动布局 +(全屏 或 standalone)」时拦截返回 | 先点 ⛶ 进全屏,或添加到主屏幕后运行;桌面浏览器 Esc 只关层 |
| Android 返回键退出全屏又自动回来 | 设计如此:关当前层后立即恢复全屏 | 想退出全屏请点 ⛶ 按钮 |
| 设置卡片提示「未暴露」 | 当前 DSH 版本未向设置页暴露该命名空间 | 直接编辑 ~/.dsh/settings.yaml 配置;或为 dsh-host-apiproxy 的 WEB_SETTINGS_NAMESPACES 白名单补充 mobile-ui 后重启 |
构建失败 cannot locate the dsh checkout |
自动探测未命中 | 设置 DSH_CHECKOUT 环境变量指向 DSH 源码目录后重试 |
命名空间 mobile-ui(设置页卡片「手机端 UI 适配」,已声明 web: true 暴露):
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
enabled |
boolean | true |
总开关;关闭即卸载全部适配(样式/操作条/观察器) |
breakpoint |
number | 860 |
视口宽度 ≤ 该值(px)时启用移动布局;范围 400–1280,步长 20 |
引擎内部将断点 clamp 到 320–1600px(防御异常配置)。
| 命令 | 作用 |
|---|---|
git clone https://github.com/21hbguo/dsh-mobile-ui.git |
获取源码 |
bash scripts/build.sh |
构建 host + client 产物到 lib/(需 DSH checkout) |
npm run typecheck |
TypeScript 类型检查(tsc --noEmit) |
dev_install_package <目录> |
DSH 内热装配插件(免重启) |
gh release download / Releases 页 tgz |
获取已构建的 npm 包产物 |
~/.dsh/settings.yaml)。Q:桌面端会受影响吗?
不会。所有样式规则挂在 body.dsh-mobile 类下,由 matchMedia(max-width: 断点) 驱动;离开窄屏立即恢复桌面三栏布局与原始 viewport meta,且适配层被禁用时不注入任何样式。
Q:支持哪些浏览器?
现代浏览器(需要 matchMedia、MutationObserver、Fullscreen API 按能力降级)。iOS Safari 无网页 Fullscreen API,使用「添加到主屏幕」以 standalone 全屏运行,返回键退栈同样生效。
Q:和 aionui 右侧面板冲突吗? 不冲突。aionui 的资源列/预览列在移动端镜像为右侧抽屉,开合状态实时同步;激活移动布局的瞬间还会自动收起已展开的列(聊天优先),8 秒兜底保证视觉上不弹抽屉。
Q:返回键会不会误退全屏? 不会。全屏(或 standalone)下系统返回键只按「aionui 对话框 → 模态对话框 → 侧栏抽屉 → 右侧面板」逐层关闭;层全关完后再按也只会吞掉并提示用 ⛶ 退出。Android 返回键先退全屏时,插件会立即恢复全屏(粗指针设备)。
*Q:peerDependencies 里的 `@deepseek-ai/` 是什么?** 它们是 DSH 内部的运行时/类型包(npm 上不公开),宿主环境自带;已全部标记 optional,外部安装不会报错。
BSD-3-Clause © 2026 21hbguo
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。