usage-cli 0.33.8__tar.gz → 0.33.9__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.
Files changed (273) hide show
  1. {usage_cli-0.33.8/usage_cli.egg-info → usage_cli-0.33.9}/PKG-INFO +1 -1
  2. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/reporter.py +11 -2
  3. {usage_cli-0.33.8 → usage_cli-0.33.9}/i18n.json +177 -122
  4. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/session_hooks.py +1 -1
  5. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/agy_quota_probe.py +54 -8
  6. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/agy.py +9 -1
  7. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/prefs.py +1 -1
  8. {usage_cli-0.33.8 → usage_cli-0.33.9}/pyproject.toml +1 -1
  9. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_agy_quota_probe.py +124 -0
  10. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_dispatch_ledger.py +8 -2
  11. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_grok_loader.py +10 -0
  12. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_html_report_snapshot.py +8 -7
  13. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar_agy.py +66 -0
  14. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar_prefs.py +4 -1
  15. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_panel_footer_layout.py +17 -2
  16. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_quota_aware.py +121 -1
  17. usage_cli-0.33.9/tests/test_report_cold_read.py +224 -0
  18. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_report_daily_chart.py +4 -4
  19. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_report_filter_js.py +24 -8
  20. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_reporter_build_data.py +7 -1
  21. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_statusline_agy.py +13 -0
  22. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/html_report.py +58 -22
  23. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/report_daily_chart.py +11 -9
  24. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/report_filter.py +25 -10
  25. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/report_ledger.py +16 -3
  26. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/report_styles.py +43 -37
  27. {usage_cli-0.33.8 → usage_cli-0.33.9/usage_cli.egg-info}/PKG-INFO +1 -1
  28. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_cli.egg-info/SOURCES.txt +1 -0
  29. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/pricing.py +5 -0
  30. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_quota_aware.py +50 -11
  31. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_statusline_agy.py +3 -0
  32. {usage_cli-0.33.8 → usage_cli-0.33.9}/LICENSE +0 -0
  33. {usage_cli-0.33.8 → usage_cli-0.33.9}/README.md +0 -0
  34. {usage_cli-0.33.8 → usage_cli-0.33.9}/THIRD_PARTY_NOTICES.md +0 -0
  35. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/__init__.py +0 -0
  36. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/agy.py +0 -0
  37. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/claude.py +0 -0
  38. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/codex.py +0 -0
  39. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/grok.py +0 -0
  40. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/muse.py +0 -0
  41. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/rate_limits.py +0 -0
  42. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/registry.py +0 -0
  43. {usage_cli-0.33.8 → usage_cli-0.33.9}/adapters/types.py +0 -0
  44. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/__init__.py +0 -0
  45. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/aggregator.py +0 -0
  46. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/blocks.py +0 -0
  47. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/diagnoser.py +0 -0
  48. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/diagnosis_snapshot.py +0 -0
  49. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/dispatch_ledger.py +0 -0
  50. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/history_persist.py +0 -0
  51. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/insights.py +0 -0
  52. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/ledger_backfill.py +0 -0
  53. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/persona_loader.py +0 -0
  54. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/subscription.py +0 -0
  55. {usage_cli-0.33.8 → usage_cli-0.33.9}/analyzer/usage_snapshot.py +0 -0
  56. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/__init__.py +0 -0
  57. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/claude_pane.py +0 -0
  58. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/codex_hook_trust.py +0 -0
  59. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/login_item.py +0 -0
  60. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/setup_hook.py +0 -0
  61. {usage_cli-0.33.8 → usage_cli-0.33.9}/installer/statusline_settings.py +0 -0
  62. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/__init__.py +0 -0
  63. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/_shared_cache_file.py +0 -0
  64. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/agy_disk_cache.py +0 -0
  65. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/agy_loader.py +0 -0
  66. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/cache_quarantine.py +0 -0
  67. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/chromium_cache.py +0 -0
  68. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/claude_desktop.py +0 -0
  69. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/claude_paths.py +0 -0
  70. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/claude_usage.py +0 -0
  71. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/codex_disk_cache.py +0 -0
  72. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/codex_events.py +0 -0
  73. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/codex_fork_replay.py +0 -0
  74. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/codex_loader.py +0 -0
  75. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/codex_paths.py +0 -0
  76. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/disk_cache_common.py +0 -0
  77. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/disk_cache_lifecycle.py +0 -0
  78. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/grok_loader.py +0 -0
  79. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/grok_quota_probe.py +0 -0
  80. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/history_disk_cache.py +0 -0
  81. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/history_loader.py +0 -0
  82. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/jsonl_limits.py +0 -0
  83. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/jsonl_utils.py +0 -0
  84. {usage_cli-0.33.8 → usage_cli-0.33.9}/loaders/muse_loader.py +0 -0
  85. {usage_cli-0.33.8 → usage_cli-0.33.9}/main.py +0 -0
  86. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/__init__.py +0 -0
  87. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/actions.py +0 -0
  88. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/app.py +0 -0
  89. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/chrome.py +0 -0
  90. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/fsevents_watch.py +0 -0
  91. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/grok.py +0 -0
  92. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/manual_refresh.py +0 -0
  93. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/menu.py +0 -0
  94. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/new_badge.py +0 -0
  95. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/notify.py +0 -0
  96. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/popover.py +0 -0
  97. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/refresh.py +0 -0
  98. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/state.py +0 -0
  99. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/title.py +0 -0
  100. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/update.py +0 -0
  101. {usage_cli-0.33.8 → usage_cli-0.33.9}/menubar/whats_new.py +0 -0
  102. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/__init__.py +0 -0
  103. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/base.py +0 -0
  104. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/catalog.py +0 -0
  105. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/dynamic_height.py +0 -0
  106. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/panel_scale.py +0 -0
  107. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/panel_window.py +0 -0
  108. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/panel_window_state.py +0 -0
  109. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/payload.py +0 -0
  110. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/web_panel.py +0 -0
  111. {usage_cli-0.33.8 → usage_cli-0.33.9}/panels/window_drag.py +0 -0
  112. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/__init__.py +0 -0
  113. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/agy_window_keeper.py +0 -0
  114. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/burn_rate.py +0 -0
  115. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/codex_window_keeper.py +0 -0
  116. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/keeper_outcome.py +0 -0
  117. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/notifications.py +0 -0
  118. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/quota_snapshot.py +0 -0
  119. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/status_payload.py +0 -0
  120. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/usage_rate.py +0 -0
  121. {usage_cli-0.33.8 → usage_cli-0.33.9}/quota/window_keeper.py +0 -0
  122. {usage_cli-0.33.8 → usage_cli-0.33.9}/setup.cfg +0 -0
  123. {usage_cli-0.33.8 → usage_cli-0.33.9}/setup_app.py +0 -0
  124. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_adapters_claude.py +0 -0
  125. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_adapters_codex.py +0 -0
  126. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_adapters_rate_limits.py +0 -0
  127. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_aggregator.py +0 -0
  128. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_agy_adapter.py +0 -0
  129. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_agy_disk_cache.py +0 -0
  130. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_agy_loader.py +0 -0
  131. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_agy_window_keeper.py +0 -0
  132. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_analyzer_blocks.py +0 -0
  133. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_analyzer_pipeline.py +0 -0
  134. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_app_version.py +0 -0
  135. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_burn_rate.py +0 -0
  136. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_cache_quarantine.py +0 -0
  137. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_check_upstream.py +0 -0
  138. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_chromium_cache.py +0 -0
  139. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_claude_desktop.py +0 -0
  140. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_claude_pane.py +0 -0
  141. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_claude_paths.py +0 -0
  142. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_codex_consistency.py +0 -0
  143. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_codex_hook_trust.py +0 -0
  144. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_codex_loader.py +0 -0
  145. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_codex_window_keeper.py +0 -0
  146. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_desktop_fresh_cache.py +0 -0
  147. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_desktop_quota_display.py +0 -0
  148. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_desktop_quota_review.py +0 -0
  149. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_diagnoser.py +0 -0
  150. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_disk_cache_shards.py +0 -0
  151. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_doctor.py +0 -0
  152. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_dynamic_height.py +0 -0
  153. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_fsevents_watch.py +0 -0
  154. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_grok_quota_probe.py +0 -0
  155. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_history_loader.py +0 -0
  156. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_history_persist.py +0 -0
  157. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_hook_scripts_are_standalone.py +0 -0
  158. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_i18n_format_fallback.py +0 -0
  159. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_i18n_key_parity.py +0 -0
  160. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_i18n_packaged_path.py +0 -0
  161. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_insights.py +0 -0
  162. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_jsonl_utils.py +0 -0
  163. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_keeper_menu.py +0 -0
  164. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_keeper_outcome.py +0 -0
  165. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_ledger_backfill.py +0 -0
  166. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_login_item.py +0 -0
  167. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_main.py +0 -0
  168. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_manual_refresh.py +0 -0
  169. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar.py +0 -0
  170. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar_grok.py +0 -0
  171. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar_notify.py +0 -0
  172. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar_state.py +0 -0
  173. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_menubar_update.py +0 -0
  174. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_muse_loader.py +0 -0
  175. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_new_badge.py +0 -0
  176. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_packaged_resources.py +0 -0
  177. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_packaging.py +0 -0
  178. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_panel_scale.py +0 -0
  179. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_panel_window_state.py +0 -0
  180. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_panels.py +0 -0
  181. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_panels_lazy_import.py +0 -0
  182. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_persona_loader.py +0 -0
  183. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_pricing.py +0 -0
  184. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_project_resolver.py +0 -0
  185. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_quota_label.py +0 -0
  186. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_report_share_mask.py +0 -0
  187. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_service_status.py +0 -0
  188. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_session_resume.py +0 -0
  189. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_setup_app.py +0 -0
  190. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_setup_hook.py +0 -0
  191. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_setup_hook_coexistence.py +0 -0
  192. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_setup_hook_resume.py +0 -0
  193. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_setup_hook_terse.py +0 -0
  194. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_subprocess_utils.py +0 -0
  195. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_subscription.py +0 -0
  196. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_taskbar_menu.py +0 -0
  197. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_time_utils.py +0 -0
  198. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_tui.py +0 -0
  199. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_tui_sprite.py +0 -0
  200. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_ui_tables.py +0 -0
  201. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_update_checker.py +0 -0
  202. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_update_gate.py +0 -0
  203. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_update_release_notes.py +0 -0
  204. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_cli.py +0 -0
  205. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_client.py +0 -0
  206. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_diagnosis_snapshot.py +0 -0
  207. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_dir_sweeper.py +0 -0
  208. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_lang.py +0 -0
  209. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_logging.py +0 -0
  210. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_notifications.py +0 -0
  211. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_rate.py +0 -0
  212. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_snapshot.py +0 -0
  213. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_snapshot_replay.py +0 -0
  214. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_statusline.py +0 -0
  215. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_statusline_forwarder.py +0 -0
  216. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_statusline_grok.py +0 -0
  217. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_terse_mode.py +0 -0
  218. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_usage_terse_reminder.py +0 -0
  219. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_web_panel_payload.py +0 -0
  220. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_whats_new.py +0 -0
  221. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_wheel_packaging.py +0 -0
  222. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_win_login_item.py +0 -0
  223. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_window_keeper.py +0 -0
  224. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_windows_manifest.py +0 -0
  225. {usage_cli-0.33.8 → usage_cli-0.33.9}/tests/test_wintray.py +0 -0
  226. {usage_cli-0.33.8 → usage_cli-0.33.9}/tui/__init__.py +0 -0
  227. {usage_cli-0.33.8 → usage_cli-0.33.9}/tui/app.py +0 -0
  228. {usage_cli-0.33.8 → usage_cli-0.33.9}/tui/sprite.py +0 -0
  229. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/__init__.py +0 -0
  230. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/report_charts.py +0 -0
  231. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/report_scripts.py +0 -0
  232. {usage_cli-0.33.8 → usage_cli-0.33.9}/ui/tables.py +0 -0
  233. {usage_cli-0.33.8 → usage_cli-0.33.9}/updates/__init__.py +0 -0
  234. {usage_cli-0.33.8 → usage_cli-0.33.9}/updates/checker.py +0 -0
  235. {usage_cli-0.33.8 → usage_cli-0.33.9}/updates/gate.py +0 -0
  236. {usage_cli-0.33.8 → usage_cli-0.33.9}/updates/release_notes.py +0 -0
  237. {usage_cli-0.33.8 → usage_cli-0.33.9}/updates/whats_new.py +0 -0
  238. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_app/__init__.py +0 -0
  239. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_app/cli.py +0 -0
  240. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_app/doctor.py +0 -0
  241. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_cli.egg-info/dependency_links.txt +0 -0
  242. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_cli.egg-info/entry_points.txt +0 -0
  243. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_cli.egg-info/requires.txt +0 -0
  244. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_cli.egg-info/top_level.txt +0 -0
  245. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/__init__.py +0 -0
  246. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/app_version.py +0 -0
  247. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/i18n.py +0 -0
  248. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/prefs.py +0 -0
  249. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/project_resolver.py +0 -0
  250. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/service_status.py +0 -0
  251. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/subprocess_utils.py +0 -0
  252. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/time_utils.py +0 -0
  253. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/usage_dir_sweeper.py +0 -0
  254. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/usage_lang.py +0 -0
  255. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_common/usage_logging.py +0 -0
  256. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/__init__.py +0 -0
  257. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_session_resume.py +0 -0
  258. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_statusline.py +0 -0
  259. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_statusline_forwarder.py +0 -0
  260. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_statusline_grok.py +0 -0
  261. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_terse_mode.py +0 -0
  262. {usage_cli-0.33.8 → usage_cli-0.33.9}/usage_hooks/usage_terse_reminder.py +0 -0
  263. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/__init__.py +0 -0
  264. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/app.py +0 -0
  265. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/login_item.py +0 -0
  266. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/menu.py +0 -0
  267. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/prefs.py +0 -0
  268. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/quota_label.py +0 -0
  269. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/taskbar_menu.py +0 -0
  270. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/taskbar_obstacles.py +0 -0
  271. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/taskbar_overlay.py +0 -0
  272. {usage_cli-0.33.8 → usage_cli-0.33.9}/wintray/watch.py +0 -0
  273. {usage_cli-0.33.8 → usage_cli-0.33.9}/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.8
