Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
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
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";
22 changes: 22 additions & 0 deletions Sources/CodexBar/Resources/pt-BR.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1464,3 +1464,25 @@
"Total usage" = "Uso total";
"claude_oauth_keychain_access_revoked" = "O acesso às Chaves do Claude foi revogado pela rotação do token do Claude Code. Clique em Atualizar para conceder o acesso novamente ou altere a fonte de uso do Claude para CLI/Web.";
"claude_showing_last_known_usage" = "Exibindo o último uso conhecido, 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";
Loading
Loading