stim 1.24.0 → 1.25.0

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 (143) hide show
  1. package/dist/{acquire-artifact-CEs02U2o.mjs → acquire-artifact-zA4S7RHE.mjs} +1 -1
  2. package/dist/{act-Cyvm8xYc.mjs → act-BbHS3oV8.mjs} +12 -12
  3. package/dist/{activity-Dq3ZcdD8.mjs → activity-BpjwrQXU.mjs} +3 -3
  4. package/dist/{agent-device-usage-output-CccomeE0.mjs → agent-device-usage-output-Bnkerfod.mjs} +3 -3
  5. package/dist/{android-BZppyPe_.mjs → android-BGwuK3Mc.mjs} +41 -36
  6. package/dist/{android-DcztblCT.mjs → android-CNZgRC-4.mjs} +5 -5
  7. package/dist/{android-882m4hxX.mjs → android-Cjcj8MCw.mjs} +2 -2
  8. package/dist/{android-cas-BtCOrNqb.mjs → android-cas-BVqh2Zep.mjs} +1 -1
  9. package/dist/{android-project-DVWyCbWU.d.mts → android-project-CTYaETc0.d.mts} +6 -2
  10. package/dist/{android-CX5IcRuf.mjs → android-saBeB4lr.mjs} +1 -1
  11. package/dist/api.d.mts +1 -1
  12. package/dist/api.mjs +22 -22
  13. package/dist/{artifact-BR5VNArK.mjs → artifact-Co8zixVx.mjs} +14 -13
  14. package/dist/{artifact-Bdt_n9Jc.mjs → artifact-DN8JNwqS.mjs} +13 -13
  15. package/dist/{browser-web-ycg9qWB8.mjs → browser-web-CCgZsHmI.mjs} +10 -10
  16. package/dist/{budget-dPGuhNai.mjs → budget-HyShrIpL.mjs} +62 -21
  17. package/dist/{build-CaF574eS.mjs → build-CAiw8Ezm.mjs} +22 -21
  18. package/dist/{build-cache-HFUQ9eLz.mjs → build-cache-CKCzxzxA.mjs} +22 -4
  19. package/dist/{build-plan-JsDUq4w1.mjs → build-plan-zCuHGlA8.mjs} +5 -5
  20. package/dist/{ccache-CCn1S6qG.mjs → ccache-h1FKhZeg.mjs} +3 -3
  21. package/dist/{cli-xqAidP7O.mjs → cli-C4w607Pz.mjs} +17 -17
  22. package/dist/cli.mjs +1 -1
  23. package/dist/{client-18-ZowoT.mjs → client-BQsmyp_-.mjs} +26 -17
  24. package/dist/collector-run.mjs +2 -2
  25. package/dist/{command-output-DxC0k2rk.mjs → command-output-BBvS1H6v.mjs} +1 -1
  26. package/dist/{dependency-state-C56ll9hY.mjs → dependency-state-BwNCYG5Q.mjs} +1 -1
  27. package/dist/{dev-client-w_fok0Ek.mjs → dev-client-CHoXXZeg.mjs} +2 -2
  28. package/dist/{device-BktRGdjS.mjs → device-B9FqTBYW.mjs} +64 -33
  29. package/dist/{device-4RUugw5X.mjs → device-F5-4z9ef.mjs} +13 -13
  30. package/dist/{device-capacity-Ic-kdmEV.mjs → device-capacity-ZYaRALv5.mjs} +7 -7
  31. package/dist/device-host-worker.mjs +10 -10
  32. package/dist/{device-ios-DzpSlZyd.mjs → device-ios-DkHBrmvH.mjs} +27 -16
  33. package/dist/{device-lease-run-DUtkbqBQ.mjs → device-lease-run-ogEeJ62K.mjs} +4 -4
  34. package/dist/{device-pool-CgBHk401.mjs → device-pool-BIg8MU8l.mjs} +2 -2
  35. package/dist/{doctor-BZ6oxNum.mjs → doctor-A_Nr_fDe.mjs} +1 -1
  36. package/dist/{doctor-C33AzVfR.mjs → doctor-Bm8TVpGn.mjs} +27 -21
  37. package/dist/doctor-fingerprint.mjs +1 -1
  38. package/dist/{doctor-DZgpqR6J.mjs → doctor-k3P3PizH.mjs} +12 -12
  39. package/dist/{doctor-watchman-B453A231.mjs → doctor-watchman-BovI1y3-.mjs} +3 -3
  40. package/dist/{eas-build-CxKUNHsb.mjs → eas-build-CyDKNTBP.mjs} +2 -2
  41. package/dist/{eas-fallback-LMxk9Kw0.mjs → eas-fallback-gaZi-dJL.mjs} +12 -11
  42. package/dist/{eas-session-ledger-Ck6YXPAO.mjs → eas-session-ledger-BMCA1gdO.mjs} +3 -3
  43. package/dist/{error-diagnostics-BkKCZq4P.mjs → error-diagnostics-B1Mj_-7h.mjs} +7 -7
  44. package/dist/{errors-ccaPc4ox.mjs → errors-DHm_U5gv.mjs} +2 -1
  45. package/dist/{gc-yVKpAOKM.mjs → gc-B9jcnmIk.mjs} +15 -15
  46. package/dist/{gc-DDWEAj0w.mjs → gc-eaz403W6.mjs} +2 -2
  47. package/dist/{guide-Bggftwc5.mjs → guide-DR0K0xW9.mjs} +113 -37
  48. package/dist/{hosted-android-D4dweBof.mjs → hosted-android-Bvb2-ZxD.mjs} +3 -3
  49. package/dist/{hosted-client-BBTVe3X6.mjs → hosted-client-rsRqysJc.mjs} +2 -2
  50. package/dist/{hosted-ios-Sn0djzg8.mjs → hosted-ios-RtVcJH3u.mjs} +1 -1
  51. package/dist/{hosted-logs-CYIZ5ubJ.mjs → hosted-logs-CWKGYWNX.mjs} +4 -4
  52. package/dist/{hosted-macos-CXjsUNBR.mjs → hosted-macos-d0pv9Tth.mjs} +5 -5
  53. package/dist/{hosted-native-Doxbfzem.mjs → hosted-native-BxTizGU2.mjs} +6 -6
  54. package/dist/{idle-shutdown-BInjLKqm.mjs → idle-shutdown-BIyfl0Zj.mjs} +6 -6
  55. package/dist/{ios-CVUFFZ6C.mjs → ios-BQzvJlzw.mjs} +59 -11
  56. package/dist/{ios-B1FXRCMX.mjs → ios-BRVM8b0P.mjs} +37 -32
  57. package/dist/{ios-BItP6lkn.mjs → ios-Dvt97HgQ.mjs} +8 -8
  58. package/dist/{ios-device-BI38NFFH.mjs → ios-device-CKSvk0bu.mjs} +1 -1
  59. package/dist/{ios-project-KYqeJURj.mjs → ios-project-DCUDo06I.mjs} +4 -4
  60. package/dist/{ios-state-DlElquYD.mjs → ios-state-CT9nV5SP.mjs} +1 -1
  61. package/dist/{js-swap-BvrQvXHY.mjs → js-swap-Z9HbC4cj.mjs} +4 -4
  62. package/dist/{launch-SfzGH_s9.mjs → launch-D0lPvFFu.mjs} +16 -16
  63. package/dist/{launch-BVlyQw3T.mjs → launch-DscF1QfM.mjs} +35 -35
  64. package/dist/{logs-DXE32kyb.mjs → logs-BsIRre8x.mjs} +7 -7
  65. package/dist/{logs-ovlU7m7N.mjs → logs-Crs9y34Z.mjs} +5 -5
  66. package/dist/{macos-B3BveDrU.mjs → macos-CcUlJPMu.mjs} +1 -1
  67. package/dist/{macos-CCfhb-jT.mjs → macos-D477nfzH.mjs} +17 -17
  68. package/dist/macos-run.mjs +1 -1
  69. package/dist/maintenance-run.mjs +5 -5
  70. package/dist/{metro-Bu8LBfzS.mjs → metro-1pJgCX4U.mjs} +1 -1
  71. package/dist/{metro-gateway-DtsOy-0P.mjs → metro-gateway-Bp9gJQAN.mjs} +1 -1
  72. package/dist/{named-ports-BWDuU5oQ.mjs → named-ports-BVbn8SvC.mjs} +1 -1
  73. package/dist/{native-android-96BBizbq.mjs → native-android-BvMizJn1.mjs} +14 -14
  74. package/dist/{native-gradle-artifact-inputs-BcLYBZil.mjs → native-gradle-artifact-inputs-BJscK4vN.mjs} +3 -3
  75. package/dist/{native-run-BmH7U8pr.mjs → native-run-D5OJsGwA.mjs} +2 -2
  76. package/dist/{native-runtime-DgtJkzIa.mjs → native-runtime-B9w_Qyz3.mjs} +6 -6
  77. package/dist/{native-xcode-inputs-irplbQb0.mjs → native-xcode-inputs-Cv4l-obn.mjs} +1 -1
  78. package/dist/{native-xcode-ios-BY-6hh6M.mjs → native-xcode-ios-DGrg90hE.mjs} +17 -16
  79. package/dist/offload-worker.d.mts +5 -2
  80. package/dist/offload-worker.mjs +21 -20
  81. package/dist/{ownership-DxlZGDcV.mjs → ownership-jxxz-19m.mjs} +2 -2
  82. package/dist/{phone-reverses-BdsdesVF.mjs → phone-reverses-CYb7RRAx.mjs} +2 -2
  83. package/dist/{placement-log-DUvqqsB-.mjs → placement-log-DjOXJRIH.mjs} +1 -1
  84. package/dist/{plan-placement-4axc0Hs7.mjs → plan-placement-BqKgKHCi.mjs} +3 -3
  85. package/dist/{ports-D-E_OiAO.mjs → ports-DtS1Amb0.mjs} +2 -2
  86. package/dist/{prebuild-DmVCf5xb.mjs → prebuild-JUaqOLpc.mjs} +6 -6
  87. package/dist/{project-Dz-hWkb-.mjs → project-BiC68mIp.mjs} +14 -14
  88. package/dist/{react-native-android-DOinxgwB.mjs → react-native-android-DRYqoJc4.mjs} +23 -22
  89. package/dist/{react-native-build-AuCu-aAP.mjs → react-native-build-CwZB-agu.mjs} +6 -6
  90. package/dist/{react-native-doctor-2ivJUmwZ.mjs → react-native-doctor-BCrytK7h.mjs} +6 -6
  91. package/dist/{react-native-ios-D5zTIuH8.mjs → react-native-ios-Cr1buNFo.mjs} +18 -17
  92. package/dist/{recordings-CdPwYwvs.mjs → recordings-BaoQ0t-J.mjs} +1 -1
  93. package/dist/{reload-Ck9RJeSq.mjs → reload-Beftw2X3.mjs} +1 -1
  94. package/dist/{reload-C1TTVesC.mjs → reload-FbSgMF8x.mjs} +13 -13
  95. package/dist/{remote-DEZ7AOVq.mjs → remote-BuZj6AyU.mjs} +15 -6
  96. package/dist/{result-DqBrb12U.mjs → result-CR2vk2cj.mjs} +14 -14
  97. package/dist/{run-BIwoU44q.mjs → run-BtzE09Dl.mjs} +1 -1
  98. package/dist/{selection-BLtvaqxc.mjs → selection-D5cxEl3t.mjs} +2 -2
  99. package/dist/{server-bare-Z1ToVLPn.mjs → server-bare-CH9X0RLn.mjs} +55 -3
  100. package/dist/{server-command-C0pmjNdG.mjs → server-command-CaBbDNU2.mjs} +4 -4
  101. package/dist/server-expo-C16Zf2k7.mjs +2 -0
  102. package/dist/{server-expo-Tt_hLRpy.mjs → server-expo-Ck8EIidM.mjs} +8 -6
  103. package/dist/{settings-RKwY33wv.mjs → settings-B5tCoq9N.mjs} +58 -60
  104. package/dist/{settings-kkt0vP4w.mjs → settings-DzH9mGQZ.mjs} +1 -1
  105. package/dist/{settings-write--gj6MACV.mjs → settings-write-n0zwfohx.mjs} +3 -3
  106. package/dist/settings.schema.json +38 -0
  107. package/dist/{simslim-CdWKT3vA.mjs → simslim-BjxszUAb.mjs} +20 -5
  108. package/dist/{slot-launch-A1BgotaM.mjs → slot-launch-QeuJMlnJ.mjs} +5 -5
  109. package/dist/{stage-ERTMh88n.mjs → stage-D8xlRU2D.mjs} +1 -1
  110. package/dist/{start-Bmg_qmHi.mjs → start-C1JLjkNw.mjs} +1 -1
  111. package/dist/{start-BKGrEhzG.mjs → start-YMpNwLhh.mjs} +7 -7
  112. package/dist/{state-B1ig0Kqy.mjs → state-DMRNP7-4.mjs} +2 -2
  113. package/dist/{state-BfAltYJP.mjs → state-DPaM3u5K.mjs} +1 -1
  114. package/dist/{stats-B-ckuiUg.mjs → stats-CP7STzZw.mjs} +3 -3
  115. package/dist/{status-DfFp6a76.mjs → status-CRLiJ-O_.mjs} +19 -19
  116. package/dist/{status-Pw-807f0.mjs → status-cNw6i0_t.mjs} +1 -1
  117. package/dist/{status-watch-XC7F-AMf.mjs → status-watch-Bc2J4TZn.mjs} +4 -4
  118. package/dist/status-worker.mjs +1 -1
  119. package/dist/{stop-BFu7X_Do.mjs → stop-Br7LKxBE.mjs} +2 -2
  120. package/dist/{stop-DhclRwOO.mjs → stop-COP6PQqw.mjs} +4 -4
  121. package/dist/{stop-CL1kDHds.mjs → stop-Db9Kh-UA.mjs} +69 -50
  122. package/dist/supervisor-run.mjs +13 -13
  123. package/dist/{support-B3tzVhKn.mjs → support-Cxj9CmII.mjs} +4 -4
  124. package/dist/{support-B1W-hmC2.mjs → support-qKcbgmI5.mjs} +14 -11
  125. package/dist/{swiftpm-artifact-inputs-BWYPj9Sn.mjs → swiftpm-artifact-inputs-iY9fsmOc.mjs} +1 -1
  126. package/dist/{swiftpm-macos-BVCP5mO4.mjs → swiftpm-macos-Bp_sn9P4.mjs} +8 -8
  127. package/dist/{toolchain-BjgKdoEf.mjs → toolchain-DB1aeqxO.mjs} +1 -1
  128. package/dist/{toolchain-D3bmRMia.mjs → toolchain-VzLJzZ7O.mjs} +14 -3
  129. package/dist/{warm-progress-ol0ZypEu.mjs → warm-progress-BV3ZPmcY.mjs} +3 -3
  130. package/dist/{web-BH7peScT.mjs → web-B4Yjyt1G.mjs} +6 -6
  131. package/dist/web-DS4UDWvf.mjs +2 -0
  132. package/dist/web-run.mjs +3 -3
  133. package/dist/{workspace-state-CeBpIZgr.mjs → workspace-state-CPSp3mav.mjs} +1 -1
  134. package/dist/{workspaces-CSV2Orf4.mjs → workspaces-C9w4aeXF.mjs} +10 -10
  135. package/dist/{worktree-Dw8kfacb.mjs → worktree-CclFIe1Z.mjs} +25 -25
  136. package/dist/{worktree-DEDUzO_L.mjs → worktree-Ct9Gk3KL.mjs} +1 -1
  137. package/dist/{xcode-DHu41qQ4.mjs → xcode-CiIIDnuD.mjs} +4 -4
  138. package/package.json +7 -7
  139. package/shim/bundle-response.cjs +53 -1
  140. package/shim/bundle-response.d.cts +1 -1
  141. package/shim/expo-metro-config.cjs +23 -1
  142. package/dist/server-expo-CEntXzRw.mjs +0 -2
  143. package/dist/web-BdOFlTJr.mjs +0 -2
