distri-workflow 0.3.9

Workflow engine for Distri — define, execute, and track multi-step workflows
Documentation

distri-workflow — workflow engine for Distri.

Define multi-step workflows as data, execute them step by step, with support for sequential/parallel execution, conditions, agent runs, tool calls, and persistent state tracking.

Architecture

Two layers, deliberately separated:

  • Definition — the workflow as a DAG of steps. Static template; no runtime state. (WorkflowDefinition, WorkflowStep).
  • Run — execution state for one invocation: status, shared context, per-step status / result / error / timestamps. (WorkflowRun, WorkflowStepRun).

Other key types:

  • StepRequirement — what a step needs to run (native skills, connections)
  • StepExecutor trait — executes a step (implement for your runtime)
  • WorkflowStateStore trait — persists WorkflowRuns (Redis, DB, in-memory)
  • WorkflowRunner — orchestrates execution with requirement checking

Example

use distri_workflow::*;

let steps = vec![
    WorkflowStep::api_call("read", "Read document", "GET", "/api/docs/{id}")
        .with_requires(vec![
            StepRequirement::native("network"),
            StepRequirement::connection("google", "drive").with_permissions(vec!["drive.readonly"]),
        ]),
    WorkflowStep::tool_call("process", "Process data", "analyze_doc", serde_json::json!({"format": "markdown"})),
    WorkflowStep::script("test", "Run tests", "cargo test")
        .with_cwd("/project")
        .with_timeout(300),
];

let definition = WorkflowDefinition::new(steps);
let run = WorkflowRun::new(definition);