前言¶
DeepSeek Harness (DSH) 采用插件化架构,允许用户通过配置扩展 Web GUI 的功能。原生的 Web 界面在移动端体验上往往存在交互细节不足的问题,例如会话切换时输入法意外弹出、长对话滚动不便、侧边栏操作逻辑与手势冲突等。
dsh-qol 是一款针对 DSH Web GUI 的体验优化插件,专注于解决这些移动端交互痛点。它不改变页面布局或字体大小,仅通过行为修正和交互增强来提升可用性。插件由 john-walks-slow 维护,采用 MIT 许可证,所有逻辑均运行在客户端。
核心功能¶
插件功能集中在设置页的 QoL 分区,按功能分为导航切换、输入键盘、触摸反馈和显示设置四组。
导航与会话管理¶
- 活跃会话 Tab Bar
- 在页面顶部横向展示已打开的会话标签。
- 操作支持:支持右键菜单(关闭、固定/取消固定、关闭其他);支持鼠标拖动排序;支持鼠标滚轮横向滚动标签栏;支持切换显示模式(标准按打开顺序,最近活跃按时间排序)。
- 防误触:新会话仅在发出首条消息后出现;固定页签不会被窗口截断淘汰。
- 侧栏交互
- 滑动开合:支持右滑展开、左滑收起,具备跟手拖拽、边界回弹和惯性归位效果。
- 布局优化:展开时为浮层覆盖,不挤压主内容宽度;支持主题感知的半透明遮罩关闭。
- 自动收起:窄屏(≤768px)下切换会话后自动收起侧栏。
- 长对话处理
- 消息跳转:提供“上一条/下一条用户消息”定位按钮,便于在长对话中逐条查看。
- 懒加载:滚动到对话顶部时自动触发宿主的“加载更早”功能,保持视口锚定。
输入与键盘适配¶
- 输入法/键盘适配
- 修正 viewport meta 属性,使用
100dvh高度链与visualViewportCSS 变量,解决 iOS 和 Android 的安全区域与键盘遮挡问题。
- 修正 viewport meta 属性,使用
- 发送控制
- 默认情况下,输入框中按回车键为换行,需使用
Ctrl/⌘+Enter发送消息。
- 默认情况下,输入框中按回车键为换行,需使用
- 空间优化
- 隐藏输入框内的权限选择下拉框,节省横向空间。
触摸与反馈¶
- 触摸反馈
- 启用
touch-action: manipulation消除 300ms 点击延迟。 - 提供无延迟的按压视觉反馈,并尊重系统的
prefers-reduced-motion设置。
- 启用
- 拖拽修复
- 禁用触摸长按拖拽,修复 Android 设备上长按侧边栏会话行触发系统拖拽导致页面卡死的问题(桌面端鼠标拖拽排序不受影响)。
显示与设置页¶
- 设置页重写
- 在移动端(≤768px)将设置对话框改为全屏堆叠布局,支持标签页横向滚动。
- 滚动控制
- 阻止主内容区产生横向滚动;代码块与超长表格在容器内横向滚动,防止页面整体晃动。
- 动画优化
- 将状态指示的 SVG 动画替换为 CSS
transform,提升渲染性能。
- 将状态指示的 SVG 动画替换为 CSS
安装与启用¶
插件安装后,dsh 会自动挂载配置。刷新 Web 页面后,设置页会出现 QoL 分区。
安装命令:
dsh plugin --profile web add dsh-qol
配置持久化:
所有开关状态保存在浏览器的 localStorage 中,键名为 dsh.qol.v1;分组折叠状态保存在 dsh.qol.groups。清空对应键值即可重置为默认配置。
使用说明¶
- 打开 dsh Web GUI。
- 进入 设置 页面,找到 QoL 分区。
- 根据需求点击开关。插件采用“属性总闸”机制,切换开关时会在
html标签上添加或移除对应data-qol-<功能id>属性,实现即时生效,无需刷新页面。
注意事项¶
- 运行环境:纯客户端插件,零 npm 运行时依赖,不读取会话内容,不进行网络请求或文件系统写入。
- 权限:无特殊权限要求,仅修改 CSS、DOM 事件与 viewport meta。
- 跨平台:桌面端零影响,移动端专属规则通过媒体查询锁定。
- 兼容性:可与
dsh-web-mobile-fix插件共存,两者提供不同层面的优化。