malvin 0.2.4

Non-interactive research and coding agent
use std::path::{Path, PathBuf};

pub const WORKSPACE_CONFIG_PATHS: &[&str] = &[
    ".malvin/config.toml",
    ".malvin/adaptix.toml",
    ".malvin/meta.toml",
];

#[must_use]
pub fn canonical_workflow_name(name: &str) -> &str {
    match name {
        "adaptix" => "inspire",
        other => other,
    }
}

#[must_use]
pub fn resolve_session_log_path(run_dir: &Path, workflow: &str) -> PathBuf {
    let canonical = canonical_workflow_name(workflow);
    let primary = run_dir.join(format!("{canonical}.log"));
    if primary.is_file() {
        return primary;
    }
    if canonical == "inspire" {
        let legacy = run_dir.join("adaptix.log");
        if legacy.is_file() {
            return legacy;
        }
    }
    primary
}

#[must_use]
pub fn resolve_workspace_malvin_config_path(work_dir: &Path) -> PathBuf {
    for rel in WORKSPACE_CONFIG_PATHS {
        let path = work_dir.join(rel);
        if path.is_file() {
            return path;
        }
    }
    work_dir.join(WORKSPACE_CONFIG_PATHS[0])
}