Skip to content

Repository files navigation

AIQuotaMonitor · AI 配额监控

build license: MIT release

中文文档 | English

Windows 11 桌面小工具:把多个 AI 套餐的配额(5 小时用量、7 天用量、30 天用量……)集中显示在一个无边框半透明的小部件里。

大多数 AI 供应商没有配额 API,所以本工具的做法是:给每个服务配一个网址,用内置 WebView2 定期打开该页面(通常是已登录状态),按你在设置界面里配置的提取规则从页面上抓取配额数值。规则默认是「按标签自动定位」——只要标签和页面上显示的文字一致(如「每周使用额度」)就行,不需要任何 CSS 知识;高级用户也可以填 CSS 选择器精确控制。全程图形化配置,不需要手改任何文本文件。

演示

纵向布局

横向布局

v1.6.0 更新

  • 同一供应商多账号:服务勾选「独立会话(同站点多账号)」后使用独立的浏览器 profile 与 Cookie 存储,同一供应商的多个账号可并排监控、互不串号;未勾选的服务维持共享 profile,同一域名仍只需登录一次。
  • 赠送用量重置(Codex「Usage limit resets」/ 智谱「用量重置额度」):卡片显示可用次数与最早到期时间(24 小时内变黄);智谱每条的到期时间在「重置管理」弹层里,抓取时自动点开读取再关闭;已过期次数自动隐藏。
  • 英文月名日期显式解析Oct 4, 9:57 AM 这类无年份英文日期不再依赖不可靠的 BCL 解析。

完整说明见 v1.6.0 Release Notes

