DSH 鲁迅先生桌宠(全局插件)
DSH Web client plugin:在 Web 界面右下角显示鲁迅先生 GIF 桌宠。四种状态各配一张专属 GIF,外加点击彩蛋交互,素材均来自用户提供的 C:\Users\26294\Desktop\sc\(原样复制,未重新设计):
| 状态 | 素材文件(assets/) | 来源 |
|---|---|---|
| 待机中 | idle.gif | 待机中.gif |
| 正在工作 | working.gif | 正在工作.gif |
| 任务完成 | done.gif + done.mp3 | 任务完成.gif + 任务完成音频.mp3 |
| 点击彩蛋 | egg.gif + egg.mp3 | 鲁迅卡通形象.gif + 鲁迅卡通形象音频.mp3 |
行为
- 待机中(无活动会话):
idle.gif,气泡灰色「待机中」 - Agent 运行中:
working.gif,气泡蓝色「正在工作」 - 等待用户审批或问题回答:沿用
idle.gif,气泡琥珀色「等你决定」 - 任务完成(运行中 → 结束且非等待):
done.gif+ 播放done.mp3,气泡绿色「任务完成」;
完成动图固定展示 30 秒(音频播完即止、不提前退出)——30 秒内用户提问或新任务 开始则立即打断,30 秒无干扰后自动回到待机
- 点击桌宠(未拖动):触发彩蛋
egg.gif+ 播放egg.mp3,气泡粉色「彩蛋!」;
彩蛋中再点可重新触发;彩蛋展示时长 = GIF 完整一轮 + 2 秒余量(客户端解析帧 延迟总和,等 GIF 解码完成才开始计时,当前素材一轮约 10 秒、展示约 12 秒;音频只 叠加播放、不驱动退出,不会中途截断;解析/解码失败时 12 秒兜底),期间 Agent 状态变化会随时打断特效
- 静音按钮:气泡右侧小圆钮 🔊/🔇,与气泡垂直居中对齐(独立可点击,气泡本身不拦截
鼠标);点击切换,静音时不播任何音频(完成展示 30 秒照常、彩蛋展示 GIF 完整一轮 无声演出),状态存 localStorage,刷新后保持;静音瞬间会掐掉正在播的音频
- 按住拖动可移动桌宠位置(Pointer Events,鼠标/触摸通用,拖出界会自动钳制在视口内;
位移超过 4px 判定为拖拽,不会误触发彩蛋)
- 桌宠以命令式 DOM 直接挂到
document.body(z-index: 2147483000,不依赖
react-dom/Portal),不受界面面板/弹层遮挡与容器裁剪,fixed 定位相对整个视口, 可全屏拖拽
- 状态以聊天气泡样式显示:渐变毛玻璃底 + 状态色光晕 + emoji 图标 + 水滴尾巴,
不对称圆角(右下收口);状态切换 Q 弹入场;工作中带「正在输入」跳动圆点, 完成/彩蛋带弹跳点缀;五种展示色(灰/蓝/琥珀/绿/粉)
素材由 host 半通过 /dsh-luxun-pet/asset/{idle.gif,working.gif,done.gif,egg.gif,done.mp3,egg.mp3} 提供,带与 /api 一致的回环/可信域信任检查;状态来自 DSH 官方 sessions.list 快照, 不修改 DSH 核心。
全局安装(web profile)
插件目录固定在 C:\Users\26294\.dsh\plugins\dsh-luxun-desktop-pet,与任何项目无关。
cd $env:USERPROFILE\.dsh\profiles\web
pnpm install前提是 package.json 中已登记:
"dependencies": {
"dsh-luxun-desktop-pet": "file:C:/Users/26294/.dsh/plugins/dsh-luxun-desktop-pet"
}且 dsh.profile.bundles 列表包含 dsh-luxun-desktop-pet。
修改插件文件后:host 半变更需重启 dsh web;client 半变更硬刷新浏览器即可。
GitHub:https://github.com/WangRunWei/dsh-luxun-desktop-pet