stim 1.23.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-ybouwJSR.mjs → acquire-artifact-BzYRDgaP.mjs} +1 -1
  2. package/dist/{act-DG54PWtJ.mjs → act-vxiMwdf5.mjs} +6 -6
  3. package/dist/{activity-B5RtpFda.mjs → activity-BpWUPgUm.mjs} +1 -1
  4. package/dist/{agent-device-usage-output-UJ5gC80l.mjs → agent-device-usage-output-CUlLsbRt.mjs} +3 -3
  5. package/dist/{android-CHH4KLOR.mjs → android-CLi6DSiS.mjs} +5 -5
  6. package/dist/{android-BoUJKbfz.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-Dwdo7k1E.mjs → artifact-DBI3DALs.mjs} +9 -9
  10. package/dist/{artifact-5RteZem7.mjs → artifact-Xvgibgzq.mjs} +9 -9
  11. package/dist/{browser-web-CeEVlGug.mjs → browser-web-BJN9ZHxB.mjs} +5 -5
  12. package/dist/{budget-DnPX3DXj.mjs → budget-3ivAK99e.mjs} +7 -7
  13. package/dist/{build-CqufZFqy.mjs → build-Dv9s8Fz-.mjs} +14 -14
  14. package/dist/{build-plan-C8CIvRyi.mjs → build-plan-BmbdHQbr.mjs} +3 -3
  15. package/dist/{ccache-RcAy92gH.mjs → ccache-CH2EWGPB.mjs} +2 -2
  16. package/dist/{cli-D-J9fWGV.mjs → cli-BkK6Wr5i.mjs} +17 -17
  17. package/dist/cli.mjs +1 -1
  18. package/dist/{client-yyso1bwi.mjs → client-B4MMzfo_.mjs} +5 -5
  19. package/dist/{command-output-Db8BqzxH.mjs → command-output-YKGWivpG.mjs} +1 -1
  20. package/dist/{dev-client-BnYSDiKa.mjs → dev-client-BFxiDpkf.mjs} +2 -2
  21. package/dist/{device-BvzPUBs3.mjs → device-B7ljwccX.mjs} +11 -11
  22. package/dist/{device-CCkWmkAA.mjs → device-CiNYxqp6.mjs} +6 -6
  23. package/dist/{device-capacity-CjaSdrhg.mjs → device-capacity-DH0QsZYZ.mjs} +4 -4
  24. package/dist/device-host-worker.mjs +5 -5
  25. package/dist/{device-ios-uOiEETX2.mjs → device-ios-CbVDtDIy.mjs} +32 -4
  26. package/dist/{device-lease-run-BgwPHc6u.mjs → device-lease-run-DXPSwdbb.mjs} +3 -3
  27. package/dist/{device-pool-C-ptmZTa.mjs → device-pool-B4iOXIrD.mjs} +2 -2
  28. package/dist/{doctor-D2SN3Ltx.mjs → doctor-C6t4Maue.mjs} +12 -11
  29. package/dist/{doctor-pxxvipYC.mjs → doctor-DRu-8ld6.mjs} +1 -1
  30. package/dist/{doctor-8sr2tFOL.mjs → doctor-HUC1igzw.mjs} +10 -10
  31. package/dist/{doctor-watchman-sy_RNhFt.mjs → doctor-watchman-iGBpC6KM.mjs} +2 -2
  32. package/dist/{eas-build-CyjU5K7E.mjs → eas-build-DMWSSvxq.mjs} +2 -2
  33. package/dist/{eas-fallback-DV3Wytf1.mjs → eas-fallback-vKlrqxgE.mjs} +5 -5
  34. package/dist/{eas-session-ledger-BzzsX97d.mjs → eas-session-ledger-BQF9Yyy9.mjs} +1 -1
  35. package/dist/{error-diagnostics-C6sVoeqO.mjs → error-diagnostics-DYsjJIHz.mjs} +3 -3
  36. package/dist/{gc-CDoogxAI.mjs → gc-BW8E1uSC.mjs} +9 -9
  37. package/dist/{gc-DLbzvTP2.mjs → gc-dDE4QPVu.mjs} +2 -2
  38. package/dist/{guide-BC37GcDG.mjs → guide-DYYEO3Wz.mjs} +36 -20
  39. package/dist/{hosted-android-CkclQig_.mjs → hosted-android-xcfgCgSF.mjs} +2 -2
  40. package/dist/{hosted-client-ByuMMO5s.mjs → hosted-client-Bt-tndxV.mjs} +1 -1
  41. package/dist/{hosted-ios-DtYHeuYR.mjs → hosted-ios-y19jCYFF.mjs} +1 -1
  42. package/dist/{hosted-logs-Br84qWy1.mjs → hosted-logs-DzJKzKlj.mjs} +2 -2
  43. package/dist/{hosted-macos-DdtYajZt.mjs → hosted-macos-BJusKvqL.mjs} +4 -4
  44. package/dist/{hosted-native-UPI9zdZ4.mjs → hosted-native-BmQC6U_x.mjs} +3 -3
  45. package/dist/{idle-shutdown-DO7oIRlc.mjs → idle-shutdown-CJmUOV5x.mjs} +4 -4
  46. package/dist/{ios-DZZbNYlY.mjs → ios-CWjqfSm_.mjs} +19 -19
  47. package/dist/{ios-vbUOqGXu.mjs → ios-DTOYZGMJ.mjs} +8 -8
  48. package/dist/{ios-device-JC3uWM4K.mjs → ios-device-DFGuwF4U.mjs} +1 -1
  49. package/dist/{ios-project-CVyNwjAF.mjs → ios-project-CSZYI1iu.mjs} +4 -4
  50. package/dist/{js-swap-C3QxUFJR.mjs → js-swap-BSBHldmm.mjs} +3 -3
  51. package/dist/{launch-CHY3p-yz.mjs → launch-CP2wDCVd.mjs} +26 -26
  52. package/dist/{launch-Bz7JtaC4.mjs → launch-D-zq8SHG.mjs} +10 -10
  53. package/dist/{logs-CtNeNDuq.mjs → logs-By5aw3g9.mjs} +4 -4
  54. package/dist/{logs-mxqsWpJs.mjs → logs-pNvA2hHK.mjs} +6 -6
  55. package/dist/{macos-u0BoHKnO.mjs → macos-C67FZ2ft.mjs} +11 -11
  56. package/dist/{macos-inNFbBWc.mjs → macos-CPMahOC2.mjs} +1 -1
  57. package/dist/maintenance-run.mjs +4 -4
  58. package/dist/{native-android-CdCSylTn.mjs → native-android-_MWSs3PP.mjs} +9 -9
  59. package/dist/{native-run-BUTu8T7A.mjs → native-run-Dv88i0aU.mjs} +1 -1
  60. package/dist/{native-runtime-CRSOZxKY.mjs → native-runtime-DBRfY_PN.mjs} +3 -3
  61. package/dist/{native-xcode-inputs-G6rkkhxu.mjs → native-xcode-inputs-CqViUh3r.mjs} +1 -1
  62. package/dist/{native-xcode-ios-_os2PlCD.mjs → native-xcode-ios-vFgqL_yS.mjs} +12 -12
  63. package/dist/offload-worker.mjs +43 -16
  64. package/dist/{plan-placement-BU42oOyT.mjs → plan-placement-cr0fEU7b.mjs} +1 -1
  65. package/dist/{ports-BSmQKzW7.mjs → ports-DpXjKkSV.mjs} +1 -1
  66. package/dist/{prebuild-BFm63bQ0.mjs → prebuild-BligW0QS.mjs} +3 -3
  67. package/dist/{project-CTLNHCfE.mjs → project-DhCtQWWU.mjs} +11 -11
  68. package/dist/{react-native-android-CFgUroxW.mjs → react-native-android-ZlhQfhvq.mjs} +18 -18
  69. package/dist/{react-native-build-CmJkTljQ.mjs → react-native-build-CelbTO_y.mjs} +4 -4
  70. package/dist/{react-native-doctor-LTF-Xt8l.mjs → react-native-doctor-LTIaP7lv.mjs} +5 -5
  71. package/dist/{react-native-ios-ChBF1MkB.mjs → react-native-ios-C5W0SA6f.mjs} +13 -13
  72. package/dist/{reload-DF9hqUUB.mjs → reload-COJWTbae.mjs} +6 -6
  73. package/dist/{reload-RBi1nj6Z.mjs → reload-QcwnYLYV.mjs} +1 -1
  74. package/dist/{remote-BmvMCcJw.mjs → remote-DR8qUERM.mjs} +4 -4
  75. package/dist/{result-Cx5CRLvS.mjs → result-utnBea7x.mjs} +9 -9
  76. package/dist/{server-command-BTiGPEjS.mjs → server-command-B9o92sLM.mjs} +3 -3
  77. package/dist/{server-expo-D9lEz4aq.mjs → server-expo-BXrWxNYh.mjs} +31 -10
  78. package/dist/server-expo-Ddr8cG_c.mjs +2 -0
  79. package/dist/{settings-eKF_vJJs.mjs → settings-PfJx8uK1.mjs} +1 -1
  80. package/dist/{settings-write-79mQRr9C.mjs → settings-write-Chuy7Cte.mjs} +1 -1
  81. package/dist/{slot-launch-D7M2nE4b.mjs → slot-launch-B7AuoWJv.mjs} +2 -2
  82. package/dist/{stage-DKNM4ZPd.mjs → stage-C4u17aES.mjs} +1 -1
  83. package/dist/{start-CRfN1kWV.mjs → start-BL_BsiWt.mjs} +1 -1
  84. package/dist/{start-bjfiScgz.mjs → start-CU8mCPC7.mjs} +4 -4
  85. package/dist/{stats-DioA6cBU.mjs → stats-CO6sK0Nh.mjs} +3 -3
  86. package/dist/{status-Eqx_20WC.mjs → status-CrJutl6-.mjs} +1 -1
  87. package/dist/{status-kzbeWk4x.mjs → status-_WPHzVft.mjs} +11 -11
  88. package/dist/{status-watch-BIqqbJ6q.mjs → status-watch-BHFasOZN.mjs} +1 -1
  89. package/dist/status-worker.mjs +1 -1
  90. package/dist/{stop-B2uLQfoM.mjs → stop-BJ06ipTZ.mjs} +9 -9
  91. package/dist/{stop-DzLJc7Ei.mjs → stop-CR5689oB.mjs} +2 -2
  92. package/dist/{stop-B18d8KDw.mjs → stop-iuFHjUST.mjs} +2 -2
  93. package/dist/supervisor-run.mjs +8 -8
  94. package/dist/{support-DTBV56gy.mjs → support-CbXPbUMJ.mjs} +3 -3
  95. package/dist/{support-BTpZ6RAJ.mjs → support-TWuQlHQo.mjs} +5 -5
  96. package/dist/{swiftpm-macos-r_WSKlXr.mjs → swiftpm-macos-DbwGCpZg.mjs} +3 -3
  97. package/dist/{toolchain-CWeGJgCc.mjs → toolchain-B9hCFCQw.mjs} +1 -1
  98. package/dist/{toolchain-GVgnf8d1.mjs → toolchain-XkA2PfJZ.mjs} +1 -1
  99. package/dist/{web-CwREhjD-.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-BxzYlo3P.mjs → workspaces-e41xsjKr.mjs} +2 -2
  103. package/dist/{worktree-8lqn_lBp.mjs → worktree-B4Nj3EGS.mjs} +12 -12
  104. package/dist/{worktree-BxfVxG_b.mjs → worktree-BEwxVwKF.mjs} +1 -1
  105. package/dist/{xcode-iQnROM5o.mjs → xcode-Rq744mBF.mjs} +3 -3
  106. package/package.json +7 -7
  107. package/dist/server-expo-C-Buqvn_.mjs +0 -2
  108. package/dist/web-Cduk0NSE.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-Db8BqzxH.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-DnPX3DXj.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-BxzYlo3P.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-DO7oIRlc.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-DnPX3DXj.mjs";
