prodex 0.49.0

OpenAI profile pooling and safe auto-rotate for Codex CLI and Claude Code
Documentation
use super::*;

pub(crate) fn compact_runtime_continuation_state_in_place(runtime: &mut RuntimeRotationState) {
    let continuations = RuntimeContinuationStore {
        response_profile_bindings: std::mem::take(&mut runtime.state.response_profile_bindings),
        session_profile_bindings: std::mem::take(&mut runtime.state.session_profile_bindings),
        turn_state_bindings: std::mem::take(&mut runtime.turn_state_bindings),
        session_id_bindings: std::mem::take(&mut runtime.session_id_bindings),
        statuses: std::mem::take(&mut runtime.continuation_statuses),
    };
    let compacted = compact_runtime_continuation_store(continuations, &runtime.state.profiles);
    runtime.state.response_profile_bindings = compacted.response_profile_bindings;
    runtime.state.session_profile_bindings = compacted.session_profile_bindings;
    runtime.turn_state_bindings = compacted.turn_state_bindings;
    runtime.session_id_bindings = compacted.session_id_bindings;
    runtime.continuation_statuses = compacted.statuses;
}

pub(crate) fn runtime_continuation_store_snapshot(
    runtime: &RuntimeRotationState,
) -> RuntimeContinuationStore {
    compact_runtime_continuation_store(
        RuntimeContinuationStore {
            response_profile_bindings: runtime.state.response_profile_bindings.clone(),
            session_profile_bindings: runtime.state.session_profile_bindings.clone(),
            turn_state_bindings: runtime.turn_state_bindings.clone(),
            session_id_bindings: runtime.session_id_bindings.clone(),
            statuses: runtime.continuation_statuses.clone(),
        },
        &runtime.state.profiles,
    )
}