功能一览

  • 无边框圆角深色半透明小部件,按住空白处拖动,位置自动保存;置顶可开关;不透明度可调;背景色可设定(取色对话框含屏幕取色器;Win11 毛玻璃下该色作为 tint,alpha 决定透出程度);滚轮整体缩放界面(含文字),标题栏 100% 按钮一键还原
  • Windows 11 原生化:小部件用 DWM Acrylic 毛玻璃、设置/历史/取色窗口用 Mica,深色沉浸、圆角与系统 8px 对齐;图标按钮换 Segoe Fluent Icons(刷新/暂停/关闭/警告),hover/pressed 分层反馈;Win10 自动降级为实色圆角
  • 每个服务一张卡片:主题色圆点 + 名称(Ctrl+点击直接在浏览器打开官方用量页面,按住 Ctrl 时名称变链接样式)+ 最后刷新时间(订阅行右侧小字,今天显示时分、跨天带日期);每条配额一行:标签 + 百分比 + 细进度条 + 用量明细/重置时间
  • Alt+拖拽排序卡片:虚影悬浮窗自由跟手(可拖出窗口),其他卡片 150ms 丝滑让位,顺序持久化
  • 全局颜色主题:进度条按 4 种语义状态着色——正常(主题主色)、接近基准(用量距时间基准线 10 个百分点以内;无基准时 ≥60%)、超出基准(用量跑在时间前面)、90% 告警(用量 ≥90% 优先于其他状态)。内置蔚蓝/翡翠/紫罗兰/落日/石墨 5 套预设一键切换,也可选「自定义」逐色修改(颜色选择对话框带屏幕取色器),见下文「颜色主题」
  • 时间基准线:进度条上的竖线 = 按时间均匀消耗此刻应到的位置(5 小时窗口过半在 50%,7 天窗口第 4 天在 57%)。白芯深边 = 用量未超线(余量健康);红芯白边 = 用量已超线(用得偏快,注意省着用);悬停进度条有文字说明。窗口长度从规则标签推断(5 小时/5-hour→5h、7 天//week→7 天、/month→30 天),标签不含窗口信息或没有重置时间则不显示;可在设置里全局开关
  • 纵向罗列 / 横向铺开两种布局,窗口自动适应内容大小
  • 定时自动刷新(默认 5 分钟,全局/单服务均可配),后台顺序执行不卡 UI;页面加载超时可配(全局设置,默认 30 秒,渲染慢的站点调大)
  • 标题栏 ⟳ 强制刷新全部服务;每张卡片右上角也有 ⟳,只刷新该服务;刷新期间显示「刷新中…」且按钮禁用,点击一定排队执行不丢失
  • 暂停抓取:标题栏 ⏸ 全局暂停(也可在右键/托盘菜单勾选「暂停抓取」),每张卡片的 ⏸ 单独暂停该服务——暂停期间完全不访问供应商(规避风控/敏感时期),但倒计时与基准竖线仍每分钟本地更新,已有数据保留显示(卡片置灰标记「已暂停」);恢复后立即补抓。设置里也可按服务勾选
  • 右键菜单 + 系统托盘菜单:立即刷新 / 置顶 / 布局切换 / 设置 / 显示隐藏 / 退出,托盘双击显示/隐藏
  • 异常状态:「需要登录」卡片带去登录按钮(弹出内置浏览器手动登录,关闭后自动重新抓取);抓取失败显示红字错误,tooltip 有完整信息
  • 陈旧数据回退:刷新失败(timeout、导航失败等)但此前成功抓过时,卡片保留显示上次数据并加琥珀色小字「⚠ 刷新失败,当前显示 HH:mm 的数据」(hover 看完整错误);重启后立即显示上次会话数据并同样标记,首次成功刷新自动替换。「需要登录」仍显示专属卡片,不掩盖重新登录的行动
  • 用量历史:每次成功刷新按配额行记录一条百分比样本(仅存本机 history.jsonl,保留 30 天、超 7 天自动稀释)。点击配额行打开历史窗口:24 小时 / 7 天 / 30 天趋势图(重置锯齿分段绘制)+ 当前 / 区间增量 / 速率 / 按近 24 小时速率预测重置时到几 %,可导出 CSV。全局设置可关闭记录
  • 配额阈值提醒:任一配额向上跨过阈值(默认 90%,可调)时弹托盘气泡,仅跨过瞬间一次
  • 开机自启(全局设置可选,当前用户 Run 注册表项);窗口位置掉出所有屏幕时自动夹回/居中
  • WebView2 默认使用共享用户数据目录(%LOCALAPPDATA%\AIQuotaMonitor\WebView2UserData),同一域名只需登录一次;服务在设置里勾选「独立会话(同站点多账号)」后改用独立 profile 与独立 Cookie 存储,同一供应商可挂多个账号并排监控(各自登录一次)
  • 赠送重置次数(Codex「Usage limit resets」、智谱「用量重置额度」):卡片显示可用次数与最早到期时间(24 小时内变黄提醒);智谱每条的到期时间在「重置管理」弹层里,抓取时自动点开读取再关闭;已过期的次数自动隐藏

快速开始

  1. 下载最新版 AIQuotaMonitor.exe(自包含单文件,不依赖 .NET 运行时,唯一要求是系统装有 WebView2 Runtime——Windows 11 一般自带)。
  2. 直接双击运行。首次启动会在 exe 同目录生成 config.json(内含一个未启用的示例服务)。
  3. 在小部件上右键 → 设置…,把示例服务改成你的服务,或点「添加」新建。

建议把 exe 放在一个固定目录(如 D:\Tools\AIQuotaMonitor\)再运行,配置文件会保存在 exe 旁边。

从旧版本升级:先从托盘退出程序,再用新版 exe 替换旧 exe;保留同目录的 config.json。登录态和历史数据保存在 %LOCALAPPDATA%\AIQuotaMonitor\,无需迁移。

如何添加一个服务(完整示例)

假设你在用某个 AI 服务,它的控制台有个用量页 https://console.example.com/usage,页面上显示「本周期已用 42%」和「12 / 50 次 · 3 天后重置」。

  1. 先登录:设置里添加服务并保存后,卡片会显示「需要登录」,点「去登录」在内置浏览器里登录一次即可(之后共享登录态)。
  2. 配服务
    • 名称:示例 AI
    • 网址:https://console.example.com/usage
    • 额外等待秒数:10(这是超时上限而非死等——工具会每 0.5 秒轮询页面,任一定位文本出现就立即开始抓取,快的话 1 秒就完成;渲染慢的 SPA 会等到上限)
    • 未登录指示选择器:可选。如果未登录时页面上总有「登录」按钮,就填它的选择器(如 .login-btn),命中即判定未登录
  3. 配规则(点「添加」,CSS 选择器全部留空即可):
    • 规则一:标签 5 小时用量,类型 百分比,正则点预设「百分比 %」→ (\d+(?:\.\d+)?)\s*%
    • 规则二:标签 30 天用量,类型 用量对,正则点预设「a/b 用量对」→ (\d+)\s*/\s*(\d+)。重置时间不用配,会自动识别页面上的「重置时间:…」
  4. 调试:选中该服务,点「测试抓取」。下方会显示每条规则抓到的原始文本和解析结果——标签没命中就把标签改成页面上的一字不差的文字;数值不对就根据原始文本调整正则,直到解析正确。
  5. 保存后立即生效:重建卡片、重启定时器;只有新增或配置有变化的服务会重新抓取,没动过的服务保留现有数据和刷新节奏(想强制全部刷新,点小部件上的 ⟳)。

工作原理(自动定位模式):工具在页面上找到显示「标签」文字的元素(如「每周使用额度」标题),然后从它向上找到包含数值的容器区域(通常就是那张用量卡片),在区域内用正则取第一个匹配的数字,并在同一区域内自动识别重置时间(「重置时间:…」「…后重置」「将于…重置」「Resets in …」都能认)。搜索范围包括主文档和所有同源 iframe;如果还是全部抓不到,说明内容可能在跨域 iframe 里(同源策略导致 JS 读不到,阿里云控制台就是这样——登录窗口里能看到内容是因为渲染不受限),此时工具会自动收集这些 iframe 的地址、直接导航过去再抓一遍。标签就是定位锚点,所以标签必须与页面显示文字一致

多语言页面:有的网站会按浏览器语言显示不同文字(比如你的浏览器里是「5 小时用量」,工具内置浏览器里可能是「5-hour usage」)。工具的内置浏览器已设置为中文环境,多数网站会直接渲染中文;如果个别网站仍显示英文,在规则的「定位文本」里填多个别名、用 | 分隔即可,如 5 小时用量|5-hour usage,命中任意一个都算(此时标签保持中文,只影响卡片显示名)。

何时需要 CSS 选择器(高级):当同一个标签文字在页面上出现在多个区域、或标签与数值不在同一容器时,可以填写 CSS 选择器把范围精确锁定到目标元素(浏览器 F12 右键元素 → 复制 selector)。填了选择器就走「选择器模式」:正则只在该元素文本内匹配。

规则字段说明

字段 说明
标签 卡片上显示的名称,如「5 小时用量」。自动定位模式下它还是默认的定位锚点,需与页面显示文字一致
定位文本 可选。留空 = 用标签定位;多语言页面可填多个别名,用 `
类型 百分比:页面直接给出 xx%;用量对:页面给出 a / b,自动算百分比并显示明细「a / b」
CSS 选择器 留空(推荐)= 自动定位:按标签文字在页面上找数值区域;填写 = 选择器模式,正则只在该元素文本内匹配
正则 第一个捕获组是数值;百分比预设 (\d+(?:\.\d+)?)\s*%,用量对预设 (\d+)\s*/\s*(\d+)(两个捕获组)
数值为剩余百分比 可选。页面显示「剩余」而非「已用」时开启(如 73% remaining → 显示已用 27%),仅百分比类型生效。数值旁明确写有 left/剩余/remaining 时会自动换算,无需开启
重置选择器 可选。仅选择器模式生效。抓取重置时间文本用的选择器,留空对整页匹配
重置正则 可选。自动定位模式下留空会自动识别「重置时间:…」「…后重置」「Resets in …」;自定义时第一个捕获组作为展示文本,不区分大小写

服务级字段:名称、网址、额外等待秒数、未登录指示选择器(可选)、刷新间隔(可选,留空用全局)、订阅信息网址(可选)。

颜色主题(全局设置)

所有卡片共用一套全局配色,按语义分 4 种状态色 + 1 个强调色:

色板 语义
强调色 卡片服务圆点
正常 用量落后时间基准线较多(无基准线时 <60%)
接近基准 用量距时间基准线 10 个百分点以内(无基准线时 ≥60%)
超出基准 用量跑在时间基准线前面(用得偏快)
90% 告警 用量 ≥90%,优先级最高

「全局设置」顶部的颜色主题下拉提供 5 套预设:蔚蓝 / 翡翠 / 紫罗兰 / 落日 / 石墨,选中即预览(下方五行色板同步显示该主题色),保存后生效。

选「自定义」后五行色板变为可点击:点击色块打开颜色选择对话框(大色块预览、#RRGGBB 输入、R/G/B 滑块)。对话框里的「屏幕取色」按钮可拾取屏幕上任意颜色:点击后整屏冻结,移动光标时旁边显示 7×7 像素放大镜和当前 hex,左键单击取色,Esc 或右键取消

配置存于 config.jsontheme 字段(name 为预设 key 或 "custom",自定义时另存五个 hex);旧配置没有 theme 字段时自动使用「蔚蓝」;老版本的服务级 color 字段读入时忽略、不再写入。

重置时间的解析与显示(全局设置)

工具抓到重置文本后会立刻解析成绝对时间存起来(所以「2 小时后重置」这类相对时间不会越显越不准),支持的原文格式包括:重置时间:16:33重置时间:2026-07-26 10:0007-23 14:44 后重置2026-08-17 后重置2026-07-23 15:42:00 重置将于 2026年7月29日 1:04 重置Resets in 07-23 14:44Resets Jul 29, 2026 1:04 AM(英文月名)、3 天后重置3天9小时29分钟后重置 等;解析失败则原样显示原文。

全局设置里有这些开关:

  • 统一重置时间格式(默认开):各家供应商日期格式五花八门,开启后按统一格式显示。格式框提供预设(MM-dd HH:mmyyyy-MM-dd HH:mmMM月dd日 HH:mmHH:mm),也可以手动输入任意 .NET 日期格式串。
  • 重置倒计时分级预警(随每分钟界面重绘自动变色):短窗口(≤24h,如 5 小时)剩 1 小时变黄、30 分钟变橙红;长窗口(7 天/30 天)剩 24 小时变黄、2 小时变橙红——窗口快重置、剩余额度抓紧用。套餐到期同理:剩 5 天变黄、1 天变橙红。颜色取自主题语义色(黄=接近、橙红=超出),随主题切换

未登录处理流程

  1. 配置了「未登录指示选择器」:抓取时页面上命中该选择器 → 卡片显示「需要登录」+ 去登录按钮。
  2. 未配置:所有规则都抓不到值 → 判定「抓取失败(可能未登录或页面结构变化)」,同样给出「去登录」按钮。
  3. 点「去登录」弹出内置浏览器(与抓取共享登录态),手动登录后直接关闭窗口,工具自动重新抓取该服务。

构建与发布

需要 .NET SDK 10:

# 构建
dotnet build app/AIQuotaMonitor.csproj -c Release

# 发布:自包含单文件 exe(不依赖任何环境)
dotnet publish app/AIQuotaMonitor.csproj -c Release -r win-x64 --self-contained true `
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/

产物为 publish/AIQuotaMonitor.exe,可直接拷贝运行。

多语言 / Language

界面支持简体中文English(含设置面板、右键菜单、托盘菜单、卡片状态、登录窗口、气泡通知与错误信息):

  • 默认跟随系统语言:系统 UI 语言是中文则显示中文,否则显示英文。
  • 快速切换:小部件右键菜单或托盘菜单里的「语言 / Language」子菜单,可在 跟随系统 / 中文 / English 之间单选切换,立即生效(无需重启)并写入 config.jsonlanguage 字段("auto" / "zh" / "en")。
  • 设置面板的「全局设置」里也有同样的语言下拉,保存后生效。

测试截图模式

不初始化 WebView2,用内置示例数据渲染主窗口并截图退出。主窗口共七张卡片,覆盖全部状态:正常(三条配额覆盖正常/超基准/90% 告警色)/ 需要登录 / 抓取失败(去登录)/ 陈旧回退 / 陈旧+疑似未登录 / 抓取失败(查看页面)/ 暂停+订阅过期:

AIQuotaMonitor.exe --test-shot out.png                          # 纵向
AIQuotaMonitor.exe --test-shot out.png --layout horizontal      # 横向
AIQuotaMonitor.exe --test-shot out.png --lang en                # 指定界面语言(zh/en)
AIQuotaMonitor.exe --test-history-shot out.png                  # 用量历史窗口(合成样本)
AIQuotaMonitor.exe --test-settings-shot settings.png            # 设置窗口(两个页签)
AIQuotaMonitor.exe --test-frames frames_dir                     # 动画帧序列(合成演示 GIF)

配置存储

config.json 保存在 exe 同目录System.Text.Json,camelCase):服务列表与规则、窗口位置、置顶、不透明度、布局方向、刷新间隔都在其中,每个服务带一个稳定 id 字段(用量历史按它关联)。正常情况不需要手改——拖动窗口、切换置顶/布局都会自动保存。

