lrss3 ca89e27084 修复托盘初始化失败:兼容 systray2 v2.x 的 default 导出形态
systray2 v2.x 将 SysTray 类放在 module.exports.default 上而非命名导出,
原解构方式导致启动时报 SysTray is not a constructor,托盘无法常驻。
2026-08-30 23:48:59 +08:00

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)

工作方式

  1. 服务端自动采集(无需打开任何页面):启动时立即执行一轮,此后每小时一轮;
    • 内网平台渠道:在控制台为其配置「平台地址 + 会话 Cookie」后,服务端直接调用平台 API 刷新全部凭据;
    • 按量付费渠道(DeepSeek / OpenAI / 阿里云百炼):服务端直查官方余额接口并换算累计已用;
    • 单渠道采集失败自动在 10 分钟后重试,每轮最多补试 2 次;
  2. plugin-web/ai-usage-collector.user.js 作为备用通道:安装在内网平台页面,把采样数据推送到 /api/usage-data(与直连采集的数据形状一致,落库自动去重);
  3. 浏览器打开 http://127.0.0.1:8788/ 进入控制台:图表随数据变化自动刷新(可关闭)、渠道告警弹页内提示、支持手动即时采集与连通性测试。

托盘与系统通知(Windows)

  • 服务启动后常驻系统托盘图标(绿色眼睛),菜单:打开控制台 / 立即采集全部渠道 / 退出;
  • 启动时弹 Windows 10/11 系统通知;余额告急、用量陡增告警同样走系统通知;
  • 控制台窗口保留用于查看日志;设置环境变量 TOKEN_METER_TRAY=0 可关闭托盘(调试用);
  • 托盘「退出」会优雅关闭(HTTP 服务 → 数据库连接池),Ctrl+C 效果相同。

告警配置

在控制台「⋮ 修改渠道」中为每个渠道设置(均可留空停用):

  • 余额告急阈值:余额/剩余额度低于该值时弹通知「用料告急」;回升到阈值上方后重新武装,不会重复轰炸;
  • 用量陡增阈值:单次采样增量(相邻两次采集的已用差值)超过该值时弹通知,并按当前消耗速率估算余额耗尽时间;
  • 告警记录随 /api/channels/status 返回(alerts[]),控制台轮询到新告警时同步弹页内提示。
  1. 浏览器打开内网凭据页并登录;
  2. F12 → Network → 任选一个 /api/ 请求 → Request Headers → 复制 Cookie: 后的完整值;
  3. 控制台编辑「内网平台」渠道:平台地址填 http://192.168.0.87:8787,API Key 字段粘贴 Cookie,保存;
  4. 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 模式说明。

S
Description
灵图互动内网导航页篡改本。 提供导航页黑暗模式,ai用量监控曲线,Halo 对话转openai请求。
Readme
5.9 MiB
Languages
JavaScript 69.3%
HTML 22.5%
CSS 4.6%
PowerShell 1.6%
Batchfile 1%
Other 0.9%