stim 1.20.2 → 1.22.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 (231) hide show
  1. package/README.md +141 -8
  2. package/dist/acquire-artifact-Co2k4f7O.mjs +171 -0
  3. package/dist/act-DsuqEkiM.mjs +2801 -0
  4. package/dist/activity-CMLmzp7o.mjs +1397 -0
  5. package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-DUFaTMdd.mjs} +23 -67
  6. package/dist/{android-DCKZrNvV.mjs → android-ByRMUoiJ.mjs} +157 -93
  7. package/dist/{android-Mz_Inn3w.mjs → android-C7sVmyI9.mjs} +299 -116
  8. package/dist/{android-Dlzxshgp.mjs → android-DGkNqa_c.mjs} +5 -5
  9. package/dist/{android-HqP1_vB_.mjs → android-DR5lZ2Az.mjs} +2 -2
  10. package/dist/android-cas-compiler.mjs +2 -2
  11. package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-ngferVq2.mjs} +7 -6
  12. package/dist/android-project-BCAAmMwz.mjs +12 -0
  13. package/dist/android-project-DVWyCbWU.d.mts +391 -0
  14. package/dist/api.d.mts +810 -64
  15. package/dist/api.mjs +782 -1
  16. package/dist/{artifact-HSwkIWEQ.mjs → artifact-8EY8SAPw.mjs} +240 -213
  17. package/dist/{artifact-D3czlUvT.mjs → artifact-DJPy518Y.mjs} +203 -164
  18. package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
  19. package/dist/{browser-web-CA-F1GQo.mjs → browser-web-Bcv99PBM.mjs} +194 -64
  20. package/dist/budget-Cvwn54qV.mjs +9285 -0
  21. package/dist/{build-DYDbfkk5.mjs → build-CabC3G23.mjs} +153 -98
  22. package/dist/build-cache-Dv7RN200.mjs +602 -0
  23. package/dist/build-plan-DUC8Ka9y.mjs +248 -0
  24. package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DSeQjt-Q.mjs} +2 -2
  25. package/dist/cache-manifest.mjs +1 -1
  26. package/dist/{ccache-zdKiYQ3E.mjs → ccache-Btwc36-I.mjs} +10 -9
  27. package/dist/{cdp-Dq_ypAlJ.mjs → cdp-3fwICjzi.mjs} +18 -5
  28. package/dist/{chrome-BnzZMqsR.mjs → chrome-Bbw689-6.mjs} +7 -4
  29. package/dist/{cli-CLP3diBm.mjs → cli-CHZa9Lvk.mjs} +20 -20
  30. package/dist/cli.mjs +1 -1
  31. package/dist/client-OyRoEuSr.mjs +1577 -0
  32. package/dist/collector-run.d.mts +4 -40
  33. package/dist/collector-run.mjs +9 -8
  34. package/dist/{command-output-BTy8hZ0F.mjs → command-output-gwpm28fu.mjs} +1 -1
  35. package/dist/config-DlrsduwG.mjs +955 -0
  36. package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-x9rN6bhs.mjs} +14 -4
  37. package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-1I9KZT1Y.mjs} +20 -5
  38. package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
  39. package/dist/{dev-client-DAWVIGBu.mjs → dev-client-BSDR5h3F.mjs} +2 -2
  40. package/dist/{device-BECOiufl.mjs → device-B-L3Fbxy.mjs} +91 -34
  41. package/dist/device-DklWZLqb.mjs +1068 -0
  42. package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-DK5_EwRS.mjs} +42 -13
  43. package/dist/device-host-worker.mjs +76 -79
  44. package/dist/{device-ios-COSi6oS1.mjs → device-ios-DoB6KFCO.mjs} +77 -51
  45. package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-xJPQ_QQG.mjs} +14 -26
  46. package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-BMkdsefq.mjs} +5 -5
  47. package/dist/{doctor-kfMBnUw6.mjs → doctor-Bo7BXLux.mjs} +271 -320
  48. package/dist/{doctor-CB8oZKCk.mjs → doctor-D5_EzwfA.mjs} +186 -91
  49. package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
  50. package/dist/doctor-fingerprint.mjs +19 -0
  51. package/dist/doctor-thjWAV0z.mjs +2 -0
  52. package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-N2wDotwQ.mjs} +40 -21
  53. package/dist/{eas-build-JyfqyHfC.mjs → eas-build-CwknaQYj.mjs} +53 -20
  54. package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-CSgAulr5.mjs} +41 -214
  55. package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-DlY_serQ.mjs} +230 -11
  56. package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-DBWO2rxE.mjs} +172 -82
  57. package/dist/exec-DEoAhcze.mjs +858 -0
  58. package/dist/exec-DnYc4HGH.d.mts +78 -0
  59. package/dist/{gc-qWOMdnER.mjs → gc-CXxN-4SE.mjs} +1091 -1029
  60. package/dist/gc-DnNDQyaP.mjs +3 -0
  61. package/dist/{guide-G9cAbVAc.mjs → guide-Br0LEfKy.mjs} +1165 -297
  62. package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-B-9f-jkd.mjs} +10 -8
  63. package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DZAPrcro.mjs} +34 -19
  64. package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
  65. package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-FIRx9X2f.mjs} +77 -43
  66. package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-_awYSpfv.mjs} +35 -22
  67. package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-BdzE668-.mjs} +49 -27
  68. package/dist/idle-C4cZ757K.d.mts +24 -0
  69. package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DDg3SdvY.mjs} +11 -10
  70. package/dist/ios-CDvlmUs7.d.mts +24 -0
  71. package/dist/{ios-BwVCF7oA.mjs → ios-Ds1clbIt.mjs} +8 -8
  72. package/dist/{ios-device-D7pi2Sca.mjs → ios-device--h_-8ENa.mjs} +51 -26
  73. package/dist/{ios-device-B5veSDDQ.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
  74. package/dist/{ios-RkW4pnQf.mjs → ios-hcBpnEGk.mjs} +200 -93
  75. package/dist/{ios-Ce7bc7br.mjs → ios-pm4nL6By.mjs} +160 -108
  76. package/dist/{ios-project-K9hY_Jab.mjs → ios-project-CZhKODF3.mjs} +13 -13
  77. package/dist/ios-signing-BtAffm0A.mjs +489 -0
  78. package/dist/{ios-state-CBLe1xYw.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
  79. package/dist/{ios-nOLJGVdy.mjs → ios-xtlRHaeB.mjs} +1 -1
  80. package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Bwhh4S7V.mjs} +30 -25
  81. package/dist/{launch-C3qJ6Agb.mjs → launch-BjxemNpK.mjs} +85 -543
  82. package/dist/{launch-F4sOqAhB.mjs → launch-CCzXlc8r.mjs} +91 -90
  83. package/dist/logs-BfwwadsZ.mjs +479 -0
  84. package/dist/logs-jTS_lHSo.mjs +248 -0
  85. package/dist/{macos-D7uDvO-z.mjs → macos-DVlSSyUg.mjs} +1 -1
  86. package/dist/macos-NfV2D7dO.mjs +694 -0
  87. package/dist/macos-run.mjs +1 -1
  88. package/dist/maintenance-run.mjs +123 -248
  89. package/dist/{metro-DnCEjCxs.mjs → metro-DiXtA3Ty.mjs} +107 -30
  90. package/dist/metro-gateway-CKZqKqx7.mjs +209 -0
  91. package/dist/{named-ports-4WopRPg-.mjs → named-ports-DkEzOfzO.mjs} +42 -90
  92. package/dist/native-android-CqgnOgsT.mjs +645 -0
  93. package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
  94. package/dist/native-gradle-inputs-Dnh84Zbd.mjs +211 -0
  95. package/dist/native-inputs-TRTTTRxt.mjs +91 -0
  96. package/dist/native-run-NwUuxbkg.mjs +276 -0
  97. package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-B7KIafpM.mjs} +11 -9
  98. package/dist/native-source-Y0yLhFyQ.mjs +133 -0
  99. package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-D_VOfFL7.mjs} +26 -18
  100. package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-BYDOHWLN.mjs} +104 -60
  101. package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
  102. package/dist/offload-worker.d.mts +59 -41
  103. package/dist/offload-worker.mjs +478 -115
  104. package/dist/operation-exec-BW0em61G.mjs +171 -0
  105. package/dist/{ownership-DCtw_2IA.mjs → ownership-C5fo5Edb.mjs} +3 -3
  106. package/dist/{page-DRHy329N.mjs → page-DBL2PiUU.mjs} +12 -5
  107. package/dist/paths-BsJMoPP2.mjs +12 -0
  108. package/dist/paths-DQtTgsBf.mjs +42 -0
  109. package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BnGgJRRZ.mjs} +5 -5
  110. package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-DIsMtN-d.mjs} +15 -11
  111. package/dist/{ports-DdSUicVo.mjs → ports-Cy1RkmuQ.mjs} +3 -3
  112. package/dist/prebuild-D4JoEAEs.mjs +484 -0
  113. package/dist/{project-_phNIJfs.mjs → project-wM_XFTvE.mjs} +65 -37
  114. package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-W1IuLXDt.mjs} +102 -20
  115. package/dist/pull-request-eODyIqZF.d.mts +124 -0
  116. package/dist/pull-requests.d.mts +2 -120
  117. package/dist/pull-requests.mjs +2 -2
  118. package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-6OZ7MSM7.mjs} +121 -72
  119. package/dist/{gradle-DSrXb6lG.mjs → react-native-build-Dvd8hC21.mjs} +292 -15
  120. package/dist/react-native-doctor-DsoSF1Y9.mjs +234 -0
  121. package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-4u1Rn-GR.mjs} +71 -39
  122. package/dist/{recordings-D0d5aQt0.mjs → recordings-CQmfzAh7.mjs} +12 -9
  123. package/dist/registration-BcRgF6Ox.mjs +51 -0
  124. package/dist/{reload-C8JhxjSh.mjs → reload-BzkYabB-.mjs} +94 -47
  125. package/dist/reload-D7AVlb8N.mjs +2 -0
  126. package/dist/{remote-BiR6aYjy.mjs → remote-DjGDmlTZ.mjs} +26 -18
  127. package/dist/result-D2Ykz_iD.mjs +435 -0
  128. package/dist/{run-BtPgpKks.mjs → run-DidHghD1.mjs} +5 -5
  129. package/dist/selection-DSMbWEX2.mjs +620 -0
  130. package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CafzuyFB.mjs} +3 -4
  131. package/dist/{server-command-CTtCkmcQ.mjs → server-command-C6QjeupS.mjs} +14 -7
  132. package/dist/{server-expo-DsguMGUF.mjs → server-expo-CrjB29pq.mjs} +54 -11
  133. package/dist/server-expo-D58c9L0M.mjs +2 -0
  134. package/dist/{settings-B717odTD.mjs → settings-C7O8A6ZI.mjs} +309 -119
  135. package/dist/settings-DpR-1Wnn.mjs +114 -0
  136. package/dist/settings-write-CzD60rOD.mjs +360 -0
  137. package/dist/settings.schema.json +176 -16
  138. package/dist/{simslim-CCr3rE-A.mjs → simslim-BNckWpXi.mjs} +14 -12
  139. package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-CbfmNgM6.mjs} +15 -20
  140. package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
  141. package/dist/stage-Bps5oius.mjs +200 -0
  142. package/dist/{start-TXeMmmO2.mjs → start-Br-oxqMD.mjs} +1 -1
  143. package/dist/start-EojN4WFz.mjs +1364 -0
  144. package/dist/{state-D1Icyjlu.mjs → state--smjFSTL.mjs} +55 -13
  145. package/dist/{state-CG_OFoaA.mjs → state-08I3hw3_.mjs} +3 -2
  146. package/dist/{stats-BoY5sEPU.mjs → stats-D3GerlFW.mjs} +7 -13
  147. package/dist/stats-report-BzaPrRm6.mjs +16 -0
  148. package/dist/{status-BTA7kKiQ.mjs → status-BRROykC8.mjs} +7 -5
  149. package/dist/status-EvrK72L2.mjs +2 -0
  150. package/dist/{status-WgFbkRzj.mjs → status-WBDajew2.mjs} +554 -452
  151. package/dist/{status-watch-C23ILtf9.mjs → status-watch-Bg_u-pwR.mjs} +222 -25
  152. package/dist/status-worker.d.mts +1 -0
  153. package/dist/status-worker.mjs +19 -0
  154. package/dist/stim-desktop-D5OGpYZM.mjs +112 -0
  155. package/dist/{stop-DR6VoDIk.mjs → stop-DTZ9uTw3.mjs} +2 -2
  156. package/dist/{stop-DPEhunlw.mjs → stop-Dky10AEJ.mjs} +33 -23
  157. package/dist/{stop-BNmBMi1F.mjs → stop-Mv6W9FAk.mjs} +137 -98
  158. package/dist/supervisor-run.d.mts +8 -17
  159. package/dist/supervisor-run.mjs +56 -28
  160. package/dist/{support-CwjbFs9H.mjs → support-CNioewsd.mjs} +14 -14
  161. package/dist/{support-DMTqj3Hm.mjs → support-yUiOjnVY.mjs} +20 -13
  162. package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
  163. package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
  164. package/dist/toolchain-BY8X8HXx.mjs +2 -0
  165. package/dist/toolchain-DpJMHq0n.mjs +876 -0
  166. package/dist/{trigger-CigAYjeL.mjs → trigger-Cbyc41d_.mjs} +21 -6
  167. package/dist/trigger-yb_nFzPF.mjs +2 -0
  168. package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-CA3TgT3-.mjs} +263 -156
  169. package/dist/web-CZ07gd77.mjs +2 -0
  170. package/dist/{web-BDBMxDpx.mjs → web-DKx6yoFA.mjs} +20 -14
  171. package/dist/web-run.mjs +13 -12
  172. package/dist/windows-report.d.mts +1 -0
  173. package/dist/windows-report.mjs +18 -0
  174. package/dist/windows-report.ps1 +43 -0
  175. package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-U08dEzhG.mjs} +62 -58
  176. package/dist/{workspaces-C36s2jb9.mjs → workspaces-CpANmBlq.mjs} +1723 -1286
  177. package/dist/{worktree-CgvJYJ-Q.mjs → worktree-CHecZ4Oq.mjs} +1097 -547
  178. package/dist/worktree-ZqZVjD9K.mjs +2 -0
  179. package/dist/xcode-BXn9-xYx.mjs +896 -0
  180. package/package.json +7 -5
  181. package/shim/android-audio/Main.java +24 -0
  182. package/shim/android-audio/README.md +17 -0
  183. package/shim/android-audio.jar +0 -0
  184. package/shim/android-optimizations.gradle +7 -5
  185. package/dist/activity-BSV745Kz.mjs +0 -629
  186. package/dist/api-qvOzWyfO.mjs +0 -154
  187. package/dist/api-run.mjs +0 -294
  188. package/dist/app-install-BIKtMfPq.mjs +0 -896
  189. package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
  190. package/dist/budget-f7516Zk0.mjs +0 -4106
  191. package/dist/build-facts-DcLv2HSd.d.mts +0 -111
  192. package/dist/cancellation-C_22VQTH.mjs +0 -24
  193. package/dist/client-qQAaXSUs.mjs +0 -1771
  194. package/dist/config-BYDxlMY3.mjs +0 -562
  195. package/dist/device-DuiPJQSn.mjs +0 -290
  196. package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
  197. package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
  198. package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
  199. package/dist/exec-DqKo9GKJ.mjs +0 -268
  200. package/dist/git-DDfFzkMm.mjs +0 -45
  201. package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
  202. package/dist/logs-BGrEUaEs.mjs +0 -383
  203. package/dist/macos-Ch5VJmcS.mjs +0 -584
  204. package/dist/metro-gateway-CX9Xlkq2.mjs +0 -103
  205. package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
  206. package/dist/native-android-D5qc3-_v.mjs +0 -226
  207. package/dist/native-gradle-inputs-BsLRrl7u.mjs +0 -349
  208. package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
  209. package/dist/plan-C4TjdPsR.mjs +0 -260
  210. package/dist/prebuild-DYbucPXy.mjs +0 -212
  211. package/dist/preview-78a9kR_-.mjs +0 -1011
  212. package/dist/react-native-build-CtCccJtb.mjs +0 -239
  213. package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
  214. package/dist/remote-cache-OyOyVIS3.mjs +0 -526
  215. package/dist/result-CaJg5Iat.mjs +0 -186
  216. package/dist/server-expo-Bigriskl.mjs +0 -2
  217. package/dist/settings-BORNaaCO.mjs +0 -402
  218. package/dist/settings-vk3mJGSm.d.mts +0 -13
  219. package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
  220. package/dist/stage-KNTQopqv.mjs +0 -157
  221. package/dist/start-BWqzODpb.mjs +0 -1116
  222. package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
  223. package/dist/swiftpm-macos-DRNVJWlb.mjs +0 -119
  224. package/dist/tailnet-Dh-qiYzG.mjs +0 -265
  225. package/dist/toolchain-BFkAcstd.mjs +0 -2
  226. package/dist/toolchain-DxSsNssu.mjs +0 -1657
  227. package/dist/trigger-9_USgmxz.mjs +0 -2
  228. package/dist/web-Dq-i3wzJ.mjs +0 -2
  229. package/dist/worktree-DpLdCHga.mjs +0 -2
  230. package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
  231. package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
