react-doctor 0.9.12-dev.905607f → 0.9.12-dev.9f7d26f

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.
Files changed (34) hide show
  1. package/dist/{build-section-divider-D5ATBfDJ.js → build-section-divider-ho4tkWUX.js} +7 -7
  2. package/dist/{ci-DIlnBiUj.js → ci-Gp_DmzbV.js} +12 -12
  3. package/dist/cli.js +28 -27
  4. package/dist/{design-C-uq3ow5.js → design-DFtEnUE4.js} +4 -4
  5. package/dist/{exit-gracefully-C64GRTOn.js → exit-gracefully-D-fqCehG.js} +6 -6
  6. package/dist/{handle-error-Cfcnsjyi.js → handle-error-WbesgRpD.js} +17 -12
  7. package/dist/index.js +402 -253
  8. package/dist/{inspect-BLX566wA.js → inspect-DS-8JQ7-.js} +16 -16
  9. package/dist/{install-Dz8zcUxD.js → install--VBoTn6t.js} +9 -9
  10. package/dist/{install-doctor-script-CjxGMzIH.js → install-doctor-script-ChGM4QXN.js} +6 -13
  11. package/dist/{install-github-workflow-eYmQoXdI.js → install-github-workflow-W9k2a3Ln.js} +9 -5
  12. package/dist/{install-react-doctor-OIDTrbHz.js → install-react-doctor-Bu9OMiav.js} +8 -8
  13. package/dist/{jsx-runtime-BdBmuS_a.js → jsx-runtime-BLZlYxX9.js} +5 -5
  14. package/dist/{print-branded-header-BksixHcc.js → print-branded-header-CGlRc6ub.js} +4 -4
  15. package/dist/project-analysis-worker.js +54 -53
  16. package/dist/{prompt-runtime-scan-url-CXJMNnAo.js → prompt-runtime-scan-url-y1gsTi9R.js} +5 -5
  17. package/dist/{read-object-file-BhV9TFsy.js → read-object-file-8GV0gq_t.js} +4 -4
  18. package/dist/{record-metric-CdX-TQ5W.js → record-metric-BYDiYM_b.js} +348 -198
  19. package/dist/{report-error-DsFo2sAk.js → report-error-C4MUPAvk.js} +5 -5
  20. package/dist/{report-workflow-result-BSSkdwvd.js → report-workflow-result-BmM8X3fj.js} +5 -5
  21. package/dist/{resolve-scope-DRnGmF8O.js → resolve-scope-DmNrMvxi.js} +6 -6
  22. package/dist/{rules-C2g4a0X3.js → rules-DNQKzUXv.js} +6 -6
  23. package/dist/{run-scan-app-Ch6yrLY9.js → run-scan-app-C0kxQ1fE.js} +16 -14
  24. package/dist/{runtime-scan-Crfe35Ke.js → runtime-scan-D_r84DrL.js} +9 -9
  25. package/dist/{sanitize-runtime-url-Dwa_-IKX.js → sanitize-runtime-url-DYlUQwKR.js} +4 -4
  26. package/dist/{scan-DJnhifws.js → scan-CRyEeC82.js} +9 -9
  27. package/dist/{should-fail-scan-gate-D4ZKKeXI.js → should-fail-scan-gate-gkN0JbKk.js} +11 -11
  28. package/dist/{should-skip-prompts-Cfocoh7G.js → should-skip-prompts-Da6drkx_.js} +4 -4
  29. package/dist/{should-use-tui-COX1uZWn.js → should-use-tui-DDV9EXki.js} +4 -4
  30. package/dist/{telemetry-runtime-C_D70xUE.js → telemetry-runtime-DcXXRI22.js} +55 -7
  31. package/dist/{version-BAhd6Zvv.js → version-D4fL3PrW.js} +4 -4
  32. package/dist/{why-MQHWHpeA.js → why-quSmktoh.js} +4 -4
  33. package/dist/{with-run-span-DmpUrF70.js → with-run-span-YnjkCzXg.js} +5 -5
  34. package/package.json +3 -2
@@ -1,7 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c1e2af87-b743-5881-8179-99a247c8e75d")}catch(e){}}();
3
- import { N as SENTRY_FLUSH_TIMEOUT_MS, T as METRIC, Xt as isReactDoctorError, l as getRunId, o as buildSentryScope, t as recordCount } from "./record-metric-CdX-TQ5W.js";
4
- import { n as shutdownTelemetry, r as isExpectedUserError } from "./telemetry-runtime-C_D70xUE.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c1f07130-9cff-5399-8de7-fcf4038d4748")}catch(e){}}();
3
+ import { N as SENTRY_FLUSH_TIMEOUT_MS, T as METRIC, Xt as isReactDoctorError, l as getRunId, o as buildSentryScope, t as recordCount } from "./record-metric-BYDiYM_b.js";
4
+ import { n as shutdownTelemetry, r as isExpectedUserError } from "./telemetry-runtime-DcXXRI22.js";
5
5
  import { r as recordRunTraceId, t as getActiveRunTrace } from "./active-run-trace-dlIZeEvb.js";
6
6
  import * as Sentry from "@sentry/node";
7
7
  //#region src/cli/utils/report-error.ts
@@ -60,5 +60,5 @@ const reportErrorToSentry = async (error) => {
60
60
  //#endregion
61
61
  export { reportErrorToSentry as t };
62
62
 
63
- //# sourceMappingURL=report-error-DsFo2sAk.js.map
64
- //# debugId=c1e2af87-b743-5881-8179-99a247c8e75d
63
+ //# sourceMappingURL=report-error-C4MUPAvk.js.map
64
+ //# debugId=c1f07130-9cff-5399-8de7-fcf4038d4748
@@ -1,7 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0d01c9df-fa96-5c21-85fa-7eeb2966e724")}catch(e){}}();
3
- import { O as REACT_DOCTOR_CONFIG_PROJECT_NAME, T as METRIC, t as recordCount } from "./record-metric-CdX-TQ5W.js";
4
- import { u as isCommandAvailable } from "./install-github-workflow-eYmQoXdI.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="debcfb26-65d8-52ff-a033-70ba1ce23cff")}catch(e){}}();
3
+ import { O as REACT_DOCTOR_CONFIG_PROJECT_NAME, T as METRIC, t as recordCount } from "./record-metric-BYDiYM_b.js";
4
+ import { u as isCommandAvailable } from "./install-github-workflow-W9k2a3Ln.js";
5
5
  import { spawn } from "node:child_process";
6
6
  import * as path$1 from "node:path";
7
7
  import process$1 from "node:process";
@@ -275,5 +275,5 @@ const reportWorkflowResult = (workflowSpinner, result, projectRoot) => {
275
275
  //#endregion
276
276
  export { recordGate as a, ACTION_UPGRADE_EVENT as c, INSTALL_AGENTS_PREFERENCE_ID as d, ONBOARDING_EVENT as f, detectAvailableAgents as h, readPreference as i, CI_PITCH_EVENT as l, computeDefaultSelectedAgents as m, openUrl as n, runMigrations as o, SETUP_HINT_EVENT as p, isGatePending as r, writePreference as s, reportWorkflowResult as t, HANDOFF_TARGET_PREFERENCE_ID as u };
277
277
 
278
- //# sourceMappingURL=report-workflow-result-BSSkdwvd.js.map
279
- //# debugId=0d01c9df-fa96-5c21-85fa-7eeb2966e724
278
+ //# sourceMappingURL=report-workflow-result-BmM8X3fj.js.map
279
+ //# debugId=debcfb26-65d8-52ff-a033-70ba1ce23cff
@@ -1,8 +1,8 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2c9ad65b-c8d5-59d1-9fb5-24564190daa4")}catch(e){}}();
3
- import { Jt as isPathInsideDirectory, Nt as filterSourceFiles, wr as toCanonicalPath } from "./record-metric-CdX-TQ5W.js";
4
- import { N as cliLogger } from "./install-doctor-script-CjxGMzIH.js";
5
- import { d as detectDefaultBranch, f as runCommand, l as prompts, u as isCommandAvailable } from "./install-github-workflow-eYmQoXdI.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5e4bbd1c-7180-5514-921e-b8e37d549ba6")}catch(e){}}();
3
+ import { Jt as isPathInsideDirectory, Nt as filterSourceFiles, wr as toCanonicalPath } from "./record-metric-BYDiYM_b.js";
4
+ import { M as cliLogger } from "./install-doctor-script-ChGM4QXN.js";
5
+ import { d as detectDefaultBranch, f as runCommand, l as prompts, u as isCommandAvailable } from "./install-github-workflow-W9k2a3Ln.js";
6
6
  import * as path$1 from "node:path";
7
7
  //#region src/cli/utils/path-format.ts
8
8
  const toForwardSlashes = (filePath) => filePath.replaceAll("\\", "/");
@@ -335,5 +335,5 @@ const finalizeScope = async ({ requested, diffInfo, skipPrompts, isQuiet }) => {
335
335
  //#endregion
336
336
  export { isValidBlockingLevel as a, openWorkflowPullRequest as c, warnDeprecatedDiff as i, stageWorkflowFile as l, isScopeValue as n, pickBlockingLevel as o, resolveScope as r, resolveBlockingLevel as s, finalizeScope as t, toForwardSlashes as u };
337
337
 
338
- //# sourceMappingURL=resolve-scope-DRnGmF8O.js.map
339
- //# debugId=2c9ad65b-c8d5-59d1-9fb5-24564190daa4
338
+ //# sourceMappingURL=resolve-scope-DmNrMvxi.js.map
339
+ //# debugId=5e4bbd1c-7180-5514-921e-b8e37d549ba6
@@ -1,8 +1,8 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="dab85ff5-a8c4-5896-9f62-052081d5fa5a")}catch(e){}}();
3
- import { Kt as highlighter, Sr as isPlainObject, St as clearConfigCache, T as METRIC, Vt as getEquivalentRuleKeys, Zt as isSameRuleKey, bn as validateConfigTypes, gt as buildRuleDocsUrl, nr as COMPILER_CLEANUP_BUCKET, rn as loadConfigWithSource, rr as COMPILER_CLEANUP_RULE_KEYS, t as recordCount } from "./record-metric-CdX-TQ5W.js";
4
- import { N as cliLogger, n as findNearestPackageDirectory } from "./install-doctor-script-CjxGMzIH.js";
5
- import { t as readObjectFile } from "./read-object-file-BhV9TFsy.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2978c28f-ca65-5f02-89c0-0b188ed3c76f")}catch(e){}}();
3
+ import { Kt as highlighter, Sr as isPlainObject, St as clearConfigCache, T as METRIC, Vt as getEquivalentRuleKeys, Zt as isSameRuleKey, bn as validateConfigTypes, gt as buildRuleDocsUrl, nr as COMPILER_CLEANUP_BUCKET, rn as loadConfigWithSource, rr as COMPILER_CLEANUP_RULE_KEYS, t as recordCount } from "./record-metric-BYDiYM_b.js";
4
+ import { M as cliLogger, n as findNearestPackageDirectory } from "./install-doctor-script-ChGM4QXN.js";
5
+ import { t as readObjectFile } from "./read-object-file-8GV0gq_t.js";
6
6
  import * as path$1 from "node:path";
7
7
  import * as fs$1 from "node:fs";
8
8
  import { REACT_DOCTOR_RULES } from "oxlint-plugin-react-doctor/core";
@@ -577,5 +577,5 @@ const rulesUnignoreTagAction = async (tag, options) => {
577
577
  //#endregion
578
578
  export { rulesCategoryAction, rulesDisableAction, rulesEnableAction, rulesExplainAction, rulesIgnoreTagAction, rulesListAction, rulesSetAction, rulesUnignoreTagAction };
579
579
 
580
- //# sourceMappingURL=rules-C2g4a0X3.js.map
581
- //# debugId=dab85ff5-a8c4-5896-9f62-052081d5fa5a
580
+ //# sourceMappingURL=rules-DNQKzUXv.js.map
581
+ //# debugId=2978c28f-ca65-5f02-89c0-0b188ed3c76f
@@ -1,14 +1,15 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0d60aaf0-3d41-5dd4-80b8-39aec4810ef4")}catch(e){}}();
3
- import { Bn as sync, Bt as getDiffInfo, C as CI_TRUST_COMPANIES, G as isCiEnvironment, Hn as void_, Jt as isPathInsideDirectory, Kn as succeed, Kt as highlighter, L as TUI_REPORT_COMPACT_MAX_ROWS, Lt as getBaselineDiffPlan, R as TUI_REPORT_DETAIL_WIDTH_FRACTION, Rn as runPromise, Rt as getChangedLineRanges, T as METRIC, Ut as hasPublishedFixRecipe, V as isGitHookEnvironment, ar as DIAGNOSTIC_CATEGORY_BUCKETS, at as Progress, cr as GITHUB_ACTIONS_SETUP_URL, fn as resolveScanTarget, gt as buildRuleDocsUrl, in as mapWithConcurrency, n as recordDistribution, sn as remainingDeadlineBudgetMs, st as Reporter, t as recordCount, vr as getCategoryImpact, xn as yieldToEventLoop, yt as calculateScore } from "./record-metric-CdX-TQ5W.js";
4
- import { N as cliLogger, l as isUnicodeSupported, n as findNearestPackageDirectory } from "./install-doctor-script-CjxGMzIH.js";
5
- import { i as isReactDoctorWorkflowInstalled } from "./install-github-workflow-eYmQoXdI.js";
6
- import { r as resolveScope, s as resolveBlockingLevel, t as finalizeScope, u as toForwardSlashes } from "./resolve-scope-DRnGmF8O.js";
7
- import { A as resolveMergeBaseRef, B as buildNoScoreMessage, C as copyToClipboard, D as deduplicateProjectScans, E as collectProjectSourceFileCounts, F as printFooter, G as formatFixRecipeLine, H as hasLintHardFailure, I as printDiagnosticsDump, K as formatLearnMoreLine, L as formatDiagnosticSite, M as pluralize, N as formatSkippedCheckLabel, O as createInvocationInspect, P as formatElapsedTime, R as hasIncompleteScoreAnalysis, S as CLI_AGENT_BINARIES, T as buildHandoffPayload, U as buildRulePriorityMap, V as buildEmptyReportMessage, W as buildSortedRuleGroups, _ as resolveCliInspectOptions, a as projectManifestChanged, b as setUpGitHubActions, c as selectProjects, d as resolveProjectChangedLineRanges, f as resolveProjectDiffIncludePaths, g as resolveWorkspaceDeadCodeOwner, h as retryMissingProjectScores, l as buildCodeFrame, n as formatSkippedProjectsMessage, o as partitionProjectScanOutcomes, p as resolveProjectSourceFilePaths, r as validateIncludeUntrackedScope, s as discoverWorkspacePackages, t as shouldFailScanGate, u as resolveProjectScan, v as filterScansForSurface, w as launchCliAgent, x as detectLaunchableAgents, y as countUniqueScannedFiles, z as filterDiagnosticsByCategories } from "./should-fail-scan-gate-D4ZKKeXI.js";
8
- import { a as recordGate, f as ONBOARDING_EVENT, n as openUrl, r as isGatePending } from "./report-workflow-result-BSSkdwvd.js";
9
- import { a as useExitOnCtrlC, c as Spinner, d as useInput, f as Transform, h as Box, i as import_react, l as useStdout, m as Text, n as registerMountedTuiRenderer, o as terminalSymbols, p as render, r as useStdoutDimensions, s as isPrintableInput, t as require_jsx_runtime, u as useApp } from "./jsx-runtime-BdBmuS_a.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="adedc16f-0e59-5603-843a-5a4c060e1146")}catch(e){}}();
3
+ import { Bn as sync, Bt as getDiffInfo, C as CI_TRUST_COMPANIES, G as isCiEnvironment, Hn as void_, Jt as isPathInsideDirectory, Kn as succeed, Kt as highlighter, L as TUI_REPORT_COMPACT_MAX_ROWS, Lt as getBaselineDiffPlan, R as TUI_REPORT_DETAIL_WIDTH_FRACTION, Rn as runPromise, Rt as getChangedLineRanges, T as METRIC, Ut as hasPublishedFixRecipe, V as isGitHookEnvironment, ar as DIAGNOSTIC_CATEGORY_BUCKETS, at as Progress, cr as GITHUB_ACTIONS_SETUP_URL, fn as resolveScanTarget, gt as buildRuleDocsUrl, in as mapWithConcurrency, n as recordDistribution, sn as remainingDeadlineBudgetMs, st as Reporter, t as recordCount, vr as getCategoryImpact, xn as yieldToEventLoop, yt as calculateScore } from "./record-metric-BYDiYM_b.js";
4
+ import { M as cliLogger, n as findNearestPackageDirectory } from "./install-doctor-script-ChGM4QXN.js";
5
+ import { i as isReactDoctorWorkflowInstalled } from "./install-github-workflow-W9k2a3Ln.js";
6
+ import { r as resolveScope, s as resolveBlockingLevel, t as finalizeScope, u as toForwardSlashes } from "./resolve-scope-DmNrMvxi.js";
7
+ import { A as resolveMergeBaseRef, B as buildNoScoreMessage, C as copyToClipboard, D as deduplicateProjectScans, E as collectProjectSourceFileCounts, F as printFooter, G as formatFixRecipeLine, H as hasLintHardFailure, I as printDiagnosticsDump, K as formatLearnMoreLine, L as formatDiagnosticSite, M as pluralize, N as formatSkippedCheckLabel, O as createInvocationInspect, P as formatElapsedTime, R as hasIncompleteScoreAnalysis, S as CLI_AGENT_BINARIES, T as buildHandoffPayload, U as buildRulePriorityMap, V as buildEmptyReportMessage, W as buildSortedRuleGroups, _ as resolveCliInspectOptions, a as projectManifestChanged, b as setUpGitHubActions, c as selectProjects, d as resolveProjectChangedLineRanges, f as resolveProjectDiffIncludePaths, g as resolveWorkspaceDeadCodeOwner, h as retryMissingProjectScores, l as buildCodeFrame, n as formatSkippedProjectsMessage, o as partitionProjectScanOutcomes, p as resolveProjectSourceFilePaths, r as validateIncludeUntrackedScope, s as discoverWorkspacePackages, t as shouldFailScanGate, u as resolveProjectScan, v as filterScansForSurface, w as launchCliAgent, x as detectLaunchableAgents, y as countUniqueScannedFiles, z as filterDiagnosticsByCategories } from "./should-fail-scan-gate-gkN0JbKk.js";
8
+ import { a as recordGate, f as ONBOARDING_EVENT, n as openUrl, r as isGatePending } from "./report-workflow-result-BmM8X3fj.js";
9
+ import { a as useExitOnCtrlC, c as Spinner, d as useInput, f as Transform, h as Box, i as import_react, l as useStdout, m as Text, n as registerMountedTuiRenderer, o as terminalSymbols, p as render, r as useStdoutDimensions, s as isPrintableInput, t as require_jsx_runtime, u as useApp } from "./jsx-runtime-BLZlYxX9.js";
10
10
  import path from "node:path";
11
11
  import { performance } from "node:perf_hooks";
12
+ import isUnicodeSupported from "is-unicode-supported";
12
13
  import { getSkillAgentConfig } from "agent-install";
13
14
  //#region src/cli/utils/get-top-error-rule-keys.ts
14
15
  const getTopErrorRuleKeys = (diagnostics, limit, rulePriority) => new Set(buildSortedRuleGroups(diagnostics.filter((diagnostic) => diagnostic.severity === "error"), rulePriority).slice(0, limit).map(([ruleKey]) => ruleKey));
@@ -2041,14 +2042,14 @@ const qualifyDiagnosticPaths = (diagnostics, rootDirectory, projectDirectory) =>
2041
2042
  filePath: toForwardSlashes(path.join(prefix, diagnostic.filePath))
2042
2043
  });
2043
2044
  };
2044
- const resolveScanPresentation = (input, projectScans) => {
2045
+ const resolveScanPresentation = (input, projectScans, rootDirectory) => {
2045
2046
  const isScoreDisabled = input.options?.noScore === true || projectScans.some((projectScan) => projectScan.config?.noScore === true);
2046
2047
  return {
2047
2048
  isOffline: isCiEnvironment() || input.share === false || isShareOptedOut(projectScans, input.options?.noScore),
2048
2049
  initialProgress: projectScans.length > 1 ? "Indexing workspace files…" : "Scanning project…",
2049
2050
  noScoreMessage: buildNoScoreMessage({ isScoreDisabled }),
2050
2051
  outputDirectory: input.options?.outputDirectory,
2051
- shouldRecommendCi: projectScans.length > 1 || projectScans.some((projectScan) => isCiUnconfigured(projectScan.directory)),
2052
+ shouldRecommendCi: isCiUnconfigured(rootDirectory),
2052
2053
  verbose: input.options?.verbose === true
2053
2054
  };
2054
2055
  };
@@ -2223,6 +2224,7 @@ const runMountedScan = async (rootDirectory, presentation, blockingLevel, execut
2223
2224
  const completedScan = await executeScan(context);
2224
2225
  mountedRenderer.dispose();
2225
2226
  mountedRenderer = mountRenderer("report");
2227
+ if (presentation.shouldRecommendCi) recordCount(METRIC.tuiCiRecommendationShown);
2226
2228
  await mountedRenderer.instance.waitUntilExit();
2227
2229
  mountedRenderer.dispose();
2228
2230
  if (presentation.outputDirectory !== void 0 || presentation.verbose) await runPromise(printDiagnosticsDump([...completedScan.diagnostics], presentation.outputDirectory, presentation.verbose));
@@ -2259,7 +2261,7 @@ const runSingleProjectScan = async (rootScanTarget, projectDirectory, input, sco
2259
2261
  process.stdout.write("No changed source files in the selected project.\n");
2260
2262
  return { shouldFail: false };
2261
2263
  }
2262
- const presentation = resolveScanPresentation(input, [projectScan]);
2264
+ const presentation = resolveScanPresentation(input, [projectScan], rootScanTarget.resolvedDirectory);
2263
2265
  return runMountedScan(projectScan.directory, presentation, blockingLevel, async (context) => {
2264
2266
  const result = await inspectProject(projectScan.directory, {
2265
2267
  ...resolveTuiInspectOptions(input, projectScan.config),
@@ -2341,7 +2343,7 @@ const runMultiProjectScan = async (rootScanTarget, directories, input, scopePlan
2341
2343
  isRootDeadCodeEnabled: input.options?.deadCode ?? rootProjectScan?.config?.deadCode ?? true
2342
2344
  });
2343
2345
  if (workspaceDeadCodeOwner !== null) recordCount(METRIC.scanWorkspaceMaintainabilityShared, 1, { projectCount: discoveredProjectScans.length });
2344
- return runMountedScan(rootDirectory, resolveScanPresentation(input, projectScans.map(({ projectScan }) => projectScan)), blockingLevel, async (context) => {
2346
+ return runMountedScan(rootDirectory, resolveScanPresentation(input, projectScans.map(({ projectScan }) => projectScan), rootDirectory), blockingLevel, async (context) => {
2345
2347
  const startTime = performance.now();
2346
2348
  let finishedCount = 0;
2347
2349
  recordDistribution(METRIC.scanFeedbackDelay, performance.now() - feedbackStartTime, {
@@ -2504,5 +2506,5 @@ const runScanApp = async (input) => {
2504
2506
  //#endregion
2505
2507
  export { runScanApp };
2506
2508
 
2507
- //# sourceMappingURL=run-scan-app-Ch6yrLY9.js.map
2508
- //# debugId=0d60aaf0-3d41-5dd4-80b8-39aec4810ef4
2509
+ //# sourceMappingURL=run-scan-app-C0kxQ1fE.js.map
2510
+ //# debugId=adedc16f-0e59-5603-843a-5a4c060e1146
@@ -1,11 +1,11 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="85f97603-96e3-5c6a-9642-f2c62eaed42e")}catch(e){}}();
3
- import { Kt as highlighter, T as METRIC, t as recordCount, u as enableJsonMode, z as CliInputError } from "./record-metric-CdX-TQ5W.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="60942988-b6f4-5700-9764-190812716de1")}catch(e){}}();
3
+ import { Kt as highlighter, T as METRIC, t as recordCount, u as enableJsonMode, z as CliInputError } from "./record-metric-BYDiYM_b.js";
4
4
  import { t as activeScanAbortRegistry } from "./active-scan-abort-registry-DwG6tSPy.js";
5
- import { t as reportErrorToSentry } from "./report-error-DsFo2sAk.js";
6
- import { n as resetSentryRunState, r as withRunSpan } from "./with-run-span-DmpUrF70.js";
7
- import { _ as RUNTIME_SCAN_SNAPSHOT_TIMEOUT_MS, b as RUNTIME_SCAN_TRACING_COMPLETE_TIMEOUT_MS, f as RUNTIME_SCAN_PROBE_RELATIVE_PATH, g as RUNTIME_SCAN_SAFE_CDP_PAGE_URLS, h as RUNTIME_SCAN_PROBE_SNAPSHOT_TOKEN_PLACEHOLDER, l as RUNTIME_SCAN_MAX_SNAPSHOT_PAYLOAD_BYTES, m as RUNTIME_SCAN_PROBE_SNAPSHOT_BINDING_NAME_PLACEHOLDER, n as RUNTIME_SCAN_BROWSER_WIDTH_PX, o as RUNTIME_SCAN_MAX_COMPONENT_EVENTS, p as RUNTIME_SCAN_PROBE_SNAPSHOT_ATTRIBUTE_NAME_PLACEHOLDER, r as RUNTIME_SCAN_CONTROL_CHARACTERS_PATTERN, s as RUNTIME_SCAN_MAX_RECORDING_DURATION_MS, t as sanitizeRuntimeUrl, v as RUNTIME_SCAN_TRACE_CATEGORIES, y as RUNTIME_SCAN_TRACE_FILE_EXTENSION } from "./sanitize-runtime-url-Dwa_-IKX.js";
8
- import { r as resolveTuiEnvironment, t as isTuiEnvironmentSupported } from "./should-use-tui-COX1uZWn.js";
5
+ import { t as reportErrorToSentry } from "./report-error-C4MUPAvk.js";
6
+ import { n as resetSentryRunState, r as withRunSpan } from "./with-run-span-YnjkCzXg.js";
7
+ import { _ as RUNTIME_SCAN_SNAPSHOT_TIMEOUT_MS, b as RUNTIME_SCAN_TRACING_COMPLETE_TIMEOUT_MS, f as RUNTIME_SCAN_PROBE_RELATIVE_PATH, g as RUNTIME_SCAN_SAFE_CDP_PAGE_URLS, h as RUNTIME_SCAN_PROBE_SNAPSHOT_TOKEN_PLACEHOLDER, l as RUNTIME_SCAN_MAX_SNAPSHOT_PAYLOAD_BYTES, m as RUNTIME_SCAN_PROBE_SNAPSHOT_BINDING_NAME_PLACEHOLDER, n as RUNTIME_SCAN_BROWSER_WIDTH_PX, o as RUNTIME_SCAN_MAX_COMPONENT_EVENTS, p as RUNTIME_SCAN_PROBE_SNAPSHOT_ATTRIBUTE_NAME_PLACEHOLDER, r as RUNTIME_SCAN_CONTROL_CHARACTERS_PATTERN, s as RUNTIME_SCAN_MAX_RECORDING_DURATION_MS, t as sanitizeRuntimeUrl, v as RUNTIME_SCAN_TRACE_CATEGORIES, y as RUNTIME_SCAN_TRACE_FILE_EXTENSION } from "./sanitize-runtime-url-DYlUQwKR.js";
8
+ import { r as resolveTuiEnvironment, t as isTuiEnvironmentSupported } from "./should-use-tui-DDV9EXki.js";
9
9
  import * as path$1 from "node:path";
10
10
  import * as fs$1 from "node:fs";
11
11
  import { randomUUID } from "node:crypto";
@@ -719,7 +719,7 @@ const resolveRuntimeScanUrl = async (url) => {
719
719
  if (url !== void 0) return url;
720
720
  if (!isTuiEnvironmentSupported(resolveTuiEnvironment(process.stderr.isTTY === true))) throw new CliInputError("A URL is required outside an interactive terminal. Run `react-doctor scan <url>`.");
721
721
  recordCount(METRIC.runtimeScanUrlPromptShown);
722
- const { promptRuntimeScanUrl } = await import("./prompt-runtime-scan-url-CXJMNnAo.js");
722
+ const { promptRuntimeScanUrl } = await import("./prompt-runtime-scan-url-y1gsTi9R.js");
723
723
  return promptRuntimeScanUrl();
724
724
  };
725
725
  const runtimeScanAction = async (url, flags) => {
@@ -766,5 +766,5 @@ const runtimeScanAction = async (url, flags) => {
766
766
  //#endregion
767
767
  export { runtimeScanAction };
768
768
 
769
- //# sourceMappingURL=runtime-scan-Crfe35Ke.js.map
770
- //# debugId=85f97603-96e3-5c6a-9642-f2c62eaed42e
769
+ //# sourceMappingURL=runtime-scan-D_r84DrL.js.map
770
+ //# debugId=60942988-b6f4-5700-9764-190812716de1
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="df411abd-fcaa-5c70-9bdf-e2daf2bcda7d")}catch(e){}}();
3
- import { z as CliInputError } from "./record-metric-CdX-TQ5W.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="387d0afa-144a-5ee4-a57a-6f9c7b85884b")}catch(e){}}();
3
+ import { z as CliInputError } from "./record-metric-BYDiYM_b.js";
4
4
  //#region src/cli/runtime-scan/constants.ts
5
5
  const RUNTIME_SCAN_MAX_COMPONENT_EVENTS = 2e3;
6
6
  const RUNTIME_SCAN_MAX_SNAPSHOT_PAYLOAD_BYTES = 5 * 1024 * 1024;
@@ -72,5 +72,5 @@ const sanitizeRuntimeUrl = (rawUrl) => {
72
72
  //#endregion
73
73
  export { RUNTIME_SCAN_SNAPSHOT_TIMEOUT_MS as _, RUNTIME_SCAN_LOCAL_DEV_PORTS as a, RUNTIME_SCAN_TRACING_COMPLETE_TIMEOUT_MS as b, RUNTIME_SCAN_MAX_SNAPSHOT_BYTES as c, RUNTIME_SCAN_MAX_TRACE_BYTES as d, RUNTIME_SCAN_PROBE_RELATIVE_PATH as f, RUNTIME_SCAN_SAFE_CDP_PAGE_URLS as g, RUNTIME_SCAN_PROBE_SNAPSHOT_TOKEN_PLACEHOLDER as h, RUNTIME_SCAN_LAYOUT_THRASH_RATIO as i, RUNTIME_SCAN_MAX_SNAPSHOT_PAYLOAD_BYTES as l, RUNTIME_SCAN_PROBE_SNAPSHOT_BINDING_NAME_PLACEHOLDER as m, RUNTIME_SCAN_BROWSER_WIDTH_PX as n, RUNTIME_SCAN_MAX_COMPONENT_EVENTS as o, RUNTIME_SCAN_PROBE_SNAPSHOT_ATTRIBUTE_NAME_PLACEHOLDER as p, RUNTIME_SCAN_CONTROL_CHARACTERS_PATTERN as r, RUNTIME_SCAN_MAX_RECORDING_DURATION_MS as s, sanitizeRuntimeUrl as t, RUNTIME_SCAN_MAX_STRING_LENGTH as u, RUNTIME_SCAN_TRACE_CATEGORIES as v, RUNTIME_SCAN_TRACE_FILE_EXTENSION as y };
74
74
 
75
- //# sourceMappingURL=sanitize-runtime-url-Dwa_-IKX.js.map
76
- //# debugId=df411abd-fcaa-5c70-9bdf-e2daf2bcda7d
75
+ //# sourceMappingURL=sanitize-runtime-url-DYlUQwKR.js.map
76
+ //# debugId=387d0afa-144a-5ee4-a57a-6f9c7b85884b
@@ -1,10 +1,10 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="74ccb0f0-7e4a-518b-919c-a1b3e7ae69e3")}catch(e){}}();
3
- import { T as METRIC, fn as resolveScanTarget, t as recordCount } from "./record-metric-CdX-TQ5W.js";
4
- import { i as warnDeprecatedDiff } from "./resolve-scope-DRnGmF8O.js";
5
- import { _ as resolveCliInspectOptions, i as validateModeFlags } from "./should-fail-scan-gate-D4ZKKeXI.js";
6
- import { n as warnDeprecatedFailOn, r as runProjectMigrations, t as inspectAction } from "./inspect-BLX566wA.js";
7
- import { n as shouldUseTui, r as resolveTuiEnvironment } from "./should-use-tui-COX1uZWn.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="555509ad-e1fa-57fa-a475-6611d4321c4f")}catch(e){}}();
3
+ import { T as METRIC, fn as resolveScanTarget, t as recordCount } from "./record-metric-BYDiYM_b.js";
4
+ import { i as warnDeprecatedDiff } from "./resolve-scope-DmNrMvxi.js";
5
+ import { _ as resolveCliInspectOptions, i as validateModeFlags } from "./should-fail-scan-gate-gkN0JbKk.js";
6
+ import { n as warnDeprecatedFailOn, r as runProjectMigrations, t as inspectAction } from "./inspect-DS-8JQ7-.js";
7
+ import { n as shouldUseTui, r as resolveTuiEnvironment } from "./should-use-tui-DDV9EXki.js";
8
8
  import path from "node:path";
9
9
  //#region src/cli/commands/scan.ts
10
10
  const runScanCommand = async (input) => {
@@ -22,7 +22,7 @@ const runScanCommand = async (input) => {
22
22
  warnDeprecatedFailOn(input.flags, scanTarget.userConfig);
23
23
  warnDeprecatedDiff(input.flags, scanTarget.userConfig);
24
24
  recordCount(METRIC.cliInvoked, 1, { command: input.invocationCommand });
25
- const { runScanApp } = await import("./run-scan-app-Ch6yrLY9.js");
25
+ const { runScanApp } = await import("./run-scan-app-C0kxQ1fE.js");
26
26
  const { shouldFail } = await runScanApp({
27
27
  directory: input.directory,
28
28
  scanTarget,
@@ -37,5 +37,5 @@ const runScanCommand = async (input) => {
37
37
  //#endregion
38
38
  export { runScanCommand };
39
39
 
40
- //# sourceMappingURL=scan-DJnhifws.js.map
41
- //# debugId=74ccb0f0-7e4a-518b-919c-a1b3e7ae69e3
40
+ //# sourceMappingURL=scan-CRyEeC82.js.map
41
+ //# debugId=555509ad-e1fa-57fa-a475-6611d4321c4f
@@ -1,14 +1,14 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0a44b6c3-1523-5cd2-bb59-5ec84fb75ccb")}catch(e){}}();
3
- import { $ as Linter, A as SCAN_RESULT_CACHE_FILENAME, An as gen, At as discoverSupportedSubprojects, B as isNonInteractiveEnvironment, Bn as sync, Cn as error, Ct as collectSourceFileCountsByDirectory, Dn as Diagnostic, Dt as createNodeReadFileLinesSync, En as warn, Et as countOptInProjectRuleSelections, Fn as provide, G as isCiEnvironment, Gt as hashFileContents, Ht as groupBy, In as provideContext, J as Config, Jt as isPathInsideDirectory, K as isCiOrCodingAgentEnvironment, Kn as succeed, Kt as highlighter, Ln as provideService, Mn as map, Mt as filterPathsOutsideDirectories, Nn as orElseSucceed, Nt as filterSourceFiles, On as decodeUnknownSync, Ot as createOxlintSpawnSlots, Pn as promise, Q as LintPartialFailures, Qt as isScanComplete, Rn as runPromise, S as BASELINE_FILES_TEMP_DIR_PREFIX, Sn as Console, T as METRIC, Tn as log, Tt as computeDiagnosticDelta, U as ACTION_INPUT_ENVIRONMENT_VARIABLES, Ut as hasPublishedFixRecipe, Vn as try_, W as detectRunnerOs, Wn as mergeAll, X as Git, Xt as isReactDoctorError, Y as Files, Zn as ParentSpan, _ as VERSION, _n as shouldUseMaintainabilityLayer, _t as buildRuleSeverityControls, an as materializeSourceTree, ar as DIAGNOSTIC_CATEGORY_BUCKETS, at as Progress, bt as canonicalizeUserRuleKey, cn as resolveGithubActionsScoreMetadata, ct as Score, d as isJsonModeActive, dn as resolveScanConcurrency, dr as JSX_DUPLICATION_SOURCE_FILE_PATTERN, dt as SupplyChain, en as listSourceFiles, et as Maintainability, fn as resolveScanTarget, fr as JSX_FILE_PATTERN, gt as buildRuleDocsUrl, hr as SHARE_BASE_URL, in as mapWithConcurrency, it as PerFileLintCacheEnabled, jt as filterDiagnosticsForSurface, l as getRunId, ln as resolveLintBatchOrdering, lr as GIT_SHOW_MAX_BUFFER_BYTES, lt as SidecarLintCacheEnabled, mn as runInspect, mr as OXLINT_NODE_REQUIREMENT, mt as atomicWriteJson, n as recordDistribution, nn as listWorkspacePackages, nt as OxlintConcurrency, on as mergeReactDoctorConfigs, ot as Project, pn as restoreLegacyThrow, pr as MILLISECONDS_PER_SECOND, qt as isMonorepoRoot, r as toSpanAttributes, rt as OxlintSpawnSlots, sn as remainingDeadlineBudgetMs, sr as ENTERPRISE_CONTACT_URL, st as Reporter, t as recordCount, tn as listSourceFilesCooperative, tr as CI_URL, tt as NodeResolver, un as resolveReactDoctorCacheDir, ur as HTML_FILE_PATTERN, v as makeNoopConsole, vn as summarizeDiagnostics, vt as buildSkippedChecks, wt as computeConfigFingerprint, xn as yieldToEventLoop, xr as isFile, xt as classifyFileContext, yr as isDirectory, yt as calculateScore, z as CliInputError, zn as runSync, zt as getDiagnosticRuleIdentity } from "./record-metric-CdX-TQ5W.js";
4
- import { t as getTelemetryContext } from "./telemetry-runtime-C_D70xUE.js";
5
- import { n as buildFooterLinkLines, t as buildSectionDivider } from "./build-section-divider-D5ATBfDJ.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6f5cf4c3-b024-507f-b32b-249fd04e97a6")}catch(e){}}();
3
+ import { $ as Linter, A as SCAN_RESULT_CACHE_FILENAME, An as gen, At as discoverSupportedSubprojects, B as isNonInteractiveEnvironment, Bn as sync, Cn as error, Ct as collectSourceFileCountsByDirectory, Dn as Diagnostic, Dt as createNodeReadFileLinesSync, En as warn, Et as countOptInProjectRuleSelections, Fn as provide, G as isCiEnvironment, Gt as hashFileContents, Ht as groupBy, In as provideContext, J as Config, Jt as isPathInsideDirectory, K as isCiOrCodingAgentEnvironment, Kn as succeed, Kt as highlighter, Ln as provideService, Mn as map, Mt as filterPathsOutsideDirectories, Nn as orElseSucceed, Nt as filterSourceFiles, On as decodeUnknownSync, Ot as createOxlintSpawnSlots, Pn as promise, Q as LintPartialFailures, Qt as isScanComplete, Rn as runPromise, S as BASELINE_FILES_TEMP_DIR_PREFIX, Sn as Console, T as METRIC, Tn as log, Tt as computeDiagnosticDelta, U as ACTION_INPUT_ENVIRONMENT_VARIABLES, Ut as hasPublishedFixRecipe, Vn as try_, W as detectRunnerOs, Wn as mergeAll, X as Git, Xt as isReactDoctorError, Y as Files, Zn as ParentSpan, _ as VERSION, _n as shouldUseMaintainabilityLayer, _t as buildRuleSeverityControls, an as materializeSourceTree, ar as DIAGNOSTIC_CATEGORY_BUCKETS, at as Progress, bt as canonicalizeUserRuleKey, cn as resolveGithubActionsScoreMetadata, ct as Score, d as isJsonModeActive, dn as resolveScanConcurrency, dr as JSX_DUPLICATION_SOURCE_FILE_PATTERN, dt as SupplyChain, en as listSourceFiles, et as Maintainability, fn as resolveScanTarget, fr as JSX_FILE_PATTERN, gt as buildRuleDocsUrl, hr as SHARE_BASE_URL, in as mapWithConcurrency, it as PerFileLintCacheEnabled, jt as filterDiagnosticsForSurface, l as getRunId, ln as resolveLintBatchOrdering, lr as GIT_SHOW_MAX_BUFFER_BYTES, lt as SidecarLintCacheEnabled, mn as runInspect, mr as OXLINT_NODE_REQUIREMENT, mt as atomicWriteJson, n as recordDistribution, nn as listWorkspacePackages, nt as OxlintConcurrency, on as mergeReactDoctorConfigs, ot as Project, pn as restoreLegacyThrow, pr as MILLISECONDS_PER_SECOND, qt as isMonorepoRoot, r as toSpanAttributes, rt as OxlintSpawnSlots, sn as remainingDeadlineBudgetMs, sr as ENTERPRISE_CONTACT_URL, st as Reporter, t as recordCount, tn as listSourceFilesCooperative, tr as CI_URL, tt as NodeResolver, un as resolveReactDoctorCacheDir, ur as HTML_FILE_PATTERN, v as makeNoopConsole, vn as summarizeDiagnostics, vt as buildSkippedChecks, wt as computeConfigFingerprint, xn as yieldToEventLoop, xr as isFile, xt as classifyFileContext, yr as isDirectory, yt as calculateScore, z as CliInputError, zn as runSync, zt as getDiagnosticRuleIdentity } from "./record-metric-BYDiYM_b.js";
4
+ import { t as getTelemetryContext } from "./telemetry-runtime-DcXXRI22.js";
5
+ import { n as buildFooterLinkLines, t as buildSectionDivider } from "./build-section-divider-ho4tkWUX.js";
6
6
  import { t as activeScanAbortRegistry } from "./active-scan-abort-registry-DwG6tSPy.js";
7
- import { A as runGit, C as getPackageJsonPath, N as cliLogger, a as installReactDoctorScriptStep, c as spinner, n as findNearestPackageDirectory, o as isSpinnerSilent, s as setSpinnerSilent, w as isRecord } from "./install-doctor-script-CjxGMzIH.js";
8
- import { d as detectDefaultBranch, l as prompts, r as installReactDoctorWorkflow, u as isCommandAvailable } from "./install-github-workflow-eYmQoXdI.js";
9
- import { a as isValidBlockingLevel, c as openWorkflowPullRequest, l as stageWorkflowFile, o as pickBlockingLevel, u as toForwardSlashes } from "./resolve-scope-DRnGmF8O.js";
10
- import { n as resetSentryRunState, r as withRunSpan, t as recordSentryProjectContext } from "./with-run-span-DmpUrF70.js";
11
- import { h as detectAvailableAgents, t as reportWorkflowResult } from "./report-workflow-result-BSSkdwvd.js";
7
+ import { C as isRecord, M as cliLogger, S as getPackageJsonPath, a as installReactDoctorScriptStep, c as spinner, k as runGit, n as findNearestPackageDirectory, o as isSpinnerSilent, s as setSpinnerSilent } from "./install-doctor-script-ChGM4QXN.js";
8
+ import { d as detectDefaultBranch, l as prompts, r as installReactDoctorWorkflow, u as isCommandAvailable } from "./install-github-workflow-W9k2a3Ln.js";
9
+ import { a as isValidBlockingLevel, c as openWorkflowPullRequest, l as stageWorkflowFile, o as pickBlockingLevel, u as toForwardSlashes } from "./resolve-scope-DmNrMvxi.js";
10
+ import { n as resetSentryRunState, r as withRunSpan, t as recordSentryProjectContext } from "./with-run-span-YnjkCzXg.js";
11
+ import { h as detectAvailableAgents, t as reportWorkflowResult } from "./report-workflow-result-BmM8X3fj.js";
12
12
  import { createRequire } from "node:module";
13
13
  import { spawn } from "node:child_process";
14
14
  import * as path$1 from "node:path";
@@ -2997,5 +2997,5 @@ const shouldFailScanGate = (input) => {
2997
2997
  //#endregion
2998
2998
  export { resolveMergeBaseRef as A, buildNoScoreMessage as B, copyToClipboard as C, deduplicateProjectScans as D, collectProjectSourceFileCounts as E, printFooter as F, formatFixRecipeLine as G, hasLintHardFailure as H, printDiagnosticsDump as I, formatLearnMoreLine as K, formatDiagnosticSite as L, pluralize as M, formatSkippedCheckLabel as N, createInvocationInspect as O, formatElapsedTime as P, hasIncompleteScoreAnalysis as R, CLI_AGENT_BINARIES as S, buildHandoffPayload as T, buildRulePriorityMap as U, buildEmptyReportMessage as V, buildSortedRuleGroups as W, resolveCliInspectOptions as _, projectManifestChanged as a, setUpGitHubActions as b, selectProjects as c, resolveProjectChangedLineRanges as d, resolveProjectDiffIncludePaths as f, resolveWorkspaceDeadCodeOwner as g, retryMissingProjectScores as h, validateModeFlags as i, printHeadlessReport as j, inspect as k, buildCodeFrame as l, resolveProjectRelativeDirectory as m, formatSkippedProjectsMessage as n, partitionProjectScanOutcomes as o, resolveProjectSourceFilePaths as p, validateIncludeUntrackedScope as r, discoverWorkspacePackages as s, shouldFailScanGate as t, resolveProjectScan as u, filterScansForSurface as v, launchCliAgent as w, detectLaunchableAgents as x, countUniqueScannedFiles as y, filterDiagnosticsByCategories as z };
2999
2999
 
3000
- //# sourceMappingURL=should-fail-scan-gate-D4ZKKeXI.js.map
3001
- //# debugId=0a44b6c3-1523-5cd2-bb59-5ec84fb75ccb
3000
+ //# sourceMappingURL=should-fail-scan-gate-gkN0JbKk.js.map
3001
+ //# debugId=6f5cf4c3-b024-507f-b32b-249fd04e97a6
@@ -1,10 +1,10 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ff0dd2a0-b107-553c-a7c5-62790b3cf8a4")}catch(e){}}();
3
- import { B as isNonInteractiveEnvironment } from "./record-metric-CdX-TQ5W.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3dfb5630-bef1-5a90-a8ab-d4c17f5197b4")}catch(e){}}();
3
+ import { B as isNonInteractiveEnvironment } from "./record-metric-BYDiYM_b.js";
4
4
  //#region src/cli/utils/should-skip-prompts.ts
5
5
  const shouldSkipPrompts = (input = {}) => Boolean(input.yes) || Boolean(input.json) || isNonInteractiveEnvironment() || !process.stdin.isTTY;
6
6
  //#endregion
7
7
  export { shouldSkipPrompts as t };
8
8
 
9
- //# sourceMappingURL=should-skip-prompts-Cfocoh7G.js.map
10
- //# debugId=ff0dd2a0-b107-553c-a7c5-62790b3cf8a4
9
+ //# sourceMappingURL=should-skip-prompts-Da6drkx_.js.map
10
+ //# debugId=3dfb5630-bef1-5a90-a8ab-d4c17f5197b4
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c6be05cb-e231-595a-b8fb-efd6c4db0cdb")}catch(e){}}();
3
- import { B as isNonInteractiveEnvironment } from "./record-metric-CdX-TQ5W.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a6dc61e6-fc17-5a6d-977e-145d62174f8a")}catch(e){}}();
3
+ import { B as isNonInteractiveEnvironment } from "./record-metric-BYDiYM_b.js";
4
4
  //#region src/cli/utils/resolve-tui-environment.ts
5
5
  const resolveTuiEnvironment = (outputIsTty = process.stdout.isTTY === true) => ({
6
6
  isNonInteractiveEnvironment: isNonInteractiveEnvironment(),
@@ -21,5 +21,5 @@ const shouldUseTui = (input) => {
21
21
  //#endregion
22
22
  export { shouldUseTui as n, resolveTuiEnvironment as r, isTuiEnvironmentSupported as t };
23
23
 
24
- //# sourceMappingURL=should-use-tui-COX1uZWn.js.map
25
- //# debugId=c6be05cb-e231-595a-b8fb-efd6c4db0cdb
24
+ //# sourceMappingURL=should-use-tui-DDV9EXki.js.map
25
+ //# debugId=a6dc61e6-fc17-5a6d-977e-145d62174f8a
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a9b5c445-c22a-500c-b5bf-9a0408b96e50")}catch(e){}}();
3
- import { $t as layerObservability, Cr as messageFromUnknown, Jn as makeUnsafe, Rn as runPromise, Un as buildWithScope, Xn as void_, Xt as isReactDoctorError, Yt as isProjectDiscoveryError, _ as VERSION, br as isErrnoException, i as isTelemetryEnabled, kn as make, qn as close, z as CliInputError, zn as runSync } from "./record-metric-CdX-TQ5W.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="136a635c-3b4d-5466-a6dc-acb41cfedf5f")}catch(e){}}();
3
+ import { $t as layerObservability, Cr as messageFromUnknown, Jn as makeUnsafe, Rn as runPromise, Un as buildWithScope, Xn as void_, Xt as isReactDoctorError, Yt as isProjectDiscoveryError, _ as VERSION, br as isErrnoException, i as isTelemetryEnabled, kn as make, qn as close, z as CliInputError, zn as runSync } from "./record-metric-BYDiYM_b.js";
4
4
  //#region src/cli/utils/is-environment-error.ts
5
5
  const ENVIRONMENT_ERROR_CODES = new Set([
6
6
  "EACCES",
@@ -61,6 +61,51 @@ const formatEnvironmentError = (error) => {
61
61
  }
62
62
  };
63
63
  //#endregion
64
+ //#region src/cli/utils/is-npm-cache-corruption-error.ts
65
+ const MISSING_AJV_META_SCHEMA_MESSAGES = new Set(["Cannot find module './meta/unevaluated.json'", "Cannot find module './meta/validation.json'"]);
66
+ const NPX_AJV_META_SCHEMA_REQUIRE_PATH_PATTERN = /(?:^|\/)_npx\/(?<cacheKey>[a-f0-9]{16})\/node_modules\/ajv\/dist\/refs\/json-schema-2020-12\/index\.js$/;
67
+ const isModuleNotFoundError = (error) => error instanceof Error && "code" in error && error.code === "MODULE_NOT_FOUND";
68
+ const findNpmCacheCorruptionError = (error) => {
69
+ const pendingErrors = [error];
70
+ const visitedErrors = /* @__PURE__ */ new Set();
71
+ while (pendingErrors.length > 0) {
72
+ const currentError = pendingErrors.pop();
73
+ if (typeof currentError !== "object" || currentError === null) continue;
74
+ if (visitedErrors.has(currentError)) continue;
75
+ visitedErrors.add(currentError);
76
+ if (isModuleNotFoundError(currentError)) {
77
+ const [message] = currentError.message.split("\n");
78
+ if (message && MISSING_AJV_META_SCHEMA_MESSAGES.has(message)) {
79
+ const requireStack = Array.isArray(currentError.requireStack) ? currentError.requireStack : [];
80
+ for (const requirePath of requireStack) {
81
+ if (typeof requirePath !== "string") continue;
82
+ const cacheKey = requirePath.replaceAll("\\", "/").match(NPX_AJV_META_SCHEMA_REQUIRE_PATH_PATTERN)?.groups?.cacheKey;
83
+ if (cacheKey !== void 0) return {
84
+ cacheKey,
85
+ moduleNotFoundError: currentError
86
+ };
87
+ }
88
+ }
89
+ }
90
+ if (currentError instanceof Error && currentError.cause !== void 0) pendingErrors.push(currentError.cause);
91
+ }
92
+ return null;
93
+ };
94
+ const isNpmCacheCorruptionError = (error) => findNpmCacheCorruptionError(error) !== null;
95
+ const formatNpmCacheCorruptionError = (error) => {
96
+ const corruptionMatch = findNpmCacheCorruptionError(error);
97
+ if (!corruptionMatch) return messageFromUnknown(error);
98
+ return [
99
+ "The npx cache has an incomplete Ajv installation.",
100
+ "",
101
+ "Remove this cache entry, then run React Doctor again:",
102
+ ` npm cache npx rm ${corruptionMatch.cacheKey}`,
103
+ " npx react-doctor@latest",
104
+ "",
105
+ `Original error: ${corruptionMatch.moduleNotFoundError.message}`
106
+ ].join("\n");
107
+ };
108
+ //#endregion
64
109
  //#region src/cli/utils/is-expected-user-error.ts
65
110
  /**
66
111
  * Whether `error` is an expected, user-actionable failure — the user's project
@@ -69,7 +114,7 @@ const formatEnvironmentError = (error) => {
69
114
  * `handleUserError` (a plain message — no "Something went wrong", prefilled
70
115
  * issue, Discord link, or Sentry reference), since there is no bug to report.
71
116
  *
72
- * Four distinct shapes reach the CLI's catch blocks:
117
+ * Five distinct shapes reach the CLI's catch blocks:
73
118
  *
74
119
  * - **Project-discovery failures** (`NoReactDependencyError`,
75
120
  * `ProjectNotFoundError`, `PackageJsonNotFoundError`, `NotADirectoryError`,
@@ -89,12 +134,15 @@ const formatEnvironmentError = (error) => {
89
134
  * actionable message instead of crashing. See `is-environment-error.ts` for
90
135
  * why the set stays narrow (codes that usually mean our bug keep reaching
91
136
  * Sentry).
137
+ * - **npm cache corruption** (missing Ajv meta-schema files inside `_npx`) —
138
+ * an incomplete npx package installation that the user can remove and
139
+ * reinstall.
92
140
  *
93
141
  * This composes the existing core narrowers rather than introducing a new
94
142
  * error-shape helper (AGENTS.md): it encodes CLI-layer reporting policy, not
95
143
  * knowledge of the `ReactDoctorError` shape.
96
144
  */
97
- const isExpectedUserError = (error) => error instanceof CliInputError || isProjectDiscoveryError(error) || isEnvironmentError(error) || isReactDoctorError(error) && (error.reason._tag === "GitBaseBranchInvalid" || error.reason._tag === "GitBaseBranchMissing");
145
+ const isExpectedUserError = (error) => error instanceof CliInputError || isProjectDiscoveryError(error) || isEnvironmentError(error) || isNpmCacheCorruptionError(error) || isReactDoctorError(error) && (error.reason._tag === "GitBaseBranchInvalid" || error.reason._tag === "GitBaseBranchMissing");
98
146
  //#endregion
99
147
  //#region src/cli/utils/resolve-axiom-telemetry-options.ts
100
148
  /**
@@ -197,7 +245,7 @@ const shutdownTelemetry = async () => {
197
245
  return pendingShutdown;
198
246
  };
199
247
  //#endregion
200
- export { isEnvironmentError as a, formatEnvironmentError as i, shutdownTelemetry as n, isExpectedUserError as r, getTelemetryContext as t };
248
+ export { isNpmCacheCorruptionError as a, formatNpmCacheCorruptionError as i, shutdownTelemetry as n, formatEnvironmentError as o, isExpectedUserError as r, isEnvironmentError as s, getTelemetryContext as t };
201
249
 
202
- //# sourceMappingURL=telemetry-runtime-C_D70xUE.js.map
203
- //# debugId=a9b5c445-c22a-500c-b5bf-9a0408b96e50
250
+ //# sourceMappingURL=telemetry-runtime-DcXXRI22.js.map
251
+ //# debugId=136a635c-3b4d-5466-a6dc-acb41cfedf5f
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="77d0b1cf-2a1f-5102-98e1-2e9b88ce191e")}catch(e){}}();
3
- import { T as METRIC, _ as VERSION, t as recordCount } from "./record-metric-CdX-TQ5W.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b9db7a51-af3e-5cc3-975b-9a8f74f1d529")}catch(e){}}();
3
+ import { T as METRIC, _ as VERSION, t as recordCount } from "./record-metric-BYDiYM_b.js";
4
4
  //#region src/cli/commands/version.ts
5
5
  /**
6
6
  * oclif-style version line. 12-factor CLI Apps (#3, "What version am I
@@ -17,5 +17,5 @@ const versionAction = () => {
17
17
  //#endregion
18
18
  export { versionAction };
19
19
 
20
- //# sourceMappingURL=version-BAhd6Zvv.js.map
21
- //# debugId=77d0b1cf-2a1f-5102-98e1-2e9b88ce191e
20
+ //# sourceMappingURL=version-D4fL3PrW.js.map
21
+ //# debugId=b9db7a51-af3e-5cc3-975b-9a8f74f1d529
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="62ecf6d9-96bd-5189-9676-06f09f4cf53e")}catch(e){}}();
3
- import { t as inspectAction } from "./inspect-BLX566wA.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c7ce5171-bfac-57ac-be69-1010ab2722dd")}catch(e){}}();
3
+ import { t as inspectAction } from "./inspect-DS-8JQ7-.js";
4
4
  //#region src/cli/commands/why.ts
5
5
  /**
6
6
  * `why <file:line>` — explains why a rule fired (or why a suppression didn't
@@ -17,5 +17,5 @@ const whyAction = async (location, options) => {
17
17
  //#endregion
18
18
  export { whyAction };
19
19
 
20
- //# sourceMappingURL=why-MQHWHpeA.js.map
21
- //# debugId=62ecf6d9-96bd-5189-9676-06f09f4cf53e
20
+ //# sourceMappingURL=why-quSmktoh.js.map
21
+ //# debugId=c7ce5171-bfac-57ac-be69-1010ab2722dd
@@ -1,7 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="99f78b5c-a5e4-5b46-99ce-3c357c7d2199")}catch(e){}}();
3
- import { D as NANOSECONDS_PER_MILLISECOND, In as provideContext, Xn as void_, Yn as fail, c as setSentryProjectInfo, jn as makeSpan, o as buildSentryScope, r as toSpanAttributes, s as buildSentryProjectContext, zn as runSync } from "./record-metric-CdX-TQ5W.js";
4
- import { t as getTelemetryContext } from "./telemetry-runtime-C_D70xUE.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="42e8e077-db9b-515c-9e98-d3c2f078f8fd")}catch(e){}}();
3
+ import { D as NANOSECONDS_PER_MILLISECOND, In as provideContext, Xn as void_, Yn as fail, c as setSentryProjectInfo, jn as makeSpan, o as buildSentryScope, r as toSpanAttributes, s as buildSentryProjectContext, zn as runSync } from "./record-metric-BYDiYM_b.js";
4
+ import { t as getTelemetryContext } from "./telemetry-runtime-DcXXRI22.js";
5
5
  import { i as setActiveRunTrace, r as recordRunTraceId } from "./active-run-trace-dlIZeEvb.js";
6
6
  //#region src/cli/utils/with-run-span.ts
7
7
  /**
@@ -106,5 +106,5 @@ const recordSentryProjectContext = (projectInfo, rootSpan, options = {}) => {
106
106
  //#endregion
107
107
  export { resetSentryRunState as n, withRunSpan as r, recordSentryProjectContext as t };
108
108
 
109
- //# sourceMappingURL=with-run-span-DmpUrF70.js.map
110
- //# debugId=99f78b5c-a5e4-5b46-99ce-3c357c7d2199
109
+ //# sourceMappingURL=with-run-span-YnjkCzXg.js.map
110
+ //# debugId=42e8e077-db9b-515c-9e98-d3c2f078f8fd
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-doctor",
3
- "version": "0.9.12-dev.905607f",
3
+ "version": "0.9.12-dev.9f7d26f",
4
4
  "description": "Your agent writes bad React. This catches it",
5
5
  "keywords": [
6
6
  "accessibility",
@@ -57,6 +57,7 @@
57
57
  "conf": "^15.1.0",
58
58
  "confbox": "^0.2.4",
59
59
  "eslint-plugin-react-hooks": "^7.1.1",
60
+ "is-unicode-supported": "^2.1.0",
60
61
  "jiti": "^2.7.0",
61
62
  "magicast": "^0.5.3",
62
63
  "oxc-parser": "^0.146.0",
@@ -67,7 +68,7 @@
67
68
  "typescript": ">=5.0.4 <6",
68
69
  "yaml": "^2.9.0",
69
70
  "yoga-layout": "~3.2.1",
70
- "oxlint-plugin-react-doctor": "0.9.12-dev.905607f"
71
+ "oxlint-plugin-react-doctor": "0.9.12-dev.9f7d26f"
71
72
  },
72
73
  "devDependencies": {
73
74
  "@types/babel__code-frame": "^7.27.0",