Visual identityS cycles



CodexBar v4.0.0(100)运行架构

CodexBar 用户态信任域 · 常驻 App、Hook 子进程与本地数据 独立 Hook 子进程 · 当前用户权限 用户文件边界 · 跨进程 flock Codex 外部执行域 · 本机可执行文件与 CODEX_HOME iCloud 私有数据库部署域 root LaunchDaemon · 签名 XPC 信任边界 App 装配、UI 与通知 AppDelegate · 面板 · 流光 · 通知 LSUIElement / MainActor 状态、来源与 Hook 配置 StatusService · HookSettings · ProxySettings App 内 actor + MainActor Codex app-server stdio JSON-RPC · 可选 HTTP(S) 代理 外部可执行文件 Codex 本地运行域 CLI / App · hooks.json · rollout JSONL 外部进程与用户数据 Hook 子进程记录器 --hook-event · 来源归一化 · 有界读取 短生命周期 / 当前用户 本地事件与保护状态 events · daily (schema 9) · maintenance · protection Application Support / flock 实时监控与历史聚合 ActivityMonitor · origin 过滤 · WorkflowService 两条独立数据链路 CloudKit private database 脱敏日聚合 · 自定义 zone · 本地缓存 用户可选网络边界 Reset Credits 自动重置 AutoResetController · UUIDv5 · 5 分钟窗口 App 内状态机 / 默认关闭 睡眠策略与唤醒协调 KeepAliveController · AutoResetWakeScheduler App 决策 / 确认式事务 CodexBarHelper 租约 · wake 事件 · 启动与断连恢复 最小特权边界 macOS 系统集成 SMAppService · IOKit · pmset · power events 系统服务边界 刷新与设置意图 额度、来源与连接状态 stdio JSON-RPC 修复配置与信任 stdin Hook 事件 rollout 生命周期 flock + JSONL 实时 tail 与历史重建 快照、终态事件与保护结果 可选脱敏日聚合 非匿名可见任务快照 新鲜明细与消费 RPC 自动重置状态与通知 阈值或重试时间 签名 XPC 防睡眠租约 独立 XPC 固定唤醒时间 固定 pmset 固定 owner 的 wake 事件 Legend Frontend Backend Database Cloud Security Message bus External

1 · 启动、菜单栏与连接

  • CodexBarApp 先调用 handleIfRequested() 分流 Hook 子进程;普通模式由 CodexBarAppDelegate 装配共享服务、UI、任务流光、通知、自动重置与系统电源协调
  • • 原生 NSStatusBarButton 内常驻 StatusItemIconViewStatusItemIconPresentation 按符号、额度与缓存状态变化发布更新;原生按钮处理点击与焦点,左键在 mouseUp 时切换面板,右键或 Control 点击打开菜单
  • • 菜单栏图标优先级为账户错误、等待批准、运行中、10 秒内的最新完成或终止、空闲;StatusItemController 独立安排终态到期刷新,系统唤醒后按当前时间重新判定
  • • 额度以彩色弧线显示,显隐过渡为 0.3 秒,缓存额度降低透明度;零额度保留轨道,不可用额度隐藏弧线。符号切换使用 0.2 秒的交叉淡入淡出与缩放过渡,首次绘制与唤醒对账关闭过渡
  • • 主面板区域顺序、可见性与动画偏好由 MainPanelSettings 管理;关闭 Hook 隐藏任务中心,从关闭切换为开启时自动显示,启动时恢复已开启的 Hook 则保留保存的布局
  • • popover 与备用面板各自持有 MenuSurfaceAnimationState:展示前开启动画许可,淡出期间保留过渡,实际关闭后禁用 SwiftUI 根事务动画;后台数据刷新继续执行
  • CodexStatusMenuView 按用户“动画效果”开关控制入场动画,通过 mainPanelAnimationsEnabled 结合宿主可见性控制持续动画;面板可见时数字随数据变化滚动,Token 数字与占位状态淡入淡出,数字更新动画独立于该开关
  • StatusItemControllerpopoverDidClose 中关闭对应宿主的动画许可,并清理淡入任务、展示状态、事件监听与侧边面板;主动关闭前先清除宿主身份
  • • 侧边窗口立即关闭或已不可见时,重置抽屉动画、执行 orderOut 并解除父子关系;任务中心的立即关闭请求转交抽屉处理
  • • 设置窗口保留 hosting controller,SettingsWindowAnimationState 根据窗口可见性、遮挡、最小化和关闭状态管理动画许可;关闭时同步清理设置子面板与事件监听
  • • 关于页的重连图标仅在设置窗口可见且正在刷新或重连时创建持续动画;隐藏时切回静态图标,切离关于页时移除版本区,恢复展示后按忙碌状态决定动画
  • • Codex 来源支持自动、全局 CLI 和 App 内置 CLI;自动模式优先全局 CLI。手动重连先关闭旧会话,成功后保存来源,失败时保持断开并展示连接错误
  • AppServerSession 从握手 userAgent 提取运行版本;账户链路要求至少 0.145.0,启用或校验 Hook 要求至少 0.150.0;版本无法解析时按响应无效处理
  • CodexStatusViewModel 按 60 秒间隔协调刷新;主面板完成 0.24 秒淡入且仍可见时,依次触发 Hook 对账、本地统计和账户刷新检查。CodexStatusService 复用 stdio 会话,连接满 1 小时后在下一次请求中重建
  • • 自定义 HTTP(S) 代理通过环境变量注入 CodexBar 启动的 app-server,并为该子进程关闭系统代理优先策略;localhost127.0.0.1::1 直连
  • CodexProxyStore 将代理配置与密码保存在本机 UserDefaults;保存或启停代理会回收正式连接并清空补充数据缓存,后续请求按新配置重建
  • • 代理测试使用独立临时 app-server,握手、账户和额度读取共享 8 秒请求截止时间;测试结束关闭进程,探测请求不写入额度交互日志