订阅到期与自动续费(智能扫描,零配置)

工具会在抓取配额时顺带扫描页面全文(含同源 iframe),自动识别订阅信息并显示在卡片名称下方,如「订阅 31 天后到期 · 自动续费 关」:

  • 到期时间支持的写法:结束时间 2026-08-24剩余天数 31 天下次自动续费时间:2026-08-1708月03日自动续费will be canceled on Aug 19, 2026 等;剩 5 天变黄、1 天变橙红提醒
  • 自动续费:识别「自动续费 开启/未开启」文本、「下次自动续费时间」等隐含信息,以及页面开关控件(switch/checkbox)的实际状态
  • 如果订阅信息不在用量页(如智谱在「套餐概览」页、Codex 在 Billing 页),在服务的「订阅信息网址」里填那个页面即可;这类服务按 6 小时缓存抓取订阅信息,不会每次刷新都多开一页。留空则在用量页面上顺带扫,零成本

用量历史与陈旧数据回退

两个文件都保存在 %LOCALAPPDATA%\AIQuotaMonitor\,仅存本机、不上传:

文件 内容
lastgood.json 每个服务最后一次成功抓取结果(刷新失败 / 重启后的陈旧数据回退源)
history.jsonl 用量百分比时间序列样本,每行一条,如 {"t":"2026-08-05T22:55:01+08:00","svc":"<id>","rule":"5 小时用量","pct":42,"detail":"2.1 / 5 小时","resetAt":"…"}
  • 历史保留 30 天;超过 7 天的样本自动稀释为每小时一条。
  • 点击卡片上的配额行打开历史窗口(24 小时 / 7 天 / 30 天切换),统计含:当前值、区间增量(自上次重置后累计)、近期速率(%/小时)、按近 24 小时速率预测「重置时约几 %」。
  • 全局设置可关闭「记录用量历史」(关闭不清空已有数据,删除文件即清除)。
  • 序列按规则的稳定 id 关联,改标签后历史保留(v1.3.0 之前的旧样本按标签回退关联)。

