rx-runner 0.1.0

Runtime-neutral process execution with bounded streaming output and cancellation
Documentation
# rx-runner

Runtime-neutral child-process execution for polling event loops. It captures stdout and stderr
as tagged lines, bounds retained output, reports terminal status, supports cancellation, and reaps
unfinished children on drop.

The crate uses only the Rust standard library and does not require Tokio or another async runtime.

```rust
use std::time::Duration;
use rx_runner::CommandSpec;

fn main() -> std::io::Result<()> {
    let mut process = CommandSpec::new("cargo")
        .args(["check", "--workspace"])
        .current_dir("/path/to/project")
        .spawn()?;

    loop {
        let update = process.poll()?;
        for line in update.lines {
            println!("{:?}: {}", line.stream, line.text);
        }
        if let Some(exit) = update.exit {
            println!("finished in {:?}: {}", exit.elapsed, exit.success);
            break;
        }
        std::thread::sleep(Duration::from_millis(50));
    }
    Ok(())
}
```