react-doctor 0.9.14 → 0.9.15-dev.23d6160

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 (59) hide show
  1. package/README.md +3 -0
  2. package/dist/_react-doctor_require-typescript-DXQDYeWK.js +16 -0
  3. package/dist/{active-run-trace-dlIZeEvb.js → active-run-trace-Dewycxda.js} +3 -3
  4. package/dist/{active-scan-abort-registry-B72ASBUh.js → active-scan-abort-registry-CCTgal0O.js} +3 -3
  5. package/dist/{build-section-divider-8DpL5BjN.js → build-section-divider-Bt7znRi8.js} +5 -4
  6. package/dist/{ci-DH_jkNS4.js → ci-vktx9bIK.js} +14 -13
  7. package/dist/cli.js +32 -29
  8. package/dist/constants-DJ3RtEMu.js +1035 -0
  9. package/dist/{constants-CKOk_Fa9.js → constants-DNh19qg9.js} +3 -3
  10. package/dist/{design-DR72z3tB.js → design-CH3L5hSZ.js} +4 -4
  11. package/dist/{devtools-DOdrAPkZ.js → devtools-D20sefkm.js} +3 -3
  12. package/dist/duplicate-jsx-worker.js +62 -62
  13. package/dist/{exit-gracefully-BP0lJPao.js → exit-gracefully-Y5XyTvxu.js} +7 -7
  14. package/dist/fs-utils-C88IbqFa.js +45 -0
  15. package/dist/{get-east-asian-width-CM5BOEC-.js → get-east-asian-width-DRPy7dqz.js} +4 -4
  16. package/dist/{handle-error-BO7AUOeO.js → handle-error-8NlzFVoW.js} +6 -5
  17. package/dist/index.d.ts +8511 -8509
  18. package/dist/index.js +12734 -12338
  19. package/dist/{inspect-CtwjUwiF.js → inspect-Cs2Ojloa.js} +28 -21
  20. package/dist/{install-DAwHDunN.js → install-C4JkqZoO.js} +10 -9
  21. package/dist/{install-doctor-script-DousNjwa.js → install-doctor-script-Dr4O5HID.js} +17 -8
  22. package/dist/{install-github-workflow-DNfyCbSd.js → install-github-workflow-Dtf07ISQ.js} +10 -10
  23. package/dist/{install-react-doctor-CofgPrzS.js → install-react-doctor-Bi_Dav6m.js} +15 -11
  24. package/dist/is-cache-globally-disabled-De19063F.js +10 -0
  25. package/dist/{jsx-runtime-Dv_yWxfg.js → jsx-runtime-CND_0px2.js} +11 -10
  26. package/dist/oxlint-worker.js +95 -5
  27. package/dist/{path-format-DnHpmJwG.js → path-format-By20mo8A.js} +3 -3
  28. package/dist/{print-branded-header-CFoO5ZHN.js → print-branded-header-DqaKyGKm.js} +4 -4
  29. package/dist/project-analysis-worker.js +459 -461
  30. package/dist/{prompt-runtime-scan-url-9tmVyRA2.js → prompt-runtime-scan-url-DiI3_zIx.js} +6 -6
  31. package/dist/react-compiler-detection-worker.d.ts +1 -0
  32. package/dist/react-compiler-detection-worker.js +1029 -0
  33. package/dist/{read-object-file-C8gGTrwo.js → read-object-file-DBJkVOGK.js} +4 -4
  34. package/dist/{record-metric-DMuxA69u.js → record-metric-C-ZZzzDc.js} +12589 -13129
  35. package/dist/{report-error-DynYEdrW.js → report-error-_C-eJJHZ.js} +7 -6
  36. package/dist/{report-workflow-result-C0nwk5Eq.js → report-workflow-result-BA_xTdWY.js} +24 -11
  37. package/dist/{resolve-scope-CtDh9FtN.js → resolve-scope-Cl4BiTkm.js} +7 -7
  38. package/dist/{rules-Dtp6I51W.js → rules-DAQXfBXb.js} +8 -7
  39. package/dist/{run-scan-app-DTjrGFyP.js → run-scan-app-CN5nwdB-.js} +12 -11
  40. package/dist/{runtime-scan-DylzMW6d.js → runtime-scan-DFdypOyE.js} +13 -12
  41. package/dist/{sanitize-runtime-url-CtosBgav.js → sanitize-runtime-url-yCL8ZAFd.js} +4 -4
  42. package/dist/{scan-i9quJrxG.js → scan-C6U_DFdI.js} +10 -9
  43. package/dist/{semver-DlmXks31.js → semver-BZIuy1gP.js} +3 -3
  44. package/dist/{should-fail-scan-gate-uW8_hnTc.js → should-fail-scan-gate-2mIY6wHj.js} +1848 -1825
  45. package/dist/{should-skip-prompts-fmi7PPp5.js → should-skip-prompts-CuyyYvRd.js} +4 -4
  46. package/dist/{should-use-tui-DaLPPhMi.js → should-use-tui-CbbIdX9b.js} +4 -4
  47. package/dist/start-scan-preamble-DVhXIPc0.d.ts +1 -0
  48. package/dist/start-scan-preamble-DZknzhHU.js +68 -0
  49. package/dist/start-scan-preamble.d.ts +1 -0
  50. package/dist/start-scan-preamble.js +4 -0
  51. package/dist/{telemetry-runtime-CxBC0gEj.js → telemetry-runtime-DLq3FDzI.js} +7 -6
  52. package/dist/{unref-stdin-SK3WfwxS.js → unref-stdin-D-NZBFpg.js} +3 -3
  53. package/dist/unwrap-typescript-expression-CrEPQUWz.js +14 -0
  54. package/dist/{version-Bti3M8BN.js → version-DO7dtT21.js} +5 -4
  55. package/dist/{why-dcQaGoJz.js → why-uxPDWtZO.js} +4 -4
  56. package/dist/{with-run-span-Lynvloyt.js → with-run-span-BCopjALe.js} +7 -6
  57. package/package.json +7 -5
  58. package/dist/_react-doctor_require-typescript-DnwIzXJn.js +0 -7
  59. package/dist/unwrap-typescript-expression-CbO_6kmC.js +0 -14
