diff --git a/crates/goose/src/conversation/message.rs b/crates/goose/src/conversation/message.rs index 2f18d038836f..09d078f51f11 100644 --- a/crates/goose/src/conversation/message.rs +++ b/crates/goose/src/conversation/message.rs @@ -24,7 +24,15 @@ fn deserialize_sanitized_content<'de, D>(deserializer: D) -> Result, { - let mut content: Vec = Vec::deserialize(deserializer)?; + use serde::de::Error; + + let mut raw: Vec = Vec::deserialize(deserializer)?; + + // Filter out old "conversationCompacted" messages from pre-14.0 + raw.retain(|item| item.get("type").and_then(|v| v.as_str()) != Some("conversationCompacted")); + + let mut content: Vec = serde_json::from_value(serde_json::Value::Array(raw)) + .map_err(|e| Error::custom(format!("Failed to deserialize MessageContent: {}", e)))?; for message_content in &mut content { if let MessageContent::Text(text_content) = message_content {