Files
MyAiDesk/nomifun-tauri/crates/backend/nomifun-ai-agent/src/protocol/events/tool_call.rs
T
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

124 lines
3.5 KiB
Rust

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_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[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<SdkMeta>,
}
#[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<AcpToolCallStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<AcpToolCallKind>,
#[serde(rename = "rawInput", skip_serializing_if = "Option::is_none")]
pub raw_input: Option<Value>,
#[serde(rename = "rawOutput", skip_serializing_if = "Option::is_none")]
pub raw_output: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<Vec<AcpToolCallContentItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locations: Option<Vec<AcpToolCallLocationItem>>,
}
#[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<String>,
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<String>,
}