@@ -1,23 +1,23 @@
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]="b8fbd567-c418-58d4-a7e1-854f3e5fd440")}catch(e){}}();
3
- import { Bn as runPromise, Bt as getChangedLineRanges, Er as STAGED_FILES_PROJECT_CONFIG_FILENAMES, F as STAGED_FILES_TEMP_DIR_PREFIX, H as isDebugFlagEnabled, Ht as getDiffInfo, I as STAGED_SNAPSHOT_ADDITIONAL_CONFIG_FILENAMES, It as findLegacyConfig, Jt as highlighter, K as isCiOrCodingAgentEnvironment, Kt as hasSupportedFrameworkOrLibrary, Ln as provide$1, Mn as gen, Mt as discoverSupportedSubprojects, T as METRIC, X as Git, _ as VERSION, ar as messageFromUnknown, dt as StagedFiles, f as setJsonReportDirectory, g as writeJsonReport, gt as buildJsonReport, h as writeJsonErrorReport, in as listWorkspacePackages, ir as isPlainObject, jt as detectAiTrainingEnvironment, ln as remainingDeadlineBudgetMs, lr as CANONICAL_GITHUB_URL, mn as resolveScanTarget, n as recordDistribution, nr as isErrnoException, on as mapWithConcurrency, p as setJsonReportMode, q as isCodingAgentEnvironment, qn as provide, t as recordCount, u as enableJsonMode, xn as toRelativePath, z as CliInputError, zt as getBaselineDiffPlan } from "./record-metric-DMuxA69u.js";
4
- import { n as shutdownTelemetry, o as isExpectedUserError, r as flushSentry } from "./telemetry-runtime-CxBC0gEj.js";
5
- import { n as handleUserError, t as handleError } from "./handle-error-BO7AUOeO.js";
6
- import { t as reportErrorToSentry } from "./report-error-DynYEdrW.js";
7
- import { t as toForwardSlashes } from "./path-format-DnHpmJwG.js";
8
- import { A as runGitRaw, M as cliLogger, c as spinner, i as hasDoctorScript, n as findNearestPackageDirectory, o as isSpinnerSilent, s as setSpinnerSilent } from "./install-doctor-script-DousNjwa.js";
9
- import { a as readReactDoctorWorkflow, c as workflowUsesV1Action, i as isReactDoctorWorkflowInstalled, l as prompts, s as upgradeWorkflowActionToV2 } from "./install-github-workflow-DNfyCbSd.js";
10
- import { c as openWorkflowPullRequest, i as warnDeprecatedDiff, l as stageWorkflowFile, r as resolveScope, s as resolveBlockingLevel, t as finalizeScope } from "./resolve-scope-CtDh9FtN.js";
11
- import { t as shouldSkipPrompts } from "./should-skip-prompts-fmi7PPp5.js";
12
- import { A as createInvocationInspect, C as detectLaunchableAgents, D as buildHandoffPayload, E as launchCliAgent, M as resolveMergeBaseRef, N as printHeadlessReport, O as collectProjectSourceFiles, R as printDiagnosticsDump, S as setUpGitHubActions, T as copyToClipboard, U as buildEmptyReportMessage, V as filterDiagnosticsByCategories, W as resolveInvocationOxlintConcurrency, _ as retryMissingProjectScores, a as validateModeFlags, b as filterScansForSurface, c as partitionProjectScanOutcomes, d as buildCodeFrame, f as resolveProjectScan, g as resolveProjectRelativeDirectory, h as resolveProjectSourceFilePaths, i as validateIncludeUntrackedScope, j as inspect, k as deduplicateProjectScans, l as discoverWorkspacePackages, m as resolveProjectDiffIncludePaths, n as formatSkippedProjectsMessage, o as resolveExcludedProjectDirectories, p as resolveProjectChangedLineRanges, s as projectManifestChanged, t as shouldFailScanGate, u as selectProjects, v as resolveWorkspaceDeadCodeOwner, w as CLI_AGENT_BINARIES, x as countUniqueScannedFiles, y as resolveCliInspectOptions } from "./should-fail-scan-gate-uW8_hnTc.js";
13
- import { a as recordGate, i as readPreference, o as runMigrations, p as SETUP_HINT_EVENT, r as isGatePending, s as writePreference, u as HANDOFF_TARGET_PREFERENCE_ID } from "./report-workflow-result-C0nwk5Eq.js";
14
- import { a as askUpgradeActionVersion, c as recordCiPromptDecision, i as installReactDoctorAgentHooks, l as hasHandledActionUpgrade, o as askAddToGitHubActions, r as findAgentsWithOutdatedReactDoctorHooks, s as hasHandledCiPrompt, t as getSkillSourceDirectory, u as recordActionUpgradeDecision } from "./install-react-doctor-CofgPrzS.js";
15
- import { t as readObjectFile } from "./read-object-file-C8gGTrwo.js";
16
- import * as path$1 from "node:path";
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]="c08f6754-b15c-5939-9bf2-a7d504f67e5d")}catch(e){}}();
3
+ import { N as discardPrefetchedGitCommands, T as STAGED_SNAPSHOT_ADDITIONAL_CONFIG_FILENAMES, lt as CANONICAL_GITHUB_URL, u as METRIC, w as STAGED_FILES_TEMP_DIR_PREFIX, xn as STAGED_FILES_PROJECT_CONFIG_FILENAMES } from "./constants-DJ3RtEMu.js";
4
+ import { A as Git, D as isCodingAgentEnvironment, E as isCiOrCodingAgentEnvironment, Et as hasSupportedFrameworkOrLibrary, G as StagedFiles, Gt as resolveScanTarget, Ht as remainingDeadlineBudgetMs, Ln as isErrnoException, Lt as listWorkspacePackages, Ot as highlighter, Pn as messageFromUnknown, Qt as toRelativePath, S as isDebugFlagEnabled, St as getDiffInfo, Tn as provide, X as buildJsonReport, _ as VERSION, bt as getChangedLineRanges, dt as detectAiTrainingEnvironment, f as setJsonReportDirectory, ft as discoverSupportedSubprojects, g as writeJsonReport, gt as findLegacyConfig, h as writeJsonErrorReport, hn as provide$1, n as recordDistribution, p as setJsonReportMode, t as recordCount, u as enableJsonMode, un as gen, vn as runPromise, y as CliInputError, yt as getBaselineDiffPlan, zn as isPlainObject, zt as mapWithConcurrency } from "./record-metric-C-ZZzzDc.js";
5
+ import { n as shutdownTelemetry, o as isExpectedUserError, r as flushSentry } from "./telemetry-runtime-DLq3FDzI.js";
6
+ import { n as handleUserError, t as handleError } from "./handle-error-8NlzFVoW.js";
7
+ import { t as reportErrorToSentry } from "./report-error-_C-eJJHZ.js";
8
+ import { t as toForwardSlashes } from "./path-format-By20mo8A.js";
9
+ import { N as cliLogger, c as spinner, i as hasDoctorScript, j as runGitRaw, n as findNearestPackageDirectory, o as isSpinnerSilent, s as setSpinnerSilent } from "./install-doctor-script-Dr4O5HID.js";
10
+ import { a as readReactDoctorWorkflow, c as workflowUsesV1Action, i as isReactDoctorWorkflowInstalled, l as prompts, s as upgradeWorkflowActionToV2 } from "./install-github-workflow-Dtf07ISQ.js";
11
+ import { c as openWorkflowPullRequest, i as warnDeprecatedDiff, l as stageWorkflowFile, r as resolveScope, s as resolveBlockingLevel, t as finalizeScope } from "./resolve-scope-Cl4BiTkm.js";
12
+ import { t as shouldSkipPrompts } from "./should-skip-prompts-CuyyYvRd.js";
13
+ import { A as createInvocationInspect, C as detectLaunchableAgents, D as buildHandoffPayload, E as launchCliAgent, M as resolveMergeBaseRef, N as printHeadlessReport, O as collectProjectSourceFiles, R as printDiagnosticsDump, S as setUpGitHubActions, T as copyToClipboard, U as buildEmptyReportMessage, V as filterDiagnosticsByCategories, W as resolveInvocationOxlintConcurrency, _ as retryMissingProjectScores, a as validateModeFlags, b as filterScansForSurface, c as partitionProjectScanOutcomes, d as buildCodeFrame, f as resolveProjectScan, g as resolveProjectRelativeDirectory, h as resolveProjectSourceFilePaths, i as validateIncludeUntrackedScope, j as inspect, k as deduplicateProjectScans, l as discoverWorkspacePackages, m as resolveProjectDiffIncludePaths, n as formatSkippedProjectsMessage, o as resolveExcludedProjectDirectories, p as resolveProjectChangedLineRanges, s as projectManifestChanged, t as shouldFailScanGate, u as selectProjects, v as resolveWorkspaceDeadCodeOwner, w as CLI_AGENT_BINARIES, x as countUniqueScannedFiles, y as resolveCliInspectOptions } from "./should-fail-scan-gate-2mIY6wHj.js";
14
+ import { a as recordGate, g as loadAgentInstall, i as readPreference, o as runMigrations, p as SETUP_HINT_EVENT, r as isGatePending, s as writePreference, u as HANDOFF_TARGET_PREFERENCE_ID } from "./report-workflow-result-BA_xTdWY.js";
15
+ import { a as askUpgradeActionVersion, c as recordCiPromptDecision, i as installReactDoctorAgentHooks, l as hasHandledActionUpgrade, o as askAddToGitHubActions, r as findAgentsWithOutdatedReactDoctorHooks, s as hasHandledCiPrompt, t as getSkillSourceDirectory, u as recordActionUpgradeDecision } from "./install-react-doctor-Bi_Dav6m.js";
16
+ import { t as readObjectFile } from "./read-object-file-DBJkVOGK.js";
17
17
  import * as fs$1 from "node:fs";
18
+ import * as path$1 from "node:path";
18
19
  import { tmpdir } from "node:os";
19
20
  import { performance } from "node:perf_hooks";
20
- import { SKILL_MANIFEST_FILE, getSkillAgentConfig, installSkillsFromSource } from "agent-install";
21
21
  //#region src/cli/utils/handoff-target-preference.ts
22
22
  const HANDOFF_TARGET_PREFERENCE = {
23
23
  id: HANDOFF_TARGET_PREFERENCE_ID,
@@ -29,6 +29,7 @@ const rememberHandoffTarget = (target, options = {}) => writePreference(HANDOFF_
29
29
  //#region src/cli/utils/install-skill-for-agent.ts
30
30
  const installReactDoctorSkillForAgent = async (agent, projectRoot) => {
31
31
  const source = getSkillSourceDirectory();
32
+ const { installSkillsFromSource, SKILL_MANIFEST_FILE } = loadAgentInstall();
32
33
  if (!fs$1.existsSync(path$1.join(source, SKILL_MANIFEST_FILE))) return false;
33
34
  const result = await installSkillsFromSource({
34
35
  source,
@@ -124,8 +125,10 @@ const handoffToAgent = async (input) => {
124
125
  outcome: "ci-suppressed",
125
126
  diagnosticsCount: input.diagnostics.length
126
127
  });
128
+ const launchableAgents = await detectLaunchableAgents();
129
+ const { getSkillAgentConfig } = loadAgentInstall();
127
130
  const choices = [
128
- ...(await detectLaunchableAgents()).map((agentId) => ({
131
+ ...launchableAgents.map((agentId) => ({
129
132
  title: getSkillAgentConfig(agentId).displayName,
130
133
  description: `Open ${CLI_AGENT_BINARIES[agentId]} here with the top issues as a prompt`,
131
134
  value: agentId
@@ -175,7 +178,7 @@ const handoffToAgent = async (input) => {
175
178
  return;
176
179
  }
177
180
  const agentId = handoffTarget;
178
- const displayName = getSkillAgentConfig(agentId).displayName;
181
+ const displayName = loadAgentInstall().getSkillAgentConfig(agentId).displayName;
179
182
  const skillSpinner = spinner(`Installing the /react-doctor skill for ${displayName}...`).start();
180
183
  try {
181
184
  if (await installReactDoctorSkillForAgent(agentId, input.rootDirectory)) skillSpinner.succeed(`Installed the /react-doctor skill for ${displayName}.`);
@@ -333,7 +336,11 @@ const PROJECT_MIGRATIONS = [
333
336
  }
334
337
  }
335
338
  ];
336
- const runProjectMigrations = (projectRoot, options = {}) => runMigrations(PROJECT_MIGRATIONS, { projectRoot }, options);
339
+ const runProjectMigrations = async (projectRoot, options = {}) => {
340
+ const results = await runMigrations(PROJECT_MIGRATIONS, { projectRoot }, options);
341
+ if (results.some((result) => result.ran && result.applied)) discardPrefetchedGitCommands();
342
+ return results;
343
+ };
337
344
  //#endregion
338
345
  //#region src/cli/utils/read-changed-files-from.ts
339
346
  const isSafeRelativePath = (filePath) => {
@@ -1454,5 +1461,5 @@ const inspectAction = async (directory, flags, invocationCommand = "inspect", se
1454
1461
  //#endregion
1455
1462
  export { warnDeprecatedFailOn as n, runProjectMigrations as r, inspectAction as t };
1456
1463
 
1457
- //# sourceMappingURL=inspect-CtwjUwiF.js.map
1458
- //# debugId=b8fbd567-c418-58d4-a7e1-854f3e5fd440
1464
+ //# sourceMappingURL=inspect-Cs2Ojloa.js.map
1465
+ //# debugId=c08f6754-b15c-5939-9bf2-a7d504f67e5d
@@ -1,11 +1,12 @@
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]="e2fedf3b-5694-50fb-a674-b7abb877b2d8")}catch(e){}}();
3
- import { T as METRIC, Vn as runSync, t as recordCount } from "./record-metric-DMuxA69u.js";
4
- import { o as isExpectedUserError } from "./telemetry-runtime-CxBC0gEj.js";
5
- import { n as handleUserError, t as handleError } from "./handle-error-BO7AUOeO.js";
6
- import { t as reportErrorToSentry } from "./report-error-DynYEdrW.js";
7
- import { t as printBrandedHeader } from "./print-branded-header-CFoO5ZHN.js";
8
- import { n as runInstallReactDoctor } from "./install-react-doctor-CofgPrzS.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]="05b9b7f8-3158-52e6-a44c-896b2c9e5a9d")}catch(e){}}();
3
+ import { u as METRIC } from "./constants-DJ3RtEMu.js";
4
+ import { t as recordCount, yn as runSync } from "./record-metric-C-ZZzzDc.js";
5
+ import { o as isExpectedUserError } from "./telemetry-runtime-DLq3FDzI.js";
6
+ import { n as handleUserError, t as handleError } from "./handle-error-8NlzFVoW.js";
7
+ import { t as reportErrorToSentry } from "./report-error-_C-eJJHZ.js";
8
+ import { t as printBrandedHeader } from "./print-branded-header-DqaKyGKm.js";
9
+ import { n as runInstallReactDoctor } from "./install-react-doctor-Bi_Dav6m.js";
9
10
  //#region src/cli/commands/install.ts
10
11
  const installAction = async (options, command) => {
11
12
  recordCount(METRIC.cliInvoked, 1, { command: "install" });
@@ -29,5 +30,5 @@ const installAction = async (options, command) => {
29
30
  //#endregion
30
31
  export { installAction };
31
32
 
32
- //# sourceMappingURL=install-DAwHDunN.js.map
33
- //# debugId=e2fedf3b-5694-50fb-a674-b7abb877b2d8
33
+ //# sourceMappingURL=install-C4JkqZoO.js.map
34
+ //# debugId=05b9b7f8-3158-52e6-a44c-896b2c9e5a9d
@@ -1,10 +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]="046202d8-a407-5dbd-b552-bb11e5a0803b")}catch(e){}}();
3
- import { B as isNonInteractiveEnvironment, Dn as log, En as info$1, Jt as highlighter, On as warn, Tn as error$1, Vn as runSync, k as RUN_GIT_MAX_BUFFER_BYTES } from "./record-metric-DMuxA69u.js";
4
- import { a as chalk, i as stripAnsi, t as eastAsianWidth } from "./get-east-asian-width-CM5BOEC-.js";
5
- import { execFileSync } from "node:child_process";
6
- import * as path$1 from "node:path";
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]="2132de94-5ae5-5a69-a5cc-ed0b5d0491f6")}catch(e){}}();
3
+ import { B as resolveGitCommand, g as RUN_GIT_MAX_BUFFER_BYTES } from "./constants-DJ3RtEMu.js";
4
+ import { Ot as highlighter, an as log, b as isNonInteractiveEnvironment, in as info$1, on as warn, rn as error$1, yn as runSync } from "./record-metric-C-ZZzzDc.js";
5
+ import { a as chalk, i as stripAnsi, t as eastAsianWidth } from "./get-east-asian-width-DRPy7dqz.js";
7
6
  import * as fs$1 from "node:fs";
7
+ import * as path$1 from "node:path";
8
+ import { execFileSync } from "node:child_process";
8
9
  import process$1 from "node:process";
9
10
  import { stripVTControlCharacters } from "node:util";
10
11
  import tty from "node:tty";
@@ -84,6 +85,14 @@ const runGitRaw = (projectRoot, args) => {
84
85
  }
85
86
  };
86
87
  const runGit = (projectRoot, args) => runGitRaw(projectRoot, args)?.trim() ?? null;
88
+ const runGitAsync = async (projectRoot, args) => {
89
+ const output = await resolveGitCommand({
90
+ directory: projectRoot,
91
+ args,
92
+ maxBufferBytes: RUN_GIT_MAX_BUFFER_BYTES
93
+ });
94
+ return output === null ? null : output.trim();
95
+ };
87
96
  const resolveGitPath = (baseDirectory, value) => path$1.isAbsolute(value) ? value : path$1.resolve(baseDirectory, value);
88
97
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
89
98
  const getPackageJsonPath = (projectRoot) => path$1.join(projectRoot, PACKAGE_JSON_FILE_NAME);
@@ -2803,7 +2812,7 @@ const installReactDoctorScriptStep = (projectRoot) => {
2803
2812
  }
2804
2813
  };
