malvin 0.2.9

Non-interactive research and coding agent
use super::PiEmbeddedSession;

impl PiEmbeddedSession {
    pub(crate) fn release_local_hold(&mut self) {
        if !self.local_hold {
            return;
        }
        self.local_hold = false;
        if let Err(e) = crate::pi_sdk::local_lifecycle::release_local_llm() {
            tracing::warn!(target: "malvin::pi_sdk", error = %e, "local llm release failed");
        }
    }
}

impl Drop for PiEmbeddedSession {
    fn drop(&mut self) {
        self.release_local_hold();
        self.reader_dead
            .store(true, std::sync::atomic::Ordering::SeqCst);
        if let Some(mut runtime) = self.runtime.take() {
            runtime.abort();
            let _ = runtime.shutdown();
        }
        #[cfg(unix)]
        {
            crate::acp::terminate_agent_process_group_for_interrupt(None, &self.spawn_pid_baseline);
        }
        crate::malvin_sandbox::clear_active_sandbox_session();
    }
}