使用dsh-plugin-pet-rs給DeepSeek Harness做一個Rust原生桌寵

前言

DeepSeek Harness(簡稱 dsh)是 DeepSeek AI 開源的智能體運行時,核心理念是「一切皆插件」。它目前仍處在開發者預覽階段,默認 Web UI 監聽 http://127.0.0.1:3080。社區裏還有獨立站點在收錄第三方插件,例如 DeepSeek Harness 插件庫;這類目錄與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。

dsh 把會話、審批、提問都放在 Web 界面裏。人如果切到編輯器或終端,就很難立刻知道智能體是在幹活、在等確認,還是已經做完。桌面寵物正是爲這個縫隙準備的:不改 harness 本身,只在桌面上放一個常駐指示器。dsh-plugin-pet-rs 做的就是這件事——一隻像素風鯨魚,跟着會話狀態換表情。

這是什麼

dsh-plugin-pet-rs 是社區目錄裏歸在「趣味」分類的項目,由 HuanLinOTO 在 GitHub 維護。倉庫創建於 2026-08-10,目錄頁收錄日期爲 2026-08-11,最近一次推送在 2026-08-15。工作區 Cargo.toml 裏的版本號是 0.0.1

它不是嵌在 dsh Web 頁面右下角的前端組件,而是一個用 Rust 寫的原生桌面程序:透明置頂窗、系統托盤、只讀地連本機 dsh。README 寫明,這是對 Electron 版 ../dsh-pet/ 的純 Rust 重寫,目標體積小於 10MB(原約 100MB)。二進制名是 dsh-pet

需要先說清楚安裝形態。社區目錄給出的命令是:

dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs

倉庫根目錄沒有 package.json,也沒有常見的 dsh 插件清單。dshfind 明確寫了:這不是可安裝的插件包,dsh plugin add 會直接失敗。實際用法以 GitHub README 爲準:自己用 Cargo 構建,再單獨運行桌寵進程。

核心功能

倉庫 README 和源碼可以對上的能力如下。

1、五態鯨魚。對外宣傳的優先級是 offline > attention > working > done > idle。源碼裏還有啓動態 starting。狀態機在 dsh-pet-core 裏聚合:連不上 dsh 時是離線;有待審批或待回答提問時是 attention;有會話正在跑是 working;剛結束、兩分鐘內待查看是 done;其餘是 idle。氣泡文案也是按這個優先級生成的,例如「連不上 DSH」「需要你確認」「正在幹活…」「任務完成啦」「休息中」。

2、雙通道即時推送加輪詢兜底。README 把即時通道稱爲「雙 SSE」,對應端點是 events.muxevents.hostevents.mux 負責審批、提問、隊列;events.host 負責會話 running 翻轉。另外每 2 秒調用一次 session.list 做基線,斷線後會補一輪輪詢。實現上有一處和文案不完全一致:sse.rs 註明類型名 SseConnector 是歷史遺留,當前 dsh 事件端點要求 WebSocket 升級,HTTP GET 會返回 426。連接是單向的(只收服務端幀),斷開後約 3 秒重連。

3、像素畫鯨魚和狀態氣泡。默認素材是 80×58 網格的 HD 像素鯨魚,帶噴水水滴、zzz / spark 疊層。氣泡是多會話聚合列表,可滾動,有 popIn 動畫。渲染走 tiny-skia 合成,再交給 softbuffer 呈現。

4、透明置頂窗和系統托盤。窗口可拖拽、可調大小,位置會寫入配置。托盤菜單可以打開 dsh GUI、隱藏或顯示氣泡、開關提示音、測試音效、放大縮小重置、退出。

5、內嵌設置面板。雙擊鯨魚打開,可開關聲音、編輯 dsh 地址。地址必須以 http://https:// 開頭;提交後 RPC 和兩條事件連接會按新地址重建,不必重啓進程。

6、可覆蓋素材。可執行文件同目錄下建 custom/,用 sprites.json 換像素圖,用 attention.m4a / done.m4a(也支持 mp3 / wav / ogg)換提示音。

7、對 dsh 零侵入。它只讀 HTTP / 事件流,不往 harness 裏注入前端,也不改會話。這和掛在 Web GUI 裏的桌寵插件不是同一條路。

安裝與構建

目錄頁上的安裝命令以頁面原文爲準:

dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs

如需可復現安裝,目錄頁建議固定 commit 哈希。當前 master 最新提交是 81605ef83947c28799369a4456605c4a17513430(2026-08-15):

dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs#81605ef83947c28799369a4456605c4a17513430

社區插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前應檢查源代碼倉庫和許可證。就這個倉庫而言,上面兩條命令大概率裝不成標準插件;README 也寫了:GitHub Actions 因賬單額度無法運行,沒有預構建產物,請自行構建。

本機需要 Rust 工具鏈。克隆後:

git clone https://github.com/HuanLinOTO/dsh-plugin-pet-rs.git
cd dsh-plugin-pet-rs

# 開發構建
cargo build

# 發佈構建
cargo build --release

# 測試
cargo test --all

倉庫是 Cargo workspace,三個 crate 分工明確:

