---
## 为什么是鲸鱼娘
大部分桌宠要么只是「会动的图」,要么会在你专注时抢注意力。鲸鱼娘的三条硬规则:
| 原则 | 具体做法 |
|---|---|
| **不打断你** | 工作态(有工具在跑)**绝不弹话、不乱切姿势**;所有闲聊、关怀、播报都只在待机时发生 |
| **不抢你的焦点** | 默认是纯装饰:`aria-hidden`、不拦截键盘、不覆盖业务 DOM、不改任何内置包文件;连焦点都要你主动开无障碍模式才拿得到 |
| **不给你添隐私负担** | 无遥测、不上传、默认零外部请求;台词播报、关键词感知、余额、无障碍这些会读内容/金额的功能**全部默认关闭** |
而且她是**真的会看你在干什么**:不是定时随机换图,而是读取宿主的结构化标记(工具卡状态、会话运行标记、终端块)来判断你在忙什么,再决定摆哪个姿势、要不要闭嘴。
---
## 目录
- [一分钟上手](#一分钟上手)
- [看看她长什么样](#看看她长什么样)
- [她适合谁](#她适合谁)
- [她有什么](#她有什么)
- [兼容性](#兼容性)
- [第一次使用](#第一次使用)
- [使用说明](#使用说明)
- [设置面板](#设置面板)
- [更新 / 回滚 / 卸载](#更新--回滚--卸载)
- [版本更新](#版本更新)
- [数据与隐私](#数据与隐私)
- [常见问题](#常见问题)
- [故障排查](#故障排查)
- [路线图](#路线图)
- [项目结构](#项目结构)
- [开发与测试](#开发与测试)
- [参与贡献](#参与贡献)
- [致谢](#致谢)
- [License](#license)
---
## 一分钟上手
**最简:从 npm 装**(不需要 `git ls-remote` 预检,网络受限时更稳):
```powershell
# 桌面端(Electron 壳)——把路径换成你的安装位置
$Desktop = "D:\DeepseekHarnessDesktop"
$Cli = "$Desktop\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js"
$env:ELECTRON_RUN_AS_NODE = "1"
& "$Desktop\DeepSeek Harness.exe" --expose-internals $Cli plugin --profile desktop add dsh-whale-musume
```
```powershell
# 旧版 Web profile
dsh plugin --profile web add dsh-whale-musume
```
也可以继续从 GitHub 源装(等价;想跟 `main` 最新提交时用这个):
```powershell
dsh plugin --profile web add github:Sutera-Diffusus/dsh-whale-musume
```
装完**重启宿主**(桌面端重启应用;旧版 Web 重启 `dsh web` 后 `Ctrl+F5`),她就出现在右下角了。
> **镜像同步提示**:新包在 npmmirror 上可能短暂显示 `0.0.0-stage`(发布占位版本)。看到这个版本不要装;在插件管理器的 Registry 选择器切到 **npm 官方源**,或等镜像同步。官方源核验:`npm view dsh-whale-musume version --registry=https://registry.npmjs.org` 应为 `2.5.0`。
> 从插件市场或 `dsh plugin add` 装不上时,见[安装失败排查](#安装失败排查从插件市场--dsh-plugin-add-装不上)。日志被截成只剩 `[exit 1]`、走 git 源时的 `git ls-remote` 超时、还有 `allowBuilds` 提示,那一节都写了。
| 待机陪伴 | 工作状态联动 |
|---|---|
|

|

|
| 默认悬浮在右下角,随机喝咖啡、伸懒腰 | 检测到工具运行,抱起笔记本,带淡蓝光晕 |
| 摸头互动 | 投喂互动 |
|---|---|
|

|

|
| 单击摸头,脸红立绘 + 爱心星星飞出 | 右键投喂,提升饱食度与好感度 |
| 悬浮形态(可拖拽) | 立绘总览(90+ 张) |
|---|---|
|

|

|
| 200px 默认尺寸,拖到她喜欢的地方 | 状态 / 互动 / 成长 / 游戏 / 天气 / 节日 / 梗表情 |
更多素材:[交互动作总览](docs/images/actions-board.png) · [新增立绘总览](docs/images/new-poses-board.png) · [宣传海报 v1](docs/images/promo-poster-v1.png) / [v2](docs/images/promo-poster-v2.png) / [v3](docs/images/promo-poster-v3.png) / [v4](docs/images/promo-poster-v4.png)
---
## 她适合谁
- 你想要的不只是「会动的挂件」,而是一个**有进度可攒**的桌宠:每日任务、周签到、45 个成就、三个小游戏、成长日记。
- 你同时用 **DSH 桌面端和旧版 Web**,或者经常换机器——她有跨端存档导出/导入。
- 你在意**本地优先**:数据只在宿主 localStorage,无遥测,卸载即走;203 项测试覆盖核心逻辑与交互接线。
- 如果你只想要 Live2D 级动画或独立桌面透明窗,同类里有更专精的项目;鲸鱼娘的重点是「陪伴系统」。
---
## 她有什么
### 🐋 本体与行为
| 特性 | 说明 |
|---|---|
| 悬浮 / 侧栏 / 底栏 / 迷你 / 自动 | 五种形态,按视图自动切换;默认 200px 悬浮 |
| 拖拽 + 惯性 | 拖拽时切换「被拎起来」立绘,身体随光标方向摇摆;松手后按瞬时速度滑行一段并旋转回正,撞到屏幕边缘会「抓住」边缘停住;轻放只做一次轻微回弹,位置在滑行结束后才保存 |
| 动势遮断过渡 | 待机 ↔ 工作之间用「下压 → 换图 → 弹起」过渡,不叠影、不闪黑;后台标签页被浏览器暂停换图动画时有 1.6s 超时兜底 |
| 唤回入口 | 在设置里关掉她之后,左下角留一枚 🐋 按钮,点一下就叫回来,不会再「消失得找不着」 |
### 💼 工作状态联动
| 特性 | 说明 |
|---|---|
| 忙闲联动 | 检测到工具运行自动切「抱笔记本工作」,带淡蓝光晕与「工作中」标签 |
| 按工具类型细分姿态 | 跑命令 / 改文件 / 搜索 / 测试 / 评审 / 部署 / 调试各有对应姿势;识别不了就回落通用姿态,绝不乱猜 |
| 工作期稳定 | 工作中不切小剧场、不插话;信号短暂中断时姿势继续钉住(工作台 8s / 其他页 4s),不抽搐 |
| 点击反应 | 工作中点她会随机出现「害羞抱电脑」或「偷吃内存条」,不打断工作状态 |
### 📈 养成与成就
- **基础数值**:心情、好感度、饱食度、等级、连续签到、陪伴时长
- **每日任务**:3 个槽位每日自动刷新,完成领好感奖励
- **周签到**:本周 7 格签到板,集满 1 / 3 / 7 天有里程碑奖励
- **羁绊等级**:Lv3 解锁新待机动作、Lv5 称号「鲸汐守护者」、Lv7 隐藏彩蛋
- **45 个成就 + 成就墙**:互动类 / 陪伴类 / DSH 用量类 / 游戏类 / 任务类,已解锁高亮、未解锁灰显;新增「百日之约」「一年之约」与翻翻乐四项
- **成长日记**:按时间记录羁绊升级、成就解锁等节点,倒序显示最近 12 条
### 💬 台词与陪伴
- **530+ 条台词**:全场景覆盖,可爱为主,叠加打工人 / 摸鱼 / DDL / 画饼 / 发疯文学等安全梗
- **梗关键词表情**:命中 13 个关键词(kyun、OMG、doge、sike、膜拜、peace、怀疑人生、waku waku 等)现场变身表情包
- **5–8 分钟主动闲聊**:按当前任务内容本地分类贴题,工作态绝不插嘴;深夜 23:00–5:59 不主动打扰
- **心情分层**:心情低落时温柔、高涨时元气;羁绊等级解锁专属台词
- **天气陪伴**:城市留空即零联网;填写后走 Open-Meteo(免费无需 Key),附带雨 / 雪 / 雷闪 / 风 / 雾 / 热浪 / 霜雾等全屏氛围特效,工作态自动降档
- **主动关怀**:久坐提醒(连续忙 25 分钟)/深夜劝休息/卡住陪伴(状态停滞 8 分钟)/回来打招呼(离开超 3 分钟),两次之间至少隔 15 分钟
- **工作态台词两档**(issue #24):干活时的思考 / 工具 / 成功 / 出错台词共用随机冷却窗口——**话痨** 15–40 秒、**安静** 90–240 秒,窗口之内只说一句;思考与工具台词按当前任务话题取词(与主动闲聊同一套本地分类),成功 / 出错保留各自语料。待机问候与天气不受影响,默认话痨
- **可选台词播报**:检测到宿主装有 `dsh-xiaomi-tts` 服务时才会出现「台词播报」开关,**默认关闭**;未安装、未配置或播放失败都不影响原有交互
### 🎀 互动与视觉
- **分区点击**:头 / 肚子 / 尾巴三区独立判定,各有专属立绘、特效与台词
- **点击特效**:爱心 / 星星 emoji 飞出;三连击触发星星眼庆祝 + 粒子特效 + 旋转动画
- **90+ 张立绘**:待机、工作中、思考、离开、成长四态、游戏四态、天气三态、节日五套(圣诞 / 万圣 / 中秋 / 春节 / 情人节,当天自动换装)
- **三个小游戏**:**戳泡泡·泡泡派对**(4×4 网格,普通 / 星星 / 炸弹,连击加分,30 秒一局)、**接点心**(键盘或鼠标追落下的点心,躲炸弹)、**鲸鱼翻翻乐**(4×4 记忆配对,复用 16 张现有立绘,60 秒、连击加成、零失误通关);三种游戏共享每日 3 局养成奖励上限,鼠标 + 键盘双通道可达
### 🧩 工程特性
- **零侵入**:纯前端注入 + 一个只读静态资源路由,不改任何内置包文件
- **无构建步骤**:仓库里的 `assets/` 就是运行产物,装入即用
- **立绘预加载**:首屏只预载 5 张常用姿势,其余 90+ 张在空闲时段每 120ms 取一张,冷启动切姿势不迟滞;预取失败完全静默
- **无障碍模式**(默认关闭):可 Tab 聚焦、Enter / 空格摸头、方向键微调位置(Shift 加速),状态变化经 `aria-live` 播报
- **主题跟随**:跟随宿主明暗主题,只影响气泡/菜单这类 UI,**立绘不做滤镜**,不改画风
- **可测试性**:核心状态机与表现层分离,单元测试可直接 `node --test` 跑
---
## 兼容性
| 宿主 | 支持 | 说明 |
|---|:---:|---|
| **DeepSeek Harness 桌面端** `0.2.0-rc.2` | ✅ 已实测 | 那个构建的 GUI 默认 `127.0.0.1:19387`。安装/回滚见[0.2.0 部署手册](docs/desktop-0.2.0-rc.2-deploy.md) |
| **DeepSeek Harness 桌面端 / Web** `0.2.1-rc.1`、`0.2.1-rc.2` | ✅ 静态契约 | 对照 tag `dsh-v0.2.1-rc.2` 的源码与单元测试,**没有**在真实 Electron 里复跑。0.2.1 的桌面端端口改为系统分配(`--port 0`),不要再假设 `19387`。差分见[0.2.1 契约](docs/desktop-0.2.1-rc.2-contract.md)与[部署差分](docs/desktop-0.2.1-rc.2-deploy.md) |
| **旧版 Web profile**(DSH `0.1.x`) | ✅ 已实测 | `0.1.0-rc.6` 及以上;设置面板在 `0.1.1-rc.2` 实测 |
| 其他 profile(headless / acp 等) | ➖ 无界面 | 没有浏览器界面,桌宠无处显示 |
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 / 11(当前桌面端的支持范围) |
| Node.js | 18+(仅脚本安装方式需要;组合包安装不需要) |
| 浏览器 | Edge / Chrome 最新版 |
> **数据不互通**:桌面端主窗口 origin 是 `dsh-app://app`,旧版 Web 是 `http://127.0.0.1:<端口>`,两边 `localStorage`(`whale-moe:*`)互不相通,也不会自动迁移。详见[数据与隐私](#数据与隐私)。