8
- import { D as teardownOwnedAvd, k as teardownOwnedIosSim } from "./workspaces-BxzYlo3P.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-DzLJc7Ei.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-CjaSdrhg.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-DTBV56gy.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-Db8BqzxH.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-BxzYlo3P.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-CjaSdrhg.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-Db8BqzxH.mjs";
4
- import { Zt as VERIFY_TIMEOUT_MS, on as APP_READINESS_TIMEOUT_MS } from "./budget-DnPX3DXj.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-B5RtpFda.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-B5RtpFda.mjs";
3
- import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-BgwPHc6u.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-Db8BqzxH.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-CTLNHCfE.mjs";
5
- import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-BzzsX97d.mjs";
6
- import { a as inspectBudget, cr as inspectWatchmanMemory, fr as memorySweepIsScoped, n as budgetLine } from "./budget-DnPX3DXj.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-iQnROM5o.mjs";
9
- import { s as offloadCheck } from "./client-yyso1bwi.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-sy_RNhFt.mjs";
13
- import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-8sr2tFOL.mjs";
14
- import { h as resolveDeviceType, v as resolveRuntime } from "./support-BTpZ6RAJ.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-D2SN3Ltx.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-Db8BqzxH.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-CTLNHCfE.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-DnPX3DXj.mjs";
10
- import { L as listBuildSlots } from "./workspaces-BxzYlo3P.mjs";
11
- import { N as listBuildLocks } from "./activity-B5RtpFda.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-RcAy92gH.mjs";
17
- import { x as podInstallCommand } from "./xcode-iQnROM5o.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-CmJkTljQ.mjs";
19
- import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-CjaSdrhg.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-CyjU5K7E.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-CTLNHCfE.mjs";
5
- import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-BzzsX97d.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-DnPX3DXj.mjs";
4
- import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-B5RtpFda.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-CTLNHCfE.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-DnPX3DXj.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-ByuMMO5s.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-UPI9zdZ4.mjs";
12
- import { c as peekDeviceSlots } from "./device-capacity-CjaSdrhg.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-Db8BqzxH.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-Db8BqzxH.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-CTLNHCfE.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-B5RtpFda.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-Db8BqzxH.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-CTLNHCfE.mjs";
9
- import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-BzzsX97d.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-DnPX3DXj.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-BxzYlo3P.mjs";
13
- import { N as listBuildLocks, k as removeExpiredLease } from "./activity-B5RtpFda.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-8lqn_lBp.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-DG54PWtJ.mjs";
21
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-UJ5gC80l.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-DnPX3DXj.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-CDoogxAI.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-CTLNHCfE.mjs";
3
- import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-BzzsX97d.mjs";
4
- import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-sy_RNhFt.mjs";
5
- import "./status-watch-BIqqbJ6q.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
@@ -5327,14 +5332,15 @@ hosting Mac keeps Metro local through a private bridge; see hosted-ios. Step 2 r
5327
5332
  Metro while other work happens.
