小舞 · DSH 桌宠:跟着 agent 状态换动作的右下角 SVG 桌宠

前言

在 DSH 里跑 agent 时,界面往往只有日志和工具调用在动,会话是「忙」还是「等你点确认」、这一轮是成功结束还是报错,要靠你自己扫事件。社区插件 dsh-plugin-xiaowu(维护者 jxboop,SkillHub 分类「趣味换装」)把一只原创手绘的兔耳少女桌宠钉在 Web 界面右下角:心情由当前会话真实状态推导,任务完成时会跳起来,并用 WebAudio 现场合成甜声说「做完啦……」,不依赖外部贴图或录音文件。

下面介绍它是什么、能做什么、怎么装,以及使用时要注意的几点。

这是什么

dsh-plugin-xiaowu 是常驻 DSH Web 界面右下角的桌面宠物插件。角色约 112px 高的 chibi 小人,纯手写 SVG(粉发、兔耳、长辫、白兔耳发饰、粉白连衣裙),气质上致敬「斗罗大陆」里的兔耳少女小舞,但为作者原创绘制,不是官方形象或搬运素材。

插件采用 DSH 客户端插件常见的双面结构:Node 侧 lib/index.js 仅用于被 Cordis 扫描到;浏览器侧 lib/client.js 负责占位、读会话状态、绘制与音效。

核心功能

七种心情与触发条件

心情来自当前会话(ctx.sessions.list.current)的状态与事件,不是随机轮播:

心情 触发条件 动作概要 声音
idle 待机 会话空闲 呼吸、眨眼、耳朵轻抖、偶尔甩辫 偶尔轻跳
think 思考 正在跑且尚未发工具 左右轻晃、头顶「?」 —
work 干活 最新事件为 tool/call 抡锤、火星、汗滴 新工具一声 tick
wait 等确认 approval/asked 尚未 decided 举手、「!」、光圈脉动 柔和上行双音
done 完成 一轮 turn/end 成功(running 由真变假) 跳起、爱心与星星 「做完啦……」+ 闪音
oops 出错 lastAgentError 或 turn/end reason=error 垂耳、冒汗、掉泪 下行小三度
sleep 睡觉 90 秒无动静,或尚未打开任何会话 闭眼、Zzz 四声下行摇篮曲

状态机 PetFollow 在 running 由真变假时会先补读事件日志,再区分「做完」与「出错」,避免报错 turn 被当成成功庆祝。

交互与无障碍

  • 点桌宠:蹦一下 +「啵」,泡泡显示「呼哇~好舒服!」。
  • 点右上角喇叭:开关声音,偏好写在 localStorage,键名 dsh-plugin-xiaowu:audio。
  • 点状态胶囊或悬停:展开面板,显示当前心情、工具名、会话标题。
  • 眼睛会跟随鼠标;尊重 prefers-reduced-motion,动画会被压到最短。
  • 浏览器禁止自动播放时,首次点击或按键才解锁 AudioContext;解锁前仍会动,只是无声。

声音设计

完成语「做完啦……」及 hop、tick、chime 等提示音,均由 lib/client.js 的 voice 模块用 WebAudio 振荡器实时合成(三角波主音、FM、气音瞬态、低八度衬底、立体声摆位),整段约 1.9 秒,无采样文件。

不占满屏点击

通过 ctx.slots.inject("shell.overlay", …) 挂在整框浮动层上;层本身点击穿透,仅 .dsh-xw-stage 恢复 pointer-events:auto,不挡住下方操作。

安装与启用

环境要求

项目 要求
DSH 已在跑 dsh web(有 web profile)
Node.js ≥ 18
git 安装时需要
浏览器 支持 Web Audio

安装步骤

官方 README 给出的安装方式为克隆仓库后执行安装脚本(脚本幂等):

git clone https://github.com/jxboop/dsh-plugin-xiaowu.git
node dsh-plugin-xiaowu/install.mjs

PowerShell 5.1 不支持 &&,可用:

git clone https://github.com/jxboop/dsh-plugin-xiaowu.git; node .\dsh-plugin-xiaowu\install.mjs

install.mjs 会:把插件放到 <DSH 主目录>/plugin-src/dsh-plugin-xiaowu;在 <profile>/node_modules 建链接(Windows 为 junction,无需管理员);把包名写入 <profile>/package.json 的 dsh.profile.bundles;并打印重启指引。DSH 主目录默认按 $DSH_HOME → ~/.dsh 推断。

常用参数示例:

node install.mjs --profile web
node install.mjs --dsh-home D:\dsh-home
node install.mjs --source ./本地目录
node install.mjs --help

经过上面的步骤后:

  1. Ctrl+C 停掉 dsh web,再执行 dsh web。
  2. 浏览器 Ctrl+Shift+R 硬刷新。

bundle 列表与插件树只在进程启动时组合,热加载覆盖不到新装的插件,因此必须重启 dsh web。

卸载

node dsh-plugin-xiaowu/uninstall.mjs
node dsh-plugin-xiaowu/uninstall.mjs --purge

前者移除链接与 bundles 注册并保留插件目录;--purge 会删除插件目录。同样需要重启 dsh web。

典型用法

不装插件先看形象

用浏览器直接打开仓库里的 preview.html(preview-zoom.html 为 4.2 倍放大版),可见七个心情状态的渲染效果。

确认当前载入的版本

客户端 bundle 顶部有语义化版本常量 BUILD。载入后控制台会打日志,也可在 DevTools 执行:

window.__DSH_XIAOWU__.build

与 lib/client.js 里的 BUILD 一致即表示当前页跑的是磁盘上的这一版。

开发侧热重载(可选)

若本机装有 dsh-super-injector,改完 lib/client.js 或 lib/index.js 后可用注入器重载包名 dsh-plugin-xiaowu,再刷新浏览器,无需重启 dsh web。无注入器时,改源码后重启 dsh web 并刷新页面即可。

无浏览器的自测:

node --check lib/client.js
node test/harness.cjs

适用场景与注意

适合已经在用 dsh web、希望用轻量视觉反馈感知 agent 待机、思考、调工具、等审批、完成或报错的开发者。趣味向、不占主工作区,声音可关。

安装前建议自行阅读仓库源码与 MIT 许可;插件随当前 DSH 进程与 profile 加载,与你会话里 agent 能做的事同属该进程权限范围,不要在未审阅的情况下在生产环境盲目安装第三方 bundle。

首次使用需用户手势解锁音频;长期无操作会进入 sleep 心情。

结尾

dsh-plugin-xiaowu 把会话事件折叠成七种心情,用原创 SVG 与 WebAudio 合成音完成「看得见、听得见」的回合结束反馈,安装依赖官方 install.mjs 与重启 dsh web。

  • 目录页:https://www.skillhub.cn/plugins/jxboop/dsh-plugin-xiaowu
  • GitHub:https://github.com/jxboop/dsh-plugin-xiaowu
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