extension 4.0.21 → 4.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browsers.cjs CHANGED
@@ -149,7 +149,9 @@ var __webpack_modules__ = {
149
149
  const updateSuffix = readUpdateSuffixOnce();
150
150
  console.log(_messages__rspack_import_5.io());
151
151
  console.log(_messages__rspack_import_5.e_(manifest, opts.browser, message, opts.browserVersionLine, updateSuffix || void 0, {
152
- profilePath: opts.profilePath
152
+ profilePath: opts.profilePath,
153
+ binaryPath: opts.binaryPath,
154
+ binaryProvenance: opts.binaryProvenance
153
155
  }));
154
156
  console.log(_messages__rspack_import_5.io());
155
157
  markCardPrinted(k, opts.browser, opts.outPath);
@@ -190,7 +192,9 @@ var __webpack_modules__ = {
190
192
  console.log(_messages__rspack_import_5.e_(manifest, opts.browser, message, browserLabel, updateSuffix || void 0, {
191
193
  includeExtensionId: opts.includeExtensionId,
192
194
  runLabel,
193
- profilePath: opts.profilePath
195
+ profilePath: opts.profilePath,
196
+ binaryPath: opts.binaryPath,
197
+ binaryProvenance: opts.binaryProvenance
194
198
  }));
195
199
  console.log(_messages__rspack_import_5.io());
196
200
  } else {
@@ -208,25 +212,32 @@ var __webpack_modules__ = {
208
212
  console.log(_messages__rspack_import_5.e_(manifest, opts.browser, message, browserLabel, updateSuffix || void 0, {
209
213
  includeExtensionId: opts.includeExtensionId,
210
214
  runLabel,
211
- profilePath: opts.profilePath
215
+ profilePath: opts.profilePath,
216
+ binaryPath: opts.binaryPath,
217
+ binaryProvenance: opts.binaryProvenance
212
218
  }));
213
219
  console.log(_messages__rspack_import_5.io());
214
220
  }
215
221
  } catch {
222
+ const provenanceNote = _messages__rspack_import_5.xX(opts.binaryProvenance);
216
223
  console.log(_messages__rspack_import_5.io());
217
224
  console.log((0, _helpers_messaging__rspack_import_3.Nr)({
218
225
  rows: [
219
226
  {
220
227
  label: 'Browser',
221
- value: browserLabel
228
+ value: provenanceNote ? `${browserLabel} ${provenanceNote}` : browserLabel
229
+ },
230
+ {
231
+ label: 'Binary',
232
+ value: provenanceNote ? _messages__rspack_import_5.Yy(opts.binaryPath || '') : ''
222
233
  },
223
234
  {
224
235
  label: 'Output',
225
- value: opts.outPath
236
+ value: _messages__rspack_import_5.Yy(opts.outPath)
226
237
  },
227
238
  {
228
239
  label: 'Profile',
229
- value: opts.profilePath || ''
240
+ value: _messages__rspack_import_5.Yy(opts.profilePath || '')
230
241
  }
231
242
  ]
232
243
  }));
@@ -468,59 +479,55 @@ var __webpack_modules__ = {
468
479
  return `${getLoggingPrefix('debug')} browser banner=failed reason="${message}"`;
469
480
  }
470
481
  function skippingBrowserLaunchDueToCompileErrors() {
471
- return `${getLoggingPrefix('warn')} Skip the browser launch due to compile errors.`;
482
+ return `${getLoggingPrefix('warn')} Skipping the browser launch, the build has compile errors.`;
472
483
  }
473
484
  function browserNotInstalledError(browser, browserBinaryLocation) {
474
- const isUnreachable = 'null' === browserBinaryLocation ? `Browser ${capitalizedBrowserName(browser)} is not installed.\n` : `Can't find the path for browser ${capitalizedBrowserName(browser)}.\n`;
485
+ const isUnreachable = 'null' === browserBinaryLocation ? `${capitalizedBrowserName(browser)} isn't installed.\n` : `Can't find the ${capitalizedBrowserName(browser)} binary.\n`;
475
486
  const wslHint = (()=>{
476
487
  if (!isWsl()) return '';
477
488
  const example = '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe';
478
- return `\n\n${getLoggingPrefix('info')} WSL detected\n- Install a Linux browser in WSL, or\n- Provide a Windows binary path via ${pintor__rspack_import_8_default().blue('--chromium-binary')} ${pintor__rspack_import_8_default().gray(`"${example}"`)}\n (Tip: a shell alias like ${pintor__rspack_import_8_default().gray('google-chrome=...')} won't be used by Extension.js; use a real path or wrapper script.)`;
489
+ return `\n\nWSL detected:\n- Install a Linux browser in WSL, or\n- Provide a Windows binary path via ${pintor__rspack_import_8_default().blue('--chromium-binary')} ${pintor__rspack_import_8_default().gray(`"${example}"`)}\n (Tip: a shell alias like ${pintor__rspack_import_8_default().gray('google-chrome=...')} won't be used by Extension.js, use a real path or wrapper script.)`;
479
490
  })();
480
- return `${getLoggingPrefix('error')} ${isUnreachable}Either install the missing browser or choose a different one via ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<chrome|edge|firefox>')}.\n\n${pintor__rspack_import_8_default().red('NOT FOUND')} ${pintor__rspack_import_8_default().underline(browserBinaryLocation || `${capitalizedBrowserName(browser)}BROWSER`)}` + wslHint;
491
+ return `${getLoggingPrefix('error')} ${isUnreachable}${pintor__rspack_import_8_default().gray('NOT FOUND')} ${pintor__rspack_import_8_default().underline(browserBinaryLocation || `${capitalizedBrowserName(browser)}BROWSER`)}\nInstall the missing browser, or choose another one with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<chrome|edge|firefox>')}.` + wslHint;
481
492
  }
482
493
  function usingManagedChromiumFamilyFallback(requestedBrowser, fallbackBrowser, binaryPath) {
483
- return `${getLoggingPrefix('info')} ${managedBrowserDisplayName(requestedBrowser)} is not installed, so the managed ${managedBrowserDisplayName(fallbackBrowser)} runs instead.\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(binaryPath)}\nRun ${pintor__rspack_import_8_default().blue(`npx extension install ${requestedBrowser}`)} to use ${managedBrowserDisplayName(requestedBrowser)} itself.`;
484
- }
485
- function resolvedBrowserBinary(browser, binaryPath, versionLine) {
486
- const version = versionLine && versionLine.trim().length > 0 ? versionLine.trim() : capitalizedBrowserName(browser);
487
- return `${getLoggingPrefix('info')} Browser: ${version} ${pintor__rspack_import_8_default().gray('at')} ${pintor__rspack_import_8_default().underline(binaryPath)}.`;
494
+ return `${getLoggingPrefix('info')} ${managedBrowserDisplayName(requestedBrowser)} isn't installed, so the managed ${managedBrowserDisplayName(fallbackBrowser)} runs instead.\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(binaryPath)}\nRun ${pintor__rspack_import_8_default().blue(`npx extension install ${requestedBrowser}`)} to use ${managedBrowserDisplayName(requestedBrowser)} itself.`;
488
495
  }
489
496
  function preferringSystemBrowserOverSnapshot(systemBinary, snapshotBinary) {
490
- return `${getLoggingPrefix('info')} Use the installed browser instead of the cached Chromium snapshot (a dev-channel build).\n${pintor__rspack_import_8_default().gray('USING')} ${pintor__rspack_import_8_default().underline(systemBinary)}\n${pintor__rspack_import_8_default().gray('CACHED')} ${pintor__rspack_import_8_default().underline(snapshotBinary)}\nSet ${pintor__rspack_import_8_default().blue('EXTENSION_PREFER_CHROMIUM_SNAPSHOT=true')} to use the cached snapshot.`;
497
+ return `${getLoggingPrefix('info')} Using the installed browser instead of the cached Chromium snapshot (a dev-channel build).\n${pintor__rspack_import_8_default().gray('USING')} ${pintor__rspack_import_8_default().underline(systemBinary)}\n${pintor__rspack_import_8_default().gray('CACHED')} ${pintor__rspack_import_8_default().underline(snapshotBinary)}\nSet ${pintor__rspack_import_8_default().blue('EXTENSION_PREFER_CHROMIUM_SNAPSHOT=true')} to use the cached snapshot.`;
491
498
  }
492
499
  function mv2NotSupportedByChromium(extensionPath) {
493
- return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow('This extension declares Manifest V2, which modern Chromium refuses to load.')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThe browser will reject it at launch (a native dialog, not a console error), so the dev session cannot attach.\nRun it on an MV2-capable browser (${pintor__rspack_import_8_default().blue('--browser firefox')}) or migrate the manifest to MV3.`;
500
+ return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow('This extension declares Manifest V2, which modern Chromium refuses to load.')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThe browser will reject it at launch (a native dialog, not a console error), so the dev session can't attach.\nRun it on an MV2-capable browser (${pintor__rspack_import_8_default().blue('--browser firefox')}) or migrate the manifest to MV3.`;
494
501
  }
495
502
  function mv3BackgroundScriptsNotSupportedByChromium(extensionPath) {
496
- return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow("This MV3 extension declares Firefox-style background.scripts with no service_worker, Chromium refuses to load it.")}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThe browser rejects it at launch with no console error, so the dev session cannot attach.\nRun it on the browser it targets (${pintor__rspack_import_8_default().blue('--browser firefox')}) or declare ${pintor__rspack_import_8_default().blue('background.service_worker')} for Chromium.`;
503
+ return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow("This MV3 extension declares Firefox-style background.scripts with no service_worker, Chromium refuses to load it.")}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThe browser rejects it at launch with no console error, so the dev session can't attach.\nRun it on the browser it targets (${pintor__rspack_import_8_default().blue('--browser firefox')}) or declare ${pintor__rspack_import_8_default().blue('background.service_worker')} for Chromium.`;
497
504
  }
498
505
  function unsupportedManifestVersionOnChromium(extensionPath, declared) {
499
506
  const value = void 0 === declared ? 'no manifest_version' : `manifest_version ${JSON.stringify(declared)}`;
500
- return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow(`This extension declares ${value}, which Chromium refuses as an unsupported manifest version.`)}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThe browser rejects it at launch (a native dialog, not a console error), so the dev session cannot attach.\nDeclare ${pintor__rspack_import_8_default().blue('"manifest_version": 3')} in the source manifest.`;
507
+ return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow(`This extension declares ${value}, which Chromium refuses as an unsupported manifest version.`)}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThe browser rejects it at launch (a native dialog, not a console error), so the dev session can't attach.\nDeclare ${pintor__rspack_import_8_default().blue('"manifest_version": 3')} in the source manifest.`;
501
508
  }
