malvin 0.2.9

Non-interactive research and coding agent
use std::sync::atomic::{AtomicBool, Ordering};

static MARKED_AT_TIMING: AtomicBool = AtomicBool::new(false);

pub fn notify_run_done() {
    let _ = std::panic::catch_unwind(notify_run_done_inner);
}

fn notify_run_done_inner() {
    if !super::lifecycle::live_io_allowed() {
        return;
    }
    MARKED_AT_TIMING.store(true, Ordering::Relaxed);
    super::lifecycle::report_active_state("done");
}

pub(super) fn terminal_agent_state() -> &'static str {
    if MARKED_AT_TIMING.swap(false, Ordering::Relaxed) {
        "done"
    } else {
        "idle"
    }
}