mirror of
https://github.com/openai/codex.git
synced 2026-05-16 01:02:48 +00:00
## Why On Windows, background terminals could stay visible after their shell process had already exited. The elevated runner waits for the PTY output reader to reach EOF before it sends the final exit message, but the ConPTY helper was reducing ownership down to raw handles too early. That left the pseudoconsole's borrowed pipe handles alive past teardown, so EOF never propagated and the session stayed `running`. ## What changed - change `utils/pty/src/win/conpty.rs` to hand off owned ConPTY resources instead of leaking only raw handles - make `windows-sandbox-rs/src/conpty/mod.rs` keep the pseudoconsole owner and the backing pipe handles together until teardown - update the elevated runner and the legacy unified-exec backend to keep that `ConptyInstance` alive, take only the specific pipe handles they need, and drop the owner at teardown instead of trying to close a detached pseudoconsole handle later ## Testing - desktop app in `Auto-review`: 11 x `cmd /c "ping -n 3 google.com"` all exited cleanly and did not accumulate in the UI - desktop app in `Auto-review`: 5 x `cmd /c "ping -n 30 google.com"` appeared in the UI and drained back out on their own
40 lines
1.6 KiB
Rust
40 lines
1.6 KiB
Rust
pub mod pipe;
|
|
mod process;
|
|
pub mod process_group;
|
|
pub mod pty;
|
|
#[cfg(test)]
|
|
mod tests;
|
|
#[cfg(windows)]
|
|
mod win;
|
|
|
|
pub const DEFAULT_OUTPUT_BYTES_CAP: usize = 1024 * 1024;
|
|
|
|
/// Spawn a non-interactive process using regular pipes for stdin/stdout/stderr.
|
|
pub use pipe::spawn_process as spawn_pipe_process;
|
|
/// Spawn a non-interactive process using regular pipes, but close stdin immediately.
|
|
pub use pipe::spawn_process_no_stdin as spawn_pipe_process_no_stdin;
|
|
/// Driver-backed process adapter used by integrations with their own process transport.
|
|
pub use process::ProcessDriver;
|
|
/// Handle for interacting with a spawned process (PTY or pipe).
|
|
pub use process::ProcessHandle;
|
|
/// Bundle of process handles plus split output and exit receivers returned by spawn helpers.
|
|
pub use process::SpawnedProcess;
|
|
/// Terminal size in character cells used for PTY spawn and resize operations.
|
|
pub use process::TerminalSize;
|
|
/// Combine stdout/stderr receivers into a single broadcast receiver.
|
|
pub use process::combine_output_receivers;
|
|
/// Adapt an externally-driven process into the standard spawned-process handle.
|
|
pub use process::spawn_from_driver;
|
|
/// Backwards-compatible alias for ProcessHandle.
|
|
pub type ExecCommandSession = ProcessHandle;
|
|
/// Backwards-compatible alias for SpawnedProcess.
|
|
pub type SpawnedPty = SpawnedProcess;
|
|
/// Report whether ConPTY is available on this platform (Windows only).
|
|
pub use pty::conpty_supported;
|
|
/// Spawn a process attached to a PTY for interactive use.
|
|
pub use pty::spawn_process as spawn_pty_process;
|
|
#[cfg(windows)]
|
|
pub use win::PsuedoCon;
|
|
#[cfg(windows)]
|
|
pub use win::conpty::RawConPty;
|