3
+ Version: 0.33.9
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
@@ -43,7 +43,7 @@ _YEAR_WEEKS = 53
43
43
  YEAR_CACHE_PATH = Path(os.path.expanduser("~/.usage/year_cache.json"))
44
44
  YEAR_LEDGER_PATH = YEAR_CACHE_PATH.with_name("year_ledger.json")
45
45
  YEAR_CACHE_TTL_SECONDS = 6 * 3600
46
- _YEAR_CACHE_SCHEMA = 5
46
+ _YEAR_CACHE_SCHEMA = 6
47
47
  _YEAR_LEDGER_SCHEMA = 1
48
48
  _YEAR_LEDGER_TRIM_BUFFER_DAYS = 60
49
49
 
@@ -200,6 +200,7 @@ class ContributionReportData(TypedDict):
200
200
 
201
201
 
202
202
  class WrappedReportData(TypedDict):
203
+ cost_recorded_from: NotRequired[str | None]
203
204
  year_label: str
204
205
  weeks: int
205
206
  total_tokens: int
@@ -765,8 +766,16 @@ def _build_year_output_from_ledger(
765
766
  "busiest_day": busiest_day,
766
767
  }
767
768
  wrapped: WrappedReportData = {
769
+ "cost_recorded_from": min(
770
+ (
771
+ key
772
+ for key, day in ledger["days"].items()
773
+ if grid_start <= date.fromisoformat(key) <= today and day["cost"] > 0
774
+ ),
775
+ default=None,
776
+ ),
768
777
  "year_label": str(today.year),
769
- "weeks": _YEAR_WEEKS,
778
+ "weeks": len(weeks),
770
779
  "total_tokens": total_tokens,
771
780
  "total_cost": _round_cost(total_cost),
772
781
  "active_days": active_days,