diff --git a/crates/tower-cmd/src/mcp.rs b/crates/tower-cmd/src/mcp.rs index f41d9dc6..8d9f6c59 100644 --- a/crates/tower-cmd/src/mcp.rs +++ b/crates/tower-cmd/src/mcp.rs @@ -854,8 +854,15 @@ impl TowerService { Self::modify_towerfile(&request.common, |tf| { let existing = tf.parameters.iter().find(|p| p.name == name) .ok_or_else(|| format!("Parameter '{name}' not found"))?; + let target_name = request + .new_name + .clone() + .unwrap_or_else(|| existing.name.clone()); + if target_name != name && tf.parameters.iter().any(|p| p.name == target_name) { + return Err(format!("Parameter '{}' already exists", target_name)); + } let param = Parameter { - name: request.new_name.unwrap_or_else(|| existing.name.clone()), + name: target_name, description: request.description.unwrap_or_else(|| existing.description.clone()), default: request.default.unwrap_or_else(|| existing.default.clone()), hidden: request.hidden.unwrap_or(existing.hidden), diff --git a/crates/tower-cmd/src/run.rs b/crates/tower-cmd/src/run.rs index 631fa6eb..6bf2f7cd 100644 --- a/crates/tower-cmd/src/run.rs +++ b/crates/tower-cmd/src/run.rs @@ -254,6 +254,16 @@ where output::error(&format!("Your local run crashed with exit code: {}", code)); return Err(Error::AppCrashed); } + Status::Failed { + error_code, + error_message, + } => { + output::error(&format!( + "Your local run failed due to a platform error (code: {}, message: {})", + error_code, error_message + )); + return Err(Error::AppCrashed); + } _ => { debug!("Unexpected status after monitoring: {:?}", status_result); output::error("An unexpected error occurred while monitoring your local run status!"); @@ -703,6 +713,10 @@ async fn monitor_cli_status( debug!("Run crashed, stopping status monitoring"); return status; } + Status::Failed { .. } => { + debug!("Run failed at platform layer, stopping status monitoring"); + return status; + } _ => { debug!("Handle status: other, continuing to monitor"); sleep(Duration::from_millis(100)).await;