//! Script primitives for the workflow engine: agent invocation, parallel //! execution, pipelines, and phases. use serde::{Deserialize, Serialize}; /// A workflow script primitive — can be a single agent, a parallel fan-out, /// a sequential pipeline, or a named phase. #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ScriptPrimitive { /// Run a single agent with the given prompt template. Agent(String), /// Run a single Hive drone with an explicit node designation and /// tool-scope tier. /// /// Used by the Hive's cognitive cycle pipeline, where a drone's /// identity is its system-assigned coordinate (e.g. `"Node-0-1"`) /// paired with a bounded tool allowlist. `tool_scope` is one of /// `"read"`, `"write"`, `"full"` (see /// `app::subagent::division::tool_scope`); unrecognized values fall /// back to `"read"`. ScopedAgent { prompt: String, node_id: String, tool_scope: String, }, /// Execute several primitives concurrently. Parallel(Vec), /// Execute several primitives sequentially, each waiting for the /// previous to complete. Pipeline(Vec), /// A named wrapper around another primitive (used for display/tracing). Phase { name: String, script: Box, }, } /// Runtime options for a workflow execution. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ScriptOptions { pub max_concurrency: usize, pub continue_on_error: bool, pub timeout_ms: Option, } impl Default for ScriptOptions { fn default() -> Self { ScriptOptions { max_concurrency: 5, continue_on_error: false, timeout_ms: None, } } } /// A named, versioned workflow script with its primitives and options. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WorkflowScript { pub name: String, pub description: String, pub script: ScriptPrimitive, pub options: ScriptOptions, }