Skip to content

Commit 63ea4c7

Browse files
committed
Add TURN column and bump version
1 parent 3a50bd1 commit 63ea4c7

3 files changed

Lines changed: 34 additions & 2 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "codexapi"
7-
version = "0.1.7"
7+
version = "0.1.8"
88
description = "Minimal Python API for running the Codex CLI."
99
readme = "README.md"
1010
requires-python = ">=3.8"

src/codexapi/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
"task",
1313
"task_result",
1414
]
15-
__version__ = "0.1.7"
15+
__version__ = "0.1.8"

src/codexapi/cli.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"tok": "TOK/S",
3737
"in": "IN",
3838
"out": "OUT",
39+
"turn": "TURN",
3940
"model": "MODEL",
4041
"effort": "EFF",
4142
"perm": "PERM",
@@ -309,6 +310,24 @@ def _format_token_total(value):
309310
return str(value)
310311

311312

313+
def _format_duration(seconds):
314+
if seconds is None:
315+
return "-"
316+
if seconds < 0:
317+
return "-"
318+
total = int(seconds)
319+
days, rem = divmod(total, 86400)
320+
hours, rem = divmod(rem, 3600)
321+
minutes, secs = divmod(rem, 60)
322+
if days:
323+
return f"{days}d{hours:02d}h"
324+
if hours:
325+
return f"{hours}h{minutes:02d}m"
326+
if minutes:
327+
return f"{minutes}m{secs:02d}s"
328+
return f"{secs}s"
329+
330+
312331
def _summarize_session(path, mtime):
313332
prompt = None
314333
prompt_fallback = None
@@ -569,13 +588,15 @@ def _layout_columns(width, id_width, show):
569588
("tok", ">"),
570589
("in", ">"),
571590
("out", ">"),
591+
("turn", ">"),
572592
]
573593
widths = {
574594
"id": id_width,
575595
"status": 4,
576596
"tok": 7,
577597
"in": 7,
578598
"out": 7,
599+
"turn": 7,
579600
}
580601
mins = {}
581602

@@ -638,6 +659,16 @@ def _format_session(session, layout):
638659
status = "RUN" if session.get("status") == "running" else "IDLE"
639660
tok_s = session["tok_s"]
640661
tok_s_str = "-" if tok_s is None else f"{tok_s:5.1f}"
662+
last_user_ts = session.get("last_user_ts")
663+
last_agent_ts = session.get("last_agent_ts")
664+
if status == "RUN":
665+
turn_seconds = (datetime.now() - last_user_ts).total_seconds() if last_user_ts else None
666+
else:
667+
if last_user_ts and last_agent_ts:
668+
turn_seconds = (last_agent_ts - last_user_ts).total_seconds()
669+
else:
670+
turn_seconds = None
671+
turn_str = _format_duration(turn_seconds)
641672
meta = session.get("meta") or {}
642673
model = meta.get("model") or meta.get("model_provider") or "-"
643674
effort = meta.get("effort") or "-"
@@ -655,6 +686,7 @@ def _format_session(session, layout):
655686
"tok": tok_s_str,
656687
"in": total_in,
657688
"out": total_out,
689+
"turn": turn_str,
658690
"model": _truncate_head(str(model), widths.get("model", 0)),
659691
"effort": _truncate_head(str(effort), widths.get("effort", 0)),
660692
"perm": _truncate_head(str(perm), widths.get("perm", 0)),

0 commit comments

Comments
 (0)