Creates the sweeper.
Runtime services, for timers and the monotonic clock
Heartbeat configuration
Supplies the current connections on each tick
Whether the interval is currently running.
Starts the interval. A no-op when heartbeats are disabled, so a plugin left at its defaults never creates a timer.
Stops the interval. Idempotent.
Runs one sweep: closes connections that have been silent too long, then sends the heartbeat payload to the rest.
Exposed so tests drive a deterministic tick rather than waiting on a timer.
Sends heartbeats and closes idle connections on one shared interval.
Since
0.1.0