From c001d0b2437df4288ad4e565a96c0c6877972584 Mon Sep 17 00:00:00 2001 From: dhruvgupta-oai Date: Mon, 23 Mar 2026 16:27:14 -0400 Subject: [PATCH] Use PTY handshake to gate resume NUX interrupt tests --- .../tui/tests/suite/model_availability_nux.rs | 21 ++++++++----------- .../tests/suite/model_availability_nux.rs | 21 ++++++++----------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/codex-rs/tui/tests/suite/model_availability_nux.rs b/codex-rs/tui/tests/suite/model_availability_nux.rs index 86c203fe16..f1bee31606 100644 --- a/codex-rs/tui/tests/suite/model_availability_nux.rs +++ b/codex-rs/tui/tests/suite/model_availability_nux.rs @@ -140,27 +140,24 @@ trust_level = "trusted" let writer_tx = session.writer_sender(); let interrupt_writer = writer_tx.clone(); let mut startup_ready = false; + let mut answered_cursor_query = false; let exit_code_result = timeout(Duration::from_secs(15), async { loop { select! { result = output_rx.recv() => match result { Ok(chunk) => { - if chunk.windows(4).any(|window| window == b"\x1b[6n") { + let has_cursor_query = chunk.windows(4).any(|window| window == b"\x1b[6n"); + if has_cursor_query { let _ = writer_tx.send(b"\x1b[1;1R".to_vec()).await; + answered_cursor_query = true; } output.extend_from_slice(&chunk); - if !startup_ready { - let output_text = String::from_utf8_lossy(&output); - if output_text.contains("OpenAI Codex") - || output_text.contains("model:") - || output_text.contains("directory:") - { - startup_ready = true; - for _ in 0..4 { - let _ = interrupt_writer.send(vec![3]).await; - sleep(Duration::from_millis(500)).await; - } + if !startup_ready && answered_cursor_query && !has_cursor_query { + startup_ready = true; + for _ in 0..4 { + let _ = interrupt_writer.send(vec![3]).await; + sleep(Duration::from_millis(500)).await; } } } diff --git a/codex-rs/tui_app_server/tests/suite/model_availability_nux.rs b/codex-rs/tui_app_server/tests/suite/model_availability_nux.rs index 86c203fe16..f1bee31606 100644 --- a/codex-rs/tui_app_server/tests/suite/model_availability_nux.rs +++ b/codex-rs/tui_app_server/tests/suite/model_availability_nux.rs @@ -140,27 +140,24 @@ trust_level = "trusted" let writer_tx = session.writer_sender(); let interrupt_writer = writer_tx.clone(); let mut startup_ready = false; + let mut answered_cursor_query = false; let exit_code_result = timeout(Duration::from_secs(15), async { loop { select! { result = output_rx.recv() => match result { Ok(chunk) => { - if chunk.windows(4).any(|window| window == b"\x1b[6n") { + let has_cursor_query = chunk.windows(4).any(|window| window == b"\x1b[6n"); + if has_cursor_query { let _ = writer_tx.send(b"\x1b[1;1R".to_vec()).await; + answered_cursor_query = true; } output.extend_from_slice(&chunk); - if !startup_ready { - let output_text = String::from_utf8_lossy(&output); - if output_text.contains("OpenAI Codex") - || output_text.contains("model:") - || output_text.contains("directory:") - { - startup_ready = true; - for _ in 0..4 { - let _ = interrupt_writer.send(vec![3]).await; - sleep(Duration::from_millis(500)).await; - } + if !startup_ready && answered_cursor_query && !has_cursor_query { + startup_ready = true; + for _ in 0..4 { + let _ = interrupt_writer.send(vec![3]).await; + sleep(Duration::from_millis(500)).await; } } }