stim 1.22.0 → 1.23.1

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 (108) hide show
  1. package/dist/{acquire-artifact-Co2k4f7O.mjs → acquire-artifact-BzYRDgaP.mjs} +1 -1
  2. package/dist/{act-DsuqEkiM.mjs → act-vxiMwdf5.mjs} +6 -6
  3. package/dist/{activity-CMLmzp7o.mjs → activity-BpWUPgUm.mjs} +1 -1
  4. package/dist/{agent-device-usage-output-DUFaTMdd.mjs → agent-device-usage-output-CUlLsbRt.mjs} +3 -3
  5. package/dist/{android-DGkNqa_c.mjs → android-CLi6DSiS.mjs} +5 -5
  6. package/dist/{android-ByRMUoiJ.mjs → android-DtfRGLcc.mjs} +23 -23
  7. package/dist/api.d.mts +1 -0
  8. package/dist/api.mjs +18 -18
  9. package/dist/{artifact-8EY8SAPw.mjs → artifact-DBI3DALs.mjs} +9 -9
  10. package/dist/{artifact-DJPy518Y.mjs → artifact-Xvgibgzq.mjs} +9 -9
  11. package/dist/{browser-web-Bcv99PBM.mjs → browser-web-BJN9ZHxB.mjs} +5 -5
  12. package/dist/{budget-Cvwn54qV.mjs → budget-3ivAK99e.mjs} +7 -7
  13. package/dist/{build-CabC3G23.mjs → build-Dv9s8Fz-.mjs} +14 -14
  14. package/dist/{build-plan-DUC8Ka9y.mjs → build-plan-BmbdHQbr.mjs} +3 -3
  15. package/dist/{ccache-Btwc36-I.mjs → ccache-CH2EWGPB.mjs} +2 -2
  16. package/dist/{cli-CHZa9Lvk.mjs → cli-BkK6Wr5i.mjs} +17 -17
  17. package/dist/cli.mjs +1 -1
  18. package/dist/{client-OyRoEuSr.mjs → client-B4MMzfo_.mjs} +5 -5
  19. package/dist/{command-output-gwpm28fu.mjs → command-output-YKGWivpG.mjs} +1 -1
  20. package/dist/{dev-client-BSDR5h3F.mjs → dev-client-BFxiDpkf.mjs} +2 -2
  21. package/dist/{device-DklWZLqb.mjs → device-B7ljwccX.mjs} +11 -11
  22. package/dist/{device-B-L3Fbxy.mjs → device-CiNYxqp6.mjs} +6 -6
  23. package/dist/{device-capacity-DK5_EwRS.mjs → device-capacity-DH0QsZYZ.mjs} +4 -4
  24. package/dist/device-host-worker.mjs +5 -5
  25. package/dist/{device-ios-DoB6KFCO.mjs → device-ios-CbVDtDIy.mjs} +32 -4
  26. package/dist/{device-lease-run-xJPQ_QQG.mjs → device-lease-run-DXPSwdbb.mjs} +3 -3
  27. package/dist/{device-pool-BMkdsefq.mjs → device-pool-B4iOXIrD.mjs} +2 -2
  28. package/dist/{doctor-D5_EzwfA.mjs → doctor-C6t4Maue.mjs} +12 -11
  29. package/dist/{doctor-thjWAV0z.mjs → doctor-DRu-8ld6.mjs} +1 -1
  30. package/dist/{doctor-Bo7BXLux.mjs → doctor-HUC1igzw.mjs} +10 -10
  31. package/dist/{doctor-watchman-N2wDotwQ.mjs → doctor-watchman-iGBpC6KM.mjs} +2 -2
  32. package/dist/{eas-build-CwknaQYj.mjs → eas-build-DMWSSvxq.mjs} +2 -2
  33. package/dist/{eas-fallback-CSgAulr5.mjs → eas-fallback-vKlrqxgE.mjs} +5 -5
  34. package/dist/{eas-session-ledger-DlY_serQ.mjs → eas-session-ledger-BQF9Yyy9.mjs} +1 -1
  35. package/dist/{error-diagnostics-DBWO2rxE.mjs → error-diagnostics-DYsjJIHz.mjs} +3 -3
  36. package/dist/{gc-CXxN-4SE.mjs → gc-BW8E1uSC.mjs} +9 -9
  37. package/dist/{gc-DnNDQyaP.mjs → gc-dDE4QPVu.mjs} +2 -2
  38. package/dist/{guide-Br0LEfKy.mjs → guide-DYYEO3Wz.mjs} +85 -36
  39. package/dist/{hosted-android-B-9f-jkd.mjs → hosted-android-xcfgCgSF.mjs} +2 -2
  40. package/dist/{hosted-client-DZAPrcro.mjs → hosted-client-Bt-tndxV.mjs} +1 -1
  41. package/dist/{hosted-ios-CsCS21hn.mjs → hosted-ios-y19jCYFF.mjs} +1 -1
  42. package/dist/{hosted-logs-FIRx9X2f.mjs → hosted-logs-DzJKzKlj.mjs} +2 -2
  43. package/dist/{hosted-macos-_awYSpfv.mjs → hosted-macos-BJusKvqL.mjs} +4 -4
  44. package/dist/{hosted-native-BdzE668-.mjs → hosted-native-BmQC6U_x.mjs} +3 -3
  45. package/dist/{idle-shutdown-DDg3SdvY.mjs → idle-shutdown-CJmUOV5x.mjs} +4 -4
  46. package/dist/{ios-pm4nL6By.mjs → ios-CWjqfSm_.mjs} +19 -19
  47. package/dist/{ios-Ds1clbIt.mjs → ios-DTOYZGMJ.mjs} +8 -8
  48. package/dist/{ios-device--h_-8ENa.mjs → ios-device-DFGuwF4U.mjs} +1 -1
  49. package/dist/{ios-project-CZhKODF3.mjs → ios-project-CSZYI1iu.mjs} +4 -4
  50. package/dist/{js-swap-Bwhh4S7V.mjs → js-swap-BSBHldmm.mjs} +3 -3
  51. package/dist/{launch-BjxemNpK.mjs → launch-CP2wDCVd.mjs} +26 -26
  52. package/dist/{launch-CCzXlc8r.mjs → launch-D-zq8SHG.mjs} +10 -10
  53. package/dist/{logs-jTS_lHSo.mjs → logs-By5aw3g9.mjs} +4 -4
  54. package/dist/{logs-BfwwadsZ.mjs → logs-pNvA2hHK.mjs} +6 -6
  55. package/dist/{macos-NfV2D7dO.mjs → macos-C67FZ2ft.mjs} +11 -11
  56. package/dist/{macos-DVlSSyUg.mjs → macos-CPMahOC2.mjs} +1 -1
  57. package/dist/maintenance-run.mjs +4 -4
  58. package/dist/{native-android-CqgnOgsT.mjs → native-android-_MWSs3PP.mjs} +9 -9
  59. package/dist/{native-run-NwUuxbkg.mjs → native-run-Dv88i0aU.mjs} +1 -1
  60. package/dist/{native-runtime-B7KIafpM.mjs → native-runtime-DBRfY_PN.mjs} +3 -3
  61. package/dist/{native-xcode-inputs-D_VOfFL7.mjs → native-xcode-inputs-CqViUh3r.mjs} +1 -1
  62. package/dist/{native-xcode-ios-BYDOHWLN.mjs → native-xcode-ios-vFgqL_yS.mjs} +12 -12
  63. package/dist/offload-worker.mjs +43 -16
  64. package/dist/{plan-placement-DIsMtN-d.mjs → plan-placement-cr0fEU7b.mjs} +1 -1
  65. package/dist/{ports-Cy1RkmuQ.mjs → ports-DpXjKkSV.mjs} +1 -1
  66. package/dist/{prebuild-D4JoEAEs.mjs → prebuild-BligW0QS.mjs} +17 -5
  67. package/dist/{project-wM_XFTvE.mjs → project-DhCtQWWU.mjs} +11 -11
  68. package/dist/{react-native-android-6OZ7MSM7.mjs → react-native-android-ZlhQfhvq.mjs} +20 -23
  69. package/dist/{react-native-build-Dvd8hC21.mjs → react-native-build-CelbTO_y.mjs} +4 -4
  70. package/dist/{react-native-doctor-DsoSF1Y9.mjs → react-native-doctor-LTIaP7lv.mjs} +5 -5
  71. package/dist/{react-native-ios-4u1Rn-GR.mjs → react-native-ios-C5W0SA6f.mjs} +16 -16
  72. package/dist/{reload-BzkYabB-.mjs → reload-COJWTbae.mjs} +6 -6
  73. package/dist/{reload-D7AVlb8N.mjs → reload-QcwnYLYV.mjs} +1 -1
  74. package/dist/{remote-DjGDmlTZ.mjs → remote-DR8qUERM.mjs} +4 -4
  75. package/dist/{result-D2Ykz_iD.mjs → result-utnBea7x.mjs} +9 -9
  76. package/dist/{server-command-C6QjeupS.mjs → server-command-B9o92sLM.mjs} +3 -3
  77. package/dist/{server-expo-CrjB29pq.mjs → server-expo-BXrWxNYh.mjs} +31 -10
  78. package/dist/server-expo-Ddr8cG_c.mjs +2 -0
  79. package/dist/{settings-DpR-1Wnn.mjs → settings-PfJx8uK1.mjs} +1 -1
  80. package/dist/{settings-write-CzD60rOD.mjs → settings-write-Chuy7Cte.mjs} +1 -1
  81. package/dist/{slot-launch-CbfmNgM6.mjs → slot-launch-B7AuoWJv.mjs} +2 -2
  82. package/dist/{stage-Bps5oius.mjs → stage-C4u17aES.mjs} +1 -1
  83. package/dist/{start-Br-oxqMD.mjs → start-BL_BsiWt.mjs} +1 -1
  84. package/dist/{start-EojN4WFz.mjs → start-CU8mCPC7.mjs} +4 -4
  85. package/dist/{stats-D3GerlFW.mjs → stats-CO6sK0Nh.mjs} +3 -3
  86. package/dist/{status-EvrK72L2.mjs → status-CrJutl6-.mjs} +1 -1
  87. package/dist/{status-WBDajew2.mjs → status-_WPHzVft.mjs} +11 -11
  88. package/dist/{status-watch-Bg_u-pwR.mjs → status-watch-BHFasOZN.mjs} +1 -1
  89. package/dist/status-worker.mjs +1 -1
  90. package/dist/{stop-Mv6W9FAk.mjs → stop-BJ06ipTZ.mjs} +9 -9
  91. package/dist/{stop-Dky10AEJ.mjs → stop-CR5689oB.mjs} +2 -2
  92. package/dist/{stop-DTZ9uTw3.mjs → stop-iuFHjUST.mjs} +2 -2
  93. package/dist/supervisor-run.mjs +8 -8
  94. package/dist/{support-yUiOjnVY.mjs → support-CbXPbUMJ.mjs} +3 -3
  95. package/dist/{support-CNioewsd.mjs → support-TWuQlHQo.mjs} +10 -6
  96. package/dist/{swiftpm-macos-BIak-Rxv.mjs → swiftpm-macos-DbwGCpZg.mjs} +3 -3
  97. package/dist/{toolchain-DpJMHq0n.mjs → toolchain-B9hCFCQw.mjs} +1 -1
  98. package/dist/{toolchain-BY8X8HXx.mjs → toolchain-XkA2PfJZ.mjs} +1 -1
  99. package/dist/{web-DKx6yoFA.mjs → web-DRF_oFXk.mjs} +3 -3
  100. package/dist/web-kDE9Myoy.mjs +2 -0
  101. package/dist/web-run.mjs +1 -1
  102. package/dist/{workspaces-CpANmBlq.mjs → workspaces-e41xsjKr.mjs} +2 -2
  103. package/dist/{worktree-CHecZ4Oq.mjs → worktree-B4Nj3EGS.mjs} +12 -12
  104. package/dist/{worktree-ZqZVjD9K.mjs → worktree-BEwxVwKF.mjs} +1 -1
  105. package/dist/{xcode-BXn9-xYx.mjs → xcode-Rq744mBF.mjs} +3 -3
  106. package/package.json +7 -7
  107. package/dist/server-expo-D58c9L0M.mjs +0 -2
  108. package/dist/web-CZ07gd77.mjs +0 -2
