Skip to main content

scud/attractor/handlers/
manager.rs

1//! Stack manager loop handler (basic version).
2//!
3//! Supervisor loop: observe/steer/wait on child pipeline.
4
5use anyhow::Result;
6use async_trait::async_trait;
7
8use crate::attractor::context::Context;
9use crate::attractor::graph::{PipelineGraph, PipelineNode};
10use crate::attractor::outcome::Outcome;
11use crate::attractor::run_directory::RunDirectory;
12
13use super::Handler;
14
15pub struct ManagerHandler;
16
17#[async_trait]
18impl Handler for ManagerHandler {
19    async fn execute(
20        &self,
21        node: &PipelineNode,
22        _context: &Context,
23        _graph: &PipelineGraph,
24        _run_dir: &RunDirectory,
25    ) -> Result<Outcome> {
26        // Basic version: just succeed. Full implementation would:
27        // 1. Observe child pipeline status
28        // 2. Decide to steer (inject context, retry) or wait
29        // 3. Return when child completes
30        Ok(Outcome::success().with_response(format!(
31            "[Manager] Supervised execution for node '{}'",
32            node.id
33        )))
34    }
35}