2 · Hook 配置与采集

  • CodexHookSettings 在启动、刷新和设置页打开时对账已开启的 Hook;按当前可执行路径与 --hook-event 识别管理项,原子修复缺失、重复或损坏的配置并保留其他 handler
  • • 配置修复后通过 hooks/list 校验并恢复匹配项的信任;全局 Hook 关闭时暂停修复。明确低于 Hook 最低版本时移除 CodexBar handler 并尽力清理信任;低于账户链路最低版本时本地移除 handler,保留无法通过 app-server 查询的信任项。版本未知或 RPC 临时失败时保留配置
  • • Hook 子进程读取 stdin,从 rollout 首条 session_meta 归一化 main / autoReview / auxiliary / unknown,首行读取上限 256 KiB;缺少来源时以 codex-auto-review 模型补充自动审查判定
  • UserPromptSubmitPermissionRequest 按 turn ID 查询 rollout 尾部,最多读取 512 KiB,补齐 effort 与审批模式
  • • 配置的 handler 超时为 SessionEndInterrupt 3 秒、其他事件 5 秒;锁等待预算分别为 1 秒和 3 秒,采集失败以成功退出状态返回 Codex
  • • 单次 flock 事务追加 events/YYYY-MM-DD.jsonl 并更新维护状态;原始事件保留归一化来源供实时过滤与历史聚合分别消费

3 · 实时任务、通知与保护

  • HookEventTailReader 启动回放滚动 24 小时,随后每轮读取完成后等待 2 秒,推进完整 JSONL 行并报告数据源健康;drainNow() 等待请求之后开始的一轮读取
  • • rollout 每轮对账后等待 1 秒,补齐进展、审批和终态。Stop 将任务标记为“正在收尾”,保留活动状态直到 rollout 确认终态;新 turn 或 SessionEnd 将旧任务移出活动列表并开启 5 秒确认窗口,到期仍无终态时记录终止,已隐藏任务只保留去重状态
  • • 来源按 session + turn 精确记忆 24 小时:mainauxiliary 正常处理,autoReview 清理对应任务、终态和保护记录;unknown 仅沿用同 key 已确认且有效的正常来源,否则忽略。历史聚合消费全部原始事件
  • Interrupt 结束匹配的 turn 并清理保护与通知状态,身份有歧义时忽略;Hook 与 rollout 共用 24 小时终态去重记忆,保留先确认的结果,完成与终止记录展示 10 分钟。CodexActivityMonitor 通过 presentationPublisher 发布快照和本轮终态事件,通过 transitionPublisher 驱动通知;终止不触发完成提醒,匿名任务参与 UI 与流光,通知、触觉、防睡眠和异常保护仅消费非匿名任务
  • • 活动卡片通过 primaryActivity 优先展示等待、运行,再按结束时间选择最新的完成或终止,同时间优先终止。卡片数据可用且正在防睡眠时显示青绿色 sun.max.fillmainPanelAnimationsEnabled 开启时,RotatingKeepAliveSun 每 2 秒顺时针旋转一圈,关闭时显示静态图标
  • TaskGlowController 在任务流光开关与 Hook 均可用时,通过穿透鼠标且不激活的 NSPanel 在各显示器顶部跨 Space 与全屏显示状态;开关默认关闭,独立于主面板动画设置。橙色等待优先于青色运行,其他任务仍活跃时以绿色完成或红色终止覆盖 3 秒,最后 0.5 秒淡出;无活跃任务时显示最新终态至结束后 10 秒,最后 1 秒淡出。历史恢复不补播短提示;睡眠、屏幕休眠或会话不活跃时移除窗口,恢复后按当前时间接续有效状态
  • • 异常会话保护跟随防睡眠开关,只判定运行中任务;静默阈值可选 30 分钟、1、2 或 4 小时,默认 1 小时。bootstrap、睡眠、恢复和数据源不可用期间暂停判定
  • • 系统唤醒后先等待读取屏障成功,再执行 rollout 对账并恢复保护判定;保护文件使用 schema 1,通过 flock 共享哈希身份和时间戳,保留到最后进展后的 24 小时

4 · 历史聚合与 CloudKit

  • WorkflowService 独立消费全部原始 Hook 事件并维护 daily.jsonl;原始事件与日聚合保留 210 天,精确身份明细保留 3 天
  • • 聚合算法 schema 为 9。每日会话 ID 集合排除 SessionEnd,轮次 ID 集合排除 StopInterrupt;结束事件仍计入事件与对应类型计数
  • • 可用的空 ID 集合保留明确的 0,Hook 计数字段缺失表示来源不可用;重建继承已有可用性,没有聚合时 interruptCount 保持缺失,实际读到中断事件后形成计数。schema 变化从保留期原始 JSONL 完整重建,source generation 变化由同步层执行替换事务
  • • 热力图按日期合并 app-server Token 与 Hook 日聚合:日 bucket 缺失时显示不可用,当天 bucket 尚未返回时显示待更新
  • WorkflowSyncService 按用户开关将脱敏日聚合写入 CloudKit private database 的自定义 zone,并维护本地同步缓存;上传包含中断在内的日计数、脱敏项目与设备身份。interruptCount 缺失时保持不可用,同日任一贡献缺失则合计也不可用;热力图详情不展示该指标

5 · Reset Credits 自动重置

  • AutoResetController 默认关闭;提前量可选 15 分钟、30 分钟、1、2、4 或 6 小时,默认 30 分钟。目标取新鲜明细中最早到期的 available + codexRateLimits + expiresAt 凭证
  • • 临期后强制重读,确认目标仍可消费,再提交 creditId 与按原始 ID 计算的确定性 UUIDv5;跨设备重复消费由 app-server 的幂等结果收敛
  • resetalreadyRedeemed 均按成功处理;临时故障按 15、30、60、120、300 秒退避。距到期不超过 10 分钟的 nothingToReset 每 60 秒复核,单轮连续重试最多 5 分钟
  • • 持有 creditId + expiresAt 后安排阈值或重试唤醒;到点读取期间短时阻止空闲睡眠,目标变化、功能关闭或 App 退出时取消计划

6 · Helper、电源与恢复

  • KeepAliveController 根据用户意图、Hook 可用性、非匿名任务、Helper 授权、电池与时长决定防睡眠;运行中任务参与判定,等待批准任务由单独选项控制
  • • 自动重置与防睡眠从关闭切换为开启时先显示确认框,按 Helper 状态说明安装或授权步骤;确认后保存意图并注册,系统设置由用户点击按钮打开
  • HelperInstallationStatus 综合注册状态、组件异常与注册错误,供关于页和功能设置共用;组件正常且无注册错误时,.notRegistered.notFound 均显示未安装,组件缺失或无效时优先显示不可用
  • HelperPackageValidation 在启动和 App 激活等刷新时于后台校验可执行文件、plist 关键字段、App 资源封印及 Helper 的同团队签名;安装前发现组件缺失时取消旧结果,并重新校验
  • • 自动重置子面板仅在开关开启且 helperStatus == .enabled 时可用;断连和超时先复核授权,失去授权后释放 App assertion 并停止普通租约重试
  • • 两个功能共用 SMAppService 注册;AutoResetWakeScheduler 通过独立 XPC 连接同步唤醒时间,距现在不超过 5 秒的目标走 App 内到点路径
  • • Helper 校验客户端签名,以 generation、10 秒请求超时和 15 秒 watchdog 管理防睡眠租约;自动唤醒接受有限时间戳,使用固定 owner 和固定 wake 类型
  • • 退出或 Helper 更新前回读确认 wake 计划和 owned 睡眠状态已清理;断连、Helper 启动与信号退出继续恢复。App 用 IOKit 管理本进程断言,Helper 只恢复自身接管的系统睡眠设置