ca89e27084d49f7ceac54e6ed325c603a22841cf
systray2 v2.x 将 SysTray 类放在 module.exports.default 上而非命名导出, 原解构方式导致启动时报 SysTray is not a constructor,托盘无法常驻。
Token Meter(token_meter)
一个简单直观的名字:给每个 AI 平台的 token / 额度装上电表,用量一目了然。
Token Meter 是一个自托管的 AI 平台用量聚合与监控系统:通过浏览器采集脚本从各个 AI 平台页面抓取额度/余额信息,统一持久化到本地 MySQL,并提供一个 Web 控制台查看每个渠道的用量曲线、余额与消费趋势。
项目结构
Token Meter/
├── token-meter/ # 主后端(项目重心):用量聚合服务 + Web 控制台
│ ├── server.js # Node HTTP 服务,默认监听 127.0.0.1:8788
│ ├── dashboard.html # 「Token Meter · AI 用量控制台」单页前端(由服务直接托管)
│ ├── package.json # 依赖:mysql2
│ ├── 启动Token Meter服务.bat # 一键启动(首次自动 npm install)
│ ├── 停止Token Meter服务.bat # 一键停止
│ └── screenshots/ # 控制台截图
├── plugin-web/ # 浏览器用户脚本(Tampermonkey),详见其 README
│ ├── ai-usage-collector.user.js # Token Meter 采集端:从内网平台抓取用量推送给后端
│ ├── force-dark-mode.user.js # 独立小工具:目标站点强制暗色模式
│ └── halo-openai-bridge.user.js # Halo → OpenAI 桥接的页面端代理
├── halo-openai-bridge/ # 独立工具:把 Halo WebUI 包装成 OpenAI 兼容 API(端口 8787)
└── archive/ # 历史归档(旧版脚本、评审记录)
Token Meter 后端(token-meter)
工作方式
- 服务端自动采集(无需打开任何页面):启动时立即执行一轮,此后每小时一轮;
- 内网平台渠道:在控制台为其配置「平台地址 + 会话 Cookie」后,服务端直接调用平台 API 刷新全部凭据;
- 按量付费渠道(DeepSeek / OpenAI / 阿里云百炼):服务端直查官方余额接口并换算累计已用;
- 单渠道采集失败自动在 10 分钟后重试,每轮最多补试 2 次;
plugin-web/ai-usage-collector.user.js作为备用通道:安装在内网平台页面,把采样数据推送到/api/usage-data(与直连采集的数据形状一致,落库自动去重);- 浏览器打开
http://127.0.0.1:8788/进入控制台:图表随数据变化自动刷新(可关闭)、渠道告警弹页内提示、支持手动即时采集与连通性测试。
托盘与系统通知(Windows)
- 服务启动后常驻系统托盘图标(绿色眼睛),菜单:打开控制台 / 立即采集全部渠道 / 退出;
- 启动时弹 Windows 10/11 系统通知;余额告急、用量陡增告警同样走系统通知;
- 控制台窗口保留用于查看日志;设置环境变量
TOKEN_METER_TRAY=0可关闭托盘(调试用); - 托盘「退出」会优雅关闭(HTTP 服务 → 数据库连接池),Ctrl+C 效果相同。
告警配置
在控制台「⋮ 修改渠道」中为每个渠道设置(均可留空停用):
- 余额告急阈值:余额/剩余额度低于该值时弹通知「用料告急」;回升到阈值上方后重新武装,不会重复轰炸;
- 用量陡增阈值:单次采样增量(相邻两次采集的已用差值)超过该值时弹通知,并按当前消耗速率估算余额耗尽时间;
- 告警记录随
/api/channels/status返回(alerts[]),控制台轮询到新告警时同步弹页内提示。
内网平台直连采集的 Cookie 获取方式
- 浏览器打开内网凭据页并登录;
- F12 → Network → 任选一个
/api/请求 → Request Headers → 复制Cookie:后的完整值; - 控制台编辑「内网平台」渠道:平台地址填
http://192.168.0.87:8787,API Key 字段粘贴 Cookie,保存; - Cookie 过期后采集会失败并在状态行提示「会话已过期」,重复上述步骤更新即可。
快速开始
cd token-meter
启动Token Meter服务.bat :: 首次运行自动 npm install,然后监听 127.0.0.1:8788
健康检查:http://127.0.0.1:8788/health
配置
数据库连接参数按以下优先级读取(找不到时使用默认值 root@127.0.0.1:3306,库名 ai_usage):
- 环境变量:
DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME Docker Projects/HotRollingMySQL/.env或本目录.env中的MYSQL_*字段
其他环境变量:AI_USAGE_BRIDGE_PORT(端口)、AI_USAGE_BRIDGE_MAX_BODY_BYTES、AI_USAGE_STALE_THRESHOLD_MS(停止更新判定阈值,默认 1.5 个采样周期)、AI_USAGE_RETRY_DELAY_MS(采集失败重试间隔,默认 10 分钟)、AI_USAGE_MAX_RETRIES(每轮最大补试次数,默认 2)、TOKEN_METER_TRAY(设为 0 关闭托盘)。
主要 API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
健康检查 |
| POST | /api/usage-data |
采集脚本推送入口(兼容旧 /api/history/*) |
| GET | /api/channels / POST / PUT / DELETE |
渠道管理(删除会级联清理历史点) |
| POST | /api/channels/:id/collect |
手动即时采集(10 秒冷却) |
| POST | /api/channels/:id/test |
连通性测试(按计费模式查余额或探测 /models) |
| GET | /api/usage、/api/usage/summary |
用量查询 |
halo-openai-bridge(独立工具)
与 Token Meter 无关的独立桥接:在 Halo WebUI 页面安装 plugin-web/halo-openai-bridge.user.js,再运行本目录的 server.js(启动桥接服务.bat),即可把 Halo 内的模型通过 http://127.0.0.1:8787/v1 以 OpenAI Chat Completions 兼容格式(SSE 流式、tool_calls)对外提供。详见 调试启动桥接服务.bat 的 debug 模式说明。
Languages
JavaScript
69.3%
HTML
22.5%
CSS
4.6%
PowerShell
1.6%
Batchfile
1%
Other
0.9%