feat: clarify request lifecycle status

This commit is contained in:
2026-07-10 07:20:56 +08:00
parent e4b7fc679e
commit ccecee2a44
5 changed files with 149 additions and 31 deletions
+42 -1
View File
@@ -1,5 +1,6 @@
from __future__ import annotations
import datetime as dt
import importlib.util
import json
import os
@@ -129,6 +130,45 @@ class CodexRetryGatewayTUITests(unittest.TestCase):
}
self.assertEqual(mod.request_usage_summary(row), "in 75 | out 40 | cached 25 (25%)")
def test_request_status_labels_follow_lifecycle_and_age(self) -> None:
mod = load_module()
now = dt.datetime(2026, 7, 10, 12, 0, tzinfo=dt.timezone.utc)
waiting = {
"lifecycle_state": "sent",
"started_at": "2026-07-10T11:59:50Z",
}
streaming = {
"lifecycle_state": "receive_first",
"started_at": "2026-07-10T11:59:00Z",
"first_response_at": "2026-07-10T11:59:55Z",
"last_activity_at": "2026-07-10T11:59:55Z",
}
complete = {"lifecycle_state": "finish", "status_code": 200}
discarded = {
"lifecycle_state": "finish",
"status_code": 502,
"error": "client disconnected before reasoning retry completed",
}
slow_waiting = {
"lifecycle_state": "sent",
"started_at": "2026-07-10T11:59:30Z",
}
stalled = {
"lifecycle_state": "streaming",
"first_response_at": "2026-07-10T11:57:50Z",
"last_activity_at": "2026-07-10T11:57:50Z",
}
self.assertEqual(mod.request_status_label(waiting, now), "waiting")
self.assertEqual(mod.request_status_label(streaming, now), "streaming")
self.assertEqual(mod.request_status_label(complete, now), "HTTP 200")
self.assertEqual(mod.request_status_label(discarded, now), "discarded")
self.assertEqual(mod.request_status_label(slow_waiting, now), "waiting 30.0s")
self.assertEqual(mod.request_status_label(stalled, now), "stalled 130s")
self.assertNotEqual(mod.request_status_style(waiting, now), mod.request_status_style(streaming, now))
self.assertEqual(mod.request_status_style(discarded, now), "bold #ff5f5f")
self.assertEqual(mod.request_status_style(stalled, now), "bold #ff5f5f")
def test_request_row_cells_expand_with_wider_limits(self) -> None:
mod = load_module()
row = {
@@ -316,7 +356,8 @@ class CodexRetryGatewayTUITests(unittest.TestCase):
self.assertEqual(visible[1].plain, "req_1")
self.assertEqual(visible[2].plain, "resp_1")
self.assertEqual(visible[3].plain, "thread_same")
self.assertEqual(visible[4], "· 200")
self.assertIsInstance(visible[4], Text)
self.assertEqual(visible[4].plain, "HTTP 200")
self.assertEqual(mod.request_thread_color("thread_same"), mod.request_thread_color("thread_same"))
self.assertIsNone(mod.request_thread_color(""))