aemeath-mini
DSH Web GUI 内的桌宠「aemeath-mini」(Q版像素爱弥斯):按工具调用/结果做出反应,每日/深夜问好,语音气泡 + 屏幕自主移动。
功能一览
| 触发 | 反应 | 默认动作 GIF | 默认气泡(可爱风) | 默认语音(内容) |
|---|---|---|---|---|
| 推理类工具调用(pwsh/write/edit/web_search/fetch/todo_write/update_goal/get_goal 等) | reason | 08-推理 | 正在努力中… | 无 |
| 思考类工具调用(read/glob/grep) | think | 09-眯眼 | 嗯…在想呢… | 无 |
| 等待类工具调用(skill/ask_user_question) | wait | 07-等待 | 等你哦… | 请求权限 |
| 子任务工具完成(subagent/workflow/ralph 成功) | wave | 04-挥手 | 你好呀! | 你好呆星 |
| 工具失败 / 结果含错误 | question | 06-疑问 | 阿列夫一出现了… | 阿列夫一出现了 |
| 回合完成(最终任务完成) | celebrate | 05-庆祝 | 耶!成功啦! | 任务完成了 |
| 后台任务完成 | 无反应(celebrate 仅回合完成触发) | 保持当前 | — | — |
| 后台任务失败 / LLM 请求错误 | question | 06-疑问 | 咦?出错了… | 阿列夫一出现了 |
| 等待批准(回合被阻塞) | wait | 07-等待 | 等你哦… | 请求权限 |
| 回复文本 / 日常无任务 | idle | 01-空闲 | …… | 无 |
| 每日启动问好 | wave | 04-挥手 | 你好呀! | 早上好,呆星… |
| 深夜提醒(≥22:00,独立开关) | wave | 04-挥手 | 夜深了,该休息啦~ | 无 |
| 屏幕自主移动 | moveLeft/moveRight | 02-闲逛A / 03-闲逛B | 出去走走~ | 无 |
- 语音:默认静音(
voice.enabled=false);文件名剥离「名称-日期时间-」前缀后即语音内容;开启后按状态绑定,气泡自动跟随语音内容。 - 气泡:每个事件独立文案,默认可爱语料池,设置里逐事件自定义。
- 大小:设置里三档 小(110) / 中(160) / 大(220) px。
- 自主移动:随机间隔/方向/时长/速度左右移动,到屏幕边缘自动停下,
prefers-reduced-motion时停用。 - 全部自定义项集中在 Harness 设置页新增的「aemeath-mini」一栏,live 生效。
安装
从 GitHub 安装(推荐)
dsh plugin --profile web add "https://github.com/xushengkai13/aemeath-mini"
# 或直接安装 Release 里的 tgz:
dsh plugin --profile web add "https://github.com/xushengkai13/aemeath-mini/releases/download/v0.1.0/aemeath-mini-0.1.0.tgz"
# 然后重启 web(bundle 层在启动时合成):
# 停止 web → 重新 dsh start(或你的启动方式)从本地目录开发
dsh plugin --profile web add "E:\userstar\Desktop\harnespets\aemeath-mini"
# 然后重启 web(bundle 层在启动时合成):
# 停止 web → 重新 dsh start(或你的启动方式)装完重启后右下角出现 aemeath-mini:点击打开菜单(🔇 静音 / 🙈 隐藏 / 👋 打招呼),拖拽可移动(位置记忆),会自动左右走动,当日首次启动会问好。
验证
1. 完成一个回合(比如跑一个成功命令)→ 宠物 05-庆祝 + 气泡「耶!成功啦!」;开语音后播放「任务完成了」(庆祝仅在回合完成时触发;后台任务成功/普通工具成功不再庆祝)。 2. 跑一个失败命令(非零退出)→ 06-疑问 + 气泡「阿列夫一出现了…」+ 语音「阿列夫一出现了」。 3. 设置里改大小/动作/气泡/语音 → live 生效(无需重启)。 4. 重启 web → 当日首次问候(挥手 + 气泡 + 问候语音);晚上 22 点后开启深夜提醒开关另有提醒。
语音管理
- 目录:
<dshHome>/data/aemeath-mini/voice/(上传目标 + 扫描源;首次运行自动从 bundle 种子复制内置 6 条)。 - 上传:
POST /aemeath-mini/voice/upload(x-filename头 = URL 编码文件名,body = 音频二进制)。 - 列表:
GET /aemeath-mini/voice;试听GET /aemeath-mini/voice/<file>;删除DELETE /aemeath-mini/voice/<file>。
目录结构
aemeath-mini/
├── package.json # bundle 契约(dsh.bundle + dsh.client)
├── cordis.patch.yml # 向 web 组合挂载
└── .dsh-plugin/
├── index.mjs # Node half:事件→反应 + 配置 + 路由 + 持久化 + SSE
├── client.js # client half:GIF/拖拽/移动/气泡/语音/问好(__ModuleLoader__)
├── src/ # routes/assets/config/session-events(纯函数,可单测)
└── assets/
├── gifs/ # 9 张动作 GIF(打包分发)
└── voice/ # 6 条内置语音种子(首次运行拷入数据目录)