Creates a new SessionManager from the provided session configuration.
Does not start the session — call start for that.
Immutable session settings (student, subject, persona, etc.).
Gracefully terminates the session — stops audio, closes the bridge, saves a final checkpoint, and transitions the FSM to TERMINATED.
Why the session is ending; recorded in the final checkpoint.
Resolves once all subsystems are torn down.
Registers a callback that receives all SessionEvents.
Called synchronously each time an event fires.
Pauses the session — suspends audio capture and freezes the session clock.
Resolves when the session is fully paused.
Resumes a paused session.
Resolves when audio capture and the clock are running again.
Initialises all subsystems, opens the bridge connection to the edge device, starts audio capture, and transitions the FSM to ACTIVE.
Resolves once the session is fully running.
Creates and manages the full lifecycle of a single tutoring session.