English | 中文
托盘常驻的多平台 AI 账户余额监视器:预置官方平台查询,声明式模板自助接入其余平台,凭据全程密文、不落明文。
如果你同时在 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提供受限算术(乘/除/加/减/取整),执行期无 evalwindows支持从同构额度数组展开多窗口;Kimi Code 这类异构响应由预置平台实现处理- 保存时静态校验;URL 仅允许 HTTPS 且须与
{{baseUrl}}同源(loopback 除外)
可运行示例见 examples/templates/:覆盖单对象取数(字符串数字)、双站 {{baseUrl}}、总额/已用展示、多窗口展开等形态,均可用 quota template test 试查验证。
模板 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 试查验证。
从 Releases 下载 NSIS 安装包(*-setup.exe)安装。
- ARM64(预览版):下载
*-arm64-preview.zip,解压后运行QuotaTray.exe。该包不带安装器,配置与主密钥沿用安装态目录和系统凭据库。 - ARM64(预览版)便携版:下载
*-arm64-preview-portable.zip;数据与便携主密钥均位于程序旁的Data/。
🧪 ARM64 预览版:ARM64 构建已通过交叉编译与产物架构检查,但尚未完成真实 Windows on ARM 设备的完整运行验收。该资产仅供预览和反馈,不应视为稳定支持。
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 --releaseWindows 在仓库根目录运行 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