站点适配经验教训(抓取原理笔记)

这个项目在适配五家供应商的过程中踩过的坑,对配置新服务有参考价值:

  1. 隐藏抓取窗口必须有正常视口尺寸(1280x800)。曾经用 1x1 透明窗口,结果阿里云这类懒加载 SPA 靠视口/可见性触发渲染,视口过小就不生成内容 DOM,JS 永远抓空。症状是「登录窗口里一切正常,抓取就是找不到文字」。
  2. 跨域 iframe:渲染可见 ≠ JS 可读。同源策略下 JS 读不到跨域 iframe 的内容。工具的解法:收集读不到的 iframe 地址,直接把隐藏浏览器导航过去再抓(变成顶层页面即无限制)。
  3. 会话级 Cookie vs 持久 Cookie。阿里云等站点的登录票据可能是会话级的,Chromium 只存内存、进程退出即失——日常浏览器感觉不到是因为它的进程常年不死。工具会在每次抓取(包括失败/提前返回)、登录窗口关闭和正常退出时,把全部 Cookie 用 DPAPI 加密并原子落盘,启动时还原。但服务端会话到期仍无解,只能重新登录。
  4. 内置浏览器语言会改变页面文案。把 WebView2 设为中文后,Kimi/Codex 的页面文案从英文变中文,导致英文标签失效。规则的「定位文本」支持 中|英 多别名就是为这个准备的。
  5. 轮询等待优于固定等待。SPA 渲染时间不确定,固定等 N 秒不是慢就是空;现在是每 0.5 秒轮询,「额外等待秒数」只是超时上限。
  6. 页面骨架比数据先渲染,「有匹配」不等于「数据到了」。阿里云页面的进度条轴刻度(0% 50% 90% 100%)先于真实数值出现,曾导致抓到 0%。解法:容器内有多个匹配时取字号最大的元素(大数值永远比刻度字大),等待轮询也升级为「提取成功且质量达标(唯一匹配或大字号匹配)」才放行。
  7. 导航失败 ≠ 页面没加载。阿里云控制台的重定向链会让 WebView2 误报导航失败,必须检查页面实际内容再下结论。
  8. 错误信息要带现场。笼统的「抓取失败」无法排查;现在失败时会附每条规则的具体原因 + 页面标题和正文开头,一眼分清是未登录、标签不对还是页面结构变了。
  9. 正则 \b 对中文不生效。CJK 字符都算 word 字符,「小时用量」的「时」和「用」之间没有边界——\b 只能挂在英文分支上(天|days?\b)。这个坑在相对时间解析和窗口长度推断里各踩过一次。
  10. “刷新”也是配额重置语义。火山 Coding Plan 新版使用「5天11时56分钟后刷新」而非「重置」,且小时缩写为「时」。默认规则同时识别「重置/刷新」与「小时/时」;任何 5 小时额度为 0 且没有重置时间时,都会显示首次调用后开始计时,已有真实倒计时则保持原样。

