본문으로 건너뛰기
M

dsh-whale-pet

moonlitdropofblood/dsh-whale-pet

DeepSeek Harness용 WhaleHarbor 데스크톱 펫입니다. 항상 위에 있는 투명 플로팅 창에 AI 생성 파츠 13개로 만든 치비 고래 메이드를 띄우고 CSS 종이 인형 애니메이션으로 숨쉬기·깜박임·앞머리 흔들림·땀·점프·떨림을 표현합니다. 유휴, 작업, 승인, 질문, 오류, 축하, 낮잠, 하위 에이전트 복제의 8개 기분으로 작업 상태를 나타냅니다. 찌르기, 드래그, 3가지 크기, 트레이 전환, 말풍선 실시간 통계를 지원합니다. WhaleHarbor 데스크톱 셸(Windows 빌드)이 필요합니다.

설치

dsh plugin --profile web add github:moonlitdropofblood/dsh-whale-pet

README

dsh-whaleharbor-pet · 鲸娘桌宠

鲸港 WhaleHarbor 的大白鲸娘桌面窗宠:一只透明、置顶、不抢焦点的悬浮小鲸娘,实时反映 DeepSeek Harness(DSH)的工作状态。

形象采用 2D 拆件 + CSS 纸片人动画:原画拆成 13 个零件(底座/眼×4/嘴×6/呆毛/汗滴),底座擦除与表情件重组误差为 0 像素,动作全部由 CSS keyframes 驱动(呼吸、眨眼、呆毛摇摆、汗滴、蹦跳、抖动),60fps、缩放无损。

鲸娘桌宠

状态表情

八种状态

状态触发表现
空闲 A/B无任务呼吸浮动 + 眨眼 + 呆毛摇摆;两种 idle 每 18s 随机轮换(B 有快速双眨和视线偷瞄);每 9s 轮换闲扯台词
忙碌主 agent 运行 / 根工具执行 / 子代理 / 工作流快速浮动 + 波浪嘴 + 汗滴滑落 + 冒泡,气泡显示当前工具名
审批等待approval/request(主 agent)头顶红色 ! 徽章 + O 嘴 + 歪呆毛 + 提示气泡
提问等待user-questions/request(主 agent)头顶蓝色 ? 徽章 + 瞳孔偏移 + 呆毛大摆
出错agent/error(主 agent)XX 眼 + 高频抖动 + 橙色 ✕ 徽章 8 秒
完成庆祝忙碌 → 空闲跳变蹦跳三下 + ∩∩ 笑眼 + 开怀大笑 + 星星爱心 6 秒
打盹连续空闲 3 分钟慢深呼吸 + 闭眼 + 画面变暗 + Z z z
子代理分身subagent/start 存活数右下角小鲸鱼(最多 6 只)

气泡副栏实时统计:本次开机工具调用数、累计忙碌分钟、被戳次数。

桌面实拍

桌面实拍:忙碌状态(pwsh 工具运行中),气泡为实时统计,右下为子代理分身。

支持平台:需要 WhaleHarbor 桌面壳提供浮窗能力(当前发布 Windows 构建);插件本体是纯 Web 技术(DOM + CSS 动画),壳支持更多平台后即随之可用。

交互

  • 拖动:按住鲸娘或空白处拖动(壳的 float-preload 实现,零页面协议)
  • 戳一戳:点击鲸娘 → 压缩回弹动画 + 随机吐槽,计数上报
  • 右键:原生菜单 —— 小号/中号/大号(重建浮窗,状态自动续上)、隐藏
  • 托盘菜单(WhaleHarbor 托盘):状态行 + 「显示/隐藏鲸娘」
  • 悬停:显示状态气泡

架构

DSH 核心进程(本插件 Host 半部,index.js)
  │  监听 agent/status、tools/execute、approval/request、user-questions/request、
  │  subagent/start|end、workflow/start|end、agent/error(subagent 按 session header 过滤)
  │  聚合成 ≤2.5KB 状态快照
  ▼
RPC 桥  http://127.0.0.1:<随机端口>(DSH_DESKTOP_NOTIFY_PORT/_TOKEN,请求体上限 4KB)
  │  float.window.create(url 模式:内联 html 超 4KB 会被静默断开,
  │  页面与零件由插件本地服务器自取:/pet.html + /parts/*.png,路径白名单 404 兜底)
  │  → float.window.state(1s 节流,变化才推)
  │  float.window.menu(右键原生菜单)
  ▼
WhaleHarbor 壳:透明显示浮窗(floating 置顶 / focusable:false / 不进任务栏)
  ▲  反向通道(插件自起 127.0.0.1 eventPort)
  └── float.window.input(戳一戳)/ float.window.menu.click / float.window.closed
  • 页面是一张零件叠加的 DOM:底座常驻,表情件按 mood class 切换透明度,动作全在 CSS keyframes(translateY 相对自身盒高,窗口三档尺寸自适应)。
  • 零件缺失(打包漏发 parts/)时自动退回占位鲸鱼,不白屏。
  • 桥不可达(纯浏览器/CLI 启动、旧壳、浮窗开关关闭)时安静空转,无任何副作用。
  • 卸载/HMR/核心退出时 ctx.effect 清理:float.window.closeAll + 托盘分区清除 + 事件服务器关闭。
  • 窗口是壳的资产:核心重启时代际清理,宠物不会变孤儿。

安装

dsh plugin --profile web add @duke-dsh-plugins/dsh-whaleharbor-pet

国内网络请显式指定 --registry=https://registry.npmjs.org(本机默认 registry 常被镜像源覆盖)。

装完必须重启 DSH 核心生效(桌面壳 Ctrl+Alt+R 或设置 → 核心 → 重启)。

本地开发

node --check index.js                  # 语法检查
node -e "console.log(require('./index.js')._buildPetPage())"   # 导出浮窗页面

页面通过插件事件服务器提供 /pet.html 与 /parts/*.png;开发时用任意静态服务器指向本目录即可预览(支持 ?mood=idle-a|idle-b|busy|nap|celebrate|approval|question|error 钉死状态)。

已知边界

  • 改大小 = 关窗重建(浮窗宽高创建即固定),位置回到默认右下角。
  • float.window.state 是替换最新值语义:页面刷新自动补发最新状态。
  • 每插件浮窗限额 3 / 全局 6;本插件只用 1。

License

MIT © dukebywwh

관련 플러그인