Skip to content

Sync upstream CodexBar through 78076795#52

Merged
ColumbusLabs merged 95 commits into
mainfrom
codex/upstream-sync-51-20260704
Jul 5, 2026
Merged

Sync upstream CodexBar through 78076795#52
ColumbusLabs merged 95 commits into
mainfrom
codex/upstream-sync-51-20260704

Conversation

@ColumbusLabs

Copy link
Copy Markdown
Owner

Closes #51

Upstream range

  • steipete/CodexBar: 61ff93208255d69872243fd78f24273528a9ac4d..7807679535394caa78b75526caf433057377648f
  • Local merge commit: 64781b40b
  • version.env now records UPSTREAM_MONITOR_BASE=7807679535394caa78b75526caf433057377648f

Review focus

  • High-risk provider/auth/quota paths: Claude OAuth/keychain handling, Codex reset credits, Kimi parsing, Mistral metrics, provider registry/palette changes.
  • Process/CLI/runtime paths: CLI help/docs, parser fingerprinting, cost scanner cache invalidation, release/workflow guardrails.
  • Mobile/widget/shared sync paths: provider palette parity, widget snapshots, sync model formatting, shared usage/chart surfaces.
  • QuotaKit ownership: preserved Columbus Labs/QuotaKit branding, release URLs, appcast ownership, workflow lanes, CloudKit-facing metadata, and iOS build numbers.

QuotaKit adaptations

  • Preserved QuotaKit appcast/release metadata and public docs framing while integrating upstream provider/runtime behavior.
  • Combined upstream KeychainSecurity use with QuotaKit no-UI keychain prompt safety gates.
  • Kept Cursor source modes aligned as auto, api, and web.
  • Fixed merged menu bar icon handling so Mistral monthly plan metrics render as percentages.
  • Mirrored ClawRouter/CrossModel provider colors into the mobile palette.
  • Bumped parserLogicVersion and regenerated CodexParserHash for cost scanner changes.

