我给 Magpie 做了个 macOS 桌宠:106 段动画,请求一多就亮灯

一个很小但很实用的想法:如果 AI 网关正在忙,桌面上的鱼能不能先告诉我?

项目地址:github.com/wolfvoid/magpie-DaFeiYu

很多桌宠展示的是"AI 在做什么"。但真正每天用多模型、多账号的人,往往还有两个更朴素的问题:现在到底有几个请求在跑?哪个账号在工作?额度还剩多少?

于是我给本地 AI 网关 Magpie 做了一只 macOS 桌宠:magpie-DaFeiYu(蓝色大肥鱼)。

演示图中的账号与额度均为合成数据,角色动画来自 PC2005-cloud/dsh-pet。

一、为什么不是再做一只 Codex 桌宠?

Codex 桌宠通常绑定某个客户端或某个模型,任务是它唯一的信息源。

但 Magpie 更像一个本地模型网关:请求可以来自不同客户端,背后也可能接 DeepSeek、OpenAI、Claude 等多个供应商和多个账号。它天然掌握了更完整的"网关视角"。

所以这个项目的定位很明确:

  • Mac 专用:面向 Apple Silicon,使用透明悬浮窗;
  • 接入 Magpie:读取本机网关的并发、路由和额度接口;
  • 不绑定 Codex,也不需要 DSH:只看经过本机 Magpie 的请求;
  • 只读、本地:不调用模型,不读聊天内容,不上传提示词。

换句话说,它不是"AI 任务监视器",而是一个桌面上的 Magpie 状态灯。

二、六个最有用的细节

1. 一个请求,一盏灯

桌面底部有一排小灯泡。进行中的请求会亮灯,空闲时熄灭;多个请求并发时,灯泡会逐个亮起。

这比一行"正在处理"更有信息量:你不用打开面板,也能知道现在是轻负载还是已经排队。

2. 订阅显示百分比,API 显示余额

这是我很在意的一点。

  • 订阅账号有周期额度,适合显示剩余百分比;
  • DeepSeek 等按量付费的 API,没有"百分比"这个概念,应该直接显示钱包余额。

所以项目把它分成两套读法:subscription → %,balance → 金额。没有余额数据时就显示待刷新,不硬编一个百分比出来。

3. 多账号横排,正在工作的账号高亮

账号额度徽章横向排列在桌宠底部。账号多时可以滚动,不会把主体越挤越高。

正在实际处理请求的账号使用珊瑚红,其他账号保持低饱和蓝色。这样一眼就能看出"当前是谁在扛流量"。

4. 106 段动画,不只是随机待机

项目保留并校验了 106 段透明 WebM 动画:吃饭、玩耍、施法、魔术、放烟花都有。

动画调度也不是简单随机:

  • 按动作类别加权;
  • 避开最近 15 个动作,降低重复感;
  • 工作状态连续播放两段后,穿插一个轻动作;
  • 请求成功时只触发一次烟花,避免同一事件反复庆祝;
  • 支持手动切换动作和暂停动态。

5. 可以真的贴在屏幕边缘

透明窗口最怕"看起来很小,实际占一个巨大的矩形"。这个项目允许窗口越过屏幕边界,所以可以把桌宠拖到右边、左边,甚至让部分动作自然出画。

想找回它时,可以从菜单栏重新居中。

6. 隐私边界写清楚

它只访问 127.0.0.1:3425 上的 Magpie 本地接口,支持自定义端口。

不会读取 Codex 数据库,不读取聊天内容,不保存账号邮箱或提示词。账号在内存中经过每次启动重新生成的 HMAC 盐处理,只用于把额度卡片和当前路由对应起来。

三、技术实现:状态是怎么变成动作的

请求状态

并发状态每 2 秒读取一次 /v1/magpie/concurrency,核心判断可以简化成:

复制代码
if (data.requests > data.waiting) {
  state = 'thinking';   // 正在处理模型请求
} else if (data.waiting > 0) {
  state = 'waiting';    // 请求排队
} else if (data.tools > 0) {
  state = 'working';    // 等待客户端工具结果
} else {
  state = 'idle';
}