2805
2814
  //#endregion
2806
- export { runGitRaw as A, isRecord as C, readPackageJson as D, packageHasRecordKey as E, cliLogger as M, resolveGitPath as O, getPackageJsonPath as S, packageHasNestedRecordKey as T, REACT_DOCTOR_COMMAND as _, installReactDoctorScriptStep as a, VITE_PLUS_HOOKS_PATH as b, spinner as c, HUSKY_HOOKS_PATH as d, LEFTHOOK_CONFIG_FILES as f, PRE_COMMIT_CONFIG_FILE as g, OVERCOMMIT_CONFIG_FILE as h, hasDoctorScript as i, writeJsonFile as j, runGit as k, HOOK_FILE_NAME as l, NON_BLOCKING_REACT_DOCTOR_COMMAND as m, findNearestPackageDirectory as n, isSpinnerSilent as o, LEGACY_HOOK_RUNNER_RELATIVE_PATH as p, hasDoctorDependency as r, setSpinnerSilent as s, DOCTOR_PACKAGE_NAME as t, HOOK_RELATIVE_PATH as u, SIMPLE_GIT_HOOKS_CONFIG_FILE as v, packageHasDependency as w, ensureTrailingNewline as x, SIMPLE_GIT_HOOKS_PACKAGE_JSON_KEY as y };
2815
+ export { runGitAsync as A, isRecord as C, readPackageJson as D, packageHasRecordKey as E, writeJsonFile as M, cliLogger as N, resolveGitPath as O, getPackageJsonPath as S, packageHasNestedRecordKey as T, REACT_DOCTOR_COMMAND as _, installReactDoctorScriptStep as a, VITE_PLUS_HOOKS_PATH as b, spinner as c, HUSKY_HOOKS_PATH as d, LEFTHOOK_CONFIG_FILES as f, PRE_COMMIT_CONFIG_FILE as g, OVERCOMMIT_CONFIG_FILE as h, hasDoctorScript as i, runGitRaw as j, runGit as k, HOOK_FILE_NAME as l, NON_BLOCKING_REACT_DOCTOR_COMMAND as m, findNearestPackageDirectory as n, isSpinnerSilent as o, LEGACY_HOOK_RUNNER_RELATIVE_PATH as p, hasDoctorDependency as r, setSpinnerSilent as s, DOCTOR_PACKAGE_NAME as t, HOOK_RELATIVE_PATH as u, SIMPLE_GIT_HOOKS_CONFIG_FILE as v, packageHasDependency as w, ensureTrailingNewline as x, SIMPLE_GIT_HOOKS_PACKAGE_JSON_KEY as y };
2807
2816
 