Validation

  • git diff --check
  • git diff --cached --check before commit
  • PARSER_LINT_BASE=origin/main ./Scripts/lint.sh lint
  • swift build
  • ./Scripts/audit_provider_palette.py via lint
  • plutil -lint Sources/CodexBar/Resources/*.lproj/Localizable.strings
  • xmllint --noout appcast.xml
  • swift test --filter ProviderRegistryTests
  • swift test --filter KeychainPromptSafetyAuditTests
  • swift test --filter ClaudeOAuthDelegatedRefreshCoordinatorTests
  • swift test --filter StatusItemAnimationSignatureTests
  • swift test --filter KimiUsageResponseParsingTests
  • swift test --filter CostUsageScannerBreakdownTests
  • swift test --filter CostUsageWindowSummaryTests
  • ./Scripts/check_upstreams.sh -> no new commits since 7807679535394caa78b75526caf433057377648f

Local limitation

  • iOS simulator test could not start locally because Xcode reported CoreSimulator 1051.54.0 is older than the Xcode build's expected 1051.55.0, then no iPhone 17 Pro simulator destination was available. CI should cover this lane.

joeVenner and others added 30 commits July 3, 2026 13:40
* Redesign codexbar.app landing page with updated hero and sections.

Refresh docs/index.html with the new dark landing layout, coordinated hero animations, features/technical sections, language picker shell, and lossless hero mockup assets for GitHub Pages.

* feat(landing): add section container and improve hero title wrapping.

Introduce a shared section-inner max-width wrapper and hero title line spans so the headline stays readable at wide breakpoints.

* feat(landing): redesign features section as three-card grid.

Replace the stacked feature list with a responsive card grid, red image placeholders, and a focused three-item layout without CLI/widgets copy.

* feat(landing): add CLI section with split terminal layout.

Introduce a terminal output mock on the left with CodexBar on CLI copy on the right, including bundled binary messaging and session privacy footnote.

* feat(landing): add widgets section with macOS gallery mock.

Recreate the macOS widget picker on the right with copy on the left, using red placeholders for small, medium, and large widget previews.

* chore(landing): add CodexBar widget preview PNG assets.

Add eleven transparent widget crops for the landing page macOS gallery mock.

* feat(landing): wire widget gallery with scroll and real previews.

Replace red placeholders with widget PNGs, group them in scrollable rows, and keep the gallery viewport height fixed.

* fix(landing): color CLI privacy footnote icon #0099ff.

Match the shield icon to CodexBar blue instead of muted gray.

* fix(landing): color CLI meter blocks #0099ff.

Replace the tan usage bar fill with CodexBar blue across the terminal mock.

* fix(landing): align feature card visuals across the grid.

Stretch each card and pin the image placeholders to a shared baseline so differing copy lengths no longer throw off the row.

* fix(landing): use filled shield-check for CLI privacy footnote.

Replace the hollow shield outline with a tinted shield and checkmark that reads better at small size.

* fix(landing): expand widget gallery to full sheet height with fade.

Let the gallery fill mac-widget-main without growing the sheet, and add a bottom scroll fade so more widgets read as discoverable.

* fix(landing): bottom-align feature card copy above visuals.

Group each card title and body so they sit on a shared baseline with consistent spacing before the image row.

* fix(landing): slightly enlarge CLI privacy footnote icon.

* fix(landing): cap widget sheet height and scroll gallery inside.

Lock mac-widget-sheet__body to a fixed viewport instead of growing with all rows, and tighten row spacing so content scrolls within the fade.

* fix(landing): tighten CLI privacy footnote icon spacing.

* fix(landing): update widget gallery labels and row order.

Use the correct titles and descriptions for all eleven widgets and order rows History, Burn Down, Usage, then Switcher.

* fix(landing): right-align widgets copy toward the gallery mock.

On desktop split layouts with copy on the left, align text to the right so it faces the widget sheet.

* fix(landing): bleed widget gallery fade to main pane edges.

Pull the scroll layer out of mac-widget-main side padding so the fade spans the full column while title and tiles keep their inset.

* fix(landing): standardize widget image-to-label spacing.

Drop aspect-ratio boxes that added uneven gaps and use a fixed margin below each preview before the title.

* fix(landing): hide widget gallery fade at scroll bottom.

Only show the bottom fade while more content is below the fold and remove it when the gallery is fully scrolled or not overflowing.

* fix(landing): soften widget preview edge fringing in CSS.

Crop PNG halos with a slight scale inside rounded clips and a dark preview background until assets can be re-exported.

* fix(landing): restore widget gallery family row order.

Revert the unintended 1–11 sequence reorder and keep the original Metric/History, Usage, Switcher, Burn Down grouping with updated labels.

* fix(landing): remove bottom padding from widget gallery pane.

* fix(landing): keep widget gallery scrollbar above scroll fade.

Inset the bottom fade from the right so it no longer covers the scrollbar track.

* fix(landing): balance widgets lead copy and avoid orphan line.

Use text-wrap balance and tighten the Home Screen line break so desktop is not left alone.

* chore(landing): add feature section preview PNG assets.

Add resets, credits, and status screenshots for the three feature cards.

* feat(landing): wire feature card visuals with preview images.

Replace red placeholders with the new feature screenshots using cover fit inside the 4:3 frames.

* fix(landing): keep features heading on one line.

Remove forced line breaks and nowrap the Know before you commit title.

* fix(landing): correct feature card image order.

Use the new resets screenshot for card one and move the misty landscape asset to the status card.

* fix(landing): update status feature image dimensions.

Match width and height attributes to the replaced landscape asset.

* Refine landing feature mockups

* Tune credit header spacing

* Update ElevenLabs CLI plan label

* Checkpoint desktop landing mockups

* Polish mobile landing layout

* Localize landing mockup copy

* Tighten localized landing responsiveness

* Balance localized hero headline

* Fix mobile provider grid

* fix(landing): tune hero mockup layout and hide dev tuner.

Apply tuned mockup, menubar, and popover positions, refresh hero assets, and keep the layout tuner in the page but hidden from visitors.

* feat(landing): refactor hero HUD and finalize mobile mockup layout.

Split the menu bar and popover into a stage-level HUD layer so mobile overlays stay centered on the clipped stage while the mockup anchors to the right, and add desktop/mobile dev tuners with tuned CSS variables across breakpoints.

* docs(landing): vendor hero HUD image assets locally.

Replace external Simple Icons and GitHub raw menubar glyphs with files under docs/images/.

* fix(landing): extend mobile hero to 768px and align tuner.

Remove legacy 640px mockup overrides, match mobile stacked layout and dev tuner to ≤768px, and keep tablet popover patch at 769–1023px.

* fix(i18n): restore {break} tokens in ar/fa/th provider titles.

* feat(landing): add hero-mockup.svg MacBook artboard asset.

* feat(landing): SVG hero, section-inner copy, and tuner audit v2.

Replace PNG/WebP mockup with hero-mockup.svg, update HUD screen insets and
aspect ratio, align hero copy to the 1380px section-inner, add tuner audit
snapshots with regime warnings, fluid mockup scaling, and widen position sliders.

* fix(landing): widen tuner ranges for panel and HUD sliders.

The desktop panel tab capped HUD top at 20% and Panel X at 360px; expand
menubar/panel/HUD limits so the new SVG artboard can be tuned without hitting
arbitrary slider walls.

* feat(landing): bake desktop hero tune and add responsive layout applicator.

Apply the 1920×979 desktop anchor values, let panel text be selectable by
passing pointer events through hero-content, and scale px HUD offsets with
viewport width while compensating for the existing fluid mockup scale factor.

* feat(landing): swap menubar GitHub icon for OpenClaw favicon.

Vendor openclaw.svg locally and reuse the existing sf-symbol white filter.

* fix(landing): preserve OpenClaw eyes in menubar icon.

The invert filter flattened the favicon to solid white; use a menubar SVG
with white body, dark pupils, and cyan highlights without that filter.

* fix(landing): restore menubar gap unit and scale compensation.

The layout applicator wrote --menubar-gap as a unitless 22, so flex gap
collapsed; apply px correctly and divide by menubar-scale so the tuned
spacing matches while transform-origin top right keeps the right edge fixed.

* feat(landing): pin mockup right edge 50px from viewport on resize.

Compute mockup-x from scaled artboard width instead of a fixed tune value,
drop the 7.75vw translate cap, and anchor mobile mockup with the same margin.

* fix(landing): stop aplicator from overriding the 1920 desktop tune.

The auto mockup-x margin math replaced the tuned -540px anchor and shifted
the whole HUD; at ≥1920 use :root values only and scale holistically below.

* refactor(landing): anchor HUD to mockup SVG top-right with panel below menu.

Replace screen-hud percentage offsets with a mockup-artboard coordinate system:
menubar anchors to the SVG top-right via hud-margin-right, panel stacks below
the menu with hud-panel-gap, and the aplicator only scales mockup position.
Bump tuner storage keys to v2 for the new var schema.

* fix(landing): correct HUD margin defaults and scale menubar to artboard.

The 2.3% margin was the inner-screen inset, not menubar position (~22%);
use container query font sizing and anchor the panel below the menubar.

* Polish landing hero layouts, mobile tuner, and feature compositions.

Checkpoint before trimming desktop hero height—covers tablet/mobile hero fixes, HUD geometry tunes, header controls, brew pill mobile styling, draggable tuner, feature card scaling, and i18n provider title breaks.

* fix(landing): trim desktop hero height and balance hero description copy.

Checkpoint before experimenting with PNG hero mockup—drops manual {break} line breaks in favor of text-balance across all locales.

* refactor(landing): remove dev tuner and drop unused hero raster assets.

Cleanup pass before PR—deletes ~1k lines of tuner UI/JS, removes duplicate hero PNG/WebP (SVG is canonical), and updates locale CI for the new language picker and provider cards.

* Remove unused openclaw.svg menubar asset.

The hero menubar uses openclaw-menubar.svg; this duplicate was never referenced.

* Compress feature images to WebP for faster home page loads.

Resize screenshots to 1620×1020 (2× retina for cards) and replace ~16MB of PNGs with ~800KB of WebP.

* fix(landing): ship extracted redesign CSS and JS with slim index.html.

The WebP commit pointed index.html at external assets but still contained the pre-redesign site.css and site.js; restore the full landing styles and behavior.

* fix(landing): restore module-level root after tuner removal.

Removing the dev tuner accidentally deleted const root, which crashed site.js before HUD entrance animations could run.

* chore(landing): swap hero mockup SVG for notchless MacBook Air art.

Same 6111×3239 artboard; only the frame asset changed.

* docs: regenerate llms.txt after landing title update.

Fixes CI lint check that compares the generated llms index against docs/index.html.

* docs: anonymize landing page examples

* docs: restore provider navigation

* Fix landing preview load polish

* docs: regenerate website index

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* docs: define custom provider security boundary

* docs: accept custom provider boundary
Prevent background Claude delegated OAuth refresh when the keychain contains MCP-only state, while preserving explicit user Refresh recovery.

Add regression coverage for both keychain readers and an isolated built-app verifier that proves no background /status or browser launch.

Co-authored-by: Yuxin Qiao <Yuxin-Qiao@users.noreply.github.com>
* docs: propose Claude multi-account architecture

* docs: compare account icon alternatives

* docs: clarify Claude refresh isolation

* docs: accept Claude multi-account boundary
* docs: define predictive pace warning decision

* docs: accept one-alert pace warning policy
* docs: propose predictive refresh policy

* Expand predictive refresh target model

* docs: narrow adaptive refresh proposal

* docs: accept bounded adaptive refresh

Co-authored-by: hhh2210 <hzy2210@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* docs: define MiMo reserve evidence contract

* docs: accept MiMo fail-closed contract
* docs: propose OpenCode Go workspace fan-out

* docs: accept OpenCode Go workspace fan-out
* Add Codex pace headroom hint

* refactor: keep pace hint scope focused

* style: format pace settings

* fix: localize Italian pace settings

* fix: compute pace headroom from remaining burn

* refactor: focus Codex pace headroom

Co-authored-by: astuteprogrammer <astuteprogrammer@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
The Poe logo used a garbled SVG path (a self-intersecting scribble
inside a circle) instead of the actual Poe speech-bubble mark, and the
brand color was green (#26AD61) rather than Poe's official purple.

- Replace docs/logos/poe.svg with the correct Poe mark in #5D5CDE
- Apply the same path fix to the app resource ProviderIcon-poe.svg
- Update the Poe card --brand color in docs/index.html to #5D5CDE

#5D5CDE is Poe's official primary brand color ("Poe purple").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Localize default terminal setting

* docs: credit terminal localization

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Fix z.ai BigModel quota parsing

* fix: harden z.ai quota response parsing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: pickaxe <54486432+ProspectOre@users.noreply.github.com>
* Stabilize Antigravity PTY output tests

* test: harden Antigravity PTY completion proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Fix monthly reset-window pace

* fix: clarify monthly pace calendar windows

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* feat: add adaptive refresh frequency option

Implements the adaptive refresh decision record proposed in #1739:
a pure first-match-wins policy table (2-30 min bounds) driven by
menu-open recency, Low Power Mode, and thermal state. Opt-in via a
new Refresh frequency choice; fixed/manual behavior unchanged.

Also adds the missing post-sleep cancellation check to the fixed
interval timer branch, which previously fired one spurious refresh
whenever the frequency changed mid-sleep.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmMSEXFQeQHSBZjUyK1hoU

* Keep reset-boundary refresh scheduling active in adaptive mode

RefreshFrequency.seconds is nil for adaptive, and four call sites read
that nil as "manual": the reset-boundary scheduler disabled itself, the
OpenAI web staleness interval fell to its 120s floor, and both
persistent-CLI-session idle windows collapsed to 180s. Add
UsageStore.normalRefreshIntervalForHeuristics() (manual nil, fixed
seconds, adaptive = live policy delay) and route those call sites
through it; ProviderRegistry specs are built before a UsageStore
exists, so adaptive maps to the policy's nominal 300s there. Drop the
"adaptive refresh: " log prefix so the line is exactly
"reason=<code> delay=<n>s".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmMSEXFQeQHSBZjUyK1hoU

* Pin the codex account in the reset-boundary heuristics fixture

The stubbed-codex fixture left the live-system codex account unpinned,
so the account-scoped apply guard read the real ~/.codex of whatever
machine ran the tests: on a developer machine with a codex login the
canned snapshot applied, on CI runners (no ~/.codex) both guard
identities stayed unresolved and the liveSystem branch dropped the
snapshot, leaving no reset-boundary candidate. Pin
_test_liveSystemCodexAccount to a fixture account and give the canned
snapshot the same email, matching the pattern the existing
account-scoped refresh tests use.

Verified locally with HOME pointed at an empty directory (simulating
the CI runner) and re-verified the call-site mutation still turns the
adaptive boundary test red.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmMSEXFQeQHSBZjUyK1hoU

* fix: advance adaptive refresh after interaction

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
… limits[] (#1851)

* Claude: surface per-model weekly quota carve-outs (e.g. Fable 5) from limits[]

Anthropic's OAuth (/api/oauth/usage) and web (claude.ai/api/organizations/{org}/usage)
responses now report weekly quota carve-outs via a `limits` array with entries like
`kind: "weekly_scoped"`, `scope.model.display_name: "Fable"` — used during the July 2026
Fable 5 promotional access window (up to 50% of the weekly limit). The existing flat
`seven_day_sonnet`/`seven_day_opus` fields are null once this shape is present, and
neither fetch path decoded `limits` at all, so the scoped quota was invisible in the app
even though Anthropic's own web/mobile Usage screen already shows it as a third bar.

Add generic parsing for both fetch paths (OAuth JSON decoding + the web dict-based
parser) that surfaces any active weekly_scoped limit as a NamedRateWindow, keyed off
`scope.model.display_name` rather than hardcoding "Fable" — the promo ends 2026-07-07 and
Anthropic may reuse this shape for a different model afterwards. Rendering is free: the
menu already displays extraRateWindows unconditionally for Claude (same mechanism as the
existing "Daily Routines" window).

Verified against a live Max account: CLI JSON output for both --source oauth and
--source web (the default auto path) now reports
`{"id": "claude-weekly-scoped-fable", "title": "Fable only", "usedPercent": 5}`,
matching the native Claude Usage screen's "Fable only 5% used" bar exactly.

* fix: harden Claude scoped weekly limits

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Address PR feedback: the descriptor color drives progress bars, the
dashboard, charts, and switcher tabs, and the widget has its own Poe
color case — both still used the old green (#26AD61 normalized).

- PoeProviderDescriptor.branding.color -> 93/92/222 (#5D5CDE)
- CodexBarWidgetViews poe case -> same, matching sibling style

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Alberto Xosé Méndez Taboada <contacto@albertomendez.gal>
steipete and others added 17 commits July 4, 2026 13:15
* ci: modernize build toolchains

* ci: keep macOS tests on proven runner
* Fix settings sidebar width

* Improve settings window layout

* Polish settings window sidebar

* fix: cap settings detail width

* fix: preserve settings window resizing

* fix: keep settings window resizable

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Reset countdown: always break down days into d/h/m, not just d/h

resetCountdownDescription previously dropped minutes once the countdown crossed
into days (e.g. "in 1d 2h"), even though the hours+minutes case one tier down
already showed both ("in 3h 31m"). Extend the days branch to match: show
whichever of hours/minutes are non-zero, so "Weekly: Resets in 5d 37m" (0 whole
hours) doesn't silently round down to "5d".

* Fix swiftformat redundant-parens lint violation in reset countdown tests

* fix: keep reset countdowns compact

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Add and validate Devin extra-usage balances across menus, CLI, widgets, and snapshots.

Co-authored-by: FND <fndevve@proton.me>
Preserve externally managed language overrides while migrating CodexBar-owned legacy preferences.

Co-authored-by: Zihaoqi <Zihao-Qi@users.noreply.github.com>
Render quota warnings as prominent punch-out markers while retaining separate subtle workday ticks, with deterministic overlap precedence and accessible descriptions.

Co-authored-by: Aleks todo <aleks_todo@yahoo.de>
Add compact cost scale labels to detailed history charts, inline usage bars, and widgets. Keep labels truthful to the plotted domain, reserve layout space to avoid peak-bar overlap, and use consistent currency formatting across surfaces.

Co-authored-by: FND <fndevve@proton.me>
Show raw Codex credit totals with calendar-correct Today and 30-day totals, stable presentation-state regression coverage, and totals-only summary support.

Co-authored-by: kalista78 <kalista78@proton.me>
Add Linux Cursor usage through the signed-in Cursor app token and XDG state paths, with an explicit manual-cookie web source. Preserve the existing macOS browser/WebKit behavior and credential precedence.

Co-authored-by: red <red@kiritsuke.lan>
@cursor

cursor Bot commented Jul 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@cursor

cursor Bot commented Jul 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@cursor

cursor Bot commented Jul 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@cursor

cursor Bot commented Jul 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@ColumbusLabs ColumbusLabs merged commit 6510e39 into main Jul 5, 2026
10 checks passed
@ColumbusLabs ColumbusLabs deleted the codex/upstream-sync-51-20260704 branch July 5, 2026 12:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upstream Changes Available for Review