use crate::app_state::AppState;
use bamboo_agent_core::AgentEvent;
use bamboo_engine::execution::{
reserve_session_execution, SessionExecutionReservation, SessionExecutionReserveOutcome,
};
pub(in crate::handlers::agent::execute) enum RunnerReservation {
Started(SessionExecutionReservation),
AlreadyRunning(String),
}
pub(in crate::handlers::agent::execute) async fn reserve_runner(
state: &AppState,
session_id: &str,
session_tx: &tokio::sync::broadcast::Sender<AgentEvent>,
) -> RunnerReservation {
match reserve_session_execution(
&state.agent,
&state.agent_runners,
&state.session_event_senders,
session_id,
session_tx,
)
.await
{
SessionExecutionReserveOutcome::Reserved(reservation) => {
RunnerReservation::Started(reservation)
}
SessionExecutionReserveOutcome::AlreadyRunning { run_id } => {
tracing::debug!(
"[{}] Runner already running, returning status: already_running",
session_id
);
RunnerReservation::AlreadyRunning(run_id)
}
}
}