crates/
├── dsh-pet-core/   # 狀態機、RPC、事件連接、配置、素材包
├── dsh-pet-ui/     # 窗口、渲染器、輸入、emoji 圖集
└── dsh-pet-app/    # 主入口、異步任務、音頻、托盤、平臺適配

典型用法

先讓 dsh 跑起來。官方倉庫給出的一種方式是:

npx @deepseek-ai/dsh web

Web UI 默認在 http://127.0.0.1:3080,和桌寵的默認地址一致。然後在插件倉庫裏啓動:

# 默認連接 http://127.0.0.1:3080
cargo run --release

# 指定 dsh 地址(優先於配置文件)
DSH_PET_URL=http://localhost:3080 cargo run --release

地址優先級是:環境變量 DSH_PET_URL > 配置文件 > 默認值 http://127.0.0.1:3080。運行時在設置面板改過的地址會寫進配置,下次啓動沿用。

配置文件路徑按平臺不同:

平臺 路徑
Windows %APPDATA%\dsh\pet\config.json
macOS ~/Library/Application Support/dsh/pet/config.json
Linux ~/.config/dsh/pet/config.json

字段均可省略。一份完整示例如下:

{
  "scale": 0.67,
  "bubble_visible": true,
  "sound_on": true,
  "endpoint": "http://127.0.0.1:3080",
  "window_x": 2268,
  "window_y": 1084
}

和鯨魚的交互來自 README,可以直接復現:

操作 效果
單擊鯨魚 延遲 250ms 後在瀏覽器打開 dsh GUI
雙擊鯨魚 打開內嵌設置面板(單擊會被取消)
按住拖拽 移動窗口,位置自動保存
滾輪(氣泡上) 滾動會話列表

單擊延遲是爲了區分雙擊。首次啓動窗口會落到屏幕右下角。縮放範圍是 50%–110%,默認 67%。

自定義素材放在可執行文件同目錄:

custom/
├── sprites.json
├── attention.m4a
└── done.m4a

sprites.json 的格式參考倉庫裏的 assets/sprites/whale-sprites-hd.json

另外還有一個截圖自檢入口,會按 5 個狀態 × 3 個時間點輸出 PNG,方便做像素迴歸:

cargo run --release -- --shot .shots

適用場景與注意事項

適合已經在本機跑 dsh Web UI、希望離開瀏覽器也能看見會話狀態的人。它跟着審批、提問、running、完成這些事件換姿態,並可以彈氣泡、響提示音。不適合指望 dsh plugin add 一鍵裝進當前 profile 的場景——這個倉庫目前是獨立桌面程序。

平臺支持以 README 表格爲準:

平臺 狀態 備註
Windows 完整 DWM per-pixel alpha 透明窗
macOS 完整 NSWindow 透明,並隱藏 Dock
Linux (X11) 完整 透明窗、置頂、skip-taskbar
Linux (Wayland) 降級 不置頂、不跨全屏;建議用 XWayland

GNOME 默認沒有系統托盤,需要安裝 AppIndicator / KStatusNotifierItem 擴展。托盤創建失敗時,右鍵鯨魚本體仍可打開菜單。

字體方面,程序會探測系統 CJK 字體:Windows 用微軟雅黑 / 黑體,macOS 用蘋方 / 黑體,Linux 用 Noto Sans CJK SC / 文泉驛微米黑。README 寫明 v1 沒有內嵌 Noto Sans CJK 子集;系統裏沒有 CJK 字體時,啓動會 panic,並給出安裝指引。

許可證不要只看 README 末尾的「MIT」。倉庫根目錄 LICENSE 文件是 GNU Affero General Public License v3.0,工作區 Cargo.tomllicense 也是 AGPL-3.0;GitHub 和社區目錄目前都顯示 NOASSERTION。安裝或再分發前,以 LICENSE 文件爲準,自行覈對。

安全邊界可以分兩層看。對標準 dsh 插件,目錄頁的警告仍然成立:插件以當前 dsh 進程權限運行,安裝時可能執行代碼。對本倉庫,進程是單獨的原生程序,源碼註釋寫明對 dsh 只讀;但它仍會連本機 dsh 的 HTTP / WebSocket 接口,也會讀本機配置目錄。用之前應自己看源碼,不要把社區目錄當成官方背書。

工作區 Cargo.tomlauthors 寫的是 DSH Teamrepository 指向 https://github.com/dsh-external/dsh-pet-rs。當前對外倉庫是 HuanLinOTO/dsh-plugin-pet-rs,社區目錄維護者也是 HuanLinOTO。不要把它理解成 DeepSeek 官方桌寵。

GitHub 在 2026-08-17 顯示 18 個 star,社區目錄頁列出的是 12 個,數字會變,不必當作質量指標。

小結

dsh-plugin-pet-rs 把 dsh 的會話生命週期搬到桌面上:一隻五態鯨魚、兩條事件流加 2 秒輪詢、透明置頂窗和托盤。它走的是原生 Rust 客戶端,而不是 Web 插件注入。目錄頁仍提供 dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs,但倉庫沒有 package.json,實際路徑是自行 cargo build --release 後運行,並指向已經啓動的 dsh。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-pet-rs/

GitHub:https://github.com/HuanLinOTO/dsh-plugin-pet-rs

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

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

小夜