前言¶
在 DSH 里長時間跑會話時,界面往往只有輸入框、消息流和運行指示,缺少一種「當前在幹什麼」的直觀反饋。有人會在側邊欄看日誌,有人盯着 running 狀態猜 agent 是否在幹活;這些做法能工作,但和輸入區是分離的。
下面介紹社區插件 dsh-fatfish(大肥魚桌寵):把動畫形象貼在會話輸入卡片上沿外側,根據待命、輸入、生成、待批准、待回答、出錯、完成、閒置、上下文喫撐等九種狀態切換表情。表情以 WebP 動畫內嵌在客戶端 bundle 裏,不依賴外部 CDN,屬於 DSH 生態裏「趣味換裝」類的小改動——不改 Host 邏輯,也不增加配置項。
這是什麼¶
dsh-fatfish 由維護者 kabarryo 發佈,倉庫 kabarryo/dsh-fatfish,社區目錄頁見 skillhub.cn/plugins/kabarryo/dsh-fatfish。當前 package 版本爲 0.1.0,代碼許可證 MIT;表情素材來自 diwer/ai-biaoqingbao(CC BY-NC-SA 4.0,非商業等限制見倉庫 NOTICE)。
插件只做一件事:在 DSH 會話輸入區註冊 overlay 與 dock 兩個 client slot,顯示約 96px 見方的大肥魚,並在狀態變化時從對應表情組裏隨機選一張動畫。README 說明本插件由 DSH + DeepSeek V4.1 Flash 開發與維護,Host 側 index.js 爲空實現,邏輯全在 client.js。
核心功能¶
九種狀態與判定¶
狀態優先級(高到低):出錯 > 待批准/待回答 > 生成中 > 完成(6s)> 喫撐了 > 輸入中 > 閒置 > 待命。每次進入狀態從組內隨機取表情;同一狀態停留超過約 45 秒(±25% 抖動) 會再隨機換同組另一張(組內只剩一張時不輪換)。
| 狀態 | 判定要點 | 表情組(README 編號) |
|---|---|---|
| 待命 | 不在跑、失焦、靜默 < 180s | 081 期待 · 019 在嗎 |
| 輸入中 | 輸入框獲得焦點 | 009 收到 · 020 來了 · 022 馬上到 |
| 生成中 | SessionSnapshot.running |
074 乾飯人 · 075 先喫一口 · 065 趕工中 · 076 咖啡續命 |
| 等你批准 | pendingInteraction.kind === 'approval' |
034 啊這 · 028 拜託了 · 021 等一下 |
| 等你回答 | pendingInteraction.kind === 'question' |
033 真的假的 · 049 尊嘟假嘟 · 093 確認眼神 |
| 出錯 | promptError / lastAgentError / openError(8s) |
037 麻了 · 036 我裂開了 · 069 我太難了 |
| 完成 | 回合結束後 6s | 094 恭喜 · 003 點贊 · 091 滿血復活 · 047 拿捏了 |
| 閒置 | 失焦、靜默 ≥ 180s | 腳本:064/044 隨機開場 → 120s 後 007×3 圈 → 018×2 圈 → 073 鎖定 |
| 喫撐了 | 上下文佔用 ≥ 85% 且失焦 | 088 撐了 · 072 讓我緩緩 |
閒置不是簡單表情池:進入後按 README 描述的腳本順序播動畫,播完停在最後一幀,直到離開閒置狀態。
擺放與輸入區佈局¶
寵物貼在輸入卡片上沿外側、距右邊 40px,縮放後約 96px 見方,明暗主題下都不擋輸入框與發送按鈕。合成階段按底部基線對齊,避免寬構圖「浮」在卡片上方。
同時註冊透明佔位帶 conversation.input.dock(高 102px),正文滾動區域整體上移,靜止時最後一行停在寵物上方。插件只使用 conversation.input.overlay 與 conversation.input.dock 兩個 slot;若上游改名需同步改插件。
素材與體積¶
共 29 張大肥魚表情(README 與簡介一致),對應九種狀態分組;素材取自 diwer/ai-biaoqingbao 的 100 張系列中挑選結果,幀數與幀序沿用原始素材,構建時合成動畫 WebP 並內聯進 client.js(約 1 MB),無需運行時拉取外部圖片。
安裝與啓用¶
要求:DSH 0.2.x(Web 或桌面版 profile),Node >=20,無額外 npm 依賴。
克隆倉庫¶
先把插件放到本地目錄(路徑可按習慣調整,下面以 ~/dsh-fatfish 爲例):
git clone https://github.com/kabarryo/dsh-fatfish.git ~/dsh-fatfish
若目錄已存在,在倉庫內執行 git pull 更新即可。
登記到 profile¶
編輯目標 profile 的 package.json:
- Web:
~/.dsh/profiles/web - 桌面版:
~/.dsh/profiles/desktop
在 dependencies 中加入本地 link,並把 bundle 名追加到 dsh.profile.bundles 末尾(<你> 換成實際用戶名或絕對路徑):
{
"dependencies": {
"dsh-fatfish": "link:/Users/<你>/dsh-fatfish"
},
"dsh": {
"profile": {
"bundles": ["...", "dsh-fatfish"]
}
}
}
重啓 DSH¶
改完 package.json 或 cordis.patch.yml 後必須重啓 DSH:Web 版重啓 dsh web,桌面版退出重開。README 強調 bundle 只在啓動時加載,漏重啓是最常見的手動安裝失誤。
也可把 README「推薦:讓 agent 安裝」裏的四步說明交給能執行命令的 agent,由它定位 profile、備份 package.json、登記 link 並重啓驗收。
典型用法¶
安裝並重啓後,打開任意會話即可驗收:
- 確認輸入框右上方出現大肥魚。
- 點擊輸入框,應進入「輸入中」組表情。
- 發送一條消息,生成過程中應切換到「生成中」組。
- 若會話出現待批准或待提問交互,表情應對應
approval/question狀態。
插件沒有配置項,也不提供 Host 側 API;改 client.js 後刷新頁面即可(client bundle 按 mtime 增量讀取),無需爲此重啓。
維護者若改素材或分組,需在倉庫內兩步構建:
python3 scripts/build_emotes.py
python3 scripts/build_plugin.py
適用場景與注意¶
適合誰:希望在 DSH 輸入區獲得會話狀態可視化、又願意接受非商用表情素材許可約束的用戶;分類上屬於社區目錄的「趣味換裝」,不改變 agent 能力本身。
運行與權限:插件隨當前 DSH 進程的 client bundle 在瀏覽器或桌面殼內執行,安裝前宜通讀倉庫源碼與 LICENSE、NOTICE,確認可接受 MIT 代碼許可與表情 CC BY-NC-SA 4.0 限制(內嵌動畫幀視爲修改版,同樣不可商用)。
已知限制(來自 README):
- 表情僅在會話頁輸入區可見,側欄與插件頁沒有。
- 「喫撐了」依賴本插件對
contextPressure的投影(閾值 85%),不是 DSH 內置狀態。 - 換表情組需改
scripts/build_emotes.py的POOLS後重跑構建。 - 部分原圖頂部被裁,呆毛不完整等情況按素材原樣保留。
卸載:從 profile 的 package.json 刪除 dependencies.dsh-fatfish 與 bundles 中的 "dsh-fatfish",重啓 DSH;~/dsh-fatfish 目錄可保留或刪除。
結尾¶
dsh-fatfish 把大肥魚桌寵綁在 DSH 會話輸入框右上角,用九種狀態和 29 張動畫表情反映當前交互節奏,素材內嵌、零配置啓用。DeepSeek Harness 社區採用「一切皆插件」的思路,目錄站點 skillhub.cn 與 DeepSeek / 幻方無官方從屬關係;細節與截圖以 GitHub README 爲準。