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 定製的橋接工具。它解決了兩個獨立插件無法協同工作的問題,提供了自動化的“假裝工作”和朝向互動功能,並包含了一套完善的樣式表自我修復機制。