进程与界面 · 组件 · 数据流 · 数据等级 · 本地文件 · 外部边界
应用以 LSUIElement 运行。CodexTokenLedgerApp 启动后,由 NativeMenuBarController 创建菜单:
NSStatusItem
└── NSMenu
└── NSMenuItem.view
└── NSHostingView<MenuBarDashboardView>
AppKit 负责菜单窗口、材质和尺寸,SwiftUI 负责内容。应用没有主窗口或 Dock 图标。
NativeMenuBarController
├── 菜单生命周期、状态栏、主题、尺寸
└── DashboardViewModel
├── CodexLiveContextMonitor / CodexLiveContextReader
├── CodexSessionScanner / CodexThreadMetadataReader
├── CodexAccountService
├── CodexCredentialImportAdapter / CodexCredentialStore
├── BillingCalculator / PricingCatalog
├── QuotaForecastEngine / QuotaUsageHistoryStore
├── TiboResetSignalService / TiboResetSignalStore
└── UsageCacheStore / CodexAccountUsageStore / UsageExporter
DashboardViewModel 持有界面状态并调用服务。文件发现由 CodexLiveContextMonitor actor 串行处理;视图不直接访问文件、网络或凭据。
- 在
$CODEX_HOME/sessions中发现未完成的 JSONL。 - 读取
task_started、task_complete、turn_context和token_count。 - 用最新
last_token_usage更新当前请求。 - 对严格增长的
total_token_usage求差,得到本轮调用。 - 将活动任务交给
DashboardViewModel排序和选择。
- 扫描
sessions,按设置决定是否扫描archived_sessions。 - 每个现代会话只采用最后一个有效累计事件。
- 旧格式事件按会话和计数指纹去重。
- 文件索引写入
UsageCacheStore,未变化的文件不重复完整分析。
- 每个账号使用独立 Codex Home。
CodexAccountService启动codex -s read-only -a never app-server。- 调用
account/read、account/rateLimits/read,以及可用时的account/usage/read。 - 返回值转成
CodexAccountUsageSnapshot;缓存不保存原始凭据。
CodexCredentialImportAdapter识别 Token、API Key 和受支持的 JSON 结构。- 转为 Codex 原生
auth.json。 CodexCredentialStore校验后写入隔离账号目录。- “仅监控”不改动默认 Codex Home。
- “登录到 Codex”先备份原凭据,再通过同目录临时文件原子替换。
| 枚举 | 数据 |
|---|---|
codexEventExact |
rollout 原始计数 |
codexServerOfficial |
Codex 本机服务返回值 |
derivedFromExactCounters |
对原始计数去重、求差或聚合 |
officialRateEstimate |
Token 明细按费率折算 |
unavailable |
证据不足 |
显示层不能把 unavailable 改成零。
根目录:
~/Library/Application Support/CodexTokenLedger/
| 内容 | 位置 |
|---|---|
| 界面设置 | UserDefaults |
| 会话索引 | usage-index-v1.json |
| 账号快照 | account-usage-v1.json |
| 额度样本 | quota-observations-v1.json |
| Tibo 元数据 | tibo-reset-signal.json |
| 隔离账号 | Accounts/**/.codex/auth.json |
| 登录备份 | CredentialBackups/**/.codex/auth.json |
默认 Codex Home 为 $CODEX_HOME;未设置时使用 ~/.codex。
运行时不包含第三方 Swift 包。应用只连接:
- 本机 Codex CLI 与 Codex Home
- 可选的 Tibo 公共数据源
- macOS 系统框架
Xcode 工程由 project.yml 通过 XcodeGen 生成。