use super::node_tool_role::WorkflowNodeToolRole;
#[derive(Debug, Clone)]
pub struct WorkflowSpec {
pub max_parallelism: usize,
pub fail_fast: bool,
pub compensate_on_failure: bool,
pub output_inject_max_chars: usize,
pub summary_preview_max_chars: usize,
pub compensation_preview_max_chars: usize,
pub nodes: Vec<WorkflowNodeSpec>,
pub cached_layer_count: usize,
pub for_each_pending: Vec<ForEachPendingSpec>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum WorkflowBranch {
Success,
Failure,
}
#[derive(Debug, Clone)]
pub enum WorkflowRunIf {
Branch {
from: String,
branch: WorkflowBranch,
},
Match {
from: String,
field: String,
equals: Option<serde_json::Value>,
in_list: Option<Vec<serde_json::Value>>,
},
}
#[derive(Debug, Clone)]
pub struct ForEachPendingSpec {
pub base_id: String,
pub from: String,
pub json_path: Option<String>,
pub static_items: Option<Vec<String>>,
pub item_var: String,
pub max_items: usize,
pub parallel: bool,
pub tool_name: String,
pub tool_args_template: serde_json::Value,
pub requires_approval: bool,
pub timeout_secs: Option<u64>,
pub compensate_with: Vec<String>,
pub max_retries: u32,
pub node_tool_role: Option<WorkflowNodeToolRole>,
pub extra_deps: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct WorkflowNodeSpec {
pub id: String,
pub tool_name: String,
pub tool_args: serde_json::Value,
pub deps: Vec<String>,
pub requires_approval: bool,
pub timeout_secs: Option<u64>,
pub compensate_with: Vec<String>,
pub max_retries: u32,
pub node_tool_role: Option<WorkflowNodeToolRole>,
pub run_if: Option<WorkflowRunIf>,
}