@@ -2,24 +2,24 @@ import { D as ownership_claim_exports, E as debugLog, S as process_identity_expo
2
2
  import { d as workspaceDir, f as workspaceId$1, g as workspaceStateFile$1, i as sharedBuildCache, m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { D as withConfigLock$1, F as isOnMountedVolume, G as projectDeviceSlots, H as deviceSlotPlatforms, L as measuredDirectorySizeAsync, M as directorySize, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, _ as loadConfig$1, a as clearDevice, d as getConfigDir, o as clearSupervisor, p as getProject } from "./config-BZhXY15H.mjs";
4
4
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
5
- import { a as formatElapsed, l as phaseLine, o as formatLongDuration, s as isAppLaunchError, u as plural } from "./command-output-DxC0k2rk.mjs";
5
+ import { a as formatElapsed, l as phaseLine, o as formatLongDuration, s as isAppLaunchError, u as plural } from "./command-output-BBvS1H6v.mjs";
6
6
  import { a as killOnAbort, n as runOperationFileQuiet, r as childEnvironment, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
7
- import { d as writeWorkspaceState, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-CeBpIZgr.mjs";
8
- import { J as resolveProjectSettingsAsync, d as androidLayoutSetting, lt as planMetroReach } from "./settings-RKwY33wv.mjs";
9
- import { C as resolvePackageJson, M as readMetroTunnel, N as readPidFile, P as readRemoteSession, i as findProjectRoot$1, j as clearWorkspaceSupervisor, k as clearRemoteSession, s as ownedDeviceLabel, v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
10
- import { F as listAvdsAsync, G as ownedAvdSerialResolverAsync, I as listInstalledSystemImages, J as parseAvdSystemImage, V as ownedAvdDirectory, W as ownedAvdSerialResolver, d as androidToolPath, dt as isStimOwnedSim, m as avdIniPaths, mt as dropParked, o as androidHome, q as parseAvdDeviceProfile, ut as isStimOwnedAvd, v as avdStorageRoots, yt as readParked } from "./android-882m4hxX.mjs";
11
- import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, r as killMetroTreeAsync, u as processCwds } from "./metro-Bu8LBfzS.mjs";
7
+ import { d as writeWorkspaceState, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-CPSp3mav.mjs";
8
+ import { Y as resolveProjectSettingsAsync, d as androidLayoutSetting, ut as planMetroReach } from "./settings-B5tCoq9N.mjs";
9
+ import { C as resolvePackageJson, M as readMetroTunnel, N as readPidFile, P as readRemoteSession, i as findProjectRoot$1, j as clearWorkspaceSupervisor, k as clearRemoteSession, s as ownedDeviceLabel, v as detectIsExpo } from "./project-BiC68mIp.mjs";
10
+ import { F as listAvdsAsync, G as ownedAvdSerialResolverAsync, I as listInstalledSystemImages, J as parseAvdSystemImage, V as ownedAvdDirectory, W as ownedAvdSerialResolver, d as androidToolPath, dt as isStimOwnedSim, m as avdIniPaths, mt as dropParked, o as androidHome, q as parseAvdDeviceProfile, ut as isStimOwnedAvd, v as avdStorageRoots, yt as readParked } from "./android-Cjcj8MCw.mjs";
11
+ import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, r as killMetroTreeAsync, u as processCwds } from "./metro-1pJgCX4U.mjs";
12
12
  import { r as createNdjsonWriter, s as readNdjsonGenerations$1 } from "./ndjson-CgE_o3Dl.mjs";
13
- import { C as environmentState, a as removeEasSessionClaim, d as parseWatchRoots, f as parseWatchmanClients, i as recordEasSessionClaim, l as parseSubscriberNames, n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, p as parseWatchmanPid, r as readEasSessionLedger$1, s as compareStimVersions, t as assertEasMachineRootWritable, u as parseTriggerCount, w as formatSpace, y as capacity } from "./eas-session-ledger-Ck6YXPAO.mjs";
13
+ import { C as environmentState, a as removeEasSessionClaim, d as parseWatchRoots, f as parseWatchmanClients, i as recordEasSessionClaim, l as parseSubscriberNames, n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, p as parseWatchmanPid, r as readEasSessionLedger$1, s as compareStimVersions, t as assertEasMachineRootWritable, u as parseTriggerCount, w as formatSpace, y as capacity } from "./eas-session-ledger-BMCA1gdO.mjs";
14
14
  import { i as registeredCaches } from "./cache-manifest-BPXRONJz.mjs";
15
15
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
16
- import { c as nativeRunWaitNotice, d as runCancellationSignal, m as claimForEmptying } from "./native-run-BmH7U8pr.mjs";
17
- import { A as teardownOwnedIosSim, B as GC_OUTPUT, E as eraseParkedIosSim, F as measureDu, I as writeUsageCache, M as teardownParkedIosSim, N as probePublicHttp, O as teardownOwnedAvd, P as canonical, R as listBuildSlots, T as eraseParkedAvd, a as collectWorkspaceOutputs, g as resolveSupervisorTarget, j as teardownParkedAvd, p as withIdleWorkspace, r as clearWorkspaceOutputs } from "./workspaces-CSV2Orf4.mjs";
18
- import { N as listBuildLocks, b as leaseIsExpired, g as workspaceActivity, i as createActivityReaderAsync, o as envDir, p as readHostProcessTableAsync, r as createActivityReader, s as idleForMs, x as listLeaseFiles } from "./activity-Dq3ZcdD8.mjs";
19
- import { c as expoConfigContents } from "./build-cache-HFUQ9eLz.mjs";
20
- import { D as sanitizeDeviceLabel, H as deviceHoldsBundle, V as deviceHoldsApk, b as parseSimctlList, f as listAllIosSimsAsync, g as listUserApps, k as uninstallIosApp, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, y as parseRuntimeVersion } from "./ios-CVUFFZ6C.mjs";
21
- import { n as supervisorError } from "./errors-ccaPc4ox.mjs";
22
- import { c as findBinUpward, n as expoBinFromPackage, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-Tt_hLRpy.mjs";
16
+ import { c as nativeRunWaitNotice, d as runCancellationSignal, m as claimForEmptying } from "./native-run-D5OJsGwA.mjs";
17
+ import { A as teardownOwnedIosSim, B as GC_OUTPUT, E as eraseParkedIosSim, F as measureDu, I as writeUsageCache, M as teardownParkedIosSim, N as probePublicHttp, O as teardownOwnedAvd, P as canonical, R as listBuildSlots, T as eraseParkedAvd, a as collectWorkspaceOutputs, g as resolveSupervisorTarget, j as teardownParkedAvd, p as withIdleWorkspace, r as clearWorkspaceOutputs } from "./workspaces-C9w4aeXF.mjs";
18
+ import { N as listBuildLocks, b as leaseIsExpired, g as workspaceActivity, i as createActivityReaderAsync, o as envDir, p as readHostProcessTableAsync, r as createActivityReader, s as idleForMs, x as listLeaseFiles } from "./activity-BpjwrQXU.mjs";
19
+ import { c as expoConfigContents } from "./build-cache-CKCzxzxA.mjs";
20
+ import { D as sanitizeDeviceLabel, H as deviceHoldsApk, U as deviceHoldsBundle, b as parseSimctlList, f as listAllIosSimsAsync, g as listUserApps, k as uninstallIosApp, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, y as parseRuntimeVersion } from "./ios-BQzvJlzw.mjs";
21
+ import { n as supervisorError } from "./errors-DHm_U5gv.mjs";
22
+ import { c as findBinUpward, n as expoBinFromPackage, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-Ck8EIidM.mjs";
23
23
  import { t as DEV_MENU_LAUNCH_ARGS } from "./ios-device-B6HK951C.mjs";
24
24
  import { createRequire } from "node:module";
25
25
  import { randomUUID } from "node:crypto";
@@ -2985,16 +2985,18 @@ async function launchIosApp({ udid, bundleId, metroPort, devClientScheme = null,
2985
2985
  const e = exec || getExecutor();
2986
2986
  const running = await iosAppProcess(udid, bundleId, { exec: e });
2987
2987
  const stateUnknown = running.state === "unknown";
2988
+ const launchRestarts = metroPort === null || !devClientScheme || Boolean(consolePaths);
2988
2989
  const launchArgs = [
2989
2990
  "simctl",
2990
2991
  "launch",
2991
2992
  ...consolePaths ? [`--stdout=${consolePaths.stdout}`, `--stderr=${consolePaths.stderr}`] : [],
2992
- ...stateUnknown ? ["--terminate-running-process"] : [],
2993
+ ...stateUnknown || running.state === "running" && launchRestarts ? ["--terminate-running-process"] : [],
2993
2994
  udid,
2994
2995
  bundleId
2995
2996
  ];
2996
2997
  const restart = {};
2997
- if (running.state === "running") {
2998
+ if (running.state === "running" && launchRestarts) restart.restartedPid = running.pid;
2999
+ else if (running.state === "running") {
2998
3000
  try {
2999
3001
  await e.runFileAsync("xcrun", [
3000
3002
  "simctl",
@@ -3677,7 +3679,10 @@ const LAUNCH_UNVERIFIED = "unverified";
3677
3679
  const LAUNCH_BUNDLING = "bundling";
3678
3680
  const LAUNCH_FATAL = "fatal";
3679
3681
  const VERIFY_TIMEOUT_MS = 2e4;
3682
+ const MANIFEST_GRACE_MS = 15e3;
3683
+ const MANIFEST_VERIFY_TIMEOUT_MS = 6e4;
3680
3684
  const STABILITY_WINDOW_MS = 3e3;
3685
+ const JS_RUNNING_SETTLE_MS = 500;
3681
3686
  const VERIFY_POLL_MS = 500;
3682
3687
  const BUNDLE_EVENTS = /* @__PURE__ */ new Set([
3683
3688
  "bundle_build_started",
@@ -3714,6 +3719,21 @@ function isBundleRequestProof(record, since = 0, port = null, platform = null) {
3714
3719
  if (!new RegExp(`:${digits}\\b`).test(rec.msg)) return false;
3715
3720
  return BUNDLE_URL_PATH.test(rec.msg);
3716
3721
  }
3722
+ const JS_RUNNING = /^Running "[^"]*"/;
3723
+ function isJsRunning(record, platform) {
3724
+ return record.src === "device" && record.platform === platform && (record.level === "info" || record.level === "debug") && typeof record.msg === "string" && JS_RUNNING.test(record.msg);
3725
+ }
3726
+ function jsRunningSince(signals, since, runtimeWaiting, platform) {
3727
+ if (since === null || runtimeWaiting) return null;
3728
+ const running = signals.find((record) => Number(record.ts) >= since && isJsRunning(record, platform));
3729
+ return running ? Number(running.ts) : null;
3730
+ }
3731
+ function settledWindowEnd(stabilityDeadline, jsRunningAt) {
3732
+ return stabilityDeadline !== null && jsRunningAt !== null ? Math.min(stabilityDeadline, jsRunningAt + JS_RUNNING_SETTLE_MS) : stabilityDeadline;
3733
+ }
3734
+ function jsRunningFields(jsRunningAt) {
3735
+ return jsRunningAt === null ? {} : { jsRunning: true };
3736
+ }
3717
3737
  function expoBundleLine(msg) {
3718
3738
  return /\bBundl(?:ing|ed)\b/.test(msg);
3719
3739
  }
@@ -3729,6 +3749,19 @@ async function nativeLaunchFailure({ readCrashes, since, platform, processAlive,
3729
3749
  waitedMs
3730
3750
  } : null;
3731
3751
  }
3752
+ function manifestDeadline(records, { startedAt, timeoutMs }) {
3753
+ const base = startedAt + timeoutMs;
3754
+ const open = /* @__PURE__ */ new Set();
3755
+ let servedAt = null;
3756
+ for (const record of records.toSorted((a, b) => Number(a.ts) - Number(b.ts))) if (record.event === "manifest_request_started") open.add(record.requestId);
3757
+ else {
3758
+ open.delete(record.requestId);
3759
+ if (record.event === "manifest_request_finished") servedAt = Number(record.ts);
3760
+ }
3761
+ const cap = startedAt + Math.max(timeoutMs, MANIFEST_VERIFY_TIMEOUT_MS);
3762
+ if (open.size > 0) return cap;
3763
+ return servedAt === null ? base : Math.min(cap, Math.max(base, servedAt + MANIFEST_GRACE_MS));
3764
+ }
3732
3765
  async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metroPort = null, platform = null, mode = null, requireBundleResponse, timeoutMs = VERIFY_TIMEOUT_MS, stabilityMs = STABILITY_WINDOW_MS, pollMs = VERIFY_POLL_MS, readRecords = null, readDeviceRecords = null, readClientRecords = null, readNativeCrashes = null, processAlive = null, onReadinessPending = null, onActivity, now = Date.now, sleep = (ms) => new Promise((r) => setTimeout(r, ms)) } = {}) {
3733
3766
  const delivered = (record) => deliveryOwner(record, {
3734
3767
  slot,
@@ -3739,7 +3772,8 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3739
3772
  const readDevice = readDeviceRecords || (() => readNdjson(logsDir, "device.ndjson"));
3740
3773
  const readClient = readClientRecords || (() => readNdjson(logsDir, "client.ndjson"));
3741
3774
  const startedAt = now();
3742
- const bundleDeadline = startedAt + Math.max(0, timeoutMs);
3775
+ const baseTimeoutMs = Math.max(0, timeoutMs);
3776
+ let bundleDeadline = startedAt + baseTimeoutMs;
3743
3777
  let proof = null;
3744
3778
  let activity = null;
3745
3779
  let stabilityDeadline = null;
@@ -3760,6 +3794,10 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3760
3794
  const bundleRecords = metroRecords.filter((record) => (!requireBundleResponse || String(record.event).startsWith("bundle_response_")) && delivered(record));
3761
3795
  const deviceRecords = readDevice().filter((record) => after(record, since) && (slot === void 0 || (record.slot ?? "default") === slot));
3762
3796
  const clientRecords = readClient().filter((record) => after(record, since) && !platformShared);
3797
+ bundleDeadline = manifestDeadline(metroRecords.filter((record) => String(record.event).startsWith("manifest_request_") && (!platform || record.platform === platform)), {
3798
+ startedAt,
3799
+ timeoutMs: baseTimeoutMs
3800
+ });
3763
3801
  if (now() >= nextCrashCheck) {
3764
3802
  nextCrashCheck = now() + 2e3;
3765
3803
  const crash = await nativeLaunchFailure({
@@ -3801,6 +3839,8 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3801
3839
  const runtimeWaiting = runtimeLoadingAt !== null && runtimeStartedAt === null;
3802
3840
  const completedAt = proof ? Math.max(Number(proof.ts), runtimeStartedAt ?? 0) : null;
3803
3841
  if (completedAt !== null) stabilityDeadline = completedAt + Math.max(0, stabilityMs);
3842
+ const jsRunningAt = jsRunningSince(signals, completedAt, runtimeWaiting, platform);
3843
+ const windowEnd = settledWindowEnd(stabilityDeadline, jsRunningAt);
3804
3844
  const readinessDeadline = completedAt !== null ? completedAt + APP_READINESS_TIMEOUT_MS : bundleDeadline;
3805
3845
  if (pendingAt === null) {
3806
3846
  const pending = signals.find((record) => appReadinessSignal(record, platform) === "pending" && (runtimeWaiting || stabilityDeadline === null || Number(record.ts) <= stabilityDeadline));
@@ -3827,7 +3867,7 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3827
3867
  ...pendingAt !== null ? { readiness: "error" } : {}
3828
3868
  };
3829
3869
  }
3830
- if (proof && stabilityDeadline !== null && (pendingAt !== null || now() >= stabilityDeadline)) {
3870
+ if (proof && windowEnd !== null && (pendingAt !== null || now() >= windowEnd)) {
3831
3871
  const errorSince = pendingAt === null ? Number(proof.ts ?? since ?? 0) : Number(since ?? 0);
3832
3872
  const errors = [
3833
3873
  ...metroRecords.filter((record) => after(record, errorSince) && recordCouldBelongToPlatform(record, platform)),
@@ -3855,7 +3895,8 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3855
3895
  processAlive: alive,
3856
3896
  mode,
3857
3897
  waitedMs,
3858
- ...pendingAt !== null ? { readiness: appErrors ? "error" : ready ? "ready" : "timed-out" } : {}
3898
+ ...pendingAt !== null ? { readiness: appErrors ? "error" : ready ? "ready" : "timed-out" } : {},
3899
+ ...jsRunningFields(jsRunningAt)
3859
3900
  };
3860
3901
  }
3861
3902
  if ((!proof || runtimeWaiting) && now() >= bundleDeadline) return await bundleTimeoutOutcome({
@@ -3871,7 +3912,7 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3871
3912
  mode,
3872
3913
  waitedMs: now() - startedAt
3873
3914
  });
3874
- await sleep(Math.min(pollMs, Math.max(0, (runtimeWaiting ? bundleDeadline : proof && pendingAt !== null ? readinessDeadline : stabilityDeadline ?? bundleDeadline) - now())));
3915
+ await sleep(Math.min(pollMs, Math.max(0, (runtimeWaiting ? bundleDeadline : proof && pendingAt !== null ? readinessDeadline : windowEnd ?? bundleDeadline) - now())));
3875
3916
  }
3876
3917
  }
3877
3918
  function launchActivity(pendingAt, proof, bundling) {
@@ -9343,4 +9384,4 @@ function budgetLine(report) {
9343
9384
  return `${report.volumes.length ? `${report.volumes.map((v) => `${v.freeGb} GB free on ${v.volume}`).join(", ")} (reclaims below ${Math.max(budget.minFreeDiskGb, budget.hardFloorDiskGb)} GB, ${budget.hardFloorDiskGb ? `refuses below ${budget.hardFloorDiskGb} GB` : "never refuses"})` : "disk budget off"}; ${report.memory ? `roughly ${report.memory.committedGb} GB of a ${budget.maxCommittedMemoryGb} GB memory budget committed` : "memory budget off"}`;
9344
9385
  }
9345
9386
  //#endregion
9346
- export { includesArchives as $, remoteCliInvocation as $n, VERIFY_TIMEOUT_MS as $t, workspaceBuildInProgress as A, writeDebugHttpHost as An, findStaleDeviceRecords as At, recordFinishedBuild as B, UPLOAD_TIMEOUT_MS as Bn, bundleEntryPoint as Bt, collectIdleDevices as C, installIosApp as Cn, pruneCache as Cr, deleteParkedSims as Ct, idleDeviceLines as D, launchIosApp as Dn, deviceSweepIsScoped as Dt, collectOwnedDeviceActivityAsync as E, launchAndroidReleaseApp as En, describeUnverifiableDevices as Et, buildStatusLine as F, gateMetroOrigin as Fn, deleteEasSessions as Ft, createRunRecorder as G, loadProjectProvider as Gn, remoteAndroidDeps as Gt, startBuildProgress as H, checkEasAuth as Hn, ensureMetroReachable as Ht, bundlingActivity as I, exitAfterFlush as In, describeError as It, recordCapacityRefusal as J, readProjectConfig as Jn, withEasProjectLock as Jt, readRunEstimates as K, ownerFromConfig as Kn, remoteIosDeps as Kt, estimateBuild as L, processContext as Ln, withRemoteSessionGcLocks as Lt, NO_BUILD_PROGRESS as M, readBundleSchemes as Mn, unverifiedDeviceCommand as Mt, activeBuildState as N, schemesFromInfoPlist as Nn, withAndroidAvdSizes as Nt, parseIdleDuration as O, restartedAppNote as On, eraseParkedDevices as Ot, buildReport as P, readRemoteSimulatorArch as Pn, collectEasSessionSweep as Pt, emptyCaches as Q, bundleInvocation as Qn, RELEASE_VERIFY_WAIT_MS as Qt, parseActiveBuild as R, runProcessOperation as Rn, REMOTE_SESSION_ERROR as Rt, withdrawDevServerStopRequest as S, installConflictKind as Sn, discoverCaches as Sr, deleteParkedAvds as St, collectOwnedDeviceActivity as T, launchAndroidApp as Tn, describeParkedSims as Tt, tapBuildLog as U, easAuthNote as Un, ensureRemoteBootOwned as Ut, runFailureRecord as V, cacheLevel as Vn, endRecordedSession as Vt, thrownRunFailureRecord as W, isEasAuthFailureText as Wn, readInstalledEasCliVersionAsync as Wt, recordRunStats as X, resolveRemote as Xn, LAUNCH_FATAL as Xt, recordCapacityWait as Y, resolveEasCliBin as Yn, LAUNCH_BUNDLING as Yt, statsProjectKey$1 as Z, uploadRemote as Zn, LAUNCH_UNVERIFIED as Zt, devServerStopRecord as _, devClientUrl as _n, scopedMemoryReport as _r, collectInventory as _t, inspectBudget as a, verifyAndroidReleaseLaunch as an, ownedSessionName as ar, previewScopedEmptying as at, requestDevServerStop as b, hasMetroReverse as bn, attributeMachineUsage as br, collectParkedAvds as bt, readVolumeSpace as c, APP_READINESS_TIMEOUT_MS as cn, WATCHMAN_KIND as cr, trimCaches as ct, trimmableCaches as d, INSTALL_ERROR as dn, memoryCacheKind as dr, deleteGradleVersions as dt, isBundleProof as en, remoteCommand as er, includesParkedDevices as et, stopOwnedMetro as f, IOS_DEV_MENU_OFF_DEFAULTS_PLIST as fn, memoryLines as fr, gradleVersionLines as ft, devServerStopLevel as g, clearOtherUserApps as gn, reclaimMemory as gr, getMachineCacheReport as gt, describeMetroLastStop as h, appProcessFromPid as hn, memoryWorkPending as hr, waitForGradleExit as ht, enforceBudget as i, unverifiedLaunchLines as in, easCliUpgradeRemedy as ir, planCacheEmptying as it, ACTIVE_BUILD_KEY as j, pickDevClientScheme as jn, findStaleProjectDevices as jt, shutDownIdleDevices as k, reverseMetroPorts as kn, findOrphanedDevices as kt, readVolumeSpaceAsync as l, ADB_INSTALL_TIMEOUT_MS as ln, collectMemoryReport as lr, collectGradleVersions as lt, describeDevServerStop as m, androidDevClientUrl as mn, memorySweepIsScoped as mr, includesGradleVersions as mt, budgetLine as n, readMetroRecords as nn, MIN_EAS_CLI_SIMULATOR_VERSION as nr, includesWorkspaceOutputs as nt, machineNumber as o, verifyLaunch as on, parseArchiveSelector as or, selectCaches as ot, stopOwnedMetroForReset as p, androidAppProcess as pn, memoryScope as pr, gradleVersionsPending as pt, readStats$1 as q, providerFromConfig as qn, resolveRemoteContext as qt, cacheLabel as r, unattributedLaunchLines as rn, easCliSupport as rr, isWorkspacesScope as rt, peekBudget as s, verifyReleaseLaunch as sn, GRADLE_DAEMONS_KIND as sr, selectsBeyondCaches as st, budgetGate as t, readCollectorRecords as tn, MIN_EAS_CLI_DEVICE_VERSION as tr, includesRecordings as tt, resolveBudget as u, DEFAULT_METRO_PORT as un, inspectWatchmanMemory as ur, deleteGradleVersion as ut, logVanishedSupervisor as v, deviceShellArg as vn, stopIdleGradleDaemons as vr, DEVICE_LIST_TIMEOUT_MS$1 as vt, collectIdleDevicesAsync as w, iosAppProcess as wn, sizeCaches as wr, deleteProjectDevices as wt, vanishedSupervisorMessage as x, installAndroidApp as xn, readFootprints as xr, collectParkedSims as xt, metroLastStop as y, ensureMetroReverse as yn, phase as yr, collectDeviceLeases as yt, recordBuildPhase as z, RESOLVE_TIMEOUT_MS as zn, binOnPath as zt };
9387
+ export { includesArchives as $, bundleInvocation as $n, RELEASE_VERIFY_WAIT_MS as $t, workspaceBuildInProgress as A, reverseMetroPorts as An, findStaleDeviceRecords as At, recordFinishedBuild as B, RESOLVE_TIMEOUT_MS as Bn, bundleEntryPoint as Bt, collectIdleDevices as C, installConflictKind as Cn, discoverCaches as Cr, deleteParkedSims as Ct, idleDeviceLines as D, launchAndroidReleaseApp as Dn, deviceSweepIsScoped as Dt, collectOwnedDeviceActivityAsync as E, launchAndroidApp as En, describeUnverifiableDevices as Et, buildStatusLine as F, readRemoteSimulatorArch as Fn, deleteEasSessions as Ft, createRunRecorder as G, isEasAuthFailureText as Gn, remoteAndroidDeps as Gt, startBuildProgress as H, cacheLevel as Hn, ensureMetroReachable as Ht, bundlingActivity as I, gateMetroOrigin as In, describeError as It, recordCapacityRefusal as J, providerFromConfig as Jn, withEasProjectLock as Jt, readRunEstimates as K, loadProjectProvider as Kn, remoteIosDeps as Kt, estimateBuild as L, exitAfterFlush as Ln, withRemoteSessionGcLocks as Lt, NO_BUILD_PROGRESS as M, pickDevClientScheme as Mn, unverifiedDeviceCommand as Mt, activeBuildState as N, readBundleSchemes as Nn, withAndroidAvdSizes as Nt, parseIdleDuration as O, launchIosApp as On, eraseParkedDevices as Ot, buildReport as P, schemesFromInfoPlist as Pn, collectEasSessionSweep as Pt, emptyCaches as Q, uploadRemote as Qn, MANIFEST_VERIFY_TIMEOUT_MS as Qt, parseActiveBuild as R, processContext as Rn, REMOTE_SESSION_ERROR as Rt, withdrawDevServerStopRequest as S, installAndroidApp as Sn, readFootprints as Sr, deleteParkedAvds as St, collectOwnedDeviceActivity as T, iosAppProcess as Tn, sizeCaches as Tr, describeParkedSims as Tt, tapBuildLog as U, checkEasAuth as Un, ensureRemoteBootOwned as Ut, runFailureRecord as V, UPLOAD_TIMEOUT_MS as Vn, endRecordedSession as Vt, thrownRunFailureRecord as W, easAuthNote as Wn, readInstalledEasCliVersionAsync as Wt, recordRunStats as X, resolveEasCliBin as Xn, LAUNCH_FATAL as Xt, recordCapacityWait as Y, readProjectConfig as Yn, LAUNCH_BUNDLING as Yt, statsProjectKey$1 as Z, resolveRemote as Zn, LAUNCH_UNVERIFIED as Zt, devServerStopRecord as _, clearOtherUserApps as _n, reclaimMemory as _r, collectInventory as _t, inspectBudget as a, unverifiedLaunchLines as an, easCliUpgradeRemedy as ar, previewScopedEmptying as at, requestDevServerStop as b, ensureMetroReverse as bn, phase as br, collectParkedAvds as bt, readVolumeSpace as c, verifyReleaseLaunch as cn, GRADLE_DAEMONS_KIND as cr, trimCaches as ct, trimmableCaches as d, DEFAULT_METRO_PORT as dn, inspectWatchmanMemory as dr, deleteGradleVersions as dt, VERIFY_TIMEOUT_MS as en, remoteCliInvocation as er, includesParkedDevices as et, stopOwnedMetro as f, INSTALL_ERROR as fn, memoryCacheKind as fr, gradleVersionLines as ft, devServerStopLevel as g, appProcessFromPid as gn, memoryWorkPending as gr, getMachineCacheReport as gt, describeMetroLastStop as h, androidDevClientUrl as hn, memorySweepIsScoped as hr, waitForGradleExit as ht, enforceBudget as i, unattributedLaunchLines as in, easCliSupport as ir, planCacheEmptying as it, ACTIVE_BUILD_KEY as j, writeDebugHttpHost as jn, findStaleProjectDevices as jt, shutDownIdleDevices as k, restartedAppNote as kn, findOrphanedDevices as kt, readVolumeSpaceAsync as l, APP_READINESS_TIMEOUT_MS as ln, WATCHMAN_KIND as lr, collectGradleVersions as lt, describeDevServerStop as m, androidAppProcess as mn, memoryScope as mr, includesGradleVersions as mt, budgetLine as n, readCollectorRecords as nn, MIN_EAS_CLI_DEVICE_VERSION as nr, includesWorkspaceOutputs as nt, machineNumber as o, verifyAndroidReleaseLaunch as on, ownedSessionName as or, selectCaches as ot, stopOwnedMetroForReset as p, IOS_DEV_MENU_OFF_DEFAULTS_PLIST as pn, memoryLines as pr, gradleVersionsPending as pt, readStats$1 as q, ownerFromConfig as qn, resolveRemoteContext as qt, cacheLabel as r, readMetroRecords as rn, MIN_EAS_CLI_SIMULATOR_VERSION as rr, isWorkspacesScope as rt, peekBudget as s, verifyLaunch as sn, parseArchiveSelector as sr, selectsBeyondCaches as st, budgetGate as t, isBundleProof as tn, remoteCommand as tr, includesRecordings as tt, resolveBudget as u, ADB_INSTALL_TIMEOUT_MS as un, collectMemoryReport as ur, deleteGradleVersion as ut, logVanishedSupervisor as v, devClientUrl as vn, scopedMemoryReport as vr, DEVICE_LIST_TIMEOUT_MS$1 as vt, collectIdleDevicesAsync as w, installIosApp as wn, pruneCache as wr, deleteProjectDevices as wt, vanishedSupervisorMessage as x, hasMetroReverse as xn, attributeMachineUsage as xr, collectParkedSims as xt, metroLastStop as y, deviceShellArg as yn, stopIdleGradleDaemons as yr, collectDeviceLeases as yt, recordBuildPhase as z, runProcessOperation as zn, binOnPath as zt };
@@ -1,29 +1,29 @@
1
1
  import { c as throwIfCancelled, s as cancelledError, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir, m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
3
3
  import { E as upsertProject, O as withConfigLockAsync, p as getProject, u as getConcurrencyLimits } from "./config-BZhXY15H.mjs";
4
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
5
- import { a as recordWorkspaceUseAsync } from "./workspace-state-CeBpIZgr.mjs";
6
- import { G as resolveCacheProviderConfig, J as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY } from "./settings-RKwY33wv.mjs";
7
- import { f as projectRegistry, v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
4
+ import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
5
+ import { a as recordWorkspaceUseAsync } from "./workspace-state-CPSp3mav.mjs";
6
+ import { K as resolveCacheProviderConfig, Y as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY } from "./settings-B5tCoq9N.mjs";
7
+ import { f as projectRegistry, v as detectIsExpo } from "./project-BiC68mIp.mjs";
8
8
  import { s as workspaceShareURL } from "./stim-desktop-DS0mzR8U.mjs";
9
- import { k as hostSystemImageArch } from "./android-882m4hxX.mjs";
9
+ import { k as hostSystemImageArch } from "./android-Cjcj8MCw.mjs";
10
10
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
11
- import { B as recordFinishedBuild, G as createRunRecorder, H as startBuildProgress, Hn as checkEasAuth, K as readRunEstimates, U as tapBuildLog, X as recordRunStats, Xn as resolveRemote, Z as statsProjectKey, Zn as uploadRemote } from "./budget-dPGuhNai.mjs";
12
- import { d as runCancellationSignal, f as withNativeBuildRun } from "./native-run-BmH7U8pr.mjs";
13
- import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-CSV2Orf4.mjs";
14
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-Dq3ZcdD8.mjs";
15
- import { _ as providerUploadOutcome } from "./build-cache-HFUQ9eLz.mjs";
16
- import { m as listIosRuntimes } from "./ios-CVUFFZ6C.mjs";
17
- import { d as optimizationBuildProfile, l as artifactCachePolicy } from "./errors-ccaPc4ox.mjs";
18
- import { p as readBundleId } from "./xcode-DHu41qQ4.mjs";
19
- import { S as setRemoteLogSink } from "./client-18-ZowoT.mjs";
20
- import { c as resolveBuildPlacement } from "./selection-BLtvaqxc.mjs";
21
- import { c as iosProjectPathError, g as resolveIosBuildSetup, m as resolveConfiguration, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-B1W-hmC2.mjs";
22
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DgtJkzIa.mjs";
23
- import { t as acquireAndroidArtifact } from "./artifact-BR5VNArK.mjs";
24
- import { a as persistLastBuild, l as resolveAndroidBuildPlan, n as finishAndroidUpload } from "./result-DqBrb12U.mjs";
25
- import { a as lastBuildRecord } from "./ios-project-KYqeJURj.mjs";
26
- import { t as acquireIosArtifact } from "./artifact-Bdt_n9Jc.mjs";
11
+ import { B as recordFinishedBuild, G as createRunRecorder, H as startBuildProgress, K as readRunEstimates, Qn as uploadRemote, U as tapBuildLog, Un as checkEasAuth, X as recordRunStats, Z as statsProjectKey, Zn as resolveRemote } from "./budget-HyShrIpL.mjs";
12
+ import { d as runCancellationSignal, f as withNativeBuildRun } from "./native-run-D5OJsGwA.mjs";
13
+ import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-C9w4aeXF.mjs";
14
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-BpjwrQXU.mjs";
15
+ import { _ as providerUploadOutcome, x as storedAppId } from "./build-cache-CKCzxzxA.mjs";
16
+ import { m as listIosRuntimes } from "./ios-BQzvJlzw.mjs";
17
+ import { d as optimizationBuildProfile, l as artifactCachePolicy } from "./errors-DHm_U5gv.mjs";
18
+ import { p as readBundleId } from "./xcode-CiIIDnuD.mjs";
19
+ import { S as setRemoteLogSink } from "./client-BQsmyp_-.mjs";
20
+ import { c as resolveBuildPlacement } from "./selection-D5cxEl3t.mjs";
21
+ import { c as iosProjectPathError, g as resolveIosBuildSetup, m as resolveConfiguration, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-qKcbgmI5.mjs";
22
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-B9w_Qyz3.mjs";
23
+ import { t as acquireAndroidArtifact } from "./artifact-Co8zixVx.mjs";
24
+ import { a as persistLastBuild, l as resolveAndroidBuildPlan, n as finishAndroidUpload } from "./result-CR2vk2cj.mjs";
25
+ import { a as lastBuildRecord } from "./ios-project-DCUDo06I.mjs";
26
+ import { t as acquireIosArtifact } from "./artifact-DN8JNwqS.mjs";
27
27
  import { constants, promises } from "node:fs";
28
28
  import { basename, join } from "node:path";
29
29
  import { hostSimulatorArch } from "@stim-cli/core";
@@ -182,6 +182,7 @@ async function buildAndroidOperation(context, root, options, { artifactScope, ca
182
182
  resolveRemoteBuild: resolveRemote,
183
183
  uploadRemoteBuild: uploadRemote,
184
184
  loadCacheProviderModule: loadCacheProvider,
185
+ storedAppId,
185
186
  acquireSlot: acquireBuildSlot,
186
187
  releaseSlot: releaseBuildSlot,
187
188
  now: Date.now
@@ -1,7 +1,7 @@
1
1
  import { c as throwIfCancelled, t as getExecutor, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
2
  import { i as sharedBuildCache } from "./paths-DQtTgsBf.mjs";
3
3
  import { a as killOnAbort, c as gitQuiet, o as git, r as childEnvironment, s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
4
- import { m as defaultAndroidLayout } from "./settings-RKwY33wv.mjs";
4
+ import { m as defaultAndroidLayout } from "./settings-B5tCoq9N.mjs";
5
5
  import { r as register } from "./cache-manifest-BPXRONJz.mjs";
6
6
  import { createHash } from "node:crypto";
7
7
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
@@ -463,6 +463,12 @@ async function storeBuild(platform, key, buildPath, rootOrOptions = {}) {
463
463
  if (options.assetManifest) try {
464
464
  await writeFile(join$1(staging, ASSET_MANIFEST_FILE), JSON.stringify(options.assetManifest));
465
465
  } catch {}
466
+ if (options.readAppId) try {
467
+ const appId = await options.readAppId(buildPath);
468
+ if (appId) await writeFile(join$1(staging, APP_ID_FILE), JSON.stringify({ appId }));
469
+ } catch {
470
+ throwIfCancelled(signal, "build cache copy");
471
+ }
466
472
  }
467
473
  }));
468
474
  } catch (error) {
@@ -496,12 +502,13 @@ function prepareProviderDownloadDir(dir, registeredBy) {
496
502
  });
497
503
  } catch {}
498
504
  }
499
- function filesystemBuildCapability({ root, context, sources, assetManifest, resolve = resolveBuild, store = storeBuild } = {}) {
505
+ function filesystemBuildCapability({ root, context, sources, assetManifest, readAppId, resolve = resolveBuild, store = storeBuild } = {}) {
500
506
  const stored = {
501
507
  ...context === void 0 ? {} : { context },
502
508
  ...root === void 0 ? {} : { root },
503
509
  ...sources === void 0 ? {} : { sources },
504
- ...assetManifest === void 0 ? {} : { assetManifest }
510
+ ...assetManifest === void 0 ? {} : { assetManifest },
511
+ ...readAppId === void 0 ? {} : { readAppId }
505
512
  };
506
513
  return {
507
514
  resolve: ({ platform, key }) => root === void 0 ? resolve(platform, key) : resolve(platform, key, root),
@@ -529,6 +536,7 @@ function providerUploadOutcome(result, name, env) {
529
536
  };
530
537
  }
531
538
  const SOURCES_FILE = "fingerprint-sources.json";
539
+ const APP_ID_FILE = "app-id.json";
532
540
  function withoutContents(source) {
533
541
  return source.type === "contents" ? {
534
542
  ...source,
@@ -543,6 +551,16 @@ function storedSources(platform, key, root = sharedBuildCache()) {
543
551
  return null;
544
552
  }
545
553
  }
554
+ /** The bundle id or Android package read from the entry's artifact when it was stored, or null for older entries. */
555
+ function storedAppId(platform, key, root = sharedBuildCache()) {
556
+ try {
557
+ const parsed = JSON.parse(readFileSync$1(join$1(entryDir(platform, key, root), APP_ID_FILE), "utf-8"));
558
+ if (parsed && typeof parsed === "object" && "appId" in parsed && typeof parsed.appId === "string" && parsed.appId) return parsed.appId;
559
+ return null;
560
+ } catch {
561
+ return null;
562
+ }
563
+ }
546
564
  function storedAssetManifest(platform, key, root = sharedBuildCache()) {
547
565
  try {
548
566
  return parseAssetManifest(readFileSync$1(join$1(entryDir(platform, key, root), ASSET_MANIFEST_FILE), "utf-8"));
@@ -732,4 +750,4 @@ function fingerprintDiffRecord({ changed, previousHash, hash }) {
732
750
  };
733
751
  }
734
752
  //#endregion
735
- export { trackedFingerprintPaths as C, captureAssetManifest as D, assetDiffReason as E, compareAssetManifests as O, storedSources as S, untrackedNativeFiles as T, providerUploadOutcome as _, configInputsChanged as a, storeBuild as b, expoConfigContents as c, fingerprintProject as d, gitignoredFingerprintInputs as f, providerDownloadPath as g, prepareProviderDownloadDir as h, compareSourceLists as i, readAssetManifest as k, filesystemBuildCapability as l, inputsChangedDuringBuild as m, buildCacheKey as n, diffFingerprintSources as o, ignoredFingerprintPaths as p, changedDuringBuildLine as r, entryDir as s, artifactIn as t, fingerprintDiffRecord as u, refingerprintAfterMutation as v, untrackedMissLine as w, storedAssetManifest as x, resolveBuild as y };
753
+ export { readAssetManifest as A, storedSources as C, assetDiffReason as D, untrackedNativeFiles as E, captureAssetManifest as O, storedAssetManifest as S, untrackedMissLine as T, providerUploadOutcome as _, configInputsChanged as a, storeBuild as b, expoConfigContents as c, fingerprintProject as d, gitignoredFingerprintInputs as f, providerDownloadPath as g, prepareProviderDownloadDir as h, compareSourceLists as i, compareAssetManifests as k, filesystemBuildCapability as l, inputsChangedDuringBuild as m, buildCacheKey as n, diffFingerprintSources as o, ignoredFingerprintPaths as p, changedDuringBuildLine as r, entryDir as s, artifactIn as t, fingerprintDiffRecord as u, refingerprintAfterMutation as v, trackedFingerprintPaths as w, storedAppId as x, resolveBuild as y };
@@ -1,9 +1,9 @@
1
1
  import { T as trackReportResource } from "./exec-VFRpu1iA.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash, u as plural } from "./command-output-DxC0k2rk.mjs";
3
- import { Ht as makeTemporaryDirectory, Wt as removeTemporaryEntryAsync } from "./settings-RKwY33wv.mjs";
4
- import { L as estimateBuild, Un as easAuthNote, q as readStats } from "./budget-dPGuhNai.mjs";
5
- import { s as entryDir, t as artifactIn } from "./build-cache-HFUQ9eLz.mjs";
6
- import { l as predictBuildMiss, o as staleNativeDirRefusal } from "./prebuild-DmVCf5xb.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash, u as plural } from "./command-output-BBvS1H6v.mjs";
3
+ import { Gt as removeTemporaryEntryAsync, Ut as makeTemporaryDirectory } from "./settings-B5tCoq9N.mjs";
4
+ import { L as estimateBuild, Wn as easAuthNote, q as readStats } from "./budget-HyShrIpL.mjs";
5
+ import { s as entryDir, t as artifactIn } from "./build-cache-CKCzxzxA.mjs";
6
+ import { l as predictBuildMiss, o as staleNativeDirRefusal } from "./prebuild-JUaqOLpc.mjs";
7
7
  import chalk from "chalk";
8
8
  import { PROVIDER_LOAD_TIMEOUT_ENV, PROVIDER_LOAD_TIMEOUT_MS, buildResolveTimeoutMs, resolveTieredBuild, timeoutFromEnv } from "@stim-cli/cache";
9
9
  //#region src/commands/build-plan.ts
@@ -1,10 +1,10 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { a as sharedCcache, m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
3
3
  import { _ as loadConfig } from "./config-BZhXY15H.mjs";
4
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
5
- import { m as defaultAndroidLayout } from "./settings-RKwY33wv.mjs";
4
+ import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
5
+ import { m as defaultAndroidLayout } from "./settings-B5tCoq9N.mjs";
6
6
  import { r as register } from "./cache-manifest-BPXRONJz.mjs";
7
- import { o as machineNumber } from "./budget-dPGuhNai.mjs";
7
+ import { o as machineNumber } from "./budget-HyShrIpL.mjs";
8
8
  import { readFileSync, realpathSync } from "node:fs";
9
9
  import { isAbsolute, join, relative } from "node:path";
10
10
  import chalk from "chalk";
@@ -5,23 +5,23 @@ import { runId } from "@stim-cli/core/state";
5
5
  import { Command } from "commander";
6
6
  //#region bin/cli.ts
7
7
  const commands = /* @__PURE__ */ new Map([
8
- ["doctor", () => import("./doctor-BZ6oxNum.mjs")],
9
- ["worktree", () => import("./worktree-DEDUzO_L.mjs")],
10
- ["start", () => import("./start-Bmg_qmHi.mjs")],
11
- ["ports", () => import("./ports-D-E_OiAO.mjs")],
12
- ["stop", () => import("./stop-BFu7X_Do.mjs")],
13
- ["ios", () => import("./ios-BItP6lkn.mjs")],
14
- ["android", () => import("./android-DcztblCT.mjs")],
15
- ["web", () => import("./web-BdOFlTJr.mjs")],
16
- ["macos", () => import("./macos-B3BveDrU.mjs")],
17
- ["reload", () => import("./reload-Ck9RJeSq.mjs")],
18
- ["device", () => import("./device-4RUugw5X.mjs")],
19
- ["logs", () => import("./logs-ovlU7m7N.mjs")],
20
- ["settings", () => import("./settings-kkt0vP4w.mjs")],
21
- ["status", () => import("./status-Pw-807f0.mjs")],
22
- ["stats", () => import("./stats-B-ckuiUg.mjs")],
23
- ["gc", () => import("./gc-DDWEAj0w.mjs")],
24
- ["guide", () => import("./guide-Bggftwc5.mjs")]
8
+ ["doctor", () => import("./doctor-A_Nr_fDe.mjs")],
9
+ ["worktree", () => import("./worktree-Ct9Gk3KL.mjs")],
10
+ ["start", () => import("./start-C1JLjkNw.mjs")],
11
+ ["ports", () => import("./ports-DtS1Amb0.mjs")],
12
+ ["stop", () => import("./stop-Br7LKxBE.mjs")],
13
+ ["ios", () => import("./ios-Dvt97HgQ.mjs")],
14
+ ["android", () => import("./android-CNZgRC-4.mjs")],
15
+ ["web", () => import("./web-DS4UDWvf.mjs")],
16
+ ["macos", () => import("./macos-CcUlJPMu.mjs")],
17
+ ["reload", () => import("./reload-Beftw2X3.mjs")],
18
+ ["device", () => import("./device-F5-4z9ef.mjs")],
19
+ ["logs", () => import("./logs-Crs9y34Z.mjs")],
20
+ ["settings", () => import("./settings-DzH9mGQZ.mjs")],
21
+ ["status", () => import("./status-cNw6i0_t.mjs")],
22
+ ["stats", () => import("./stats-CP7STzZw.mjs")],
23
+ ["gc", () => import("./gc-eaz403W6.mjs")],
24
+ ["guide", () => import("./guide-DR0K0xW9.mjs")]
25
25
  ]);
26
26
  const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
27
27
  const program = new Command();
package/dist/cli.mjs CHANGED
@@ -4,6 +4,6 @@ const encode = (version) => version.split(".", 3).reduce((sum, part) => sum * 1e
4
4
  if (encode(process.versions.node) < encode("22.12.0")) {
5
5
  process.stderr.write(`STIM_NODE_UNSUPPORTED: Stim needs Node 22.12.0 or later; this is Node ${process.versions.node} at ${process.execPath}. To run Stim where a project pins an older Node, see https://stim.appandflow.com/docs/requirements#older-node-pins\n`);
6
6
  process.exitCode = 1;
7
- } else import("./cli-xqAidP7O.mjs");
7
+ } else import("./cli-C4w607Pz.mjs");
8
8
  //#endregion
9
9
  export {};
@@ -2,14 +2,14 @@ import { C as reportSignal, E as debugLog, b as operationState, c as throwIfCanc
2
2
  import { Q as openAuthenticated, _ as loadConfig$1, it as sayHello, rt as resolveEndpoint } from "./config-BZhXY15H.mjs";
3
3
  import { o as git, s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
4
4
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
5
- import { Q as emptyCaches, Sr as discoverCaches, it as planCacheEmptying } from "./budget-dPGuhNai.mjs";
5
+ import { Cr as discoverCaches, Q as emptyCaches, it as planCacheEmptying } from "./budget-HyShrIpL.mjs";
6
6
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
7
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
8
- import { n as CCACHE_UNAVAILABLE, t as CCACHE_NOT_RUN } from "./ccache-CCn1S6qG.mjs";
9
- import { n as COMPILATION_CACHE_UNAVAILABLE, t as COMPILATION_CACHE_NOT_RUN } from "./xcode-DHu41qQ4.mjs";
7
+ import { d as runCancellationSignal } from "./native-run-D5OJsGwA.mjs";
8
+ import { n as CCACHE_UNAVAILABLE, t as CCACHE_NOT_RUN } from "./ccache-h1FKhZeg.mjs";
9
+ import { n as COMPILATION_CACHE_UNAVAILABLE, t as COMPILATION_CACHE_NOT_RUN } from "./xcode-CiIIDnuD.mjs";
10
10
  import { t as resolveMaintenanceSettings } from "./settings-Djl-mpjX.mjs";
11
- import { a as iosToolchainAsync, d as toolchainMismatches, f as workerToolchain, g as readRubyVersion } from "./toolchain-D3bmRMia.mjs";
12
- import { i as namedBuildMachine, t as OffloadRefusal, u as pairedMachines } from "./selection-BLtvaqxc.mjs";
11
+ import { a as iosToolchainAsync, d as toolchainMismatches, f as workerToolchain, g as readRubyVersion } from "./toolchain-VzLJzZ7O.mjs";
12
+ import { i as namedBuildMachine, t as OffloadRefusal, u as pairedMachines } from "./selection-D5cxEl3t.mjs";
13
13
  import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
14
14
  import { a as sourceManifest, i as nativeTransferManifest, n as gitVisiblePaths, r as nativeFileDigest, t as checkNativeTransferMembership } from "./native-source-D-4Dh4JU.mjs";
15
15
  import { createHash, webcrypto } from "node:crypto";
@@ -387,9 +387,10 @@ async function reactNativeArtifactToolchain(platform, root, iosDirectory) {
387
387
  os: process.platform
388
388
  } : null;
389
389
  }
390
- const { stimBuild, os, arch, jdk, androidSdk } = workerToolchain(null, "gradle");
391
- return stimBuild && jdk && androidSdk ? {
390
+ const { stimBuild, compat, os, arch, jdk, androidSdk } = workerToolchain(null, "gradle");
391
+ return stimBuild && compat !== void 0 && jdk && androidSdk ? {
392
392
  stimBuild,
393
+ compat,
393
394
  os,
394
395
  arch,
395
396
  jdk,
@@ -970,8 +971,8 @@ async function probeMachine(credential, identity, { connectMs = CONNECT_TIMEOUT_
970
971
  ...identity.dependencies && connection.supports("build-dependency-cache") ? { dependencies: identity.dependencies } : {},
971
972
  ...native ? { native } : identity.rubyVersion ? { rubyVersion: identity.rubyVersion } : {},
972
973
  ...native === "xcode" && identity.artifact && connection.supports("build-artifact-cache") ? { artifact: identity.artifact } : {},
973
- ...identity.swiftpmArtifact && connection.supports("swiftpm-peer-cache") ? { swiftpmArtifact: identity.swiftpmArtifact } : {},
974
- ...identity.reactNativeArtifact && connection.supports("react-native-peer-cache") ? { reactNativeArtifact: identity.reactNativeArtifact } : {},
974
+ ...identity.swiftpmArtifact && queriesPeerCache(connection, "swiftpm-peer-cache") ? { swiftpmArtifact: identity.swiftpmArtifact } : {},
975
+ ...identity.reactNativeArtifact && queriesPeerCache(connection, "react-native-peer-cache") ? { reactNativeArtifact: identity.reactNativeArtifact } : {},
975
976
  ...native === "gradle" && identity.gradleArtifact && connection.supports("native-gradle-peer-cache") ? { gradleArtifact: identity.gradleArtifact } : {}
976
977
  }, offerMs);
977
978
  const failure = replyError(reply);
@@ -993,7 +994,7 @@ async function probeMachine(credential, identity, { connectMs = CONNECT_TIMEOUT_
993
994
  return {
994
995
  credential,
995
996
  connection,
996
- offer: identity.swiftpmArtifact && !connection.supports("swiftpm-peer-cache") || identity.reactNativeArtifact && !connection.supports("react-native-peer-cache") || native === "gradle" && (!identity.gradleArtifact || !connection.supports("native-gradle-peer-cache")) ? {
997
+ offer: identity.swiftpmArtifact && !queriesPeerCache(connection, "swiftpm-peer-cache") || identity.reactNativeArtifact && !queriesPeerCache(connection, "react-native-peer-cache") || native === "gradle" && (!identity.gradleArtifact || !connection.supports("native-gradle-peer-cache")) ? {
997
998
  ...offer,
998
999
  artifact: null
999
1000
  } : offer
@@ -1022,7 +1023,7 @@ async function chooseBuildMachine({ projectRoot, target, mode, here, note, machi
1022
1023
  const swiftpmQuery = swiftpmArtifact?.artifactInputs ? swiftpmArtifactQuery({
1023
1024
  project: identity.project,
1024
1025
  sourceDigest: manifestDigest(await sourceManifest(identity.repoRoot, true, runCancellationSignal(ambientContext()) ?? ambientContext()?.signal)),
1025
- stimBuild: target.local.stimBuild,
1026
+ compat: target.local.compat,
1026
1027
  inputs: swiftpmArtifact.artifactInputs,
1027
1028
  build: {
1028
1029
  product: swiftpmArtifact.product,
@@ -1085,6 +1086,13 @@ async function chooseBuildMachine({ projectRoot, target, mode, here, note, machi
1085
1086
  ...swiftpmQuery ? { swiftpmArtifact: swiftpmQuery } : {}
1086
1087
  };
1087
1088
  }
1089
+ function startCompat(choice) {
1090
+ return choice.connection.supports("build-compat") ? { compat: choice.target.local.compat } : {};
1091
+ }
1092
+ /** Peer artifact queries carry `compat`, which a stim-server without `build-compat` refuses. */
1093
+ function queriesPeerCache(connection, feature) {
1094
+ return connection.supports(feature) && connection.supports("build-compat");
1095
+ }
1088
1096
  function macosBuildParameters(request, peerCache) {
1089
1097
  return {
1090
1098
  ...request.cacheArtifact === true && peerCache ? { cacheArtifact: true } : {},
@@ -1120,13 +1128,13 @@ async function peerArtifact(choice, request, fingerprint) {
1120
1128
  assetCatalog: request.assetCatalog ?? null
1121
1129
  }
1122
1130
  }))) throw new Error("The SwiftPM artifact query does not match the build request.");
1123
- if (!choice.connection.supports("swiftpm-peer-cache") || manifestDigest(await sourceManifest(choice.identity.repoRoot, true, runCancellationSignal(ambientContext()) ?? ambientContext()?.signal)) !== swiftpm.sourceDigest) return null;
1131
+ if (!queriesPeerCache(choice.connection, "swiftpm-peer-cache") || manifestDigest(await sourceManifest(choice.identity.repoRoot, true, runCancellationSignal(ambientContext()) ?? ambientContext()?.signal)) !== swiftpm.sourceDigest) return null;
1124
1132
  return matchingArtifact(choice.offer, "swiftpm");
1125
1133
  }
1126
1134
  const reactNative = choice.reactNativeArtifact;
1127
1135
  if (reactNative) {
1128
1136
  if (typeof fingerprint !== "string" || !isDeepStrictEqual(reactNative, reactNativeBuildQuery(request, fingerprint, choice.identity.project, choice.target.local))) throw new Error("The React Native artifact query does not match the build request.");
1129
- return choice.connection.supports("react-native-peer-cache") ? matchingArtifact(choice.offer, `react-native-${reactNative.platform}`) : null;
1137
+ return queriesPeerCache(choice.connection, "react-native-peer-cache") ? matchingArtifact(choice.offer, `react-native-${reactNative.platform}`) : null;
1130
1138
  }
1131
1139
  const query = choice.gradleArtifact;
1132
1140
  if (query) {
@@ -1550,18 +1558,19 @@ async function offloadBuild(input) {
1550
1558
  ...choice.connection.supports("native-gradle-artifact-cache") ? { cache: native.cache } : {}
1551
1559
  }
1552
1560
  } } : {},
1553
- ...request.platform === "macos" ? macosBuildParameters(request, choice.connection.supports("swiftpm-peer-cache")) : {
1561
+ ...request.platform === "macos" ? macosBuildParameters(request, queriesPeerCache(choice.connection, "swiftpm-peer-cache")) : {
1554
1562
  configuration: request.platform === "ios" ? request.configuration : null,
1555
1563
  scheme: request.platform === "ios" ? request.scheme : null,
1556
1564
  iosProjectPath: request.platform === "ios" ? request.iosProjectPath ?? null : null,
1557
1565
  runtime: request.platform === "ios" ? request.runtime : null,
1558
1566
  packageName: packageName(join(identity.repoRoot, identity.project)),
1559
1567
  isExpo: request.isExpo,
1560
- ...!native && request.cacheArtifact === true && choice.connection.supports("react-native-peer-cache") ? { cacheArtifact: true } : {},
1568
+ ...!native && request.cacheArtifact === true && queriesPeerCache(choice.connection, "react-native-peer-cache") ? { cacheArtifact: true } : {},
1561
1569
  optimizations: request.platform === "ios" && isJsonObject(request.optimizations) ? request.optimizations : null,
1562
1570
  ...request.platform === "android" ? { android: request.android } : {}
1563
1571
  },
1564
- stimBuild: choice.target.local.stimBuild
1572
+ stimBuild: choice.target.local.stimBuild,
1573
+ ...startCompat(choice)
1565
1574
  });
1566
1575
  checkCancelled();
1567
1576
  if ("result" in reply) {
@@ -2,10 +2,10 @@ import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
2
2
  import { m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
3
3
  import { V as deviceSlotKey, q as validateDeviceSlot } from "./config-BZhXY15H.mjs";
4
4
  import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
5
- import { c as watchAppPid, i as parseLogcatLine, o as startAndroidLogcat, s as waitForAppPid, t as androidClockOffset } from "./android-CX5IcRuf.mjs";
5
+ import { c as watchAppPid, i as parseLogcatLine, o as startAndroidLogcat, s as waitForAppPid, t as androidClockOffset } from "./android-saBeB4lr.mjs";
6
6
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
7
7
  import { a as startIosDeviceConsole, i as parseDeviceConsoleLine } from "./ios-device-B6HK951C.mjs";
8
- import { a as unregisterCollector, i as registerCollector, r as readCollectors, t as collectorProcessTitle } from "./ownership-DxlZGDcV.mjs";
8
+ import { a as unregisterCollector, i as registerCollector, r as readCollectors, t as collectorProcessTitle } from "./ownership-jxxz-19m.mjs";
9
9
  import { n as parseLogStreamLine, r as startIosLogStream, t as appNameFromBundleId } from "./ios-ENC4sRPA.mjs";
10
10
  import { existsSync } from "node:fs";
11
11
  import { isAbsolute, join, resolve } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
2
- import { t as NO_PROJECT_REFUSAL } from "./project-Dz-hWkb-.mjs";
2
+ import { t as NO_PROJECT_REFUSAL } from "./project-BiC68mIp.mjs";
3
3
  import { quotedPath as quotedPath$1 } from "@stim-cli/core";
4
4
  import chalk from "chalk";
5
5
  //#region src/diagnostics/launch-error-preview.ts
@@ -1,5 +1,5 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { Mt as repoRoot } from "./settings-RKwY33wv.mjs";
2
+ import { Nt as repoRoot } from "./settings-B5tCoq9N.mjs";
3
3
  import { existsSync } from "node:fs";
4
4
  import { dirname, join, relative } from "node:path";
5
5
  //#region src/dependency-state.ts
@@ -1,5 +1,5 @@
1
- import { C as resolvePackageJson, b as isPackageResolvable } from "./project-Dz-hWkb-.mjs";
2
- import { Mn as readBundleSchemes, jn as pickDevClientScheme } from "./budget-dPGuhNai.mjs";
1
+ import { C as resolvePackageJson, b as isPackageResolvable } from "./project-BiC68mIp.mjs";
2
+ import { Mn as pickDevClientScheme, Nn as readBundleSchemes } from "./budget-HyShrIpL.mjs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { isJsonObject, readJsonObject } from "@stim-cli/core/state";
5
5
  //#region src/commands/dev-client.ts