尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CodexBar xAI Provider 实践:从 Management API 读取预付余额与 30 天平台支出

CodexBar xAI Provider 实践:从 Management API 读取预付余额与 30 天平台支出 CodexBar xAI Provider 实践从 Management API 读取预付余额与 30 天平台支出【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBarCodexBar 的 xAI Provider 通过 xAI 官方 Management API 读取开发者平台团队的预付信用余额prepaid balance与每日美元支出无需登录 grok.com 或依赖推理流量。读完本文你将掌握 Management API key 与 team ID 的三种配置方式、两个 billing 端点的请求契约含反转账本解析、菜单卡与支出目录的展示规则以及 401/403/404/429 等错误的分类排查路径。定位xAI Provider 与 Grok Provider 的边界CodexBar 同时内置了两个与 xAI 生态相关的 Provider二者刻意分离互不共享凭据、余额与身份xAI Provider本篇主题对应 docs/xai.md跟踪开发者平台的预付计费面prepaid billing surface——即通过 xAI Console 充值后以美元计价的消费余额与支出历史。Grok Provider见 docs/grok.md跟踪消费者 Grok/SuperGrok 订阅配额通过 Grok CLI 的 ACP JSON-RPC、CLI-proxy 或 grok.com 会话读取。从源码结构看这一边界体现在注册元数据上XAIProviderDescriptor.swift 中supportsCredits: false、sessionLabel: Spend即 xAI 不渲染订阅额度条只呈现支出/余额语义同时tokenCost: ProviderTokenCostConfig(supportsTokenCost: true)表明它的每日支出会进入共享的 Usage Spend 目录。认证配置Management API key team IDxAI 的 Management API只接受 Management API key不接受推理inferenceAPI key。你需要先在 xAI Console 的 Settings Management Keys 中创建 Management API key再连同 team ID 一起交给 CodexBar。team ID 可在 Console 的 URL 和 team settings 页面中直接看到。方式一环境变量export XAI_MANAGEMENT_API_KEY... export XAI_TEAM_ID...方式二设置界面在 CodexBar Settings → Providers → xAI 中填入 Management API key 与 team ID。方式三CLI 写 key 配置文件写 team IDprintf %s $XAI_MANAGEMENT_API_KEY | codexbar config set-api-key --provider xai --stdin该命令的语法定义可见 CLIHelp.swiftcodexbar config set-api-key --provider name (--api-key key|--stdin)它会把 key 写入解析出的配置文件并默认启用该 Provider。对应的配置块形态为{ id: xai, enabled: true, apiKey: XAI_MANAGEMENT_API_KEY, workspaceID: XAI_TEAM_ID }注意team ID 映射到workspaceID字段。从 XAIProviderDescriptor.swift 中additionalProjections: [.workspaceID(XAISettingsReader.teamIDEnvironmentKey)]可以看出配置文件的workspaceID会被投影为XAI_TEAM_ID环境变量供取数管线使用。凭据读取与校验细节环境变量的读取与清理逻辑在 XAISettingsReader.swiftcleaned(_:)会去除首尾空白并剥离成对的双引号或单引号因此手误写成\team-1234\也能被接受这一点由 XAIProviderTests.swift 中settings reader trims whitespace and quotes测试固化。team ID 有显式校验validatedTeamID要求值非空、不含/、且不是.或..分别抛出missingTeamID/invalidTeamID。这是一个防路径注入的防御——因为 team ID 会直接拼进 URL 路径插件内也会再做一次同样的检查并encodeURIComponent。优先级配置文件中的apiKey/workspaceID会覆盖同名环境变量。测试config API key and team ID project into the fetch environment明确验证了applyAPIKeyOverride之后读到的是config-key/config-team而非环境变量值。取数管线在 XAIProviderDescriptor.swift 的fetchPlan中注册为sourceModes: [.auto, .api]即只走 API 模式没有 CLI 或浏览器回退执行体是绑定xai.js插件的ScriptFetchStrategyvalidateContext会先跑一遍 team ID 校验校验不通过不会发出任何 HTTP 请求。数据源两个 Management API 端点配置完成后CodexBar 对https://management-api.x.ai发起两个请求实现见 xai.js预付余额GET https://management-api.x.ai/v1/billing/teams/{team_id}/prepaid/balance30 天每日支出尽力而为的历史增强POST https://management-api.x.ai/v1/billing/teams/{team_id}/usage请求体是每日粒度、按美元求和AGGREGATION_SUM的 analytics 查询时间范围是过去 30 天UTCtimeRange.timezone固定为Etc/GMT即 UTC。两个请求都使用Authorization: Bearer management key。CodexBar不读取浏览器 cookie、Console 会话或推理流量——这是与 Grok Provider 的又一区别。余额解析反转账本与字符串美分/prepaid/balance返回的是一个反转的账本inverted ledger以字符串形式的美分表达给账户充值 $10响应里是-1000。因此剩余余额 负的 cents 值即const balance -Number(raw) / 100; // -1000 → 10.00两条硬规则值得注意见 xai.js 第 33–37 行total.val必须是可解析的数值字符串正则^-?\d(\.\d)?$否则按解析失败报错绝不当成 $0.00 余额。测试malformed balance is a classified parse failure用{total:{val:n/a}}验证了这一点。符号语义由黄金用例固化2500→ -$25.00即账本为正、余额为负的异常形态也会被取负-333→ $3.33见ledger balances match the production goldens。posted 余额 ≠ 实时余额文档特别指出余额端点返回的是posted 预付账本。xAI 在计费周期billing cycle结束时才把当前周期的消费扣入账本账本条目按计费期 keyed所以周期中途账本余额可能比 Console 上显示的实时剩余信用高出一个尚未入账的周期消费。原文档说明已在真实账户上做过验证posted balance ≈ live remaining 当前周期消费。如果你看到 CodexBar 显示的余额比 Console 的实时数字大这大概率是正常现象而非 bug。展示规则余额不是配额菜单卡与内嵌仪表盘菜单卡以美元显示预付余额卡片样式由 XAIProviderDescriptor.swift 的costPresenter决定当snapshot.providerCost?.period Prepaid credits时走.prepaidCredits样式测试验证了 spend 行渲染为Balance: $10.00。内嵌仪表盘显示过去 30 天每日平台支出含今日/30 天合计Billing summary 行Prepaid balance与Last 30 days。当 xAI 在响应中报告分析基数上限limitReached: true时历史标签变为Last 30 days (partial)快照的dataConfidence标记为estimated而非exact测试history failure preserves balance and partial history lowers confidence覆盖了该分支。预付钱不是配额因此不会合成会话session或周度weekly用量条——这与会显示 Credits 进度条的 Grok Provider 形成对比。历史失败与空历史的区分一个容易忽略的健壮性设计/usage失败不会压制有效的余额。测试history failure preserves balance and partial history lowers confidence验证usage 返回 500 时快照仍保留providerCost?.used 10只是chart nil。成功的空历史会发出空图表。插件注释写明Emit an empty chart on successful history so spend mapping can tell zero days from analytics unavailable——即30 天都是零消费与分析数据不可用必须可区分测试successful empty usage history emits an empty chart固化了这一契约。畸形但 HTTP 200 的历史响应timeSeries缺失、dataPoints里缺数值等会被整体拒收维持历史不可用状态测试malformed successful usage history stays unavailable。进入 Usage Spend 目录每日支出序列还会以vendor-metered USD身份发布到 Settings → Usage Spend 和 Overview。映射逻辑在 XAICostUsageMapping.swift 的tokenSnapshot(from:historyDays:)只采纳 label 符合YYYY-MM-DD且值非负有限的数据点按日期排序historyDays固定 30costProvenance为.vendorMetered厂商计量非本地 token 折算historyCoverageIsEstablished取决于dataConfidence ! .estimatedhistoryLabel在 estimated 时即为Last 30 days (partial)预付账本余额是剩余信用永不参与支出统计——这是该文件头注释明确声明的不变量。CLI 使用codexbar --provider xai终端输出由CLIRenderer渲染测试验证了关键行的存在性Prepaid balance: $10.00与Plan: Management API并且因为余额不是 spend输出不包含Cost:行。若尚未配置CLI 会给出明确的引导信息来自 XAISettingsReader.swift 的错误描述缺 team IDMissing xAI team ID. Add it in Settings or set XAI_TEAM_ID (shown in the xAI Console URL and team settings).team ID 非法The xAI team ID must be a single identifier without path separators.故障排查与错误分类xai.js 对不同 HTTP 状态做了分类映射测试balance errors retain classified surfaces固化了这套行为现象分类排查建议401/403authenticationExpiredManagement key 被 xAI 拒绝。确认 key 创建于 Settings Management Keys 且具有 billing 读权限推理 key 永远不可用。提示语会直接说明这一点。404apiFailureteam ID 错误或 key 属于另一个 teamkey 与 team 不匹配。429rateLimited触发 Management API 限流下一轮刷新自动重试。其他非 2xx如503apiFailure透传xAI Management API returned HTTP status。另外两条排查要点usage 历史失败不压制余额卡片保留余额、只丢弃图表前文已述。组织级org-scopedManagement key 仍须提供显式 team ID来确定对账对象——即使 key 本身挂在组织上{team_id}路径参数依然是必填项。关键文件索引文件职责docs/xai.md本篇对应的官方 Provider 文档Sources/CodexBarCore/Resources/Plugins/xai.js取数插件请求构造、余额解析、历史聚合与错误分类Sources/CodexBarCore/Providers/XAI/XAIProviderDescriptor.swiftProvider 注册凭据投影、展示样式、取数管线Sources/CodexBarCore/Providers/XAI/XAISettingsReader.swift环境变量读取、清理与 team ID 校验Sources/CodexBarCore/Providers/XAI/XAICostUsageMapping.swift每日支出序列到共享支出目录的映射Tests/CodexBarTests/XAIProviderTests.swift端点契约、账本黄金值、错误分类与降级行为的测试集以上行为均以当前仓库实现为准若 xAI Management API 的响应结构如total.val形态或limitReached字段发生变化需以 xAI 官方 Management API 文档与 XAIProviderTests.swift 的测试断言为基准核对插件解析逻辑。【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表