use agent_client_protocol::schema::Meta as SdkMeta; use serde::{Deserialize, Serialize}; use serde_json::Value; /// Data for the `ToolCall` event. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ToolCallEventData { pub call_id: String, pub name: String, #[serde(default)] pub args: serde_json::Value, pub status: ToolCallStatus, #[serde(skip_serializing_if = "Option::is_none")] pub input: Option, #[serde(skip_serializing_if = "Option::is_none")] pub output: Option, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AcpToolCallEventData { pub session_id: String, pub update: AcpToolCallUpdateData, #[serde(rename = "_meta", skip_serializing_if = "Option::is_none")] pub meta: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AcpToolCallUpdateData { #[serde(rename = "sessionUpdate")] pub session_update: AcpToolCallSessionUpdateKind, pub tool_call_id: String, #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, #[serde(skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub kind: Option, #[serde(rename = "rawInput", skip_serializing_if = "Option::is_none")] pub raw_input: Option, #[serde(rename = "rawOutput", skip_serializing_if = "Option::is_none")] pub raw_output: Option, #[serde(skip_serializing_if = "Option::is_none")] pub content: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub locations: Option>, } #[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum AcpToolCallSessionUpdateKind { ToolCall, ToolCallUpdate, } #[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum AcpToolCallStatus { Pending, InProgress, Completed, Failed, } #[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum AcpToolCallKind { Read, Edit, Execute, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum AcpToolCallContentItem { Content { content: AcpToolCallTextBlock, }, Diff { path: String, #[serde(skip_serializing_if = "Option::is_none")] old_text: Option, new_text: String, }, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AcpToolCallTextBlock { #[serde(rename = "type")] pub block_type: AcpToolCallTextBlockType, pub text: String, } #[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum AcpToolCallTextBlockType { Text, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AcpToolCallLocationItem { pub path: String, } /// Status of a tool call. #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum ToolCallStatus { Running, Completed, Error, } /// A single entry in a `ToolGroup` event. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ToolGroupEntry { pub call_id: String, pub name: String, pub status: ToolCallStatus, #[serde(default)] pub description: Option, }