CodexBar Claude 用量数据源全解析:OAuth API、Web Cookie、CLI PTY 与本地成本扫描
CodexBar Claude 用量数据源全解析OAuth API、Web Cookie、CLI PTY 与本地成本扫描【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBarCodexBar 是一个无需登录即可展示 OpenAI Codex 与 Claude Code 用量统计的菜单栏应用。本文以仓库 docs/claude.md 为核心系统讲解 CodexBar 为 Claude 提供的四类用量数据路径OAuth API、Web API/浏览器 Cookie、CLI PTY、本地成本日志扫描及组织级 Admin API完整覆盖各数据源的配置入口、凭证形态、端点、解析映射与故障处理行为并结合 Sources/CodexBarCore/Providers/Claude 下的源码实现说明自动选源、Keychain 提示策略、claude-swap 多账户切换与成本去重等底层机制。读完本文你可以准确理解 Claude 用量在 CodexBar 中从凭证到菜单栏的完整链路并能针对性地配置、排障与扩展。Claude 支持三条用量数据路径OAuth、Web、CLI加一条本地成本扫描路径。主 provider 流水线使用运行时相关的自动选择但代码库中在重构完成前仍存在多个活跃的 Claude.auto决策点精确的当前状态一致性契约见 docs/refactor/claude-current-baseline.md。当配置了 Anthropic Admin API 密钥时Claude 还可以在同一个内联仪表盘模式与 OpenAI API provider 相同中展示组织级的花费/消息数/Token 数。数据源与选择顺序默认选择Debug 菜单未启用如果配置了 Admin API 密钥则使用 Admin API 策略获取 Claude API 的花费/用量。App 运行时主流水线OAuth API → CLI PTY → Web API。CLI 运行时主流水线Web API → CLI PTY。显式选择模式OAuth/Web/CLI会绕过自动回退。一个更底层的直接 Claude fetcher 仍包含独立的.auto顺序。该不一致性记录在 docs/refactor/claude-current-baseline.md。选择用量来源偏好设置 → Providers → Claude → Usage sourceAuto / OAuth / Web / CLI。Admin API 密钥配置偏好设置 → Providers → Claude → Admin API key存储在~/.codexbar/config.json。CLI/环境变量printf %s $ANTHROPIC_ADMIN_KEY | codexbar config set-api-key --provider claude --stdin。Token 账户也可以持有sk-ant-admin...前缀的密钥它们会路由到 Admin API而不是 cookie/OAuth 用量。环境变量回退ANTHROPIC_ADMIN_KEY。从源码看主 provider 流水线的策略解析在 ClaudeProviderDescriptor.swift 中完成先处理显式选中 Token 账户Admin API / OAuth / Web 账户分别返回单一策略且不回退到环境级凭证随后处理claudeOwnerCLIRecoveryOnly恢复场景再检查sourceMode .api或自动模式下的 Admin API 密钥最后交给ClaudeSourcePlanner规划可执行步骤。ClaudeProviderDescriptor.resolveStrategies中对缺失或格式错误的选中账户凭证直接返回空策略数组注释明确被选中的账户是权威边界绝不能回退到环境 CLI、浏览器会话或全局 API 密钥并打上该账户的标签。关键行为矩阵运行时与来源模式的完整矩阵引自 docs/refactor/claude-current-baseline.md由ClaudeProviderDescriptor通过ProviderFetchPlan/ProviderFetchPipeline拥有运行时选中模式有序策略回退行为appautooauth - cli - webOAuth 可回退到 CLI/WebCLI 仅在 Web 可用时回退到 WebWeb 为终端appoauthoauth无回退appclicli无回退appwebweb无回退cliautoweb - cliWeb 可回退到 CLICLI 为终端clioauthoauth无回退cliclicli无回退cliwebweb无回退规划器实现位于 ClaudeSourcePlanner.swift.auto在 app 运行时产出oauth/cli/web三步在 CLI 运行时产出web/cli两步显式.oauth在 app 运行时额外带一个explicitOAuthOwnerCLIFallback仅当 OAuth 凭证由 Claude CLI 所有且需要委托刷新时。isPlausiblyAvailable决定步骤是否进入executionStepsOAuth 依赖hasOAuthCredentialsWeb 依赖hasWebSessionCLI 依赖hasCLI。其他活跃的.auto决策点基线文档明确记录了两个不一致的决策点所有者当前行为ClaudeProviderDescriptor.resolveUsageStrategy(...)依次选择oauth→cli→web都不可用时最终回退cliClaudeUsageFetcher.loadLatestUsage(.auto)依次选择oauth→web→cli最终回退oauth后者实现在 ClaudeUsageFetcher.swift 的StepExecutor.executeAuto按计划步骤逐个执行失败且非取消时记录日志并continue到下一步。ClaudeUsageTests.swift已直接刻画了可达的ClaudeUsageFetcher(.auto)分支OAuth/Web/CLI 均可用时选 OAuthOAuth 不可用时 Web 优先于 CLI成功选中 CLI 及 CLI 失败回退 OAuth 的分支因缺少稳定的测试接缝仍以代码审查加周边回归覆盖为准。Debug 选择Debug 菜单启用Debug 面板可以强制 OAuth / Web / CLI。Web 附加项是内部专用的不会在 Providers 面板暴露。Admin API组织级用量密钥前缀sk-ant-admin...。端点/v1/organizations/cost_report/v1/organizations/usage_report/messages输出今日/7 天/30 天花费与消息/Token 汇总。当存在日粒度桶时展示内联的 30 天仪表盘图表。身份登录方式Admin API。实现位于 ClaudeAdminAPIUsageFetcher.swift两个端点 URL 在源码中显式定义https://api.anthropic.com/v1/organizations/cost_report与https://api.anthropic.com/v1/organizations/usage_report/messages。请求携带anthropic-version: 2023-06-01、x-api-key头、20 秒超时cost 请求按description分组、messages 请求按model分组均以bucket_width1d、limit31拉取最多 31 个日桶。花费金额按 Anthropic 最低美元单位字符串解析并除以 100 转为美元usdFromAnthropicLowestUnitAmount。Token 计数区分uncachedInputTokens、cacheCreation、cacheReadInputTokens、outputTokens四类并累加总 Token。Keychain 提示策略Claude OAuth偏好设置 → Providers → Claude → Keychain prompt policy。选项Never prompt绝不尝试交互式 Claude OAuth Keychain 提示。Only on user action默认交互式提示仅保留给用户发起的修复流程。Always allow prompts允许在用户流程和后台流程中都进行交互式提示。该设置只影响 Claude OAuth Keychain 提示行为不会切换你的 Claude 用量来源。如果偏好设置 → Advanced → Disable Keychain access 已启用该策略仍然可见但处于非激活状态直到重新启用 Keychain 访问。从 ClaudeUsageFetcher.swift 的ClaudeOAuthKeychainPromptPolicy.canPromptNow可见三档语义never恒为 falseonlyOnUserAction仅在interaction .userInitiated时允许always恒为 true。shouldRespectKeychainPromptCooldown在非用户发起场景下尊重冷却避免轰炸系统对话框用户动作打开菜单 / 刷新 / 设置可绕过冷却——currentClaudeOAuthInteractivePromptPolicy在用户发起交互时会调用ClaudeOAuthKeychainAccessGate.clearDenied()清除先前记录的拒绝状态。基线文档补充的提示/冷却行为后续重构必须保留的契约默认 Claude keychain 提示模式为onlyOnUserAction。提示策略仅在 Claude OAuth 读取策略为securityFramework时适用。用户发起的交互会在重试可用性或修复前清除先前的 Claude keychain 冷却拒绝。启动引导提示仅在同时满足以下条件时允许运行时为 app、交互为后台、刷新阶段为 startup、提示模式为onlyOnUserAction、且不存在缓存的 Claude 凭证。当提示策略为onlyOnUserAction且调用方未显式允许后台委托刷新时后台委托刷新被阻止。提示模式never阻止委托刷新尝试。过期凭证的所有者行为.claudeCLI走委托刷新路径.codexbar走直接刷新路径.environment不自动刷新。委托刷新被抑制时后台刷新会以ClaudeUsageError.oauthFailed抛出可读错误提示用户点击 CodexBar 菜单中的 Refresh 重试。OAuth API首选来源凭证来源按优先级CodexBar OAuth 缓存可用时。文件回退~/.claude/.credentials.json。Claude CLI Keychain 引导/修复回退Claude Code-credentials。对于默认 CLI profile过期的缓存凭证可以在文件回退后采用已变更的全新 CLI Keychain Token。既有的直接读取同意、提示策略、冷却和非交互读取检查仍然生效。自定义 profile 不会从未加作用域的全局条目恢复且此同步永远不会重写 CLI 凭证。在 Claude Code 2.1.x 上Claude Code-credentials可能只包含 MCP 服务器 OAuth 状态mcpOAuth而没有claudeAiOauth。CodexBar 将其视为 OAuth 配置错误不运行后台委托的claude /status刷新而是给出重新授权指引。此时可改用 Web 或 CLI 用量来源或恢复有效的 Claude OAuth Keychain 条目参见 issue #1844。关键约束需要user:profile作用域只有user:inference的 CLI Token 无法调用 usage。端点GET https://api.anthropic.com/api/oauth/usageGET https://api.anthropic.com/api/oauth/profile→ 账户身份用于校验可选的 Web 增强数据是否属于同一 Claude 账户。请求头Authorization: Bearer access_tokenanthropic-beta: oauth-2025-04-20窗口映射five_hour→ 会话窗口。seven_day→ 周窗口当five_hour缺失或无利用率时也作为主回退。seven_day_sonnet/seven_day_opus→ 模型专属周窗口。limits[].weekly_scoped→ 模型专属周窗口通用的All models作用域保留在主周行。菜单将作用域标题本地化为模型名 周时长规范化快照与 CLI 标题保持不变。seven_day_routines/seven_day_cowork→ Daily Routines 额外窗口。Claude Design/Omelette 键被忽略因为 Claude Design 与主 Claude 用量共享同一限制。extra_usage→ Extra usage 花费月度花费/限制。偏好设置 → Providers → Claude → Show Daily Routines usage 只在菜单和 provider 预览中隐藏 Daily Routines 行。全局的可选积分与额外用量设置是它的总开关Claude 专属设置不改变抓取、历史、通知、组件、模型作用域周限制、hooks 或 CLI 输出。偏好设置 → Providers → Claude → Show model-specific weekly usage in widgets 控制桌面组件中的模型作用域周配额行。默认关闭开启后显示每个带claude-weekly-scoped-标识的已知 Claude 窗口例如 Fable。再次关闭也会丢弃先前快照持久化的作用域行。它不改变抓取、菜单、历史、通知、hooks 或 CLI 输出。刷新同一已识别账户的凭证会保留配额阈值告警历史剩余配额恢复到阈值以上时告警重新武装并在之后再次向下穿越阈值时触发。未知账户所有权会退役无主告警状态而不是在可能不同的账户之间共享。成功的 OAuth 登录会启用 Claude 并保留所选用量来源。默认 Auto 来源下OAuth 在可读时保持优先OAuth 凭证不可用时 CLI/Web 回退仍可用。Claude Code 会定期轮换其Claude Code-credentialsKeychain 条目并可能替换授予 CodexBar 的 ACL 读取权限。Auto 会把这种情况视为 OAuth 来源失败复用最近的成功的 CLI 结果或继续走向 CLI/Web而不会把现有凭证误报为缺失。手动 Refresh 可以重新授予 Keychain 访问选择 CLI 或 Web 可以避免外部 Keychain 依赖。当所有实时 Auto 来源都失败时CodexBar 会保留history/claude.json中最后一次捕获的会话/周百分比作为过期数据显示并展示其捕获时间而不是清空配额条。恢复的历史和 CLI 抓取的百分比都显示Limited usage detail该警告描述的是保真度降低而非历史捕获的来源。这不改变登录或刷新恢复动作。计划推断优先使用subscriptionTyperate_limit_tier回退为 Max/Pro/Team/Enterprise。当 Max 的rate_limit_tier携带用量倍数default_claude_max_5x/default_claude_max_20x时标签中显示为 Max 5x / Max 20x。OAuth 作用域校验在 ClaudeUsageFetcher.swift 的validateRequiredOAuthScope中强制凭证scopes不含user:profile时抛错并提示claude setup-token重新生成凭证或切换 Web/CLI 来源。403 响应体包含user:profile时也走同一提示路径。成功请求后历史记录按凭证的单向所有者标识符oauthHistoryOwnerIdentifier作用域隔离代码刻意不要在一次成功请求后拿获胜凭证去和 Claude Code 的外部 Keychain 条目比较keychainMatch在 owner 为.claudeCLI时标记为.unavailable。Web APICookie 抓取偏好设置 → Providers → Claude → Cookie sourceAutomatic 或 Manual。Manual 模式接受 claude.ai 请求中的Cookie:头。多账户手动 Token向~/.codexbar/config.jsontokenAccounts添加条目并将 Claude cookies 设为 Manual。菜单可以堆叠显示所有账户或显示切换条偏好设置 → Advanced → Display。Claude Token 账户接受sessionKeycookie 或 OAuth 访问 Tokensk-ant-oat...。OAuth Token 账户路由到 OAuth 路径并禁用 cookie 模式session-key 或 cookie 头账户保持手动 cookie 模式。精确的边缘路由规则记录在 docs/refactor/claude-current-baseline.md。Token 账户路由基线来自 TokenAccountSupport.swift 的字符串启发式与两个边缘所有者接受的输入形态sk-ant-oat...原始 OAuth Token、Bearer sk-ant-oat...输入、原始 session key、完整 cookie 头。OAuth Token 形态的输入不会被当作 cookie。Cookie/头形态的输入是任何已包含Cookie:或的值。App 侧OAuth Token 账户保持用量来源设置不变、禁用 cookie 模式.off、清空手动 cookie 头依赖环境 Token 注入session-key/cookie 头账户保持来源设置、强制手动 cookie 模式并把原始 session key 规范化为sessionKeyvalue。CLI 侧OAuth Token 账户把有效来源模式从auto改为oauth、禁用 cookie 模式、省略手动 cookie 头并注入CODEXBAR_CLAUDE_OAUTH_TOKENsession-key/cookie 头账户保持 cookie/manual 模式。Cookie 来源顺序macOSSafari~/Library/Cookies/Cookies.binarycookiesChrome/Chromium 系~/Library/Application Support/Google/Chrome/*/CookiesFirefox~/Library/Application Support/Firefox/Profiles/*/cookies.sqlite域名claude.ai。必需的 cookie 名sessionKey值前缀sk-ant-...。缓存 cookieKeychain 缓存com.steipete.codexbar.cache账户cookie.claude含来源与时间戳。在重新从浏览器导入前会先复用。API 调用全部带Cookie: sessionKeyvalueGET https://claude.ai/api/organizations→ org UUID。GET https://claude.ai/api/organizations/{orgId}/usage→ session/weekly/opus。GET https://claude.ai/api/organizations/{orgId}/overage_spend_limit→ Extra usage 花费/限制。GET https://claude.ai/api/organizations/{orgId}/prepaid/credits→ 剩余 Usage credits 余额。GET https://claude.ai/api/account→ email 计划提示。输出Session weekly 模型专属百分比。usage API 返回时的 Daily Routines 额外窗口。Extra usage 花费/限制若启用。剩余 Usage credits 余额若启用。账户 email 推断计划。claude.ai 上的 Cloudflare 挑战是网络路径限制而不是过期 cookie 信号。CodexBar 会保留缓存的 cookie 和先前的配额快照、识别该挑战并链接到设置。在该网络下可选择 OAuth 获取实时配额窗口Web 专属的 Usage credits 余额不可用或换一个网络。显式 Web 模式是终端的绝不以 OAuth 凭证作为回退读取。实现细节见 ClaudeWebAPIFetcher.swift基 URL 为https://claude.ai/api浏览器 cookie 导入通过BrowserCookieClient且 Web 抓取仅在 macOS 上受支持isSupportedOnCurrentPlatform在非 macOS 返回 false。所有浏览器抓取通过ClaudeWebBrowserFetchGateactor 串行化防止并发抓取互相干扰FetchError.cloudflareChallenge的错误文案明确说明重新认证也无济于事并指引切换 OAuth 或更换网络。Web 抓取整体受ClaudeWebFetchStrategy的截止时间预算约束ClaudeWebFetchDeadlineState记录 deadlineBoundedTaskJoin在预算内完成可用性探测与抓取超时抛timedOut。Web 增强siloing 与 web-enrichment 基线当主来源是 OAuth 或 CLI 时Claude Web 增强仅限 extra usage 附加数据基线文档 docs/refactor/claude-current-baseline.mdWeb 附加数据可以补充可选费率窗口并可在providerCost缺失时填充它。匹配的 prepaid 余额可以增强既有providerCost而不会替换其花费/限制值。OAuth 增强调用GET /api/oauth/profile只有当 email 或组织 UUID 与主 Claude 账户匹配时才合并 Web 数据。Web 附加数据不得替换主来源的accountEmail、accountOrganization或loginMethod。快照身份保持 provider 作用域于 Claude。该行为由 ClaudeUsageFetcher.swift 的applyWebExtrasIfNeeded实现。claude-swap 多账户opt-in多账户设计文档见 docs/claude-multi-account-and-status-items.md。下面完整归纳 docs/claude.md 中的行为契约。设置偏好设置 → Providers → Claude → Read accounts from claude-swap然后把路径指向cswap可执行文件例如~/.local/bin/cswap。版本探测在启动探测失败或被取消后会重试被替换的刷新不能覆盖更新的结果禁用适配器或更改其可执行文件会清除先前检测到的版本。行为每次 Claude 刷新时CodexBar 独立于环境 Claude 抓取运行cswap --list --json无 shell、固定参数、有界运行时间与输出要求schemaVersion 1只解析插槽号、激活状态、用量状态、email仅显示、仅显示的organizationName始终存在、可为空、非空时可选的alias仅显示、5 小时/7 天窗口以及usage.scoped中可选的模型作用域周窗口。身份保持为claude-swap:slot组织名与别名绝不作身份使用。当两个及以上插槽共享同一 email 时卡片追加· organizationName或· Account N用户选择的 cswap 别名替换该标签。唯一 email 保持仅显示 email。展示当 claude-swap 报告多个账户时其账户替换环境/Token 账户的 Claude 卡片。应用遵循Menu → Multi-account layoutSegmented显示账户按钮 一个活动账户卡片挂起或失败的切换显示被请求账户的详情而活动标记保持来源所有。过期或不可用账户仍可检查而不激活选择活动账户会返回其卡片。适配器报告无活动账户时菜单会明确说明而不是选中第一行。三个账户以上按钮换行为两行。Hide Personal Info 使用稳定的Account N插槽标签。Stacked每账户一张卡片活动账户在前随后按数字插槽。四个及以上账户时切换到紧凑布局AccountMenuLayoutPlanner活动账户保留完整卡片非活动账户折叠为单行按剩余余量排序最受限的在前剩余低于 50%/10% 显示红/琥珀色最健康的可激活账户带星标健康行收进N more accounts ready摘要行。点击紧凑行会在当前菜单会话中展开该账户的完整卡片摘要行揭示隐藏行。codexbar cards保持完整的逐账户输出。同一紧凑布局适用于所有堆叠多账户列表任何 provider 的 Token 账户、扁平的 Codex 账户列表工作区分组 Codex 列表保持分节堆叠布局。单账户也想用该展示时启用Show account card when only one account is available或在已解析配置文件通常~/.config/codexbar/config.json旧安装可能用~/.codexbar/config.json的 Claude provider 上设置claudeSwapShowSingleAccount: true。该选项默认关闭零账户仍用环境展示账户身份是claude-swap:slot绝不是显示 email。终端范围这种自动优先级仅限 cards且在所有受支持的 CLI 平台上生效。显式指定 Claude provider 或--source auto仍适用--account、--account-index、--all-accounts和显式非 auto 来源标志会绕过适配器。codexbar usage与 serve/usage//cost保持不变而codexbar dashboard与GET /dashboard/v1/snapshot会在 Claude provider 行内为每个 swap 账户嵌套一个条目——默认完整身份设置--identity redacted时对 email 本地部分打码。隔离CodexBar 绝不为此功能读取 claude-swap 或 Claude Code 的凭证存储子进程自行处理其凭证访问。App 内适配器失败会把最后成功的账户作为过期数据保留在 provider 设置中显示错误绝不影响环境 Claude 用量卡片。终端 cards 中列表失败保留当前环境输出追加一条独立的Claude (claude-swap)页脚条目并以非零码退出。哨兵状态token_expired、api_key、keychain_unavailable、no_credentials及未知未来值在完整与简版 cards 中渲染为逐账户注释而非用量条。当unavailable表示 claude-swap 因窗口达 100% 而推迟轮询时CodexBar 保留该插槽最后预计的用量条并指明已耗尽的窗口5 小时会话、7 天周窗口和/或 Fable 等作用域模型及重置时间——而不是显示Usage fetch failed。首次刷新已unavailable且无保留窗口时仍注明轮询被推迟。活动行标记为[active]任何 claude-swap 行都不推断计划徽章。切换带可用来源凭证的非活动账户显示Switch Account…。点击它恰好运行cswap --switch-to slot --json验证带版本的结果与请求的插槽然后同时刷新环境 Claude 用量和每个 claude-swap 账户卡片。切换是串行化的不会自动切换。当 claude-swap 拥有账户展示时独立的环境 OAuth 动作显示为Sign in with Claude Code…不会添加或切换 claude-swap 账户。过期、缺失、未知或 Keychain 不可访问的凭证保持不可操作。失败的切换仍在该账户上可见且不会丢弃其最后一次成功用量。正在运行的 Claude Code 进程最长可能需要 claude-swap 的 Keychain 缓存间隔才能观察到新账户。多个 claude-swap 账户——以及显式启用的单账户——优先于 Claude Token 账户展示堆叠卡片与分段切换器。打包的合成验证截图假的cswap可执行文件无真实账户或凭证模型作用域周窗口验证合成数据无真实账户或凭证之前之后CLI PTY回退来源在 PTY 会话中运行claudeClaudeCLISession。默认行为每次探测后退出Debug → Keep CLI sessions alive 可让它在两次探测之间保持运行。探测工作目录~/Library/Application Support/CodexBar/ClaudeProbe带有本地 Claude 设置可在无头探测期间禁用 deep-link URL handler 注册。瞬时探测退出后CodexBar 会删除该专用ClaudeProbe项目目录下的 Claude Code.jsonl会话工件以免后台/usage轮询污染用户的 Claude 项目历史。命令流程以--allowed-tools 无工具启动 CLI。自动应答首次运行提示信任文件、工作区、遥测。发送/usage等待渲染面板必要时发送 Enter 重试。可选发送/status提取身份字段。解析ClaudeStatusProbe去除 ANSI定位 Current session Current week 头部。提取这些头部附近的剩余/已用百分比与重置文本。无法解析重置日期时菜单保留其描述并只规范一次前导Reset/Resets标签包括作用域周限制。存在时解析Account:与Org:行。成功的 CLI 配额读取即使缺少可选身份字段也会保留菜单的 Switch Account 动作。恢复的历史与失败的刷新不计为成功登录。直接暴露 CLI 错误如 token 过期。某些 Education 与组织托管的订阅只返回订阅通知没有数字化的会话或周配额字段。CodexBar 将这些限制报告为不可用保留本地花费/Token 历史可见绝不由花费或 Token 总量推导配额百分比。实现细节ClaudeStatusProbe.fetch先解析claude二进制路径支持CLAUDE_CLI_PATH环境覆盖在共享 PTY 会话中按顺序执行/usage与/status捕获/usage输出看起来像启动输出时重试一次。解析器使用TextParsing.stripANSICodes清理文本裁剪到最后一个 Settings/Usage 面板按标签子串定位百分比与重置时间并在布局漂移时以顺序百分比抓取兜底缺少 Current session 标签时抛parseFailed。ClaudeCLIRateLimitGate在检测到限流后阻塞后续 CLI 探测并在成功读取后recordSuccess。CLI 抓取超时体系auto 首次 12 秒、显式首次 24 秒、重试 60 秒cliAutoProbeTimeout/cliProbeTimeout/cliRetryProbeTimeoutPTY 失败且错误可恢复超时、still loading usage 等时先尝试一次直接 CLI路径时间预算为 PTY 超时的三分之一、6–8 秒失败信息含 subscription 时以直接结果替换 PTY 错误。成本用量本地日志扫描来源根目录原生 Claude 日志$CLAUDE_CONFIG_DIR选择一个字面目录并使用root/projects路径中的逗号是其一部分。回退根目录~/.config/claude/projects~/.claude/projectsClaude Code 与当前 Claude Desktop Code/Cowork CLI 会话其他嵌入式 Claude Desktop 项目存储若存在~/Library/Application Support/Claude/local-agent-mode-sessions/**/.claude/projects~/Library/Application Support/Claude/claude-code-sessions/**/.claude/projects当前 Claude Desktop 在claude-code-sessions下的元数据通过cliSessionId指向共享的 CLI 会话 JSONL仅元数据的目录不作为用量来源。受支持的 pi 兼容会话~/.pi/agent/sessions/**/*.jsonl~/.omp/agent/sessions/**/*.jsonl文件原生项目根目录与发现的 Claude Desktop 项目根目录下的**/*.jsonl以及受支持的 pi 兼容会话文件。解析原生 Claude 日志解析type: assistant且带message.usage的行。使用分模型 Token 计数input、cache read/create、output。按message.id requestId对流式分块去重每个分块的 usage 是累积的。pi 与 OMP 会话把anthropic助手的 usage 归属到 Claude并按助手轮次时间戳分桶因此单个 pi 兼容会话可以贡献给多个模型/天。同一会话内匹配的助手条目 ID 跨根目录只计数一次不同轮次则保留。缓存原生 provider 缓存~/Library/Caches/CodexBar/cost-usage/claude-v6.json报表备忘录~/Library/Caches/CodexBar/cost-usage/claude-v6.report-memo.json跨启动存储来源时间戳与日报表。仅在转录清单、缓存/定价工件、请求窗口与报表语义版本仍匹配时复用。Claude/Vertex 缓存工件独立于共享的 Codex 解析器指纹保留源文件身份。替换转录会重建其行而不是把旧前缀合并进新后缀真正的追加仍使用已保存的解析偏移。没有身份的旧条目在复用前会被重建一次包括正常刷新防抖期间。pi 兼容会话缓存~/Library/Caches/CodexBar/cost-usage/pi-sessions-v8.jsonCLAUDE_CONFIG_DIR的字面目录语义在 ClaudeConfigPaths.swift 中实现configRoot把该环境变量的值当作一个字面路径相对路径基于探测工作目录解析只在未设置时回退到~/.claudecredentialsURL另外支持CLAUDE_SECURESTORAGE_CONFIG_DIR。主成本扫描入口是 CostUsageFetcher.swiftpi/OMP 扫描由 PiSessionCostScanner.swift 与 PiSessionCostCache.swift 承担。关键文件索引OAuthSources/CodexBarCore/Providers/Claude/ClaudeOAuth凭证模型、Keychain 访问门、委托刷新协调器、用量抓取与限流门来源规划与策略ClaudeProviderDescriptor.swift、ClaudeSourcePlanner.swift、ClaudeUsageFetcher.swiftWeb APIClaudeWebAPIFetcher.swift、ClaudeWebExtraRateWindowParser.swiftCLI PTYClaudeStatusProbe.swift、ClaudeCLISession.swiftAdmin APIClaudeAdminAPIUsageFetcher.swift、ClaudeAdminAPISettingsReader.swiftclaude-swapSources/CodexBarCore/Providers/Claude/ClaudeSwap凭证路由与 Token 账户ClaudeCredentialRouting.swift、TokenAccountSupport.swift成本用量CostUsageFetcher.swift、PiSessionCostScanner.swift、PiSessionCostCache.swift、Sources/CodexBarCore/Vendored/CostUsage当前状态基线docs/refactor/claude-current-baseline.md【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考