Oversized panels scale down to fit screen instead of clipping
When a popover grows too tall for the screen, it now scales down proportionally rather than getting clipped. Previously, clamp_content_height() capped height strictly to the visible screen frame, leaving any lower rows unreachable and invisible. The new panels/panel_scale.py module computes a fit scale that stays above MIN_PANEL_SCALE, and macOS's PopoverViewController.applyPanelScale() together with Windows's _WindowsTrayController._apply_panel_zoom() apply it across the entire panel using window.usageApplyPanelZoom().
FEATURE
Codex status lines install cleanly on dotted and subtable configs
Codex status lines now install and remove reliably even when config.toml lacks a bare [tui] header. Configurations declaring tui solely through [tui.*] subtables or top-level dotted keys previously caused setup and removal routines to write nothing while falsely claiming success. Helper functions _insert_table_line(), _remove_table_line(), and _replace_table_line() now support both config structures, parse and validate every proposed edit with tomllib.loads, and raise a clear failure when no change can be made safely.
FEATURE
Windows builds point hidden imports to current installer modules
Windows build scripts now direct their hidden import flags to the current installer module paths. The v0.29.37 update restored the missing wintray.app and tui.app entry points; after a separate code refactor, scripts/build_windows.ps1 still pointed to session_hooks and setup_hook as obsolete top-level modules. The packaged executable was never broken because main.py imports both statically, but the outdated flags were dead configuration of the exact kind that previously caused broken v0.29.34–36 builds. They now properly specify installer.session_hooks and installer.setup_hook, enabling PyInstaller to diagnose any future omissions.
BUGFIX
Double-clicked macOS app toggles login items safely with UTF-8
Toggling login items on macOS no longer fails when the app is launched via double-click. Without the LANG environment variable, subprocess.run(..., text=True) defaulted to ASCII, causing a UnicodeDecodeError whenever launchctl or gh outputs contained non-ASCII characters. These process outputs are now explicitly parsed using UTF-8 encoding, safely substituting replacement characters for any invalid byte sequences.
FEATURE
Claude cost totals add advisor iterations and one-hour cache writes
Claude cost totals now accurately capture advisor iterations and one-hour cache write expenses. Claude usage parsers now inspect usage.iterations and usage.cache_creation.ephemeral_1h_input_tokens, creating separate breakdown rows solely for advisor_message iterations to avoid double-counting regular turns. One-hour cache writes are priced at twice the base input token rate, and the history cache schema version has been bumped so past sessions are reparsed automatically.
BUGFIX
Dragging Grok card on Windows moves panel consistently with others
Dragging the Grok card in the Windows tray now moves the entire panel smoothly, just like the other three provider cards. The tray's WebKit shim converts empty space on quota cards into native pywebview drag handles, but its element selector previously named only Claude, Codex, and Antigravity. As a result, dragging Grok fell through to the shared card-reordering logic, causing the fourth card to reorder itself rather than moving the window. The drag selector now includes all four providers, matching behavior already established in panel_core.js on macOS.
FEATURE
Contribution guides and localized docs move to dedicated folders
The repository root has been cleaned up and reorganized. Public contribution guidelines and security policies have been relocated into .github/. Multilingual README documentation and changelog history files are now consolidated under docs/. This housekeeping cleans up the root directory and updates all internal navigation links across the project.
FEATURE
Simplified Chinese, Japanese, and Korean READMEs backfill Grok CLI
Readers consulting localized documentation will now find complete coverage for the Grok CLI card. The Simplified Chinese, Japanese, and Korean README files previously missed mentions of the Grok card in their feature lists, the Hide Sections toggle documentation, and the provider comparison tables. This update backfills all three missing entries across all three translations, ensuring readers across every supported language have access to the exact same feature overviews and settings details.
FEATURE
Bump PyObjC to 12.2.2 and ruff to 0.16.4 across dependency updates
Project dependencies and linting toolchains have been upgraded to their latest releases. This update bumps the macOS system bridge PyObjC to 12.2.2 and the static analysis linter ruff to 0.16.4. By consolidating these version bumps into a single lockfile commit, the release cleanly resolves five separate dependency update requests at once, keeping the development environment and automated checks current.
Original changelog
Original changelogOversized panels scale down to fit screen instead of clipping
**Panels that are too tall for the screen now scale down instead of clipping.** `clamp_content_height()` used the visible frame as its ceiling, leaving rows beyond that height unreachable. `panels/panel_scale.py` now calculates a fit scale, no lower than `MIN_PANEL_SCALE`, and macOS's `PopoverViewController.applyPanelScale()` and Windows's `_WindowsTrayController._apply_panel_zoom()` apply it to the whole panel through `window.usageApplyPanelZoom()`.
Original changelogCodex status lines install cleanly on dotted and subtable configs
**Codex status lines now install and remove correctly when `config.toml` has no bare `[tui]` header.** Configurations that declare `tui` only through `[tui.*]` subtables or top-level dotted keys previously made the setup and unsetup paths silently write nothing while reporting success. `_insert_table_line()`, `_remove_table_line()`, and `_replace_table_line()` now handle both forms, validate every candidate with `tomllib.loads`, and report failure when no change can be safely made.
Original changelogWindows builds point hidden imports to current installer modules
**Windows builds now point their hidden imports at the installer modules' current paths.** The v0.29.37 fix restored the missing `wintray.app` and `tui.app` entry points; after a separate refactor, `scripts/build_windows.ps1` still named `session_hooks` and `setup_hook` as obsolete top-level modules. The bundle was never broken — `main.py` imports both statically — but the flags were dead configuration of exactly the kind that shipped the unusable v0.29.34–36 builds. They now name `installer.session_hooks` and `installer.setup_hook`, so PyInstaller can diagnose a future omission.
Original changelogDouble-clicked macOS app toggles login items safely with UTF-8
**Toggling the macOS login item no longer fails when the app was opened by double-clicking.** Without `LANG`, `subprocess.run(..., text=True)` used ASCII and could raise `UnicodeDecodeError` while reading `launchctl` or `gh` output containing non-ASCII text. Those reads now explicitly use UTF-8 with replacement for invalid bytes.
Original changelogClaude cost totals add advisor iterations and one-hour cache writes
**Claude cost totals now include advisor iterations and one-hour cache writes.** The Claude parsers now read `usage.iterations` and `usage.cache_creation.ephemeral_1h_input_tokens`; only `advisor_message` iterations get separate entries, avoiding double-counting ordinary messages. One-hour cache writes are priced at twice the base input rate, and the history cache schema is bumped so existing entries are reparsed.
Original changelogDragging Grok card on Windows moves panel consistently with others
**Dragging the Grok card no longer moves the panel differently from the other three on Windows.** The tray's WebKit shim turns a quota card's empty area into a native `pywebview` drag region, but its selector listed only Claude, Codex and Antigravity. Grok fell through to the shared card-reorder handler instead, so the same gesture that moved the window from the first three cards did something else from the fourth. The selector now matches all four, as `panel_core.js` already did on macOS.
Original changelogContribution guides and localized docs move to dedicated folders
Moved public contribution and security guides to `.github/` and localized README and changelog files to `docs/`, cleaning up the repository root and updating all links.
Original changelogSimplified Chinese, Japanese, and Korean READMEs backfill Grok CLI
Backfilled the Grok CLI card into the Simplified Chinese, Japanese and Korean READMEs, which had missed the feature list entry, the Hide Sections list and the comparison-table row.
Original changelogBump PyObjC to 12.2.2 and ruff to 0.16.4 across dependency updates
Bumped PyObjC to 12.2.2 and ruff to 0.16.4, closing five separately raised dependency updates in a single lockfile change.