fix(rpc): preserve fast state in Python client

This commit is contained in:
Frederico Luz
2026-07-29 20:17:09 +01:00
parent 07f0ba8a42
commit ecbf759ec2
3 changed files with 56 additions and 0 deletions
+6
View File
@@ -84,6 +84,9 @@ FAKE_SERVER = textwrap.dedent(
"interruptMode": interrupt_mode,
"sessionId": "fake-session",
"sessionName": session_name,
"fastModeEnabled": False,
"fastModeActive": True,
"tokensPerSecond": 7.25,
"autoCompactionEnabled": auto_compaction_enabled,
"messageCount": len(messages),
"queuedMessageCount": 0,
@@ -877,6 +880,9 @@ class RpcClientTests(unittest.TestCase):
self.assertEqual(
state.model.id if state.model else None, "claude-sonnet-4-5"
)
self.assertFalse(state.fast_mode_enabled)
self.assertTrue(state.fast_mode_active)
self.assertEqual(state.tokens_per_second, 7.25)
result = client.bash("echo hello")
self.assertEqual(result.output, "hello\n")
+35
View File
@@ -51,6 +51,9 @@ class ProtocolParsingTests(unittest.TestCase):
"sessionFile": "/tmp/test.jsonl",
"sessionId": "session-123",
"sessionName": "Scratchpad",
"fastModeEnabled": False,
"fastModeActive": True,
"tokensPerSecond": 12.5,
"autoCompactionEnabled": True,
"messageCount": 4,
"queuedMessageCount": 1,
@@ -95,6 +98,38 @@ class ProtocolParsingTests(unittest.TestCase):
self.assertEqual(state.model.thinking.default_level, "medium")
self.assertEqual(state.model.thinking.effort_map, {"high": "xhigh"})
self.assertTrue(state.model.thinking.supports_display)
self.assertFalse(state.fast_mode_enabled)
self.assertTrue(state.fast_mode_active)
self.assertEqual(state.tokens_per_second, 12.5)
def test_parse_session_state_defaults_missing_fast_mode_and_throughput(
self,
) -> None:
missing = object()
for tokens_per_second, expected in (
(None, None),
(missing, None),
):
with self.subTest(tokens_per_second=tokens_per_second):
payload = {
"sessionId": "session-123",
"steeringMode": "one-at-a-time",
"followUpMode": "all",
"interruptMode": "immediate",
}
if tokens_per_second is not missing:
payload["tokensPerSecond"] = tokens_per_second
state = parse_session_state(payload)
self.assertEqual(
(
state.fast_mode_enabled,
state.fast_mode_active,
state.tokens_per_second,
),
(False, False, expected),
)
def test_parse_agent_end_notification(self) -> None:
notification = parse_notification(