Files
zesdex/src/app/workflow/script.rs
T

64 lines
2.0 KiB
Rust

//! 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<ScriptPrimitive>),
/// Execute several primitives sequentially, each waiting for the
/// previous to complete.
Pipeline(Vec<ScriptPrimitive>),
/// A named wrapper around another primitive (used for display/tracing).
Phase {
name: String,
script: Box<ScriptPrimitive>,
},
}
/// 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<u64>,
}
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,
}