diff --git a/codex_retry_gateway_tui.py b/codex_retry_gateway_tui.py index 79150b8..a1d8905 100644 --- a/codex_retry_gateway_tui.py +++ b/codex_retry_gateway_tui.py @@ -257,16 +257,24 @@ def request_table_column_key(value: Any) -> str: return REQUEST_TABLE_COLUMN_TOKEN_MAP.get(token, "") +def request_table_column_keys(value: Any) -> list[str]: + token = request_table_column_token(value) + if token == "usage": + return ["in", "out", "cache"] + column_key = REQUEST_TABLE_COLUMN_TOKEN_MAP.get(token, "") + return [column_key] if column_key else [] + + def request_table_column_order(value: Any) -> list[str]: requested = value if isinstance(value, (list, tuple, set)) else [] columns = [] seen: set[str] = set() for item in requested: - column_key = request_table_column_key(item) - if not column_key or column_key in seen: - continue - columns.append(column_key) - seen.add(column_key) + for column_key in request_table_column_keys(item): + if not column_key or column_key in seen: + continue + columns.append(column_key) + seen.add(column_key) for column_key in REQUEST_TABLE_COLUMN_KEYS: if column_key not in seen: columns.append(column_key) @@ -279,11 +287,11 @@ def request_table_hidden_columns(value: Any, columns: list[str]) -> list[str]: hidden = [] seen: set[str] = set() for item in requested: - column_key = request_table_column_key(item) - if not column_key or column_key not in allowed or column_key in seen: - continue - hidden.append(column_key) - seen.add(column_key) + for column_key in request_table_column_keys(item): + if not column_key or column_key not in allowed or column_key in seen: + continue + hidden.append(column_key) + seen.add(column_key) return hidden @@ -300,11 +308,11 @@ def normalize_request_table_preferences(data: Any) -> dict[str, Any]: legacy_visible = [] seen: set[str] = set() for item in source.get("visible_columns") or []: - column_key = request_table_column_key(item) - if not column_key or column_key in seen: - continue - legacy_visible.append(column_key) - seen.add(column_key) + for column_key in request_table_column_keys(item): + if not column_key or column_key in seen: + continue + legacy_visible.append(column_key) + seen.add(column_key) columns = request_table_column_order(legacy_visible) hidden_columns = [column_key for column_key in columns if column_key not in seen] else: @@ -342,17 +350,18 @@ def request_table_preferences_from_text(text: str) -> dict[str, Any]: token = token[1:].strip() if not token: continue - column_key = request_table_column_key(token) - if not column_key: + column_keys = request_table_column_keys(token) + if not column_keys: if hidden: continue raise ValueError(f"line {line_number}: unknown request column {token!r}") - if column_key in seen: - continue - seen.add(column_key) - columns.append(column_key) - if hidden: - hidden_columns.append(column_key) + for column_key in column_keys: + if column_key in seen: + continue + seen.add(column_key) + columns.append(column_key) + if hidden: + hidden_columns.append(column_key) if not columns: raise ValueError("no request columns found in editor document") missing = [column_key for column_key in REQUEST_TABLE_COLUMN_KEYS if column_key not in seen] diff --git a/tests/test_payload.py b/tests/test_payload.py index 97cc40e..1ce1dae 100644 --- a/tests/test_payload.py +++ b/tests/test_payload.py @@ -298,6 +298,12 @@ class CodexRetryGatewayTUITests(unittest.TestCase): self.assertEqual(prefs["columns"][:6], ["thread", "seq", "cache", "in", "out", "req_id"]) self.assertIn("cache", prefs["hidden_columns"]) + def test_request_table_preferences_expand_legacy_usage_column(self) -> None: + mod = load_module() + prefs = mod.normalize_request_table_preferences({"visible_columns": ["seq", "usage", "status"]}) + self.assertEqual(prefs["columns"][:5], ["seq", "in", "out", "cache", "status"]) + self.assertEqual(prefs["hidden_columns"][:3], ["req_id", "resp_id", "thread"]) + def test_sort_request_rows_supports_custom_column_and_missing_values(self) -> None: mod = load_module() rows = [