use crate::{ArtifactId, EffectClass, ToolCallId, ToolName};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ToolProposal {
pub tool: ToolName,
pub input: Value,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ToolCall {
pub id: ToolCallId,
pub tool: ToolName,
pub effect: EffectClass,
pub input: Value,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ResultVisibility {
Model,
User,
Both,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ToolResult {
pub call_id: ToolCallId,
pub summary: String,
pub data: Value,
pub artifacts: Vec<ArtifactId>,
pub visibility: ResultVisibility,
}