Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
39b17af
Add spend provenance, pinned day timezone, and Codex fork fail-closed.
Yuxin-Qiao Aug 17, 2026
0d7af47
Fix spend cache timezone, provenance, and windowed metered totals.
Yuxin-Qiao Aug 17, 2026
2988d0b
Add custom-pricing overlay above models.dev and builtin rates.
Yuxin-Qiao Aug 17, 2026
4f8fba1
Apply custom-pricing overlay to aggregate fallbacks once per scan.
Yuxin-Qiao Aug 17, 2026
03417c6
Refresh the Codex parser hash after overlay pricing changes.
Yuxin-Qiao Aug 17, 2026
6c79095
Split overlay cost helpers so CostUsagePricing stays under the lint l…
Yuxin-Qiao Aug 17, 2026
725419a
Keep overlay cost helper within the parameter-count lint limit.
Yuxin-Qiao Aug 17, 2026
197bd61
Add a read-only OpenCodex usage.jsonl parser and independent cache.
Yuxin-Qiao Aug 17, 2026
a532d41
Keep OpenCodex session totals and coverage on the current day.
Yuxin-Qiao Aug 17, 2026
5277c8a
Surface token mix, coverage, sessions, and OpenCodex on the spend das…
Yuxin-Qiao Aug 17, 2026
db45e5e
Scope dashboard metered spend and keep hidden sources selectable.
Yuxin-Qiao Aug 17, 2026
b8a0652
Move OpenCodex dashboard source tests out of the oversized controller…
Yuxin-Qiao Aug 17, 2026
3c7f70b
Align codexbar cost JSON with provenance, mix, and OpenCodex.
Yuxin-Qiao Aug 17, 2026
4c192cd
Ignore empty OpenCodex logs so native Codex spend stays visible.
Yuxin-Qiao Aug 17, 2026
a888751
Keep OpenCodex cost JSON on list-price provenance.
Yuxin-Qiao Aug 17, 2026
bbb5cd7
feat: integrate spend reporting series
steipete Aug 18, 2026
04affe8
chore: merge current main into spend series
steipete Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
### Added
- CLI: add `codexbar usage --format toon` emitting the JSON payload as TOON v4.1 for agents that prefer denser structured output (#2996, #3021). Thanks @elijahfriedman and @teseo for the spec!
- Usage & Spend: add an All time range alongside 7d/30d, backed by 365 days of local history with dedicated Claude and Cursor spend snapshot slots (#3009). Thanks @Yuxin-Qiao!
- Usage & Spend: add explicit cost provenance, coverage counters, and a pinned IANA day-bucketing timezone while making uncertain Codex fork accounting fail closed (#3015). Thanks @Yuxin-Qiao!
- Codex cost: support exact-match custom pricing above models.dev and built-in rates, preserving missing fields as unknown and explicit zero rates as free (#3016). Thanks @Yuxin-Qiao!
- Usage & Spend: add token mix, coverage, conversation totals, source visibility controls, and an hourly activity heatmap to the spend dashboard (#3017). Thanks @Yuxin-Qiao!
- Usage & Spend: add opt-in, read-only OpenCodex `usage.jsonl` import with its SQLite cache isolated in CodexBar's own cache directory (#3018). Thanks @Yuxin-Qiao!
- General settings: turn Low Power Mode into an Off/On/Automatic preference, with Automatic following the system Low Power Mode state (#2995). Thanks @elijahfriedman!
- Grok: add an Auto / Grok CLI / SuperGrok OAuth / Browser cookies source picker, support pasted SuperGrok bearers and grok.com cookies in token accounts, and open `~/.grok/auth.json` from Open token file (#3010). Thanks @oakimov!

Expand All @@ -17,6 +21,7 @@
- Usage & Spend: sum priced subscriptions into a ~$ partial estimate with coverage shown when some subscriptions lack prices, instead of hiding the total (#3001). Thanks @Yuxin-Qiao!
- Usage & Spend: keep unpriced named models visible in the model breakdown list instead of dropping the whole source (#3004). Thanks @Yuxin-Qiao!
- Usage & Spend: keep priced Cursor days visible when some events omit totalCents, and stop invalid Cursor model costs from reviving on later events (#3005). Thanks @Yuxin-Qiao!
- CLI: align `codexbar cost --json` with spend provenance, token mix, coverage, and opt-in OpenCodex payloads (#3019). Thanks @Yuxin-Qiao!
- Settings: style the Quit CodexBar button as a prominent accent-color button and remove its stray section background (#2992). Thanks @elijahfriedman!

## 0.52.0 — 2026-08-17
Expand Down
320 changes: 282 additions & 38 deletions Sources/CodexBar/PreferencesSpendDashboardPane.swift

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/ar.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1467,3 +1467,25 @@
"Total usage" = "إجمالي الاستخدام";
"claude_oauth_keychain_access_revoked" = "تم إلغاء وصول CodexBar إلى سلسلة مفاتيح Claude بسبب تدوير الرمز المميز في Claude Code. انقر على «تحديث» لمنح الوصول مجددًا، أو بدّل مصدر استخدام Claude إلى CLI/Web.";
"claude_showing_last_known_usage" = "يتم عرض آخر بيانات استخدام معروفة، تم التقاطها %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/ca.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1466,3 +1466,25 @@
"Total usage" = "Ús total";
"claude_oauth_keychain_access_revoked" = "L'accés al clauer de Claude s'ha revocat per la rotació del testimoni de Claude Code. Feu clic a Actualitza per tornar a concedir l'accés, o canvieu l'origen d'ús de Claude a CLI/Web.";
"claude_showing_last_known_usage" = "Es mostra l'últim ús conegut capturat %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/de.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1464,3 +1464,25 @@
"Total usage" = "Gesamtnutzung";
"claude_oauth_keychain_access_revoked" = "Der Zugriff auf den Claude-Schlüsselbund wurde durch die Token-Rotation von Claude Code widerrufen. Klicken Sie auf „Aktualisieren“, um den Zugriff erneut zu gewähren, oder stellen Sie die Claude-Nutzungsquelle auf CLI/Web um.";
"claude_showing_last_known_usage" = "Letzte bekannte Nutzung wird angezeigt (erfasst: %@).";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
21 changes: 21 additions & 0 deletions Sources/CodexBar/Resources/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"(System)" = "(System)";
"30d" = "30d";
"7d" = "7d";
"90d" = "90d";
"A managed Codex login is already running. Wait for it to finish before adding " = "A managed Codex login is already running. Wait for it to finish before adding ";
"API key" = "API key";
"API region" = "API region";
Expand Down Expand Up @@ -1311,6 +1312,26 @@
"By subscription" = "By subscription";
"No model-level history" = "No model-level history";
"Daily estimated spend" = "Daily estimated spend";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
"≈%d full 5h windows of weekly left · %d windows until reset" = "≈%d full 5h windows of weekly left · %d windows until reset";
"Weekly cannot run out before reset at this pace" = "Weekly cannot run out before reset at this pace";
"Weekly can run out ≈%d windows early" = "Weekly can run out ≈%d windows early";
Expand Down
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/es.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1462,3 +1462,25 @@
"Total usage" = "Uso total";
"claude_oauth_keychain_access_revoked" = "El acceso al llavero de Claude fue revocado por la rotación del token de Claude Code. Haz clic en Actualizar para volver a conceder acceso o cambia el origen del uso de Claude a CLI/Web.";
"claude_showing_last_known_usage" = "Mostrando el último uso conocido, capturado %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/fa.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1467,3 +1467,25 @@
"Total usage" = "مصرف کل";
"claude_oauth_keychain_access_revoked" = "دسترسی به Keychain کلود با چرخش توکن Claude Code لغو شد. برای اعطای مجدد دسترسی روی «تازه‌سازی» کلیک کنید، یا منبع استفاده Claude را به CLI/Web تغییر دهید.";
"claude_showing_last_known_usage" = "آخرین میزان استفاده شناخته‌شده که در %@ ثبت شده نمایش داده می‌شود.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/fr.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1463,3 +1463,25 @@
"Total usage" = "Utilisation totale";
"claude_oauth_keychain_access_revoked" = "L’accès au trousseau Claude a été révoqué par la rotation du jeton de Claude Code. Cliquez sur Actualiser pour accorder à nouveau l’accès, ou définissez la source d’utilisation de Claude sur CLI/Web.";
"claude_showing_last_known_usage" = "Affichage de la dernière utilisation connue, capturée %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/gl.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1463,3 +1463,25 @@
"Total usage" = "Uso total";
"claude_oauth_keychain_access_revoked" = "O acceso ao chaveiro de Claude foi revogado pola rotación do token de Claude Code. Preme Actualizar para volver conceder o acceso ou cambia a orixe de uso de Claude a CLI/Web.";
"claude_showing_last_known_usage" = "Mostrando o último uso coñecido, capturado %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/id.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1467,3 +1467,25 @@
"Total usage" = "Total penggunaan";
"claude_oauth_keychain_access_revoked" = "Akses Rantai Kunci Claude dicabut akibat rotasi token Claude Code. Klik Segarkan untuk memberikan akses lagi, atau ubah sumber penggunaan Claude ke CLI/Web.";
"claude_showing_last_known_usage" = "Menampilkan penggunaan terakhir yang diketahui, diambil %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/it.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1467,3 +1467,25 @@
"Total usage" = "Utilizzo totale";
"claude_oauth_keychain_access_revoked" = "L'accesso al portachiavi di Claude è stato revocato dalla rotazione del token di Claude Code. Fai clic su Aggiorna per concedere nuovamente l'accesso oppure imposta la fonte di utilizzo di Claude su CLI/Web.";
"claude_showing_last_known_usage" = "Visualizzazione dell'ultimo utilizzo noto, acquisito %@.";
/* Spend dashboard cost analysis */
"90d" = "90 g";
"Input" = "Ingresso";
"Output" = "Uscita";
"Cache write" = "Scrittura cache";
"Reasoning" = "Ragionamento";
"Sessions" = "Sessioni";
"Projects" = "Progetti";
"Plan metered" = "Piano misurato";
"List-price equivalent" = "Equivalente a listino";
"Metered and list-price" = "Misurato e a listino";
"List-price equivalent — not a billing receipt." = "Equivalente a listino — non è una fattura.";
"Priced" = "Prezzati";
"Unpriced" = "Non prezzati";
"Unmetered" = "Non misurati";
"Estimated" = "Stimati";
"Other models" = "Altri modelli";
"Include OpenCodex usage logs" = "Includi i log di utilizzo OpenCodex";
"Hide native Codex when OpenCodex is present" = "Nascondi Codex nativo quando è presente OpenCodex";
"Export JSON" = "Esporta JSON";
"Sources" = "Origini";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/ja.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1464,3 +1464,25 @@
"Total usage" = "合計使用量";
"claude_oauth_keychain_access_revoked" = "Claude Code のトークン更新により、Claude キーチェーンへのアクセスが取り消されました。「更新」をクリックしてアクセスを再許可するか、Claude の使用量の取得元を CLI/Web に切り替えてください。";
"claude_showing_last_known_usage" = "最後に取得した既知の使用量を表示しています(取得: %@)。";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/ko.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1431,3 +1431,25 @@
"Total usage" = "총 사용량";
"claude_oauth_keychain_access_revoked" = "Claude Code의 토큰 교체로 Claude 키체인 접근 권한이 취소되었습니다. 새로 고침을 클릭해 접근 권한을 다시 부여하거나 Claude 사용량 소스를 CLI/Web으로 전환하세요.";
"claude_showing_last_known_usage" = "마지막으로 확인된 사용량을 표시 중입니다(캡처: %@).";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/nl.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1463,3 +1463,25 @@
"Total usage" = "Totaal gebruik";
"claude_oauth_keychain_access_revoked" = "De toegang tot de Claude-sleutelhanger is ingetrokken door de tokenrotatie van Claude Code. Klik op Vernieuwen om opnieuw toegang te verlenen of zet de Claude-gebruiksbron op CLI/Web.";
"claude_showing_last_known_usage" = "De laatst bekende gebruiksgegevens worden weergegeven (vastgelegd: %@).";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/pl.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1467,3 +1467,25 @@
"Total usage" = "Łączne użycie";
"claude_oauth_keychain_access_revoked" = "Dostęp do pęku kluczy Claude został cofnięty wskutek rotacji tokenu przez Claude Code. Kliknij Odśwież, aby ponownie przyznać dostęp, albo przełącz źródło użycia Claude na CLI/Web.";
"claude_showing_last_known_usage" = "Wyświetlane jest ostatnie znane użycie zarejestrowane %@.";
/* Spend dashboard cost analysis */
"90d" = "90d";
"Input" = "Input";
"Output" = "Output";
"Cache write" = "Cache write";
"Reasoning" = "Reasoning";
"Sessions" = "Sessions";
"Projects" = "Projects";
"Plan metered" = "Plan metered";
"List-price equivalent" = "List-price equivalent";
"Metered and list-price" = "Metered and list-price";
"List-price equivalent — not a billing receipt." = "List-price equivalent — not a billing receipt.";
"Priced" = "Priced";
"Unpriced" = "Unpriced";
"Unmetered" = "Unmetered";
"Estimated" = "Estimated";
"Other models" = "Other models";
"Include OpenCodex usage logs" = "Include OpenCodex usage logs";
"Hide native Codex when OpenCodex is present" = "Hide native Codex when OpenCodex is present";
"Export JSON" = "Export JSON";
"Sources" = "Sources";
"OpenCodex" = "OpenCodex";
Loading