adengou/dsh-chubby-whale:DSH 網頁版桌面寵物「肥鯨」

前言

給 DSH(DeepSeek Harness)寫插件的人,調試界面時面對的是純文本日誌和命令行輸出,頁內沒有一點活氣。adengou/dsh-chubby-whale(肥鯨)就是往 harness 頁面右下角塞一隻藍髮鯨魚娘:常駐、可拖拽、會眨眼,能語音對話、說書唸詩、飯點提醒。它由社區開發者 adengou 維護,分類是趣味換裝,屬於「一切皆插件」理念下的一個趣味向前端插件,不是官方應用。

下面介紹它的能力、安裝方式和配置要點。

這是什麼

一句話:一個 DSH 網頁插件,在 harness 頁面右下角放了一隻可交互的藍髮女僕鯨魚娘,把陪伴、聊天、語音、文化內容和提醒揉在一起。

  • 維護者:adengou
  • 主倉庫:Gitee(README 標註「只發 Gitee」)
  • 許可證:MIT
  • 版本:1.1.51
  • runtime 要求:Node.js >= 22.3、dsh >= 0.1.0

它解決的不是工程問題,而是「DSH 網頁版頁面太冷清」這個體驗問題。沒有 Key 也能用離線部分。

核心功能

README 把能力分成陪伴、聊天、語音、文化、音樂、工具、界面七類,這裏按能用上的方式歸納。

陪伴。立繪常駐右下角,拖拽帶慣性、位置記憶,自動眨眼,說話時嘴動;餵食冒愛心,情緒表情有待機、餓、困、興奮、害羞、生氣、護食等狀態。

聊天。氣泡對話走 DeepSeek,人設固定(名字、父母、生日、出生地),支持中英雙語,有長期記憶摘要;流式與普通路徑同口徑記賬(親密度/經驗/摘要),聊天框自動聚焦。

語音。文字轉語音提供 9 種音色,可關可停;語音待命做常駐聽寫;語音聊天有開關;時長估算按語種分開,中文按字、英文按詞。

文化。說書內置 17 本古籍,念原文,進度記憶、不重複,進度按數據源隔離;唸詩 737 首;典故 261 條、成語 834 條、民間故事 696 個、對聯 51 副 11 類。另有「選本書 ▸ 書單」「今日一句」「今日簡報」。

音樂。11 首 Web Audio 合成的曲子,支持升降號與低音區。

工具。提醒支持口語時間(「9點」「明天9點」「半小時後」「每天8點」),管理面板裏回數字刪除、回 d 順延 10 分鐘;支持看圖、拖文件(圖片識別 / 文本總結)、成長與親密度、魚糧賬本、餘額、清除記憶、數據導出與導入、使用統計。

界面。界面語言可選中文(默認)或英文;右鍵菜單支持鍵盤導航(↑↓/Enter/Esc);「讓它遊走」可逆,右下角「○」或 Ctrl+Shift+W 恢復;多標籤頁各自獨立。

安裝與啓用

README 給出兩種來源,任選其一。

從 Gitee 裝(推薦):

dsh plugin --profile web add "git+https://gitee.com/adengou/dsh-chubby-whale.git"
dsh web

本地 link(開發調試):

dsh plugin --profile web add "link:C:\Users\<你>\.dsh\plugins\dsh-chubby-whale"
dsh web

裝完刷新頁面就能看到肥鯨。首次打開頁面需要先點一下任意位置,瀏覽器要求用戶手勢才允許開麥克風。

卸載:

dsh plugin --profile web remove dsh-chubby-whale

注意插件包和運行數據是分開的:運行數據在 ~/.dsh-chubby-whale/(記憶、親密度、成長、魚糧、提醒、緩存),卸載插件不會刪它。

配置

Key 不隨包分發,需要自己配。複製 config.example.json 爲 config.json(config.json 已被 git 忽略),放在 ~/.dsh/plugins/dsh-chubby-whale/config.json 或包安裝目錄下:

{
  "deepseekKey": "sk-...",
  "siliconflowKey": "sk-..."
}

也可以用環境變量 CHUBBY_WHALE_DEEPSEEK_KEY、CHUBBY_WHALE_SILICONFLOW_KEY;讀取優先級爲 config.json → 專屬環境變量 → 通用名 DEEPSEEK_API_KEY / SILICONFLOW_API_KEY(最後纔回退)。README 特別說明本插件刻意不讀 ~/.dsh/.credentials.yaml,避免與其他插件互相牽連。

