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

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

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

小夜