Skip to content

Sync fork to upstream 0.31.1 + preserve color/separator (May 2026)#18

Merged
johnlarkin1 merged 972 commits into
mainfrom
upstream-sync/may-2026
May 29, 2026
Merged

Sync fork to upstream 0.31.1 + preserve color/separator (May 2026)#18
johnlarkin1 merged 972 commits into
mainfrom
upstream-sync/may-2026

Conversation

@johnlarkin1
Copy link
Copy Markdown
Owner

What

Brings johnlarkin1/CodexBar up to parity with steipete/CodexBar@0.31.1 (744 upstream commits since the last sync) while preserving this fork's genuinely-unique features.

How it was resolved

Prior syncs were squash/flatten merges, so the merge-base had drifted back to Feb 9 and every sync re-fought historical conflicts (166 conflicts this time, mostly spurious drift in provider/test/doc files the fork never intentionally touched). This PR does a real git merge upstream/main, which re-establishes a true merge-base — git merge-base HEAD upstream/main is now upstream HEAD, so future syncs are trivial.

Strategy: take upstream for the entire conflicted tree, normalize Sources/ + Tests/ to pure upstream (to eliminate silent auto-merge mashups — e.g. a duplicated applicationWillTerminate), then re-apply only the fork-unique features on top.

Kept (fork-unique)

  • Color-coded menu bar icons (UsageColorLevel, default on) — green→orange→red by session usage, including the macOS 26 Liquid Glass handling (icons drawn non-template in the tint color so the color survives; effectiveAppearance observer re-renders on dark/light switch).
  • Separator style (MenuBarSeparatorStyle, dot/pipe) for the "both" menu-bar display mode.
  • Fork tooling: Makefile (upstream-release guards), signing scripts (APPLE_*), version.env scheme (now 0.31.1-jl.1), fork README.
  • New focused tests: UsageColorLevelTests, MenuBarSeparatorStyleTests.

Dropped (now redundant with upstream)

  • Fork's week-over-week projection, hourly pace, and time-window selection — adopted upstream's HistoricalUsagePace / UsageStore+HighestUsage / MenuBarMetricWindowResolver instead (5 Weekly* files removed).
  • Fork's keychain security-CLI override — upstream now defaults to .securityCLIExperimental.

Notable fix

Pure upstream 0.31.1 does not compile under the local Swift 6.2.3 + macOS 26.4 SDK toolchain: a nested makeTitle() in AccountSwitcherView.compactButtonTitle captured mutable vars and crashed swift-frontend (IRGen SIGABRT). Reworked to pass the widths as parameters. Good candidate to send upstream.

Verification

  • swift build
  • swift test — 3130/3130 logic-pass (2 timing/coalescing suites flake only under full-suite CPU load; both pass in 0.3s in isolation)
  • ./Scripts/lint.sh lint ✅ 0 violations
  • ./Scripts/compile_and_run.sh ✅ packaged, signed, launched ("OK: CodexBar is running")

🤖 Generated with Claude Code

steipete and others added 30 commits May 15, 2026 14:34
* fix: prefer Codex last token usage

* docs: add Codex cost spike changelog

* fix: avoid stale divergent Codex token gaps

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Clarify unofficial Kimi K2 provider

* docs: add Kimi K2 changelog

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Adds xAI Grok provider support via the Grok CLI integration, including local identity detection, billing response decoding, provider registration, docs, tests, and changelog credit.\n\nCo-authored-by: taibaran <taibaran@users.noreply.github.com>
* fix(grok): treat expired credentials as missing in fetch

Follow-up to the Codex P1 review on steipete#965 (`cbd30a4e`).

Grok session tokens expire after ~7 days. The auth-error suppression in
`GrokStatusProbe.fetch` previously only checked `credentials == nil`, so
an `auth.json` whose `expires_at` was already in the past still counted
as "renderable" and masked the RPC auth failure. The probe would return
a successful snapshot carrying stale identity and no `grok login` hint
while billing silently 401s — users had to inspect logs to figure out
they were logged out.

Treat expired records the same as missing credentials when deciding
whether to swallow the RPC error, and drop them from the rendered
snapshot so the UI doesn't surface a stale email/team for an inactive
session. Adds a unit test covering past/future/missing `expires_at`.

* test(grok): include grok in SettingsStoreTests provider-order fixture

CI on steipete#976 surfaced a hardcoded provider-order list in
SettingsStoreTests.swift:1161 that wasn't updated when grok was added
in steipete#965. The Grok-only test filter I ran locally before steipete#965 skipped
this file, so the breakage only became visible on the next post-merge
CI run.

Append .grok to the expected ordering so the suite passes. All 2565
tests pass under Xcode 26.5 (51 in CodexBarTests + plenty more).

* fix: preserve Grok identity after refreshed billing

* style: format Grok auth regression

---------

Co-authored-by: taibaran <taibaran@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
* test: stabilize status menu switcher refresh

* test: prevent switcher refresh detection race
* Block cross-host redirects for OpenCode Go

* fix: compile OpenCode Go redirect session

* test: cover OpenCode Go redirect guard

* docs: add OpenCode Go redirect guard changelog

---------

