codeburn/mac/Sources/CodeBurnMenubar
Resham Joshi 694e8ce79b
Some checks failed
CI / semgrep (push) Has been cancelled
fix(menubar): read Claude keychain via security CLI on silent refresh (#490) (#491)
Background token refreshes re-read the "Claude Code-credentials" keychain
item via the Security framework. On macOS Sierra+, access is governed by the
item's partition list, not the legacy "Always Allow" ACL. Claude Code resets
that partition list every time it rotates the credential, dropping our app
from the allowed set, so the next read raises a fresh keychain password
prompt. On a heavy usage day this fires dozens of times. The LAContext
interactionNotAllowed flag we relied on does not suppress that prompt for a
plain generic-password item.

Route the silent path (proactive refresh and post-401 re-read) through
/usr/bin/security instead. The Apple-signed security binary sits in the
item's apple-tool: partition, so it reads the secret without prompting and
without depending on the user's ACL grant. It is read-only and never spends
the shared refresh token, preserving the existing invariant that the Claude
CLI owns the grant.

The user-initiated bootstrap keeps the framework read, where a single
consent prompt is expected. Drops the now-unused LocalAuthentication import.
2026-06-14 10:31:56 +02:00
..
Data fix(menubar): read Claude keychain via security CLI on silent refresh (#490) (#491) 2026-06-14 10:31:56 +02:00
Security feat(menubar): refresh via headless app binary instead of node script 2026-05-30 13:05:48 -07:00
Theme Harden menubar: fix refresh loop, concurrency, data sync, and edge cases 2026-05-01 08:01:25 -07:00
Views feat: add devin provider (#444) 2026-06-09 21:58:31 +02:00
AppStore.swift feat: add devin provider (#444) 2026-06-09 21:58:31 +02:00
AppVersion.swift Normalize menubar version display 2026-05-11 11:21:39 -07:00
CodeBurnApp.swift fix(mac): restore right-click status-item menu on macOS 27 (#472) 2026-06-11 09:56:56 +02:00
CurrencyState.swift feat: add devin provider (#444) 2026-06-09 21:58:31 +02:00