Whether a session is currently active (running OR paused)
Whether the active session is currently paused
Pause the running session — no-op if not running
Resume a paused session — no-op if not paused
Duration of the current session in minutes (excludes paused time)
Stable identifier of the active session — null when no session is running. Pass this to other persistence calls (e.g. submissions) so they can be grouped under the same session.
Begin a new session — no-op when one is already running. Lets the
consumer render a manual "Start" control (e.g. for contexts where
autoStartSession is intentionally false but the user can still
start practising on demand).
End the active session and persist it
A snapshot of the activity timer's state plus its controls, emitted by the AssignmentEditor so consumers can render the timer UI in their own layout (e.g. inside a progress panel).