diff --git a/crates/goose/src/agents/capabilities.rs b/crates/goose/src/agents/capabilities.rs index da6cb4029c..9e625e00d6 100644 --- a/crates/goose/src/agents/capabilities.rs +++ b/crates/goose/src/agents/capabilities.rs @@ -19,6 +19,20 @@ pub struct Capabilities { provider_usage: Mutex>, } +/// Sanitizes a string by replacing invalid characters with underscores. +/// Valid characters match [a-zA-Z0-9_-] +fn sanitize(input: String) -> String { + let mut result = String::with_capacity(input.len()); + for c in input.chars() { + result.push(if c.is_ascii_alphanumeric() || c == '_' || c == '-' { + c + } else { + '_' + }); + } + result +} + impl Capabilities { /// Create a new Capabilities with the specified provider pub fn new(provider: Box) -> Self { @@ -64,7 +78,7 @@ impl Capabilities { // Store the client self.clients.insert( - init_result.server_info.name.clone(), + sanitize(init_result.server_info.name.clone()), Arc::new(Mutex::new(client)), );