READMESource: main@8ab057df
🐋 趴趴鲸鱼娘 dsh-whale-lap
为 DeepSeek Harness 打造的二次元桌宠插件:一只手绘 SVG 的可爱鲸鱼娘,趴在对话框(composer)上沿陪你写代码——会眨眼、摇尾巴、头顶喷水、冒泡泡,工作起来还会掏出小电脑。
参考 GitHub 上的 dsh-whale-musume(元气鲸鱼娘) 重制:与其用 90+ 张生成立绘不同,本插件全部形象为手绘矢量 SVG + CSS/JS 动画,体积小、真·灵动动态、零外部依赖、无遥测。
✨ 特性
| 类别 | 内容 |
|---|---|
| 🎨 本体 | 手绘 SVG 鲸鱼娘(头枕双手、鲸尾上翘、头顶喷水孔),趴姿贴框 |
| 🌀 灵动动效 | 呼吸起伏、尾巴摇摆、胸鳍扑扇、双马尾/侧发飘动、周期眨眼 + 双连眨、腮红脉动、头顶喷泉(约 9s 一次)、泡泡上飘、星星闪片 |
| 💬 对话联动 | 检测到 DSH 工作时掏出小电脑 + 冒汗打代码;思考时歪头「o」嘴;成功时蹦跳庆祝;报错时掉眼泪安慰 |
| 🎧 偷听打字 | 你在输入框打字时她会竖起耳朵(倾听嘴型 + 歪头),偶尔搭话 |
| 🖱️ 互动 | 单击:脸红台词 + 爱心/星星飞出;三连击:星星眼 + 蹦跳庆祝;拖拽:被拎起来身体随方向倾斜,松手弹回对话框;右键/齿轮菜单 |
| 😴 陪伴细节 | 安静 3 分钟自动打盹(闭眼 + Zzz + 慢呼吸),睡 40 秒自己醒来;每 50–110 秒主动闲聊;深夜也不吵你 |
| ⚙️ 菜单 | 贴回对话框 / 自由摆放 / 放大缩小 / 睡一会儿 / 躲起来(右下角 🐋 按钮可找回)/ 说句话 / 关于 |
| 🧩 工程 | 纯前端 DOM 注入,不改 DSH 业务 DOM;localStorage 保存偏好(whale-lap:*);支持 prefers-reduced-motion |
🖼️ 先看效果(无需安装)
直接双击打开 demo.html——一个模拟 DSH 的离线预览页,鲸鱼娘会立刻趴到模拟输入框上,右上角按钮可模拟「工作 / 思考 / 成功 / 报错」。
📦 安装(bundle 组合包,零侵入)
方式 A:GitHub 远程安装(推荐)
dsh plugin --profile web add github:Linzr-lly/dsh-whale-lap
方式 B:本地目录
# 在插件目录的上一级执行
dsh plugin --profile web add ./whale-girl-plugin
安装后重启 dsh web,打开页面(默认 http://127.0.0.1:3080)并强制刷新 Ctrl + F5,鲸鱼娘就会趴到对话框上沿。
验证
- 点她:脸红 + 台词 + 爱心;连点三下:星星眼庆祝;
- 按住拖动:被拎起来跟着光标摇摆,松手弹回对话框;
- 让 DSH 跑一个工具:她掏出小电脑进入工作模式;
- 在输入框打字:她歪头偷听。
🎮 使用说明
| 操作 | 效果 |
|---|---|
| 单击 | 随机台词 + 爱心/星星粒子,短暂开心 |
| 连点 3 下 | 星星眼 + 蹦跳 + 粒子庆祝 |
| 按住拖动 | 「被拎起来」,身体随移动方向倾斜;松手弹回对话框(自由位置已记忆) |
| 右键 / 齿轮 ⚙ | 菜单:贴回对话框、自由摆放、放大/缩小、睡一会儿、躲起来、说句话、关于 |
| 输入框打字 | 倾听状态(歪头 + o 嘴),偶尔搭话 |
| 长时间没动静 | 自动打盹(Zzz),睡醒元气满满 |
📁 项目结构
whale-girl-plugin/
├─ package.json # DSH 插件声明(dsh.bundle + dsh.client)
├─ cordis.patch.yml # 组合包 patch:插入 dsh-whale-lap
├─ lib/
│ ├─ index.js # 宿主半边:/api/dsh-whale-lap/assets 静态资源路由
│ └─ client.js # 浏览器半边:注入样式 + 表现层
├─ assets/
│ ├─ whale-girl.svg # 手绘鲸鱼娘(唯一美术资产,动画全在 CSS)
│ ├─ whale-lap.css # 全部动效(呼吸/摇尾/眨眼/喷水/泡泡/Zzz…)
│ └─ whale-lap.js # 贴框定位、状态联动、拖拽、互动、台词
├─ demo.html # 离线预览页(双击即看效果)
├─ test/ # 自动化验证(真实浏览器 CDP 验收)
│ ├─ smoke.mjs # Node DOM-stub 冒烟测试
│ ├─ server.mjs # 本地静态服务器(预览/测试用)
│ ├─ cdp-shot.mjs # CDP 截图 + 运行时状态读取
│ ├─ cdp-state.mjs # 状态联动验收(工作/报错/单击)
│ ├─ cdp-final.mjs # 动画/倾听/拖拽弹回验收
│ └─ shot-cdp.png # 验收截图(趴在对话框上沿)
└─ README.md
✅ 自动化验证
# 1) 冒烟测试(无浏览器,Node 18+)
node test/smoke.mjs
# 2) 真实浏览器验收(需要 Edge/Chrome)
node test/server.mjs 8899 # 起本地静态服务器
msedge --headless --disable-gpu --no-sandbox --remote-debugging-port=9222 --user-data-dir=%TEMP%\wl-edge about:blank
node test/cdp-shot.mjs # 截图 + 运行时状态
node test/cdp-state.mjs # 工作/报错/单击联动
node test/cdp-final.mjs # 动画/打字倾听/拖拽弹回
已通过的验收项:贴框坐标像素级精确(下沿压进对话框上沿 15px)、尾巴/泡泡/喷泉/眨眼动画生效、工作中掏出小电脑、报错掉眼泪、打字触发倾听、拖拽跟随并在松手后弹回对话框。
🔧 工作原理
cordis.patch.yml把dsh-whale-lap插入 profile;- 宿主侧
lib/index.js注册只读静态路由/api/dsh-whale-lap/assets?f=<path>; - 浏览器侧
lib/client.js经window.__ModuleLoader__加载,注入样式与表现层; - 表现层
whale-lap.js取回 SVG 内联进页面(内联后 CSS 动画才能作用于 SVG 元素),用[data-composer-card="true"]/[data-slot="conversation.composer.bar"]定位对话框,把她的身体下沿压进对话框上沿 15px,实现「趴在上面」; - 轮询 DSH 状态信号(
data-running/data-state="ongoing"/loading/success/error)联动表情台词。
🗑️ 卸载
dsh plugin --profile web remove dsh-whale-lap
或在浏览器 localStorage 中删除 whale-lap:* 键后刷新页面。
🔒 数据与隐私
- 偏好(模式/大小/位置/隐藏)存于浏览器
localStorage,键名whale-lap:*; - 不发送遥测、不访问外部网络、不读取 DSH 会话数据;
- 全部资源本地加载,安装无需修改任何内置包文件。
🐳
鲸鱼娘陪你写代码,也陪你摸鱼。
No comments yet. Be the first to write one.