async function runCommand(options) {
  /** @type {Array<LH.Result>} */
  const lhrs = loadSavedLHRs().map(lhr => JSON.parse(lhr));
  /** @type {Array<Array<[LH.Result, LH.Result]>>} */
  const groupedByUrl = _.groupBy(lhrs, lhr => lhr.finalUrl).map(lhrs =>
    lhrs.map(lhr => [lhr, lhr])
  );
  const representativeLhrs = computeRepresentativeRuns(groupedByUrl);

  if (!representativeLhrs.length) {
    process.stdout.write('No available reports to open. ');
  }

  const targetUrls = typeof options.url === 'string' ? [options.url] : options.url || [];

  for (const lhr of representativeLhrs) {
    if (targetUrls.length && !targetUrls.includes(lhr.finalUrl)) continue;

    process.stdout.write(`Opening median report for ${lhr.finalUrl}...\n`);
    const tmpFile = tmp.fileSync({postfix: '.html'});
    fs.writeFileSync(tmpFile.name, await getHTMLReportForLHR(lhr));
    await open(tmpFile.name);
  }

  process.stdout.write('Done!\n');
}
@param {LHCI.OpenCommand.Options} options
@return {Promise<void>}