2808
- //# sourceMappingURL=install-doctor-script-DousNjwa.js.map
2809
- //# debugId=046202d8-a407-5dbd-b552-bb11e5a0803b
2817
+ //# sourceMappingURL=install-doctor-script-Dr4O5HID.js.map
2818
+ //# debugId=2132de94-5ae5-5a69-a5cc-ed0b5d0491f6
@@ -1,14 +1,13 @@
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]="fd350e49-a51d-52df-81cb-b14ed9835806")}catch(e){}}();
3
- import { w as GH_DEFAULT_BRANCH_PROBE_TIMEOUT_MS } from "./record-metric-DMuxA69u.js";
4
- import { t as unrefStdin } from "./unref-stdin-SK3WfwxS.js";
5
- import { M as cliLogger } from "./install-doctor-script-DousNjwa.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]="97359c94-01d1-5506-938f-922353b51e49")}catch(e){}}();
3
+ import { s as GH_DEFAULT_BRANCH_PROBE_TIMEOUT_MS } from "./constants-DJ3RtEMu.js";
4
+ import { t as unrefStdin } from "./unref-stdin-D-NZBFpg.js";
5
+ import { N as cliLogger } from "./install-doctor-script-Dr4O5HID.js";
6
6
  import { createRequire } from "node:module";
7
- import { execFile } from "node:child_process";
8
- import * as path$1 from "node:path";
9
7
  import * as fs$1 from "node:fs";
8
+ import * as path$1 from "node:path";
9
+ import { execFile } from "node:child_process";
10
10
  import { promisify } from "node:util";
11
- import basePrompts from "prompts";
12
11
  //#region src/cli/utils/run-command.ts
13
12
  const execFileAsync = promisify(execFile);
14
13
  const runCommand = async (command, args, cwd, timeoutMs) => {
@@ -132,7 +131,8 @@ const patchMultiselectSubmit = () => {
132
131
  originalSubmit.call(this);
133
132
  };
134
133
  };
135
- const prompts = (questions, options = {}) => {
134
+ const prompts = async (questions, options = {}) => {
135
+ const { default: basePrompts } = await import("prompts");
136
136
  patchMultiselectToggleAll();
137
137
  patchMultiselectSubmit();
138
138
  return basePrompts(questions, { onCancel: options.onCancel ?? onCancel }).finally(unrefStdin);
@@ -267,5 +267,5 @@ const upgradeReactDoctorWorkflowInPlace = (projectRoot) => {
267
267
  //#endregion
268
268
  export { readReactDoctorWorkflow as a, workflowUsesV1Action as c, detectDefaultBranch as d, runCommand as f, isReactDoctorWorkflowInstalled as i, prompts as l, getReactDoctorWorkflowPath as n, upgradeReactDoctorWorkflowInPlace as o, installReactDoctorWorkflow as r, upgradeWorkflowActionToV2 as s, buildWorkflowContent as t, isCommandAvailable as u };
269
269
 
270
- //# sourceMappingURL=install-github-workflow-DNfyCbSd.js.map
271
- //# debugId=fd350e49-a51d-52df-81cb-b14ed9835806
270
+ //# sourceMappingURL=install-github-workflow-Dtf07ISQ.js.map
271
+ //# debugId=97359c94-01d1-5506-938f-922353b51e49
@@ -1,16 +1,16 @@
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]="5136fcbb-6a12-5cfe-964a-5325ae5af5df")}catch(e){}}();
3
- import { C as CI_TRUST_COMPANIES, Jt as highlighter, T as METRIC, Tr as SKILL_NAME, _r as GITHUB_ACTIONS_SETUP_URL, nr as isErrnoException, t as recordCount, z as CliInputError } from "./record-metric-DMuxA69u.js";
4
- import { C as isRecord, D as readPackageJson, E as packageHasRecordKey, M as cliLogger, O as resolveGitPath, S as getPackageJsonPath, T as packageHasNestedRecordKey, _ as REACT_DOCTOR_COMMAND, a as installReactDoctorScriptStep, b as VITE_PLUS_HOOKS_PATH, c as spinner, d as HUSKY_HOOKS_PATH, f as LEFTHOOK_CONFIG_FILES, g as PRE_COMMIT_CONFIG_FILE, h as OVERCOMMIT_CONFIG_FILE, j as writeJsonFile, k as runGit, l as HOOK_FILE_NAME, m as NON_BLOCKING_REACT_DOCTOR_COMMAND, n as findNearestPackageDirectory, p as LEGACY_HOOK_RUNNER_RELATIVE_PATH, r as hasDoctorDependency, t as DOCTOR_PACKAGE_NAME, u as HOOK_RELATIVE_PATH, w as packageHasDependency, x as ensureTrailingNewline } from "./install-doctor-script-DousNjwa.js";
5
- import { a as readReactDoctorWorkflow, c as workflowUsesV1Action, d as detectDefaultBranch, l as prompts, n as getReactDoctorWorkflowPath, o as upgradeReactDoctorWorkflowInPlace, r as installReactDoctorWorkflow } from "./install-github-workflow-DNfyCbSd.js";
6
- import { t as shouldSkipPrompts } from "./should-skip-prompts-fmi7PPp5.js";
7
- import { a as recordGate, c as ACTION_UPGRADE_EVENT, d as INSTALL_AGENTS_PREFERENCE_ID, h as detectAvailableAgents, i as readPreference, l as CI_PITCH_EVENT, m as computeDefaultSelectedAgents, n as openUrl, r as isGatePending, s as writePreference, t as reportWorkflowResult } from "./report-workflow-result-C0nwk5Eq.js";
8
- import { execFile } from "node:child_process";
9
- import * as path$1 from "node:path";
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]="2b1891bf-7adb-5de4-a463-6dbc0c489edd")}catch(e){}}();
3
+ import { kt as GITHUB_ACTIONS_SETUP_URL, o as CI_TRUST_COMPANIES, pn as SKILL_NAME, u as METRIC } from "./constants-DJ3RtEMu.js";
4
+ import { Ln as isErrnoException, Ot as highlighter, t as recordCount, y as CliInputError } from "./record-metric-C-ZZzzDc.js";
5
+ import { C as isRecord, D as readPackageJson, E as packageHasRecordKey, M as writeJsonFile, N as cliLogger, O as resolveGitPath, S as getPackageJsonPath, T as packageHasNestedRecordKey, _ as REACT_DOCTOR_COMMAND, a as installReactDoctorScriptStep, b as VITE_PLUS_HOOKS_PATH, c as spinner, d as HUSKY_HOOKS_PATH, f as LEFTHOOK_CONFIG_FILES, g as PRE_COMMIT_CONFIG_FILE, h as OVERCOMMIT_CONFIG_FILE, k as runGit, l as HOOK_FILE_NAME, m as NON_BLOCKING_REACT_DOCTOR_COMMAND, n as findNearestPackageDirectory, p as LEGACY_HOOK_RUNNER_RELATIVE_PATH, r as hasDoctorDependency, t as DOCTOR_PACKAGE_NAME, u as HOOK_RELATIVE_PATH, w as packageHasDependency, x as ensureTrailingNewline } from "./install-doctor-script-Dr4O5HID.js";
6
+ import { a as readReactDoctorWorkflow, c as workflowUsesV1Action, d as detectDefaultBranch, l as prompts, n as getReactDoctorWorkflowPath, o as upgradeReactDoctorWorkflowInPlace, r as installReactDoctorWorkflow } from "./install-github-workflow-Dtf07ISQ.js";
7
+ import { t as shouldSkipPrompts } from "./should-skip-prompts-CuyyYvRd.js";
8
+ import { a as recordGate, c as ACTION_UPGRADE_EVENT, d as INSTALL_AGENTS_PREFERENCE_ID, g as loadAgentInstall, h as detectAvailableAgents, i as readPreference, l as CI_PITCH_EVENT, m as computeDefaultSelectedAgents, n as openUrl, r as isGatePending, s as writePreference, t as reportWorkflowResult } from "./report-workflow-result-BA_xTdWY.js";
10
9
  import * as fs$1 from "node:fs";
