Repository navigation
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2f7b51a4b6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let runAttributes = CTRunGetAttributes(run) as NSDictionary | ||
| let attributes = title.attributes(at: CTRunGetStringRange(run).location, effectiveRange: nil) | ||
| guard attributes[.foregroundColor] as? NSColor == foregroundColor, | ||
| (attributes[.attachment] as? NSTextAttachment)?.image?.isTemplate != false, |
There was a problem hiding this comment.
Treat neutral progress-bar attachments as template-safe
When a fresh layout contains .progressBar—including the built-in Bars Stacked preset—the attachment from progressBarImage retains NSImage's default isTemplate == false, so this guard rejects it even though it is rendered only with the neutral foreground color. The renderer consequently falls back to an attributed title, and these monochrome stacked layouts still do not receive inactive-display dimming; distinguish genuinely colored attachments from neutral progress bars and add the preset to the template-path tests.
AGENTS.md reference: AGENTS.md:L4-L5
Useful? React with 👍 / 👎.
|
Codex review: needs maintainer review before merge. What this changesThis PR combines repairs for OpenCode Go history, Antigravity widget resets, stacked menu-bar dimming, and confetti duration for shared CI validation. Example: OpenCode v2.0.29 local history displayed in CodexBar’s OpenCode Go settings.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Partial Merge readiness✅ Ready for maintainer review Keep open as maintainer-controlled CI infrastructure: this PR explicitly must never merge, and inspection found no definite introduced defect. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherProvider history and quota snapshots feed cost aggregation, menu-bar rendering, widget snapshots, and reset celebrations; this temporary train validates several repair branches together. flowchart LR
A[Provider history and quotas] --> B[Usage store]
B --> C[Menu bar renderer]
B --> D[Widget snapshot]
B --> E[Reset celebration]
F[Repair branches] --> G[Combined CI train]
Technical reviewBest possible solution: Use this train for combined CI, land the repair lanes individually, and retain the broader dimming issue for its remaining cases. Do we have a high-confidence way to reproduce the issue? Main’s legacy-only history query, missing Antigravity row windows, stacked-title template exclusion, and five-second overlay timer establish the affected paths; no target code was executed during this review. Is this the best way to solve the issue? The repairs reuse existing owners and preserve legacy precedence, unknown-capacity handling, color safeguards, and opt-in celebration behavior; the dimming repair deliberately addresses only part of the linked issue. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 72f47e23c8e8. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceWhat I checked:
Likely related people:
Review metrics
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 15, 2026, 9:25 PM ET / October 16, 2026, 01:25 UTC. |
11426d4 to
21f020c
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 21f020cc80
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| with tempfile.TemporaryDirectory(prefix="codexbar-test-discovery-") as home: | ||
| environment = os.environ | {"HOME": home, "CFFIXED_USER_HOME": home} | ||
| result = subprocess.run(command, capture_output=True, text=True, env=environment) |
There was a problem hiding this comment.
Keep SwiftPM's dependency cache outside the private HOME
On a clean checkout or compiled-cache fallback, this redirects SwiftPM's default shared-cache root into a fresh temporary directory, so the ~/Library/Caches/org.swift.swiftpm cache explicitly restored by .github/workflows/ci.yml lines 144–153 is ignored and then deleted; local focused runs likewise refetch dependencies and can fail offline despite a warm cache. swift test --help identifies --cache-path as the shared-cache override, so preserve the caller's cache path explicitly while isolating the test process's HOME.
AGENTS.md reference: AGENTS.md:L31-L31
Useful? React with 👍 / 👎.
21f020c to
f47367d
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f47367d7f2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - Claude: release macOS sleep inhibitors after passive CLI session probes (#4544). Thanks @iamyeizi! | ||
| - Claude: open Platform usage for default and API accounts while keeping recognized subscriptions on Claude usage settings (#4503). Thanks @Alex-Keyes! | ||
| - Dock: stop rescanning windows on every update pass while preserving Settings and scheduled update dialogs (#4516, #4524). Thanks @harjothkhara and @Leen15! |
There was a problem hiding this comment.
Keep new fixes in the unreleased section
This commit introduces the sleep-inhibitor fix after 0.76.0 was released, but records it under 0.76.0, so generated release notes will attribute the fix to a version that did not contain it. The other two added lines also duplicate entries already present in the 0.76.1 Unreleased section; move #4544 there and remove the duplicate #4503/#4516/#4524 entries.
Useful? React with 👍 / 👎.
f47367d to
1a2135e
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1a2135e821
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return .automaticCandidates([ | ||
| context.snapshot.primary, | ||
| context.snapshot.secondary, | ||
| context.snapshot.tertiary)) | ||
| context.snapshot.tertiary, | ||
| ].compactMap(\.self)) |
There was a problem hiding this comment.
Keep partial Auto providers in highest-usage rotation
When MiniMax has one exhausted lane and another usable lane, returning all lanes as .automaticCandidates makes the shared selector choose the 100% lane, after which providerWithHighestUsage passes that percentage to shouldExcludeFromHighestUsage. Because MiniMax still sets automaticSelectionPrioritizesExhaustedWindow to false and has no partial-exhaustion branch there, the provider is dropped from the unified highest-usage icon even though it is not fully rate-limited; z.ai has the same combination. Update the exclusion policy for these candidate-based multi-lane providers.
Useful? React with 👍 / 👎.
| ### Added | ||
|
|
||
| - Settings: offer a six-day Monday–Saturday work week for weekly pace and session forecasts (#4548). Thanks @ViaxCo! |
There was a problem hiding this comment.
Keep existing fixes under the Fixed heading
Placing ### Added here causes every existing entry from “Usage forecasts” through the sleep-inhibitor change to be categorized as an addition rather than a fix by changelog/release-note consumers. Keep the new Settings item under Added, but restore a Fixed heading before the existing fixes and group the new widget fix with them.
Useful? React with 👍 / 👎.
|
|
||
| ### Added | ||
|
|
||
| - Claude: optionally read web usage from the Claude desktop app’s signed-in session, following desktop account switches without using browser credentials (#4494). Thanks @flutterrausch! |
There was a problem hiding this comment.
Move newly landed features to the unreleased section
This implementation lands after the dated 0.76.0 release, but the new Claude desktop-cookie entry is recorded under 0.76.0; the Settings navigation and Auto-ranking entries added below have the same problem, so generated release notes will claim that an already-published build contained these features. The fresh evidence in this revision is the newly added #4494, #4475, and #4491 entries themselves; move them into the corresponding 0.76.1 Unreleased sections.
Useful? React with 👍 / 👎.
1a2135e to
00a6add
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00a6add424
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| func includesOverviewTab(enabledProviders: [UsageProvider]) -> Bool { | ||
| enabledProviders.count > 1 && | ||
| self.switcherProviderIDs(enabledFirstPartyProviders: enabledProviders).count > 1 && |
There was a problem hiding this comment.
Count non-top-level plugins before hiding Overview
When there is one enabled first-party provider plus an enabled plugin declared with topLevel: false, the plugin is offered in the Overview picker via overviewProviderIDs, but this condition counts only switcher providers, so it hides the Overview tab and makes that selection inaccessible. Base the tab decision on the providers eligible for Overview rather than only first-party and top-level switcher segments.
Useful? React with 👍 / 👎.
| environment["CODEXBAR_DASHBOARD_TOKEN"] = self.configuration.token | ||
| process.environment = environment |
There was a problem hiding this comment.
Hide the bearer from provider subprocesses
When the managed server services a CLI-backed provider, this bearer remains in ProcessInfo.processInfo.environment; CLIUsageCommand.fetchUsageOutput uses that environment as its provider base, and subprocess runners forward it unchanged to provider executables. Consequently every invoked provider CLI receives the dashboard credential even though only the server needs it. Remove the variable from the serve process after resolving authentication, or explicitly scrub it from provider launch environments.
Useful? React with 👍 / 👎.
00a6add to
5c1f0a0
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5c1f0a0d11
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| try process.run() | ||
| self.child = process |
There was a problem hiding this comment.
Tie the managed server lifetime to the app process
If CodexBar crashes or is force-quit, applicationShouldTerminate never calls stopForTermination(), and this ordinary child process is reparented rather than terminated. Because the helper has null stdin/stdout and no parent-death monitor, a configured non-loopback server can continue exposing its authenticated endpoints indefinitely; relaunching CodexBar then only reports a port conflict and cannot stop the orphan it no longer owns. Add parent-liveness monitoring in the helper or another owner-bound shutdown mechanism.
Useful? React with 👍 / 👎.
de905d2 to
f2864e7
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f2864e7217
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| case let error as ProviderFetchClassifiedError: | ||
| // `.authenticationExpired` is the server rejecting a credential that was read fine. | ||
| return error.kind == .missingCredential || error.kind == .permissionDenied |
There was a problem hiding this comment.
Distinguish HTTP 403 from cookie-access denial
When an automatic cookie import first encounters a locked Chromium Keychain but later obtains a session from another browser, an HTTP 403 from that session is also represented as ProviderFetchClassifiedError.permissionDenied. The lock witness therefore remains true and this branch serves the cached app snapshot, masking the provider's real rejection; preserve whether permissionDenied originated from browser credential access rather than accepting every error of that kind.
AGENTS.md reference: AGENTS.md:L54-L54
Useful? React with 👍 / 👎.
Grok's ACP server exposes billing as the extension method `_x.ai/billing`; `x.ai/billing` returns JSON-RPC -32601 on Grok CLI 1.0.60 and 1.0.62. Request the underscore name first and retry the legacy name once when the method is unavailable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`_x.ai/billing` returns `{config: {creditUsagePercent, currentPeriod, ...}}`.
Reuse the nested credits parser for it, keep the legacy top-level decoder,
and reject results with no usage percentage so the pipeline can fall back.
Teach the account-context fixture to answer the legacy retry.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plugins can set icon.svg (inline, at most 8 KB). Only plain vector shapes are accepted; scripts, styles, links, url() references, raster images, foreignObject and DOCTYPE/entities are rejected, and a rejected SVG falls back to the monogram. The SVG renders as a template image in the switcher and on the menu card. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rejecting a literal url( was not enough: fill="u\72l(...)" passes it and CSS decodes the escape into a URL function. Attribute values now allow only letters, digits, spaces and .,#%+-() (no CSS escapes, comments, declarations, quotes, colons or slashes), fill/stroke must be a colour keyword, #hex or numeric rgb()/rgba(), and xmlns must be the SVG namespace. Adds the reported bypass plus red-team cases (case and full-width variants, character references, image-set/paint/var, style, use/a/xlink/xml:base, foreign namespaces, stylesheet PI, NUL) and accepted-paint cases.
OAuth decoded the whole `limits` array as one typed value, so a single entry with an unexpected field type dropped every model-scoped weekly row. Parse the array with the Web path's entry-by-entry parser instead and remove the OAuth-only limit types. Co-Authored-By: claude-sonnet-5-5 <noreply@anthropic.com>
The per-entry limits parse re-reads the body with JSONSerialization, which rejects numbers JSONDecoder accepts (e.g. 1e400) and threw for the whole response. Fall back to an empty limits list instead, as before. Fold the cross-path limits tests into ClaudeWebUsageExtraWindowTests using the per-test OAuth defaults fixture, assert the Web primary percent in the sibling-shape case, and drop the separate suite. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Rasterize validated inline icons into fixed template bitmaps and reject unbounded canvas dimensions before native decoding. Keep validation in the icon constructor so every caller retains the monogram fallback. Co-authored-by: Shivanath Devinarayanan <1937549+shivanathd@users.noreply.github.com>
f2864e7 to
ed0d8a2
Compare
ed0d8a2 to
1ddd7a4
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1ddd7a4525
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // Discovery order follows working directories and process contexts; it is not part of the scope. | ||
| .sorted() |
There was a problem hiding this comment.
Make scan ordering match the order-independent scope
When the same Pi session and entry ID exist under two roots with different snapshots, rebuildDailyUsage keeps whichever copy appears first, and the file list is still ordered by discovery-derived rootIndex. Sorting only this fingerprint means reversing workingDirectories now produces the same scope key and initially reuses the old result, but a later forced, interval, or file-change refresh can choose the other copy and change totals under that identical scope. Sort roots/files by a stable key before deduplication as well so an order-independent cache identity always represents deterministic totals.
Useful? React with 👍 / 👎.
1ddd7a4 to
f92f29a
Compare
f92f29a to
69dcec5
Compare
Batched landing train: main plus several READY PRs, merged here so CI runs once on the combination before each PR is merged on its own. Maintainer infrastructure; never merged. Not a draft on purpose: draft PRs defer the macOS Swift tests.