@@ -1,6 +1,6 @@
1
1
  import { d as hostingMachines } from "./selection-DSMbWEX2.mjs";
2
2
  import { r as readHostedNative } from "./ios-state-Dtw5K2aI.mjs";
3
- import { i as probeHost, n as automaticDevicePlacement } from "./eas-fallback-CSgAulr5.mjs";
3
+ import { i as probeHost, n as automaticDevicePlacement } from "./eas-fallback-vKlrqxgE.mjs";
4
4
  import { automaticMachineEnabled } from "@stim-cli/core/state";
5
5
  //#region src/device-host/plan-placement.ts
6
6
  /**
@@ -1,5 +1,5 @@
1
1
  import { p as getProject } from "./config-DlrsduwG.mjs";
2
- import { n as findCommandWorkspace } from "./project-wM_XFTvE.mjs";
2
+ import { n as findCommandWorkspace } from "./project-DhCtQWWU.mjs";
3
3
  import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-DkEzOfzO.mjs";
4
4
  //#region src/commands/ports.ts
5
5
  async function inProject(action) {
@@ -4,10 +4,10 @@ import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./proc
4
4
  import { o as git, s as gitAsync } from "./operation-exec-BW0em61G.mjs";
5
5
  import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
6
6
  import { yt as gitCommonDirOnDisk } from "./settings-C7O8A6ZI.mjs";
7
- import { v as detectIsExpo } from "./project-wM_XFTvE.mjs";
8
- import { Zn as remoteCliInvocation } from "./budget-Cvwn54qV.mjs";
7
+ import { v as detectIsExpo } from "./project-DhCtQWWU.mjs";
8
+ import { Zn as remoteCliInvocation } from "./budget-3ivAK99e.mjs";
9
9
  import { a as diffFingerprintSources, v as storedSources } from "./build-cache-Dv7RN200.mjs";
10
- import { i as expoBinRefusal, r as expoBinPath } from "./server-expo-CrjB29pq.mjs";
10
+ import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath } from "./server-expo-BXrWxNYh.mjs";
11
11
  import { existsSync, realpathSync } from "node:fs";
12
12
  import { dirname, join, relative } from "node:path";
13
13
  import { ambientContext } from "@stim-cli/core";
@@ -342,11 +342,22 @@ function recordPrebuild(root, platform, fingerprint) {
342
342
  }
343
343
  }));
344
344
  }
345
+ /**
346
+ * @expo/cli 57 made `expo prebuild` delete existing native folders by default and added `--no-clean`
347
+ * to keep them (expo/expo#47209); earlier CLIs keep them by default and reject `--no-clean`.
348
+ */
349
+ function keepNativeDirArgs(root) {
350
+ return (expoSdkMajor(root) ?? 0) >= 57 ? ["--no-clean"] : [];
351
+ }
352
+ function staleNativeDirRemedy(platform) {
353
+ const dir = nativeDirName(platform);
354
+ return `Fix what the output above reports. Stim ran \`expo prebuild\` over the existing ${dir}/ without deleting it, which keeps what earlier config plugins wrote there. If ${dir}/ predates a removed config plugin or an Expo SDK upgrade, delete ${dir}/ and run again so Stim generates it fresh.`;
355
+ }
345
356
  function staleNativeDirRefusal(platform) {
346
357
  const dir = nativeDirName(platform);
347
358
  return {
348
359
  code: PREBUILD_ERROR,
349
- message: `The fingerprint leaves ${dir}/ out of the cache key, and Stim cannot show that ${dir}/ was generated from the current app config. Git tracks files in it, or could not say whether it does, so Stim will not regenerate it with \`expo prebuild --clean\`.`,
360
+ message: `The fingerprint leaves ${dir}/ out of the cache key, and Stim cannot show that ${dir}/ was generated from the current app config. Git tracks files in it, or could not say whether it does, so Stim will not run \`expo prebuild\` over it.`,
350
361
  remedy: `Stop excluding ${dir}/ from the fingerprint (check .fingerprintignore) so the cache key covers its files, or add ${dir}/ to .gitignore and untrack it so Stim regenerates it from the app config.`
351
362
  };
352
363
  }
