atman-runtime 1.2.0

atman flow execution runtime: evaluator, tool dispatch, provider dispatch, executor, memory stores
Documentation
use atman_runtime::Session;
use atman_runtime::session_meta::{SessionMeta, find_project_root, fingerprint_from_root};

#[tokio::test]
async fn open_writes_meta_json_next_to_events() {
    let tmp = tempfile::tempdir().unwrap();
    let session = Session::open(tmp.path()).unwrap();
    let meta_path = session.dir().join("meta.json");
    assert!(
        meta_path.exists(),
        "expected meta.json at {}",
        meta_path.display()
    );
    let meta = SessionMeta::load(session.dir()).unwrap();
    assert!(meta.created_at.is_some());
}

#[tokio::test]
async fn meta_records_project_root_when_launched_inside_project() {
    let tmp = tempfile::tempdir().unwrap();
    let project = tmp.path().join("proj");
    std::fs::create_dir_all(&project).unwrap();
    std::fs::create_dir(project.join(".git")).unwrap();
    let subdir = project.join("nested");
    std::fs::create_dir(&subdir).unwrap();
    let previous_cwd = std::env::current_dir().unwrap();
    std::env::set_current_dir(&subdir).unwrap();
    let sessions_root = tmp.path().join("sessions_root");
    let session = Session::open(&sessions_root).unwrap();
    std::env::set_current_dir(previous_cwd).unwrap();
    let meta = SessionMeta::load(session.dir()).unwrap();
    let recorded = meta
        .project_root
        .expect("project_root must be Some inside a project");
    assert_eq!(
        recorded.canonicalize().unwrap(),
        project.canonicalize().unwrap()
    );
    let fp = meta.project_fingerprint.expect("fingerprint present");
    assert_eq!(fp, fingerprint_from_root(&project));
}

#[test]
fn find_project_root_climbs_from_deeply_nested_path() {
    let tmp = tempfile::tempdir().unwrap();
    std::fs::create_dir(tmp.path().join(".atman")).unwrap();
    let deep = tmp.path().join("a").join("b").join("c").join("d");
    std::fs::create_dir_all(&deep).unwrap();
    let root = find_project_root(&deep).unwrap();
    assert_eq!(
        root.canonicalize().unwrap(),
        tmp.path().canonicalize().unwrap()
    );
}