codetether-agent 4.5.7

A2A-native AI coding agent for the CodeTether ecosystem
Documentation
use chromiumoxide::cdp::browser_protocol::target::TargetId;
use chromiumoxide::{browser::Browser, page::Page};
use std::sync::{
    Arc,
    atomic::{AtomicBool, Ordering},
};
use tokio::{
    sync::{Mutex, watch},
    task::JoinHandle,
};

pub(crate) struct SessionRuntime {
    pub alive: Arc<AtomicBool>,
    pub browser: Arc<Mutex<Browser>>,
    pub current_page: Arc<Mutex<Option<Page>>>,
    pub handler_task: JoinHandle<()>,
    pub mode: SessionMode,
    pub shutdown: watch::Sender<bool>,
    pub tab_order: Arc<Mutex<Vec<TargetId>>>,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum SessionMode {
    Launch,
    Connect,
}

impl SessionRuntime {
    pub fn is_alive(&self) -> bool {
        self.alive.load(Ordering::SeqCst)
    }
}

impl SessionMode {
    pub fn as_str(self) -> &'static str {
        match self {
            Self::Launch => "launch",
            Self::Connect => "connect",
        }
    }
}