aiuse 3.2.3__tar.gz → 3.2.4__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 (96) hide show
  1. {aiuse-3.2.3/src/aiuse.egg-info → aiuse-3.2.4}/PKG-INFO +1 -1
  2. {aiuse-3.2.3 → aiuse-3.2.4}/pyproject.toml +1 -1
  3. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/__init__.py +1 -1
  4. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/report.py +21 -5
  5. {aiuse-3.2.3 → aiuse-3.2.4/src/aiuse.egg-info}/PKG-INFO +1 -1
  6. {aiuse-3.2.3 → aiuse-3.2.4}/LICENSE +0 -0
  7. {aiuse-3.2.3 → aiuse-3.2.4}/README.md +0 -0
  8. {aiuse-3.2.3 → aiuse-3.2.4}/setup.cfg +0 -0
  9. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/__main__.py +0 -0
  10. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/agent_notes.py +0 -0
  11. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/ai_stub.py +0 -0
  12. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/__init__.py +0 -0
  13. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/history.py +0 -0
  14. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/local_runtimes.py +0 -0
  15. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/pace.py +0 -0
  16. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/selfdescribe.py +0 -0
  17. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/suggest.py +0 -0
  18. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/analysis/use_or_lose.py +0 -0
  19. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/attribute.py +0 -0
  20. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/chat_format.py +0 -0
  21. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/cli.py +0 -0
  22. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/__init__.py +0 -0
  23. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/bailian.py +0 -0
  24. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/base.py +0 -0
  25. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/caut.py +0 -0
  26. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/clinepass.py +0 -0
  27. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/codexbar.py +0 -0
  28. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/cswap.py +0 -0
  29. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/grok.py +0 -0
  30. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/hermes.py +0 -0
  31. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/muse.py +0 -0
  32. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/opencode_go.py +0 -0
  33. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/opencode_zen.py +0 -0
  34. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/openrouter.py +0 -0
  35. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/openusage.py +0 -0
  36. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/openusage_sh.py +0 -0
  37. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/qwencloud.py +0 -0
  38. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/runner.py +0 -0
  39. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/collectors/tokscale.py +0 -0
  40. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/config.py +0 -0
  41. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/credentials.py +0 -0
  42. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/ledger.py +0 -0
  43. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/macos_trust.py +0 -0
  44. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/models.py +0 -0
  45. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/sampler.py +0 -0
  46. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/secretspec.py +0 -0
  47. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/serve.py +0 -0
  48. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/tty.py +0 -0
  49. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/tui/__init__.py +0 -0
  50. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/tui/app.py +0 -0
  51. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/tui/builders.py +0 -0
  52. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse/watch.py +0 -0
  53. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse.egg-info/SOURCES.txt +0 -0
  54. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse.egg-info/dependency_links.txt +0 -0
  55. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse.egg-info/entry_points.txt +0 -0
  56. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse.egg-info/requires.txt +0 -0
  57. {aiuse-3.2.3 → aiuse-3.2.4}/src/aiuse.egg-info/top_level.txt +0 -0
  58. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_attribution.py +0 -0
  59. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_bailian.py +0 -0
  60. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_base_run_json.py +0 -0
  61. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_caut_parse.py +0 -0
  62. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_chat_format.py +0 -0
  63. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_cli.py +0 -0
  64. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_clinepass.py +0 -0
  65. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_codexbar_parse.py +0 -0
  66. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_config.py +0 -0
  67. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_credentials.py +0 -0
  68. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_cswap_parse.py +0 -0
  69. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_grok.py +0 -0
  70. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_hermes_parse.py +0 -0
  71. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_history.py +0 -0
  72. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_install_deps.py +0 -0
  73. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_local_runtimes.py +0 -0
  74. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_macos_trust.py +0 -0
  75. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_models_cli_binary.py +0 -0
  76. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_models_pace.py +0 -0
  77. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_muse.py +0 -0
  78. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_opencode_go.py +0 -0
  79. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_opencode_zen.py +0 -0
  80. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_openrouter.py +0 -0
  81. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_openusage_parse.py +0 -0
  82. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_pace.py +0 -0
  83. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_qwencloud.py +0 -0
  84. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_release_script.py +0 -0
  85. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_report.py +0 -0
  86. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_runner_consolidation.py +0 -0
  87. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_selfdescribe.py +0 -0
  88. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_serve.py +0 -0
  89. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_shared_quota_semantics.py +0 -0
  90. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_snapshots_persistence.py +0 -0
  91. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_suggest.py +0 -0
  92. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_tokscale_parse.py +0 -0
  93. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_tty.py +0 -0
  94. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_tui.py +0 -0
  95. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_use_or_lose.py +0 -0
  96. {aiuse-3.2.3 → aiuse-3.2.4}/tests/test_watch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiuse
3
- Version: 3.2.3
3
+ Version: 3.2.4
4
4
  Summary: Aggregate AI subscription/API usage and flag use-it-or-lose-it allotments
5
5
  Author: djbclark
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aiuse"
7
- version = "3.2.3"
7
+ version = "3.2.4"
8
8
  description = "Aggregate AI subscription/API usage and flag use-it-or-lose-it allotments"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  """Aggregate provider quotas and flag use-it-or-lose-it allotments."""
2
2
 
3
- __version__ = "3.2.3"
3
+ __version__ = "3.2.4"
@@ -1517,11 +1517,27 @@ def render_clock_matrix(
1517
1517
  estimated=cell.reset_estimated,
1518
1518
  compact=layout.compact_deadline,
1519
1519
  )
1520
- colored = (
1521
- s.dim(f"{percent:>{w_pct}}")
1522
- if cell.inferred
1523
- else _cell_color(s, cell.used_percent)(f"{percent:>{w_pct}}")
1524
- )
1520
+ # Split percent into used part (before "/") and left part (after "/" but before "l")
1521
+ # Format: "44u/56l" or "44u/56l+" if folded
1522
+ # Keep used part and slash in normal text, color only the left part
1523
+ if "/" in percent:
1524
+ used_part, rest = percent.split("/", 1)
1525
+ # rest is like "56l" or "56l+"
1526
+ left_part = rest.rstrip("l+")
1527
+ mark = "+" if "+" in rest else ""
1528
+ if cell.inferred:
1529
+ colored_used = s.dim(used_part)
1530
+ colored_left = s.dim(left_part)
1531
+ else:
1532
+ colored_used = used_part # Normal text for used part
1533
+ colored_left = _cell_color(s, cell.used_percent)(left_part)
1534
+ colored = f"{colored_used}/{colored_left}l{mark}"
1535
+ else:
1536
+ colored = (
1537
+ s.dim(f"{percent:>{w_pct}}")
1538
+ if cell.inferred
1539
+ else _cell_color(s, cell.used_percent)(f"{percent:>{w_pct}}")
1540
+ )
1525
1541
  if span is None:
1526
1542
  tail.append(colored + (" " * (w_clock - w_pct)))
1527
1543
  continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiuse
3
- Version: 3.2.3
3
+ Version: 3.2.4
4
4
  Summary: Aggregate AI subscription/API usage and flag use-it-or-lose-it allotments
5
5
  Author: djbclark
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes