dsh-force-motion:在 reduced-motion 下仍保留 DSH Web 界面动效

前言

DeepSeek Harness(dsh)的 Web 界面里有多处 CSS 与 JS 动效,例如「深度求索中…」状态行的渐变闪烁、命令行扫光、轮次标记等。当操作系统或浏览器上报 prefers-reduced-motion: reduce 时,dsh 会在样式表与部分渲染逻辑里尊重该无障碍偏好,动效会被关闭或走静态分支,界面看起来像「光晕停住不动」。

若你本机因其它原因开启了系统级「减少动态效果」,但仍希望在 dsh 工作站里看到完整 UI 动画,可以单独用插件覆盖这一偏好,而不必改 dsh 源码或 node_modules。下面介绍社区插件 dsh-force-motion(维护者 maxesisnclaw,分类:趣味换装)。

这是什么

dsh-force-motion 是一个面向 dsh Web profile 的 Cordis 补丁插件:在服务端注入的 index 页面里运行一小段脚本,让 prefers-reduced-motion 不再生效,从而恢复 dsh 自带的界面动画。它不修改 node_modules,也不依赖 dsh 内部 hashed 类名或 keyframe 名称,README 说明其设计意图是在 dsh 升级后仍能继续工作。

dsh 为何会关掉动效

README 归纳了两处机制:

  1. CSS:多个带动画的选择器带有 @media (prefers-reduced-motion: reduce) 守卫,在 reduce 模式下将 animation 设为 none 等;涉及状态 shimmer、命令行 sweep、turn mark、推理行 sweep 与 retry shimmer 等约七条规则。
  2. JS:部分 renderer 通过 matchMedia("(prefers-reduced-motion: reduce)").matches 走静态分支。

在上述环境下,即使 dsh 本身定义了动画,用户侧也会看到静态界面。

核心功能

插件注入脚本后主要做两件事(均来自官方 README):

  • 包装 matchMedia:使 (prefers-reduced-motion: reduce) 查询不再返回匹配。
  • 清理同源样式表中的 reduced-motion 规则:从每个同源 stylesheet 中删除 prefers-reduced-motion 相关规则;当页面新增 <style> / <link> 节点时会重新执行,让基础动画声明重新生效。

结果是 dsh Web UI 中的动画会照常播放。

安装与启用

插件以当前 dsh 进程权限运行;安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证。

官方命令安装

针对 Web profile,使用资料中的安装命令:

dsh plugin --profile web add github:maxesisnclaw/dsh-force-motion

手动安装

将插件目录复制到 <dsh-install>/plugins/,并在 $DSH_HOME/cordis.patch.yml 中追加:

- insert:
    - id: force-motion
      name: /absolute/path/to/dsh-force-motion/index.js

完成后重启 dsh。

验证与自测

README 给出的检查方式:

  1. 模型思考时,状态行应出现 shimmer,而不是静止渐变。
  2. 浏览器控制台:matchMedia('(prefers-reduced-motion: reduce)').matches 应为 false;插件会输出日志 dsh-force-motion: reduced-motion suppression neutralised。
  3. 在插件目录执行单元测试:npm test(对应 node --test test/*.test.mjs)。

适用场景与注意

适合:工作站由本人使用,且明确希望保留 dsh 界面动效;系统或浏览器已开启 reduced-motion,但原因与 dsh 使用无关。

权衡:插件刻意覆盖无障碍相关的 reduced-motion 偏好。若需恢复 dsh 默认行为,可卸载插件,或在应用启动前设置 window.__dshForceMotion = false。

DeepSeek Harness 生态强调「一切皆插件」;插件目录页托管于社区站点 SkillHub,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

结尾

dsh-force-motion 通过前端层面的 matchMedia 包装与同源样式表规则清理,在不动 dsh 核心包的前提下,让 Web UI 动画在 reduced-motion 环境下继续播放。需要时可从目录页了解分类与简介,并从 GitHub 获取安装说明与源码。

  • 目录页:https://www.skillhub.cn/plugins/maxesisnclaw/dsh-force-motion
  • GitHub:https://github.com/maxesisnclaw/dsh-force-motion
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