5328
5333
 
5329
5334
  Each time Stim boots an owned local simulator or emulator, it mutes it: iOS
5330
- simulators to volume zero through Xcode's devicectl, and Android 15 and later
5331
- emulators to media volume zero. A device that is already running keeps its
5332
- volume. Turn sound on for one device with Sound (iOS) or Media sound
5333
- (Android) in its Stim Desktop options; the choice lasts until that device next
5334
- boots. Android 14 and older images have no shell command that can set media
5335
- volume, so startup warns, as it does whenever a mute is not confirmed. Host
5336
- volume, Android alarm and ringtone volumes, hosted devices and physical
5337
- 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.
5338
5344
 
5339
5345
  Repeat step 3 whenever a NATIVE input changes. A JS-only edit needs nothing --
5340
5346
  that is what Fast Refresh over the running dev server is for. \`stim reload\` is
@@ -10069,11 +10075,21 @@ emulator debug build or a stim macos SwiftPM Debug build compiles:
10069
10075
  off here when local remains enabled in the automatic build pool
10070
10076
 
10071
10077
  For React Native and Expo, among machines that can take a new build, a matching dependency installation
10072
- ranks before load. The worker checks the requested project, lockfile and install
10073
- 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.
10074
10081
  Older workers' dependency hints and mere checkout or build-folder presence do
10075
10082
  not influence this ranking. Exact completed-artifact hits still come first.
10076
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
+
10077
10093
  Load per core is the 5-minute load average divided by the CPU count; a machine's
10078
10094
  native builds are its Stim runs in prebuild, pods or compile on that machine, not
10079
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-ByuMMO5s.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-UPI9zdZ4.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-yyso1bwi.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-UPI9zdZ4.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-Db8BqzxH.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-ByuMMO5s.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-Br84qWy1.mjs";
2
- import { l as phaseLine } from "./command-output-Db8BqzxH.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-BUTu8T7A.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-ByuMMO5s.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";
@@ -1,9 +1,9 @@
1
1
  import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
2
- import { a as removeAgentAccess, i as agentAccess, n as pullHostedNativeLogs, r as closeAgentConnection } from "./hosted-logs-Br84qWy1.mjs";
2
+ import { a as removeAgentAccess, i as agentAccess, n as pullHostedNativeLogs, r as closeAgentConnection } from "./hosted-logs-DzJKzKlj.mjs";
3
3
  import { u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
4
4
  import { l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
5
- import { d as runCancellationSignal } from "./native-run-BUTu8T7A.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, n as OFFER_TIMEOUT_MS, o as attach, p as requireHostedAppMode, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-ByuMMO5s.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, n as OFFER_TIMEOUT_MS, o as attach, p as requireHostedAppMode, 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 { a as requireHostedMetro, i as requestHostedMetro, n as closeHostedMetro } from "./metro-gateway-CKZqKqx7.mjs";
8
8
  import { s as writeHostedNative } from "./ios-state-Dtw5K2aI.mjs";
9
9
  import { randomUUID } from "node:crypto";
@@ -1,10 +1,10 @@
1
1
  import { V as deviceSlotKey, _ as loadConfig$1 } from "./config-DlrsduwG.mjs";
2
- import { o as formatLongDuration } from "./command-output-Db8BqzxH.mjs";
2
+ import { o as formatLongDuration } from "./command-output-YKGWivpG.mjs";
3
3
  import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
4
- import { A as workspaceBuildInProgress, T as collectOwnedDeviceActivity } from "./budget-DnPX3DXj.mjs";
4
+ import { A as workspaceBuildInProgress, T as collectOwnedDeviceActivity } from "./budget-3ivAK99e.mjs";
5
5
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
6
- import { D as teardownOwnedAvd, k as teardownOwnedIosSim } from "./workspaces-BxzYlo3P.mjs";
7
- import { _ as workspaceDeviceLastUseAt } from "./activity-B5RtpFda.mjs";
6
+ import { D as teardownOwnedAvd, k as teardownOwnedIosSim } from "./workspaces-e41xsjKr.mjs";
7
+ import { _ as workspaceDeviceLastUseAt } from "./activity-BpWUPgUm.mjs";
8
8
  import { d as listAllIosSims } from "./ios-hcBpnEGk.mjs";
9
9
  import { DEVICE_IDLE_SHUTDOWN_KEY, DEVICE_RECLAIM_REASON, readDeviceIdleShutdowns } from "@stim-cli/core/state";
10
10
  //#region src/devices/idle-shutdown.ts