Skip to content

Repository files navigation

QuotaTray

English | 中文

托盘常驻的多平台 AI 账户余额监视器:预置官方平台查询,声明式模板自助接入其余平台,凭据全程密文、不落明文。

OS License

为什么需要 QuotaTray

如果你同时在 DeepSeek、Kimi、OpenRouter 等多个 AI 平台有账户,余额和配额散落在各家控制台里,查看需要逐个登录网页。

QuotaTray 把这件事压缩成一眼:常驻系统托盘,图标即余额状态,悬停或打开菜单即可看到全部平台的余额与已用百分比。

与其他余额工具的关键差异是凭据安全

  • API Key 在普通配置中以 AES-256-GCM 密文存储,加密它的机器主密钥由操作系统凭据库托管,机器主密钥永不导出
  • 普通配置文件即使被拷走(备份、网盘同步、共享屏幕),离开本机也无法解密;显式生成的跨机器迁移包携带一次性迁移密钥,须按明文凭据同等保护;
  • 项目只做"读余额",不写入任何 CLI 工具的配置文件——这是凭据可以全程密文的前提。

功能一览

托盘与界面(桌面端)

  • 托盘圆环图标:分层叠弧展示各条目,余额低于阈值变色告警
  • 托盘菜单逐条展示余额/已用百分比与更新时间,峰谷定价另起两行
  • 悬停详情面板:余额优先展示,可快速切换圆环数据源账户与计价模型
  • 主窗口卡片列表:添加/编辑条目、模板编辑器(带校验与试查)、峰谷定价结构化编辑
  • 设置 → 数据管理:配置跨机器导出/导入(高敏感文件确认)与一键清空全部数据(5 秒倒数双重确认)
  • 明暗主题三态(浅色/深色/跟随系统)、中英双语三态、自定义标题栏
  • keep-last-good:查询失败时在时限内继续展示上次成功结果;重启后快照先行,无空窗期
  • Windows ARM64(预览版):提供普通 zip 与便携 zip,GUI/CLI 均为 ARM64 原生二进制
  • 便携版(Windows x64 / ARM64 预览版):数据全部随身于 Data/ 目录,首次运行安全确认,删除目录即卸载

命令行(quota-cli,与 GUI 平级共享同一核心)

