codex-statusline 0.2.2__tar.gz → 0.3.0__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 (30) hide show
  1. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/PKG-INFO +1 -1
  2. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/codex_statusline.egg-info/PKG-INFO +1 -1
  3. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/codex_statusline.egg-info/entry_points.txt +1 -0
  4. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/pyproject.toml +2 -1
  5. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/__init__.py +1 -1
  6. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/cli.py +1 -1
  7. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/launcher.py +2 -0
  8. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/render.py +2 -1
  9. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_update.py +2 -0
  10. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/LICENSE +0 -0
  11. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/README.md +0 -0
  12. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/codex_statusline.egg-info/SOURCES.txt +0 -0
  13. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/codex_statusline.egg-info/dependency_links.txt +0 -0
  14. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/codex_statusline.egg-info/top_level.txt +0 -0
  15. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/setup.cfg +0 -0
  16. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/__main__.py +0 -0
  17. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/configure.py +0 -0
  18. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/data.py +0 -0
  19. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/entry.py +0 -0
  20. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/hook.py +0 -0
  21. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/manage.py +0 -0
  22. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/src/update.py +0 -0
  23. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_auto_shells.py +0 -0
  24. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_configure.py +0 -0
  25. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_data.py +0 -0
  26. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_fish.py +0 -0
  27. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_management.py +0 -0
  28. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_render.py +0 -0
  29. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_startup.py +0 -0
  30. {codex_statusline-0.2.2 → codex_statusline-0.3.0}/tests/test_tmux.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-statusline
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Summary: A tmux statusline for OpenAI Codex CLI: context usage, 5h and weekly quota, and session tokens at a glance. Local-only.
5
5
  Author: Zimo Xu
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-statusline
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Summary: A tmux statusline for OpenAI Codex CLI: context usage, 5h and weekly quota, and session tokens at a glance. Local-only.
5
5
  Author: Zimo Xu
6
6
  License-Expression: MIT
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  codex-statusline = src.cli:main
3
+ cxbar = src.cli:main
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codex-statusline"
3
- version = "0.2.2"
3
+ version = "0.3.0"
4
4
  description = "A tmux statusline for OpenAI Codex CLI: context usage, 5h and weekly quota, and session tokens at a glance. Local-only."
5
5
  requires-python = ">=3.11"
6
6
  license = "MIT"
@@ -23,6 +23,7 @@ Changelog = "https://github.com/Moviw/codex-statusline/blob/main/CHANGELOG.md"
23
23
 
24
24
  [project.scripts]
25
25
  codex-statusline = "src.cli:main"
26
+ cxbar = "src.cli:main" # short alias
26
27
 
27
28
  [build-system]
28
29
  requires = ["setuptools>=77"]
@@ -1,3 +1,3 @@
1
1
  """A local-only tmux status area for the official Codex CLI."""
2
2
 
3
- __version__ = "0.2.2"
3
+ __version__ = "0.3.0"
@@ -25,7 +25,7 @@ def main():
25
25
  record()
26
26
  return 0
27
27
  parser = argparse.ArgumentParser(
28
- prog="codex-statusline",
28
+ prog="cxbar" if Path(sys.argv[0]).name == "cxbar" else "codex-statusline",
29
29
  description="A status bar for Codex CLI: context, 5h/weekly quota, and tokens. "
30
30
  "Run `codex` as usual once installed.",
31
31
  )
@@ -247,6 +247,7 @@ def launch(args):
247
247
  cfg = load_config()
248
248
  reader = LogReader()
249
249
  latest = {}
250
+ updater = "cxbar" if shutil.which("cxbar") else "codex-statusline"
250
251
  if cfg["update_check"]:
251
252
  from .update import newer_version
252
253
 
@@ -290,6 +291,7 @@ def launch(args):
290
291
  )
291
292
  state["quotas"] = merge_quotas(state["quotas"], others)
292
293
  state["update"] = latest.get("version")
294
+ state["updater"] = updater
293
295
  if time.monotonic() - branch_at > 3:
294
296
  last_branch, branch_at = branch(state["cwd"]), time.monotonic()
295
297
  state["branch"] = last_branch
@@ -278,7 +278,8 @@ def render(
278
278
  hint = None
279
279
  if isinstance(update, str) and re.fullmatch(r"\d+(\.\d+)*", update):
280
280
  arrow = "^" if ascii_only else "↑"
281
- hint = (f"{arrow} update available: codex-statusline update", f"{arrow} update", "warning")
281
+ tool = "cxbar" if state.get("updater") == "cxbar" else "codex-statusline"
282
+ hint = (f"{arrow} update available: {tool} update", f"{arrow} update", "warning")
282
283
  head, rest = parts[0], parts[1:]
283
284
  compact_head = (head[1], head[2])
284
285
  # Widest first: all detail, compact head, all compact, then drop segments.
@@ -43,6 +43,8 @@ class UpdateTests(unittest.TestCase):
43
43
  state = {"context_used": 10, "now": 1000, "update": "0.2.0", "quotas": {}}
44
44
  wide = render(state, 240, tmux=False)
45
45
  self.assertIn("↑ update available: codex-statusline update", wide)
46
+ short = render(dict(state, updater="cxbar"), 240, tmux=False)
47
+ self.assertIn("↑ update available: cxbar update", short)
46
48
  self.assertIn("^ update available", render(state, 240, tmux=False, ascii_only=True))
47
49
  self.assertNotIn("update", render(state, 40, tmux=False))
48
50
  self.assertNotIn("update", render(dict(state, update="#(evil)"), 240, tmux=False))