npcrs 0.1.0

Rust core for the NPC system — agent kernel, jinx executor, LLM client
Documentation

use std::collections::HashMap;
use std::sync::Mutex;
use once_cell::sync::Lazy;

#[derive(Debug, Clone)]
pub struct BrowserSession {
    pub session_id: String,
    pub url: Option<String>,
}

struct BrowserState {
    sessions: HashMap<String, BrowserSession>,
    current: Option<String>,
}

static SESSIONS: Lazy<Mutex<BrowserState>> = Lazy::new(|| Mutex::new(BrowserState { sessions: HashMap::new(), current: None }));

pub fn get_sessions() -> Vec<String> { SESSIONS.lock().unwrap().sessions.keys().cloned().collect() }

pub fn get_current_driver() -> Option<BrowserSession> {
    let state = SESSIONS.lock().unwrap();
    state.current.as_ref().and_then(|id| state.sessions.get(id)).cloned()
}

pub fn set_driver(session_id: &str, session: BrowserSession) {
    let mut state = SESSIONS.lock().unwrap();
    state.sessions.insert(session_id.to_string(), session);
    state.current = Some(session_id.to_string());
}

pub fn close_current() -> bool {
    let mut state = SESSIONS.lock().unwrap();
    if let Some(id) = state.current.take() { state.sessions.remove(&id); true } else { false }
}