常见问题

Q:启动提示缺少 WebView2 Runtime? 工具依赖 WebView2 Evergreen Runtime(Windows 11 一般自带)。缺失时程序会弹出安装提示,按提示到微软官网下载安装「WebView2 Runtime 长青版」即可:https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/ 。安装后重启本程序。可通过注册表 HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients 下「Microsoft Edge WebView2 Runtime」项的 pv 值确认版本。

Q:抓不到数据 / 显示「抓取失败」? 打开「设置」,选中该服务,点「测试抓取」:

  • 提示「页面导航失败」:错误信息里附了最终地址和标题——若是被重定向到登录页,先「去登录」;现在导航报错后会自动检查页面实况,有内容会继续抓(阿里云控制台这类重定向链已兼容);
  • 提示「找不到定位文本」:标签与页面显示文字不一致,改成一字不差(页面渲染慢的情况已改为轮询等待,「额外等待秒数」是超时上限,渲染慢就调大);
  • 看「原始文本」——如果是登录页内容,先点卡片上的「去登录」;
  • 如果有目标数字但解析失败,照着原始文本调整正则(注意让第一个捕获组正好是数值);页面显示的是「剩余 xx%」时:数值旁写明 left/剩余/remaining 会自动换算为已用,没有这类字样才需要开「数值为剩余百分比」;
  • 如果标签文字在页面多个区域出现导致抓错区域,再考虑填 CSS 选择器精确锁定(浏览器 F12 右键元素 → 复制 selector)。

