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,15 +1,15 @@
1
1
  import { a as workspaceProcessLockError, i as withWorkspaceProcessLock, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { G as projectDeviceSlots, H as deviceSlotPlatforms, _ as loadConfig$1, d as getConfigDir, u as getConcurrencyLimits } from "./config-DlrsduwG.mjs";
4
- import { a as formatElapsed, l as phaseLine } from "./command-output-gwpm28fu.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
5
  import { g as deviceReclaimIdleMinutesSetting } from "./settings-C7O8A6ZI.mjs";
6
6
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
7
- import { K as recordCapacityRefusal, q as recordCapacityWait } from "./budget-Cvwn54qV.mjs";
7
+ import { K as recordCapacityRefusal, q as recordCapacityWait } from "./budget-3ivAK99e.mjs";
8
8
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
9
- import { f as withIdleWorkspace } from "./workspaces-CpANmBlq.mjs";
9
+ import { f as withIdleWorkspace } from "./workspaces-e41xsjKr.mjs";
10
10
  import { A as listAdbDevices, j as listAdbDevicesAsync } from "./android-C7sVmyI9.mjs";
11
11
  import { d as listAllIosSims, f as listAllIosSimsAsync, l as iosRuntimeMatches, y as parseRuntimeVersion } from "./ios-hcBpnEGk.mjs";
12
- import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-DDg3SdvY.mjs";
12
+ import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-CJmUOV5x.mjs";
13
13
  import { realpathSync } from "node:fs";
14
14
  import { basename, join } from "node:path";
15
15
  import { LOG_ROTATE_BYTES, workspaceId } from "@stim-cli/core";
@@ -4,16 +4,16 @@ import { O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig } from
4
4
  import { d as writeWorkspaceState } from "./workspace-state-U08dEzhG.mjs";
5
5
  import { i as macosProcess, o as requiredMacosRecord } from "./state-08I3hw3_.mjs";
6
6
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
7
- import { Cn as launchAndroidApp, Dn as reverseMetroPorts, On as writeDebugHttpHost, Sn as iosAppProcess, Tn as launchIosApp, dn as androidAppProcess, wn as launchAndroidReleaseApp, xn as installIosApp, yn as installAndroidApp } from "./budget-Cvwn54qV.mjs";
8
- import { D as teardownOwnedAvd, k as teardownOwnedIosSim } from "./workspaces-CpANmBlq.mjs";
7
+ import { Cn as launchAndroidApp, Dn as reverseMetroPorts, On as writeDebugHttpHost, Sn as iosAppProcess, Tn as launchIosApp, dn as androidAppProcess, wn as launchAndroidReleaseApp, xn as installIosApp, yn as installAndroidApp } from "./budget-3ivAK99e.mjs";
8
+ import { D as teardownOwnedAvd, k as teardownOwnedIosSim } from "./workspaces-e41xsjKr.mjs";
9
9
  import { t as forgetCreatedDevice } from "./created-devices-x9rN6bhs.mjs";
10
10
  import { $ as resetAdoptedAvd, A as listAdbDevices, D as getAvdNameForSerial, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, M as listAvdDeviceProfiles, O as getAvdNameForSerialAsync, U as ownedAvdName, X as pickDefaultSystemImage, a as androidDeviceAbi, d as androidToolPath, et as resolveOwnedAvdSerialAsync, f as assertOwnedAvdStopped, g as avdPathExists, k as hostSystemImageArch, ot as waitForBoot, t as DEFAULT_AVD_DEVICE_PROFILE, v as avdStorageRoots, x as createOwnedAvd, y as bootAndroidEmulator } from "./android-C7sVmyI9.mjs";
11
11
  import { C as resetIosKeychain, P as readHostMemoryPressure, T as resolveIosCreation, a as createOwnedIosSim, d as listAllIosSims, g as listUserApps, k as uninstallIosApp, n as bootIosSim, w as resetIosPrivacy } from "./ios-hcBpnEGk.mjs";
12
- import { r as stopMacosAppHeld } from "./stop-Dky10AEJ.mjs";
12
+ import { r as stopMacosAppHeld } from "./stop-CR5689oB.mjs";
13
13
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
14
- import { i as countLiveOwnedDevices } from "./device-capacity-DK5_EwRS.mjs";
14
+ import { i as countLiveOwnedDevices } from "./device-capacity-DH0QsZYZ.mjs";
15
15
  import { n as parseLogcatLine, r as parsePidof, t as androidClockOffset } from "./android-DR5lZ2Az.mjs";
16
- import { _ as findAapt } from "./support-yUiOjnVY.mjs";
16
+ import { _ as findAapt } from "./support-CbXPbUMJ.mjs";
17
17
  import { t as waitForMacosRegistration } from "./registration-BcRgF6Ox.mjs";
18
18
  import { n as parseLogStreamLine } from "./ios-xtlRHaeB.mjs";
19
19
  import { createHash, randomUUID } from "node:crypto";
@@ -1,13 +1,13 @@
1
- import { i as withWorkspaceProcessLock, t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
1
+ import { i as withWorkspaceProcessLock, n as isTimeoutError, t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { f as workspaceId$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { C as saveConfig, D as withConfigLock$1, G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, a as clearDevice, d as getConfigDir, w as setDevice } from "./config-DlrsduwG.mjs";
4
- import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
4
+ import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
5
  import { u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
6
6
  import { T as iosSimSlimProfileSetting } from "./settings-C7O8A6ZI.mjs";
7
- import { j as teardownParkedIosSim } from "./workspaces-CpANmBlq.mjs";
7
+ import { j as teardownParkedIosSim } from "./workspaces-e41xsjKr.mjs";
8
8
  import { _t as parkedMaxSetting, bt as selectParked, ft as adoptParked, pt as dropParked, vt as readParked } from "./android-C7sVmyI9.mjs";
9
9
  import { A as configuredIosSimulatorViewer, C as resetIosKeychain, E as resolveOwnedIosSim, M as hostMemoryPressureAdvice, N as memoryCulpritsUnder, P as readHostMemoryPressure, S as renameIosSim, T as resolveIosCreation, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosPrivacy, y as parseRuntimeVersion } from "./ios-hcBpnEGk.mjs";
10
- import { l as runtimeMismatch, m as withDeviceBootAdmission, n as DeviceAdmissionRefusal, o as deviceTypeMismatch } from "./device-capacity-DK5_EwRS.mjs";
10
+ import { l as runtimeMismatch, m as withDeviceBootAdmission, n as DeviceAdmissionRefusal, o as deviceTypeMismatch } from "./device-capacity-DH0QsZYZ.mjs";
11
11
  import { ambientContext } from "@stim-cli/core";
12
12
  import { isJsonObject } from "@stim-cli/core/state";
13
13
  import chalk from "chalk";
@@ -37,8 +37,36 @@ function startIosBoot(udid, configure, label, out, simulatorApp, root, deviceSlo
37
37
  done
38
38
  };
39
39
  }
40
+ const SPRINGBOARD_STARTUP_TIMEOUT_MS = 3e4;
41
+ const SPRINGBOARD_STARTUP_POLL_MS = 250;
42
+ async function waitForSpringBoard(udid) {
43
+ const deadline = Date.now() + SPRINGBOARD_STARTUP_TIMEOUT_MS;
44
+ for (;;) {
45
+ let output = null;
46
+ try {
47
+ output = await getExecutor().runFileAsync("xcrun", [
48
+ "simctl",
49
+ "spawn",
50
+ udid,
51
+ "notifyutil",
52
+ "-g",
53
+ "com.apple.springboard.finishedstartup"
54
+ ], { timeoutMs: 1e4 });
55
+ } catch (error) {
56
+ if (!isTimeoutError(error)) throw error;
57
+ }
58
+ if (output !== null) {
59
+ const state = /^com\.apple\.springboard\.finishedstartup (\d+)$/m.exec(output);
60
+ if (!state) throw new Error(`Could not read SpringBoard's startup state: ${output.trim() || "no output"}.`);
61
+ if (Number(state[1]) > 0) return;
62
+ }
63
+ if (Date.now() >= deadline) throw new Error(`SpringBoard did not finish starting within ${SPRINGBOARD_STARTUP_TIMEOUT_MS / 1e3}s.`);
64
+ await cancellableSleep(SPRINGBOARD_STARTUP_POLL_MS);
65
+ }
66
+ }
40
67
  async function muteBootedSimulator(udid, out) {
41
68
  try {
69
+ await waitForSpringBoard(udid);
42
70
  const response = JSON.parse(await getExecutor().runFileAsync("xcrun", [
43
71
  "devicectl",
44
72
  "device",
@@ -1,8 +1,8 @@
1
1
  import { m as operationState } from "./exec-DEoAhcze.mjs";
2
2
  import { V as deviceSlotKey } from "./config-DlrsduwG.mjs";
3
- import { a as formatElapsed, r as clockTime } from "./command-output-gwpm28fu.mjs";
4
- import { Zt as VERIFY_TIMEOUT_MS, on as APP_READINESS_TIMEOUT_MS } from "./budget-Cvwn54qV.mjs";
5
- import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-CMLmzp7o.mjs";
3
+ import { a as formatElapsed, r as clockTime } from "./command-output-YKGWivpG.mjs";
4
+ import { Zt as VERIFY_TIMEOUT_MS, on as APP_READINESS_TIMEOUT_MS } from "./budget-3ivAK99e.mjs";
5
+ import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BpWUPgUm.mjs";
6
6
  //#region src/engine/device-lease-run.ts
7
7
  const LEASE_STEP_FLOOR_MS = 6e4;
8
8
  const DEBUG_VERIFY_STEP_MS = VERIFY_TIMEOUT_MS + APP_READINESS_TIMEOUT_MS;
@@ -1,6 +1,6 @@
1
1
  import { V as deviceSlotKey } from "./config-DlrsduwG.mjs";
2
- import { A as selectPoolDevice, S as parseLease, b as leaseIsExpired, v as deviceLeasePath, y as fileLeaseIo } from "./activity-CMLmzp7o.mjs";
3
- import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-xJPQ_QQG.mjs";
2
+ import { A as selectPoolDevice, S as parseLease, b as leaseIsExpired, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BpWUPgUm.mjs";
3
+ import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-DXPSwdbb.mjs";
4
4
  //#region src/engine/device-pool.ts
5
5
  function heldPoolId(root, platform, now, io = fileLeaseIo, slot = "default") {
6
6
  const record = io.readHolder(root)[deviceSlotKey(platform, slot)];
@@ -1,17 +1,17 @@
1
1
  import { Y as doctorIo, _ as loadConfig$1, 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 { L as projectSettingsContextAsync, Mt as repoRoot } from "./settings-C7O8A6ZI.mjs";
4
- import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-wM_XFTvE.mjs";
5
- import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-DlY_serQ.mjs";
6
- import { a as inspectBudget, cr as inspectWatchmanMemory, fr as memorySweepIsScoped, n as budgetLine } from "./budget-Cvwn54qV.mjs";
4
+ import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-DhCtQWWU.mjs";
5
+ import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-BQF9Yyy9.mjs";
6
+ import { a as inspectBudget, cr as inspectWatchmanMemory, fr as memorySweepIsScoped, n as budgetLine } from "./budget-3ivAK99e.mjs";
7
7
  import { L as memoryCulpritFindings, R as readMemoryCulpritsAsync, f as listAllIosSimsAsync, h as listIosRuntimesAsync, l as iosRuntimeMatches, x as pickDefaultIosCreation } from "./ios-hcBpnEGk.mjs";
8
- import { c as detectXcodeMajorAsync } from "./xcode-BXn9-xYx.mjs";
9
- import { s as offloadCheck } from "./client-OyRoEuSr.mjs";
8
+ import { c as detectXcodeMajorAsync } from "./xcode-Rq744mBF.mjs";
9
+ import { s as offloadCheck } from "./client-B4MMzfo_.mjs";
10
10
  import { c as inspectBuildMachines, f as inspectDeviceHostMachines } from "./selection-DSMbWEX2.mjs";
11
11
  import { r as maintenanceStatus, t as maintenanceLine } from "./status-BRROykC8.mjs";
12
- import { a as writeIgnoreDirs, c as recordDoctorRun, i as watchedCheckouts, n as inspectNestedWorktrees, r as nestedWorktreeFinding } from "./doctor-watchman-N2wDotwQ.mjs";
13
- import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-Bo7BXLux.mjs";
14
- import { h as resolveDeviceType, v as resolveRuntime } from "./support-CNioewsd.mjs";
12
+ import { a as writeIgnoreDirs, c as recordDoctorRun, i as watchedCheckouts, n as inspectNestedWorktrees, r as nestedWorktreeFinding } from "./doctor-watchman-iGBpC6KM.mjs";
13
+ import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-HUC1igzw.mjs";
14
+ import { h as resolveDeviceType, v as resolveRuntime } from "./support-TWuQlHQo.mjs";
15
15
  import { isJsonObject, maintenanceNdjsonFile, readHostedAppMetadata, readHostedSessions } from "@stim-cli/core/state";
16
16
  import { dirname, join, sep } from "path";
17
17
  import chalk from "chalk";
@@ -319,7 +319,8 @@ function toolchainReport(root, env = process.env) {
319
319
  pin: pin.file,
320
320
  spec: pin.spec,
321
321
  bin: pinned?.bin ?? null,
322
- version: pinned?.version ?? null
322
+ version: pinned?.version ?? null,
323
+ match: pinned?.match ?? null
323
324
  } : null
324
325
  };
325
326
  }
@@ -330,7 +331,7 @@ function toolchainLine(entry) {
330
331
  }
331
332
  function toolchainLines(report) {
332
333
  const project = report.projectNode;
333
- return [...report.entries.map(toolchainLine), ...project ? [phaseLine("project node", project.bin ? `${project.version} at ${project.bin}, which ${project.pin} pins (${project.spec}); Metro runs on it when the node on PATH does not satisfy the pin` : `${project.pin} pins ${project.spec}, which no nvm, fnm, Volta, asdf or mise install provides; Metro runs on the node on PATH`)] : []];
334
+ return [...report.entries.map(toolchainLine), ...project ? [phaseLine("project node", !project.bin ? `${project.pin} pins ${project.spec}, which no nvm, fnm, Volta, asdf, mise or Homebrew install provides; Metro runs on the node on PATH` : project.match === "major" ? `${project.version} at ${project.bin}, the newest installed Node of the major ${project.pin} pins and not older than ${project.spec}, since no install has ${project.spec}; Metro runs on it when the node on PATH does not fit the pin` : `${project.version} at ${project.bin}, which ${project.pin} pins (${project.spec}); Metro runs on it when the node on PATH does not satisfy the pin`)] : []];
334
335
  }
335
336
  function budgetLines(budget) {
336
337
  return budget ? [phaseLine("budget", budgetLine(budget))] : [];
@@ -1,2 +1,2 @@
1
- import { a as readDoctorReport, i as parseDoctorPlatform, n as doctorCommand, o as shadowedStimFinding, r as doctorSuccessLines, s as toolchainReport, t as applySandboxFix } from "./doctor-D5_EzwfA.mjs";
1
+ import { a as readDoctorReport, i as parseDoctorPlatform, n as doctorCommand, o as shadowedStimFinding, r as doctorSuccessLines, s as toolchainReport, t as applySandboxFix } from "./doctor-C6t4Maue.mjs";
2
2
  export { applySandboxFix, doctorCommand as default, doctorSuccessLines, parseDoctorPlatform, readDoctorReport, shadowedStimFinding, toolchainReport };
@@ -1,28 +1,28 @@
1
1
  import { _ as reportSignal, t as getExecutor, y as trackReportResource } from "./exec-DEoAhcze.mjs";
2
2
  import { i as sharedBuildCache, u as workspaceDerivedData } from "./paths-DQtTgsBf.mjs";
3
3
  import { _ as loadConfig$1, nt as realIo, s as configCorruptRepair, u as getConcurrencyLimits } from "./config-DlrsduwG.mjs";
4
- import { d as quotedPath, u as plural } from "./command-output-gwpm28fu.mjs";
4
+ import { d as quotedPath, u as plural } from "./command-output-YKGWivpG.mjs";
5
5
  import { l as gitQuietAsync, o as git } from "./operation-exec-BW0em61G.mjs";
6
6
  import { r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
7
7
  import { D as mergeSettingsLayers, Et as listWorktreesAsync, Gt as temporaryRoot, Ht as makeTemporaryDirectory, I as projectSettingsContext, It as resolveSourceCheckoutAsync, K as resolveIosProjectDir, Mt as repoRoot, Nt as repoRootAsync, Ot as locallyKnownUpstreamAsync, Q as settingOrigin, T as iosSimSlimProfileSetting, U as remoteIosSetting, V as remoteAndroidSetting, Vt as filesystemDevice, W as resolveAndroidLayout, Y as resolveSettings, a as SETTING_SHAPE_REMEDY, at as webSettings, et as settingShapeErrors, ht as dirtyFingerprintFiles, i as SETTINGS_WITH_RESOLVE_TIME_FALLBACK, it as unknownSettingKeys, m as defaultAndroidLayout, nt as settingsLayers, r as PATH_SETTINGS, tt as settingValueAt, vt as gitCommonDirAsync } from "./settings-C7O8A6ZI.mjs";
8
- import { C as resolvePackageJson, _ as appProjectProblem, b as isPackageResolvable, v as detectIsExpo } from "./project-wM_XFTvE.mjs";
9
- import { Bn as checkEasAuth$1, Gn as providerFromConfig, Ht as readInstalledEasCliVersionAsync, Wn as ownerFromConfig, er as MIN_EAS_CLI_SIMULATOR_VERSION, nr as easCliUpgradeRemedy, qn as resolveEasCliBin, tr as easCliSupport } from "./budget-Cvwn54qV.mjs";
10
- import { L as listBuildSlots } from "./workspaces-CpANmBlq.mjs";
11
- import { N as listBuildLocks } from "./activity-CMLmzp7o.mjs";
8
+ import { C as resolvePackageJson, _ as appProjectProblem, b as isPackageResolvable, v as detectIsExpo } from "./project-DhCtQWWU.mjs";
9
+ import { Bn as checkEasAuth$1, Gn as providerFromConfig, Ht as readInstalledEasCliVersionAsync, Wn as ownerFromConfig, er as MIN_EAS_CLI_SIMULATOR_VERSION, nr as easCliUpgradeRemedy, qn as resolveEasCliBin, tr as easCliSupport } from "./budget-3ivAK99e.mjs";
10
+ import { L as listBuildSlots } from "./workspaces-e41xsjKr.mjs";
11
+ import { N as listBuildLocks } from "./activity-BpWUPgUm.mjs";
12
12
  import { a as diffFingerprintSources, l as fingerprintProject } from "./build-cache-Dv7RN200.mjs";
13
13
  import { _t as parkedMaxSetting, dt as POOL_SETTING_REMEDY, k as hostSystemImageArch, o as androidHome } from "./android-C7sVmyI9.mjs";
14
14
  import { F as readHostMemoryPressureAsync, M as hostMemoryPressureAdvice } from "./ios-hcBpnEGk.mjs";
15
15
  import { p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-ccaPc4ox.mjs";
16
- import { i as projectCmakeLauncher } from "./ccache-Btwc36-I.mjs";
17
- import { x as podInstallCommand } from "./xcode-BXn9-xYx.mjs";
18
- import { h as androidPathRoomRemedy, i as ccacheEnabled, l as androidSdkRefusal, m as androidPathRoomMessage, p as androidPathRoom, t as apkOutputsDir } from "./react-native-build-Dvd8hC21.mjs";
19
- import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-DK5_EwRS.mjs";
16
+ import { i as projectCmakeLauncher } from "./ccache-CH2EWGPB.mjs";
17
+ import { x as podInstallCommand } from "./xcode-Rq744mBF.mjs";
18
+ import { h as androidPathRoomRemedy, i as ccacheEnabled, l as androidSdkRefusal, m as androidPathRoomMessage, p as androidPathRoom, t as apkOutputsDir } from "./react-native-build-CelbTO_y.mjs";
19
+ import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-DH0QsZYZ.mjs";
20
20
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-DZLoYFVb.mjs";
21
21
  import { i as probeSigningIdentities } from "./ios-signing-BtAffm0A.mjs";
22
22
  import { a as findChrome, t as CHROME_INSTALL_REMEDY } from "./chrome-Bbw689-6.mjs";
23
23
  import { i as installedNpmTreeIsValidAsync, n as hasInstalledDependencies, t as dependencyState } from "./dependency-state-1I9KZT1Y.mjs";
24
24
  import { n as simslimIsOnPath } from "./simslim-BNckWpXi.mjs";
25
- import { t as MIN_EAS_CLI_BUILD_DOWNLOAD_VERSION } from "./eas-build-CwknaQYj.mjs";
25
+ import { t as MIN_EAS_CLI_BUILD_DOWNLOAD_VERSION } from "./eas-build-DMWSSvxq.mjs";
26
26
  import { r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-ngferVq2.mjs";
27
27
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync } from "node:fs";
28
28
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { E as upsertProject, O as withConfigLockAsync$1, d as getConfigDir, p as getProject } from "./config-DlrsduwG.mjs";
2
2
  import { l as gitQuietAsync } from "./operation-exec-BW0em61G.mjs";
3
3
  import { Et as listWorktreesAsync, Nt as repoRootAsync } from "./settings-C7O8A6ZI.mjs";
4
- import { f as projectRegistry } from "./project-wM_XFTvE.mjs";
5
- import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-DlY_serQ.mjs";
4
+ import { f as projectRegistry } from "./project-DhCtQWWU.mjs";
5
+ import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-BQF9Yyy9.mjs";
6
6
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
7
7
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
8
8
  import { isJsonObject } from "@stim-cli/core/state";
@@ -1,7 +1,7 @@
1
1
  import { t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { a as killOnAbort, f as throwIfCancelled, r as childEnvironment } from "./operation-exec-BW0em61G.mjs";
3
- import { Zn as remoteCliInvocation, nr as easCliUpgradeRemedy, qn as resolveEasCliBin, tr as easCliSupport } from "./budget-Cvwn54qV.mjs";
4
- import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-CMLmzp7o.mjs";
3
+ import { Zn as remoteCliInvocation, nr as easCliUpgradeRemedy, qn as resolveEasCliBin, tr as easCliSupport } from "./budget-3ivAK99e.mjs";
4
+ import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-BpWUPgUm.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { existsSync, realpathSync, statSync } from "node:fs";
7
7
  //#region src/engine/eas-build.ts
@@ -2,14 +2,14 @@ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { _ as loadConfig$1, p as getProject } from "./config-DlrsduwG.mjs";
3
3
  import { f as throwIfCancelled, r as childEnvironment } from "./operation-exec-BW0em61G.mjs";
4
4
  import { ct as detectProviders, lt as planMetroReach } from "./settings-C7O8A6ZI.mjs";
5
- import { M as readMetroTunnel, P as readRemoteSession } from "./project-wM_XFTvE.mjs";
6
- import { $n as MIN_EAS_CLI_DEVICE_VERSION, Hn as isEasAuthFailureText, Ht as readInstalledEasCliVersionAsync, Qn as remoteCommand, er as MIN_EAS_CLI_SIMULATOR_VERSION, qn as resolveEasCliBin, s as peekBudget, tr as easCliSupport } from "./budget-Cvwn54qV.mjs";
5
+ import { M as readMetroTunnel, P as readRemoteSession } from "./project-DhCtQWWU.mjs";
6
+ import { $n as MIN_EAS_CLI_DEVICE_VERSION, Hn as isEasAuthFailureText, Ht as readInstalledEasCliVersionAsync, Qn as remoteCommand, er as MIN_EAS_CLI_SIMULATOR_VERSION, qn as resolveEasCliBin, s as peekBudget, tr as easCliSupport } from "./budget-3ivAK99e.mjs";
7
7
  import { F as readHostMemoryPressureAsync } from "./ios-hcBpnEGk.mjs";
8
8
  import { d as hostingMachines, o as resolveBuildMachine, r as namedBuildMachine } from "./selection-DSMbWEX2.mjs";
9
- import { c as call, l as connectHost, p as requireHostedAppMode } from "./hosted-client-DZAPrcro.mjs";
9
+ import { c as call, l as connectHost, p as requireHostedAppMode } from "./hosted-client-Bt-tndxV.mjs";
10
10
  import { r as readHostedNative, s as writeHostedNative } from "./ios-state-Dtw5K2aI.mjs";
11
- import { n as prepareHostedNative } from "./hosted-native-BdzE668-.mjs";
12
- import { c as peekDeviceSlots } from "./device-capacity-DK5_EwRS.mjs";
11
+ import { n as prepareHostedNative } from "./hosted-native-BmQC6U_x.mjs";
12
+ import { c as peekDeviceSlots } from "./device-capacity-DH0QsZYZ.mjs";
13
13
  import { ambientEnv } from "@stim-cli/core";
14
14
  import { automaticMachineEnabled, isJsonObject, machineCapacity, parseHostedChoice, parseHostedNativeOffer } from "@stim-cli/core/state";
15
15
  //#region src/device-host/placement.ts
@@ -1,7 +1,7 @@
1
1
  import { _ as reportSignal, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { l as workspaceAgentDeviceDir, v as withDirLock$1, y as withDirLockAsync$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { G as projectDeviceSlots, V as deviceSlotKey } from "./config-DlrsduwG.mjs";
4
- import { a as formatElapsed, o as formatLongDuration, r as clockTime, u as plural } from "./command-output-gwpm28fu.mjs";
4
+ import { a as formatElapsed, o as formatLongDuration, r as clockTime, u as plural } from "./command-output-YKGWivpG.mjs";
5
5
  import { n as isInsideProject } from "./metro-DiXtA3Ty.mjs";
6
6
  import { r as cdpEndpoint } from "./state--smjFSTL.mjs";
7
7
  import { accessSync, constants, existsSync, mkdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1,11 +1,11 @@
1
1
  import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { v as withDirLock$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { H as deviceSlotPlatforms, V as deviceSlotKey, p as getProject } from "./config-DlrsduwG.mjs";
4
- import { v as launchErrorPreview } from "./command-output-gwpm28fu.mjs";
4
+ import { v as launchErrorPreview } from "./command-output-YKGWivpG.mjs";
5
5
  import { r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
6
- import { I as readWorkspaceLaunches } from "./project-wM_XFTvE.mjs";
6
+ import { I as readWorkspaceLaunches } from "./project-DhCtQWWU.mjs";
7
7
  import { d as resolveProjectMetro } from "./metro-DiXtA3Ty.mjs";
8
- import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-CMLmzp7o.mjs";
8
+ import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BpWUPgUm.mjs";
9
9
  import { o as androidHome, u as androidToolCwd } from "./android-C7sVmyI9.mjs";
10
10
  import { r as deviceConsoleLevel } from "./ios-device-BXZ0c7Kb.mjs";
11
11
  import { n as parseLogcatLine } from "./android-DR5lZ2Az.mjs";
@@ -1,24 +1,24 @@
1
1
  import { c as declareSpawnsOn, f as stopDeclaringSpawnsOn, g as process_identity_exports, h as withDrainingCancellation, r as WorkspaceProcessCleanupError, t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
3
3
  import { F as isOnMountedVolume, G as projectDeviceSlots, I as listMountedVolumes, L as measuredDirectorySizeAsync, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, S as removeProject, _ as loadConfig$1, d as getConfigDir, j as acquireAvdClaim } from "./config-DlrsduwG.mjs";
4
- import { h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-gwpm28fu.mjs";
4
+ import { h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-YKGWivpG.mjs";
5
5
  import { f as throwIfCancelled, t as runOperationFile } from "./operation-exec-BW0em61G.mjs";
6
6
  import { u as workspaceLastUsed } from "./workspace-state-U08dEzhG.mjs";
7
7
  import { Et as listWorktreesAsync, It as resolveSourceCheckoutAsync } from "./settings-C7O8A6ZI.mjs";
8
- import { i as findProjectRoot$1, v as detectIsExpo } from "./project-wM_XFTvE.mjs";
9
- import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-DlY_serQ.mjs";
10
- import { $ as includesRecordings, At as unverifiedDeviceCommand, C as collectIdleDevices, D as idleDeviceLines, Dt as findOrphanedDevices, Et as eraseParkedDevices, Ft as withRemoteSessionGcLocks, In as runProcessOperation, Kt as withEasProjectLock, Mt as collectEasSessionSweep, Nt as deleteEasSessions, O as parseIdleDuration, Ot as findStaleDeviceRecords, Pt as describeError, Q as includesParkedDevices, Sr as sizeCaches, St as deleteProjectDevices, Tt as deviceSweepIsScoped, X as emptyCaches, Z as includesArchives, _r as phase, _t as collectDeviceLeases, at as selectsBeyondCaches, br as discoverCaches, bt as deleteParkedAvds, dr as memoryScope, dt as gradleVersionsPending, et as includesWorkspaceOutputs, fr as memorySweepIsScoped, ft as includesGradleVersions, gt as DEVICE_LIST_TIMEOUT_MS, hr as scopedMemoryReport, ht as collectInventory, ir as parseArchiveSelector, it as selectCaches, jt as withAndroidAvdSizes, k as shutDownIdleDevices, kt as findStaleProjectDevices, lr as memoryCacheKind, lt as deleteGradleVersions, mr as reclaimMemory, mt as getMachineCacheReport, nt as planCacheEmptying, ot as trimCaches, pr as memoryWorkPending, rt as previewScopedEmptying, sr as collectMemoryReport, st as collectGradleVersions, tt as isWorkspacesScope, ur as memoryLines, ut as gradleVersionLines, vt as collectParkedAvds, w as collectIdleDevicesAsync, wt as describeUnverifiableDevices, xt as deleteParkedSims, yt as collectParkedSims } from "./budget-Cvwn54qV.mjs";
8
+ import { i as findProjectRoot$1, v as detectIsExpo } from "./project-DhCtQWWU.mjs";
9
+ import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-BQF9Yyy9.mjs";
10
+ import { $ as includesRecordings, At as unverifiedDeviceCommand, C as collectIdleDevices, D as idleDeviceLines, Dt as findOrphanedDevices, Et as eraseParkedDevices, Ft as withRemoteSessionGcLocks, In as runProcessOperation, Kt as withEasProjectLock, Mt as collectEasSessionSweep, Nt as deleteEasSessions, O as parseIdleDuration, Ot as findStaleDeviceRecords, Pt as describeError, Q as includesParkedDevices, Sr as sizeCaches, St as deleteProjectDevices, Tt as deviceSweepIsScoped, X as emptyCaches, Z as includesArchives, _r as phase, _t as collectDeviceLeases, at as selectsBeyondCaches, br as discoverCaches, bt as deleteParkedAvds, dr as memoryScope, dt as gradleVersionsPending, et as includesWorkspaceOutputs, fr as memorySweepIsScoped, ft as includesGradleVersions, gt as DEVICE_LIST_TIMEOUT_MS, hr as scopedMemoryReport, ht as collectInventory, ir as parseArchiveSelector, it as selectCaches, jt as withAndroidAvdSizes, k as shutDownIdleDevices, kt as findStaleProjectDevices, lr as memoryCacheKind, lt as deleteGradleVersions, mr as reclaimMemory, mt as getMachineCacheReport, nt as planCacheEmptying, ot as trimCaches, pr as memoryWorkPending, rt as previewScopedEmptying, sr as collectMemoryReport, st as collectGradleVersions, tt as isWorkspacesScope, ur as memoryLines, ut as gradleVersionLines, vt as collectParkedAvds, w as collectIdleDevicesAsync, wt as describeUnverifiableDevices, xt as deleteParkedSims, yt as collectParkedSims } from "./budget-3ivAK99e.mjs";
11
11
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
12
- import { B as createGcResults, L as listBuildSlots, a as collectWorkspaceOutputs, c as listWorkspaceDirs, f as withIdleWorkspace, i as collectOrphanedWorkspaces, l as rootPresence, m as workspaceInUseAsync, n as WORKSPACE_OUTPUT_DIRS, o as deleteOrphanedWorkspaces, r as clearWorkspaceOutputs, s as isInsideWorkspaces, t as REBUILD_COST, u as sizeText, z as GC_OUTPUT } from "./workspaces-CpANmBlq.mjs";
13
- import { N as listBuildLocks, k as removeExpiredLease } from "./activity-CMLmzp7o.mjs";
12
+ import { B as createGcResults, L as listBuildSlots, a as collectWorkspaceOutputs, c as listWorkspaceDirs, f as withIdleWorkspace, i as collectOrphanedWorkspaces, l as rootPresence, m as workspaceInUseAsync, n as WORKSPACE_OUTPUT_DIRS, o as deleteOrphanedWorkspaces, r as clearWorkspaceOutputs, s as isInsideWorkspaces, t as REBUILD_COST, u as sizeText, z as GC_OUTPUT } from "./workspaces-e41xsjKr.mjs";
13
+ import { N as listBuildLocks, k as removeExpiredLease } from "./activity-BpWUPgUm.mjs";
14
14
  import { n as forgetCreatedDeviceAsync, r as readCreatedDevices$1 } from "./created-devices-x9rN6bhs.mjs";
15
15
  import { F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, _t as parkedMaxSetting, dt as POOL_SETTING_REMEDY, h as avdNameAbsent } from "./android-C7sVmyI9.mjs";
16
16
  import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-hcBpnEGk.mjs";
17
17
  import { r as readCollectors } from "./ownership-C5fo5Edb.mjs";
18
- import { a as matchWorktreeEntry, b as deleteSelectedArchives, v as describeDereferenced, x as sweepArchiveStaging, y as reclaimProject } from "./worktree-CHecZ4Oq.mjs";
18
+ import { a as matchWorktreeEntry, b as deleteSelectedArchives, v as describeDereferenced, x as sweepArchiveStaging, y as reclaimProject } from "./worktree-B4Nj3EGS.mjs";
19
19
  import { s as writeCacheFile } from "./warm-progress-CA3TgT3-.mjs";
20
- import { _ as collectWorktreeSweep, a as previewMaintenance, b as worktreeRemovalReason, c as deleteTempLeftovers, d as ARTIFACT_DIRS, f as appRoots, g as candidateRootsAsync, h as ownedDeviceUsage, l as tempLeftoverLines, o as triggeringRoot, p as finishedWorkspaces, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as removeWorktrees, y as worktreePullRequestNote } from "./act-DsuqEkiM.mjs";
21
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-DUFaTMdd.mjs";
20
+ import { _ as collectWorktreeSweep, a as previewMaintenance, b as worktreeRemovalReason, c as deleteTempLeftovers, d as ARTIFACT_DIRS, f as appRoots, g as candidateRootsAsync, h as ownedDeviceUsage, l as tempLeftoverLines, o as triggeringRoot, p as finishedWorkspaces, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as removeWorktrees, y as worktreePullRequestNote } from "./act-vxiMwdf5.mjs";
21
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-CUlLsbRt.mjs";
22
22
  import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
23
23
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
24
24
  import { LOG_ROTATE_BYTES, ensurePrivateDir, rotatedLogPath, withDirLock, withDirLockTransaction } from "@stim-cli/core";
@@ -1,3 +1,3 @@
1
- import { Ct as describeParkedSims, Dt as findOrphanedDevices, Ot as findStaleDeviceRecords, it as selectCaches, kt as findStaleProjectDevices, wt as describeUnverifiableDevices, xt as deleteParkedSims } from "./budget-Cvwn54qV.mjs";
2
- import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-CXxN-4SE.mjs";
1
+ import { Ct as describeParkedSims, Dt as findOrphanedDevices, Ot as findStaleDeviceRecords, it as selectCaches, kt as findStaleProjectDevices, wt as describeUnverifiableDevices, xt as deleteParkedSims } from "./budget-3ivAK99e.mjs";
2
+ import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-BW8E1uSC.mjs";
3
3
  export { collectGcReport, gcCommand as default, deleteParkedSims, describeParkedSims, describeUnverifiableDevices, executeGc, findOrphanedDevices, findStaleDeviceRecords, findStaleProjectDevices, formatGcReport, readGcReport, runGc, selectCaches, withGcMaintenanceClaim };
@@ -1,8 +1,8 @@
1
1
  import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-C7O8A6ZI.mjs";
2
- import { i as findProjectRoot$1 } from "./project-wM_XFTvE.mjs";
3
- import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-DlY_serQ.mjs";
4
- import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-N2wDotwQ.mjs";
5
- import "./status-watch-Bg_u-pwR.mjs";
2
+ import { i as findProjectRoot$1 } from "./project-DhCtQWWU.mjs";
3
+ import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-BQF9Yyy9.mjs";
4
+ import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-iGBpC6KM.mjs";
5
+ import "./status-watch-BHFasOZN.mjs";
6
6
  import { SETTINGS, SETTINGS_SCHEMA_URL, TUTORIAL_VERSION } from "@stim-cli/core/state";
7
7
  import chalk from "chalk";
8
8
  //#region src/guide/agent.ts
@@ -1226,10 +1226,11 @@ leased until <time>" for each one.`,
1226
1226
  brew and adb: source "environment" when this process's
1227
1227
  environment provides it, "discovered" when stim-server's
1228
1228
  toolchain discovery would find it (from says where), or
1229
- "missing". projectNode is { pin, spec, bin, version } when
1229
+ "missing". projectNode is { pin, spec, bin, version, match } when
1230
1230
  .nvmrc, .node-version, .tool-versions or package.json volta
1231
- pins Node (bin and version are null when no install
1232
- satisfies the pin), else null
1231
+ pins Node (bin, version and match are null when no install
1232
+ fits the pin; match is "exact", or "major" for the newest
1233
+ install of the pinned major not older than the pin), else null
1233
1234
  remoteMachines one { machine, state, dnsName?, deviceId?, requestedAt?,
1234
1235
  expiresAt?, offloadable?, reasons?, problems?, capacity?, host? } per
1235
1236
  remote.machines entry, for its build approval; state is "approved", "pending", "not-asked",
@@ -2823,9 +2824,13 @@ WHAT THE SUPERVISOR IS
2823
2824
 
2824
2825
  expo-child and command-child put the Node the app pins (.nvmrc,
2825
2826
  .node-version, .tool-versions nodejs, or package.json volta.node) first
2826
- on PATH when an nvm, fnm, Volta, asdf or mise install satisfies the pin
2827
- and the node already on PATH does not; the metro log then records a
2828
- project_node event naming it. bare-inproc runs on the supervisor's Node.
2827
+ on PATH when an nvm, fnm, Volta, asdf, mise or linked Homebrew
2828
+ node/node@NN install satisfies the pin and the node already on PATH does
2829
+ not; the metro log then records a project_node event naming it. When no
2830
+ install has the version the pin names, the newest install of the pinned
2831
+ major that is not older than the pin stands in, and a node on PATH of
2832
+ that major and not older than the pin is kept. bare-inproc runs on the
2833
+ supervisor's Node.
2829
2834
 
2830
2835
  In expo-child mode, remote intent plus metro.tunnel "expo" makes \`start\` pass
2831
2836
  \`--tunnel\` and EXPO_UNSTABLE_TUNNEL_V2=1 (the legacy ws-tunnel path is
@@ -3623,12 +3628,16 @@ Branch on the code, never on the message.`,
3623
3628
  summary: "expo prebuild could not generate or regenerate the native directory",
3624
3629
  body: () => `STIM_PREBUILD_FAILED
3625
3630
  \`expo prebuild\` could not generate the missing native directory, or
3626
- regenerate a stale one. The extracted output is above the code; the
3631
+ update a stale one in place. The extracted output is above the code; the
3627
3632
  transcript is in the global workspace logs/build-<platform>.ndjson file.
3628
- The same code refuses a native directory that the fingerprint leaves out of
3629
- the cache key while git tracks its files, or when git cannot answer: Stim
3630
- cannot show those files came from the current app config, and will not
3631
- delete tracked files with \`expo prebuild --clean\`. Stop excluding the
3633
+ Stim updates an existing gitignored directory in place, so what an
3634
+ earlier config wrote stays there; when the output points at leftovers of a
3635
+ removed config plugin or an Expo SDK upgrade, delete the directory
3636
+ (\`rm -rf ios\` or \`rm -rf android\`) and run again so Stim generates it
3637
+ fresh. The same code refuses a native directory that the fingerprint leaves
3638
+ out of the cache key while git tracks its files, or when git cannot answer:
3639
+ Stim cannot show those files came from the current app config, and will
3640
+ not run \`expo prebuild\` over tracked files. Stop excluding the
3632
3641
  directory from the fingerprint (.fingerprintignore), or gitignore and
3633
3642
  untrack it so Stim regenerates it. When git itself is failing, fix the
3634
3643
  checkout first.`
@@ -5323,14 +5332,15 @@ hosting Mac keeps Metro local through a private bridge; see hosted-ios. Step 2 r
5323
5332
  Metro while other work happens.
5324
5333
 
5325
5334
  Each time Stim boots an owned local simulator or emulator, it mutes it: iOS
5326
- simulators to volume zero through Xcode's devicectl, and Android 15 and later
5327
- emulators to media volume zero. A device that is already running keeps its
5328
- volume. Turn sound on for one device with Sound (iOS) or Media sound
5329
- (Android) in its Stim Desktop options; the choice lasts until that device next
5330
- boots. Android 14 and older images have no shell command that can set media
5331
- volume, so startup warns, as it does whenever a mute is not confirmed. Host
5332
- volume, Android alarm and ringtone volumes, hosted devices and physical
5333
- devices are unchanged.
5335
+ simulators to volume zero through Xcode's devicectl once SpringBoard has
5336
+ finished starting, because SpringBoard resets the volume while it starts, and
5337
+ Android 15 and later emulators to media volume zero. A device that is already
5338
+ running keeps its volume. Turn sound on for one device with Sound (iOS) or
5339
+ Media sound (Android) in its Stim Desktop options; the choice lasts until that
5340
+ device next boots. Android 14 and older images have no shell command that can
5341
+ set media volume, so startup warns, as it does whenever a mute is not
5342
+ confirmed. Host volume, Android alarm and ringtone volumes, hosted devices and
5343
+ physical devices are unchanged.
5334
5344
 
5335
5345
  Repeat step 3 whenever a NATIVE input changes. A JS-only edit needs nothing --
5336
5346
  that is what Fast Refresh over the running dev server is for. \`stim reload\` is
@@ -6961,19 +6971,48 @@ THE BUILD CACHE HAS THREE LEVELS
6961
6971
  Stim records the fingerprint each of its prebuilds produced in the
6962
6972
  workspace state. On a miss, an existing CNG directory with no matching
6963
6973
  record -- the app config, a config plugin or a dependency changed since, or
6964
- someone else generated it -- is regenerated with \`expo prebuild --clean\`
6965
- before pods and the compile, so a stale directory is never built and stored
6966
- under the new key:
6967
-
6968
- prebuild ios/ not generated from this fingerprint -> regenerated with --clean (9s)
6969
-
6970
- Regeneration discards hand edits under a gitignored ios/ or android/ (for
6971
- example a signing team set in Xcode); put them in the app config, such as
6974
+ someone else generated it -- is updated in place with \`expo prebuild
6975
+ --no-clean\` (plain \`expo prebuild\` before Expo SDK 57, whose CLI keeps
6976
+ the directory by default and has no --no-clean) before pods and the
6977
+ compile, so a stale directory is never built and stored under the new key.
6978
+ When Stim cannot read the installed expo version it passes no flag, and
6979
+ SDK 57 and later then delete and regenerate the directory. On iOS,
6980
+ \`pod install\` then always runs and reuses the existing ios/Pods, so only
6981
+ changed pods are reinstalled:
6982
+
6983
+ prebuild ios/ not generated from this fingerprint -> updated in place (9s)
6984
+ pods prebuild updated ios/ in place -> installed with \`pod install\` (14s)
6985
+
6986
+ A build offloaded to another machine still regenerates that machine's copy
6987
+ with --clean and a full \`pod install\`, because deleting your local
6988
+ directory does not reach it.
6989
+
6990
+ An in-place prebuild reapplies the current app config and config plugins
6991
+ over the existing directory; it does not undo what earlier config wrote.
6992
+ Delete the gitignored directory yourself (\`rm -rf ios\` or
6993
+ \`rm -rf android\` in the workspace) before the next build after a change
6994
+ that has to take something out of it or needs a fresh template:
6995
+ - removing a config plugin, or an app config entry a plugin turned into
6996
+ native settings (a permission, entitlement, URL scheme, Info.plist or
6997
+ AndroidManifest entry, an extra target or Gradle/Podfile property)
6998
+ - upgrading the Expo SDK or React Native (Expo copies its native template
6999
+ only into a missing directory)
7000
+ - renaming the app (expo.name), when the Xcode project and target names
7001
+ should follow
7002
+ - a config plugin that fails or duplicates its edit when it runs twice
7003
+ The next build then prints \`ios/ absent -> generated\` and runs a full
7004
+ \`pod install\`. If you already built after such a change, the stale
7005
+ build is cached under the current fingerprint, and deleting the directory
7006
+ does not change that key: also pass --no-build-cache on that next build so
7007
+ it compiles from the fresh directory and stores over the stale artifact. A
7008
+ STIM_PREBUILD_FAILED over an existing directory names this remedy. Hand
7009
+ edits under a gitignored ios/ or android/ (for example a signing team set in
7010
+ Xcode) survive an in-place prebuild unless a plugin rewrites them, and are
7011
+ lost when the directory is deleted; put them in the app config, such as
6972
7012
  ios.appleTeamId, or a config plugin. A committed native directory is hashed
6973
7013
  into the key and never regenerated. The record only covers prebuilds Stim
6974
- ran: after a manual \`expo prebuild\` with a different config, run
6975
- \`expo prebuild --clean\` yourself or delete the directory so the next build
6976
- regenerates it.
7014
+ ran: after a manual \`expo prebuild\` with a different config, delete the
7015
+ directory so the next build generates it.
6977
7016
 
6978
7017
  Both platforms fingerprint once more after the compile. A change the build
6979
7018
  itself makes to a fingerprinted file under node_modules/ or the native
@@ -10036,11 +10075,21 @@ emulator debug build or a stim macos SwiftPM Debug build compiles:
10036
10075
  off here when local remains enabled in the automatic build pool
10037
10076
 
10038
10077
  For React Native and Expo, among machines that can take a new build, a matching dependency installation
10039
- ranks before load. The worker checks the requested project, lockfile and install
10040
- arguments, and verifies that its modules and install marker remain present.
10078
+ ranks before load. The worker checks the requested project, lockfile, install
10079
+ arguments and the major of the Node the app pins, and verifies that its modules
10080
+ and install marker remain present.
10041
10081
  Older workers' dependency hints and mere checkout or build-folder presence do
10042
10082
  not influence this ranking. Exact completed-artifact hits still come first.
10043
10083
 
10084
+ The worker runs the dependency install, prebuild, pods and xcodebuild with the
10085
+ Node the app pins, in its directory or the nearest one above it in the
10086
+ checkout, first on PATH, chosen as for Metro (see \`stim guide metro\`), and
10087
+ names that Node as NODE_BINARY in the iOS project's .xcode.env.local. A warm
10088
+ Gradle daemon keeps running React Native's node steps on the Node it started
10089
+ with. When no installed Node fits the pin, the steps run on the worker's node
10090
+ and a deps-failed or prebuild-failed reason names the pin and that Node's
10091
+ version. A change of the pinned Node's major reinstalls the dependencies.
10092
+
10044
10093
  Load per core is the 5-minute load average divided by the CPU count; a machine's
10045
10094
  native builds are its Stim runs in prebuild, pods or compile on that machine, not
10046
10095
  the ones it offloaded.
@@ -1,7 +1,7 @@
1
1
  import { f as throwIfCancelled } from "./operation-exec-BW0em61G.mjs";
2
- import { c as call, l as connectHost } from "./hosted-client-DZAPrcro.mjs";
2
+ import { c as call, l as connectHost } from "./hosted-client-Bt-tndxV.mjs";
3
3
  import { i as requestHostedMetro } from "./metro-gateway-CKZqKqx7.mjs";
4
- import { n as prepareHostedNative, r as stopHostedNative, t as placeHostedNative } from "./hosted-native-BdzE668-.mjs";
4
+ import { n as prepareHostedNative, r as stopHostedNative, t as placeHostedNative } from "./hosted-native-BmQC6U_x.mjs";
5
5
  //#region src/device-host/hosted-android.ts
6
6
  async function prepareHostedAndroid(machine, selectors, recorded, mode) {
7
7
  return await prepareHostedNative(machine, selectors, recorded, "android", false, mode);
@@ -1,6 +1,6 @@
1
1
  import { rt as resolveEndpoint } from "./config-DlrsduwG.mjs";
2
2
  import { f as throwIfCancelled, u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
3
- import { t as BuildConnection } from "./client-OyRoEuSr.mjs";
3
+ import { t as BuildConnection } from "./client-B4MMzfo_.mjs";
4
4
  import { u as configuredMachines } from "./selection-DSMbWEX2.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { lstatSync, readFileSync, readdirSync, readlinkSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { n as prepareHostedNative, r as stopHostedNative, t as placeHostedNative } from "./hosted-native-BdzE668-.mjs";
1
+ import { n as prepareHostedNative, r as stopHostedNative, t as placeHostedNative } from "./hosted-native-BmQC6U_x.mjs";
2
2
  //#region src/device-host/hosted-ios.ts
3
3
  async function prepareHostedIos(machine, selectors, recorded, mode) {
4
4
  return await prepareHostedNative(machine, selectors, recorded, "ios", false, mode);
@@ -1,10 +1,10 @@
1
1
  import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { d as workspaceDir, m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { B as deviceSlotFileKey, et as parseMachine$1, q as validateDeviceSlot } from "./config-DlrsduwG.mjs";
4
- import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
4
+ import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
5
  import { n as macosDir } from "./state-08I3hw3_.mjs";
6
6
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
7
- import { c as call } from "./hosted-client-DZAPrcro.mjs";
7
+ import { c as call } from "./hosted-client-Bt-tndxV.mjs";
8
8
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
9
9
  import { dirname, join } from "node:path";
10
10
  import { LOG_ROTATE_BYTES, ambientWrite, withDirLockAsync } from "@stim-cli/core";
@@ -1,9 +1,9 @@
1
- import { a as removeAgentAccess, i as agentAccess, r as closeAgentConnection, t as pullHostedMacosLogs } from "./hosted-logs-FIRx9X2f.mjs";
2
- import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
1
+ import { a as removeAgentAccess, i as agentAccess, r as closeAgentConnection, t as pullHostedMacosLogs } from "./hosted-logs-DzJKzKlj.mjs";
2
+ import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
3
3
  import { u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
4
4
  import { n as macosDir } from "./state-08I3hw3_.mjs";
5
- import { d as runCancellationSignal } from "./native-run-NwUuxbkg.mjs";
6
- import { _ as unknownSession, a as SESSION_TIMEOUT_MS, c as call, d as hostedSession, g as stoppedSession, h as sha256, i as RESERVE_TIMEOUT_MS, l as connectHost, m as settle, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-DZAPrcro.mjs";
5
+ import { d as runCancellationSignal } from "./native-run-Dv88i0aU.mjs";
6
+ import { _ as unknownSession, a as SESSION_TIMEOUT_MS, c as call, d as hostedSession, g as stoppedSession, h as sha256, i as RESERVE_TIMEOUT_MS, l as connectHost, m as settle, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-Bt-tndxV.mjs";
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { join } from "node:path";
9
9
  import { ambientContext, ambientWrite } from "@stim-cli/core";