mod approval;
mod capture;
pub mod client;
mod events;
mod execution;
pub mod handlers;
mod headless;
mod history_query;
mod pending;
pub mod policy;
pub mod protocol;
pub mod server;
pub mod session;
mod session_result;
mod state;
mod validation;
#[allow(unused_imports)]
pub use approval::{
UserInputApproval, approve_user_input, reject_user_input_not_approved, send_policy_is_allow,
set_send_policy_allow,
};
pub(crate) use events::install_r_event_publisher;
pub(crate) use execution::{
ExecutionStatus, accept_user_input, begin_terminal_execution, current_execution_id,
finish_execution, run_silent_eval_from,
};
pub use headless::{headless_read_console, set_headless_history};
pub use history_query::set_history_store;
pub use pending::{
PendingIpcKind, poll_ipc_requests, reject_operation_user_typing, setup_visible_eval,
take_pending_ipc_operation,
};
pub use session_result::{clear_history_session_id, read_r_version};
pub use state::{
break_signal, is_in_alternate_mode, set_headless_shutdown, set_in_alternate_mode,
set_r_at_prompt,
};
pub fn start_server(
bind: Option<&str>,
r_home: Option<String>,
r_version: Option<String>,
log_file: Option<String>,
history_session_id: Option<i64>,
session_type: session::SessionType,
) -> std::io::Result<session::SessionInfo> {
let (tx, rx) = std::sync::mpsc::channel();
let _ = pending::pending_ipc_operation();
let started_at = chrono::Local::now().to_rfc3339();
let session = server::start_server(
tx,
bind,
&started_at,
r_home,
r_version,
log_file,
history_session_id,
session_type,
)?;
state::install_receiver(rx)?;
Ok(session)
}
pub fn stop_server() {
state::clear_receiver();
pending::cancel_in_flight_operations();
server::stop_server();
}