From 355d319bc40724bb391babf07840039598baa321 Mon Sep 17 00:00:00 2001 From: Jason Carr Date: Wed, 14 Jan 2026 07:14:34 -0600 Subject: [PATCH] fix: Improve error messages for invalid tool calls (#6483) Signed-off-by: J. Carr Co-authored-by: Claude Sonnet 4.5 --- crates/goose/src/agents/agent.rs | 10 +++++----- crates/goose/src/agents/extension_manager.rs | 12 ++++++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index 8450f622..e02946f5 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -529,11 +529,11 @@ impl Agent { "tool_execution_failed", &format!("{}: {}", tool_call.name, e), ); - ToolCallResult::from(Err(ErrorData::new( - ErrorCode::INTERNAL_ERROR, - e.to_string(), - None, - ))) + // Try to downcast to ErrorData to avoid double wrapping + let error_data = e.downcast::().unwrap_or_else(|e| { + ErrorData::new(ErrorCode::INTERNAL_ERROR, e.to_string(), None) + }); + ToolCallResult::from(Err(error_data)) }) }; diff --git a/crates/goose/src/agents/extension_manager.rs b/crates/goose/src/agents/extension_manager.rs index e1a5a36d..ad0e35f6 100644 --- a/crates/goose/src/agents/extension_manager.rs +++ b/crates/goose/src/agents/extension_manager.rs @@ -1155,14 +1155,22 @@ impl ExtensionManager { self.get_client_for_tool(&prefixed_name) .await .ok_or_else(|| { - ErrorData::new(ErrorCode::RESOURCE_NOT_FOUND, tool_call.name.clone(), None) + ErrorData::new( + ErrorCode::RESOURCE_NOT_FOUND, + format!("Tool '{}' not found", tool_call.name), + None, + ) })?; let tool_name = prefixed_name .strip_prefix(client_name.as_str()) .and_then(|s| s.strip_prefix("__")) .ok_or_else(|| { - ErrorData::new(ErrorCode::RESOURCE_NOT_FOUND, tool_call.name.clone(), None) + ErrorData::new( + ErrorCode::RESOURCE_NOT_FOUND, + format!("Invalid tool name format: '{}'", tool_call.name), + None, + ) })? .to_string();