沒有 Key 時的行爲是實測過的:插件照常加載不報錯;沒配 DeepSeek Key 時頁面加載後提示一次「還沒配 Key」,聊天回覆會明確說缺 Key 且不發模型請求;沒配 SiliconFlow Key 時開語音後第一次識別提示一次並停止繼續上傳,不會反覆重試刷屏。語音合成走 edge_tts,不需要 Key,若本機 python 缺依賴會自動回退瀏覽器朗讀。

說書、唸詩、典故、成語、民間故事、彈琴、提醒、成長全部離線可用,不消耗 token。

數據源默認 local,讀插件包內 data/(必需,33MB)。改成 cloud 後按需從 https://adengou.cn/culture/v1/ 拉取,首次用到某本書或某類文化才下載,進程內緩存,manifest.json 的 version+generatedAt 變化後才失效重拉;網絡失敗自動回退本地並記 CLOUD-DATA-FAIL 日誌,60 秒內不重試,錯誤不冒到前端。也可用 CHUBBY_WHALE_DATA_SOURCE=cloud 兜底,優先級是 cordis 配置 → config.json → 環境變量 → local。

總開關在 cordis.patch.yml 的 config.enabled,改成 false 後重啓 dsh web,宿主端不再註冊任何 /api/chubby-whale/* 路由,啓動日誌打印 [chubby-whale] disabled by config。這隻停宿主端;要連前端 bundle 一起停用,用條目自帶的 disabled: true。

自我進化是兩個默認開啓、都能關的開關。personalityLearning 默認 true:每 20 次真實回覆且距上次 ≥6 小時,從最近對話提取主人口頭禪 / 偏好 / 備註,各有條數與字數上限,名字、家人、生日、語言規則等核心設定鎖死不改。personalityWriting 默認 true:每 20 次真實回覆且距上次 ≥24 小時,寫一句 ≤80 字的「近期心境」,輸出出現「我是 / 改名 / 爸爸 / 媽媽 / 生日 / AI」等身份詞則整句丟棄不寫盤。

存儲在 ~/.dsh-chubby-whale/personality.json,原子寫,壞文件隔離爲 .bad-<時間戳>,只保留最近 20 條變更歷史。查看走 GET /api/chubby-whale/personality,回滾走 POST /api/chubby-whale/personality/revert(一次撤一條,可連按,也支持回滾「近期心境」)。關掉後已存內容仍會注入,只是不再學習、不再寫新心境。

數據熱更新方面,data/story/*.json、data/culture/*.json、data/poems.json 按文件修改時間自動失效,改完保存下一次請求即重讀,無需重啓也無需清緩存。

典型用法

裝好、配好 Key、dsh web 起來之後:頁面右下角點肥鯨進聊天框;說書選一本古籍,它會念原文並記住進度;飯點前用口語說一句「明天9點提醒我」即可建提醒;想練口語就開語音聊天,不想被常駐聽寫就關掉語音待命。

本地改內容時,直接編輯 data/ 下的 JSON,保存即可生效;改 src/ 則要按 README 的開發流程處理:npm install、npm run build、npm test,宿主側改動需重啓 dsh web,客戶端改動 Ctrl+F5 即可。

常見問題 README 已有:沒聲音檢查 python -m edge_tts --help;聽不懂說話檢查 siliconflowKey 和瀏覽器麥克風權限;說書/唸詩沒內容在 local 下確認 data/ 完整(33MB),在 cloud 下看日誌裏的 CLOUD-DATA-FAIL。

適用場景與注意

適合想在 DSH 網頁版里加一點陪伴感、或想驗證插件前端打包與宿主路由聯動的開發者。它不是生產力工具,文化內容偏向單機自用。

需要留意的是:插件以當前 dsh web 進程的權限運行,能訪問該進程能訪問的網絡、文件和 Key,安裝前應讀一遍 src/ 源碼並確認 MIT 許可證,再決定是否啓用雲端數據源和自我進化開關。所有模型調用都會消耗對應服務的額度,離線文化功能不消耗 token。

結尾

肥鯨的價值在於它證明了 DSH 網頁版插件可以做到「宿主路由 + 前端 bundle + 本地數據」三件事的完整閉環,卻又足夠輕。如果你只是想給 harness 頁面加一隻會念詩的鯨魚娘,按上面的 Gitee 裝法十分鐘內就能跑起來。

目錄頁:https://www.skillhub.cn/plugins/adengou/dsh-chubby-whale
GitHub:https://github.com/adengou/dsh-chubby-whale
主倉庫:https://gitee.com/adengou/dsh-chubby-whale

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

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

小夜