10
+ import * as path$1 from "node:path";
11
+ import { execFile } from "node:child_process";
11
12
  import { fileURLToPath } from "node:url";
12
13
  import { promisify } from "node:util";
13
- import { SKILL_MANIFEST_FILE, getSkillAgentConfig, installSkillsFromSource, isSkillAgentType } from "agent-install";
14
14
  //#region src/cli/utils/action-upgrade-prompt.ts
15
15
  const ACTION_UPGRADE_GATE = {
16
16
  id: ACTION_UPGRADE_EVENT,
@@ -111,6 +111,7 @@ const PREFERENCE_SEPARATOR = ",";
111
111
  const readInstallAgents = (options = {}) => {
112
112
  const stored = readPreference(INSTALL_AGENTS_PREFERENCE, {}, options);
113
113
  if (stored === null) return [];
114
+ const { isSkillAgentType } = loadAgentInstall();
114
115
  return stored.split(PREFERENCE_SEPARATOR).map((entry) => entry.trim()).filter((entry) => isSkillAgentType(entry));
115
116
  };
116
117
  const rememberInstallAgents = (agents, options = {}) => writePreference(INSTALL_AGENTS_PREFERENCE, agents.join(PREFERENCE_SEPARATOR), {}, options);
@@ -962,6 +963,7 @@ const getSkillSourceDirectory = () => {
962
963
  };
963
964
  const canInstallNativeAgentHooks = (agents) => agents.some((agent) => agent === "claude-code" || agent === "cursor");
964
965
  const installReactDoctorSkillStep = async (sourceDir, selectedAgents, projectRoot) => {
966
+ const { getSkillAgentConfig, installSkillsFromSource, SKILL_MANIFEST_FILE } = loadAgentInstall();
965
967
  const installSpinner = spinner(`Installing ${SKILL_NAME} skill...`).start();
966
968
  try {
967
969
  const installResult = await installSkillsFromSource({
@@ -995,6 +997,7 @@ const installReactDoctorGitHookStep = (gitHookTarget) => {
995
997
  }
996
998
  };
997
999
  const installReactDoctorAgentHooksStep = (projectRoot, selectedAgents) => {
1000
+ const { getSkillAgentConfig } = loadAgentInstall();
998
1001
  const hookSpinner = spinner("Installing React Doctor agent hooks...").start();
999
1002
  try {
1000
1003
  const hookResult = installReactDoctorAgentHooks({
@@ -1033,6 +1036,7 @@ const upgradeReactDoctorWorkflowStep = (projectRoot) => {
1033
1036
  return true;
1034
1037
  };
1035
1038
  const runInstallReactDoctor = async (options = {}) => {
1039
+ const { getSkillAgentConfig, SKILL_MANIFEST_FILE } = loadAgentInstall();
1036
1040
  const requestedProjectRoot = options.projectRoot ?? process.cwd();
1037
1041
  const projectRoot = findNearestPackageDirectory(requestedProjectRoot) ?? requestedProjectRoot;
1038
1042
  const sourceDir = options.sourceDir ?? getSkillSourceDirectory();
@@ -1152,5 +1156,5 @@ const runInstallReactDoctor = async (options = {}) => {
1152
1156
  //#endregion
1153
1157
  export { askUpgradeActionVersion as a, recordCiPromptDecision as c, installReactDoctorAgentHooks as i, hasHandledActionUpgrade as l, runInstallReactDoctor as n, askAddToGitHubActions as o, findAgentsWithOutdatedReactDoctorHooks as r, hasHandledCiPrompt as s, getSkillSourceDirectory as t, recordActionUpgradeDecision as u };
1154
1158
 
1155
- //# sourceMappingURL=install-react-doctor-CofgPrzS.js.map
1156
- //# debugId=5136fcbb-6a12-5cfe-964a-5325ae5af5df
1159
+ //# sourceMappingURL=install-react-doctor-Bi_Dav6m.js.map
1160
+ //# debugId=2b1891bf-7adb-5de4-a463-6dbc0c489edd
@@ -0,0 +1,10 @@
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]="c710eeff-0123-5105-9fd0-ac7d79304a90")}catch(e){}}();
3
+ import { a as CACHE_DISABLED_VALUES } from "./constants-DJ3RtEMu.js";
4
+ //#region src/cli/utils/is-cache-globally-disabled.ts
5
+ const isCacheGloballyDisabled = () => CACHE_DISABLED_VALUES.has(process.env.REACT_DOCTOR_NO_CACHE?.toLowerCase() ?? "");
6
+ //#endregion
7
+ export { isCacheGloballyDisabled as t };
8
+
9
+ //# sourceMappingURL=is-cache-globally-disabled-De19063F.js.map
10
+ //# debugId=c710eeff-0123-5105-9fd0-ac7d79304a90
@@ -1,15 +1,16 @@
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]="c046bd99-5561-50a8-b647-94c70da1dae4")}catch(e){}}();
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]="749eabf9-84bf-50a7-85f8-07e8729e8492")}catch(e){}}();
3
3
  import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-ChKA3wi6.js";
4
- import { T as METRIC, t as recordCount } from "./record-metric-DMuxA69u.js";
5
- import { n as registerActiveTuiRenderer, t as exitGracefully } from "./exit-gracefully-BP0lJPao.js";
6
- import { a as chalk, i as stripAnsi, n as isFullWidth$1, r as isWide$1 } from "./get-east-asian-width-CM5BOEC-.js";
7
- import { EventEmitter } from "node:events";
8
- import { execFileSync } from "node:child_process";
4
+ import { u as METRIC } from "./constants-DJ3RtEMu.js";
5
+ import { t as recordCount } from "./record-metric-C-ZZzzDc.js";
6
+ import { n as registerActiveTuiRenderer, t as exitGracefully } from "./exit-gracefully-Y5XyTvxu.js";
7
+ import { a as chalk, i as stripAnsi, n as isFullWidth$1, r as isWide$1 } from "./get-east-asian-width-DRPy7dqz.js";
9
8
  import * as fs$1 from "node:fs";
10
9
  import fs from "node:fs";
11
- import process$1, { cwd, env } from "node:process";
10
+ import { execFileSync } from "node:child_process";
12
11
  import os from "node:os";
12
+ import { EventEmitter } from "node:events";
13
+ import process$1, { cwd, env } from "node:process";
13
14
  import { PassThrough, Stream } from "node:stream";
14
15
  import tty from "node:tty";
15
16
  import Yoga from "yoga-layout";
@@ -20440,7 +20441,7 @@ if (process$1.env["DEV"] === "true") {
20440
20441
  import.meta.resolve("react-devtools-core");
20441
20442
  isDevtoolsInstalled = true;
20442
20443
  } catch {}
20443
- if (isDevtoolsInstalled) await import("./devtools-DOdrAPkZ.js");
20444
+ if (isDevtoolsInstalled) await import("./devtools-D20sefkm.js");
20444
20445
  }
20445
20446
  const diff = (before, after) => {
20446
20447
  if (before === after) return;
@@ -25869,5 +25870,5 @@ var require_jsx_runtime = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25869
25870
  //#endregion
25870
25871
  export { useExitOnCtrlC as a, Spinner as c, useInput as d, Transform as f, Box as h, import_react as i, useStdout as l, Text as m, registerMountedTuiRenderer as n, terminalSymbols as o, render as p, useStdoutDimensions as r, isPrintableInput as s, require_jsx_runtime as t, useApp as u };
25871
25872
 
25872
- //# sourceMappingURL=jsx-runtime-Dv_yWxfg.js.map
25873
- //# debugId=c046bd99-5561-50a8-b647-94c70da1dae4
25873
+ //# sourceMappingURL=jsx-runtime-CND_0px2.js.map
25874
+ //# debugId=749eabf9-84bf-50a7-85f8-07e8729e8492
@@ -1,10 +1,35 @@
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]="c27c68d9-63f9-55ae-8eed-5bceb81f5b02")}catch(e){}}();
3
- import { o as OXLINT_WORKER_JOB_END_MARKER, s as REACT_DOCTOR_PLUGIN_RESET_HOOK_KEY } from "./constants-CKOk_Fa9.js";
4
- import * as path$1 from "node:path";
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]="036daa0d-20ef-5a7e-b004-e4f41f80cf0c")}catch(e){}}();
3
+ import { o as OXLINT_WORKER_JOB_END_MARKER, s as REACT_DOCTOR_PLUGIN_RESET_HOOK_KEY } from "./constants-DNh19qg9.js";
5
4
  import * as fs$1 from "node:fs";
5
+ import * as path$1 from "node:path";
6
6
  import { pathToFileURL } from "node:url";
7
7
  import * as os$1 from "node:os";
8
+ //#region ../core/src/utils/classify-existence-answer.ts
9
+ const classifyExistenceAnswer = (absolutePath) => {
10
+ try {
11
+ const stat = fs$1.statSync(absolutePath);
12
+ if (stat.isFile()) return "file";
13
+ if (stat.isDirectory()) return "dir";
14
+ return "none";
15
+ } catch {
16
+ return "none";
17
+ }
18
+ };
19
+ //#endregion
20
+ //#region ../core/src/utils/collect-file-probe-trace.ts
21
+ const collectFileProbeTrace = (collect, absoluteFilePath, ruleIds) => {
22
+ try {
23
+ return collect({
24
+ absoluteFilePath,
25
+ sourceText: fs$1.readFileSync(absoluteFilePath, "utf8"),
26
+ ruleIds
27
+ });
28
+ } catch {
29
+ return null;
30
+ }
31
+ };
32
+ //#endregion
8
33
  //#region ../core/src/utils/create-filesystem-cache-epoch-gate.ts
