rho-coding-agent 1.26.1

A lightweight agent harness inspired by Pi
Documentation
use std::path::{Path, PathBuf};

use super::{PlanId, RunId};

#[derive(Clone, Debug)]
pub(crate) struct WorkflowLayout {
    root: PathBuf,
}

impl WorkflowLayout {
    pub(crate) fn new(rho_home: &Path) -> Self {
        Self {
            root: rho_home.join("workflows"),
        }
    }
    pub(crate) fn root(&self) -> &Path {
        &self.root
    }
    pub(crate) fn plans(&self) -> PathBuf {
        self.root.join("plans")
    }
    pub(crate) fn runs(&self) -> PathBuf {
        self.root.join("runs")
    }
    pub(crate) fn plan(&self, id: PlanId) -> PathBuf {
        self.plans().join(id.to_string())
    }
    pub(crate) fn run(&self, id: RunId) -> PathBuf {
        self.runs().join(id.to_string())
    }
    pub(crate) fn plan_manifest(&self, id: PlanId) -> PathBuf {
        self.plan(id).join("manifest.json")
    }
    pub(crate) fn plan_graph(&self, id: PlanId) -> PathBuf {
        self.plan(id).join("graph.json")
    }
    pub(crate) fn plan_sources(&self, id: PlanId) -> PathBuf {
        self.plan(id).join("sources")
    }
    pub(crate) fn run_manifest(&self, id: RunId) -> PathBuf {
        self.run(id).join("manifest.json")
    }
    pub(crate) fn run_graph(&self, id: RunId) -> PathBuf {
        self.run(id).join("graph.json")
    }
    pub(crate) fn run_state(&self, id: RunId) -> PathBuf {
        self.run(id).join("state.json")
    }
    pub(crate) fn run_events(&self, id: RunId) -> PathBuf {
        self.run(id).join("events.jsonl")
    }
    pub(crate) fn run_lock(&self, id: RunId) -> PathBuf {
        self.run(id).join("mutation.lock")
    }
}