dsh-whale-bridge:串联桌宠与鲸鱼挂件的桥接插件

DeepSeek Harness (DSH) 采用插件化架构,允许开发者组合功能。然而,现有的桌宠插件(如 pet-whale)和挂件插件(如 dsh-whale-widget)通常独立运行,缺乏直接的交互逻辑。dsh-whale-bridge 插件解决了这个问题,它不修改这两个插件的源文件,而是通过观察它们的 DOM 结构,在合适的时机模拟用户的点击行为,实现两个插件之间的联动。

核心能力

该插件主要提供以下功能:

  1. 串联插件:连接 pet-whale 与 dsh-whale-widget。
  2. 自动假装工作:桌宠靠近挂件时自动进入自带模式,远离时自动退出。
  3. 朝向互动:桌宠转向并歪头对准挂件,支持拖拽时的实时朝向计算。
  4. 气泡播报:挂件检测到桌宠时,使用默认气泡播报台词。
  5. 样式表守护:防止 DSH 客户端误删 pet-whale 的样式表。
  6. 运行时 API:提供 window.__dshWhaleBridge 接口用于调试和配置。

技术实现细节

合成事件与交互模拟

插件通过派发合成事件(contextmenu、pointerdown、click)来触发目标插件的逻辑,而非直接操作内部变量。这种方式避免了原生 DOM 操作可能带来的页面重绘闪烁,确保菜单和气泡的出现是平滑的。例如,假装工作模式通过派发右键菜单事件来触发;气泡播报则通过模拟点击鲸鱼贴图和气泡框来实现。

朝向与歪头控制

桌宠的朝向由 pet-whale 的动画控制,但该动画会覆盖内联的变换属性。插件通过向贴图内部的 <svg> 元素直接注入内联 style.transform 来覆盖动画效果。这种方式可以同时实现镜像翻转、旋转和倾斜,且与父级的拖拽逻辑解耦。倾斜角度根据桌宠与挂件的垂直距离动态计算,并带有死区设置以避免抖动。

样式表守护机制

DSH 的客户端模块系统会将文档中没有 data-plugin 属性的 <style> 标签认领到当前插件下,并在插件重载时删除。pet-whale 未添加此标记,可能导致样式丢失。插件通过补上 data-plugin="pet-whale" 属性、缓存样式文本以及从 window.__ModuleLoader__ 中“挖矿”获取源码的方式,确保样式表在插件重载后能自动恢复。

配置说明

配置位于 dsh-whale-bridge 命名空间,优先级为:设置页 > localStorage > 内置默认值。

字段 默认值 说明
enabled true 总开关,关闭后立即退出假装工作并停止播报。
faceWidget true 假装工作时是否让桌宠贴图面向挂件。
leanMaxDeg 26 最大歪头角度(度)。
leanRangePx 240 垂直偏差多少像素算“拉满”。
leanDeadPx 12 垂直偏差小于该值时不歪头。
nearGapPx 140 桌宠与挂件间距 ≤ 该值算“靠近”。
releaseGapPx 300 间距 > 该值算“远离”,两者之间为迟滞区。
scanGapPx 200 挂件视野与桌宠的间距 ≤ 该值算“看到”。
faceWhileDragging true 拖拽期间是否继续接管朝向。
speakIntervalMs 25000 两次播报的最小间隔(防闪烁)。

运行时 API

// 获取当前生效配置
window.__dshWhaleBridge.getConfig()

// 动态修改配置
window.__dshWhaleBridge.setConfig({ ... })

// 查看当前状态(朝向、拖拽状态、样式表状态等)
window.__dshWhaleBridge.status()

注意事项

  • 违反开发指引:插件通过 DOM 操作读取其他插件信息,违反了 DSH 官方插件开发指引中的“不要读取其他插件的 DOM”的要求。这是为了在对方未提供 API 的情况下实现交互而采取的妥协方案。
  • 版本依赖:严格依赖特定版本:pet-whale 1.2.6 和 dsh-whale-widget 0.3.16。若目标插件升级改类名或文案,需更新 lib/client.js 中的选择器常量。
  • 许可证:采用 MIT 许可证。

总结

dsh-whale-bridge 是一个为特定版本 pet-whale 和 dsh-whale-widget 定制的桥接工具。它解决了两个独立插件无法协同工作的问题,提供了自动化的“假装工作”和朝向互动功能,并包含了一套完善的样式表自我修复机制。

羽毛球分组比赛记分
小程序二维码

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

小夜