usage-cli 0.33.3__tar.gz → 0.33.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {usage_cli-0.33.3/usage_cli.egg-info → usage_cli-0.33.5}/PKG-INFO +92 -73
- {usage_cli-0.33.3 → usage_cli-0.33.5}/README.md +91 -72
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/session_hooks.py +1 -1
- {usage_cli-0.33.3 → usage_cli-0.33.5}/pyproject.toml +1 -1
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_pricing.py +1 -1
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_project_resolver.py +4 -1
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_session_resume.py +170 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_taskbar_menu.py +35 -1
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_wintray.py +302 -4
- {usage_cli-0.33.3 → usage_cli-0.33.5/usage_cli.egg-info}/PKG-INFO +92 -73
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/pricing.py +2 -2
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_session_resume.py +79 -1
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/app.py +92 -24
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/taskbar_menu.py +18 -3
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/watch.py +44 -32
- {usage_cli-0.33.3 → usage_cli-0.33.5}/LICENSE +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/THIRD_PARTY_NOTICES.md +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/agy.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/claude.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/codex.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/grok.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/muse.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/rate_limits.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/registry.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/adapters/types.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/aggregator.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/blocks.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/diagnoser.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/diagnosis_snapshot.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/dispatch_ledger.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/insights.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/persona_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/reporter.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/subscription.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/analyzer/usage_snapshot.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/i18n.json +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/claude_pane.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/codex_hook_trust.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/login_item.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/setup_hook.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/installer/statusline_settings.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/_shared_cache_file.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/agy_disk_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/agy_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/agy_quota_probe.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/cache_quarantine.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/chromium_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/claude_desktop.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/claude_paths.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/claude_usage.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/codex_disk_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/codex_events.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/codex_fork_replay.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/codex_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/codex_paths.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/disk_cache_common.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/disk_cache_lifecycle.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/grok_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/grok_quota_probe.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/history_disk_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/history_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/jsonl_limits.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/jsonl_utils.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/loaders/muse_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/main.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/actions.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/agy.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/app.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/chrome.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/fsevents_watch.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/grok.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/manual_refresh.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/menu.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/new_badge.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/notify.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/popover.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/prefs.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/refresh.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/state.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/title.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/update.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/menubar/whats_new.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/base.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/catalog.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/dynamic_height.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/panel_scale.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/panel_window.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/panel_window_state.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/payload.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/web_panel.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/panels/window_drag.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/agy_window_keeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/burn_rate.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/codex_window_keeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/keeper_outcome.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/notifications.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/quota_snapshot.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/status_payload.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/usage_rate.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/quota/window_keeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/setup.cfg +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/setup_app.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_adapters_claude.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_adapters_codex.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_adapters_rate_limits.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_aggregator.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_agy_adapter.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_agy_disk_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_agy_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_agy_quota_probe.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_agy_window_keeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_analyzer_blocks.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_analyzer_pipeline.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_app_version.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_burn_rate.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_cache_quarantine.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_check_upstream.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_chromium_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_claude_desktop.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_claude_pane.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_claude_paths.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_codex_consistency.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_codex_hook_trust.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_codex_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_codex_window_keeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_desktop_fresh_cache.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_desktop_quota_display.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_desktop_quota_review.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_diagnoser.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_disk_cache_shards.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_dispatch_ledger.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_doctor.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_dynamic_height.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_fsevents_watch.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_grok_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_grok_quota_probe.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_history_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_hook_scripts_are_standalone.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_html_report_snapshot.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_i18n_format_fallback.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_i18n_key_parity.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_i18n_packaged_path.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_insights.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_jsonl_utils.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_keeper_menu.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_keeper_outcome.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_login_item.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_main.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_manual_refresh.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar_agy.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar_grok.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar_notify.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar_prefs.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar_state.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_menubar_update.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_muse_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_new_badge.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_packaged_resources.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_packaging.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_panel_footer_layout.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_panel_scale.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_panel_window_state.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_panels.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_panels_lazy_import.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_persona_loader.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_quota_aware.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_quota_label.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_report_daily_chart.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_report_filter_js.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_reporter_build_data.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_service_status.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_setup_app.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_setup_hook.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_setup_hook_coexistence.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_setup_hook_resume.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_setup_hook_terse.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_subprocess_utils.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_subscription.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_time_utils.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_tui.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_tui_sprite.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_ui_tables.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_update_checker.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_update_gate.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_update_release_notes.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_cli.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_client.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_diagnosis_snapshot.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_dir_sweeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_lang.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_logging.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_notifications.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_rate.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_snapshot.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_snapshot_replay.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_statusline.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_statusline_agy.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_statusline_forwarder.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_statusline_grok.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_terse_mode.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_usage_terse_reminder.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_web_panel_payload.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_whats_new.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_wheel_packaging.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_win_login_item.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_window_keeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tests/test_windows_manifest.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tui/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tui/app.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/tui/sprite.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/html_report.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/report_charts.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/report_daily_chart.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/report_filter.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/report_ledger.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/report_scripts.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/report_styles.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/ui/tables.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/updates/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/updates/checker.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/updates/gate.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/updates/release_notes.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/updates/whats_new.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_app/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_app/cli.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_app/doctor.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_cli.egg-info/SOURCES.txt +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_cli.egg-info/dependency_links.txt +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_cli.egg-info/entry_points.txt +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_cli.egg-info/requires.txt +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_cli.egg-info/top_level.txt +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/app_version.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/i18n.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/prefs.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/project_resolver.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/service_status.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/subprocess_utils.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/time_utils.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/usage_dir_sweeper.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/usage_lang.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_common/usage_logging.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_quota_aware.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_statusline.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_statusline_agy.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_statusline_forwarder.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_statusline_grok.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_terse_mode.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/usage_hooks/usage_terse_reminder.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/__init__.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/login_item.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/menu.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/prefs.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/quota_label.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/taskbar_obstacles.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/taskbar_overlay.py +0 -0
- {usage_cli-0.33.3 → usage_cli-0.33.5}/wintray/whats_new.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: usage-cli
|
|
3
|
-
Version: 0.33.
|
|
3
|
+
Version: 0.33.5
|
|
4
4
|
Summary: usage — 在 macOS menu bar 與 Windows 系統匣顯示 Claude Code、Codex、Antigravity 用量的小工具(也提供終端機 TUI)
|
|
5
5
|
License-Expression: AGPL-3.0-only
|
|
6
6
|
Requires-Python: >=3.13
|
|
@@ -32,6 +32,8 @@ Dynamic: license-file
|
|
|
32
32
|
|
|
33
33
|
[繁體中文](docs/README.zh-TW.md) · [简体中文](docs/README.zh-CN.md) · English · [日本語](docs/README.ja.md) · [한국어](docs/README.ko.md) | [Discussions](https://github.com/aqua5230/usage/discussions) | [Landing page](https://aqua5230.github.io/usage/)
|
|
34
34
|
|
|
35
|
+
[Install](#install) · [Features](#what-you-get) · [Themes](#theme-gallery) · [Comparison](#comparison) · [Troubleshooting](#troubleshooting)
|
|
36
|
+
|
|
35
37
|
[](https://github.com/aqua5230/usage/stargazers)
|
|
36
38
|
[](https://github.com/aqua5230/usage/actions/workflows/check.yml)
|
|
37
39
|
[](https://github.com/aqua5230/usage/releases/latest)
|
|
@@ -55,19 +57,36 @@ Dynamic: license-file
|
|
|
55
57
|
|
|
56
58
|
Runs on macOS 12 or newer and Windows 10/11.
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
### macOS (Homebrew, recommended)
|
|
59
61
|
|
|
60
62
|
```bash
|
|
61
63
|
brew install --cask aqua5230/usage/usage
|
|
62
64
|
```
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
`brew upgrade --cask usage` keeps it current. Prefer a direct download? Get `usage.app.zip` from the [latest release](https://github.com/aqua5230/usage/releases/latest), unzip it, and drag `usage.app` into Applications.
|
|
67
|
+
|
|
68
|
+
### Windows (portable)
|
|
69
|
+
|
|
70
|
+
Download `usage-windows.zip` from the [latest release](https://github.com/aqua5230/usage/releases/latest), unzip it, and run `usage.exe`. No installer is needed. See [Windows Support](#windows-support).
|
|
71
|
+
|
|
72
|
+
### Linux and terminal only (uvx)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
uvx usage-cli
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Opens the terminal interface with nothing to install; uv prepares Python 3.13 by itself. For a persistent `usage` command, run `uv tool install usage-cli`. On Linux, `usage setup` installs the Claude Code status line too. This path has no menu bar or tray app.
|
|
65
79
|
|
|
66
|
-
|
|
80
|
+
<details>
|
|
81
|
+
<summary>First launch blocked by macOS Gatekeeper or Windows SmartScreen?</summary>
|
|
82
|
+
|
|
83
|
+
- **macOS 15 or later:** open System Settings → Privacy & Security, scroll down, and click **Open Anyway**.
|
|
84
|
+
- **macOS 14 or earlier:** right-click `usage.app` in Finder → **Open** once.
|
|
85
|
+
- **Windows:** if SmartScreen shows **Windows protected your PC**, click **More info** → **Run anyway**.
|
|
67
86
|
|
|
68
|
-
|
|
87
|
+
Then click the menu bar or tray icon.
|
|
69
88
|
|
|
70
|
-
|
|
89
|
+
</details>
|
|
71
90
|
|
|
72
91
|
`usage` needs data from at least one of Claude Code, Codex, Antigravity, or Grok CLI, or a running Claude Desktop app.
|
|
73
92
|
|
|
@@ -98,13 +117,15 @@ Once set up, the bottom of the Claude Code window will show a status line like t
|
|
|
98
117
|
|
|
99
118
|
### Inside Claude Code
|
|
100
119
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
120
|
+
| Feature | What it does | Default · quota use |
|
|
121
|
+
|---------|--------------|---------------------|
|
|
122
|
+
| **Progress Concierge** | A new session starts with your last request, uncommitted changes, and unfinished todos already handed to the AI. No `/resume`, no recap. | Off · no extra model calls |
|
|
123
|
+
| **Token Saver** | Asks Claude Code and Codex for shorter, plainer replies while keeping code and error messages byte-exact. In an A/B test on real sessions, late replies stayed **~40% shorter** instead of drifting 84% longer. | Off · no extra model calls |
|
|
124
|
+
| **Side pane** | Quotas, other conversations, and background jobs next to your work. [See the side pane](#claude-code-side-pane). | Off · no extra model calls |
|
|
125
|
+
| **Beginner Mode** | Explains up to three technical terms from each answer in one plain line, then brings them back for review. | Off · a little Claude quota |
|
|
126
|
+
| **Quota-Aware Mode** | When a quota runs low, Claude tells you before a big task that would use it, and lets you do a smaller part or wait for the reset. | Off · no extra model calls |
|
|
127
|
+
| **Auto-start 5-hour session** | Right after a 5-hour quota resets, sends each tool one tiny message so the next window starts counting right away. | Off · negligible quota |
|
|
128
|
+
| **Token-waste health check** | A daily scan of your logs for repeated file reads and noisy output. Say "show me" and the AI walks you through fixes. | Comes with Progress Concierge · no extra model calls |
|
|
108
129
|
|
|
109
130
|
### Reports and More
|
|
110
131
|
|
|
@@ -138,7 +159,7 @@ Once set up, the bottom of the Claude Code window will show a status line like t
|
|
|
138
159
|
|
|
139
160
|
See your quota, other conversations, and background jobs without leaving Claude Code. Available on macOS and Windows.
|
|
140
161
|
|
|
141
|
-
<p align="center"><img src="docs/side-pane.png" alt="Claude Code side pane showing quotas, conversations, and background jobs" width="637"></p>
|
|
162
|
+
<p align="center"><img src="docs/side-pane.en.png" alt="Claude Code side pane showing quotas, conversations, and background jobs" width="637"></p>
|
|
142
163
|
|
|
143
164
|
**What you’ll see**
|
|
144
165
|
|
|
@@ -164,49 +185,6 @@ See your quota, other conversations, and background jobs without leaving Claude
|
|
|
164
185
|
|
|
165
186
|
</details>
|
|
166
187
|
|
|
167
|
-
## Privacy & Data Sources
|
|
168
|
-
|
|
169
|
-
- **Local logs:** Claude Code, Codex, Grok CLI, and Muse Code numbers are read from log files on your machine. Their contents are never uploaded.
|
|
170
|
-
- **Claude Desktop:** Without the Claude Code CLI or a status line, keep Claude Desktop open and `usage` reads its local plan-usage history. No cookies, login tokens, or API calls are needed. Reset times appear only when its local cache confirms them; they are never estimated.
|
|
171
|
-
- **Antigravity**, only if you use it, needs network access: quota is fetched from Google's official quota endpoint with the OAuth credential the Antigravity CLI already stored after sign-in — read from macOS Keychain, Windows Credential Manager, or a local token file depending on CLI version. `usage` never writes that credential back and keeps any refreshed access token in memory only; the call itself reads quota metadata.
|
|
172
|
-
- **Other background network activity:** Public Claude and Codex status pages to flag outages, a public model-pricing table to estimate cost (built-in prices are used offline), and an occasional GitHub check for a new version.
|
|
173
|
-
- **Beginner Mode**, only if you turn it on, sends Claude Code's latest answer to Claude Haiku through your own Claude Code sign-in to pick terms. Your term list stays in `~/.usage/glossary.json`.
|
|
174
|
-
|
|
175
|
-
<details>
|
|
176
|
-
<summary>How Claude Desktop quota is read</summary>
|
|
177
|
-
|
|
178
|
-
When Claude Code quota files are unavailable, `usage` reads Claude Desktop's local `plan-usage-history.json`, including Microsoft Store installations on Windows. When a recent response in its local Chromium block-file HTTP cache matches the organization, `usage` also reads the exact session and weekly reset times. Newer cached observations take precedence over throttled history samples; older cache must match the percentages. Missing, unsupported, expired, or inconsistent cache data leaves the countdown unknown.
|
|
179
|
-
|
|
180
|
-
Desktop samples normally update every 5–15 minutes. The panel shows the observation age, marks it stale after 30 minutes, and stops displaying it after two hours. The most recent organization sample is used; custom desktop profiles are not discovered. These quota caches contain no per-project token counts. Desktop sessions that also write compatible Claude Code logs under `~/.claude/projects/` are counted by the existing project/token reports.
|
|
181
|
-
|
|
182
|
-
</details>
|
|
183
|
-
|
|
184
|
-
## Windows Support
|
|
185
|
-
|
|
186
|
-
Windows has the full core experience: the system-tray UI with the same 16 themes as macOS, the Claude Code status-line hook, and Codex history parsing all work natively. The tray UI requires Microsoft Edge WebView2 Runtime, which is normally included with Windows 10 and 11.
|
|
187
|
-
|
|
188
|
-
<details>
|
|
189
|
-
<summary>Tray icon, taskbar label, and other differences</summary>
|
|
190
|
-
|
|
191
|
-
The system-tray icon shows the remaining session quota percentage for Claude or Codex. Choose **Tray Display Source → Claude Code / Codex** in the right-click menu or panel menu; the change applies immediately and survives restarts (default: Claude). If Codex has no session window, the icon uses its weekly quota instead and the tooltip identifies that window. Missing quota data shows `--`. The tooltip summarizes both tools, with the selected source first. Left-click opens the quota themes in WebView2. Right-click also provides Reset Panel Position and Quit; panel switching, refresh, launch at login, and update checks are in the panel menu.
|
|
192
|
-
|
|
193
|
-
Enable **Show Taskbar Quota** in either menu for a transparent `Codex: 92%` label inside the taskbar, immediately left of the notification area. It follows taskbar position, scaling, and light/dark theme, and hides during fullscreen use or taskbar auto-hide. Click the label to open the panel. If buttons leave insufficient space, it moves just outside the taskbar. The normal app icon remains as a menu entry point; the label follows the selected source and quota window. Right-click the label to open the same menu as the tray icon.
|
|
194
|
-
|
|
195
|
-
The panel opens at the bottom-right of the working area rather than next to the tray icon, and update prompts use a system Yes/No dialog.
|
|
196
|
-
|
|
197
|
-
</details>
|
|
198
|
-
|
|
199
|
-
### Code signing policy
|
|
200
|
-
|
|
201
|
-
Free code signing provided by [SignPath.io](https://about.signpath.io/), certificate by [SignPath Foundation](https://signpath.org/).
|
|
202
|
-
|
|
203
|
-
Team roles:
|
|
204
|
-
|
|
205
|
-
- Committers and reviewers: [aqua5230](https://github.com/aqua5230)
|
|
206
|
-
- Approvers: [aqua5230](https://github.com/aqua5230)
|
|
207
|
-
|
|
208
|
-
Privacy policy: this program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it. See [Privacy & Data Sources](#privacy--data-sources) for the network calls `usage` makes on your behalf and how to avoid them.
|
|
209
|
-
|
|
210
188
|
## Theme Gallery
|
|
211
189
|
|
|
212
190
|
Switch between **16 visual themes** directly from the UI:
|
|
@@ -238,22 +216,6 @@ Switch between **16 visual themes** directly from the UI:
|
|
|
238
216
|
|
|
239
217
|
</details>
|
|
240
218
|
|
|
241
|
-
## Troubleshooting
|
|
242
|
-
|
|
243
|
-
If the menu bar shows `--`, it's usually not broken — there's just no local data yet.
|
|
244
|
-
|
|
245
|
-
| Symptom | Likely cause | Fix |
|
|
246
|
-
|---------|--------------|-----|
|
|
247
|
-
| Menu bar shows `--` | No data yet, or Claude Code hook not refreshed | Run one Codex conversation. For Claude Code, click "Set Up Status Line" (from source: `python3 main.py --setup`) |
|
|
248
|
-
| `ImportError` from `main.py` inside `usage.app` | The bundled `main.py` needs the bundle's own interpreter and cannot be run by hand | Don't run that copy. Click "Set Up Status Line" in the app, or clone the repo to run from source |
|
|
249
|
-
| Accidentally hit "Quit" | Process terminated | Relaunch `usage.app` from Spotlight or Applications. (`launchctl start com.lollapalooza.usage` only works if you enabled Launch at Login.) |
|
|
250
|
-
| Status says "N minutes stale" | Claude Code isn't running | Open Claude Code and let it run |
|
|
251
|
-
| Codex section is empty | No Codex history found | Run a Codex conversation to generate logs |
|
|
252
|
-
| Today's cost shows $0.00 | Model pricing missing | Delete `~/.usage/pricing_cache.json` or check `USAGE_DEBUG=1` |
|
|
253
|
-
| Antigravity card is missing | Antigravity CLI not installed or not signed in | Install and sign in to the Antigravity CLI; the card appears automatically once a background quota fetch succeeds |
|
|
254
|
-
| App won't open | macOS Gatekeeper blocked it | See [First launch on macOS](#install) |
|
|
255
|
-
| Windows shows "Windows protected your PC" | SmartScreen doesn't recognize the download yet | Click More info → Run anyway |
|
|
256
|
-
|
|
257
219
|
## Comparison
|
|
258
220
|
|
|
259
221
|
| Feature | usage | ccusage | TokenTracker |
|
|
@@ -276,6 +238,63 @@ If the menu bar shows `--`, it's usually not broken — there's just no local da
|
|
|
276
238
|
- You don't use Claude Code, Codex, Antigravity, Grok CLI, or Claude Desktop — there's no usage data for `usage` to read.
|
|
277
239
|
- You want a menu bar on Linux. Only macOS and Windows have one today, though the terminal interface (`uvx usage-cli`) runs on Linux.
|
|
278
240
|
|
|
241
|
+
## Windows Support
|
|
242
|
+
|
|
243
|
+
Windows has the full core experience: the system-tray UI with the same 16 themes as macOS, the Claude Code status-line hook, and Codex history parsing all work natively. The tray UI requires Microsoft Edge WebView2 Runtime, which is normally included with Windows 10 and 11.
|
|
244
|
+
|
|
245
|
+
<details>
|
|
246
|
+
<summary>Tray icon, taskbar label, and other differences</summary>
|
|
247
|
+
|
|
248
|
+
The system-tray icon shows the remaining session quota percentage for Claude or Codex. Choose **Tray Display Source → Claude Code / Codex** in the right-click menu or panel menu; the change applies immediately and survives restarts (default: Claude). If Codex has no session window, the icon uses its weekly quota instead and the tooltip identifies that window. Missing quota data shows `--`. The tooltip summarizes both tools, with the selected source first. Left-click opens the quota themes in WebView2. Right-click also provides Reset Panel Position and Quit; panel switching, refresh, launch at login, and update checks are in the panel menu.
|
|
249
|
+
|
|
250
|
+
Enable **Show Taskbar Quota** in either menu for a transparent `Codex: 92%` label inside the taskbar, immediately left of the notification area. It follows taskbar position, scaling, and light/dark theme, and hides during fullscreen use or taskbar auto-hide. Click the label to open the panel. If buttons leave insufficient space, it moves just outside the taskbar. The normal app icon remains as a menu entry point; the label follows the selected source and quota window. Right-click the label to open the same menu as the tray icon.
|
|
251
|
+
|
|
252
|
+
The panel opens at the bottom-right of the working area rather than next to the tray icon, and update prompts use a system Yes/No dialog.
|
|
253
|
+
|
|
254
|
+
</details>
|
|
255
|
+
|
|
256
|
+
## Troubleshooting
|
|
257
|
+
|
|
258
|
+
If the menu bar shows `--`, it's usually not broken — there's just no local data yet.
|
|
259
|
+
|
|
260
|
+
| Symptom | Likely cause | Fix |
|
|
261
|
+
|---------|--------------|-----|
|
|
262
|
+
| Menu bar shows `--` | No data yet, or Claude Code hook not refreshed | Run one Codex conversation. For Claude Code, click "Set Up Status Line" (from source: `python3 main.py --setup`) |
|
|
263
|
+
| `ImportError` from `main.py` inside `usage.app` | The bundled `main.py` needs the bundle's own interpreter and cannot be run by hand | Don't run that copy. Click "Set Up Status Line" in the app, or clone the repo to run from source |
|
|
264
|
+
| Accidentally hit "Quit" | Process terminated | Relaunch `usage.app` from Spotlight or Applications. (`launchctl start com.lollapalooza.usage` only works if you enabled Launch at Login.) |
|
|
265
|
+
| Status says "N minutes stale" | Claude Code isn't running | Open Claude Code and let it run |
|
|
266
|
+
| Codex section is empty | No Codex history found | Run a Codex conversation to generate logs |
|
|
267
|
+
| Today's cost shows $0.00 | Model pricing missing | Delete `~/.usage/pricing_cache.json` or check `USAGE_DEBUG=1` |
|
|
268
|
+
| Antigravity card is missing | Antigravity CLI not installed or not signed in | Install and sign in to the Antigravity CLI; the card appears automatically once a background quota fetch succeeds |
|
|
269
|
+
|
|
270
|
+
## Privacy & Data Sources
|
|
271
|
+
|
|
272
|
+
- **Local logs:** Claude Code, Codex, Grok CLI, and Muse Code numbers are read from log files on your machine. Their contents are never uploaded.
|
|
273
|
+
- **Claude Desktop:** Without the Claude Code CLI or a status line, keep Claude Desktop open and `usage` reads its local plan-usage history. No cookies, login tokens, or API calls are needed. Reset times appear only when its local cache confirms them; they are never estimated.
|
|
274
|
+
- **Antigravity**, only if you use it, needs network access: quota is fetched from Google's official quota endpoint with the OAuth credential the Antigravity CLI already stored after sign-in — read from macOS Keychain, Windows Credential Manager, or a local token file depending on CLI version. `usage` never writes that credential back and keeps any refreshed access token in memory only; the call itself reads quota metadata.
|
|
275
|
+
- **Other background network activity:** Public Claude and Codex status pages to flag outages, a public model-pricing table to estimate cost (built-in prices are used offline), and an occasional GitHub check for a new version.
|
|
276
|
+
- **Beginner Mode**, only if you turn it on, sends Claude Code's latest answer to Claude Haiku through your own Claude Code sign-in to pick terms. Your term list stays in `~/.usage/glossary.json`.
|
|
277
|
+
|
|
278
|
+
<details>
|
|
279
|
+
<summary>How Claude Desktop quota is read</summary>
|
|
280
|
+
|
|
281
|
+
When Claude Code quota files are unavailable, `usage` reads Claude Desktop's local `plan-usage-history.json`, including Microsoft Store installations on Windows. When a recent response in its local Chromium block-file HTTP cache matches the organization, `usage` also reads the exact session and weekly reset times. Newer cached observations take precedence over throttled history samples; older cache must match the percentages. Missing, unsupported, expired, or inconsistent cache data leaves the countdown unknown.
|
|
282
|
+
|
|
283
|
+
Desktop samples normally update every 5–15 minutes. The panel shows the observation age, marks it stale after 30 minutes, and stops displaying it after two hours. The most recent organization sample is used; custom desktop profiles are not discovered. These quota caches contain no per-project token counts. Desktop sessions that also write compatible Claude Code logs under `~/.claude/projects/` are counted by the existing project/token reports.
|
|
284
|
+
|
|
285
|
+
</details>
|
|
286
|
+
|
|
287
|
+
### Code signing policy
|
|
288
|
+
|
|
289
|
+
Free code signing provided by [SignPath.io](https://about.signpath.io/), certificate by [SignPath Foundation](https://signpath.org/).
|
|
290
|
+
|
|
291
|
+
Team roles:
|
|
292
|
+
|
|
293
|
+
- Committers and reviewers: [aqua5230](https://github.com/aqua5230)
|
|
294
|
+
- Approvers: [aqua5230](https://github.com/aqua5230)
|
|
295
|
+
|
|
296
|
+
Privacy policy: this program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it. See [Privacy & Data Sources](#privacy--data-sources) for the network calls `usage` makes on your behalf and how to avoid them.
|
|
297
|
+
|
|
279
298
|
## Development
|
|
280
299
|
|
|
281
300
|
Building from source, configuring custom agents, or running the terminal TUI? See the **[development docs](docs/DEVELOPMENT.md)**.
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
[繁體中文](docs/README.zh-TW.md) · [简体中文](docs/README.zh-CN.md) · English · [日本語](docs/README.ja.md) · [한국어](docs/README.ko.md) | [Discussions](https://github.com/aqua5230/usage/discussions) | [Landing page](https://aqua5230.github.io/usage/)
|
|
12
12
|
|
|
13
|
+
[Install](#install) · [Features](#what-you-get) · [Themes](#theme-gallery) · [Comparison](#comparison) · [Troubleshooting](#troubleshooting)
|
|
14
|
+
|
|
13
15
|
[](https://github.com/aqua5230/usage/stargazers)
|
|
14
16
|
[](https://github.com/aqua5230/usage/actions/workflows/check.yml)
|
|
15
17
|
[](https://github.com/aqua5230/usage/releases/latest)
|
|
@@ -33,19 +35,36 @@
|
|
|
33
35
|
|
|
34
36
|
Runs on macOS 12 or newer and Windows 10/11.
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
### macOS (Homebrew, recommended)
|
|
37
39
|
|
|
38
40
|
```bash
|
|
39
41
|
brew install --cask aqua5230/usage/usage
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
|
|
44
|
+
`brew upgrade --cask usage` keeps it current. Prefer a direct download? Get `usage.app.zip` from the [latest release](https://github.com/aqua5230/usage/releases/latest), unzip it, and drag `usage.app` into Applications.
|
|
45
|
+
|
|
46
|
+
### Windows (portable)
|
|
47
|
+
|
|
48
|
+
Download `usage-windows.zip` from the [latest release](https://github.com/aqua5230/usage/releases/latest), unzip it, and run `usage.exe`. No installer is needed. See [Windows Support](#windows-support).
|
|
49
|
+
|
|
50
|
+
### Linux and terminal only (uvx)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uvx usage-cli
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Opens the terminal interface with nothing to install; uv prepares Python 3.13 by itself. For a persistent `usage` command, run `uv tool install usage-cli`. On Linux, `usage setup` installs the Claude Code status line too. This path has no menu bar or tray app.
|
|
43
57
|
|
|
44
|
-
|
|
58
|
+
<details>
|
|
59
|
+
<summary>First launch blocked by macOS Gatekeeper or Windows SmartScreen?</summary>
|
|
60
|
+
|
|
61
|
+
- **macOS 15 or later:** open System Settings → Privacy & Security, scroll down, and click **Open Anyway**.
|
|
62
|
+
- **macOS 14 or earlier:** right-click `usage.app` in Finder → **Open** once.
|
|
63
|
+
- **Windows:** if SmartScreen shows **Windows protected your PC**, click **More info** → **Run anyway**.
|
|
45
64
|
|
|
46
|
-
|
|
65
|
+
Then click the menu bar or tray icon.
|
|
47
66
|
|
|
48
|
-
|
|
67
|
+
</details>
|
|
49
68
|
|
|
50
69
|
`usage` needs data from at least one of Claude Code, Codex, Antigravity, or Grok CLI, or a running Claude Desktop app.
|
|
51
70
|
|
|
@@ -76,13 +95,15 @@ Once set up, the bottom of the Claude Code window will show a status line like t
|
|
|
76
95
|
|
|
77
96
|
### Inside Claude Code
|
|
78
97
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
98
|
+
| Feature | What it does | Default · quota use |
|
|
99
|
+
|---------|--------------|---------------------|
|
|
100
|
+
| **Progress Concierge** | A new session starts with your last request, uncommitted changes, and unfinished todos already handed to the AI. No `/resume`, no recap. | Off · no extra model calls |
|
|
101
|
+
| **Token Saver** | Asks Claude Code and Codex for shorter, plainer replies while keeping code and error messages byte-exact. In an A/B test on real sessions, late replies stayed **~40% shorter** instead of drifting 84% longer. | Off · no extra model calls |
|
|
102
|
+
| **Side pane** | Quotas, other conversations, and background jobs next to your work. [See the side pane](#claude-code-side-pane). | Off · no extra model calls |
|
|
103
|
+
| **Beginner Mode** | Explains up to three technical terms from each answer in one plain line, then brings them back for review. | Off · a little Claude quota |
|
|
104
|
+
| **Quota-Aware Mode** | When a quota runs low, Claude tells you before a big task that would use it, and lets you do a smaller part or wait for the reset. | Off · no extra model calls |
|
|
105
|
+
| **Auto-start 5-hour session** | Right after a 5-hour quota resets, sends each tool one tiny message so the next window starts counting right away. | Off · negligible quota |
|
|
106
|
+
| **Token-waste health check** | A daily scan of your logs for repeated file reads and noisy output. Say "show me" and the AI walks you through fixes. | Comes with Progress Concierge · no extra model calls |
|
|
86
107
|
|
|
87
108
|
### Reports and More
|
|
88
109
|
|
|
@@ -116,7 +137,7 @@ Once set up, the bottom of the Claude Code window will show a status line like t
|
|
|
116
137
|
|
|
117
138
|
See your quota, other conversations, and background jobs without leaving Claude Code. Available on macOS and Windows.
|
|
118
139
|
|
|
119
|
-
<p align="center"><img src="docs/side-pane.png" alt="Claude Code side pane showing quotas, conversations, and background jobs" width="637"></p>
|
|
140
|
+
<p align="center"><img src="docs/side-pane.en.png" alt="Claude Code side pane showing quotas, conversations, and background jobs" width="637"></p>
|
|
120
141
|
|
|
121
142
|
**What you’ll see**
|
|
122
143
|
|
|
@@ -142,49 +163,6 @@ See your quota, other conversations, and background jobs without leaving Claude
|
|
|
142
163
|
|
|
143
164
|
</details>
|
|
144
165
|
|
|
145
|
-
## Privacy & Data Sources
|
|
146
|
-
|
|
147
|
-
- **Local logs:** Claude Code, Codex, Grok CLI, and Muse Code numbers are read from log files on your machine. Their contents are never uploaded.
|
|
148
|
-
- **Claude Desktop:** Without the Claude Code CLI or a status line, keep Claude Desktop open and `usage` reads its local plan-usage history. No cookies, login tokens, or API calls are needed. Reset times appear only when its local cache confirms them; they are never estimated.
|
|
149
|
-
- **Antigravity**, only if you use it, needs network access: quota is fetched from Google's official quota endpoint with the OAuth credential the Antigravity CLI already stored after sign-in — read from macOS Keychain, Windows Credential Manager, or a local token file depending on CLI version. `usage` never writes that credential back and keeps any refreshed access token in memory only; the call itself reads quota metadata.
|
|
150
|
-
- **Other background network activity:** Public Claude and Codex status pages to flag outages, a public model-pricing table to estimate cost (built-in prices are used offline), and an occasional GitHub check for a new version.
|
|
151
|
-
- **Beginner Mode**, only if you turn it on, sends Claude Code's latest answer to Claude Haiku through your own Claude Code sign-in to pick terms. Your term list stays in `~/.usage/glossary.json`.
|
|
152
|
-
|
|
153
|
-
<details>
|
|
154
|
-
<summary>How Claude Desktop quota is read</summary>
|
|
155
|
-
|
|
156
|
-
When Claude Code quota files are unavailable, `usage` reads Claude Desktop's local `plan-usage-history.json`, including Microsoft Store installations on Windows. When a recent response in its local Chromium block-file HTTP cache matches the organization, `usage` also reads the exact session and weekly reset times. Newer cached observations take precedence over throttled history samples; older cache must match the percentages. Missing, unsupported, expired, or inconsistent cache data leaves the countdown unknown.
|
|
157
|
-
|
|
158
|
-
Desktop samples normally update every 5–15 minutes. The panel shows the observation age, marks it stale after 30 minutes, and stops displaying it after two hours. The most recent organization sample is used; custom desktop profiles are not discovered. These quota caches contain no per-project token counts. Desktop sessions that also write compatible Claude Code logs under `~/.claude/projects/` are counted by the existing project/token reports.
|
|
159
|
-
|
|
160
|
-
</details>
|
|
161
|
-
|
|
162
|
-
## Windows Support
|
|
163
|
-
|
|
164
|
-
Windows has the full core experience: the system-tray UI with the same 16 themes as macOS, the Claude Code status-line hook, and Codex history parsing all work natively. The tray UI requires Microsoft Edge WebView2 Runtime, which is normally included with Windows 10 and 11.
|
|
165
|
-
|
|
166
|
-
<details>
|
|
167
|
-
<summary>Tray icon, taskbar label, and other differences</summary>
|
|
168
|
-
|
|
169
|
-
The system-tray icon shows the remaining session quota percentage for Claude or Codex. Choose **Tray Display Source → Claude Code / Codex** in the right-click menu or panel menu; the change applies immediately and survives restarts (default: Claude). If Codex has no session window, the icon uses its weekly quota instead and the tooltip identifies that window. Missing quota data shows `--`. The tooltip summarizes both tools, with the selected source first. Left-click opens the quota themes in WebView2. Right-click also provides Reset Panel Position and Quit; panel switching, refresh, launch at login, and update checks are in the panel menu.
|
|
170
|
-
|
|
171
|
-
Enable **Show Taskbar Quota** in either menu for a transparent `Codex: 92%` label inside the taskbar, immediately left of the notification area. It follows taskbar position, scaling, and light/dark theme, and hides during fullscreen use or taskbar auto-hide. Click the label to open the panel. If buttons leave insufficient space, it moves just outside the taskbar. The normal app icon remains as a menu entry point; the label follows the selected source and quota window. Right-click the label to open the same menu as the tray icon.
|
|
172
|
-
|
|
173
|
-
The panel opens at the bottom-right of the working area rather than next to the tray icon, and update prompts use a system Yes/No dialog.
|
|
174
|
-
|
|
175
|
-
</details>
|
|
176
|
-
|
|
177
|
-
### Code signing policy
|
|
178
|
-
|
|
179
|
-
Free code signing provided by [SignPath.io](https://about.signpath.io/), certificate by [SignPath Foundation](https://signpath.org/).
|
|
180
|
-
|
|
181
|
-
Team roles:
|
|
182
|
-
|
|
183
|
-
- Committers and reviewers: [aqua5230](https://github.com/aqua5230)
|
|
184
|
-
- Approvers: [aqua5230](https://github.com/aqua5230)
|
|
185
|
-
|
|
186
|
-
Privacy policy: this program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it. See [Privacy & Data Sources](#privacy--data-sources) for the network calls `usage` makes on your behalf and how to avoid them.
|
|
187
|
-
|
|
188
166
|
## Theme Gallery
|
|
189
167
|
|
|
190
168
|
Switch between **16 visual themes** directly from the UI:
|
|
@@ -216,22 +194,6 @@ Switch between **16 visual themes** directly from the UI:
|
|
|
216
194
|
|
|
217
195
|
</details>
|
|
218
196
|
|
|
219
|
-
## Troubleshooting
|
|
220
|
-
|
|
221
|
-
If the menu bar shows `--`, it's usually not broken — there's just no local data yet.
|
|
222
|
-
|
|
223
|
-
| Symptom | Likely cause | Fix |
|
|
224
|
-
|---------|--------------|-----|
|
|
225
|
-
| Menu bar shows `--` | No data yet, or Claude Code hook not refreshed | Run one Codex conversation. For Claude Code, click "Set Up Status Line" (from source: `python3 main.py --setup`) |
|
|
226
|
-
| `ImportError` from `main.py` inside `usage.app` | The bundled `main.py` needs the bundle's own interpreter and cannot be run by hand | Don't run that copy. Click "Set Up Status Line" in the app, or clone the repo to run from source |
|
|
227
|
-
| Accidentally hit "Quit" | Process terminated | Relaunch `usage.app` from Spotlight or Applications. (`launchctl start com.lollapalooza.usage` only works if you enabled Launch at Login.) |
|
|
228
|
-
| Status says "N minutes stale" | Claude Code isn't running | Open Claude Code and let it run |
|
|
229
|
-
| Codex section is empty | No Codex history found | Run a Codex conversation to generate logs |
|
|
230
|
-
| Today's cost shows $0.00 | Model pricing missing | Delete `~/.usage/pricing_cache.json` or check `USAGE_DEBUG=1` |
|
|
231
|
-
| Antigravity card is missing | Antigravity CLI not installed or not signed in | Install and sign in to the Antigravity CLI; the card appears automatically once a background quota fetch succeeds |
|
|
232
|
-
| App won't open | macOS Gatekeeper blocked it | See [First launch on macOS](#install) |
|
|
233
|
-
| Windows shows "Windows protected your PC" | SmartScreen doesn't recognize the download yet | Click More info → Run anyway |
|
|
234
|
-
|
|
235
197
|
## Comparison
|
|
236
198
|
|
|
237
199
|
| Feature | usage | ccusage | TokenTracker |
|
|
@@ -254,6 +216,63 @@ If the menu bar shows `--`, it's usually not broken — there's just no local da
|
|
|
254
216
|
- You don't use Claude Code, Codex, Antigravity, Grok CLI, or Claude Desktop — there's no usage data for `usage` to read.
|
|
255
217
|
- You want a menu bar on Linux. Only macOS and Windows have one today, though the terminal interface (`uvx usage-cli`) runs on Linux.
|
|
256
218
|
|
|
219
|
+
## Windows Support
|
|
220
|
+
|
|
221
|
+
Windows has the full core experience: the system-tray UI with the same 16 themes as macOS, the Claude Code status-line hook, and Codex history parsing all work natively. The tray UI requires Microsoft Edge WebView2 Runtime, which is normally included with Windows 10 and 11.
|
|
222
|
+
|
|
223
|
+
<details>
|
|
224
|
+
<summary>Tray icon, taskbar label, and other differences</summary>
|
|
225
|
+
|
|
226
|
+
The system-tray icon shows the remaining session quota percentage for Claude or Codex. Choose **Tray Display Source → Claude Code / Codex** in the right-click menu or panel menu; the change applies immediately and survives restarts (default: Claude). If Codex has no session window, the icon uses its weekly quota instead and the tooltip identifies that window. Missing quota data shows `--`. The tooltip summarizes both tools, with the selected source first. Left-click opens the quota themes in WebView2. Right-click also provides Reset Panel Position and Quit; panel switching, refresh, launch at login, and update checks are in the panel menu.
|
|
227
|
+
|
|
228
|
+
Enable **Show Taskbar Quota** in either menu for a transparent `Codex: 92%` label inside the taskbar, immediately left of the notification area. It follows taskbar position, scaling, and light/dark theme, and hides during fullscreen use or taskbar auto-hide. Click the label to open the panel. If buttons leave insufficient space, it moves just outside the taskbar. The normal app icon remains as a menu entry point; the label follows the selected source and quota window. Right-click the label to open the same menu as the tray icon.
|
|
229
|
+
|
|
230
|
+
The panel opens at the bottom-right of the working area rather than next to the tray icon, and update prompts use a system Yes/No dialog.
|
|
231
|
+
|
|
232
|
+
</details>
|
|
233
|
+
|
|
234
|
+
## Troubleshooting
|
|
235
|
+
|
|
236
|
+
If the menu bar shows `--`, it's usually not broken — there's just no local data yet.
|
|
237
|
+
|
|
238
|
+
| Symptom | Likely cause | Fix |
|
|
239
|
+
|---------|--------------|-----|
|
|
240
|
+
| Menu bar shows `--` | No data yet, or Claude Code hook not refreshed | Run one Codex conversation. For Claude Code, click "Set Up Status Line" (from source: `python3 main.py --setup`) |
|
|
241
|
+
| `ImportError` from `main.py` inside `usage.app` | The bundled `main.py` needs the bundle's own interpreter and cannot be run by hand | Don't run that copy. Click "Set Up Status Line" in the app, or clone the repo to run from source |
|
|
242
|
+
| Accidentally hit "Quit" | Process terminated | Relaunch `usage.app` from Spotlight or Applications. (`launchctl start com.lollapalooza.usage` only works if you enabled Launch at Login.) |
|
|
243
|
+
| Status says "N minutes stale" | Claude Code isn't running | Open Claude Code and let it run |
|
|
244
|
+
| Codex section is empty | No Codex history found | Run a Codex conversation to generate logs |
|
|
245
|
+
| Today's cost shows $0.00 | Model pricing missing | Delete `~/.usage/pricing_cache.json` or check `USAGE_DEBUG=1` |
|
|
246
|
+
| Antigravity card is missing | Antigravity CLI not installed or not signed in | Install and sign in to the Antigravity CLI; the card appears automatically once a background quota fetch succeeds |
|
|
247
|
+
|
|
248
|
+
## Privacy & Data Sources
|
|
249
|
+
|
|
250
|
+
- **Local logs:** Claude Code, Codex, Grok CLI, and Muse Code numbers are read from log files on your machine. Their contents are never uploaded.
|
|
251
|
+
- **Claude Desktop:** Without the Claude Code CLI or a status line, keep Claude Desktop open and `usage` reads its local plan-usage history. No cookies, login tokens, or API calls are needed. Reset times appear only when its local cache confirms them; they are never estimated.
|
|
252
|
+
- **Antigravity**, only if you use it, needs network access: quota is fetched from Google's official quota endpoint with the OAuth credential the Antigravity CLI already stored after sign-in — read from macOS Keychain, Windows Credential Manager, or a local token file depending on CLI version. `usage` never writes that credential back and keeps any refreshed access token in memory only; the call itself reads quota metadata.
|
|
253
|
+
- **Other background network activity:** Public Claude and Codex status pages to flag outages, a public model-pricing table to estimate cost (built-in prices are used offline), and an occasional GitHub check for a new version.
|
|
254
|
+
- **Beginner Mode**, only if you turn it on, sends Claude Code's latest answer to Claude Haiku through your own Claude Code sign-in to pick terms. Your term list stays in `~/.usage/glossary.json`.
|
|
255
|
+
|
|
256
|
+
<details>
|
|
257
|
+
<summary>How Claude Desktop quota is read</summary>
|
|
258
|
+
|
|
259
|
+
When Claude Code quota files are unavailable, `usage` reads Claude Desktop's local `plan-usage-history.json`, including Microsoft Store installations on Windows. When a recent response in its local Chromium block-file HTTP cache matches the organization, `usage` also reads the exact session and weekly reset times. Newer cached observations take precedence over throttled history samples; older cache must match the percentages. Missing, unsupported, expired, or inconsistent cache data leaves the countdown unknown.
|
|
260
|
+
|
|
261
|
+
Desktop samples normally update every 5–15 minutes. The panel shows the observation age, marks it stale after 30 minutes, and stops displaying it after two hours. The most recent organization sample is used; custom desktop profiles are not discovered. These quota caches contain no per-project token counts. Desktop sessions that also write compatible Claude Code logs under `~/.claude/projects/` are counted by the existing project/token reports.
|
|
262
|
+
|
|
263
|
+
</details>
|
|
264
|
+
|
|
265
|
+
### Code signing policy
|
|
266
|
+
|
|
267
|
+
Free code signing provided by [SignPath.io](https://about.signpath.io/), certificate by [SignPath Foundation](https://signpath.org/).
|
|
268
|
+
|
|
269
|
+
Team roles:
|
|
270
|
+
|
|
271
|
+
- Committers and reviewers: [aqua5230](https://github.com/aqua5230)
|
|
272
|
+
- Approvers: [aqua5230](https://github.com/aqua5230)
|
|
273
|
+
|
|
274
|
+
Privacy policy: this program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it. See [Privacy & Data Sources](#privacy--data-sources) for the network calls `usage` makes on your behalf and how to avoid them.
|
|
275
|
+
|
|
257
276
|
## Development
|
|
258
277
|
|
|
259
278
|
Building from source, configuring custom agents, or running the terminal TUI? See the **[development docs](docs/DEVELOPMENT.md)**.
|
|
@@ -59,7 +59,7 @@ CODEX_CONFIG = setup_hook.CODEX_CONFIG
|
|
|
59
59
|
# session. Off by default: enabled only via the menu toggle, never by self_heal.
|
|
60
60
|
RESUME_HOOK_TARGET = Path(os.path.expanduser("~/.claude/usage-session-resume.py"))
|
|
61
61
|
RESUME_PROMPT_SIDECAR = Path(os.path.expanduser("~/.claude/usage-resume-prompt.json"))
|
|
62
|
-
RESUME_HOOK_VERSION = "1.
|
|
62
|
+
RESUME_HOOK_VERSION = "1.11"
|
|
63
63
|
RESUME_MATCHER = "startup|clear|resume"
|
|
64
64
|
RESUME_LANGS = ("zh-TW", "zh-CN", "en", "ja", "ko")
|
|
65
65
|
_RESUME_MARKER = "usage-session-resume"
|
|
@@ -383,7 +383,7 @@ def test_fallback_pricing_contains_expected_models() -> None:
|
|
|
383
383
|
"input_cost_per_token": 2e-6,
|
|
384
384
|
"output_cost_per_token": 10e-6,
|
|
385
385
|
"cache_creation_input_token_cost": 2.5e-6,
|
|
386
|
-
"cache_read_input_token_cost": 0.
|
|
386
|
+
"cache_read_input_token_cost": 0.1e-6,
|
|
387
387
|
}
|
|
388
388
|
assert pricing._resolve_model_key("claude-sonnet-5", fallback) == "claude-sonnet-5"
|
|
389
389
|
assert fallback["claude-haiku-5-5"] == {
|
|
@@ -214,7 +214,10 @@ def test_project_from_encoded_path_matches_names_claude_flattens(tmp_path: Path,
|
|
|
214
214
|
def test_project_from_encoded_path_matches_truncated_long_path(tmp_path: Path) -> None:
|
|
215
215
|
# Claude Code keeps the first 200 encoded characters and appends "-<hash>".
|
|
216
216
|
projects_dir = tmp_path / "projects"
|
|
217
|
-
|
|
217
|
+
# Size the path below Windows' MAX_PATH limit while keeping it over 200.
|
|
218
|
+
prefix = "long-project-"
|
|
219
|
+
padding = 220 - len(_claude_encode(tmp_path / "work")) - len(prefix) - 1
|
|
220
|
+
name = prefix + "x" * padding
|
|
218
221
|
real_project = tmp_path / "work" / name
|
|
219
222
|
real_project.mkdir(parents=True)
|
|
220
223
|
encoded = _claude_encode(real_project)
|