@@ -417,7 +428,7 @@ async function runPrebuild(root, platform, logWriter, { spawnFn = null, now = Da
417
428
  "-p",
418
429
  platform,
419
430
  "--no-install",
420
- ...clean ? ["--clean"] : []
431
+ ...clean ? ["--clean"] : dirExists ? keepNativeDirArgs(root) : []
421
432
  ], "expo");
422
433
  child = spawnDeclared(ambientContext(), () => spawn(invocation.file, invocation.args, {
423
434
  cwd: root,
@@ -463,6 +474,7 @@ async function runPrebuild(root, platform, logWriter, { spawnFn = null, now = Da
463
474
  failed: true,
464
475
  code: PREBUILD_ERROR,
465
476
  reason: `\`expo prebuild -p ${platform}\` failed (${how}).`,
477
+ ...dirExists && !clean ? { remedy: staleNativeDirRemedy(platform) } : {},
466
478
  lastLines: tail.slice(),
467
479
  durationMs
468
480
  });
@@ -308,8 +308,8 @@ const nativeAndroidIntegration = {
308
308
  application: true,
309
309
  platforms: () => ["android"],
310
310
  validate: (operation) => operation === "android" ? null : void 0,
311
- android: async () => (await import("./native-android-CqgnOgsT.mjs")).nativeAndroidProject(root),
312
- doctor: async () => (await import("./native-android-CqgnOgsT.mjs")).nativeAndroidDoctor(root)
311
+ android: async () => (await import("./native-android-_MWSs3PP.mjs")).nativeAndroidProject(root),
312
+ doctor: async () => (await import("./native-android-_MWSs3PP.mjs")).nativeAndroidDoctor(root)
313
313
  };
314
314
  }
315
315
  };
@@ -737,8 +737,8 @@ const nativeXcodeProjectIntegration = {
737
737
  application: problem === null,
738
738
  platforms: () => problem ? [] : ["ios"],
739
739
  validate: (operation) => operation === "ios" ? problem : void 0,
740
- ios: async () => (await import("./native-xcode-ios-BYDOHWLN.mjs")).nativeXcodeIosProject(root),
741
- doctor: async () => (await import("./native-xcode-ios-BYDOHWLN.mjs")).nativeXcodeDoctor(root)
740
+ ios: async () => (await import("./native-xcode-ios-vFgqL_yS.mjs")).nativeXcodeIosProject(root),
741
+ doctor: async () => (await import("./native-xcode-ios-vFgqL_yS.mjs")).nativeXcodeDoctor(root)
742
742
  };
743
743
  }
744
744
  };
