前言¶
给 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