Creates the source. resolvePath maps a session id to its JSONL
path (the host resolves it however it likes — typically
JsonlSessionRepo.list metadata); pollInterval is injectable for
tests.
Starts following the session; the stream emits the initial backlog
and every message appended afterwards. Never emits an error — a
dead watch ends with a done event.