use serde::{Deserialize, Serialize};
use crate::events::{ThreadId, TurnId};
use crate::subagents::{SubagentDefinition, SubagentRequest, SubagentResult};
use crate::tasks::{TaskExecutionResult, TaskOutputStream, TaskSpec};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessSubagentDefinitionsParams {
pub dispatcher_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessSubagentDefinitionsResult {
pub definitions: Vec<SubagentDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessSubagentDispatchParams {
pub dispatcher_id: String,
pub dispatch_id: String,
pub parent_thread_id: ThreadId,
pub parent_turn_id: TurnId,
pub request: SubagentRequest,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessSubagentDispatchAck {
pub dispatch_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessSubagentEventNotification {
pub dispatch_id: String,
pub event: ProcessSubagentEvent,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum ProcessSubagentEvent {
Status {
status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
detail: Option<String>,
},
Completed {
result: Box<SubagentResult>,
},
Failed {
error: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessSubagentCancelParams {
pub dispatcher_id: String,
pub dispatch_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessTaskSpecParams {
pub executor_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessTaskSpecResult {
pub spec: TaskSpec,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessTaskExecuteParams {
pub executor_id: String,
pub execution_id: String,
pub task_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub thread_id: Option<ThreadId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub turn_id: Option<TurnId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub workspace_root: Option<String>,
pub input: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessTaskExecuteAck {
pub execution_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessTaskEventNotification {
pub execution_id: String,
pub event: ProcessTaskEvent,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum ProcessTaskEvent {
Output {
stream: TaskOutputStream,
chunk: String,
},
Completed {
result: TaskExecutionResult,
},
Failed {
error: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ProcessTaskCancelParams {
pub executor_id: String,
pub execution_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}