From 88a12b60a98f5d7980054cfef007fb79f8fc7be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B0=8F=E7=99=BD?= <364772080@qq.com> Date: Wed, 14 Aug 2024 22:01:16 +0800 Subject: [PATCH] windows: Fix supermaven (#16203) Closes #16194 This PR introduces the following changes: 1. Updated the download process to retrieve the `.exe` file, as the API response indicates that the `.exe` file should be downloaded on Windows. > API response: "https://supermaven-public.s3.amazonaws.com/sm-agent/26/windows/amd64/sm-agent.exe" 2. Modified the startup behavior of supermaven to prevent the cmd window from appearing. Release Notes: - N/A --- Cargo.lock | 1 + crates/supermaven/Cargo.toml | 3 +++ crates/supermaven/src/supermaven.rs | 15 +++++++++++---- crates/supermaven_api/src/supermaven_api.rs | 6 +++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d847d41cc..54b53889dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10509,6 +10509,7 @@ dependencies = [ "theme", "ui", "util", + "windows 0.58.0", ] [[package]] diff --git a/crates/supermaven/Cargo.toml b/crates/supermaven/Cargo.toml index af9d619a43..b8f85c0f05 100644 --- a/crates/supermaven/Cargo.toml +++ b/crates/supermaven/Cargo.toml @@ -31,6 +31,9 @@ text.workspace = true ui.workspace = true util.workspace = true +[target.'cfg(target_os = "windows")'.dependencies] +windows.workspace = true + [dev-dependencies] editor = { workspace = true, features = ["test-support"] } env_logger.workspace = true diff --git a/crates/supermaven/src/supermaven.rs b/crates/supermaven/src/supermaven.rs index e0ebb31cf6..c3bc96d9f8 100644 --- a/crates/supermaven/src/supermaven.rs +++ b/crates/supermaven/src/supermaven.rs @@ -260,14 +260,21 @@ impl SupermavenAgent { client: Arc, cx: &mut ModelContext, ) -> Result { - let mut process = Command::new(&binary_path) + let mut process = Command::new(&binary_path); + process .arg("stdio") .stdin(Stdio::piped()) .stdout(Stdio::piped()) .stderr(Stdio::piped()) - .kill_on_drop(true) - .spawn() - .context("failed to start the binary")?; + .kill_on_drop(true); + + #[cfg(target_os = "windows")] + { + use smol::process::windows::CommandExt; + process.creation_flags(windows::Win32::System::Threading::CREATE_NO_WINDOW.0); + } + + let mut process = process.spawn().context("failed to start the binary")?; let stdin = process .stdin diff --git a/crates/supermaven_api/src/supermaven_api.rs b/crates/supermaven_api/src/supermaven_api.rs index b341c2c23c..20c1214e36 100644 --- a/crates/supermaven_api/src/supermaven_api.rs +++ b/crates/supermaven_api/src/supermaven_api.rs @@ -212,7 +212,11 @@ pub async fn latest_release( } pub fn version_path(version: u64) -> PathBuf { - supermaven_dir().join(format!("sm-agent-{}", version)) + supermaven_dir().join(format!( + "sm-agent-{}{}", + version, + std::env::consts::EXE_SUFFIX + )) } pub async fn has_version(version_path: &Path) -> bool {