@@ -943,7 +943,7 @@ function createProjectRegistry(integrations) {
943
943
  //#region src/integrations/projects.ts
944
944
  const expo = {
945
945
  mode: MODE_EXPO,
946
- loadDevServer: async () => (await import("./server-expo-D58c9L0M.mjs")).startExpoServer,
946
+ loadDevServer: async () => (await import("./server-expo-Ddr8cG_c.mjs")).startExpoServer,
947
947
  platforms(root) {
948
948
  const appJson = readAppJson(root);
949
949
  const config = appJson?.expo ?? appJson;
@@ -993,9 +993,9 @@ const projectRegistry = createProjectRegistry([
993
993
  ownedRoots: problem === null ? [join(root, "ios"), join(root, "android")] : [],
994
994
  platforms: (resolved) => nativeProjectIntegration(root).platforms(root, resolved),
995
995
  validate: (operation) => operation === "ios" || operation === "android" || operation === "dev-server" ? problem : void 0,
996
- ios: async (settings) => (await import("./react-native-ios-4u1Rn-GR.mjs")).reactNativeIosProject(root, settings),
997
- android: async (resolved) => (await import("./react-native-android-6OZ7MSM7.mjs")).reactNativeAndroidProject(root, resolved),
998
- doctor: async () => (await import("./react-native-doctor-DsoSF1Y9.mjs")).reactNativeProjectDoctor(root)
996
+ ios: async (settings) => (await import("./react-native-ios-C5W0SA6f.mjs")).reactNativeIosProject(root, settings),
997
+ android: async (resolved) => (await import("./react-native-android-ZlhQfhvq.mjs")).reactNativeAndroidProject(root, resolved),
998
+ doctor: async () => (await import("./react-native-doctor-LTIaP7lv.mjs")).reactNativeProjectDoctor(root)
999
999
  };
1000
1000
  }
1001
1001
  },
@@ -1009,9 +1009,9 @@ const projectRegistry = createProjectRegistry([
1009
1009
  application: true,
1010
1010
  platforms: ({ settings }) => settingValueAt(settings, "macos.product") && settingValueAt(settings, "macos.infoPlist") ? ["macos"] : [],
1011
1011
  validate: (operation) => operation === "macos" ? null : void 0,
1012
- macos: async () => (await import("./swiftpm-macos-BIak-Rxv.mjs")).swiftpmMacosProject(root),
1012
+ macos: async () => (await import("./swiftpm-macos-DbwGCpZg.mjs")).swiftpmMacosProject(root),
1013
1013
  doctor: async () => {
1014
- const { macosToolchain, macosToolchainAsync } = await import("./toolchain-BY8X8HXx.mjs");
1014
+ const { macosToolchain, macosToolchainAsync } = await import("./toolchain-XkA2PfJZ.mjs");
1015
1015
  return {
1016
1016
  inspect: () => [],
1017
1017
  offloadTargets: ({ options: { host = process.platform, platform, operation } }) => host === "darwin" && platform === void 0 ? async () => [{
@@ -1031,7 +1031,7 @@ const projectRegistry = createProjectRegistry([
1031
1031
  application: false,
1032
1032
  platforms: ({ settings }) => webSettings(settings).url !== null ? ["web"] : [],
1033
1033
  validate: (operation) => operation === "web" ? null : void 0,
1034
- web: async () => (await import("./browser-web-Bcv99PBM.mjs")).browserWebProject(root)
1034
+ web: async () => (await import("./browser-web-BJN9ZHxB.mjs")).browserWebProject(root)
1035
1035
  };
1036
1036
  }
1037
1037
  },
@@ -1,31 +1,31 @@
1
1
  import { _ as reportSignal, d as spawnDeclared, m as operationState, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-DlrsduwG.mjs";
3
3
  import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-gwpm28fu.mjs";
4
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-YKGWivpG.mjs";
5
5
  import { a as killOnAbort, f as throwIfCancelled, t as runOperationFile } from "./operation-exec-BW0em61G.mjs";
6
6
  import { r as readWorkspaceState } from "./workspace-state-U08dEzhG.mjs";
7
7
  import { $ as settingOriginScope, B as realpathInside, H as remoteEasFallbackSetting, Ht as makeTemporaryDirectory, R as publicUrlSetting, Ut as removeTemporaryEntry, W as resolveAndroidLayout, m as defaultAndroidLayout, nt as settingsLayers, rt as tunnelModeSetting } from "./settings-C7O8A6ZI.mjs";
8
- import { v as detectIsExpo } from "./project-wM_XFTvE.mjs";
9
- import { Bn as checkEasAuth, Fn as processContext, Jn as resolveRemote, Un as loadProjectProvider, Xn as bundleInvocation, Y as statsProjectKey } from "./budget-Cvwn54qV.mjs";
8
+ import { v as detectIsExpo } from "./project-DhCtQWWU.mjs";
9
+ import { Bn as checkEasAuth, Fn as processContext, Jn as resolveRemote, Un as loadProjectProvider, Xn as bundleInvocation, Y as statsProjectKey } from "./budget-3ivAK99e.mjs";
10
10
  import { C as compareAssetManifests, S as captureAssetManifest, _ as storedAssetManifest, b as untrackedNativeFiles, c as fingerprintDiffRecord, g as storeBuild, h as resolveBuild, i as configInputsChanged, l as fingerprintProject, m as refingerprintAfterMutation, n as buildCacheKey, r as changedDuringBuildLine, s as filesystemBuildCapability, u as inputsChangedDuringBuild, w as readAssetManifest, x as assetDiffReason, y as untrackedMissLine } from "./build-cache-Dv7RN200.mjs";
11
11
  import { E as findBuildTool, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, k as hostSystemImageArch, l as androidSystemImageAbi, r as androidBuildToolName } from "./android-C7sVmyI9.mjs";
12
- import { t as cleanLine } from "./server-expo-CrjB29pq.mjs";
13
- import { o as resolveCcache } from "./ccache-Btwc36-I.mjs";
14
- import { _ as tailLines, h as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-BXn9-xYx.mjs";
15
- import { r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DpJMHq0n.mjs";
16
- import { h as detectAppIds, m as detectAndroidPackage } from "./start-EojN4WFz.mjs";
17
- import { c as readProductFlavors, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-Dvd8hC21.mjs";
12
+ import { t as cleanLine } from "./server-expo-BXrWxNYh.mjs";
13
+ import { o as resolveCcache } from "./ccache-CH2EWGPB.mjs";
14
+ import { _ as tailLines, h as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-Rq744mBF.mjs";
15
+ import { r as androidToolchainAsync, t as androidRequirements } from "./toolchain-B9hCFCQw.mjs";
16
+ import { h as detectAppIds, m as detectAndroidPackage } from "./start-CU8mCPC7.mjs";
17
+ import { c as readProductFlavors, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-CelbTO_y.mjs";
18
18
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-DZLoYFVb.mjs";
19
- import { i as planEasDevelopmentBuild } from "./eas-build-CwknaQYj.mjs";
20
- import { a as staleNativeDirRefusal, i as runPrebuild, n as planPrebuildAsync, o as explainBuildMiss, r as recordPrebuild, s as fingerprintErrorMissReason, t as planPrebuild } from "./prebuild-D4JoEAEs.mjs";
21
- import { a as PLATFORM, c as androidGradleProject, h as displayPath, i as NO_FINGERPRINT, l as androidJobLayout, o as androidBuildOptions, r as NO_DEVICE } from "./support-yUiOjnVY.mjs";
19
+ import { i as planEasDevelopmentBuild } from "./eas-build-DMWSSvxq.mjs";
20
+ import { a as staleNativeDirRefusal, i as runPrebuild, n as planPrebuildAsync, o as explainBuildMiss, r as recordPrebuild, s as fingerprintErrorMissReason, t as planPrebuild } from "./prebuild-BligW0QS.mjs";
21
+ import { a as PLATFORM, c as androidGradleProject, h as displayPath, i as NO_FINGERPRINT, l as androidJobLayout, o as androidBuildOptions, r as NO_DEVICE } from "./support-CbXPbUMJ.mjs";
22
22
  import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
23
- import { c as resolveAndroidRunPlan } from "./result-D2Ykz_iD.mjs";
24
- import { t as checkEasFallback } from "./eas-fallback-CSgAulr5.mjs";
25
- import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-CCzXlc8r.mjs";
26
- import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-DUC8Ka9y.mjs";
27
- import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-Bwhh4S7V.mjs";
28
- import { t as planHostedDevice } from "./plan-placement-DIsMtN-d.mjs";
23
+ import { c as resolveAndroidRunPlan } from "./result-utnBea7x.mjs";
24
+ import { t as checkEasFallback } from "./eas-fallback-vKlrqxgE.mjs";
25
+ import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-D-zq8SHG.mjs";
26
+ import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-BmbdHQbr.mjs";
27
+ import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-BSBHldmm.mjs";
28
+ import { t as planHostedDevice } from "./plan-placement-cr0fEU7b.mjs";
29
29
  import { constants, existsSync, mkdirSync, readFileSync, renameSync } from "node:fs";
30
30
  import { basename, dirname, isAbsolute, join, relative } from "node:path";
31
31
  import chalk from "chalk";
@@ -819,10 +819,7 @@ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, setting
819
819
  beforePrepare();
820
820
  step("prebuild");
821
821
  recordPrebuild(root, "android", null);
822
- const pre = await prebuild(root, "android", writer, {
823
- isExpo,
824
- clean: plan === "regenerate"
825
- });
822
+ const pre = await prebuild(root, "android", writer, { isExpo });
826
823
  if (pre.failed) throw new AndroidRecipeRefusal({
827
824
  code: pre.code,
828
825
  message: pre.reason,
@@ -833,7 +830,7 @@ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, setting
833
830
  logPath: displayPath(root, buildLog)
834
831
  }
835
832
  });
836
- phase("prebuild", `${plan === "generate" ? "android/ generated" : "android/ not generated from this fingerprint -> regenerated with --clean"} (${formatDuration(pre.durationMs)})`);
833
+ phase("prebuild", `${plan === "generate" ? "android/ generated" : "android/ not generated from this fingerprint -> updated in place"} (${formatDuration(pre.durationMs)})`);
837
834
  },
838
835
  async reconcile() {
839
836
  const rekeyedBy = [];
@@ -1,14 +1,14 @@
1
1
  import { d as spawnDeclared, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { o as sharedCompilationCache } from "./paths-DQtTgsBf.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
4
+ import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
5
  import { a as killOnAbort } from "./operation-exec-BW0em61G.mjs";
6
- import { C as resolvePackageJson } from "./project-wM_XFTvE.mjs";
6
+ import { C as resolvePackageJson } from "./project-DhCtQWWU.mjs";
7
7
  import { r as register } from "./cache-manifest-DSeQjt-Q.mjs";
8
8
  import { o as androidHome } from "./android-C7sVmyI9.mjs";
9
9
  import { p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
10
- import { a as readCcacheActivity, n as CCACHE_UNAVAILABLE } from "./ccache-Btwc36-I.mjs";
11
- import { a as buildXcode, d as pickXcodeProject, g as swiftPrefixMappingSupported, h as startBuildHeartbeat, i as SWIFT_PREFIX_MAPPING_MIN_SWIFT, l as parseSwiftVersion, r as HEARTBEAT_INTERVAL_MS, s as compilationCacheSettings, u as parseXcodeMajor } from "./xcode-BXn9-xYx.mjs";
10
+ import { a as readCcacheActivity, n as CCACHE_UNAVAILABLE } from "./ccache-CH2EWGPB.mjs";
11
+ import { a as buildXcode, d as pickXcodeProject, g as swiftPrefixMappingSupported, h as startBuildHeartbeat, i as SWIFT_PREFIX_MAPPING_MIN_SWIFT, l as parseSwiftVersion, r as HEARTBEAT_INTERVAL_MS, s as compilationCacheSettings, u as parseXcodeMajor } from "./xcode-Rq744mBF.mjs";
12
12
  import { createHash } from "node:crypto";
13
13
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync } from "node:fs";
14
14
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
@@ -1,10 +1,10 @@
1
1
  import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
- import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
2
+ import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
3
3
  import { K as resolveIosProjectDir, W as resolveAndroidLayout } from "./settings-C7O8A6ZI.mjs";
4
- import { v as detectIsExpo } from "./project-wM_XFTvE.mjs";
5
- import { b as bundlerPin } from "./xcode-BXn9-xYx.mjs";
6
- import { a as iosToolchainAsync, n as androidToolchain, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DpJMHq0n.mjs";
7
- import { a as reactNativeDoctorFindings, i as mainCheckoutProjectRoot, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as repairCxxLauncherState, t as checkMainCheckout } from "./doctor-Bo7BXLux.mjs";
4
+ import { v as detectIsExpo } from "./project-DhCtQWWU.mjs";
5
+ import { b as bundlerPin } from "./xcode-Rq744mBF.mjs";
6
+ import { a as iosToolchainAsync, n as androidToolchain, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-B9hCFCQw.mjs";
7
+ import { a as reactNativeDoctorFindings, i as mainCheckoutProjectRoot, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as repairCxxLauncherState, t as checkMainCheckout } from "./doctor-HUC1igzw.mjs";
8
8
  import { existsSync, readdirSync } from "node:fs";
9
9
  import { join, relative } from "node:path";
10
10
  //#region src/diagnostics/doctor-ios-architectures.ts
@@ -1,21 +1,21 @@
1
1
  import { _ as reportSignal } from "./exec-DEoAhcze.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-gwpm28fu.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-YKGWivpG.mjs";
3
3
  import { H as remoteEasFallbackSetting, K as resolveIosProjectDir, R as publicUrlSetting, U as remoteIosSetting, a as SETTING_SHAPE_REMEDY, et as settingShapeErrors, p as cacheProviderSettingError, rt as tunnelModeSetting } from "./settings-C7O8A6ZI.mjs";
4
- import { Fn as processContext, Y as statsProjectKey } from "./budget-Cvwn54qV.mjs";
5
- import { d as runCancellationSignal } from "./native-run-NwUuxbkg.mjs";
4
+ import { Fn as processContext, Y as statsProjectKey } from "./budget-3ivAK99e.mjs";
5
+ import { d as runCancellationSignal } from "./native-run-Dv88i0aU.mjs";
6
6
  import { c as fingerprintDiffRecord, i as configInputsChanged, m as refingerprintAfterMutation, n as buildCacheKey, r as changedDuringBuildLine, s as filesystemBuildCapability, u as inputsChangedDuringBuild, y as untrackedMissLine } from "./build-cache-Dv7RN200.mjs";
7
7
  import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
8
- import { b as bundlerPin } from "./xcode-BXn9-xYx.mjs";
9
- import { a as iosToolchainAsync } from "./toolchain-DpJMHq0n.mjs";
10
- import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-CNioewsd.mjs";
8
+ import { b as bundlerPin } from "./xcode-Rq744mBF.mjs";
9
+ import { a as iosToolchainAsync } from "./toolchain-B9hCFCQw.mjs";
10
+ import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-TWuQlHQo.mjs";
11
11
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-DZLoYFVb.mjs";
12
- import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-CwknaQYj.mjs";
13
- import { a as staleNativeDirRefusal, o as explainBuildMiss, r as recordPrebuild, s as fingerprintErrorMissReason } from "./prebuild-D4JoEAEs.mjs";
14
- import { r as planPayload, t as planCachedBuild } from "./build-plan-DUC8Ka9y.mjs";
15
- import { t as IosRecipeRefusal } from "./ios-project-CZhKODF3.mjs";
16
- import { a as hostedIosSelectors } from "./remote-DjGDmlTZ.mjs";
17
- import { c as copyAppAside, i as DEFAULT_DEPS, n as iosMetroRuntime, r as iosProcessRuntime, u as writeIpTxt } from "./launch-BjxemNpK.mjs";
18
- import { t as planHostedDevice } from "./plan-placement-DIsMtN-d.mjs";
12
+ import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-DMWSSvxq.mjs";
13
+ import { a as staleNativeDirRefusal, o as explainBuildMiss, r as recordPrebuild, s as fingerprintErrorMissReason } from "./prebuild-BligW0QS.mjs";
14
+ import { r as planPayload, t as planCachedBuild } from "./build-plan-BmbdHQbr.mjs";
15
+ import { t as IosRecipeRefusal } from "./ios-project-CSZYI1iu.mjs";
16
+ import { a as hostedIosSelectors } from "./remote-DR8qUERM.mjs";
17
+ import { c as copyAppAside, i as DEFAULT_DEPS, n as iosMetroRuntime, r as iosProcessRuntime, u as writeIpTxt } from "./launch-CP2wDCVd.mjs";
18
+ import { t as planHostedDevice } from "./plan-placement-cr0fEU7b.mjs";
19
19
  import { rmSync } from "node:fs";
20
20
  import chalk from "chalk";
21
21
  //#region src/integrations/react-native-ios-plan.ts
@@ -434,7 +434,7 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
434
434
  if (prebuild === "generate" || prebuild === "regenerate") {
435
435
  step("prebuild");
436
436
  recordPrebuild(root, PLATFORM, null);
437
- const result = await d.runPrebuild(root, PLATFORM, logWriter(), { clean: prebuild === "regenerate" });
437
+ const result = await d.runPrebuild(root, PLATFORM, logWriter());
438
438
  if (result?.failed) {
439
439
  phase("prebuild", "FAILED");
440
440
  fail({
@@ -444,7 +444,7 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
444
444
  lines: (result.lastLines || []).slice(-5)
445
445
  });
446
446
  }
447
- phase("prebuild", `${prebuild === "generate" ? "ios/ absent -> generated" : "ios/ not generated from this fingerprint -> regenerated with --clean"} (${formatDuration(result?.durationMs ?? 0)})`);
447
+ phase("prebuild", `${prebuild === "generate" ? "ios/ absent -> generated" : "ios/ not generated from this fingerprint -> updated in place"} (${formatDuration(result?.durationMs ?? 0)})`);
448
448
  mutatingSteps.push("prebuild");
449
449
  }
450
450
  if (isExpo && buildScheme !== void 0) {
@@ -455,7 +455,7 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
455
455
  }
456
456
  const podState = d.readPodState(root, iosProject.dir);
457
457
  const verdict = d.podsAreStale(podState.lockText, podState.manifestText, podState.dir);
458
- const action = podAction(podState, verdict);
458
+ const action = podAction(podState, verdict, { prebuildRan: mutatingSteps.includes("prebuild") });
459
459
  if (action.install) {
460
460
  step("pods");
461
461
  const result = await d.runPodInstall(root, logWriter(), {
@@ -1,18 +1,18 @@
1
1
  import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-DlrsduwG.mjs";
2
- import { f as refuseNoProject, l as phaseLine } from "./command-output-gwpm28fu.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-YKGWivpG.mjs";
3
3
  import { d as cancelledError, f as throwIfCancelled, u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
4
4
  import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
5
5
  import { Nt as repoRootAsync } from "./settings-C7O8A6ZI.mjs";
6
- import { I as readWorkspaceLaunches, r as findCommandWorkspaceAsync } from "./project-wM_XFTvE.mjs";
6
+ import { I as readWorkspaceLaunches, r as findCommandWorkspaceAsync } from "./project-DhCtQWWU.mjs";
7
7
  import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-DiXtA3Ty.mjs";
8
8
  import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state--smjFSTL.mjs";
9
- import { Sn as iosAppProcess, _n as ensureMetroReverse, dn as androidAppProcess } from "./budget-Cvwn54qV.mjs";
9
+ import { Sn as iosAppProcess, _n as ensureMetroReverse, dn as androidAppProcess } from "./budget-3ivAK99e.mjs";
10
10
  import { et as resolveOwnedAvdSerialAsync } from "./android-C7sVmyI9.mjs";
11
11
  import { E as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-hcBpnEGk.mjs";
12
- import { f as probeHostedSession } from "./hosted-client-DZAPrcro.mjs";
12
+ import { f as probeHostedSession } from "./hosted-client-Bt-tndxV.mjs";
13
13
  import { r as readHostedNative } from "./ios-state-Dtw5K2aI.mjs";
14
- import { r as reopenHostedAndroidMetro } from "./hosted-android-B-9f-jkd.mjs";
15
- import { n as nativeRunCommand } from "./slot-launch-CbfmNgM6.mjs";
14
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-xcfgCgSF.mjs";
15
+ import { n as nativeRunCommand } from "./slot-launch-B7AuoWJv.mjs";
16
16
  import { n as sendToOwnedPage, t as liveWebRecord } from "./page-DBL2PiUU.mjs";
17
17
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
18
18
  import { WebSocket } from "ws";
@@ -1,2 +1,2 @@
1
- import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-BzkYabB-.mjs";
1
+ import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-COJWTbae.mjs";
2
2
  export { reloadCommand as default, registerReload, runReload };
@@ -1,10 +1,10 @@
1
1
  import { H as deviceSlotPlatforms } from "./config-DlrsduwG.mjs";
2
- import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
2
+ import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
3
3
  import { F as parseIosRemote, H as remoteEasFallbackSetting, R as publicUrlSetting, U as remoteIosSetting, rt as tunnelModeSetting } from "./settings-C7O8A6ZI.mjs";
4
- import "./budget-Cvwn54qV.mjs";
5
- import { b as resolveSimulatorAppFlag } from "./support-CNioewsd.mjs";
4
+ import "./budget-3ivAK99e.mjs";
5
+ import { b as resolveSimulatorAppFlag } from "./support-TWuQlHQo.mjs";
6
6
  import { n as devicePlacementRecord } from "./placement-log-BnGgJRRZ.mjs";
7
- import { r as devicePlacementLine } from "./eas-fallback-CSgAulr5.mjs";
7
+ import { r as devicePlacementLine } from "./eas-fallback-vKlrqxgE.mjs";
8
8
  import chalk from "chalk";
9
9
  //#region src/commands/ios/remote.ts
10
10
  function deviceRemoteConflict(remote, physical) {
@@ -1,19 +1,19 @@
1
1
  import { l as workspaceAgentDeviceDir } from "./paths-DQtTgsBf.mjs";
2
2
  import { H as deviceSlotPlatforms, p as getProject } from "./config-DlrsduwG.mjs";
3
- import { i as formatDuration, l as phaseLine } from "./command-output-gwpm28fu.mjs";
3
+ import { i as formatDuration, l as phaseLine } from "./command-output-YKGWivpG.mjs";
4
4
  import { $ as settingOriginScope, F as parseIosRemote, G as resolveCacheProviderConfig, V as remoteAndroidSetting, W as resolveAndroidLayout, Z as settingFile, a as SETTING_SHAPE_REMEDY, d as androidLayoutSetting, et as settingShapeErrors, f as androidLayoutSettingError, it as unknownSettingKeys, nt as settingsLayers, p as cacheProviderSettingError, s as androidAvdConfigSettingError, u as androidDataPartitionSizeGbSettingError } from "./settings-C7O8A6ZI.mjs";
5
- import { v as detectIsExpo } from "./project-wM_XFTvE.mjs";
6
- import { B as recordFinishedBuild, Hn as isEasAuthFailureText, Rn as UPLOAD_TIMEOUT_MS, Vn as easAuthNote, zn as cacheLevel } from "./budget-Cvwn54qV.mjs";
5
+ import { v as detectIsExpo } from "./project-DhCtQWWU.mjs";
6
+ import { B as recordFinishedBuild, Hn as isEasAuthFailureText, Rn as UPLOAD_TIMEOUT_MS, Vn as easAuthNote, zn as cacheLevel } from "./budget-3ivAK99e.mjs";
7
7
  import { B as ownedAvdDeviceProfile, I as listInstalledSystemImages, K as ownedAvdSystemImage, N as listAvdDeviceProfilesAsync, Q as profileNeedsFoldFeature, X as pickDefaultSystemImage, _t as parkedMaxSetting, rt as systemImageSupportsFold, t as DEFAULT_AVD_DEVICE_PROFILE } from "./android-C7sVmyI9.mjs";
8
8
  import { a as workspaceLinkLine } from "./stim-desktop-D5OGpYZM.mjs";
9
9
  import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-ccaPc4ox.mjs";
10
- import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine } from "./ccache-Btwc36-I.mjs";
11
- import { c as readProductFlavors, s as productFlavorRefusal } from "./react-native-build-Dvd8hC21.mjs";
12
- import { l as parseDeviceWait } from "./device-lease-run-xJPQ_QQG.mjs";
13
- import { t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-DK5_EwRS.mjs";
10
+ import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine } from "./ccache-CH2EWGPB.mjs";
11
+ import { c as readProductFlavors, s as productFlavorRefusal } from "./react-native-build-CelbTO_y.mjs";
12
+ import { l as parseDeviceWait } from "./device-lease-run-DXPSwdbb.mjs";
13
+ import { t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-DH0QsZYZ.mjs";
14
14
  import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-ngferVq2.mjs";
15
- import { r as isPhysicalDeviceRequest } from "./native-runtime-B7KIafpM.mjs";
16
- import { C as remoteAvdFlagRefusal, D as systemImageRefusal, E as resolveVariant, T as resolveSystemImage, a as PLATFORM, m as deviceProfileRefusal, v as foldableImageRefusal, w as resolveDeviceProfile, y as isReleaseVariant } from "./support-yUiOjnVY.mjs";
15
+ import { r as isPhysicalDeviceRequest } from "./native-runtime-DBRfY_PN.mjs";
16
+ import { C as remoteAvdFlagRefusal, D as systemImageRefusal, E as resolveVariant, T as resolveSystemImage, a as PLATFORM, m as deviceProfileRefusal, v as foldableImageRefusal, w as resolveDeviceProfile, y as isReleaseVariant } from "./support-CbXPbUMJ.mjs";
17
17
  import { buildDiagnostics } from "@stim-cli/core/state";
18
18
  import chalk from "chalk";
19
19
  //#region src/commands/android/plan.ts
@@ -1,9 +1,9 @@
1
1
  import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { n as METRO_COMMAND_PORT } from "./settings-C7O8A6ZI.mjs";
3
- import { T as MODE_COMMAND } from "./project-wM_XFTvE.mjs";
3
+ import { T as MODE_COMMAND } from "./project-DhCtQWWU.mjs";
4
4
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
5
5
  import { f as signalProcessTree } from "./metro-DiXtA3Ty.mjs";
6
- import { f as recordFromLine, h as superviseChildServer, m as withProjectNode } from "./server-expo-CrjB29pq.mjs";
6
+ import { _ as withProjectNode, f as recordFromLine, h as projectNodeLine, v as superviseChildServer } from "./server-expo-BXrWxNYh.mjs";
7
7
  import { join } from "node:path";
8
8
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
9
9
  //#region src/supervisor/server-command.ts
@@ -34,7 +34,7 @@ async function startCommandServer({ root, port, logsDir, command, writer = null,
34
34
  src: "metro",
35
35
  level: "info",
36
36
  event: "project_node",
37
- msg: `Metro runs on Node ${node.pinned.version} from ${node.pinned.bin}, which ${node.pinned.pin} pins`
37
+ msg: `Metro runs on ${projectNodeLine(node.pinned)}`
38
38
  });
39
39
  const child = spawn(program, args, {
40
40
  cwd: root,
@@ -2,13 +2,13 @@ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { n as stripAnsi, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
3
3
  import { u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
4
4
  import { q as resolveProjectSettings } from "./settings-C7O8A6ZI.mjs";
5
- import { C as resolvePackageJson } from "./project-wM_XFTvE.mjs";
5
+ import { C as resolvePackageJson } from "./project-DhCtQWWU.mjs";
6
6
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
7
7
  import { a as expoMetroStoreEnv, c as registerMetroStore, f as resolveMetroSharedCache, i as expoMetroConfigPath, n as supervisorError, o as metroStoreConfirmedRoot, s as metroStoreRoot } from "./errors-ccaPc4ox.mjs";
8
8
  import { accessSync, constants, existsSync, readFileSync } from "node:fs";
9
9
  import { delimiter, dirname, join } from "node:path";
10
10
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
11
- import { projectNodeBin, satisfiesNodePin } from "@stim-cli/core/toolchain";
11
+ import { meetsNodePinMajor, projectNodeBin, projectNodePin, resolveNodePinSpec, satisfiesNodePin } from "@stim-cli/core/toolchain";
12
12
  //#region src/supervisor/child-server.ts
13
13
  function superviseChildServer({ mode, child, log, toRecord, signal, alive = null, killTimeoutMs, onRecord = null }) {
14
14
  let lastMsg = null;
@@ -86,6 +86,7 @@ function superviseChildServer({ mode, child, log, toRecord, signal, alive = null
86
86
  }
87
87
  //#endregion
88
88
  //#region src/supervisor/project-node.ts
89
+ /** The version of the `node` that `env`'s `PATH` runs. */
89
90
  function pathNodeVersion(env) {
90
91
  const childEnv = {};
91
92
  for (const [key, value] of Object.entries(env)) if (value !== void 0) childEnv[key] = value;
@@ -95,18 +96,20 @@ function pathNodeVersion(env) {
95
96
  });
96
97
  }
97
98
  /**
98
- * `env` with the Node that `root` pins (`.nvmrc`, `.node-version`, `.tool-versions` or Volta) first on `PATH`,
99
- * for the dev server Stim starts through its `#!/usr/bin/env node` script. It changes nothing when the project pins
100
- * no Node, when no installed Node satisfies the pin, or when the `node` already on `PATH` satisfies it.
99
+ * `env` with the Node `projectNodeBin` picks for the pin in `root`, or the nearest directory above it up to `top`
100
+ * (`.nvmrc`, `.node-version`, `.tool-versions` or Volta), first on `PATH`, for the processes Stim starts that run the
101
+ * project's own Node code. It changes nothing when the project pins no Node, when no install fits the pin, or when
102
+ * the `node` already on `PATH` satisfies it: matching the pin, or, when no install matches it, of its major and not
103
+ * older than it.
101
104
  */
102
- function withProjectNode(root, env, { nodeVersion = pathNodeVersion } = {}) {
103
- const pinned = projectNodeBin(root, env);
105
+ function withProjectNode(root, env, { nodeVersion = pathNodeVersion, top = root } = {}) {
106
+ const pinned = projectNodeBin(root, env, void 0, top);
104
107
  if (!pinned) return {
105
108
  env,
106
109
  pinned: null
107
110
  };
108
111
  const current = nodeVersion(env);
109
- if (current && satisfiesNodePin(current, pinned.spec)) return {
112
+ if (current && (satisfiesNodePin(current, pinned.spec) || pinned.match === "major" && meetsNodePinMajor(current, pinned.spec))) return {
110
113
  env,
111
114
  pinned: null
112
115
  };
@@ -118,6 +121,24 @@ function withProjectNode(root, env, { nodeVersion = pathNodeVersion } = {}) {
118
121
  pinned
119
122
  };
120
123
  }
124
+ /**
125
+ * Why the project's own Node code may have failed under `env`: the pin that `root`, or the nearest directory above it
126
+ * up to `top`, sets when neither an install nor the `node` on `PATH` fits it as `withProjectNode` decides, else null.
127
+ */
128
+ function unmetNodePin(root, env, { nodeVersion = pathNodeVersion, top = root } = {}) {
129
+ const pin = projectNodePin(root, void 0, top);
130
+ if (!pin || projectNodeBin(root, env, void 0, top)) return null;
131
+ const spec = resolveNodePinSpec(pin.spec, env);
132
+ const current = nodeVersion(env) ?? "unknown";
133
+ if (!spec) return `Stim cannot resolve ${pin.file} ${pin.spec} through nvm's aliases, so Node ${current} on PATH ran.`;
134
+ if (satisfiesNodePin(current, spec) || meetsNodePinMajor(current, spec)) return null;
135
+ return `Node ${current} on PATH does not satisfy ${pin.file} ${pin.spec}, and no installed Node does.`;
136
+ }
137
+ /** The log line naming the Node `withProjectNode` put first on `PATH` and the pin it stands for. */
138
+ function projectNodeLine(pinned) {
139
+ const line = `Node ${pinned.version} from ${pinned.bin}, for ${pinned.pin} ${pinned.spec}`;
140
+ return pinned.match === "major" ? `${line} (no install has ${pinned.spec}; the newest ${pinned.version.split(".")[0]}.x not older than it)` : line;
141
+ }
121
142
  //#endregion
122
143
  //#region src/supervisor/server-expo.ts
123
144
  function resolveExpoBin(root) {
@@ -335,7 +356,7 @@ async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = n
335
356
  src: "metro",
336
357
  level: "info",
337
358
  event: "project_node",
338
- msg: `Metro runs on Node ${node.pinned.version} from ${node.pinned.bin}, which ${node.pinned.pin} pins`
359
+ msg: `Metro runs on ${projectNodeLine(node.pinned)}`
339
360
  });
340
361
  const child = spawn(command, commandArgs, {
341
362
  cwd: root,
@@ -372,4 +393,4 @@ async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = n
372
393
  });
373
394
  }
374
395
  //#endregion
375
- export { expoProxyEnv as a, inferLevel as c, parseExpoWaitingOnUrl as d, recordFromLine as f, superviseChildServer as h, expoBinRefusal as i, isBundleMarker as l, withProjectNode as m, expoBinFromPackage as n, expoSdkMajor as o, startExpoServer as p, expoBinPath as r, findBinUpward as s, cleanLine as t, isDevClientNavigationNotice as u };
396
+ export { withProjectNode as _, expoProxyEnv as a, inferLevel as c, parseExpoWaitingOnUrl as d, recordFromLine as f, unmetNodePin as g, projectNodeLine as h, expoBinRefusal as i, isBundleMarker as l, pathNodeVersion as m, expoBinFromPackage as n, expoSdkMajor as o, startExpoServer as p, expoBinPath as r, findBinUpward as s, cleanLine as t, isDevClientNavigationNotice as u, superviseChildServer as v };
@@ -0,0 +1,2 @@
1
+ import { p as startExpoServer } from "./server-expo-BXrWxNYh.mjs";
2
+ export { startExpoServer };
@@ -1,4 +1,4 @@
1
- import { a as layerFile, c as settingEntry, i as SettingsRefusal, n as readScope, o as readSettingsContext, r as requireSetting, s as readSettingsPayload, t as mutateSetting } from "./settings-write-CzD60rOD.mjs";
1
+ import { a as layerFile, c as settingEntry, i as SettingsRefusal, n as readScope, o as readSettingsContext, r as requireSetting, s as readSettingsPayload, t as mutateSetting } from "./settings-write-Chuy7Cte.mjs";
2
2
  import { SETTING_SCOPES } from "@stim-cli/core/state";
3
3
  import chalk from "chalk";
4
4
  //#region src/commands/settings.ts
@@ -2,7 +2,7 @@ import { i as withWorkspaceProcessLock } from "./exec-DEoAhcze.mjs";
2
2
  import { A as writeConfigSettingAsync, O as withConfigLockAsync$1, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-DlrsduwG.mjs";
3
3
  import { a as killOnAbort, i as gitPath } from "./operation-exec-BW0em61G.mjs";
4
4
  import { it as unknownSettingKeys, z as readCommittedSettings } from "./settings-C7O8A6ZI.mjs";
5
- import { r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-wM_XFTvE.mjs";
5
+ import { r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-DhCtQWWU.mjs";
6
6
  import { i as stimDesktopInstalledAsync, n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-D5OGpYZM.mjs";
7
7
  import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-CQmfzAh7.mjs";
8
8
  import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { G as projectDeviceSlots, U as parseDeviceSlotKey, p as getProject } from "./config-DlrsduwG.mjs";
2
2
  import { r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
3
- import { gn as deviceShellArg } from "./budget-Cvwn54qV.mjs";
4
- import { y as fileLeaseIo } from "./activity-CMLmzp7o.mjs";
3
+ import { gn as deviceShellArg } from "./budget-3ivAK99e.mjs";
4
+ import { y as fileLeaseIo } from "./activity-BpWUPgUm.mjs";
5
5
  import { O as getAvdNameForSerialAsync, j as listAdbDevicesAsync } from "./android-C7sVmyI9.mjs";
6
6
  import { f as listAllIosSimsAsync } from "./ios-hcBpnEGk.mjs";
7
7
  import { hostedNativeRecords } from "@stim-cli/core/state";
@@ -1,6 +1,6 @@
1
1
  import { h as withDrainingCancellation, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { f as throwIfCancelled } from "./operation-exec-BW0em61G.mjs";
3
- import { d as runCancellationSignal } from "./native-run-NwUuxbkg.mjs";
3
+ import { d as runCancellationSignal } from "./native-run-Dv88i0aU.mjs";
4
4
  import { existsSync, lstatSync, promises, readdirSync, realpathSync, statSync } from "node:fs";
5
5
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
6
6
  import { validMacosResourceDestination } from "@stim-cli/core";
@@ -1,2 +1,2 @@
1
- import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-EojN4WFz.mjs";
1
+ import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-CU8mCPC7.mjs";
2
2
  export { startCommand as default, failureEvidence, liveSupervisor, parseWait, readLogTail, registerStart, resolveWorkspaceMetroPort, startDevServer, startFacts, supervisorEntry, supervisorSignalable, tailLines, wantsExpoOwnTunnel };
@@ -1,15 +1,15 @@
1
1
  import { a as workspaceProcessLockError, g as process_identity_exports, h as withDrainingCancellation, i as withWorkspaceProcessLock, r as WorkspaceProcessCleanupError, t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { l as workspaceAgentDeviceDir, m as workspaceLogsDir$1, n as ensureWorkspaceStorage, s as supervisorLogFile } from "./paths-DQtTgsBf.mjs";
3
3
  import { E as upsertProject, O as withConfigLockAsync$1, p as getProject } from "./config-DlrsduwG.mjs";
4
- import { _ as stepTimer, l as phaseLine } from "./command-output-gwpm28fu.mjs";
4
+ import { _ as stepTimer, l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
5
  import { f as throwIfCancelled, u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
6
6
  import { i as recordWorkspaceUse, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-U08dEzhG.mjs";
7
7
  import { A as metroIdleStopMinutesSetting, G as resolveCacheProviderConfig, J as resolveProjectSettingsAsync, K as resolveIosProjectDir, M as metroTunnelSettingError, O as metroCommandSetting, P as ngrokUrlSetting, R as publicUrlSetting, U as remoteIosSetting, V as remoteAndroidSetting, W as resolveAndroidLayout, a as SETTING_SHAPE_REMEDY, ct as detectProviders, et as settingShapeErrors, h as deviceIdleShutdownMinutesSetting, it as unknownSettingKeys, j as metroPortSetting, k as metroCommandSettingError, lt as planMetroReach, m as defaultAndroidLayout, p as cacheProviderSettingError, rt as tunnelModeSetting, st as PUBLIC_METRO_ENV } from "./settings-C7O8A6ZI.mjs";
8
- import { E as MODE_EXPO, M as readMetroTunnel, O as clearManagedMetroTunnel, S as readAppJson, T as MODE_COMMAND, c as projectProblem, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL, v as detectIsExpo, w as MODE_BARE, x as readAppConfigText } from "./project-wM_XFTvE.mjs";
8
+ import { E as MODE_EXPO, M as readMetroTunnel, O as clearManagedMetroTunnel, S as readAppJson, T as MODE_COMMAND, c as projectProblem, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL, v as detectIsExpo, w as MODE_BARE, x as readAppConfigText } from "./project-DhCtQWWU.mjs";
9
9
  import { i as levelRank } from "./ndjson-CgE_o3Dl.mjs";
10
10
  import { _ as PORT_INSPECTION_REMEDY, a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, f as signalProcessTree, g as reserveMetroPort, h as isMetroRunning, u as processCwds, v as PortInspectionError } from "./metro-DiXtA3Ty.mjs";
11
- import { In as runProcessOperation, Kn as readProjectConfig, Pn as exitAfterFlush, Zn as remoteCliInvocation, p as stopOwnedMetroForReset, t as budgetGate } from "./budget-Cvwn54qV.mjs";
12
- import { _ as stopTunnel, g as startTunnelSequence, h as resolveSupervisorTarget, v as terminateChild, x as withManagedTunnelLock, y as withManagedRemoteWorktreeLock } from "./workspaces-CpANmBlq.mjs";
11
+ import { In as runProcessOperation, Kn as readProjectConfig, Pn as exitAfterFlush, Zn as remoteCliInvocation, p as stopOwnedMetroForReset, t as budgetGate } from "./budget-3ivAK99e.mjs";
12
+ import { _ as stopTunnel, g as startTunnelSequence, h as resolveSupervisorTarget, v as terminateChild, x as withManagedTunnelLock, y as withManagedRemoteWorktreeLock } from "./workspaces-e41xsjKr.mjs";
13
13
  import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-D5OGpYZM.mjs";
14
14
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
15
15
  import { n as windowsLauncherArgs } from "./detached-entry-BwNEtIrP.mjs";
@@ -1,7 +1,7 @@
1
1
  import { P as formatBytes } from "./config-DlrsduwG.mjs";
2
- import { o as formatLongDuration } from "./command-output-gwpm28fu.mjs";
3
- import { i as findProjectRoot$1 } from "./project-wM_XFTvE.mjs";
4
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-DUFaTMdd.mjs";
2
+ import { o as formatLongDuration } from "./command-output-YKGWivpG.mjs";
3
+ import { i as findProjectRoot$1 } from "./project-DhCtQWWU.mjs";
4
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-CUlLsbRt.mjs";
5
5
  import { t as readProjectStats } from "./stats-report-BzaPrRm6.mjs";
6
6
  import { archivedUsage, readArchives } from "@stim-cli/core/state";
7
7
  import chalk from "chalk";
@@ -1,2 +1,2 @@
1
- import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-WBDajew2.mjs";
1
+ import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-_WPHzVft.mjs";
2
2
  export { statusCommand as default, readVolumes, runStatusWatch };