Q:登录态能保持多久? 登录信息保存在 %LOCALAPPDATA%\AIQuotaMonitor\WebView2UserData;会话 Cookie 另以当前 Windows 用户的 DPAPI 加密保存到 cookies.dat。开启「独立会话」的服务使用 Sessions\<服务Id> 独立 profile 与 cookies-<服务Id>.dat 独立存储。应用会在抓取的所有结果、登录窗口关闭和正常退出时保存,尽量避免客户端丢失。服务端签发的真实过期时间不会被延长;服务端会话失效后仍需重新登录。当某个服务从正常变为需要登录时,托盘会弹气泡提醒。

Q:为什么阿里云控制台之前每次重启工具后都要重新登录? 根因是阿里云的登录票据(login_aliyunid_ticket)是会话级 Cookie——Chromium 只把会话级 Cookie 存在内存,浏览器进程退出即失;日常浏览器感觉不到,是因为它的进程常年不死(启动加速/后台模式)。自 v1.5.0 起,工具会在每次抓取结果、登录窗口关闭和正常退出时把全部 Cookie 导出、用 DPAPI(当前用户)加密并原子保存到 %LOCALAPPDATA%\AIQuotaMonitor\cookies.dat,下次启动时自动还原,会话 Cookie 也能跨重启存活。注意:这只能解决客户端会话丢失,阿里云服务端会话本身较短——若服务端到期,仍需点一次「去登录」(托盘会有气泡提醒)。

