//! 工具使用事件 //! //! 处理 toolUseEvent 类型的事件 use serde::Deserialize; use crate::kiro::parser::error::ParseResult; use crate::kiro::parser::frame::Frame; use super::base::EventPayload; /// 工具使用事件 /// /// 包含工具调用的流式数据 #[derive(Debug, Clone, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ToolUseEvent { /// 工具名称 pub name: String, /// 工具调用 ID pub tool_use_id: String, /// 工具输入数据 (JSON 字符串,可能是流式的部分数据) #[serde(default)] pub input: String, /// 是否是最后一个块 #[serde(default)] pub stop: bool, } impl EventPayload for ToolUseEvent { fn from_frame(frame: &Frame) -> ParseResult { frame.payload_as_json() } } impl std::fmt::Display for ToolUseEvent { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { if self.stop { write!( f, "ToolUse[{}] (id={}, complete): {}", self.name, self.tool_use_id, self.input ) } else { write!( f, "ToolUse[{}] (id={}, partial): {}", self.name, self.tool_use_id, self.input ) } } }