502
509
  function chromiumInvalidMatchPatterns(extensionPath, patterns) {
503
510
  const shown = patterns.slice(0, 6);
504
511
  const more = patterns.length - shown.length;
505
- return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow('This extension declares match patterns Chrome refuses, the whole extension will not load.')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\n` + shown.map((pattern)=>`${pintor__rspack_import_8_default().gray('PATTERN')} ${pintor__rspack_import_8_default().red(pattern)}\n`).join('') + (more > 0 ? `${pintor__rspack_import_8_default().gray(`…and ${more} more`)}\n` : '') + `A match pattern's host wildcard must be ${pintor__rspack_import_8_default().blue('*')} or ${pintor__rspack_import_8_default().blue('*.domain.tld')}, ` + `a wildcard anywhere else in the host is invalid.\n` + `Replace the host with ${pintor__rspack_import_8_default().blue('*')} or ${pintor__rspack_import_8_default().blue('*.domain.tld')} in the source manifest.`;
512
+ return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow("This extension declares match patterns Chrome refuses, the whole extension won't load.")}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\n` + shown.map((pattern)=>`${pintor__rspack_import_8_default().gray('PATTERN')} ${pintor__rspack_import_8_default().red(pattern)}\n`).join('') + (more > 0 ? `${pintor__rspack_import_8_default().gray(`…and ${more} more`)}\n` : '') + `A match pattern's host wildcard must be ${pintor__rspack_import_8_default().blue('*')} or ${pintor__rspack_import_8_default().blue('*.domain.tld')}, ` + `Chrome refuses a wildcard anywhere else in the host.\n` + `Replace the host with ${pintor__rspack_import_8_default().blue('*')} or ${pintor__rspack_import_8_default().blue('*.domain.tld')} in the source manifest.`;
506
513
  }
507
514
  function chromiumManifestLoadBlockers(extensionPath, blockers) {
508
- return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow('This manifest declares shapes Chrome refuses, the whole extension will not load.')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\n` + blockers.map((blocker)=>`${pintor__rspack_import_8_default().gray('REASON')} ${pintor__rspack_import_8_default().red(blocker)}\n`).join('') + `Chrome rejects the extension at load, so no service worker or content script ever runs.\n` + "Fix these in the source manifest.";
515
+ return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow("This manifest declares shapes Chrome refuses, the whole extension won't load.")}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\n` + blockers.map((blocker)=>`${pintor__rspack_import_8_default().gray('REASON')} ${pintor__rspack_import_8_default().red(blocker)}\n`).join('') + `Chrome rejects the extension at load, so no service worker or content script ever runs.\n` + "Fix these in the source manifest.";
509
516
  }
510
517
  function chromiumExtensionLoadRefused(extensionPath, reason) {
511
- return `${getLoggingPrefix('error')} ${pintor__rspack_import_8_default().red('The browser refused to load this extension, so it is NOT running.')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\n` + (reason ? `${pintor__rspack_import_8_default().gray('REASON')} ${pintor__rspack_import_8_default().red(reason)}\n` : '') + `No service worker, content script, or page from this extension will run, and no Extension ID was assigned.\n` + `Fix the reason above and save.\n` + "If the browser does not pick it up, restart the dev session.";
518
+ return `${getLoggingPrefix('error')} ${pintor__rspack_import_8_default().red("The browser refused to load this extension, so it isn't running.")}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\n` + (reason ? `${pintor__rspack_import_8_default().gray('REASON')} ${pintor__rspack_import_8_default().red(reason)}\n` : '') + `No service worker, content script, or page from this extension will run, and no Extension ID was assigned.\n` + `Fix the reason above and save.\n` + "If the browser doesn't pick it up, restart the dev session.";
512
519
  }
513
520
  function chromiumExtensionLoadUnconfirmed(extensionPath) {
514
- return `${getLoggingPrefix('warn')} Extension.js could not confirm that the browser loaded this extension.\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThis browser rejected the debugging call that loads and verifies it, so the extension may be missing.\nChrome ignores the --load-extension switch unless the DisableLoadExtensionCommandLineSwitch policy is disabled.\nOpen chrome://extensions to check whether the extension is there, and report this if it is not.`;
521
+ return `${getLoggingPrefix('warn')} Extension.js couldn't confirm that the browser loaded this extension.\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionPath)}\nThis browser rejected the debugging call that loads and verifies it, so the extension may be missing.\nChrome ignores the --load-extension switch unless the DisableLoadExtensionCommandLineSwitch policy is disabled.\nOpen chrome://extensions to check whether the extension is there, and report this if it isn't.`;
515
522
  }
516
523
  function geckoAddonLoadRefused(addonPath, reason) {
517
- return `${getLoggingPrefix('error')} ${pintor__rspack_import_8_default().red('The browser refused to load this add-on, so it is NOT running.')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(addonPath)}\n` + (reason ? `${pintor__rspack_import_8_default().gray('REASON')} ${pintor__rspack_import_8_default().red(reason)}\n` : '') + `No background script, content script, or page from this add-on will run, and no Extension ID was assigned.\n` + `Fix the reason above and save.\n` + "If the browser does not pick it up, restart the dev session.";
524
+ return `${getLoggingPrefix('error')} ${pintor__rspack_import_8_default().red("The browser refused to load this add-on, so it isn't running.")}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(addonPath)}\n` + (reason ? `${pintor__rspack_import_8_default().gray('REASON')} ${pintor__rspack_import_8_default().red(reason)}\n` : '') + `No background script, content script, or page from this add-on will run, and no Extension ID was assigned.\n` + `Fix the reason above and save.\n` + "If the browser doesn't pick it up, restart the dev session.";
518
525
  }
