The feature is fundamentally about time periods when the user is not
actively using Claude Code — the reset clock is unaffected because no
conversation is started. "Idle Hours" conveys this intent more clearly
than "Quiet Hours" (which implies only notification silencing).
Translations:
en: Idle Hours
nl: Inactieve uren
fr: Heures inactives
de: Inaktive Stunden
ja: アイドル時間
ko: 유휴 시간
es: Horas inactivas
zh-TW: 閒置時段
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Codex now has the same behavior as Claude Code during quiet hours:
- Usage bar frozen at last polled value before reset_at
- Pacing bar (green) continues growing time-based during quiet hours
- At reset_at: both bars go to 0% (window reset, no conversation started)
- After reset_at (still quiet): both bars stay at 0%
Also adds codex_session_pacing_pct / codex_weekly_pacing_pct fields
so the Codex pacing indicator updates correctly on every poll and
when the user toggles the pacing setting.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three related fixes:
1. Fix thread deadlock during drag (root cause of stuck cursor):
WM_MOUSEMOVE held lock_state() mutex and called total_widget_width(),
which also called lock_state(). Rust's std::sync::Mutex (SRWLOCK on
Windows) is non-reentrant, causing the message thread to deadlock.
Fixed by using total_widget_width_for() with active_models read from
the already-held state.
2. Add WM_CAPTURECHANGED and WM_CANCELMODE handlers:
Reset dragging state whenever mouse capture is transferred away for
any reason, providing a safety net beyond WM_LBUTTONUP.
3. Add left_button_held() self-correction in WM_SETCURSOR and WM_MOUSEMOVE:
If dragging=true but the left button is not physically held, cancel
the drag immediately rather than waiting for a message that may never arrive.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merged upstream changes:
- v1.3.6-v1.3.9: token expiry notifications, Dutch localization, UI improvements
- v1.4.0: Codex model support via model menu
Resolved conflicts by preserving both:
- Our features: quiet hours, pacing indicator, Traditional Chinese localization
- Upstream features: Codex model support, Dutch localization, new UI fields
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Green pacing zone is now suppressed in both render paths when quiet
hours are active, consistent with the quiet-hours design intent of
pausing all live activity indicators.
Shows a green zone between actual usage and expected usage based on
elapsed time within the 5h/7d rolling windows. Updated at each poll
interval so the indicator grows in discrete steps matching the chosen
update frequency. Toggle via Settings > Show Pacing Indicator.
Also add Win32_System_SystemInformation feature (required for GetLocalTime)
and TIMER_QUIET_BOUNDARY constant to native_interop.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: pause usage polling on auth errors
- Show the same auth warning state for expired, invalid, or missing credentials
- Replace the widget auth text with a warning symbol and updated the toast notification
- Stop usage polling and countdown timers while auth is required
- Reuse the configured poll interval to watch credential file metadata instead of polling the API
- Auto-recover when credentials change, while still supporting manual refresh and restart flows
Updated translations
Fix non-reentrant mutex deadlock where MoveWindow dispatches WM_PAINT
synchronously, causing wnd_proc to re-enter lock_state() on the same thread.
Credit: aa333 (PR #14)
- Add `show_widget` field to Strings struct and all 6 language files
- Replace hardcoded "Show Widget" in window.rs with strings.show_widget
- Translate session_window ("5시간") and weekly_window ("7일") for Korean
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Korean language support with full UI translations including
menu items, update messages, and time format suffixes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Added a native system tray icon that shows current 5-hour usage as a percentage badge.
- Added tray icon tooltip support showing both 5h and 7d countdown/usage values.
- Added tray icon interactions: left-click toggles the taskbar widget, right-click opens the context menu.
- Anchored widget to the bottom of the taskbar
- Added embedded app icon loading so tray fallback uses the app's own icon.
- Updated countdown timer logic to stop cases where 61m is shown
- Updated README.md
- Added a native system tray icon with a live usage badge for the current 5-hour window.
- Left-clicking the tray icon now toggles the taskbar widget on and off.
- Right-click tray menu support now mirrors the widget menu, including refresh, startup, position reset, language, updates, and exit.
- The app now remembers whether the taskbar widget was hidden or visible between launches.
- Improved Windows app identity by using the proper app name and embedded icon metadata in shell surfaces.
- Refined tray icon styling and usage-state colouring for clearer at-a-glance monitoring.
wsl.exe -l -q can hang indefinitely on some systems (e.g. WSL
installed but not fully configured), which blocks the poll thread
forever and prevents any usage data from loading.
Adds a run_with_timeout helper (5s deadline) and uses it for both
list_wsl_distros and read_wsl_credentials. The refresh paths
already had timeouts — these two were missed.