@@ -1,20 +1,22 @@
1
- import { H as parseDeviceSlotKey, V as deviceSlotPlatforms, p as getProject } from "./config-BYDxlMY3.mjs";
2
- import { i as recordWorkspaceUse, r as readWorkspaceState$1 } from "./workspace-state-DJt_MMvf.mjs";
3
- import { f as refuseNoProject, l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
4
- import { F as readWorkspaceLaunches, n as findCommandWorkspace } from "./project-_phNIJfs.mjs";
5
- import { J as resolveOwnedAvdSerial } from "./android-Mz_Inn3w.mjs";
6
- import { u as resolveProjectMetro } from "./metro-DnCEjCxs.mjs";
7
- import { o as readWebRecord, r as cdpEndpoint, u as webFacts } from "./state-D1Icyjlu.mjs";
8
- import { E as resolveOwnedIosSim } from "./ios-RkW4pnQf.mjs";
9
- import { m as ensureMetroReverse, s as androidAppProcess, y as iosAppProcess } from "./app-install-BIKtMfPq.mjs";
10
- import { d as probeHostedSession } from "./hosted-client-ZEKpS9vw.mjs";
11
- import { r as readHostedNative } from "./ios-state-CBLe1xYw.mjs";
12
- import { r as reopenHostedAndroidMetro } from "./hosted-android-C3MHGld1.mjs";
13
- import { n as nativeRunCommand } from "./slot-launch-DPt0m9Nd.mjs";
14
- import { n as sendToOwnedPage, t as liveWebRecord } from "./page-DRHy329N.mjs";
1
+ import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-DlrsduwG.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-gwpm28fu.mjs";
3
+ import { d as cancelledError, f as throwIfCancelled, u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
4
+ import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
5
+ import { Nt as repoRootAsync } from "./settings-C7O8A6ZI.mjs";
6
+ import { I as readWorkspaceLaunches, r as findCommandWorkspaceAsync } from "./project-wM_XFTvE.mjs";
7
+ import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-DiXtA3Ty.mjs";
8
+ import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state--smjFSTL.mjs";
9
+ import { Sn as iosAppProcess, _n as ensureMetroReverse, dn as androidAppProcess } from "./budget-Cvwn54qV.mjs";
10
+ import { et as resolveOwnedAvdSerialAsync } from "./android-C7sVmyI9.mjs";
11
+ import { E as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-hcBpnEGk.mjs";
12
+ import { f as probeHostedSession } from "./hosted-client-DZAPrcro.mjs";
13
+ import { r as readHostedNative } from "./ios-state-Dtw5K2aI.mjs";
14
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-B-9f-jkd.mjs";
15
+ import { n as nativeRunCommand } from "./slot-launch-CbfmNgM6.mjs";
16
+ import { n as sendToOwnedPage, t as liveWebRecord } from "./page-DBL2PiUU.mjs";
15
17
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
16
- import chalk from "chalk";
17
18
  import { WebSocket } from "ws";
19
+ import chalk from "chalk";
18
20
  //#region src/engine/reload.ts
19
21
  const METRO_TIMEOUT_MS = 2e3;
20
22
  function describe$1(error) {
@@ -39,9 +41,10 @@ function peerMatches(query, role, appId) {
39
41
  * Asks Metro for its peers and reloads the ones matching `role` and `appId`. With `peersOnly`, it sends nothing and
40
42
  * only reports the outcome a reload would have, so a caller can wait for the app to connect.
41
43
  */
42
- function reloadThroughMetro(port, { role, appId, timeoutMs = METRO_TIMEOUT_MS, peersOnly = false }) {
44
+ function reloadThroughMetro(port, { role, appId, timeoutMs = METRO_TIMEOUT_MS, peersOnly = false, signal }) {
45
+ if (signal?.aborted) return Promise.reject(cancelledError("reload"));
43
46
  const roleName = ROLE_NAMES[role];
44
- return new Promise((resolve) => {
47
+ return new Promise((resolve, reject) => {
45
48
  const requestId = `stim-reload-${process.pid}-${Date.now()}`;
46
49
  const socket = new WebSocket(`ws://127.0.0.1:${port}/message`);
47
50
  let settled = false;
@@ -49,6 +52,7 @@ function reloadThroughMetro(port, { role, appId, timeoutMs = METRO_TIMEOUT_MS, p
49
52
  if (settled) return;
50
53
  settled = true;
51
54
  clearTimeout(timer);
55
+ signal?.removeEventListener("abort", abort);
52
56
  socket.close();
53
57
  resolve(result);
54
58
  };
@@ -57,7 +61,18 @@ function reloadThroughMetro(port, { role, appId, timeoutMs = METRO_TIMEOUT_MS, p
57
61
  unreachable: true,
58
62
  reason: `Metro did not answer on port ${port}.`
59
63
  }), timeoutMs);
64
+ const abort = () => {
65
+ if (settled) return;
66
+ settled = true;
67
+ clearTimeout(timer);
68
+ signal?.removeEventListener("abort", abort);
69
+ socket.once("close", () => reject(cancelledError("reload")));
70
+ socket.terminate();
71
+ };
72
+ signal?.addEventListener("abort", abort, { once: true });
73
+ if (signal?.aborted) abort();
60
74
  socket.once("open", () => {
75
+ if (settled || signal?.aborted) return;
61
76
  socket.send(JSON.stringify({
62
77
  version: 2,
63
78
  method: "getpeers",
@@ -66,6 +81,7 @@ function reloadThroughMetro(port, { role, appId, timeoutMs = METRO_TIMEOUT_MS, p
66
81
  }));
67
82
  });
68
83
  socket.on("message", (data) => {
84
+ if (settled || signal?.aborted) return;
69
85
  let message;
70
86
  try {
71
87
  message = JSON.parse(data.toString());
@@ -129,22 +145,31 @@ function reloadThroughMetro(port, { role, appId, timeoutMs = METRO_TIMEOUT_MS, p
129
145
  unreachable: true,
130
146
  reason: `Metro reload failed: ${describe$1(error)}`
131
147
  }));
148
+ socket.once("close", () => finish({
149
+ failed: true,
150
+ unreachable: true,
151
+ reason: `Metro closed before answering on port ${port}.`
152
+ }));
132
153
  });
133
154
  }
134
155
  //#endregion
135
156
  //#region src/commands/reload.ts
136
157
  const DEFAULT_DEPS = {
137
- findWorkspace: findCommandWorkspace,
158
+ findWorkspace: (cwd) => findCommandWorkspaceAsync(cwd, repoRootAsync, (line) => console.error(line)),
138
159
  getProject,
139
160
  readLaunches: readWorkspaceLaunches,
140
- resolveIos: resolveOwnedIosSim,
141
- resolveAndroid: resolveOwnedAvdSerial,
161
+ resolveIos: async (udid) => resolveOwnedIosSim(udid, await listAllIosSimsAsync({})),
162
+ resolveAndroid: resolveOwnedAvdSerialAsync,
142
163
  iosProcess: iosAppProcess,
143
164
  androidProcess: androidAppProcess,
144
- resolveMetro: resolveProjectMetro,
165
+ resolveMetro: (port, root, signal) => resolveProjectMetro(port, root, {
166
+ probe: (candidate) => isMetroRunning(candidate, signal),
167
+ pidsOf: listeningPidsAsync,
168
+ cwdOf: async (pid) => (await processCwds([pid])).get(pid) ?? null
169
+ }),
145
170
  reloadMetro: reloadThroughMetro,
146
- readBrowser: (root) => {
147
- const facts = webFacts(readWebRecord(root));
171
+ readBrowser: async (root) => {
172
+ const facts = await webFactsAsync(readWebRecord(root));
148
173
  return facts?.status === "unverified" ? "unverified" : liveWebRecord(facts?.record ?? null);
149
174
  },
150
175
  reloadPage: (record) => sendToOwnedPage(record, "Page.reload"),
@@ -168,11 +193,12 @@ function failure(code, message, remedy) {
168
193
  function describe(error) {
169
194
  return error instanceof Error ? error.message : String(error);
170
195
  }
171
- async function reloadBrowser(browser, metroPort, d) {
196
+ async function reloadBrowser(browser, metroPort, d, signal) {
172
197
  let pageUrl;
173
198
  try {
174
199
  pageUrl = await d.reloadPage(browser);
175
200
  } catch (error) {
201
+ throwIfCancelled(signal, "reload");
176
202
  return {
177
203
  ok: false,
178
204
  error: failure("STIM_RELOAD_FAILED", `The owned Chrome did not accept the reload: ${describe(error)}`, "Run `stim web` to reopen the page.")
@@ -192,8 +218,8 @@ async function reloadBrowser(browser, metroPort, d) {
192
218
  }
193
219
  };
194
220
  }
195
- function processFailure(platform, record, d, slot = "default") {
196
- const { state } = platform === "ios" ? d.iosProcess(record.deviceId, record.appId) : d.androidProcess(record.deviceId, record.appId);
221
+ async function processFailure(platform, record, d, slot = "default") {
222
+ const { state } = platform === "ios" ? await d.iosProcess(record.deviceId, record.appId) : await d.androidProcess(record.deviceId, record.appId);
197
223
  if (state === "unknown") {
198
224
  const probe = platform === "ios" ? `xcrun simctl spawn ${record.deviceId} launchctl list` : `adb -s ${record.deviceId} shell pidof ${record.appId}`;
199
225
  return failure("STIM_RELOAD_PROBE_FAILED", `Stim could not determine whether ${record.appId} is running on ${record.deviceId}.`, `Run \`${probe}\` and retry when the device tool responds.`);
@@ -201,7 +227,7 @@ function processFailure(platform, record, d, slot = "default") {
201
227
  if (state === "stopped") return failure("STIM_RELOAD_STOPPED", `${record.appId} is not running on ${record.deviceId}.`, `Run \`${nativeRunCommand(platform, slot)}\` to launch it.`);
202
228
  return null;
203
229
  }
204
- function inspectTarget(platform, record, project, d, slot = "default") {
230
+ async function inspectTarget(platform, record, project, d, slot = "default") {
205
231
  const runCommand = nativeRunCommand(platform, slot);
206
232
  if (platform === "ios") {
207
233
  const configured = project.platforms?.ios;
@@ -211,7 +237,7 @@ function inspectTarget(platform, record, project, d, slot = "default") {
211
237
  };
212
238
  let resolved;
213
239
  try {
214
- resolved = d.resolveIos(record.deviceId);
240
+ resolved = await d.resolveIos(record.deviceId);
215
241
  } catch (error) {
216
242
  return {
217
243
  platform,
@@ -222,7 +248,7 @@ function inspectTarget(platform, record, project, d, slot = "default") {
222
248
  platform,
223
249
  error: failure("STIM_RELOAD_STOPPED", `The recorded iOS app is not running on a booted owned simulator.`, `Run \`${runCommand}\` to boot, install, and launch it.`)
224
250
  };
225
- const stopped = processFailure(platform, record, d, slot);
251
+ const stopped = await processFailure(platform, record, d, slot);
226
252
  if (stopped) return {
227
253
  platform,
228
254
  error: stopped
@@ -241,7 +267,7 @@ function inspectTarget(platform, record, project, d, slot = "default") {
241
267
  };
242
268
  let resolved;
243
269
  try {
244
- resolved = d.resolveAndroid(configured.avdName);
270
+ resolved = await d.resolveAndroid(configured.avdName);
245
271
  } catch (error) {
246
272
  return {
247
273
  platform,
@@ -252,7 +278,7 @@ function inspectTarget(platform, record, project, d, slot = "default") {
252
278
  platform,
253
279
  error: failure("STIM_RELOAD_STOPPED", `The recorded Android app is not running on this workspace's owned emulator.`, `Run \`${runCommand}\` to boot, install, and launch it.`)
254
280
  };
255
- const stopped = processFailure(platform, record, d, slot);
281
+ const stopped = await processFailure(platform, record, d, slot);
256
282
  if (stopped) return {
257
283
  platform,
258
284
  error: stopped
@@ -267,9 +293,16 @@ function inspectTarget(platform, record, project, d, slot = "default") {
267
293
  function isTargetFailure(value) {
268
294
  return "error" in value;
269
295
  }
270
- async function runReload({ root, platform = null, deps = {} }) {
296
+ async function runReload({ root, platform = null, deps = {}, signal }) {
297
+ throwIfCancelled(signal, "reload");
271
298
  const d = {
272
299
  ...DEFAULT_DEPS,
300
+ reloadPage: (record) => sendToOwnedPage(record, "Page.reload", {}, signal),
301
+ reopenHostedMetro: (projectRoot, placement, port) => reopenHostedAndroidMetro(projectRoot, placement, port, signal),
302
+ sleep: (ms) => cancellableSleep(ms, {
303
+ signal,
304
+ what: "reload"
305
+ }),
273
306
  ...deps
274
307
  };
275
308
  const project = d.getProject(root);
@@ -277,13 +310,14 @@ async function runReload({ root, platform = null, deps = {} }) {
277
310
  ok: false,
278
311
  error: failure("STIM_NO_PROJECT", `No Stim environment is registered for ${root}.`, "Run `stim start` first.")
279
312
  };
280
- const read = platform === null || platform === "web" ? d.readBrowser(root) : null;
313
+ const read = platform === null || platform === "web" ? await d.readBrowser(root) : null;
314
+ throwIfCancelled(signal, "reload");
281
315
  if (platform === "web" && read === "unverified") return {
282
316
  ok: false,
283
317
  error: failure("STIM_RELOAD_PROBE_FAILED", "Stim could not verify the owned Chrome's supervisor or Chrome process.", "Run `stim status`, then follow `stim guide errors teardown`.")
284
318
  };
285
319
  const browser = read === "unverified" ? null : read;
286
- if (platform === "web") return browser ? reloadBrowser(browser, project.metroPort ?? null, d) : {
320
+ if (platform === "web") return browser ? reloadBrowser(browser, project.metroPort ?? null, d, signal) : {
287
321
  ok: false,
288
322
  error: failure("STIM_RELOAD_STOPPED", "No owned Chrome is running for this workspace.", "Run `stim web` first.")
289
323
  };
@@ -309,9 +343,10 @@ async function runReload({ root, platform = null, deps = {} }) {
309
343
  const hostedProbes = Object.fromEntries(await Promise.all(["ios", "android"].flatMap((native) => Object.entries(hosted[native]).map(async ([slot, placement]) => [`${native}:${slot}`, await probeHostedSession({
310
344
  ...placement,
311
345
  platform: native
312
- })]))));
346
+ }, signal ? { ttlMs: 0 } : void 0)]))));
347
+ throwIfCancelled(signal, "reload");
313
348
  const launches = d.readLaunches(root);
314
- const inspected = Object.entries(launches).flatMap(([key, record]) => {
349
+ const inspected = (await Promise.all(Object.entries(launches).map(async ([key, record]) => {
315
350
  const parsed = parseDeviceSlotKey(key);
316
351
  if (!parsed || platform && parsed.platform !== platform) return [];
317
352
  if (hostedFailures[`${parsed.platform}:${parsed.slot}`]) return [];
@@ -330,11 +365,12 @@ async function runReload({ root, platform = null, deps = {} }) {
330
365
  error: failure("STIM_RELOAD_PROBE_FAILED", `The ${parsed.platform} session on ${placement.machine} is ${probe.state}.`, `Run stim ${parsed.platform} --remote ${placement.machine} or stim stop to reconcile it.`)
331
366
  }];
332
367
  }
333
- return [inspectTarget(parsed.platform, record, {
368
+ return [await inspectTarget(parsed.platform, record, {
334
369
  ...project,
335
370
  platforms: deviceSlotPlatforms(project, parsed.slot)
336
371
  }, d, parsed.slot)];
337
- });
372
+ }))).flat();
373
+ throwIfCancelled(signal, "reload");
338
374
  inspected.push(...Object.values(hostedFailures));
339
375
  const live = inspected.filter((target) => !isTargetFailure(target));
340
376
  const livePlatforms = new Set(live.map((target) => target.platform));
@@ -346,7 +382,7 @@ async function runReload({ root, platform = null, deps = {} }) {
346
382
  error: failure("STIM_RELOAD_AMBIGUOUS", `More than one platform is live: ${names.join(", ")}.`, `Choose one with ${names.map((name) => `\`stim reload ${name}\``).join(" or ")}.`)
347
383
  };
348
384
  }
349
- if (browser && inspected.length === 0) return reloadBrowser(browser, project.metroPort ?? null, d);
385
+ if (browser && inspected.length === 0) return reloadBrowser(browser, project.metroPort ?? null, d, signal);
350
386
  if (read === "unverified" && inspected.length === 0) return {
351
387
  ok: false,
352
388
  error: failure("STIM_RELOAD_PROBE_FAILED", "Stim could not verify the owned Chrome's supervisor or Chrome process.", "Run `stim status`, then follow `stim guide errors teardown`.")
@@ -375,11 +411,14 @@ async function runReload({ root, platform = null, deps = {} }) {
375
411
  ok: false,
376
412
  error: failure("STIM_NO_METRO", `The launch does not point at this workspace's current Metro reservation.`, "Run `stim start`, then launch the app again.")
377
413
  };
378
- if (!(await d.resolveMetro(port, root)).metro) return {
414
+ const metro = await d.resolveMetro(port, root, signal);
415
+ throwIfCancelled(signal, "reload");
416
+ if (!metro.metro) return {
379
417
  ok: false,
380
418
  error: failure("STIM_NO_METRO", `Port ${port} is not serving this workspace's Metro.`, "Run `stim start`, then retry.")
381
419
  };
382
- const stopped = target.hosted ? null : processFailure(target.platform, target.record, d, target.slot);
420
+ const stopped = target.hosted ? null : await processFailure(target.platform, target.record, d, target.slot);
421
+ throwIfCancelled(signal, "reload");
383
422
  if (stopped) return {
384
423
  ok: false,
385
424
  error: stopped
@@ -388,11 +427,14 @@ async function runReload({ root, platform = null, deps = {} }) {
388
427
  let hostedReopened = false;
389
428
  const reverseChecked = target.platform === "android" ? live.filter((c) => c.platform === "android" && !c.record.release && c.record.metroPort === port) : [];
390
429
  for (const candidate of reverseChecked) {
430
+ throwIfCancelled(signal, "reload");
391
431
  if (candidate.hostedAndroid) {
392
432
  try {
393
433
  await d.reopenHostedMetro(root, candidate.hostedAndroid, port);
434
+ throwIfCancelled(signal, "reload");
394
435
  hostedReopened = true;
395
436
  } catch (error) {
437
+ throwIfCancelled(signal, "reload");
396
438
  return {
397
439
  ok: false,
398
440
  error: failure("STIM_HOSTING_REFUSED", describe(error), `Retry stim reload android when ${candidate.hostedAndroid.machine} answers, or run stim stop to reconcile the session.`)
@@ -401,7 +443,8 @@ async function runReload({ root, platform = null, deps = {} }) {
401
443
  continue;
402
444
  }
403
445
  const serial = candidate.record.deviceId;
404
- const ensured = d.ensureReverse(serial, port);
446
+ const ensured = await d.ensureReverse(serial, port);
447
+ throwIfCancelled(signal, "reload");
405
448
  if (ensured.failed) return {
406
449
  ok: false,
407
450
  error: failure("STIM_RELOAD_FAILED", `Stim could not check or restore the adb reverse for Metro port ${port} on ${serial}: ${ensured.reason}`, `Run \`adb -s ${serial} reverse tcp:${port} tcp:${port}\`, then \`stim reload android\` again.`)
@@ -410,23 +453,27 @@ async function runReload({ root, platform = null, deps = {} }) {
410
453
  }
411
454
  const request = {
412
455
  role: target.platform,
413
- appId: target.record.appId
456
+ appId: target.record.appId,
457
+ ...signal ? { signal } : {}
414
458
  };
415
459
  const expectedPeers = reverseChecked.filter((c) => c.record.appId === target.record.appId).length;
416
460
  const awaitReconnect = reverseRestored.length > 0 || hostedReopened;
417
461
  for (let poll = 0; poll < RECONNECT_POLLS; poll++) {
462
+ throwIfCancelled(signal, "reload");
418
463
  if (!awaitReconnect) break;
419
464
  const peers = await d.reloadMetro(port, {
420
465
  ...request,
421
466
  peersOnly: true
422
467
  });
468
+ throwIfCancelled(signal, "reload");
423
469
  if (peers.broadcast) await d.sleep(RECONNECT_UNOBSERVED_MS);
424
470
  if (peers.unreachable || peers.broadcast || peers.ok && peers.targets >= expectedPeers) break;
425
471
  await d.sleep(RECONNECT_POLL_MS);
426
472
  }
473
+ throwIfCancelled(signal, "reload");
427
474
  const reloaded = await d.reloadMetro(port, request);
428
475
  if (!reloaded.ok) {
429
- const stoppedAfterMetro = target.hosted ? null : processFailure(target.platform, target.record, d, target.slot);
476
+ const stoppedAfterMetro = target.hosted ? null : await processFailure(target.platform, target.record, d, target.slot);
430
477
  if (stoppedAfterMetro) return {
431
478
  ok: false,
432
479
  error: stoppedAfterMetro
@@ -472,12 +519,12 @@ function registerReload(program, deps = {}) {
472
519
  process.exitCode = 1;
473
520
  return;
474
521
  }
475
- const root = (deps.findWorkspace ?? DEFAULT_DEPS.findWorkspace)(process.cwd());
522
+ const root = await (deps.findWorkspace ?? DEFAULT_DEPS.findWorkspace)(process.cwd());
476
523
  if (!root) {
477
524
  refuseNoProject({ json: Boolean(opts.json) });
478
525
  return;
479
526
  }
480
- recordWorkspaceUse(root);
527
+ await recordWorkspaceUseAsync(root);
481
528
  const result = await runReload({
482
529
  root,
483
530
  platform: value ?? null,
@@ -509,4 +556,4 @@ function reloadCommand(program) {
509
556
  registerReload(program);
510
557
  }
511
558
  //#endregion
512
- export { reloadCommand as default, registerReload, runReload };
559
+ export { reloadCommand as n, runReload as r, registerReload as t };
@@ -0,0 +1,2 @@
1
+ import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-BzkYabB-.mjs";
2
+ export { reloadCommand as default, registerReload, runReload };
@@ -1,19 +1,22 @@
1
- import { V as deviceSlotPlatforms } from "./config-BYDxlMY3.mjs";
2
- import { F as parseIosRemote, H as remoteIosSetting, L as publicUrlSetting, V as remoteEasFallbackSetting, tt as tunnelModeSetting } from "./settings-B717odTD.mjs";
3
- import { l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
4
- import { n as devicePlacementRecord } from "./placement-log-MOfPVgaM.mjs";
5
- import { c as devicePlacementLine } from "./build-plan-B7SZsc2N.mjs";
6
- import "./device-remote-xRT0Vmo9.mjs";
7
- import { b as resolveSimulatorAppFlag } from "./support-CwjbFs9H.mjs";
1
+ import { H as deviceSlotPlatforms } from "./config-DlrsduwG.mjs";
2
+ import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
3
+ import { F as parseIosRemote, H as remoteEasFallbackSetting, R as publicUrlSetting, U as remoteIosSetting, rt as tunnelModeSetting } from "./settings-C7O8A6ZI.mjs";
4
+ import "./budget-Cvwn54qV.mjs";
5
+ import { b as resolveSimulatorAppFlag } from "./support-CNioewsd.mjs";
6
+ import { n as devicePlacementRecord } from "./placement-log-BnGgJRRZ.mjs";
7
+ import { r as devicePlacementLine } from "./eas-fallback-CSgAulr5.mjs";
8
8
  import chalk from "chalk";
9
9
  //#region src/commands/ios/remote.ts
10
- function resolveIosRemote({ opts, settings, physical, recorded }) {
11
- const target = opts.remote !== void 0 ? parseIosRemote(opts.remote) : remoteIosSetting(settings);
12
- if (physical && target?.kind === "machine") return { failure: {
10
+ function deviceRemoteConflict(remote, physical) {
11
+ if (!physical || remote === void 0 || !parseIosRemote(remote)) return null;
12
+ return {
13
13
  code: "STIM_BAD_ARG",
14
- message: "--device builds for a phone connected to this machine, and --remote installs on a remote one.",
15
- remedy: "Pass only one of --device and --remote; unset ios.remote for a local phone."
16
- } };
14
+ message: `--device runs on a phone connected to this machine, and --remote ${remote} chooses where a simulator runs.`,
15
+ remedy: "Pass only one of --device and --remote, or --remote local with --device."
16
+ };
17
+ }
18
+ function resolveIosRemote({ opts, settings, physical, recorded }) {
19
+ const target = opts.remote !== void 0 ? parseIosRemote(opts.remote) : physical ? null : remoteIosSetting(settings);
17
20
  const machine = target?.kind === "machine" ? target.machine : null;
18
21
  if (recorded && recorded.machine !== machine && machine !== "auto") return { failure: {
19
22
  code: "STIM_BAD_ARG",
@@ -67,7 +70,7 @@ async function selectIosPlacement(args) {
67
70
  const { root, slot, d, opts, deviceType, runtime, noWait, phase, log, release, appMode, metroCheck } = args;
68
71
  const viewer = resolveSimulatorAppFlag(opts.simulatorApp, args.physical, null);
69
72
  if ("refusal" in viewer) return { failure: viewer.refusal };
70
- const refusal = args.validateSelectors();
73
+ const refusal = await args.validateSelectors();
71
74
  if (refusal) return { failure: refusal };
72
75
  const easFallback = args.supportsRemote && remoteEasFallbackSetting(args.settings);
73
76
  try {
@@ -82,6 +85,8 @@ async function selectIosPlacement(args) {
82
85
  ...easFallback ? { eas: () => d.checkEasFallback({
83
86
  root,
84
87
  platform: "ios",
88
+ env: args.env,
89
+ operation: args.operation,
85
90
  slot,
86
91
  release,
87
92
  isExpo: d.detectIsExpo(root),
@@ -149,7 +154,7 @@ async function connectIosTarget(selection, selectors, d, appMode) {
149
154
  } };
150
155
  }
151
156
  }
152
- async function iosPlacementBudget(d, root, note, hosted, automatic, simSnapshot) {
157
+ async function iosPlacementBudget(d, root, note, hosted, automatic, simSnapshot, env) {
153
158
  if (automatic) return {
154
159
  ...automatic,
155
160
  refusal: hosted ? null : automatic.refusal
@@ -160,14 +165,15 @@ async function iosPlacementBudget(d, root, note, hosted, automatic, simSnapshot)
160
165
  } : d.budgetGate({
161
166
  root,
162
167
  note,
163
- simSnapshot
168
+ simSnapshot,
169
+ env
164
170
  });
165
171
  }
166
172
  function hostedIosMetroNote(hosted, settings, note, simulatorApp) {
167
173
  if (hosted && (settings.iosSimulatorApp !== void 0 || simulatorApp !== void 0)) note(chalk.dim(phaseLine("device", "iosSimulatorApp is ignored on a hosting Mac; the simulator boots headless.")));
168
174
  if (hosted && (publicUrlSetting(settings) || tunnelModeSetting(settings))) note(chalk.dim(phaseLine("metro", "metro.publicUrl and metro.tunnel are ignored on a hosting Mac; Metro uses the private tailnet bridge.")));
169
175
  }
170
- async function connectIosBackend(root, backend, deviceType, d) {
176
+ async function connectIosBackend(root, backend, deviceType, d, env, operation) {
171
177
  if (!backend) return {
172
178
  remote: null,
173
179
  arch: null
@@ -175,6 +181,8 @@ async function connectIosBackend(root, backend, deviceType, d) {
175
181
  const resolved = await d.resolveRemoteContext({
176
182
  root,
177
183
  backend,
184
+ env,
185
+ operation,
178
186
  easBin: d.resolveEasCliBin(root)?.file ?? null,
179
187
  deviceType: deviceType?.trim() || null
180
188
  });
@@ -189,4 +197,4 @@ async function connectIosBackend(root, backend, deviceType, d) {
189
197
  };
190
198
  }
191
199
  //#endregion
192
- export { iosPlacementBudget as a, hostedIosSelectors as i, connectIosTarget as n, selectIosPlacement as o, hostedIosMetroNote as r, connectIosBackend as t };
200
+ export { hostedIosSelectors as a, hostedIosMetroNote as i, connectIosTarget as n, iosPlacementBudget as o, deviceRemoteConflict as r, selectIosPlacement as s, connectIosBackend as t };