Q:某个服务抓失败会影响其他服务吗? 不会。各服务独立抓取、独立计时,单个服务失败只在它自己的卡片上显示错误。

工程结构

app/
  AIQuotaMonitor.csproj   net10.0-windows,WPF + WindowsForms,Microsoft.Web.WebView2
  App.xaml(.cs)           入口、单实例、命令行参数(--test-shot 等)、全局深色样式
  Models.cs               AppConfig / ServiceConfig / QuotaRule / 抓取结果模型
  ConfigStore.cs          config.json 读写(原子写、损坏备份、默认值、JSON 深拷贝)
  I18n.cs                 UI 多语言(zh/en 字符串表、跟随系统解析、Changed 事件)
  ColorTheme.cs           全局颜色主题(5 套预设 + 自定义解析、状态色语义)
  Backdrop.cs             Win11 DWM 背景材质(Acrylic/Mica、Win10 降级)
  ScrapeEngine.cs         隐藏宿主窗口 + 共享 WebView2,导航→等待→JS 提取
  CookieStore.cs          Cookie 导出/还原(DPAPI 加密,过期清理)
  PaceBaseline.cs         时间基准线(窗口推断、已过比例)
  ResetTimeParser.cs      重置时间解析(中英/相对/绝对)与分级显示
  GhostWindow.cs          拖拽排序虚影悬浮窗
  MainWindow.xaml(.cs)    小部件窗口、定时刷新、托盘、右键菜单
  ServiceCard.xaml(.cs)   服务卡片(正常 / 需要登录 / 抓取失败 / 陈旧回退)
  SettingsWindow.xaml(.cs) 设置界面(服务/规则编辑、预设、测试抓取、全局设置、颜色主题)
  ColorPickerDialog.xaml(.cs) 颜色选择对话框(hex/RGB 滑块 + 屏幕取色器)
  LoginWindow.xaml(.cs)   内置浏览器登录窗口
  HistoryStore.cs         用量历史样本 history.jsonl(追加/稀释/查询)
  LastGoodStore.cs        上次成功结果 lastgood.json(陈旧回退源)
  HistoryWindow.xaml(.cs) 用量历史窗口(手绘趋势图 + 统计)
  TestShot.cs             --test-shot / --test-settings-shot / --test-frames 截图模式

免责声明与合规说明

  • 本工具仅供个人查询自己账号的用量信息:它用你本机已登录的会话打开供应商页面、在本地解析并展示,不上传登录凭据或用量数据。为保持登录和显示连续性,会在本机保存 WebView2 profile,并以当前 Windows 用户的 DPAPI 加密保存 Cookie;上次成功抓取结果与用量百分比历史保存在 lastgood.json / history.jsonl(历史记录可关闭、删文件即清除)。请遵守各供应商的服务条款,不要用于批量抓取、自动化滥用或任何违反目标网站规则的用途。
  • 各供应商名称与商标归其各自所有者所有,本项目与它们无任何隶属或背书关系。
  • 第三方组件许可:.NET 运行时(MIT,自包含打包随附)、Microsoft.Web.WebView2(WebView2 Runtime 许可,允许随应用再分发)、System.Security.Cryptography.ProtectedData(MIT)。
  • 本项目以 MIT 协议发布(见 LICENSE),按「现状」提供,不担任何担保。

About

Windows 11 desktop widget that tracks quota usage for multiple AI subscriptions (5h/7d/30d windows) — WPF, .NET 10, single self-contained exe

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages