Device providers (legacyDevicesProvider, selectedDeviceProvider), repository, datasource, and GetDevicesResponseModel now live in sf_shared. Also moved dio_error_mapper (safeCall, mapDioError, formatErrorMessage) to sf_infrastructure. Consumers import directly from sf_shared instead of re-exporting through legacy_shared.