9
34
  const createFilesystemCacheEpochGate = () => {
10
35
  let lastFilesystemCacheEpoch = null;
@@ -63,6 +88,7 @@ const writeLine = (fileDescriptor, line) => {
63
88
  fs$1.writeSync(fileDescriptor, `\n${line}\n`);
64
89
  };
65
90
  const isJobMessage = (message) => typeof message === "object" && message !== null && "type" in message && message.type === "job" && "id" in message && typeof message.id === "number" && "cwd" in message && typeof message.cwd === "string" && "argumentsList" in message && Array.isArray(message.argumentsList) && "filesystemCacheEpoch" in message && (message.filesystemCacheEpoch === null || typeof message.filesystemCacheEpoch === "number");
91
+ const isProbeJobMessage = (message) => typeof message === "object" && message !== null && "type" in message && message.type === "probes" && "id" in message && typeof message.id === "number" && "cwd" in message && typeof message.cwd === "string" && "files" in message && Array.isArray(message.files) && "ruleIds" in message && Array.isArray(message.ruleIds) && "filesystemCacheEpoch" in message && (message.filesystemCacheEpoch === null || typeof message.filesystemCacheEpoch === "number");
66
92
  const sendToParent = (message) => {
67
93
  process.send?.(message);
68
94
  };
@@ -99,8 +125,67 @@ const runJob = async (internals, job) => {
99
125
  writeLine(1, `${OXLINT_WORKER_JOB_END_MARKER}:${job.id}:${status}`);
100
126
  writeLine(2, `${OXLINT_WORKER_JOB_END_MARKER}:${job.id}:end`);
101
127
  };
128
+ const preloadPlugin = async (pluginPath) => {
129
+ if (pluginPath === void 0) return;
130
+ try {
131
+ await import(pathToFileURL(pluginPath).href);
132
+ } catch {
133
+ return;
134
+ }
135
+ };
136
+ let probeCollectorModule = null;
137
+ const loadProbeCollector = () => probeCollectorModule ??= import("oxlint-plugin-react-doctor/core");
138
+ const collectProbeTraces = (collectCrossFileDependencyProbes, job) => {
139
+ const paths = [];
140
+ const existenceAnswers = [];
141
+ const pathIndexByRelativePath = /* @__PURE__ */ new Map();
142
+ const internPath = (absolutePath, isExistenceProbe) => {
143
+ const relativePath = path$1.relative(job.cwd, absolutePath).replaceAll("\\", "/");
144
+ let pathIndex = pathIndexByRelativePath.get(relativePath);
145
+ if (pathIndex === void 0) {
146
+ pathIndex = paths.length;
147
+ paths.push(relativePath);
148
+ existenceAnswers.push(null);
149
+ pathIndexByRelativePath.set(relativePath, pathIndex);
150
+ }
151
+ if (isExistenceProbe && existenceAnswers[pathIndex] === null) existenceAnswers[pathIndex] = classifyExistenceAnswer(absolutePath);
152
+ return pathIndex;
153
+ };
154
+ return {
155
+ paths,
156
+ existenceAnswers,
157
+ traces: job.files.map((file) => {
158
+ const trace = collectFileProbeTrace(collectCrossFileDependencyProbes, path$1.resolve(job.cwd, file), job.ruleIds);
159
+ if (trace === null) return null;
160
+ return {
161
+ file,
162
+ content: [...trace.contentPaths].map((contentPath) => internPath(contentPath, false)),
163
+ existence: [...trace.existencePaths].map((existencePath) => internPath(existencePath, true))
164
+ };
165
+ })
166
+ };
167
+ };
168
+ const runProbeJob = async (job) => {
169
+ let status = "error";
170
+ let errorMessage = null;
171
+ try {
172
+ const { collectCrossFileDependencyProbes } = await loadProbeCollector();
173
+ process.chdir(job.cwd);
174
+ if (filesystemCacheEpochGate.shouldReset(job.filesystemCacheEpoch)) resetPluginFilesystemCaches();
175
+ fs$1.writeSync(1, JSON.stringify(collectProbeTraces(collectCrossFileDependencyProbes, job)));
176
+ status = "ok";
177
+ } catch (error) {
178
+ errorMessage = error instanceof Error ? error.stack ?? error.message : String(error);
179
+ } finally {
180
+ leaveJobWorkingDirectory();
181
+ }
182
+ if (errorMessage !== null) fs$1.writeSync(2, `${errorMessage}\n`);
183
+ writeLine(1, `${OXLINT_WORKER_JOB_END_MARKER}:${job.id}:${status}`);
184
+ writeLine(2, `${OXLINT_WORKER_JOB_END_MARKER}:${job.id}:end`);
185
+ };
102
186
  const startOxlintWorker = () => {
103
187
  const oxlintPackageDirectory = process.argv[2];
188
+ const pluginPath = process.argv[3];
104
189
  process.on("disconnect", () => process.exit(0));
105
190
  if (oxlintPackageDirectory === void 0) {
106
191
  sendToParent({
@@ -111,13 +196,18 @@ const startOxlintWorker = () => {
111
196
  }
112
197
  setStdioBlocking(process.stdout);
113
198
  setStdioBlocking(process.stderr);
114
- importOxlintInternals(oxlintPackageDirectory).then((internals) => {
199
+ Promise.all([importOxlintInternals(oxlintPackageDirectory), preloadPlugin(pluginPath)]).then(([internals]) => {
115
200
  let queue = Promise.resolve();
116
201
  process.on("message", (message) => {
202
+ if (isProbeJobMessage(message)) {
203
+ queue = queue.then(() => runProbeJob(message));
204
+ return;
205
+ }
117
206
  if (!isJobMessage(message)) return;
118
207
  queue = queue.then(() => runJob(internals, message));
119
208
  });
120
209
  sendToParent({ type: "ready" });
210
+ loadProbeCollector().catch(() => void 0);
121
211
  }, (error) => {
122
212
  sendToParent({
123
213
  type: "unavailable",
@@ -132,4 +222,4 @@ startOxlintWorker();
132
222
  export {};
133
223
 
134
224
  //# sourceMappingURL=oxlint-worker.js.map
135
- //# debugId=c27c68d9-63f9-55ae-8eed-5bceb81f5b02
225
+ //# debugId=036daa0d-20ef-5a7e-b004-e4f41f80cf0c
@@ -1,9 +1,9 @@
1
1
  //#region src/cli/utils/path-format.ts
2
2
 
3
- !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]="0330366c-931b-5aad-9410-de708cd22f46")}catch(e){}}();
3
+ !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]="59ab9154-f62b-51b5-ae76-b8a2b6114d4f")}catch(e){}}();
4
4
  const toForwardSlashes = (filePath) => filePath.replaceAll("\\", "/");
5
5
  //#endregion
6
6
  export { toForwardSlashes as t };
7
7
 
8
- //# sourceMappingURL=path-format-DnHpmJwG.js.map
9
- //# debugId=0330366c-931b-5aad-9410-de708cd22f46
8
+ //# sourceMappingURL=path-format-By20mo8A.js.map
9
+ //# debugId=59ab9154-f62b-51b5-ae76-b8a2b6114d4f
@@ -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]="a5614ba2-de96-54ef-956e-328425a670c2")}catch(e){}}();
3
- import { Dn as log, Jt as highlighter, Mn as gen, _ as VERSION } from "./record-metric-DMuxA69u.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]="6bdc71c9-e0db-52b9-923b-5882b28b0edb")}catch(e){}}();
3
+ import { Ot as highlighter, _ as VERSION, an as log, un as gen } from "./record-metric-C-ZZzzDc.js";
4
4
  //#region src/cli/utils/print-branded-header.ts
5
5
  /**
6
6
  * Single branded line every command prints first when not in JSON
@@ -18,5 +18,5 @@ const printBrandedHeader = gen(function* () {
18
18
  //#endregion
19
19
  export { printBrandedHeader as t };
20
20
 
21
- //# sourceMappingURL=print-branded-header-CFoO5ZHN.js.map
22
- //# debugId=a5614ba2-de96-54ef-956e-328425a670c2
21
+ //# sourceMappingURL=print-branded-header-DqaKyGKm.js.map
22
+ //# debugId=6bdc71c9-e0db-52b9-923b-5882b28b0edb