2026/9/13 3:52:56

CodexBar 集成 Mistral 用量统计:浏览器 Cookie 采集、账单 API 与 Vibe 月度套餐解析实战

CodexBar 集成 Mistral 用量统计:浏览器 Cookie 采集、账单 API 与 Vibe 月度套餐解析实战 CodexBar 集成 Mistral 用量统计浏览器 Cookie 采集、账单 API 与 Vibe 月度套餐解析实战【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBarCodexBar 通过读取admin.mistral.ai的浏览器登录会话Cookie无需手动输入 API Key 即可展示 Mistral 的当月账单用量、余额Credits并在具备 CSRF 令牌时尽力获取 Mistral Vibe 月度套餐使用率。本文以 docs/mistral.md 为主线结合仓库中 Mistral Provider 的完整源码实现深入讲解从 Cookie 采集、API 请求构造、本地定价计算到菜单栏展示与排障的完整链路。Mistral Provider 在 CodexBar 中的定位从 MistralProviderDescriptor.swift 的 ProviderDescriptor 声明可以看到Mistral 是一个**默认关闭defaultEnabled: false、非主提供商isPrimaryProvider: false、纯余额型balanceOnly: true**的 Usage Provider支持菜单栏指标automatic与monthlyPlanCLI 名称为mistral别名mistral-ai仪表盘跳转地址为https://admin.mistral.ai/organization/usage品牌色为#FF500FProviderColor(red: 255, green: 80, blue: 15)图标资源名为ProviderIcon-mistral。它的工作方式完全基于Web 会话.web抓取策略MistralWebFetchStrategy 在cookieSource ! .off时可用整个抓取管线只有MistralWebFetchStrategy()一种策略不依赖本地日志扫描。这意味着只要浏览器里保持 Mistral 管理后台的登录态CodexBar 就能持续刷新用量数据。配置启用 Provider 与两种 Cookie 来源图形界面配置步骤打开Settings - Providers设置 - 提供商启用Mistral开关标题为 Show Mistral usage在 Chrome、Firefox 或 Safari 中登录 Mistral AdminCookie 来源保持Automatic自动或切换为Manual手动并从admin.mistral.ai的某个请求中粘贴完整的Cookie:请求头。从 MistralProviderImplementation.swift 可以看到设置面板实际渲染的控件Cookie source 选择器关闭自动/手动三态Mistral 不允许关闭 Cookie、一个安全类型的 Cookie header 输入框placeholder 为ory_session_……; csrftoken…以及一个 Open Mistral Admin 的跳转按钮。手动 Cookie 的关键约束手动模式粘贴的 Cookie 头必须包含ory_session_*cookie——这是 Ory Kratos 会话 cookie是登录态的凭证。解析逻辑位于 MistralProviderDescriptor.swift 的resolveCookieSessionlet pairs CookieHeaderNormalizer.pairs(from: header) let hasSessionCookie pairs.contains { $0.name.hasPrefix(ory_session_) } if hasSessionCookie { let csrfToken pairs.first { $0.name csrftoken }?.value return (header, csrfToken, nil, false) } throw MistralSettingsError.invalidCookie若缺少ory_session_*会抛出MistralSettingsError.invalidCookie对应错误文案 Mistral cookie header is invalid or missing ory_session cookie见 MistralErrors.swift。csrftoken是可选增强项存在时 CodexBar 会将其放入X-CSRFTOKEN请求头从而解锁需要鉴权的账单与 Vibe 请求。自动导入的浏览器顺序与 Cookie 域自动模式按Chrome - Firefox含 Developer Edition- Safari的顺序尝试导入MistralProviderDescriptor.swift 中browserCookieOrder数组仅 macOS 下生效其他 Chromium 系浏览器只能走手动模式。Safari 需要授予完全磁盘访问权限Full Disk Access才能读取。MistralCookieImporter.swift 定义了自动导入的细节查询的 Cookie 域mistral.ai、admin.mistral.ai、auth.mistral.ai、console.mistral.ai域匹配方式为exact只读取未过期的 CookieincludeExpired: false每个浏览器源必须包含ory_session_*cookie 才会被采纳否则跳过该来源成功导入后Cookie 头与来源标签会被缓存到CookieHeaderCache供后续刷新直接复用。static let cookieDomains [mistral.ai, admin.mistral.ai, auth.mistral.ai, console.mistral.ai] static func cookieQuery(referenceDate: Date Date()) - BrowserCookieQuery { BrowserCookieQuery( domains: self.cookieDomains, domainMatch: .exact, includeExpired: false, referenceDate: referenceDate) }数据源三个 API 端点的完整请求构造MistralUsageFetcher.swift 中baseURL固定为https://admin.mistral.aiCodexBar 请求的是当前 UTC 月份的数据。1. 账单用量必选GET https://admin.mistral.ai/api/billing/v2/usage?monthmonthyearyear请求头构造要点MistralUsageFetcher.swift请求头值说明Accept*/*通用 JSON 接受头Cookie完整的 Cookie 头来自自动导入或手动粘贴Refererhttps://admin.mistral.ai/organization/usage模拟从用量页面发起Originhttps://admin.mistral.ai同源校验X-CSRFTOKENcsrftokencookie 值可选存在 CSRF cookie 时附加月份与年份通过URLComponents拼入查询参数Calendar 使用 Gregorian UTC 时区计算。2. 余额 Credits尽力而为GET https://admin.mistral.ai/api/billing/credits返回结构MistralModels.swift包含wallet_amount钱包余额、credit_notes_amount赠金/信用票据可选、ongoing_usage_balance在途用量可选、currency。可用余额计算公式为available walletAmount creditNotesAmount - ongoingUsageBalance该公式在 MistralModels.swift 的availableAmount中实现负数会被钳制为 0。该端点是 best-effort失败不影响主账单结果。3. Mistral Vibe 月度套餐用量有 CSRF 时尽力而为GET https://console.mistral.ai/api-ui/trpc/billing.vibeUsage?batch1input...URL 编码的 tRPC 参数这是 tRPC 协议的批量查询端点。关键实现细节MistralUsageFetcher.swiftCookie 白名单转发consoleCookieHeader只转发csrftoken与所有ory_session_*cookie其余admin.mistral.ai的 cookie 严格保持在原域内MistralUsageFetcher.swift避免跨域泄漏CSRF 校验validatedVibeCSRFToken会剔除空白并禁止 token 中含;、,、\r、\n字符防注入非法则抛invalidCredentialsMistralUsageFetcher.swift响应中提取usage_percentage0~100 之间否则判为解析失败与reset_atISO 8601 日期支持带/不带小数秒两种格式。抓取调度主请求 两个可选请求的时限控制MistralProviderDescriptor.swift 的fetchUsageWithVibe展示了三者如何在同一个 deadline 下协调先请求账单用量主数据若剩余时间 0 且存在 CSRF token发起 Vibe 用量请求min(remaining, 4)秒超时若仍有剩余时间发起 Credits 请求同样min(remaining, 4)秒超时可选请求的任何非取消错误都被吞掉返回 nil保证主结果始终可用见fetchOptionalCredits/fetchOptionalVibeUsage中仅对CancellationError/.cancelled重新抛出。会话失效后的自动重试自动模式下若主请求返回 401/403invalidCredentialsCodexBar 会清空缓存并重新遍历浏览器 Cookie 源逐个尝试直到找到有效会话MistralProviderDescriptor.swift手动模式下则直接抛出错误。本地计算从响应到用量快照账单响应的解析与计价parseResponseMistralUsageFetcher.swift把MistralBillingResponse中所有计费类别聚合为一个MistralUsageSnapshot计费类别字段Token 是否计入模型推理completion.models✅ input/output/cachedOCRocr.models❌ 仅成本连接器connectors.models❌ 仅成本音频audio.models❌ 仅成本Libraries API页/令牌libraries_api.pages/libraries_api.tokenstokens 计入微调训练/存储fine_tuning.training/fine_tuning.storage❌ 仅成本费用计算使用响应自带的prices定价表buildPriceIndex以billing_metric::billing_group为键构建[String: Double]索引单条成本 单位数 × 单价MistralUsageFetcher.swift。Token 数优先取value_paid计费值缺失时回退到value。所有金额与 Token 汇总都有isFinite/ 溢出保护非法值会被丢弃而非污染总数。每个使用条目按timestamp的前 10 位YYYY-MM-DD归入按日桶DailyAccumulator每日桶内再按模型拆分ModelBreakdown最终MistralDailyUsageBucket数组按日期升序输出。货币符号的兜底逻辑响应可能带currency_symbol缺失时按货币代码推导MistralUsageFetcher.swiftEUR - €、未知XXX-¤否则直接用货币代码本身。负金额钳制与菜单栏文案MistralModels.swift 的toUsageSnapshot()把MistralUsageSnapshot转换为通用UsageSnapshottotalCost为负数退款/抵扣时钳制为 0菜单栏文案形如€1.2345 this month保留 4 位小数。Token 成本历史的生成toCostUsageTokenSnapshot(historyDays: 30)MistralModels.swift将每日桶投影为 30 天的CostUsageTokenSnapshotcostProvenance标记为.vendorMetered厂商计量。它做了一组数据完整性校验后才输出成本和 TokendailyCostMatchesSnapshot()每日成本之和与总成本一致容差1e-12相对误差dailyTokensMatchSnapshot()每日 Token 之和与总 Token 一致无未落日的成本/Token 条目hasUnplacedCost/hasUnplacedTokens。只有校验通过历史窗口的成本与 Token 才会以完整语义输出否则对应字段为 nil——这正是菜单卡片上数据未完全覆盖时不会显示误导性数字的机制。展示菜单卡片、月度套餐窗口与成本历史根据 docs/mistral.md 的 Display 小节与源码API 花费本地计算由账单响应的 Token 计数与定价表算出见上文计价逻辑每日用量桶喂给内联用量仪表盘Inline Usage Dashboard余额展示Credits 端点可用时Provider 卡片可显示余额MistralCreditsSnapshot.formattedAvailableAmount通过UsageFormatter.currencyString格式化Monthly Plan 窗口Vibe 端点可用时显示使用率百分比与重置时间。这是通过extraRateWindows中 id 为mistral-monthly-plan的NamedRateWindow实现的——attachVibeWindowMistralProviderDescriptor.swift把RateWindow(usedPercent:resetsAt:)挂到快照上菜单栏指标解析器menuBarWindowResolver只在metric .monthlyPlan时解析该窗口Token 成本历史依赖账单 Web 会话不扫描本地日志——因此 descriptor 中noDataMessage为 Mistral cost history needs a billing web session.。menuCard配置还指定了usesProviderCostHistoryAsPrimaryDashboard: true即菜单卡片优先使用mistralUsage?.toCostUsageTokenSnapshot()作为主成本历史数据源。CLI 命令行用法Mistral Provider 支持通过 CLI 快速查看用量codexbar usage --provider mistral --verbose其中--provider mistral匹配 descriptor 中的cliName: mistral别名mistral-ai。--verbose用于输出更多诊断信息便于排查请求过程。CLI 会复用与图形界面相同的MistralWebFetchStrategy抓取管线。常见问题排查TroubleshootingNo Mistral session cookies found未找到 Mistral 会话 Cookie先在 Chrome、Firefox 或 Safari 中登录 Mistral Admin然后刷新重新触发抓取。对应源码中的MistralSettingsError.missingCookie/MistralUsageError.missingCookie。若使用 Safari 自动导入请确认已授予完全磁盘访问权限。Mistral cookie header is invalidCookie 头无效手动模式下粘贴的是不完整或错误的 Cookie 头。请从admin.mistral.ai的真实请求浏览器开发者工具 - Network 面板复制完整Cookie:头且必须包含ory_session_*cookie。对应MistralSettingsError.invalidCookie。会话过期401/403时则对应invalidCredentialsMistral session expired or invalid (HTTP 401/403)重新登录即可。Credits 或 Vibe 用量缺失账单用量请求是必选的Credits 与 Vibe 用量都是 best-effortCredits 缺失/api/billing/credits请求失败或账户本身没有暴露该数据Vibe 缺失缺少csrftokencookie无法附加X-CSRFTOKEN或console.mistral.ai端点失败、usage_percentage非法、reset_at解析失败。根据 MistralProviderDescriptor.swift 的设计任一可选端点失败都不会影响主 Mistral 用量结果的展示——这正是尽力而为best-effort的语义主数据优先可选数据锦上添花。其他错误类型MistralErrors.swift 定义了完整的错误分类错误触发条件missingCookie未找到会话 CookieinvalidCredentialsHTTP 401/403会话过期或无效apiError(detail)其他 HTTP 状态码附响应体前 200 字符parseFailed(detail)响应 JSON 解码失败或字段非法相关源码索引MistralProviderDescriptor.swiftProvider 元数据、抓取策略、会话解析、Vibe 窗口挂载MistralUsageFetcher.swift三个 API 端点的请求构造、响应解析、本地计价MistralModels.swiftAPI 响应模型、MistralUsageSnapshot/MistralDailyUsageBucket/MistralCreditsSnapshotMistralCookieImporter.swift浏览器 Cookie 自动导入与域过滤MistralProviderSettings.swiftCookie 来源与手动 Cookie 头的设置模型MistralErrors.swift错误枚举与用户可读文案MistralProviderImplementation.swift设置面板 UI 与设置快照装配对应的测试用例位于 MistralUsageParserTests.swift账单解析、MistralVibeUsageTests.swiftVibe 用量解析与 MistralMenuCardModelTests.swift菜单卡片模型可作进一步阅读参考。【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考