diff --git a/Cargo.lock b/Cargo.lock index 47549fbe9..8c8a13213 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1496,7 +1496,6 @@ dependencies = [ "egui", "egui_inspection", "egui_kittest", - "image", "interprocess", "rmcp", "rmp-serde", diff --git a/crates/egui_kittest_mcp/Cargo.toml b/crates/egui_kittest_mcp/Cargo.toml index 003eef1af..346d9cb54 100644 --- a/crates/egui_kittest_mcp/Cargo.toml +++ b/crates/egui_kittest_mcp/Cargo.toml @@ -18,12 +18,11 @@ path = "src/main.rs" [dependencies] egui_kittest = { workspace = true, features = ["inspector_api", "wgpu", "snapshot"] } -egui_inspection = { workspace = true, features = ["protocol", "transport"] } +egui_inspection = { workspace = true, features = ["transport"] } egui.workspace = true interprocess = { version = "2.4", features = ["tokio"] } accesskit.workspace = true accesskit_consumer.workspace = true -image = { workspace = true, features = ["png"] } rmp-serde.workspace = true serde = { workspace = true, features = ["derive"] } serde_json = "1.0" diff --git a/crates/egui_kittest_mcp/src/tools.rs b/crates/egui_kittest_mcp/src/tools.rs index 76faea139..9ca801a72 100644 --- a/crates/egui_kittest_mcp/src/tools.rs +++ b/crates/egui_kittest_mcp/src/tools.rs @@ -453,7 +453,7 @@ impl Server { .env(egui_inspection::INSPECTION_SOCKET_ENV_VAR, &socket_target.name) .stdin(std::process::Stdio::null()) .stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::null()) + .stderr(std::process::Stdio::inherit()) .kill_on_drop(true); for (k, v) in &args.env { cmd.env(k, v); @@ -871,8 +871,7 @@ async fn screenshot_inner(bridge: &Bridge) -> anyhow::Result<(ScreenshotMeta, St height: shot.height, pixels_per_point: frame.pixels_per_point, }; - let png = encode_png(shot).context("encode PNG")?; - return Ok((meta, base64::engine::general_purpose::STANDARD.encode(png))); + return Ok((meta, base64::engine::general_purpose::STANDARD.encode(&shot.png))); } } @@ -899,7 +898,6 @@ async fn screenshot_inner(bridge: &Bridge) -> anyhow::Result<(ScreenshotMeta, St } }; let shot = frame.screenshot.as_ref().expect("checked above"); - let png = encode_png(shot).context("encode PNG")?; let meta = ScreenshotMeta { step: frame.step, width: shot.width, @@ -908,18 +906,10 @@ async fn screenshot_inner(bridge: &Bridge) -> anyhow::Result<(ScreenshotMeta, St }; Ok(( meta, - base64::engine::general_purpose::STANDARD.encode(png), + base64::engine::general_purpose::STANDARD.encode(&shot.png), )) } -fn encode_png(shot: &egui_inspection::protocol::FrameScreenshot) -> anyhow::Result> { - let img = image::RgbaImage::from_raw(shot.width, shot.height, shot.rgba.clone()) - .ok_or_else(|| anyhow!("frame rgba length mismatch"))?; - let mut out = std::io::Cursor::new(Vec::new()); - img.write_to(&mut out, image::ImageFormat::Png)?; - Ok(out.into_inner()) -} - fn parse_pointer_button(name: &str) -> anyhow::Result { match name.to_ascii_lowercase().as_str() { "primary" | "left" => Ok(egui::PointerButton::Primary),