quota natives                  # 列出预置平台
quota add                      # 交互式添加供应商(掩码输入 key)
quota query                    # 并行查询全部启用条目,表格输出
quota query --watch            # 轮询模式
quota pricing show <id>        # 查看条目峰谷定价与当前时段判定
quota template test --json     # 模板静态校验 + 真实试查
quota config export <路径>     # 导出完整配置迁移包(交互确认)
quota config import <路径>     # 整体导入并用本机主密钥重加密
quota clear --yes              # 清空全部用户数据(非交互必须显式 --yes)
quota update --check           # 检测新版本
  • 全命令支持 --json 输出,供脚本消费
  • 退出码三分:0 全部成功 / 1 存在确定性失败 / 2 仅瞬时失败
  • 文案中英双语三态(--lang zh|en|system

峰谷定价

  • 按「周几 + 时间段」划分高峰/空闲时段,两档各三价:缓存命中/未命中/输出(每 MTokens)
  • DeepSeek 官方峰谷价格随版本内置,条目可字段级自定义(留空即回退预置)
  • 自定义模型库:按平台增补模型及其价格,条目定价可选用
  • 托盘与 CLI 均展示当前时段判定与下次翻转时间

更新检测

  • 定期检测 GitHub release 新版本(频率与时刻可配,托盘菜单提示新版本行)
  • 手动触发检测与安装包下载(下载到系统下载目录,不自动安装)

预置平台

平台 站点 说明
DeepSeek 单站双币,余额接口返回币种
SiliconFlow 国内站 / 国际站 CNY / USD
OpenRouter remaining = credits − usage
Kimi Open Platform 国内站 / 国际站 余额 + 代金券/现金拆分展示
Kimi Code kimi.com/code / kimi.ai/code 5 小时 + 周额度窗口,RFC3339 重置时间
智谱 / Z.ai 通用 API 国内站 / 国际站 按量计费余额,Bearer API key
智谱 / Z.ai Coding Plan 国内站 / 国际站 套餐用量(多窗口),裸 key
StepFun 顶层 balance,CNY
Novita AI availableBalance ÷ 10000 = USD
MiniMax Coding Plan 国内站 / 国际站 5h+周剩余百分比归一已用
Claude 订阅 Pro/Max 多窗口用量,凭据读本机 Claude Code 登录
Codex(ChatGPT 订阅) Plus/Pro 双窗口用量,凭据读本机 Codex CLI 登录
Gemini Code Assist 按模型组剩余配额,凭据读本机 Gemini CLI 登录
Grok 订阅 SuperGrok credits 用量,凭据读本机 Grok CLI 登录

订阅型平台(Claude/Codex/Gemini/Grok)无需填写 API key:查询时自动只读本机已登录官方 CLI 的凭据文件,不写入、不导出。Kimi Code 使用 MoonshotAI 官方客户端采用的用量端点;智谱 / Z.ai 与订阅两家的查询端点及凭据文件格式均未收入公开 API 文档(社区广泛使用的稳定契约),其余为官方公开接口。自动化测试全 mock,不依赖真实账号。未预置的平台用声明式模板接入(见下节)。

自定义查询:声明式模板

多数平台的余额接口是"一个 GET + 鉴权头 + 取字段 ± 算术",用 JSON 描述即可接入,无需写代码:

{
  "request": {
    "url": "{{baseUrl}}/v1/user/info",
    "headers": { "Authorization": "Bearer {{apiKey}}" }
  },
  "extract": {
    "remaining": "$.data.totalBalance",
    "unit": { "const": "CNY" }
  },
  "transforms": [
    { "op": "multiply", "field": "remaining", "by": 0.01 }
  ],
  "windows": []
}
  • extract 用 JSONPath 子集($.a.b[0])取值或直接给常量
  • transforms 提供受限算术(乘/除/加/减/取整),执行期无 eval
  • windows 支持从同构额度数组展开多窗口;Kimi Code 这类异构响应由预置平台实现处理
  • 保存时静态校验;URL 仅允许 HTTPS 且须与 {{baseUrl}} 同源(loopback 除外)

可运行示例见 examples/templates/:覆盖单对象取数(字符串数字)、双站 {{baseUrl}}、总额/已用展示、多窗口展开等形态,均可用 quota template test 试查验证。

自定义查询:JS 脚本

模板 DSL 的受限算术覆盖不了的复杂平台(字段间运算、循环聚合、响应重组),用 JS 脚本兜底——QuickJS 沙箱内运行 {request, extractor} 两阶段协议,HTTP 由宿主执行:

function request() {
  // 返回请求描述;{{apiKey}} / {{baseUrl}} 为注入占位(代码字符串层面替换,脚本可安全分享)
  return { url: "{{baseUrl}}/v1/quota", headers: { "Authorization": "Bearer {{apiKey}}" } };
}
function extract(resp) {
  // resp = 已解析的响应 JSON;返回单对象或多窗口数组(UsageData 字段形状)
  return [{ plan_name: "week", used: resp.week.used, unit: "%", reset_at: Date.parse(resp.week.reset) }];
}

沙箱限制:内存 16MiB、单次执行 5 秒 CPU 上限、无网络/文件系统;URL 安全与脱敏规则与模板一致(错误消息中的回显密钥统一打码)。可运行示例见 examples/scripts/quota script test 试查验证。

安装

Windows x64

Releases 下载 NSIS 安装包(*-setup.exe)安装。

Windows on ARM

  • ARM64(预览版):下载 *-arm64-preview.zip,解压后运行 QuotaTray.exe。该包不带安装器,配置与主密钥沿用安装态目录和系统凭据库。
  • ARM64(预览版)便携版:下载 *-arm64-preview-portable.zip;数据与便携主密钥均位于程序旁的 Data/

🧪 ARM64 预览版:ARM64 构建已通过交叉编译与产物架构检查,但尚未完成真实 Windows on ARM 设备的完整运行验收。该资产仅供预览和反馈,不应视为稳定支持。

便携版(Windows x64 / ARM64 预览版)

Windows x64 下载 *-x64-portable.zip;ARM64(预览版)下载 *-arm64-preview-portable.zip。解压到任意可写目录运行,数据全部保留在旁边的 Data/ 目录;删除整个目录即卸载。首次运行会展示安全确认。包内含 GUI (QuotaTray.exe)与 CLI(quota.exe),共用同一份 Data/ 数据。

⚠️ 便携版安全提示:便携版会将用于解密凭据的主密钥保存在 Data/portable.key。虽然配置中的凭据仍以 AES-GCM 密文存储,但密钥与密文位于同一便携目录,因此整个 Data/ 目录的保密级别等同明文凭据。请勿将其上传网盘、提交版本库或交给他人;若存储介质遗失或目录泄露,请立即轮换其中使用的全部 API Key。

从源码构建

要求:Rust stable、Node.js、pnpm。

# 桌面端安装包(apps/quota-desktop/dist 下产出 NSIS)
cd apps/quota-desktop
pnpm install
pnpm tauri build

# 仓库根一键组装 x64 setup + portable
cd ../..
.\package

# WoA 普通/便携双 Preview zip(需 ARM64 MSVC + clang 工具链)
.\package -Arch arm64

# 仅 CLI
cargo build -p quota-cli --release

清理开发目录

Windows 在仓库根目录运行 clean,不传级别时可交互选择:

.\clean 1              # 轻量:增量/Vite 缓存与生成物
.\clean 2              # 标准:再清理完整 target/debug,保留 release
.\clean 3              # 深度:完整 target + node_modules + 生成物
.\clean 3 -WhatIf      # 只预览目标,不删除

清理器只操作仓库内的固定白名单路径,不会删除源码、.git、开发密钥、 .zcode 或未提交文件。Level 3 后需在 apps/quota-desktop 重新执行 pnpm install,Rust 依赖也会在下次构建时完整重编译。

安全设计

密钥分层如下:

系统凭据库(Windows 凭据管理器)
  └─ 主密钥:32 字节纯随机,首次运行生成,永不落盘明文
        │ AES-256-GCM
        ▼
~/.quotatray/config.json 中的凭据字段(v1:<base64>,带版本号)
  • 主密钥每台机器独立,与源码零关联
  • 密文格式含版本号,未来算法升级可平滑迁移
  • GCM 认证标签保证完整性,篡改即解密失败
  • 日志与错误信息中的凭据一律掩码显示(sk-****<尾4位>
  • 前端/GUI 永不接收明文凭据:查询在本地后端完成,GUI 只展示结果;编辑凭据走"写入专用"通道,不回显

三种数据形态的保密级别全局对照:

形态 主密钥位置 保密级别 处置建议
安装版(默认) 系统凭据库,不落盘 配置文件离开本机不可解
便携版 Data/portable.key,与凭据密文同目录 整个 Data/ 等同明文凭据 勿上传网盘/入库/外传;泄露即轮换全部 API Key
迁移包 .qtray-export 每次导出新一次性密钥,随包携带 等同明文凭据 迁移完成后删除

跨机器迁移使用 .qtray-export 私有二进制容器。core 每次导出都会生成新的 32 字节一次性迁移密钥,将源凭据转写并整体认证加密;导入时再转写到目标机器 主密钥。CLI 使用 quota config export/import;桌面端入口位于「设置 → 数据 管理」。两端默认均要求显式确认,自动化场景可在 CLI 使用 --yes

清空全部数据(桌面端「设置 → 数据管理」或 quota clear)会删除全部供应商 条目、凭据密文、定价配置与查询历史,但保留主密钥与应用偏好——它是转让、 排障前的就地清理手段,不构成任何"安全擦除"承诺(文件系统层的残留不在范围)。

已知边界:同机同用户进程读取系统凭据库不在防御范围(与浏览器保存密码同一水位);内存攻击与本机恶意软件超出桌面工具防线。

路线图

  • QuickJS 沙箱脚本查询({request, extractor} 协议,内存/CPU 限额,无网络无文件系统)
  • 更多预置平台
  • 更新自动安装

致谢

余额查询的统一结果模型与错误双轨分类参考了 cc-switch(MIT 许可)的实践,感谢其开源。

许可证

MIT © 2026 ONEGAYI

About

托盘常驻的多平台 AI 账户余额监视器:8 预置平台 + 声明式模板自助接入,凭据全程密文 | Tray-resident multi-platform AI account balance monitor: 8 built-in platforms + declarative templates, credentials always encrypted

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages