fix(status): restore Codex synthetic usage line#91709
Conversation
|
Codex review: needs maintainer review before merge. Reviewed June 9, 2026, 12:00 PM ET / 16:00 UTC. Summary PR surface: Source +195, Tests +268. Total +463 across 10 files. Reproducibility: yes. The linked report gives a concrete live VPS before/after path, and current main source shows OpenAI usage depends on an OAuth/token auth label that the no-local-profile Codex app-server case lacks. Review metrics: 2 noteworthy metrics.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land this only after maintainer acceptance of the OpenAI-to-Codex synthetic usage routing, keeping the rate-limit parser plugin-local and avoiding any new public SDK surface. Do we have a high-confidence way to reproduce the issue? Yes. The linked report gives a concrete live VPS before/after path, and current main source shows OpenAI usage depends on an OAuth/token auth label that the no-local-profile Codex app-server case lacks. Is this the best way to solve the issue? Yes, with maintainer acceptance. Keeping the Codex rate-limit fetch and parser inside the Codex plugin is the right owner boundary; the only open question is whether maintainers accept the OpenAI usage context calling the Codex hook. AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 86bab9699d0d. Label changesLabel justifications:
Evidence reviewedPR surface: Source +195, Tests +268. Total +463 across 10 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@clawsweeper re-review Addressed the review findings at head
|
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
@clawsweeper re-review PR body is now updated directly with:
Please re-review head |
|
🦞👀 Command router queued. I will update this comment with the next step. Re-review progress:
|
|
@clawsweeper re-review Updated the PR body directly at head Also preserved the SDK-boundary response from the rank-up move: the Codex app-server parser is plugin-local in |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Maintainer verification before landing:
Known proof gap: |
…26.6.6) (#1040) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.5` → `2026.6.6` | --- ### Release Notes <details> <summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary> ### [`v2026.6.6`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#202666) [Compare Source](openclaw/openclaw@v2026.6.5...v2026.6.6) ##### Highlights - Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. ([#​91529](openclaw/openclaw#91529), [#​91618](openclaw/openclaw#91618), [#​91615](openclaw/openclaw#91615), [#​91619](openclaw/openclaw#91619), [#​91741](openclaw/openclaw#91741), [#​91745](openclaw/openclaw#91745), [#​91746](openclaw/openclaw#91746), [#​91748](openclaw/openclaw#91748), [#​91749](openclaw/openclaw#91749), [#​91750](openclaw/openclaw#91750), [#​91751](openclaw/openclaw#91751), [#​91752](openclaw/openclaw#91752), [#​91763](openclaw/openclaw#91763), [#​89938](openclaw/openclaw#89938)) Thanks [@​joshavant](https://github.com/joshavant), [@​pgondhi987](https://github.com/pgondhi987), [@​mmaps](https://github.com/mmaps), [@​eleqtrizit](https://github.com/eleqtrizit), [@​shakkernerd](https://github.com/shakkernerd), and [@​drobison00](https://github.com/drobison00). - Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, `/compact` works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. ([#​91189](openclaw/openclaw#91189), [#​88682](openclaw/openclaw#88682), [#​89588](openclaw/openclaw#89588), [#​90212](openclaw/openclaw#90212), [#​91876](openclaw/openclaw#91876), [#​91874](openclaw/openclaw#91874), [#​91904](openclaw/openclaw#91904), [#​91478](openclaw/openclaw#91478), [#​91915](openclaw/openclaw#91915)) Thanks [@​codysai001](https://github.com/codysai001), [@​alexzhu0](https://github.com/alexzhu0), [@​joelnishanth](https://github.com/joelnishanth), [@​snowzlm](https://github.com/snowzlm), [@​obviyus](https://github.com/obviyus), and [@​sallyom](https://github.com/sallyom). - iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. ([#​91335](openclaw/openclaw#91335), [#​91449](openclaw/openclaw#91449), [#​88969](openclaw/openclaw#88969), [#​88530](openclaw/openclaw#88530), [#​91783](openclaw/openclaw#91783), [#​91785](openclaw/openclaw#91785)) Thanks [@​omarshahine](https://github.com/omarshahine), [@​jmissig](https://github.com/jmissig), and [@​colmbrogan](https://github.com/colmbrogan). - Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile `cdpUrl` handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. ([#​91422](openclaw/openclaw#91422), [#​89851](openclaw/openclaw#89851), [#​91736](openclaw/openclaw#91736), [#​91747](openclaw/openclaw#91747), [#​91451](openclaw/openclaw#91451), [#​80143](openclaw/openclaw#80143)) Thanks [@​pgondhi987](https://github.com/pgondhi987), [@​anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia), [@​lifuyue](https://github.com/lifuyue), [@​eleqtrizit](https://github.com/eleqtrizit), [@​LiuwqGit](https://github.com/LiuwqGit), and [@​HemantSudarshan](https://github.com/HemantSudarshan). - Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. ([#​91531](openclaw/openclaw#91531), [#​91538](openclaw/openclaw#91538), [#​91568](openclaw/openclaw#91568), [#​91583](openclaw/openclaw#91583), [#​91598](openclaw/openclaw#91598)) - Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. ([#​91830](openclaw/openclaw#91830), [#​91882](openclaw/openclaw#91882), [#​91590](openclaw/openclaw#91590), [#​88630](openclaw/openclaw#88630), [#​88768](openclaw/openclaw#88768), [#​91696](openclaw/openclaw#91696)) Thanks [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@​joshavant](https://github.com/joshavant), [@​bdjben](https://github.com/bdjben), and [@​Coder-Wangyankun](https://github.com/Coder-Wangyankun). ##### Changes - CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. ([#​89834](openclaw/openclaw#89834), [#​90883](openclaw/openclaw#90883)) Thanks [@​anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia). - Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. ([#​91256](openclaw/openclaw#91256), [#​91568](openclaw/openclaw#91568), [#​91583](openclaw/openclaw#91583)) Thanks [@​amknight](https://github.com/amknight). - Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. ([#​91574](openclaw/openclaw#91574), [#​91591](openclaw/openclaw#91591), [#​90004](openclaw/openclaw#90004), [#​90927](openclaw/openclaw#90927), [#​90838](openclaw/openclaw#90838)) Thanks [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@​brokemac79](https://github.com/brokemac79), and [@​lonexreb](https://github.com/lonexreb). - Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. ([#​91324](openclaw/openclaw#91324), [#​89138](openclaw/openclaw#89138), [#​90457](openclaw/openclaw#90457), [#​91837](openclaw/openclaw#91837), [#​91851](openclaw/openclaw#91851)) Thanks [@​osolmaz](https://github.com/osolmaz), [@​mushuiyu886](https://github.com/mushuiyu886), [@​ai-hpc](https://github.com/ai-hpc), and [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. ([#​91423](openclaw/openclaw#91423), [#​91557](openclaw/openclaw#91557), [#​89909](openclaw/openclaw#89909)) Thanks [@​cxyhhhhh](https://github.com/cxyhhhhh), [@​Solvely-Colin](https://github.com/Solvely-Colin), and [@​baskduf](https://github.com/baskduf). - Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. ([#​90782](openclaw/openclaw#90782), [#​89978](openclaw/openclaw#89978), [#​91580](openclaw/openclaw#91580), [#​91531](openclaw/openclaw#91531)) Thanks [@​RomneyDa](https://github.com/RomneyDa) and [@​ai-hpc](https://github.com/ai-hpc). ##### Fixes - Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. ([#​85679](openclaw/openclaw#85679), [#​91450](openclaw/openclaw#91450), [#​91566](openclaw/openclaw#91566), [#​91840](openclaw/openclaw#91840), [#​91590](openclaw/openclaw#91590), [#​91361](openclaw/openclaw#91361), [#​91895](openclaw/openclaw#91895)) Thanks [@​openperf](https://github.com/openperf), [@​yetval](https://github.com/yetval), [@​joshavant](https://github.com/joshavant), [@​wangmiao0668000666](https://github.com/wangmiao0668000666), and [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native `/compact` replies through source suppression. ([#​89151](openclaw/openclaw#89151), [#​91422](openclaw/openclaw#91422), [#​91425](openclaw/openclaw#91425), [#​91529](openclaw/openclaw#91529), [#​90212](openclaw/openclaw#90212)) Thanks [@​joelnishanth](https://github.com/joelnishanth), [@​pgondhi987](https://github.com/pgondhi987), [@​joshavant](https://github.com/joshavant), and [@​snowzlm](https://github.com/snowzlm). - Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. ([#​85823](openclaw/openclaw#85823), [#​89659](openclaw/openclaw#89659), [#​91684](openclaw/openclaw#91684), [#​91649](openclaw/openclaw#91649), [#​90263](openclaw/openclaw#90263), [#​91686](openclaw/openclaw#91686), [#​90426](openclaw/openclaw#90426)) Thanks [@​itsuzef](https://github.com/itsuzef), [@​ladygege](https://github.com/ladygege), [@​jacobtomlinson](https://github.com/jacobtomlinson), [@​fuller-stack-dev](https://github.com/fuller-stack-dev), and [@​shushushv](https://github.com/shushushv). - Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. ([#​90666](openclaw/openclaw#90666), [#​90678](openclaw/openclaw#90678)) Thanks [@​ai-hpc](https://github.com/ai-hpc). - Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in `config.patch`, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. ([#​87105](openclaw/openclaw#87105), [#​91551](openclaw/openclaw#91551), [#​91219](openclaw/openclaw#91219), [#​91614](openclaw/openclaw#91614), [#​91740](openclaw/openclaw#91740), [#​91978](openclaw/openclaw#91978)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev) and [@​scotthuang](https://github.com/scotthuang). - Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 `reasoning_content`, and avoid guardian review for local models. ([#​91390](openclaw/openclaw#91390), [#​91709](openclaw/openclaw#91709), [#​91507](openclaw/openclaw#91507), [#​91567](openclaw/openclaw#91567), [#​88630](openclaw/openclaw#88630), [#​91696](openclaw/openclaw#91696)) Thanks [@​hxy91819](https://github.com/hxy91819), [@​brokemac79](https://github.com/brokemac79), [@​RomneyDa](https://github.com/RomneyDa), [@​joshavant](https://github.com/joshavant), and [@​Coder-Wangyankun](https://github.com/Coder-Wangyankun). - Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. ([#​91581](openclaw/openclaw#91581), [#​91599](openclaw/openclaw#91599), [#​91547](openclaw/openclaw#91547), [#​91591](openclaw/openclaw#91591)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev), [@​sallyom](https://github.com/sallyom), and [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen). - UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. ([#​91480](openclaw/openclaw#91480)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - Android: avoid the `dataSync` foreground-service type for persistent nodes. ([#​80082](openclaw/openclaw#80082)) Thanks [@​davelutztx](https://github.com/davelutztx). - Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. ([#​91550](openclaw/openclaw#91550)) Thanks [@​joshavant](https://github.com/joshavant). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1040
Summary
Fixes #91694.
/statusprovider-usage line for OpenAI/Codex sessions running on the Codex runtime, including the visibleUsage: 5h ... Week ...windows that existed in the previous release.codex-app-servermarker and the default Codex auth bridge, so live OAuth/CLI auth can be used without hard-coding any profile id.extensions/codex/src/app-server/rate-limits.ts, not exported fromopenclaw/plugin-sdk/provider-usage, so this PR does not add or baseline a new public SDK contract.CONTRIBUTING.mdguidance for contributor PRs.AI-assisted: prepared with Codex. The proof below was run on the reporter's live VPS OpenClaw host, which is where #91694 was found.
Linked context
Closes #91694.
Related: reporter requested live VPS proof instead of Crabbox/Testbox/Docker because the live VPS OpenClaw environment is where the regression was observed.
Real behavior proof (required for external PRs)
/statusfor an OpenAI/Codex session on the Codex runtime should visibly show the restored 5h and weekly usage windows.myvps(polymarket-mc), Linux6.17.0-1011-oraclearm64, Nodev22.22.0, pnpm10.32.1, live OpenClaw config/Gateway from2026.6.5-beta.6, patched source checkout/tmp/openclaw-91694-proofat PR head5a0bdc4de39b7cde80b3eadb6c3647f64b8dc7a4. The proof used the reporter's live OpenAI/Codex auth profile with private details redacted; no profile id or account-specific value is committed in code.5a0bdc4de39b7cde80b3eadb6c3647f64b8dc7a4on the live VPS, loaded the live OpenClaw config/session store, registered the PR source Codex provider in-process, and rendered the live chat/statustext for sessionagent:main:beta531-smoke-codex-runtime-after-plugin./statusrender now visibly includes📊 Usage: 5h 84% left ... Week 44% left ...forRuntime: OpenAI Codex, matching the previous-release behavior shown in [Bug]: Codex/OpenAI usage line disappears from status after 2026.6.5-beta.6 #91694's before screenshot.2026.6.5-beta.6, while the source checkout reports2026.6.2, so the proof command prints the version/config warnings shown above. The proof registers the PR source Codex provider in-process because the installed live plugin is pre-fix and skipped by the local source checkout; the status renderer, provider hook, live config/session store, and live auth bridge are still the patched code path and real VPS environment. Crabbox/Testbox/Docker were not used for the final proof because the reporter explicitly requested the live VPS as the bug source.Usage: 5h ... Week ...; the regression removed that visible line after upgrading.Tests and validation
Focused commands run after the final patch:
/tmp/openclaw-91694-proof, head5a0bdc4de39b7cde80b3eadb6c3647f64b8dc7a4):ssh myvps "cd /tmp/openclaw-91694-proof && node --import tsx ./proof-render-live-status-source-provider.mjs"-> passed and copied above with visibleUsage:output.env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=4 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 node scripts/run-vitest.mjs src/infra/provider-usage.auth.plugin.test.ts src/infra/provider-usage.load.plugin.test.ts extensions/codex/provider.test.ts extensions/codex/src/app-server/rate-limits.test.ts src/auto-reply/reply/commands-status.test.ts-> passed, 3 Vitest shards, 67 tests.node scripts/run-tsgo.mjs -p tsconfig.core.json --noEmit --incremental false-> passed.node scripts/run-tsgo.mjs -p tsconfig.extensions.json --noEmit --incremental false-> passed.git diff --check-> passed.node scripts/run-vitest.mjs extensions/codex/provider.test.ts-> passed, 18 tests.node scripts/run-vitest.mjs extensions/codex/src/app-server/rate-limits.test.ts-> passed, 14 tests.node scripts/run-vitest.mjs src/infra/provider-usage.auth.plugin.test.ts src/infra/provider-usage.load.plugin.test.ts-> passed, 10 tests.node node_modules\vitest\vitest.mjs run src/auto-reply/reply/commands-status.test.ts -t "loads Codex synthetic usage" --config test\vitest\vitest.auto-reply.config.ts --reporter=verbose-> passed, 1 targeted status regression test.node scripts/run-tsgo.mjs -p tsconfig.core.json --noEmit --incremental false-> passed.node scripts/run-tsgo.mjs -p tsconfig.extensions.json --noEmit --incremental false-> passed.git diff --check-> passed.Regression coverage added or updated:
src/auto-reply/reply/commands-status.test.ts: covers Codex synthetic usage rendering for OpenAI/Codex sessions with OAuth labels and with no local OpenAI profile.src/infra/provider-usage.auth.plugin.test.ts: covers synthetic Codex auth fallback for OpenAI usage.src/infra/provider-usage.load.plugin.test.ts: covers routing an OpenAI usage request through the Codex provider hook while preserving OpenAI provider context.extensions/codex/provider.test.ts: covers default Codex auth-bridge rate-limit reads, without forcing or committing anyauthProfileId.extensions/codex/src/app-server/rate-limits.test.ts: covers plugin-local Codex app-server rate-limit payload parsing.Risk checklist
Did user-visible behavior change?
Yes.Did config, environment, or migration behavior change?
No.Did security, auth, secrets, network, or tool execution behavior change?
Yes, narrowly: status can read Codex app-server rate-limit data through the existing Codex provider hook when OpenAI/Codex synthetic auth is active.Highest-risk area: provider-usage auth routing between OpenAI status context and Codex hook execution.
Risk mitigation: focused tests cover auth fallback, hook routing, Codex payload parsing, provider hook integration, default auth-bridge behavior, and
/statusrendering; live VPS proof exercised the reporter's active OpenClaw config/session/auth state and visibly restored the 5h and weekly usage line.Current review state
Next action: maintainer review after the current CI pass completes.
Still waiting on: maintainer acceptance for the OpenAI-to-Codex synthetic usage auth routing that ClawSweeper flagged as the remaining human review point.
CI note: d670f9c was an empty commit pushed only to retrigger the infra-failed OpenGrep check. The latest head $head adds test-only mock typing fixes after CI check-test-types found two test inference errors. Runtime code and live VPS behavior proof remain from 5a0bdc4; subsequent commits do not change runtime behavior.
Bot/reviewer comments addressed: