//! 工作流事件定义 use serde::{Deserialize, Serialize}; use crate::types::NodeId; /// 人工审批选择类型(F-260615-01) /// - Single: 单选(decision 单值),缺省值,向后兼容现有调用方 /// - Multiple: 多选(decisions 数组) /// /// serde rename_all="snake_case" → "single"/"multiple" #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)] #[serde(rename_all = "snake_case")] pub enum SelectType { #[default] Single, Multiple, } /// 人工审批响应 /// /// 兼容字段(decision 单值):仅 select_type=Single 时使用; /// 新字段 decisions 数组:Single 时长度=1,Multiple 时长度≥1。 /// 旧调用方仍可只填 decision,HumanNode 下游兼容两者。 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct HumanApprovalResponse { pub execution_id: String, pub node_id: NodeId, pub decision: String, #[serde(default)] pub decisions: Vec, pub comment: Option, } /// 工作流事件 #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum WorkflowEvent { /// 节点开始执行 NodeStarted { node_id: NodeId, }, /// 节点执行进度更新 NodeProgress { node_id: NodeId, progress: f32, message: String, }, /// 节点产生输出 NodeOutput { node_id: NodeId, output: String, }, /// 节点执行完成 NodeCompleted { node_id: NodeId, duration_ms: u64, }, /// 节点执行失败 NodeFailed { node_id: NodeId, error: String, }, /// 工作流暂停(等待外部输入) WorkflowPaused { reason: String, waiting_node: NodeId, }, /// 工作流执行完成 WorkflowCompleted { total_duration_ms: u64, }, /// 工作流执行失败 WorkflowFailed { error: String, failed_node: NodeId, }, /// 人工审批请求 HumanApprovalRequest { execution_id: String, node_id: NodeId, title: String, description: String, options: Vec, /// F-260615-01: 选择类型,缺省 Single(向后兼容) #[serde(default)] select_type: SelectType, }, /// 人工审批响应 HumanApprovalResponse { execution_id: String, node_id: NodeId, decision: String, /// F-260615-01: 多选结果(Single 模式长度=1,Multiple 模式长度≥1) #[serde(default)] decisions: Vec, comment: Option, }, }