前言¶
DeepSeek Harness(DSH)的 Web 界面里,下拉菜单和设置类弹层多数是瞬间出现、瞬间消失,没有开合过渡。若你已经在用 DSH 的插件体系扩展 Web 端能力,又不想改宿主源码或引入额外运行时,可以在浏览器半区挂一个纯客户端插件,只接管这两类表面的入场与退场。下面介绍社区目录中的 dsh-webui-transition(npm 包名 @tak1208/dsh-webui-transition),由维护者 T-MKT 发布,SkillHub 分类为「趣味换装」。
这是什么¶
dsh-webui-transition 是一个 dsh bundle:根包在 Loader 中同时装入主插件与同 bundle 内的设置插件 @tak1208/dsh-webui-transition-settings。主插件在浏览器半区以 classic script(client.js)运行,通过 DOM 观察与 Web Animations API(WAAPI)为宿主原本无动效的下拉菜单与对话框面板补上缩放与淡入淡出;不修改 DSH 源码,文档写明无第三方运行时依赖。
仓库基于 dsh 0.2.2-rc.1 开发,package.json 中 engines.dsh 为 >=0.2.2-alpha.2 <0.3.0。当前根包版本 1.0.0,许可证 MIT。GitHub 仓库 T-MKT/dsh-webui-transition 目录页见 SkillHub。
核心功能¶
覆盖的表面¶
插件只处理两类语义表面,入场与退场都会做:
| 表面 | 选择方式 | 行为概要 |
|---|---|---|
| 各级下拉菜单 | role="menu" |
默认约 150ms:从触发源最近边/点作 transform-origin,约 0.98 缩放 + 淡入;退场复用入场 origin |
| 设置面板 | role="dialog" 且带 data-dsh-transition-origin="center"(由设置插件打标) |
约 220ms:以面板正中心缩放 + 淡入,不依赖触发源 |
其它 role="dialog" 面板 |
如 Agent Team 看板、上下文用量面板 | 遮罩约 180ms 淡入;面板约 220ms,仍可按触发源做原点感知缩放 |
自 v0.3.0 起菜单等弹层支持原点感知:能推断触发元素时,缩放原点靠近触发侧;推断不到时按用户设置回退为「仅淡入」(默认)或「点击原点」。v1.0.0 起设置面板固定正中心缩放,由设置插件在面板上写入 data-dsh-transition-origin="center",主插件只识别该标记。
触发源与回退¶
触发源按文档给出的优先级推断:DOM 邻接、aria-controls、展开态按钮(含 24px 邻接与 1400px 距离上限)、近期指针(2.5s 内)、键盘焦点等。其它插件也可在表面元素上设置 data-dsh-transition-origin="center",主插件对该表面一律用中心原点,跳过推断。
时长与缓动优先读取宿主 CSS 变量(如 --ds-transition-duration、--ds-ease-in-out),缺省值见仓库 README 表格。宿主关闭节点时会立刻卸载,退场通过 inert 幽灵副本播放动画,不阻塞交互。
设置项¶
设置 UI 由 Settings → 过渡动画(英文 Transitions)进入,对应独立设置插件。目前一项:
- 无锚点回退方式:
仅淡入/点击原点,默认仅淡入。
存储键为 localStorage 的 dsh.webui-transition.settings.v1,JSON 形如 { "fallback": "fade" | "pointer" }。未安装设置插件或未保存过时,主插件按默认 fade 运行。
退出开关与无障碍¶
在任意元素或其祖先上设置 data-dsh-transition="off",该子树内的表面不再被插件接管:
<div data-dsh-transition="off">
<div role="menu">…</div>
</div>
系统开启 prefers-reduced-motion: reduce 时不播放动画、不生成幽灵节点;运行中开启会立即停止当前动画。
安装与启用¶
推荐通过 npm 包安装(一条命令会装好根包与设置包依赖):
dsh plugin --profile web add @tak1208/dsh-webui-transition
也可让 DSH 的 plugin_manager 执行:
{ "action": "install_bundle", "target": "@tak1208/dsh-webui-transition" }
自 dsh 0.2.1-alpha.2 起,已安装的包不能直接覆盖安装(会返回 already-installed);需先 remove_bundle 再 install_bundle。安装成功后可在 Settings → 内置插件清单 中查看。卸载:
dsh plugin --profile web remove @tak1208/dsh-webui-transition
典型用法与扩展点¶
日常使用安装后即可:打开各级菜单、设置面板或其它 role="dialog" 弹层,即可看到文档描述的过渡。若要局部禁用,在容器上加 data-dsh-transition="off"。若要在自己的弹层上强制中心缩放,在表面元素上设置 data-dsh-transition-origin="center"(与设置面板的标记契约一致)。
需要改回退策略时,在设置页切换「无锚点回退方式」并保存;同标签页通过 Cordis 事件即时生效,跨标签页依赖 storage 事件。
适用场景与注意¶
适合:已在 web profile 使用 DSH 0.2.2-alpha.2 及以上(且低于 0.3.0 引擎约束)、希望菜单与对话框开合更顺滑、且接受纯客户端、不改宿主卸载时序的实现方式。
务必注意:
- 权限与信任:插件以当前 DSH Web 进程在浏览器中执行,安装前请阅读 源码仓库 与 MIT 许可证。
- 范围边界:不做消息流式渲染、滚动平滑、设置内 tab 切换、菜单翻页等;不处理 iframe / Shadow DOM 内表面;dsh 升级到 0.3.0 及以上后需自行核对语义选择器与客户端契约。
- 宿主 DOM 依赖:覆盖面依赖
role="menu"、role="dialog"等语义结构,宿主改版可能影响效果。 - 生态说明:SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系;DSH 理念是「一切皆插件」,本包是第三方客户端扩展之一。
结尾¶
dsh-webui-transition 用 bundle 形式把主动画插件与可选设置页打包在一起,专注补上 DSH Web GUI 里菜单与对话框的开合过渡,并支持原点感知、减少动态效果与用户回退配置。进一步了解可看 SkillHub 目录页 与 GitHub README。