Co-authored-by: Pavlo Barzdun <50662594+pavbar@users.noreply.github.com>
Co-authored-by: pavbar <pavlo@barzdun.com>
Co-authored-by: pavbar <pavlo@barzdun.com>
steipete and others added 29 commits May 28, 2026 07:56
Show Codex Spark usage as a named extra quota lane for Codex OAuth and OpenAI dashboard usage paths.\n\nThanks @LeoLin990405.\n\nProof:\n- swift test --filter CodexAdditionalRateLimitsTests\n- swift test --filter OpenAIDashboardSparkTests\n- swift test --filter MenuCardModelCodexProjectionTests\n- swift test --filter MenuCardAntigravityTests\n- swift test --filter OpenAIDashboardModelsTests\n- swift test --filter CLIOpenAIDashboardCacheTests\n- make check\n- autoreview clean\n- CI green for 4f9c902\n\nFixes steipete#1177\n\nCo-authored-by: Zhongyue Lin <101193087+LeoLin990405@users.noreply.github.com>
Add named AWS profile authentication for Bedrock usage and cost history.

Maintainer follow-up preserves credential precedence: explicit profile mode uses the selected profile without projecting saved static keys, AWS CLI source profiles can still read inherited environment credentials, and merged static keys continue to win when no profile mode is explicitly selected.

Co-authored-by: Oleksandr Soldatov <oleks.soldatov@gmail.com>
Localize popup panels, menu labels, and provider settings across supported languages.

Maintainer follow-up preserves provider-supplied organization names and localizes dynamic cookie-source subtitles through shared templates.

Co-authored-by: Shun Min Chang <ji394m6y7@gmail.com>
…bar-cask

Update Homebrew cask install command
pt-BR was missing 178 of en.lproj's 785 keys, so those strings fell back
to English (a mixed-language UI for Brazilian users). Translate all
missing keys to reach full parity with the English base, keeping the
same key order as en.lproj.

Validated with `plutil -lint`; pt-BR and en key sets and format
specifiers (%@, %1$@, %d%%) match exactly (785 keys each, no missing or
extra keys).
…localization

Complete Brazilian Portuguese (pt-BR) localization
Brings johnlarkin1/CodexBar up to parity with steipete/CodexBar @ 0.31.1
(744 commits since the last sync). Establishes a real merge-base so future
upstream syncs no longer re-fight historical conflicts.

Resolution strategy: take upstream for the whole conflicted tree, then
re-apply the fork's genuinely-unique features on top in a follow-up commit.

- Adopt upstream's pace / projection / time-window machinery
  (HistoricalUsagePace, UsageStore+HighestUsage, MenuBarMetricWindowResolver);
  dropped the fork's parallel implementations and the 5 Weekly* files.
- Keychain security-CLI default is now upstream's default
  (.securityCLIExperimental), so the fork override is no longer needed.
- Kept fork tooling: Makefile (fork-release guards), signing scripts
  (APPLE_* env), version.env scheme, fork README.
- UsageColorLevel.swift / MenuBarSeparatorStyle.swift retained for re-wiring
  of the color + separator features in the follow-up commit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ler crash

The prior squash-style upstream syncs meant several fork-touched files were
silently auto-merged into mashups (e.g. a duplicated applicationWillTerminate).
Reset all of Sources/ to upstream/main's exact content so the baseline is pure
upstream 0.31.1, keeping only the two fork-only files (UsageColorLevel,
MenuBarSeparatorStyle) for re-wiring next.

Also work around a swift-frontend IRGen crash (SIGABRT) in
AccountSwitcherView.compactButtonTitle under the Swift 6.2.3 + macOS 26.4 SDK
toolchain: the nested makeTitle() captured the mutable emailWidth/workspaceWidth
vars. Pass them as parameters instead. Pure upstream 0.31.1 does not build on
this toolchain without this change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-applies the fork's two genuinely-unique menu-bar features on top of the
upstream baseline, plus the macOS 26 Liquid Glass color handling.

Color-coded icons (toggle in Advanced ▸ "Color-coded icons", default on):
- UsageColorLevel.tintColor(for:) interpolates green→orange→red by session
  usage; applied in both StatusItemController icon paths (merged + per-provider).
- IconRenderer.makeIcon(tintColor:) draws shapes directly in the tint color and
  marks the image non-template so macOS 26 Liquid Glass keeps the RGB pixels
  (older macOS still tints the template via the button's contentTintColor).
  Tint participates in the icon cache key and the render-skip signatures.
- StatusItemController observes effectiveAppearance on macOS 26+ to re-render
  baked colors on dark/light switches.

Separator style (Display ▸ "Separator", dot/pipe, default dot):
- MenuBarSeparatorStyle drives the character between percent and pace in the
  "both" menu-bar display mode.

Settings plumbing for colorCodedIcons + menuBarSeparatorStyle across
SettingsStoreState / SettingsStore / +Defaults / +MenuObservation.
Bump version to 0.31.1-jl.1 (build 75).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
UsageColorLevelTests: nil passthrough, high-usage red clamping, monotonic
redness, low-usage green dominance.
MenuBarSeparatorStyleTests: separator characters, id/rawValue, allCases, parse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@johnlarkin1 johnlarkin1 merged commit 3a0ac0e into main May 29, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.