灯泡数量对应进行中的请求数;账号高亮则进一步读取 /v1/magpie/trace,只挑选 phase 为 upstream 且尚未完成的尝试。

额度与余额

额度数据每 30 秒读取一次 /v1/magpie/quotas/cards。订阅卡取 used 并转换成剩余百分比;余额卡只接受带币种的合法金额字符串,避免把异常响应显示成假数字。

动画

素材是 VP9 编码的透明 WebM。应用启动时读取动作目录,AnimationDirector 根据 Magpie 状态、最近播放记录和类别权重选择下一段动画。

窗口本身使用 Electron 的无边框透明窗口,并在 macOS 上隐藏 Dock 图标,只保留菜单栏入口。打包时只保留中英文语言资源,压缩 Electron 自带的冗余文件,但不压缩、不删减动画素材。

四、安装体验

要求:Apple Silicon Mac(M 系列)+ macOS 12 及以上。不支持 Intel Mac、Windows 或 Linux。

  1. 先启动本机 Magpie;
  2. 从 Releases 下载 macOS arm64 安装包;
  3. 解压,把「蓝色大肥鱼.app」拖进「应用程序」;
  4. 从菜单栏启动。

也可以在 Magpie 中安装页面插件:

复制代码
magpie plugin add github:wolfvoid/magpie-DaFeiYu

页面插件会在 Magpie 侧边栏提供使用说明,但不会自动安装桌面 App,悬浮窗仍需单独下载。

需要说明的是:App 目前只有本地 ad-hoc 签名,没有 Apple Developer ID 公证。若 macOS 拦截,请先核对下载来源,再到「系统设置 → 隐私与安全性」选择「仍要打开」,不要直接关闭 Gatekeeper。

五、它能知道什么,不能知道什么

能看见:请求数、排队状态、当前路由到的账号、Magpie 能提供的额度和余额。

看不见:改了哪个文件、执行了哪条命令、是否在等你审批、整个任务何时结束。

这不是能力缺失,而是刻意划出的边界。桌宠不是任务追踪器,也不应该假装知道网关之外的事情。

六、开源地址与致谢

项目地址:github.com/wolfvoid/magpie-DaFeiYu

新增代码采用 MIT License;角色动画、提示词和源视频不属于 MIT,不能商用。

如果这个项目对你有用,欢迎去 GitHub 点个 Star、提 Issue,或者告诉我你希望它接入哪些新的本地状态。也欢迎把它转给身边正在用 Magpie 的 Mac 用户。

GitHub:https://github.com/wolfvoid/magpie-DaFeiYu

相关推荐
还好还好不是吗4 小时前
我把开源项目托管给 AI 了:一句话提需求,AI 自己开发、自己测试、自己提 PR
electron
donecoding4 小时前
Apple 芯片 Mac 的终端为什么还在跑 Intel?从 tmux 查起
macos
miofly5 小时前
Claude Sonnet 5自主选药选坐标完成小鼠脑部手术,更强模型拒绝执行
开源·github
hhhjhl6 小时前
开源鸿蒙平台 KMP_CMP 三方库「Clikt」适配全流程
华为·开源·harmonyos
小杨互联网6 小时前
Rust 现代 CLI 工具离线镜像合集
开源·工具·离线镜像
DevLoom_9 小时前
macOS 27 升级后 Time Capsule 无法备份?AFP 协议废弃后的完整解决方案与备份迁移教程
macos·时间机器·macos27·macos 27备份·macos实用技巧
IvorySQL9 小时前
开源数据库进校园| 11 月 3 日,IvorySQL 校园行走进浙大宁波校区:从 PostgreSQL 扩展生态到 AI 实战
数据库·postgresql·开源
金海星科技9 小时前
船舶交通管理中心的人工智能值守:从“听、说、读、写“看人机协同
人工智能·macos·xcode
深蓝AI10 小时前
Ghostty 1.4 七个月打磨:ASCII 解析快 5.7 倍、终端能放动画,SSH 乱码终结
程序员·开源