DeepSeek Harness (DSH) 采用插件化架构,允许开发者组合功能。然而,现有的桌宠插件(如 pet-whale)和挂件插件(如 dsh-whale-widget)通常独立运行,缺乏直接的交互逻辑。dsh-whale-bridge 插件解决了这个问题,它不修改这两个插件的源文件,而是通过观察它们的 DOM 结构,在合适的时机模拟用户的点击行为,实现两个插件之间的联动。
核心能力¶
该插件主要提供以下功能:
- 串联插件:连接
pet-whale与dsh-whale-widget。 - 自动假装工作:桌宠靠近挂件时自动进入自带模式,远离时自动退出。
- 朝向互动:桌宠转向并歪头对准挂件,支持拖拽时的实时朝向计算。
- 气泡播报:挂件检测到桌宠时,使用默认气泡播报台词。
- 样式表守护:防止 DSH 客户端误删
pet-whale的样式表。 - 运行时 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 定制的桥接工具。它解决了两个独立插件无法协同工作的问题,提供了自动化的“假装工作”和朝向互动功能,并包含了一套完善的样式表自我修复机制。