The current set of known devices.
Begin scanning (idempotent). Probes that cannot start emit probeError.
Optionalopts: DiscoveryOptionsStop scanning and tear probes down (idempotent).
The probes that could not scan, and why — rebuilt each pass. Empty means every enabled probe genuinely ran, and only then does an empty list mean "nothing is there".
Required, not optional: a provider that cannot say what it failed to look at forces the caller back into guessing that no devices means no hardware.
The discovery service the server consumes. A typed
EventEmitter:start/stopare idempotent;list()returns the current device set synchronously. The concreteDiscoveryclass in@freemixer/discoveryimplements this; tests use a fake.Typed
on/offoverloads keepnode:events' loose(string, fn)signatures from leaking — callers get checked event names and handler types.