1234use std::collections::HashMap;5use std::ffi::{OsStr, OsString};6use std::fmt::{self, Display};7use std::path::PathBuf;8use std::process::Stdio;9use std::sync::{Arc, OnceLock};1011use anyhow::{anyhow, bail, ensure, Context, Result};12use better_command::{ClonableHandler, Handler, NixHandler, NoopHandler};13use futures::StreamExt;14use itertools::Itertools;15use serde::de::DeserializeOwned;16use serde::{Deserialize, Serialize};17use tokio::io::AsyncWriteExt;18use tokio::process::{ChildStderr, ChildStdin, ChildStdout, Command};19use tokio::select;20use tokio::sync::{mpsc, oneshot, Mutex};21use tracing::{debug, error, warn, Level};22232425