lha-core 1.0.2

Minimal agent SDK for LHA with session runtime, tools, skills, and optional MCP adapters.
Documentation
use lha_llm::ToolCallPayload as LlmToolCallPayload;
use lha_llm::ToolResultContentItem;
use lha_llm::ToolResultItem;
use lha_llm::types::ToolResultPayload;

#[derive(Debug, Clone, PartialEq)]
pub struct ToolInvocation {
    pub call_id: String,
    pub tool_name: String,
    pub payload: ToolPayload,
}

#[derive(Debug, Clone, PartialEq)]
pub enum ToolPayload {
    JsonArguments { arguments: String },
    TextInput { input: String },
}

impl ToolPayload {
    pub fn from_llm(value: LlmToolCallPayload) -> Self {
        match value {
            LlmToolCallPayload::JsonArguments { arguments } => Self::JsonArguments { arguments },
            LlmToolCallPayload::TextInput { input } => Self::TextInput { input },
        }
    }
}

#[derive(Debug, Clone, PartialEq)]
pub enum ToolOutput {
    Function {
        content: String,
        content_items: Option<Vec<ToolResultContentItem>>,
        success: Option<bool>,
    },
}

impl ToolOutput {
    pub fn into_response(
        self,
        call_id: &str,
        tool_name: &str,
        payload: &ToolPayload,
    ) -> ToolResultItem {
        match self {
            Self::Function {
                content,
                content_items,
                success,
            } => {
                let payload = match payload {
                    ToolPayload::TextInput { .. } => ToolResultPayload::Text { output: content },
                    ToolPayload::JsonArguments { .. } => ToolResultPayload::Structured {
                        content,
                        content_items,
                        success,
                    },
                };

                ToolResultItem {
                    call_id: call_id.to_string(),
                    tool_name: tool_name.to_string(),
                    payload,
                }
            }
        }
    }
}