From 3c7c36191e5f6476aad40942315130d05fcd2a2f Mon Sep 17 00:00:00 2001 From: snowbark Date: Wed, 25 Mar 2026 11:25:20 -0700 Subject: [PATCH 1/2] chore: bump version to 0.32.84 --- Cargo.lock | 6 +++--- agentmuxsrv-rs/Cargo.toml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 4 ++-- wsh-rs/Cargo.toml | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6d476f4f..cd4b7ea40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "agentmux" -version = "0.32.82" +version = "0.32.84" dependencies = [ "chrono", "dirs 5.0.1", @@ -46,7 +46,7 @@ dependencies = [ [[package]] name = "agentmuxsrv-rs" -version = "0.32.82" +version = "0.32.84" dependencies = [ "async-stream", "axum", @@ -7174,7 +7174,7 @@ dependencies = [ [[package]] name = "wsh-rs" -version = "0.32.82" +version = "0.32.84" dependencies = [ "base64 0.22.1", "clap", diff --git a/agentmuxsrv-rs/Cargo.toml b/agentmuxsrv-rs/Cargo.toml index 1fdfe916f..53f853841 100644 --- a/agentmuxsrv-rs/Cargo.toml +++ b/agentmuxsrv-rs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "agentmuxsrv-rs" -version = "0.32.83" +version = "0.32.84" edition = "2021" description = "AgentMux Rust backend (drop-in replacement for Go agentmuxsrv)" diff --git a/package-lock.json b/package-lock.json index 75dec620f..c41c4f63b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "agentmux", - "version": "0.32.83", + "version": "0.32.84", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "agentmux", - "version": "0.32.83", + "version": "0.32.84", "license": "Apache-2.0", "workspaces": [ "docs" diff --git a/package.json b/package.json index abb501869..4ae715a55 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "productName": "AgentMux", "description": "Open-Source AI-Native Terminal Built for Seamless Workflows", "license": "Apache-2.0", - "version": "0.32.83", + "version": "0.32.84", "homepage": "https://github.com/agentmuxai/agentmux", "build": { "appId": "ai.agentmux.app" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index c5457ba39..e756eddb6 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "agentmux" -version = "0.32.83" +version = "0.32.84" description = "AgentMux - AI-Native Terminal" authors = ["AgentMux Corp"] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 432a525af..5d5c152ee 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,8 +1,8 @@ { "$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/crates/tauri-config-schema/schema.json", "productName": "AgentMux", - "version": "0.32.83", - "identifier": "ai.agentmux.app.v0-32-83", + "version": "0.32.84", + "identifier": "ai.agentmux.app.v0-32-84", "build": { "devUrl": "http://localhost:5173", "frontendDist": "../dist/frontend", diff --git a/wsh-rs/Cargo.toml b/wsh-rs/Cargo.toml index d322a9f9c..6e2fa6a3c 100644 --- a/wsh-rs/Cargo.toml +++ b/wsh-rs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wsh-rs" -version = "0.32.83" +version = "0.32.84" edition = "2021" description = "Shell integration CLI for AgentMux" From 3db34ecb29887d1e14cb4eea4d220c75b92f59a0 Mon Sep 17 00:00:00 2001 From: snowbark Date: Wed, 25 Mar 2026 17:27:33 -0700 Subject: [PATCH 2/2] fix(linux): apply GTK opacity + scope stale backend cleanup by data dir MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Opacity not working on Linux** set_window_transparency received opacity=0.75 but never applied it on Linux — the transparent+no-blur path fell through returning Ok(()) with no side effects. Fix: call gtk::Window::set_opacity() so the compositor composites the window at the correct transparency level. **Stale backend cleanup killing wrong instances** cleanup_stale_backends killed any agentmuxsrv-rs process whose --instance version differed from the current version, regardless of which app identifier owned it. This caused launching a dev build (task dev) to SIGKILL a running production AppImage's backend, making it go Offline. Fix: also parse --wavedata from the process cmdline and only kill backends whose wavedata path is under our own data_dir. Dev instances (.app.dev/...) and production instances (.app.vX-Y-Z/...) now have fully isolated cleanup. Co-Authored-By: Claude Sonnet 4.6 --- src-tauri/src/commands/window.rs | 25 ++++++++++++++--- src-tauri/src/sidecar.rs | 46 +++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src-tauri/src/commands/window.rs b/src-tauri/src/commands/window.rs index f5c8daada..298e8b220 100644 --- a/src-tauri/src/commands/window.rs +++ b/src-tauri/src/commands/window.rs @@ -317,10 +317,27 @@ pub fn set_window_transparency( } #[cfg(target_os = "linux")] - if blur { - // Linux blur is compositor-dependent; CSS backdrop-filter is the primary fallback. - // No reliable cross-compositor API exists. - tracing::info!("Linux blur requested — using CSS fallback (no native API)"); + { + if blur { + // Linux blur is compositor-dependent; CSS backdrop-filter is the primary fallback. + // No reliable cross-compositor API exists. + tracing::info!("Linux blur requested — using CSS fallback (no native API)"); + } + + // Apply window-level opacity via GTK so the compositor composites the window + // at the requested transparency level. Without this the opacity value is ignored + // and the window renders fully opaque regardless of the CSS setting. + use gtk::prelude::*; + window.with_webview(move |webview| { + let gtk_win = webview.inner() + .parent() + .and_then(|p| p.parent()) + .and_then(|w| w.dynamic_cast::().ok()); + if let Some(win) = gtk_win { + win.set_opacity(opacity); + tracing::info!("Linux: set GTK window opacity={}", opacity); + } + }).ok(); } Ok(()) diff --git a/src-tauri/src/sidecar.rs b/src-tauri/src/sidecar.rs index a7aa3d471..dd1f3560a 100644 --- a/src-tauri/src/sidecar.rs +++ b/src-tauri/src/sidecar.rs @@ -172,7 +172,7 @@ pub async fn spawn_backend(app: &tauri::AppHandle) -> Result Result>() + .windows(2) + .find_map(|pair| { + if pair[0] == "--wavedata" { + Some(pair[1].to_string()) + } else { + None + } + }); + + match &wavedata_path { + Some(wavedata) if !wavedata.starts_with(&data_dir_str) => { + tracing::info!( + "cleanup_stale_backends: PID {} has different data dir (wavedata={}), skipping", + pid, wavedata + ); + continue; + } + None => { + tracing::info!( + "cleanup_stale_backends: PID {} has no --wavedata arg, skipping", + pid + ); + continue; + } + _ => {} + } + + // Step 4b: Compare versions — skip if it matches the current version if instance_version == current_instance { tracing::info!( "cleanup_stale_backends: PID {} is current version ({}), keeping",