sac-cli 0.1.0

Terminal-based AI coding agent — fork of NAC with extended backend support and context management
Documentation
use super::*;

pub(super) fn flatten_tool_result(result: rmcp::model::CallToolResult) -> ToolResult {
    let mut sections = Vec::new();

    for content in result.content {
        if let Some(text) = content.as_text() {
            sections.push(text.text.clone());
            continue;
        }

        if let Some(resource) = content.as_resource() {
            if let rmcp::model::ResourceContents::TextResourceContents { text, .. } =
                &resource.resource
            {
                sections.push(text.clone());
                continue;
            }
        }

        if let Some(link) = content.as_resource_link() {
            sections.push(format!("Resource: {}", link.uri));
            continue;
        }

        match serde_json::to_string_pretty(&content) {
            Ok(rendered) => sections.push(rendered),
            Err(_) => sections.push("[unsupported MCP content]".to_string()),
        }
    }

    if let Some(structured) = result.structured_content {
        match serde_json::to_string_pretty(&structured) {
            Ok(rendered) => sections.push(rendered),
            Err(_) => sections.push(structured.to_string()),
        }
    }

    if sections.is_empty() {
        sections.push("[empty MCP tool result]".to_string());
    }

    ToolResult {
        content: sections.join("\n\n"),
        is_error: result.is_error.unwrap_or(false),
    }
}