519
526
  function devChannelSnapshotInUse(binaryPath) {
520
527
  return `${getLoggingPrefix('warn')} ${pintor__rspack_import_8_default().brightYellow('This is a Chromium tip-of-tree snapshot (dev channel, not a stable release).')}\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(binaryPath)}\nBehavior may differ from stable Chrome.\nInstall a stable browser or remove the snapshot to stop using it.`;
521
528
  }
522
529
  function browserLaunchError(browser, error) {
523
- return `${getLoggingPrefix('error')} Error launching ${capitalizedBrowserName(browser)}:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
530
+ return `${getLoggingPrefix('error')} Can't launch ${capitalizedBrowserName(browser)}.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
524
531
  }
525
532
  function enhancedProcessManagementCleanup(browser) {
526
533
  return `${getLoggingPrefix('debug')} proc cleanup browser=${browser}`;
@@ -529,53 +536,53 @@ var __webpack_modules__ = {
529
536
  return `${getLoggingPrefix('debug')} proc terminate browser=${browser} mode=graceful`;
530
537
  }
531
538
  function enhancedProcessManagementForceKill(browser) {
532
- return `${getLoggingPrefix('warn')} ${capitalizedBrowserName(browser)} did not exit gracefully, forcing the process to close.\nThis is a normal cleanup step and does not affect your build output.`;
539
+ return `${getLoggingPrefix('warn')} ${capitalizedBrowserName(browser)} didn't exit gracefully, forcing the process to close.\nThis is a normal cleanup step and doesn't affect your build output.`;
533
540
  }
534
541
  function enhancedProcessManagementCleanupError(browser, error) {
535
- return `${getLoggingPrefix('error')} Error during ${capitalizedBrowserName(browser)} cleanup:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
542
+ return `${getLoggingPrefix('error')} ${capitalizedBrowserName(browser)} cleanup failed.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
536
543
  }
537
544
  function enhancedProcessManagementUncaughtException(browser, error) {
538
- return `${getLoggingPrefix('error')} Uncaught exception in ${capitalizedBrowserName(browser)} process:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
545
+ return `${getLoggingPrefix('error')} Uncaught exception in the ${capitalizedBrowserName(browser)} process.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
539
546
  }
540
547
  function enhancedProcessManagementUnhandledRejection(browser, reason) {
541
- return `${getLoggingPrefix('error')} Unhandled rejection in ${capitalizedBrowserName(browser)} process:\n${pintor__rspack_import_8_default().red(errorDetail(reason))}`;
548
+ return `${getLoggingPrefix('error')} Unhandled rejection in the ${capitalizedBrowserName(browser)} process.\n${pintor__rspack_import_8_default().red(errorDetail(reason))}`;
542
549
  }
543
550
  function generalBrowserError(browser, error) {
544
- return `${getLoggingPrefix('error')} General error in ${capitalizedBrowserName(browser)}:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
551
+ return `${getLoggingPrefix('error')} ${capitalizedBrowserName(browser)} hit an unexpected error.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
545
552
  }
546
553
  function errorConnectingToBrowser(browser, port) {
547
554
  const where = 'number' == typeof port ? ` on port ${port}` : '';
548
- return `${getLoggingPrefix('error')} Unable to connect to ${capitalizedBrowserName(browser)}${where} after several retries.\nAnother browser instance is usually still holding that debugging port, often one left over from an earlier dev session.\nClose ${capitalizedBrowserName(browser)} windows opened by Extension.js and run the command again, or pass ${pintor__rspack_import_8_default().blue('--profile')} ${pintor__rspack_import_8_default().gray('<path>')} to launch against a separate profile.`;
555
+ return `${getLoggingPrefix('error')} Can't connect to ${capitalizedBrowserName(browser)}${where} after several retries.\nAnother browser instance is usually still holding that debugging port, often one left over from an earlier dev session.\nClose ${capitalizedBrowserName(browser)} windows opened by Extension.js and run the command again, or pass ${pintor__rspack_import_8_default().blue('--profile')} ${pintor__rspack_import_8_default().gray('<path>')} to launch against a separate profile.`;
549
556
  }
550
557
  function waitingForBrowserDebugger(browser, port, attempt, maxRetries) {
551
- return `${getLoggingPrefix('info')} Wait for the ${capitalizedBrowserName(browser)} debugger server on port ${port} (attempt ${attempt}/${maxRetries}).`;
558
+ return `${getLoggingPrefix('debug')} browser debugger=wait target=${browser} port=${port} attempt=${attempt}/${maxRetries}`;
552
559
  }
553
560
  function addonInstallError(browser, message) {
554
- return `${getLoggingPrefix('error')} Can't install add-on into ${capitalizedBrowserName(browser)}:\n${pintor__rspack_import_8_default().red(message)}`;
561
+ return `${getLoggingPrefix('error')} Can't install the add-on into ${capitalizedBrowserName(browser)}.\n${pintor__rspack_import_8_default().red(message)}`;
555
562
  }
556
563
  function messagingClientClosedError(browser) {
557
564
  return `${getLoggingPrefix('error')} The ${capitalizedBrowserName(browser)} messaging channel closed unexpectedly.\nThe browser exited, or its debugging connection was dropped while the dev session was still running.\nCheck whether the browser window was closed by hand, then run the command again.`;
558
565
  }
559
566
  function connectionClosedError(browser) {
560
- return `${getLoggingPrefix('error')} The debugging connection to ${capitalizedBrowserName(browser)} closed unexpectedly.\nReload and HMR need that connection, so the dev session cannot keep the extension up to date.\nRestart the dev session.\nIf it keeps happening, launch with ${pintor__rspack_import_8_default().blue('--profile')} ${pintor__rspack_import_8_default().gray('<path>')} to rule out a corrupted browser profile.`;
567
+ return `${getLoggingPrefix('error')} The debugging connection to ${capitalizedBrowserName(browser)} closed unexpectedly.\nReload and HMR need that connection, so the dev session can't keep the extension up to date.\nRestart the dev session.\nIf it keeps happening, launch with ${pintor__rspack_import_8_default().blue('--profile')} ${pintor__rspack_import_8_default().gray('<path>')} to rule out a corrupted browser profile.`;
561
568
  }
562
569
  function targetActorHasActiveRequestError(browser, targetActor) {
563
570
  return `${getLoggingPrefix('error')} Target actor ${pintor__rspack_import_8_default().gray(targetActor)} has an active request for ${capitalizedBrowserName(browser)}.`;
564
571
  }
565
572
  function parsingPacketError(browser, error) {
566
- return `${getLoggingPrefix('error')} Failed to parse packet from ${capitalizedBrowserName(browser)}:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
573
+ return `${getLoggingPrefix('error')} Can't parse a message from ${capitalizedBrowserName(browser)}.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
567
574
  }
568
575
  function messageWithoutSenderError(browser, message) {
569
- return `${getLoggingPrefix('error')} Message without sender from ${capitalizedBrowserName(browser)}:\n${pintor__rspack_import_8_default().red(JSON.stringify(message))}`;
576
+ return `${getLoggingPrefix('error')} Received a message without a sender from ${capitalizedBrowserName(browser)}.\n${pintor__rspack_import_8_default().red(JSON.stringify(message))}`;
570
577
  }
571
578
  function chromeProcessExited(code) {
572
579
  return `${getLoggingPrefix('debug')} proc exit browser=chrome code=${code}`;
573
580
  }
574
581
  function chromeProcessError(error) {
575
- return `${getLoggingPrefix('error')} Chrome process error:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
582
+ return `${getLoggingPrefix('error')} The Chrome process reported an error.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
576
583
  }
577
584
  function chromeFailedToSpawn(error) {
578
- return `${getLoggingPrefix('error')} Failed to spawn Chrome:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
585
+ return `${getLoggingPrefix('error')} Can't start the Chrome process.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
579
586
  }
580
587
  function chromeInitializingEnhancedReload() {
581
588
  return `${getLoggingPrefix('debug')} proc enhancedReload=init spawn=direct browser=chrome`;
@@ -584,16 +591,16 @@ var __webpack_modules__ = {
584
591
  return `${getLoggingPrefix('debug')} browser locate browser=${browser}`;
585
592
  }
586
593
  function devChromeProfilePath(path) {
587
- return `${getLoggingPrefix('info')} Chrome profile: ${pintor__rspack_import_8_default().underline(path)}`;
594
+ return `${getLoggingPrefix('debug')} browser profile=chrome path=${path}`;
588
595
  }
589
596
  function chromiumDryRunNotLaunching() {
590
- return `${getLoggingPrefix('info')} Dry run: skip the browser launch.`;
597
+ return `${getLoggingPrefix('info')} Dry run: skipping the browser launch.`;
591
598
  }
592
599
  function chromiumDryRunBinary(path) {
593
- return `${getLoggingPrefix('info')} Binary: ${pintor__rspack_import_8_default().underline(path)}.`;
600
+ return `${getLoggingPrefix('info')} ${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(path)}`;
594
601
  }
595
602
  function chromiumDryRunFlags(flags) {
596
- return `${getLoggingPrefix('info')} Flags: ${pintor__rspack_import_8_default().gray(flags)}.`;
603
+ return `${getLoggingPrefix('info')} ${pintor__rspack_import_8_default().gray('FLAGS')} ${pintor__rspack_import_8_default().gray(flags)}`;
597
604
  }
598
605
  function prettyPuppeteerInstallGuidance(browser, rawGuidance, cacheDir) {
599
606
  const dim = pintor__rspack_import_8_default().gray;
@@ -605,9 +612,7 @@ var __webpack_modules__ = {
605
612
  const finalCachePath = browserNorm && cacheDir ? node_path__rspack_import_3.join(cacheDir, browserNorm) : cacheDir;
606
613
  const installCommand = preferredManagedInstallCommand(browserNorm);
607
614
  const browserDisplay = managedBrowserDisplayName(browserNorm);
608
- body.push(`${getLoggingPrefix('warn')} Browser setup required`);
609
- body.push('');
610
- body.push(`${browserDisplay} is not available in the managed browser cache.`);
615
+ body.push(`${getLoggingPrefix('warn')} ${browserDisplay} isn't available in the managed browser cache.`);
611
616
  body.push('');
612
617
  body.push(pintor__rspack_import_8_default().gray(`Install ${browserDisplay} into the managed browser cache:`));
613
618
  body.push('');
@@ -620,9 +625,9 @@ var __webpack_modules__ = {
620
625
  }
621
626
  if (finalCachePath) {
622
627
  body.push('');
623
- body.push(`${dim('INSTALL PATH')} ${pintor__rspack_import_8_default().underline(finalCachePath)}`);
628
+ body.push(`${dim('PATH')} ${pintor__rspack_import_8_default().underline(finalCachePath)}`);
624
629
  }
625
- body.push(`${dim('NEXT')} Re-run your command after the install finishes.`);
630
+ body.push("Run your command again after the install finishes.");
626
631
  return `${body.join('\n')}\n`;
627
632
  }
628
633
  function firefoxLaunchCalled() {
@@ -635,16 +640,16 @@ var __webpack_modules__ = {
635
640
  return `${getLoggingPrefix('debug')} browser args=none`;
636
641
  }
637
642
  function firefoxFailedToStart(error) {
638
- return `${getLoggingPrefix('error')} Firefox failed to start:\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
643
+ return `${getLoggingPrefix('error')} Firefox failed to start.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
639
644
  }
640
645
  function firefoxDryRunNotLaunching() {
641
- return `${getLoggingPrefix('info')} Dry run: skip the browser launch.`;
646
+ return `${getLoggingPrefix('info')} Dry run: skipping the browser launch.`;
642
647
  }
643
648
  function firefoxDryRunBinary(path) {
644
- return `${getLoggingPrefix('info')} Binary (detected): ${pintor__rspack_import_8_default().underline(path)}.`;
649
+ return `${getLoggingPrefix('info')} ${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(path)}`;
645
650
  }
646
651
  function firefoxDryRunConfig(cfg) {
647
- return `${getLoggingPrefix('info')} Config: ${pintor__rspack_import_8_default().gray(cfg)}.`;
652
+ return `${getLoggingPrefix('info')} ${pintor__rspack_import_8_default().gray('CONFIG')} ${pintor__rspack_import_8_default().gray(cfg)}`;
648
653
  }
649
654
  function safariBuildCalled() {
650
655
  return `${getLoggingPrefix('debug')} browser build browser=safari`;
@@ -658,29 +663,29 @@ var __webpack_modules__ = {
658
663
  return `${getLoggingPrefix('warn')} Safari extensions can only be built on macOS.\nDetected ${pintor__rspack_import_8_default().gray(prettyPlatform(platform))}.\nTarget another browser via ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<chrome|edge|firefox>')}, or run this command on a Mac with Xcode.`;
659
664
  }
660
665
  function safariPackagingSkippedNonMac(platform) {
661
- return `${getLoggingPrefix('warn')} Safari packaging needs macOS with Xcode, detected ${pintor__rspack_import_8_default().gray(prettyPlatform(platform))}, so the Xcode packaging step is skipped.\nThe web-extension build in ${pintor__rspack_import_8_default().yellow('dist/safari')} is still complete and can be packaged later on a Mac with ${pintor__rspack_import_8_default().blue('extension build --browser=safari')}.`;
666
+ return `${getLoggingPrefix('warn')} Safari packaging needs macOS with Xcode, detected ${pintor__rspack_import_8_default().gray(prettyPlatform(platform))}, so the Xcode packaging step is skipped.\nThe web-extension build in ${pintor__rspack_import_8_default().underline('dist/safari')} is still complete and can be packaged later on a Mac with ${pintor__rspack_import_8_default().blue('extension build --browser=safari')}.`;
662
667
  }
663
668
  function safariXcodeRequired(developerDir) {
664
669
  const current = developerDir ? `${pintor__rspack_import_8_default().gray('Active toolchain:')} ${pintor__rspack_import_8_default().underline(developerDir)}` : `${pintor__rspack_import_8_default().gray('No active developer directory was found.')}`;
665
670
  return `${getLoggingPrefix('error')} Safari packaging needs the full Xcode app (not just the Command Line Tools).\n${pintor__rspack_import_8_default().red('NOT FOUND')} ${pintor__rspack_import_8_default().underline('safari-web-extension-converter')}\n${current}\n\nTo enable Safari builds:\n- Install ${pintor__rspack_import_8_default().yellow('Xcode')} from the Mac App Store, then\n- Point the toolchain at it: ${pintor__rspack_import_8_default().blue('sudo xcode-select --switch')} ${pintor__rspack_import_8_default().gray('/Applications/Xcode.app')}\n- Finish setup once: ${pintor__rspack_import_8_default().blue('xcodebuild -runFirstLaunch')}\n\nPrefer to keep building now?\nTarget another browser via ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<chrome|edge|firefox>')}.`;
666
671
  }
667
672
  function safariToolchainMissing(tool) {
668
- return `${getLoggingPrefix('error')} Safari packaging tool not found: ${pintor__rspack_import_8_default().underline(tool)}\nYour Xcode install looks incomplete.\nTry ${pintor__rspack_import_8_default().blue('xcodebuild -runFirstLaunch')}, or reinstall Xcode from the Mac App Store.`;
673
+ return `${getLoggingPrefix('error')} Can't find the Safari packaging tool.\n${pintor__rspack_import_8_default().gray('NOT FOUND')} ${pintor__rspack_import_8_default().underline(tool)}\nYour Xcode install looks incomplete.\nRun ${pintor__rspack_import_8_default().blue('xcodebuild -runFirstLaunch')}, or reinstall Xcode from the Mac App Store.`;
669
674
  }
670
675
  function safariConverting(extensionDir) {
671
- return `${getLoggingPrefix('info')} Convert the web extension into a Safari app project from ${pintor__rspack_import_8_default().underline(extensionDir)}.`;
676
+ return `${getLoggingPrefix('info')} Converting the web extension into a Safari app project…\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(extensionDir)}`;
672
677
  }
673
678
  function safariConverted(projectDir) {
674
- return `${getLoggingPrefix('success')} Generated the Safari Xcode project at ${pintor__rspack_import_8_default().underline(projectDir)}.`;
679
+ return `${getLoggingPrefix('success')} Generated the Safari Xcode project.\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(projectDir)}`;
675
680
  }
676
681
  function safariBuilding(scheme) {
677
- return `${getLoggingPrefix('info')} Build the Safari app with xcodebuild (scheme: ${pintor__rspack_import_8_default().gray(scheme)}).`;
682
+ return `${getLoggingPrefix('info')} Building the Safari app with xcodebuild (scheme ${pintor__rspack_import_8_default().gray(scheme)})…`;
678
683
  }
679
684
  function safariBuilt(appPath) {
680
- return `${getLoggingPrefix('success')} Built the Safari app at ${pintor__rspack_import_8_default().underline(appPath)}.`;
685
+ return `${getLoggingPrefix('success')} Built the Safari app.\n${pintor__rspack_import_8_default().gray('PATH')} ${pintor__rspack_import_8_default().underline(appPath)}`;
681
686
  }
682
687
  function safariOpening(target) {
683
- return `${getLoggingPrefix('info')} Open ${pintor__rspack_import_8_default().underline(target)}.`;
688
+ return `${getLoggingPrefix('info')} Opening ${pintor__rspack_import_8_default().underline(target)}`;
684
689
  }
685
690
  function safariToolFailed(tool, exitCode, outputTail) {
686
691
  const code = null === exitCode ? 'no exit code' : `exit ${exitCode}`;
@@ -688,13 +693,13 @@ var __webpack_modules__ = {
688
693
  return `${getLoggingPrefix('error')} Safari packaging tool ${pintor__rspack_import_8_default().underline(tool)} failed (${pintor__rspack_import_8_default().red(code)}).${tail}`;
689
694
  }
690
695
  function safariConverterWarnings(warnings) {
691
- return `${getLoggingPrefix('warn')} safari-web-extension-converter reported ${pintor__rspack_import_8_default().yellow(String(warnings.length))} warning(s), some manifest keys/APIs may not be supported by Safari:\n` + warnings.map((line)=>` ${pintor__rspack_import_8_default().gray('•')} ${line}`).join('\n');
696
+ return `${getLoggingPrefix('warn')} safari-web-extension-converter reported ${pintor__rspack_import_8_default().yellow(String(warnings.length))} ${1 === warnings.length ? 'warning' : 'warnings'}, some manifest keys/APIs may not be supported by Safari:\n` + warnings.map((line)=>` ${pintor__rspack_import_8_default().gray('•')} ${line}`).join('\n');
692
697
  }
693
698
  function safariDefaultBundleIdNote(bundleId) {
694
- return `${getLoggingPrefix('info')} Use the generated bundle id ${pintor__rspack_import_8_default().gray(bundleId)}.\nFor an app you plan to distribute, set your own with ${pintor__rspack_import_8_default().blue('--bundle-id')} now.\nChanging it later makes Safari treat the extension as a new identity.`;
699
+ return `${getLoggingPrefix('info')} Using the generated bundle id ${pintor__rspack_import_8_default().gray(bundleId)}.\nFor an app you plan to distribute, set your own with ${pintor__rspack_import_8_default().blue('--bundle-id')} now.\nChanging it later makes Safari treat the extension as a new identity.`;
695
700
  }
696
701
  function safariOpenHint(appPath, appName) {
697
- return `${getLoggingPrefix('info')} Launch it once to register with Safari: ${pintor__rspack_import_8_default().blue('open')} ${pintor__rspack_import_8_default().underline(`"${appPath}"`)}\nThen enable ${pintor__rspack_import_8_default().brightBlue(appName)} via Safari ▸ Develop ▸ ${pintor__rspack_import_8_default().yellow('Allow Unsigned Extensions')} and Safari ▸ Settings ▸ Extensions.`;
702
+ return `${getLoggingPrefix('info')} Launch it once to register with Safari: ${pintor__rspack_import_8_default().blue('open')} ${pintor__rspack_import_8_default().underline(`"${appPath}"`)}\nThen enable ${pintor__rspack_import_8_default().yellow(appName)} via Safari ▸ Develop ▸ ${pintor__rspack_import_8_default().yellow('Allow Unsigned Extensions')} and Safari ▸ Settings ▸ Extensions.`;
698
703
  }
699
704
  function safariDryRunNotBuilding() {
700
705
  return `${getLoggingPrefix('info')} Dry run: skip the Safari app build.`;
@@ -706,22 +711,22 @@ var __webpack_modules__ = {
706
711
  return `${getLoggingPrefix('info')} xcodebuild: ${pintor__rspack_import_8_default().gray(cmd)}.`;
707
712
  }
708
713
  function safariNextSteps(appName) {
709
- return `${getLoggingPrefix('info')} One-time setup to load ${pintor__rspack_import_8_default().brightBlue(appName)} in Safari:\n ${pintor__rspack_import_8_default().gray('1.')} Safari ▸ Settings ▸ Advanced ▸ check ${pintor__rspack_import_8_default().yellow('“Show features for web developers”')}\n ${pintor__rspack_import_8_default().gray('2.')} Safari ▸ Develop ▸ ${pintor__rspack_import_8_default().yellow('Allow Unsigned Extensions')} ${pintor__rspack_import_8_default().gray('(resets each launch)')}\n ${pintor__rspack_import_8_default().gray('3.')} Safari ▸ Settings ▸ Extensions ▸ turn on ${pintor__rspack_import_8_default().yellow(appName)}\n ${pintor__rspack_import_8_default().gray('→')} The app window that just opened can also take you there.`;
714
+ return `${getLoggingPrefix('info')} One-time setup to load ${pintor__rspack_import_8_default().yellow(appName)} in Safari:\n ${pintor__rspack_import_8_default().gray('1.')} Safari ▸ Settings ▸ Advanced ▸ check ${pintor__rspack_import_8_default().yellow('“Show features for web developers”')}\n ${pintor__rspack_import_8_default().gray('2.')} Safari ▸ Develop ▸ ${pintor__rspack_import_8_default().yellow('Allow Unsigned Extensions')} ${pintor__rspack_import_8_default().gray('(resets each launch)')}\n ${pintor__rspack_import_8_default().gray('3.')} Safari ▸ Settings ▸ Extensions ▸ turn on ${pintor__rspack_import_8_default().yellow(appName)}\n ${pintor__rspack_import_8_default().gray('→')} The app window that just opened can also take you there.`;
710
715
  }
711
716
  function safariRegistered(appName) {
712
- return `${getLoggingPrefix('success')} Safari recognizes ${pintor__rspack_import_8_default().brightBlue(appName)}, finish enabling it with the steps above.`;
717
+ return `${getLoggingPrefix('success')} Safari recognizes ${pintor__rspack_import_8_default().yellow(appName)}, finish enabling it with the steps above.`;
713
718
  }
714
719
  function safariNotYetRegistered(appName) {
715
- return `${getLoggingPrefix('warn')} Safari hasn't picked up ${pintor__rspack_import_8_default().brightBlue(appName)} yet.\nOpen the app once, then check Safari ▸ Settings ▸ Extensions.`;
720
+ return `${getLoggingPrefix('warn')} Safari hasn't picked up ${pintor__rspack_import_8_default().yellow(appName)} yet.\nOpen the app once, then check Safari ▸ Settings ▸ Extensions.`;
716
721
  }
717
722
  function safariRebuilt(appName) {
718
- return `${getLoggingPrefix('success')} Rebuilt ${pintor__rspack_import_8_default().brightBlue(appName)}, reload the page (or toggle the extension) in Safari to see changes.`;
723
+ return `${getLoggingPrefix('success')} Rebuilt ${pintor__rspack_import_8_default().yellow(appName)}, reload the page (or toggle the extension) in Safari to see changes.`;
719
724
  }
720
725
  function safariProjectStale() {
721
- return `${getLoggingPrefix('info')} Regenerate the Xcode project, manifest.json or identity options changed since it was generated.`;
726
+ return `${getLoggingPrefix('info')} Regenerating the Xcode project, manifest.json or identity options changed since it was generated.`;
722
727
  }
723
728
  function safariForcedRegeneration() {
724
- return `${getLoggingPrefix('info')} Regenerate the Xcode project, --force-regenerate is set.`;
729
+ return `${getLoggingPrefix('info')} Regenerating the Xcode project, ${pintor__rspack_import_8_default().blue('--force-regenerate')} is set.`;
725
730
  }
726
731
  function safariRegenerationDiscards(preservedKeys) {
727
732
  return `${getLoggingPrefix('warn')} Regenerating replaces the Xcode project: customizations made in Xcode (entitlements, capabilities, added files/targets) are ${pintor__rspack_import_8_default().red('discarded')}.\nPreserved automatically: ${pintor__rspack_import_8_default().yellow(preservedKeys.join(', '))}.\nIf you customized the project, back it up before continuing.`;
@@ -730,7 +735,7 @@ var __webpack_modules__ = {
730
735
  return `${getLoggingPrefix('info')} Preserved Xcode build settings across regeneration: ${pintor__rspack_import_8_default().yellow(keys.join(', '))}.\nIf any other project-level tweaks were lost, reconfigure them in Xcode.`;
731
736
  }
732
737
  function safariSkippingConversion() {
733
- return `${getLoggingPrefix('info')} Skip the conversion, the Xcode project is up to date with manifest.json.`;
738
+ return `${getLoggingPrefix('info')} Skipping the conversion, the Xcode project is up to date with manifest.json.`;
734
739
  }
735
740
  function cdpClientFoundTargets(count) {
736
741
  return `${getLoggingPrefix('debug')} cdp targets=${count}`;
@@ -742,7 +747,7 @@ var __webpack_modules__ = {
742
747
  return `${getLoggingPrefix('debug')} cdp connected host=${host} port=${port}`;
743
748
  }
744
749
  function cdpClientConnectionError(error) {
745
- return `${getLoggingPrefix('error')} Chrome CDP Client connection error: ${pintor__rspack_import_8_default().red(error)}`;
750
+ return `${getLoggingPrefix('error')} The Chrome debugging connection failed.\n${pintor__rspack_import_8_default().red(error)}`;
746
751
  }
747
752
  function cdpClientBrowserConnectionEstablished() {
748
753
  return `${getLoggingPrefix('debug')} cdp browserConnection=established`;
@@ -751,11 +756,26 @@ var __webpack_modules__ = {
751
756
  return `${getLoggingPrefix('debug')} cdp connection=closed`;
752
757
  }
753
758
  function cdpClientExtensionInfoFailed(extensionId, error) {
754
- return `${getLoggingPrefix('error')} Chrome CDP Client: Failed to get extension info for ${pintor__rspack_import_8_default().gray(extensionId)}: ${pintor__rspack_import_8_default().red(error)}`;
759
+ return `${getLoggingPrefix('error')} Chrome couldn't read extension info for ${pintor__rspack_import_8_default().gray(extensionId)}.\n${pintor__rspack_import_8_default().red(error)}`;
755
760
  }
756
761
  function firefoxRdpClientConnected(host, port) {
757
762
  return `${getLoggingPrefix('debug')} rdp connected host=${host} port=${port}`;
758
763
  }
764
+ function collapseHomeDirInCardValue(value) {
765
+ const raw = String(value || '');
766
+ const home = node_os__rspack_import_2.homedir();
767
+ if (!home || !raw.startsWith(home)) return raw;
768
+ const rest = raw.slice(home.length);
769
+ if ('' === rest) return '~';
770
+ if (rest.startsWith(node_path__rspack_import_3.sep) || rest.startsWith('/')) return `~${rest}`;
771
+ return raw;
772
+ }
773
+ function binaryProvenanceNote(provenance) {
774
+ if ('pinned' === provenance) return '(pinned with --chromium-binary)';
775
+ if ('system' === provenance) return '(system, not the managed default)';
776
+ if ('snapshot' === provenance) return '(cached snapshot)';
777
+ return '';
778
+ }
759
779
  function runningInDevelopment(manifest, browser, message, browserVersionLine, updateSuffix, opts) {
760
780
  const capitalize = (str)=>str.charAt(0).toUpperCase() + str.slice(1);
761
781
  const manifestName = manifest.name || 'Extension.js';
@@ -774,10 +794,10 @@ var __webpack_modules__ = {
774
794
  default:
775
795
  browserDevToolsUrl = '';
776
796
  }
777
- if (!message.data) return `${getLoggingPrefix('error')} No Client Data Received for ${manifestName}\n\n${pintor__rspack_import_8_default().red("This error happens when the program can't get the data from your extension.")}\n${pintor__rspack_import_8_default().red('There are many reasons this might happen.')}\n${pintor__rspack_import_8_default().red('To fix, ensure that:')}\n\n- Your extension is set as enabled in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)}\n- No previous ${capitalize(browser)} browser instance is open\n\nIf that is not the case, restart both the ${pintor__rspack_import_8_default().yellow(manifest.name || '')} and the\n${pintor__rspack_import_8_default().yellow('Manager Extension')} in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)} and try again.\nIf the issue still persists, please report a bug:\n` + pintor__rspack_import_8_default().underline("https://github.com/extension-js/extension.js/issues");
797
+ if (!message.data) return `${getLoggingPrefix('error')} No client data received for ${manifestName}.\n\n${pintor__rspack_import_8_default().red("Extension.js can't read data from your extension.")}\n${pintor__rspack_import_8_default().red('To fix, ensure that:')}\n\n- Your extension is enabled in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)}\n- No previous ${capitalize(browser)} browser instance is open\n\nIf both hold, restart the ${pintor__rspack_import_8_default().yellow(manifest.name || '')} and the\n${pintor__rspack_import_8_default().yellow('Manager Extension')} in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)} and try again.\nIf the issue persists, report a bug:\n` + pintor__rspack_import_8_default().underline("https://github.com/extension-js/extension.js/issues");
778
798
  const { id = '', management } = message.data;
779
799
  if (!management) {
780
- if ((0, _helpers_messaging__rspack_import_9._o)()) return `${getLoggingPrefix('error')} No management API info received from the client for ${manifestName}.\nThe extension may not have finished loading, or the in-browser companion did not attach.`;
800
+ if ((0, _helpers_messaging__rspack_import_9._o)()) return `${getLoggingPrefix('error')} No management API info received from the client for ${manifestName}.\nThe extension may not have finished loading, or the in-browser companion didn't attach.`;
781
801
  }
782
802
  const { version = '' } = management;
783
803
  const extensionVersion = process.env.EXTENSION_DEVELOP_VERSION || process.env.EXTENSION_CLI_VERSION || (()=>{
@@ -787,7 +807,10 @@ var __webpack_modules__ = {
787
807
  return 'unknown';
788
808
  }
789
809
  })();
790
- const browserLabel = (0, _helpers_messaging__rspack_import_9.A6)(String(browser || 'unknown'), resolveBrowserVersionLine(browser, browserVersionLine));
810
+ const baseBrowserLabel = (0, _helpers_messaging__rspack_import_9.A6)(String(browser || 'unknown'), resolveBrowserVersionLine(browser, browserVersionLine));
811
+ const provenanceNote = binaryProvenanceNote(opts?.binaryProvenance);
812
+ const browserLabel = provenanceNote ? `${baseBrowserLabel} ${provenanceNote}` : baseBrowserLabel;
813
+ const binaryRowValue = provenanceNote ? collapseHomeDirInCardValue(String(opts?.binaryPath || '').trim()) : '';
791
814
  const cleanId = String(id || '').trim();
792
815
  const includeExtensionId = opts?.includeExtensionId !== false;
793
816
  const updateNotice = updateSuffix ? ` ${updateSuffix}` : '';
@@ -801,6 +824,10 @@ var __webpack_modules__ = {
801
824
  label: 'Browser',
802
825
  value: browserLabel
803
826
  },
827
+ {
828
+ label: 'Binary',
829
+ value: binaryRowValue
830
+ },
804
831
  {
805
832
  label: 'Extension',
806
833
  value: displayVersion ? `${displayName} ${displayVersion}` : displayName
@@ -811,7 +838,7 @@ var __webpack_modules__ = {
811
838
  },
812
839
  {
813
840
  label: 'Profile',
814
- value: String(opts?.profilePath || '').trim()
841
+ value: collapseHomeDirInCardValue(String(opts?.profilePath || '').trim())
815
842
  },
816
843
  {
817
844
  label: 'Run ID',
@@ -824,13 +851,13 @@ var __webpack_modules__ = {
824
851
  return ' ';
825
852
  }
826
853
  function devChromiumDebugPort(finalPort, requestedPort) {
827
- return `${getLoggingPrefix('info')} Chromium debug port: ${pintor__rspack_import_8_default().gray(finalPort.toString())} (requested ${pintor__rspack_import_8_default().gray(requestedPort.toString())})`;
854
+ return `${getLoggingPrefix('debug')} browser cdpPort=${finalPort} requested=${requestedPort}`;
828
855
  }
829
856
  function devFirefoxDebugPort(finalPort, requestedPort) {
830
- return `${getLoggingPrefix('info')} Firefox debug port: ${pintor__rspack_import_8_default().gray(finalPort.toString())} (requested ${pintor__rspack_import_8_default().gray(requestedPort.toString())})`;
857
+ return `${getLoggingPrefix('debug')} browser rdpPort=${finalPort} requested=${requestedPort}`;
831
858
  }
832
859
  function devFirefoxProfilePath(profilePath) {
833
- return `${getLoggingPrefix('info')} Firefox profile: ${pintor__rspack_import_8_default().underline(profilePath)}`;
860
+ return `${getLoggingPrefix('debug')} browser profile=firefox path=${profilePath}`;
834
861
  }
835
862
  function cdpUnifiedExtensionLog(ts, payload) {
836
863
  const data = (()=>{
@@ -843,22 +870,22 @@ var __webpack_modules__ = {
843
870
  return `[extension-log ${ts}] ${data}`;
844
871
  }
845
872
  function browserRunnerError(body) {
846
- return `${getLoggingPrefix('error')} ${pintor__rspack_import_8_default().brightBlue('Browser runner error')}\n${body}`;
873
+ return `${getLoggingPrefix('error')} ${body}`;
847
874
  }
848
875
  function requireChromiumBinaryForChromiumBased() {
849
- const body = `Configuration required\nProvide ${pintor__rspack_import_8_default().blue('--chromium-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')} when using ${pintor__rspack_import_8_default().yellow('chromium-based')}.\n`;
876
+ const body = `The ${pintor__rspack_import_8_default().yellow('chromium-based')} target needs a Chromium binary.\nPass ${pintor__rspack_import_8_default().blue('--chromium-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')} to choose one.\n`;
850
877
  return browserRunnerError(body);
851
878
  }
852
879
  function requireGeckoBinaryForGeckoBased() {
853
- const body = `Configuration required\nProvide ${pintor__rspack_import_8_default().blue('--gecko-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')} when using ${pintor__rspack_import_8_default().yellow('gecko-based')} or ${pintor__rspack_import_8_default().yellow('firefox-based')}.\n`;
880
+ const body = `The ${pintor__rspack_import_8_default().yellow('gecko-based')} and ${pintor__rspack_import_8_default().yellow('firefox-based')} targets need a Firefox or Gecko binary.\nPass ${pintor__rspack_import_8_default().blue('--gecko-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')} to choose one.\n`;
854
881
  return browserRunnerError(body);
855
882
  }
856
883
  function invalidChromiumBinaryPath(p) {
857
- const body = `Invalid binary path\nChromium binary not found at ${pintor__rspack_import_8_default().underline(p)}.\nProvide a working path via ${pintor__rspack_import_8_default().blue('--chromium-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')}.`;
884
+ const body = `Can't find a Chromium binary at the given path.\n${pintor__rspack_import_8_default().gray('NOT FOUND')} ${pintor__rspack_import_8_default().underline(p)}\nPass ${pintor__rspack_import_8_default().blue('--chromium-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')} with a working path.`;
858
885
  return browserRunnerError(body);
859
886
  }
860
887
  function invalidGeckoBinaryPath(p) {
861
- const body = `Invalid binary path\nFirefox/Gecko binary not found at ${pintor__rspack_import_8_default().underline(p)}.\nProvide a working path via ${pintor__rspack_import_8_default().blue('--gecko-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')}.`;
888
+ const body = `Can't find a Firefox or Gecko binary at the given path.\n${pintor__rspack_import_8_default().gray('NOT FOUND')} ${pintor__rspack_import_8_default().underline(p)}\nPass ${pintor__rspack_import_8_default().blue('--gecko-binary')} ${pintor__rspack_import_8_default().gray('<abs-path>')} with a working path.`;
862
889
  return browserRunnerError(body);
863
890
  }
864
891
  function rdpInvalidRequestPayload() {
@@ -916,6 +943,7 @@ var __webpack_modules__ = {
916
943
  WV: ()=>addonInstallError,
917
944
  XH: ()=>enhancedProcessManagementTerminating,
918
945
  Xi: ()=>safariXcodeRequired,
946
+ Yy: ()=>collapseHomeDirInCardValue,
919
947
  Z5: ()=>cdpClientExtensionInfoFailed,
920
948
  _D: ()=>browserLaunchError,
921
949
  aI: ()=>devChromeProfilePath,
@@ -933,7 +961,6 @@ var __webpack_modules__ = {
933
961
  fd: ()=>safariRegistered,
934
962
  fw: ()=>safariOpening,
935
963
  hE: ()=>cdpClientConnectionClosed,
936
- iL: ()=>resolvedBrowserBinary,
937
964
  io: ()=>emptyLine,
938
965
  iv: ()=>firefoxBinaryArgsExtracted,
939
966
  jP: ()=>rdpInvalidRequestPayload,
@@ -958,6 +985,7 @@ var __webpack_modules__ = {
958
985
  sY: ()=>creatingUserProfile,
959
986
  uK: ()=>safariConverting,
960
987
  wk: ()=>chromeFailedToSpawn,
988
+ xX: ()=>binaryProvenanceNote,
961
989
  xy: ()=>chromeInitializingEnhancedReload,
962
990
  y1: ()=>safariConverterWarnings,
963
991
  y7: ()=>skippingBrowserLaunchDueToCompileErrors,
@@ -1241,11 +1269,10 @@ var __webpack_modules__ = {
1241
1269
  var pintor__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(pintor__rspack_import_0);
1242
1270
  var _helpers_messaging__rspack_import_1 = __webpack_require__("./helpers/messaging.ts");
1243
1271
  function ready(mode, browser) {
1244
- const key = String(browser || '').toLowerCase();
1245
- const extensionOutput = (0, _helpers_messaging__rspack_import_1.T_)(key);
1246
- const cap = 'firefox' === key || 'gecko-based' === key || 'firefox-based' === key ? 'Firefox' : String(browser || '').charAt(0).toUpperCase() + String(browser || '').slice(1);
1247
- const pretty = pintor__rspack_import_0_default().green(`ready for ${mode}`);
1248
- return `${(0, _helpers_messaging__rspack_import_1.Pl)('info')} ${cap} ${extensionOutput} ${pretty}.`;
1272
+ const noun = (0, _helpers_messaging__rspack_import_1.T_)(browser);
1273
+ const state = pintor__rspack_import_0_default().green(`ready for ${mode}`);
1274
+ const watching = 'development' === mode ? ' Watching for file changes.' : '';
1275
+ return `${(0, _helpers_messaging__rspack_import_1.Pl)('success')} ${noun} ${state}.${watching}`;
1249
1276
  }
1250
1277
  __webpack_require__.d(__webpack_exports__, {
1251
1278
  G: ()=>ready
@@ -1533,6 +1560,16 @@ var __webpack_modules__ = {
1533
1560
  swappedToSystem: false
1534
1561
  };
1535
1562
  }
1563
+ function classifyBinaryProvenance(opts) {
1564
+ if (opts.pinnedByFlag) return 'pinned';
1565
+ if (opts.usedManagedSnapshot) return 'snapshot';
1566
+ const root = node_path__rspack_import_3.resolve(String(opts.managedCacheRoot || '').trim());
1567
+ const binary = node_path__rspack_import_3.resolve(String(opts.binaryPath || '').trim());
1568
+ if (!root || !binary) return 'system';
1569
+ const relative = node_path__rspack_import_3.relative(root, binary);
1570
+ const underManagedRoot = relative.length > 0 && !relative.startsWith('..') && !node_path__rspack_import_3.isAbsolute(relative);
1571
+ return underManagedRoot ? 'managed' : 'system';
1572
+ }
1536
1573
  function parseEnvBrowserFlags(raw) {
1537
1574
  return String(raw || '').split(/\s+/).map((flag)=>flag.trim()).filter(Boolean);
1538
1575
  }
@@ -1708,6 +1745,7 @@ var __webpack_modules__ = {
1708
1745
  J1: ()=>prepareChromiumProfileForLaunch,
1709
1746
  Py: ()=>mergeChromiumFeatureSwitches,
1710
1747
  RE: ()=>markManagedEphemeralProfile,
1748
+ RU: ()=>classifyBinaryProvenance,
1711
1749
  W0: ()=>parseEnvBrowserFlags,
1712
1750
  ZO: ()=>isHeadlessGuardRequested,
1713
1751
  aY: ()=>findAvailablePortNear,
@@ -2670,7 +2708,9 @@ var __webpack_modules__ = {
2670
2708
  browser: args.browser,
2671
2709
  outPath: extensionOutputPath,
2672
2710
  browserVersionLine: args.browserVersionLine,
2673
- profilePath
2711
+ profilePath,
2712
+ binaryPath: args.binaryPath,
2713
+ binaryProvenance: args.binaryProvenance
2674
2714
  });
2675
2715
  if ('development' !== mode) return;
2676
2716
  const ready = await (0, manifest_readiness.fR)(extensionOutputPath, {
@@ -2684,7 +2724,9 @@ var __webpack_modules__ = {
2684
2724
  hostPort: args.hostPort,
2685
2725
  getInfo: async ()=>null,
2686
2726
  browserVersionLine: args.browserVersionLine,
2687
- profilePath
2727
+ profilePath,
2728
+ binaryPath: args.binaryPath,
2729
+ binaryProvenance: args.binaryProvenance
2688
2730
  });
2689
2731
  }
2690
2732
  class ChromiumLaunchPlugin {
@@ -2734,6 +2776,8 @@ var __webpack_modules__ = {
2734
2776
  const browser = this.options?.browser;
2735
2777
  let browserBinaryLocation = null;
2736
2778
  let printedGuidance = false;
2779
+ let binaryPinnedByFlag = false;
2780
+ let usedManagedSnapshot = false;
2737
2781
  const normalizePath = (p)=>{
2738
2782
  if (!p) return null;
2739
2783
  const normalized = (0, wsl_support.f7)(p);
@@ -2809,7 +2853,10 @@ var __webpack_modules__ = {
2809
2853
  if (choice.swappedToSystem && choice.binary) {
2810
2854
  console.log(messages.kK(choice.binary, browserBinaryLocation));
2811
2855
  browserBinaryLocation = choice.binary;
2812
- } else if (choice.usedManagedSnapshot) console.log(messages.JB(browserBinaryLocation));
2856
+ } else if (choice.usedManagedSnapshot) {
2857
+ usedManagedSnapshot = true;
2858
+ console.log(messages.JB(browserBinaryLocation));
2859
+ }
2813
2860
  }
2814
2861
  let skipDetection = Boolean(browserBinaryLocation);
2815
2862
  if (!browserBinaryLocation && (0, wsl_support.EV)()) {
@@ -2918,6 +2965,7 @@ var __webpack_modules__ = {
2918
2965
  process.exit(1);
2919
2966
  }
2920
2967
  browserBinaryLocation = normalized;
2968
+ binaryPinnedByFlag = true;
2921
2969
  }
2922
2970
  if (!browserBinaryLocation && !skipDetection) try {
2923
2971
  const env = managedEnvFor('chromium');
@@ -2980,6 +3028,7 @@ var __webpack_modules__ = {
2980
3028
  process.exit(1);
2981
3029
  }
2982
3030
  browserBinaryLocation = normalized;
3031
+ binaryPinnedByFlag = true;
2983
3032
  } else {
2984
3033
  console.error(messages.ne());
2985
3034
  process.exit(1);
@@ -3023,7 +3072,12 @@ var __webpack_modules__ = {
3023
3072
  const vLine = getBrowserVersionLine(browserBinaryLocation);
3024
3073
  if (vLine && vLine.trim().length > 0) browserVersionLine = vLine.trim();
3025
3074
  } catch {}
3026
- console.log(messages.iL(browser, browserBinaryLocation, browserVersionLine));
3075
+ const binaryProvenance = shared_utils.RU({
3076
+ binaryPath: browserBinaryLocation,
3077
+ managedCacheRoot: String(managedCacheRoot || ''),
3078
+ pinnedByFlag: binaryPinnedByFlag,
3079
+ usedManagedSnapshot
3080
+ });
3027
3081
  const extensionsToLoad = (0, runtime_options.fT)(this.options.extension);
3028
3082
  const resolvedBrowserVersion = /(\d+(?:\.\d+){0,3})/.exec(browserVersionLine || '')?.[1];
3029
3083
  for (const extPath of extensionsToLoad)try {
@@ -3077,6 +3131,8 @@ var __webpack_modules__ = {
3077
3131
  port: selectedPort
3078
3132
  },
3079
3133
  browserVersionLine,
3134
+ binaryPath: browserBinaryLocation,
3135
+ binaryProvenance,
3080
3136
  enableCdp
3081
3137
  });
3082
3138
  } catch {}
@@ -3121,7 +3177,9 @@ var __webpack_modules__ = {
3121
3177
  logSink: this.options.logSink,
3122
3178
  bannerPrintedOnce: false,
3123
3179
  cdpController: void 0,
3124
- browserVersionLine
3180
+ browserVersionLine,
3181
+ binaryPath: browserBinaryLocation,
3182
+ binaryProvenance
3125
3183
  };
3126
3184
  if (enableCdp) {
3127
3185
  const mod = await __webpack_require__.e(49).then(__webpack_require__.bind(__webpack_require__, "./browsers/run-chromium/chromium-launch/setup-cdp-after-launch.ts"));
@@ -4420,7 +4478,7 @@ var __webpack_modules__ = {
4420
4478
  } catch (error) {
4421
4479
  if (isErrorWithCode('ECONNREFUSED', error)) {
4422
4480
  lastError = error;
4423
- if (attempt % RETRY_LOG_EVERY_N_ATTEMPTS === 0) console.log(messages.GB(this.options.browser, port, attempt, MAX_RETRIES));
4481
+ if ((0, messaging._o)() && attempt % RETRY_LOG_EVERY_N_ATTEMPTS === 0) console.log(messages.GB(this.options.browser, port, attempt, MAX_RETRIES));
4424
4482
  await new Promise((resolve)=>setTimeout(resolve, RETRY_INTERVAL));
4425
4483
  } else {
4426
4484
  const err = error;