dsh-yu-pet · 小雨(Xiaoyu)
DSH Web GUI 的悬浮桌宠插件。小雨会站在页面角落陪你干活:
空闲时平静站立、自然眨眼;agent 工作时思考;等待审批时望向你;
向你提问时做出抉择;任务完成跳起来庆祝;出错时沮丧地蹲下。
特性
- 状态跟随会话活动:插件监听 Harness 活动事件,自动在七种 mood 之间切换
| mood | 颜色 | 气泡 | 触发 |
|---|
| idle | 蓝 #60A5FA | 无 | 会话空闲 |
| waiting | 绿 #34D399 | 正在思考中 | agent running |
| authorizing | 黄 #FACC15 | 等待你的授权 | 审批请求等待窗口 |
| questioning | 粉 #EC4899 | 做出你的抉择 | ask_user_question 执行期间 |
| done | 青 #22D3EE | 搞定啦 | 完成后 2.5s transient |
| failed | 红 #F87171 | 出错了 | agent/error(粘滞到下个状态) |
| disconnected | 灰 #9CA3AF | 无 | 兜底 |
- 逐帧时长精灵动画:8×8 状态图集(192×208/格)+ 2×8 拖拽奔跑图集,
每帧独立时长(idle 眨眼快帧 0.12s、failed 播一次停末帧、wave 两轮挥手),
整行统一显示倍率 + 最近邻渲染(
image-rendering: pixelated),像素风不糊边。
- 交互:拖拽移动(水平位移 ≥2px 切换左右奔跑行,反向立即换向)、空闲双击挥手两轮。
- 气泡不挤动宠物:固定 2d×2d 视口 + 底部锚定,气泡向上增高,宠物屏幕位置不变。
- 设置页:显示/隐藏、尺寸 60–200px、状态气泡、状态光晕、回到右下角。
动作图鉴
每个状态对应一组专属动作,各取一帧代表姿势:
poses
| 动作 | 姿势 | 触发 |
|---|
| idle · 平静站立 | 双手插兜站立、循环眨眼 | 会话空闲 |
| waiting · 正在思考中 | 手扶下巴思考 | agent 工作中 |
| authorizing · 等待授权 | 抬头注视你 | 审批请求等待窗口 |
| questioning · 做出你的抉择 | 歪头、胸前摊开手掌询问 | ask_user_question 执行期间 |
| done · 搞定啦 | 跳起双手上举庆祝 | 任务完成后 2.5s transient |
| failed · 出错了 | 蹲坐抱膝沮丧,播一次停末帧 | agent/error |
| wave · 挥手 | 举右手挥两轮 | idle 时双击她 |
| disconnected · 未连接 | 闭眼静止,65% 透明度 | 兜底 |
| drag-right / drag-left · 奔跑 | 左右独立素材行,各 8 帧 | 拖拽水平位移 ≥2px,反向立即换向 |
动画参数速查
| 动作 | 图集行 | 帧数 | 帧时长 | 播放策略 | 显示倍率 |
|---|
| disconnected | 0 | 1 | 1.00s | 静帧循环 | 1.00 |
| idle | 1 | 7 | 0.88 0.88 0.12 0.88 0.88 0.12 0.96 | 循环 | 1.00 |
| waiting | 2 | 6 | 0.20s | 循环 | 0.97 |
| authorizing | 3 | 6 | 0.24s | 循环 | 0.95 |
| questioning | 4 | 6 | 0.20s | 循环 | 1.00 |
| done | 5 | 5 | 0.12s | 循环 | 1.10 |
| failed | 6 | 8 | 0.16s | 播一次停末帧 | 1.02 |
| wave | 7 | 4 | 0.14s | 两轮后回 idle | 0.96 |
| drag-right / left | 拖拽图集 0 / 1 | 8 | 0.08s | 拖拽期间循环 | 1.00 |
安装
# 已全局安装 dsh CLI 的话
dsh plugin --profile web add github:sundusk/dsh-yu-pet
# 或者通过 npx 调用(无需全局安装)
npx @deepseek-ai/dsh plugin --profile web add github:sundusk/dsh-yu-pet
重启 dsh web 后生效,小雨会出现在页面右下角;设置入口在
侧边栏 → 设置 → 「小雨宠物」。仓库已包含可直接加载的 host / browser
两个插件部分,安装时不需要执行任何构建脚本。
插件管理依赖 pnpm(Homebrew 安装:brew install pnpm)。
项目结构
dsh-yu-pet/
├── package.json # dsh.bundle.patch + dsh.client 声明
├── cordis.patch.yml # 向 web profile 插件表插入 xiaoyu 行
├── lib/
│ ├── index.js # Host 半:活动事件 → mood 状态机 + /api/xiaoyu/* 路由
│ └── client.js # Browser 半:悬浮渲染 + 交互 + 设置页
├── assets/
│ ├── XiaoyuSprites.png # 8×8 状态图集 1536×1664(源格式备份)
│ ├── XiaoyuDragSprites.png # 2×8 拖拽奔跑图集 1536×416(源格式备份)
│ ├── XiaoyuSprites.webp # 无损 WebP(运行时优先,体积约 -30%,像素一致)
│ └── XiaoyuDragSprites.webp
├── docs/poses.png # 动作图鉴预览图(每状态一帧)
├── LICENSE
└── README.md
Host 半从包内 assets/ 目录解析图集(WebP 优先、PNG 回退),无任何绝对路径配置。
换皮指南
想替换角色:保持 PNG 为 RGBA、固定网格(状态图集 8×8、拖拽图集 2×8、每格 192×208)、
未使用格透明;按 lib/client.js 里 ANIMS 的 row / durations / scale / once
协议调整每行动画的帧数与节奏即可,渲染层无需改动。
Credits
License
BSD-3-Clause,见 LICENSE。