stim 1.20.2 → 1.21.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 (217) hide show
  1. package/README.md +88 -8
  2. package/dist/acquire-artifact-CD4lbiWE.mjs +153 -0
  3. package/dist/act-DHAw2A2S.mjs +2667 -0
  4. package/dist/activity-BzVfHSrY.mjs +1376 -0
  5. package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-zh1vhbLp.mjs} +21 -65
  6. package/dist/{android-HqP1_vB_.mjs → android-BEJ8Jpl7.mjs} +2 -2
  7. package/dist/{android-DCKZrNvV.mjs → android-BLgbNqox.mjs} +128 -78
  8. package/dist/{android-Dlzxshgp.mjs → android-CV_GCELZ.mjs} +5 -5
  9. package/dist/{android-Mz_Inn3w.mjs → android-DUYkNF4u.mjs} +184 -102
  10. package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-Ct5b1xCK.mjs} +7 -6
  11. package/dist/android-cas-compiler.mjs +2 -2
  12. package/dist/android-project-BCAAmMwz.mjs +12 -0
  13. package/dist/api.d.mts +740 -8
  14. package/dist/api.mjs +585 -1
  15. package/dist/{artifact-HSwkIWEQ.mjs → artifact-B8T3S5gi.mjs} +223 -201
  16. package/dist/{artifact-D3czlUvT.mjs → artifact-DAuZ-FNU.mjs} +158 -148
  17. package/dist/{browser-web-CA-F1GQo.mjs → browser-web-QQzVjz3O.mjs} +26 -24
  18. package/dist/budget-Bs6SxxzO.mjs +9154 -0
  19. package/dist/{build-DYDbfkk5.mjs → build-CoPzQRNw.mjs} +144 -96
  20. package/dist/build-cache-DmyR9Zzc.mjs +602 -0
  21. package/dist/build-plan-CaFskB7_.mjs +188 -0
  22. package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DkkqguoK.mjs} +2 -2
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{ccache-zdKiYQ3E.mjs → ccache-BJRZ9pG3.mjs} +10 -9
  25. package/dist/{cdp-Dq_ypAlJ.mjs → cdp-CWmIUMbw.mjs} +18 -5
  26. package/dist/{chrome-BnzZMqsR.mjs → chrome-B6tfCta1.mjs} +7 -4
  27. package/dist/{cli-CLP3diBm.mjs → cli-0DYf8QhQ.mjs} +20 -20
  28. package/dist/cli.mjs +1 -1
  29. package/dist/client-B7QVOlCr.d.mts +253 -0
  30. package/dist/client-UXD70ZbM.mjs +1406 -0
  31. package/dist/collector-run.d.mts +4 -40
  32. package/dist/collector-run.mjs +9 -8
  33. package/dist/{command-output-BTy8hZ0F.mjs → command-output-B1UrjZHL.mjs} +1 -1
  34. package/dist/config-CYcBF478.mjs +949 -0
  35. package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-CqeBlrEn.mjs} +3 -3
  36. package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-BbKQW83h.mjs} +20 -5
  37. package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-DFRyG1_o.mjs} +1 -1
  38. package/dist/{dev-client-DAWVIGBu.mjs → dev-client-UOeESKm6.mjs} +2 -2
  39. package/dist/device-DCxH7_By.mjs +1068 -0
  40. package/dist/{device-BECOiufl.mjs → device-ExJq8Ei7.mjs} +35 -35
  41. package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-CMlqEcvw.mjs} +43 -13
  42. package/dist/device-host-worker.mjs +65 -61
  43. package/dist/{device-ios-COSi6oS1.mjs → device-ios-DRUeKaFV.mjs} +48 -45
  44. package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-C8raGFoP.mjs} +14 -26
  45. package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-DMRpVX9a.mjs} +5 -5
  46. package/dist/doctor-BLHCYxzi.mjs +2 -0
  47. package/dist/{doctor-kfMBnUw6.mjs → doctor-DTvaDOda.mjs} +281 -317
  48. package/dist/{doctor-CB8oZKCk.mjs → doctor-Dhqebm0q.mjs} +183 -91
  49. package/dist/doctor-fingerprint.mjs +19 -0
  50. package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-Cv1F10Kj.mjs} +40 -21
  51. package/dist/{eas-build-JyfqyHfC.mjs → eas-build-BomfRnFT.mjs} +53 -20
  52. package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-DJwZpy0c.mjs} +26 -208
  53. package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-op6A54yi.mjs} +229 -11
  54. package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-Bf0rZvG9.mjs} +172 -82
  55. package/dist/exec-H20xSg2T.d.mts +65 -0
  56. package/dist/exec-_UbtCQcG.mjs +750 -0
  57. package/dist/gc-C-WwL0yi.mjs +3 -0
  58. package/dist/{gc-qWOMdnER.mjs → gc-_-dCXdyL.mjs} +584 -796
  59. package/dist/git-C3iTsJaZ.mjs +73 -0
  60. package/dist/{guide-G9cAbVAc.mjs → guide-Yqwt2bd6.mjs} +941 -269
  61. package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-Bw-honsd.mjs} +8 -6
  62. package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DB_gBPfY.mjs} +34 -19
  63. package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CUvOf4Vr.mjs} +1 -1
  64. package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-DL_P5AdN.mjs} +77 -43
  65. package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-QI141yKk.mjs} +21 -17
  66. package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-Ksyjgzq-.mjs} +30 -21
  67. package/dist/idle-BVeRGroT.d.mts +24 -0
  68. package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DaKmZi0z.mjs} +11 -10
  69. package/dist/{ios-BwVCF7oA.mjs → ios-CQ68hG9s.mjs} +8 -8
  70. package/dist/{ios-RkW4pnQf.mjs → ios-CpByZy12.mjs} +140 -80
  71. package/dist/{ios-device-B5veSDDQ.mjs → ios-device-CXGP1bsD.mjs} +1 -1
  72. package/dist/{ios-device-D7pi2Sca.mjs → ios-device-CwFMehUS.mjs} +51 -26
  73. package/dist/{ios-project-K9hY_Jab.mjs → ios-project-WuwwBdvW.mjs} +13 -13
  74. package/dist/{ios-nOLJGVdy.mjs → ios-qNJt4dFm.mjs} +1 -1
  75. package/dist/ios-signing-DTTIChGs.mjs +489 -0
  76. package/dist/{ios-state-CBLe1xYw.mjs → ios-state-DvFX-K_l.mjs} +1 -1
  77. package/dist/{ios-Ce7bc7br.mjs → ios-ubFsBzwq.mjs} +129 -86
  78. package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Cc1dttps.mjs} +53 -26
  79. package/dist/{launch-F4sOqAhB.mjs → launch-CD1yVc7U.mjs} +91 -90
  80. package/dist/{launch-C3qJ6Agb.mjs → launch-Zq2mOSDy.mjs} +82 -541
  81. package/dist/logs-BS00Anxf.mjs +352 -0
  82. package/dist/logs-CMm05HxN.mjs +255 -0
  83. package/dist/{macos-D7uDvO-z.mjs → macos-B65--pPd.mjs} +1 -1
  84. package/dist/{macos-Ch5VJmcS.mjs → macos-C-0qJ6zq.mjs} +225 -212
  85. package/dist/macos-run.mjs +1 -1
  86. package/dist/maintenance-run.mjs +122 -247
  87. package/dist/{metro-DnCEjCxs.mjs → metro-DEXpIhHC.mjs} +67 -12
  88. package/dist/{metro-gateway-CX9Xlkq2.mjs → metro-gateway-BMJNlj3E.mjs} +20 -12
  89. package/dist/{named-ports-4WopRPg-.mjs → named-ports-BWTzt6mu.mjs} +8 -63
  90. package/dist/native-android-JACyjTZs.mjs +844 -0
  91. package/dist/{native-gradle-inputs-BsLRrl7u.mjs → native-gradle-inputs-Bep9JcSF.mjs} +128 -140
  92. package/dist/native-inputs-TRTTTRxt.mjs +91 -0
  93. package/dist/native-run-DY_RLx3C.mjs +277 -0
  94. package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-Dg1Q7tfF.mjs} +9 -8
  95. package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-CB2iQeWq.mjs} +27 -18
  96. package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-CXX39F7o.mjs} +96 -47
  97. package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
  98. package/dist/offload-worker.d.mts +1 -46
  99. package/dist/offload-worker.mjs +197 -66
  100. package/dist/{ownership-DCtw_2IA.mjs → ownership-DEmM5vhh.mjs} +3 -3
  101. package/dist/{page-DRHy329N.mjs → page-CPaHeYqj.mjs} +7 -4
  102. package/dist/paths-BsJMoPP2.mjs +12 -0
  103. package/dist/paths-DQtTgsBf.mjs +42 -0
  104. package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BqGbTa61.mjs} +5 -5
  105. package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-Bwj-IjY1.mjs} +6 -6
  106. package/dist/{ports-DdSUicVo.mjs → ports-D-MmCTdv.mjs} +3 -3
  107. package/dist/prebuild-uD_ipCxF.mjs +449 -0
  108. package/dist/{project-_phNIJfs.mjs → project-BZNjmW_8.mjs} +65 -37
  109. package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-Lfetn8Kr.mjs} +2 -2
  110. package/dist/pull-request-zjCSAryH.d.mts +120 -0
  111. package/dist/pull-requests.d.mts +1 -119
  112. package/dist/pull-requests.mjs +1 -1
  113. package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-DuzH0cn3.mjs} +74 -48
  114. package/dist/{gradle-DSrXb6lG.mjs → react-native-build-rhk4smwQ.mjs} +292 -15
  115. package/dist/react-native-doctor-CQpuIMso.mjs +234 -0
  116. package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-Bhq1rJeV.mjs} +46 -28
  117. package/dist/{recordings-D0d5aQt0.mjs → recordings-DYteQSu4.mjs} +12 -9
  118. package/dist/{reload-C8JhxjSh.mjs → reload-CmTRFJaX.mjs} +93 -47
  119. package/dist/reload-DzjSl5P_.mjs +2 -0
  120. package/dist/{remote-BiR6aYjy.mjs → remote-ByYkXdGD.mjs} +15 -10
  121. package/dist/result-DNiS-tTP.mjs +434 -0
  122. package/dist/{run-BtPgpKks.mjs → run-D23HmJMs.mjs} +4 -5
  123. package/dist/selection-CSl9i5qU.mjs +619 -0
  124. package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CxTrvDg8.mjs} +3 -4
  125. package/dist/{server-command-CTtCkmcQ.mjs → server-command-CtzloH3v.mjs} +14 -7
  126. package/dist/server-expo-C-90EhcG.mjs +2 -0
  127. package/dist/{server-expo-DsguMGUF.mjs → server-expo-DT_F_uVI.mjs} +50 -9
  128. package/dist/{settings-B717odTD.mjs → settings-CsJDEXgK.mjs} +234 -24
  129. package/dist/{settings-vk3mJGSm.d.mts → settings-DkdmlelE.d.mts} +6 -4
  130. package/dist/settings-T1gtc3bf.mjs +114 -0
  131. package/dist/settings-write-HyVZ8eQ8.mjs +359 -0
  132. package/dist/settings.schema.json +163 -16
  133. package/dist/{simslim-CCr3rE-A.mjs → simslim-Cgk17SXV.mjs} +14 -12
  134. package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-DF8VfT64.mjs} +15 -20
  135. package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
  136. package/dist/stage-BIS0ydsV.mjs +183 -0
  137. package/dist/{start-BWqzODpb.mjs → start-7lpH7hmN.mjs} +63 -44
  138. package/dist/{start-TXeMmmO2.mjs → start-RChynRDp.mjs} +1 -1
  139. package/dist/{state-D1Icyjlu.mjs → state-C4ZtUisW.mjs} +40 -13
  140. package/dist/{state-CG_OFoaA.mjs → state-XMziexv2.mjs} +3 -2
  141. package/dist/{stats-BoY5sEPU.mjs → stats-53T7OTb9.mjs} +7 -13
  142. package/dist/stats-report-BFfMpWWF.mjs +16 -0
  143. package/dist/{status-WgFbkRzj.mjs → status-BL7jVyAB.mjs} +535 -447
  144. package/dist/status-CSi6tlRq.mjs +2 -0
  145. package/dist/{status-BTA7kKiQ.mjs → status-DqEUSSxs.mjs} +6 -4
  146. package/dist/{status-watch-C23ILtf9.mjs → status-watch-GDCfqpTE.mjs} +187 -22
  147. package/dist/status-worker.d.mts +1 -0
  148. package/dist/status-worker.mjs +19 -0
  149. package/dist/stim-desktop-C12we7lz.mjs +112 -0
  150. package/dist/{stop-DR6VoDIk.mjs → stop-Bk_1qiV6.mjs} +2 -2
  151. package/dist/{stop-BNmBMi1F.mjs → stop-CPzlM1L-.mjs} +138 -98
  152. package/dist/{stop-DPEhunlw.mjs → stop-D7h6jAXQ.mjs} +11 -10
  153. package/dist/supervisor-run.d.mts +8 -17
  154. package/dist/supervisor-run.mjs +63 -27
  155. package/dist/{support-DMTqj3Hm.mjs → support-67vraa1Q.mjs} +18 -11
  156. package/dist/{support-CwjbFs9H.mjs → support-Dlu37g6H.mjs} +12 -12
  157. package/dist/{swiftpm-macos-DRNVJWlb.mjs → swiftpm-macos-p8WZbxKU.mjs} +35 -24
  158. package/dist/toolchain-DhKwp9iI.mjs +2 -0
  159. package/dist/toolchain-Hp9sCpK4.mjs +873 -0
  160. package/dist/{trigger-CigAYjeL.mjs → trigger-BAahxUPq.mjs} +20 -5
  161. package/dist/trigger-Bf3uDcpv.mjs +2 -0
  162. package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-BHX5r0Ei.mjs} +250 -156
  163. package/dist/{web-BDBMxDpx.mjs → web-CJmIj6AI.mjs} +18 -13
  164. package/dist/web-DknQETPs.mjs +2 -0
  165. package/dist/web-run.mjs +11 -12
  166. package/dist/windows-report.d.mts +1 -0
  167. package/dist/windows-report.mjs +18 -0
  168. package/dist/windows-report.ps1 +43 -0
  169. package/dist/workspace-process-lock-1_1OoVW5.mjs +57 -0
  170. package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-Cjuigeeu.mjs} +62 -58
  171. package/dist/{workspaces-C36s2jb9.mjs → workspaces-BccMFmGQ.mjs} +1188 -1079
  172. package/dist/worktree-CK2MpJW5.mjs +2 -0
  173. package/dist/{worktree-CgvJYJ-Q.mjs → worktree-DQ6Zi2Mv.mjs} +304 -53
  174. package/dist/xcode-Zlx3qjEs.mjs +896 -0
  175. package/package.json +7 -5
  176. package/shim/android-optimizations.gradle +7 -5
  177. package/dist/activity-BSV745Kz.mjs +0 -629
  178. package/dist/api-qvOzWyfO.mjs +0 -154
  179. package/dist/api-run.mjs +0 -294
  180. package/dist/app-install-BIKtMfPq.mjs +0 -896
  181. package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
  182. package/dist/budget-f7516Zk0.mjs +0 -4106
  183. package/dist/build-facts-DcLv2HSd.d.mts +0 -111
  184. package/dist/cancellation-C_22VQTH.mjs +0 -24
  185. package/dist/client-qQAaXSUs.mjs +0 -1771
  186. package/dist/config-BYDxlMY3.mjs +0 -562
  187. package/dist/device-DuiPJQSn.mjs +0 -290
  188. package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
  189. package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
  190. package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
  191. package/dist/exec-DqKo9GKJ.mjs +0 -268
  192. package/dist/git-DDfFzkMm.mjs +0 -45
  193. package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
  194. package/dist/logs-BGrEUaEs.mjs +0 -383
  195. package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
  196. package/dist/native-android-D5qc3-_v.mjs +0 -226
  197. package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
  198. package/dist/plan-C4TjdPsR.mjs +0 -260
  199. package/dist/prebuild-DYbucPXy.mjs +0 -212
  200. package/dist/preview-78a9kR_-.mjs +0 -1011
  201. package/dist/react-native-build-CtCccJtb.mjs +0 -239
  202. package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
  203. package/dist/remote-cache-OyOyVIS3.mjs +0 -526
  204. package/dist/result-CaJg5Iat.mjs +0 -186
  205. package/dist/server-expo-Bigriskl.mjs +0 -2
  206. package/dist/settings-BORNaaCO.mjs +0 -402
  207. package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
  208. package/dist/stage-KNTQopqv.mjs +0 -157
  209. package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
  210. package/dist/tailnet-Dh-qiYzG.mjs +0 -265
  211. package/dist/toolchain-BFkAcstd.mjs +0 -2
  212. package/dist/toolchain-DxSsNssu.mjs +0 -1657
  213. package/dist/trigger-9_USgmxz.mjs +0 -2
  214. package/dist/web-Dq-i3wzJ.mjs +0 -2
  215. package/dist/worktree-DpLdCHga.mjs +0 -2
  216. package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
  217. package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
@@ -1,42 +1,41 @@
1
- import { K as validateDeviceSlot, U as parseDeviceSlotOption, z as deviceSlotFileKey } from "./config-BYDxlMY3.mjs";
2
- import { C as iosSigningIdentitySha1Setting, I as projectSettingsContext, L as publicUrlSetting, N as metroWarmupUrlSetting, S as iosSigningIdentitySettingError, _ as iosLanHostSetting, a as SETTING_SHAPE_REMEDY, g as deviceReclaimIdleMinutesSetting, j as metroPortSetting, tt as tunnelModeSetting, v as iosLanHostSettingError, w as iosSigningIdentitySha1SettingError, x as iosSigningIdentitySetting } from "./settings-B717odTD.mjs";
3
- import { i as recordWorkspaceUse, w as workspaceLogsDir$1 } from "./workspace-state-DJt_MMvf.mjs";
4
- import { _ as stepTimer, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
5
- import { I as workspaceDevServerMode, t as NO_PROJECT_REFUSAL } from "./project-_phNIJfs.mjs";
6
- import { at as POOL_SETTING_REMEDY, dt as parkedMaxSetting } from "./android-Mz_Inn3w.mjs";
7
- import { At as createRunRecorder, It as statsProjectKey$1, Ot as startBuildProgress, kt as tapBuildLog, yt as NO_BUILD_PROGRESS } from "./budget-f7516Zk0.mjs";
8
- import { S as withNativeBuildRun, b as runCancellation, p as cancelledFailure, x as runCancellationSignal } from "./tailnet-Dh-qiYzG.mjs";
9
- import { d as optimizationBuildProfile, l as artifactCachePolicy } from "./errors-DzkMYh8Q.mjs";
10
- import { o as exitAfterFlush } from "./remote-cache-OyOyVIS3.mjs";
11
- import { d as simulatorRuntime, f as setRemoteLogSink, g as parseBuildMachineOption } from "./client-qQAaXSUs.mjs";
12
- import { i as createIosSimSnapshot } from "./ios-RkW4pnQf.mjs";
13
- import { r as DEFAULT_METRO_PORT } from "./app-install-BIKtMfPq.mjs";
14
- import { r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-k8dTIrbK.mjs";
15
- import { _ as COMPILATION_CACHE_NOT_RUN } from "./toolchain-DxSsNssu.mjs";
16
- import "./dev-client-DAWVIGBu.mjs";
17
- import { f as waitFlagConflict, o as leaseExpiryText } from "./device-lease-run-Cw2M4z51.mjs";
18
- import { r as hostedMetroSettings } from "./metro-gateway-CX9Xlkq2.mjs";
19
- import { i as writeDevicePlacement } from "./ios-state-CBLe1xYw.mjs";
20
- import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-B7SZsc2N.mjs";
21
- import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DPt0m9Nd.mjs";
22
- import { S as ownedSessionName, n as binOnPath } from "./device-remote-xRT0Vmo9.mjs";
23
- import { r as isEasBuildFailure } from "./eas-build-JyfqyHfC.mjs";
24
- import { t as didSetUpDevice } from "./device-BECOiufl.mjs";
1
+ import { m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
2
+ import { G as parseDeviceSlotOption, J as validateDeviceSlot, V as deviceSlotFileKey } from "./config-CYcBF478.mjs";
3
+ import { _ as stepTimer, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-B1UrjZHL.mjs";
4
+ import { i as recordWorkspaceUse } from "./workspace-state-Cjuigeeu.mjs";
5
+ import { C as iosSigningIdentitySha1Setting, L as projectSettingsContextAsync, N as metroWarmupUrlSetting, R as publicUrlSetting, S as iosSigningIdentitySettingError, _ as iosLanHostSetting, a as SETTING_SHAPE_REMEDY, g as deviceReclaimIdleMinutesSetting, j as metroPortSetting, rt as tunnelModeSetting, v as iosLanHostSettingError, w as iosSigningIdentitySha1SettingError, x as iosSigningIdentitySetting } from "./settings-CsJDEXgK.mjs";
6
+ import { L as workspaceDevServerMode, t as NO_PROJECT_REFUSAL } from "./project-BZNjmW_8.mjs";
7
+ import { H as tapBuildLog, In as runProcessOperation, Lt as binOnPath, M as NO_BUILD_PROGRESS, Pn as exitAfterFlush, U as createRunRecorder, V as startBuildProgress, Y as statsProjectKey$1, cn as DEFAULT_METRO_PORT, rr as ownedSessionName } from "./budget-Bs6SxxzO.mjs";
8
+ import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-DY_RLx3C.mjs";
9
+ import { ht as parkedMaxSetting, lt as POOL_SETTING_REMEDY } from "./android-DUYkNF4u.mjs";
10
+ import { i as createIosSimSnapshot } from "./ios-CpByZy12.mjs";
11
+ import { d as optimizationBuildProfile, l as artifactCachePolicy } from "./errors-ccaPc4ox.mjs";
12
+ import { t as COMPILATION_CACHE_NOT_RUN } from "./xcode-Zlx3qjEs.mjs";
13
+ import { d as simulatorRuntime, f as setRemoteLogSink } from "./client-UXD70ZbM.mjs";
14
+ import { i as parseBuildMachineOption } from "./selection-CSl9i5qU.mjs";
15
+ import { r as hostedMetroSettings } from "./metro-gateway-BMJNlj3E.mjs";
16
+ import { i as writeDevicePlacement } from "./ios-state-DvFX-K_l.mjs";
17
+ import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DF8VfT64.mjs";
18
+ import { f as waitFlagConflict, o as leaseExpiryText } from "./device-lease-run-C8raGFoP.mjs";
19
+ import { _ as resolveIosWait, a as deviceModelRefusal, b as resolveSimulatorAppFlag, c as iosProjectPathError, d as ownedSimFailure, g as resolveIosBuildSetup, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, r as createIosDeviceWaitRun, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-Dlu37g6H.mjs";
20
+ import { r as isEasBuildFailure } from "./eas-build-BomfRnFT.mjs";
21
+ import { r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-Dg1Q7tfF.mjs";
22
+ import "./dev-client-UOeESKm6.mjs";
23
+ import { t as didSetUpDevice } from "./device-ExJq8Ei7.mjs";
25
24
  import { t as unsupportedPlan } from "./project-plan-BPwbLwQu.mjs";
26
- import { _ as resolveIosWait, a as deviceModelRefusal, b as resolveSimulatorAppFlag, c as iosProjectPathError, d as ownedSimFailure, g as resolveIosBuildSetup, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, r as createIosDeviceWaitRun, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-CwjbFs9H.mjs";
27
- import { a as lastBuildRecord, o as reportIosResult, s as writeLastBuild } from "./ios-project-K9hY_Jab.mjs";
28
- import { t as acquireIosArtifact } from "./artifact-HSwkIWEQ.mjs";
29
- import { a as iosPlacementBudget, i as hostedIosSelectors, n as connectIosTarget, o as selectIosPlacement, r as hostedIosMetroNote, t as connectIosBackend } from "./remote-BiR6aYjy.mjs";
30
- import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, o as iosPoolNoCandidatesRefusal, r as iosDeviceBounds } from "./ios-device-D7pi2Sca.mjs";
31
- import { i as DEFAULT_DEPS, l as lanOriginUrlFor, s as chooseLanAddress, t as finishIosRun } from "./launch-C3qJ6Agb.mjs";
25
+ import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-CaFskB7_.mjs";
26
+ import { a as lastBuildRecord, o as reportIosResult, s as writeLastBuild } from "./ios-project-WuwwBdvW.mjs";
27
+ import { t as acquireIosArtifact } from "./artifact-B8T3S5gi.mjs";
28
+ import { a as iosPlacementBudget, i as hostedIosSelectors, n as connectIosTarget, o as selectIosPlacement, r as hostedIosMetroNote, t as connectIosBackend } from "./remote-ByYkXdGD.mjs";
29
+ import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, o as iosPoolNoCandidatesRefusal, r as iosDeviceBounds } from "./ios-device-CwFMehUS.mjs";
30
+ import { i as DEFAULT_DEPS, l as lanOriginUrlFor, s as chooseLanAddress, t as finishIosRun } from "./launch-Zq2mOSDy.mjs";
32
31
  import { basename, join } from "node:path";
33
- import { hostedIosStatus, parseMachine } from "@stim-cli/core/state";
34
32
  import { workspaceId } from "@stim-cli/core";
35
- import { InvalidArgumentError } from "commander";
33
+ import { hostedIosStatus, parseMachine } from "@stim-cli/core/state";
36
34
  import chalk from "chalk";
35
+ import { InvalidArgumentError } from "commander";
37
36
  //#region src/commands/ios/hosted.ts
38
37
  async function finishHostedIosRun({ target, d, artifact, root, slot, release, appMode, isExpo, metroCheck, metroPort, logsDir, fail, note, enterPhase, selectors, projectBundleId, ...report }) {
39
- const bundleId = artifact.bundleId ?? (d.readBundleId(artifact.path) || projectBundleId());
38
+ const bundleId = artifact.bundleId ?? (await d.readBundleId(artifact.path) || await projectBundleId());
40
39
  if (!bundleId) return fail({
41
40
  code: "STIM_INSTALL_FAILED",
42
41
  message: "The built app has no bundle identifier."
@@ -84,7 +83,7 @@ async function finishHostedIosRun({ target, d, artifact, root, slot, release, ap
84
83
  metroPort,
85
84
  mode: workspaceDevServerMode(root, isExpo),
86
85
  slot: launchSlotScope(root, slot),
87
- platformShared: siblingPlatformSlots(root, "ios", slot).length > 0
86
+ platformShared: (await siblingPlatformSlots(root, "ios", slot)).length > 0
88
87
  });
89
88
  if (evidence.fatal) return fail({
90
89
  code: "STIM_LAUNCH_FAILED",
@@ -156,7 +155,7 @@ async function planIos(opts, d) {
156
155
  code: "STIM_NO_PROJECT",
157
156
  ...selected.problem
158
157
  }, json);
159
- const context = projectSettingsContext(root, d);
158
+ const context = await projectSettingsContextAsync(root, d);
160
159
  const settings = d.resolveSettings(context);
161
160
  const project = await selected.load(settings);
162
161
  if (!project.plan) return refusePlan(unsupportedPlan("ios"), json);
@@ -169,17 +168,11 @@ async function planIos(opts, d) {
169
168
  }
170
169
  //#endregion
171
170
  //#region src/commands/ios.ts
172
- function writeNote(line) {
173
- console.error(line);
174
- }
175
- function writePhase(name, text) {
176
- console.error(phaseLine(name, text));
177
- }
178
171
  function iosCommand(program) {
179
172
  registerIos(program);
180
173
  }
181
174
  function registerIos(program, deps = {}) {
182
- program.command("ios").description("Build (or restore from the fingerprint cache), install and launch this workspace's app on its owned simulator. React Native and Expo Debug runs start the dev server when it is not running.").option("--eas-profile <name>", "Download a matching EAS development build; on a miss, print the build command without running it").option("--slot <name>", "Reusable device slot within this workspace (default: default)", parseDeviceSlotOption).option("--remote-build <value>", "Build on auto, local, or one named machine; a name refuses without fallback", parseBuildMachineOption).option("--json", "Emit the facts as a single JSON line on stdout; every other line goes to stderr").option("--plan", "Predict the next build without building, booting or installing: resolve the fingerprint, check the local then remote cache, and print the expected cache result and duration. Writes no Stim state.").option("--scheme <name>", "Shared Xcode app scheme to build; overrides automatic scheme selection, not the app URL scheme").option("--no-metro-check", "Skip the \"is this workspace's dev server running?\" check: do not start it, and build anyway").option("--no-build-cache", "Build fresh, ignoring cached artifacts (local and the project's build-cache provider); the fresh build still replaces the cache entry").option("--configuration <name>", "Xcode configuration to build (e.g. Release). A non-Debug configuration embeds the JS bundle and skips Metro entirely. Overrides the ios.configuration setting. Default: Debug").option("--device-type <name>", "Simulator model to create this workspace's owned sim as, exactly as `xcrun simctl list devicetypes` names it (e.g. \"iPad Pro 13-inch (M5)\"). Overrides the ios.deviceType setting for this invocation. A model no installed runtime can create refuses with STIM_BAD_ARG and prints the models they do offer.").option("--runtime <version>", "Simulator runtime to create this workspace's owned sim on, as a version (\"18.5\") or a runtime's full name (\"iOS 18.5\"); nothing else matches. Overrides the ios.runtime setting for this invocation. An unknown version refuses with STIM_BAD_ARG and prints the installed runtimes.").option("--simulator-app <app>", "Open the owned simulator in xcode, siniulator, or stim-desktop for this run, overriding the machine iosSimulatorApp setting. Also opens an already running simulator; local simulators only.").option("--device [udid]", "Build the iphoneos slice for a connected iPhone, install it, and launch it, instead of using this workspace's owned simulator. The phone can be cabled or paired over Wi-Fi. With no UDID, the first cabled device this workspace can lease is used, waiting for one that is busy; a Wi-Fi device is used only when no cabled one is connected and ready. In Debug the app is wired to this workspace's Metro over the LAN. Stim never creates, boots, or deletes a physical device.").option("--remote <target>", "Run on eas, proxy, or an approved Mac in remote.machines; named Macs never fall back locally. auto places on an approved Mac when this Mac is full or busy. local runs here, whatever ios.remote says.", (value) => {
175
+ program.command("ios").description("Build (or restore from the fingerprint cache), install and launch this workspace's app on its owned simulator. React Native and Expo Debug runs start the dev server when it is not running.").option("--eas-profile <name>", "Download a matching EAS development build; on a miss, print the build command without running it").option("--slot <name>", "Reusable device slot within this workspace (default: default)", parseDeviceSlotOption).option("--remote-build <value>", "Build on auto, local, or one named machine; a name refuses without fallback", parseBuildMachineOption).option("--json", "Emit the facts as a single JSON line on stdout; every other line goes to stderr").option("--plan", "Predict the next build without building, booting or installing: resolve the fingerprint, check the local then remote cache, and print the expected cache result and duration. Writes no Stim state.").option("--scheme <name>", "Shared Xcode app scheme to build; overrides automatic scheme selection, not the app URL scheme").option("--no-metro-check", "Skip the \"is this workspace's dev server running?\" check: do not start it, and build anyway").option("--no-build-cache", "Build fresh, ignoring cached artifacts (local and the project's build-cache provider); the fresh build still replaces the cache entry").option("--configuration <name>", "Xcode configuration to build (e.g. Release). A non-Debug configuration embeds the JS bundle and skips Metro entirely. Overrides the ios.configuration setting. Default: Debug").option("--device-type <name>", "Simulator model to create this workspace's owned sim as, exactly as `xcrun simctl list devicetypes` names it (e.g. \"iPad Pro 13-inch (M5)\"). Overrides the ios.deviceType setting for this invocation. A model no installed runtime can create refuses with STIM_BAD_ARG and prints the models they do offer.").option("--runtime <version>", "Simulator runtime to create this workspace's owned sim on, as a version (\"18.5\") or a runtime's full name (\"iOS 18.5\"); nothing else matches. Overrides the ios.runtime setting for this invocation. An unknown version refuses with STIM_BAD_ARG and prints the installed runtimes.").option("--simulator-app <app>", "Open the owned simulator in xcode, siniulator, or stim-desktop for this run, overriding the machine iosSimulatorApp setting. Also opens an already running simulator; local simulators only.").option("--device [udid]", "Build the iphoneos slice for a connected iPhone, install it, and launch it, instead of using this workspace's owned simulator. The phone can be cabled or paired over Wi-Fi. With no UDID, the first cabled device this workspace can lease is used, waiting for one that is busy; a Wi-Fi device is used only when no cabled one is connected and ready. In Debug the app is wired to this workspace's Metro over the LAN. Stim never creates, boots, or deletes a physical device.").option("--remote <target>", "Run on eas, proxy, or an approved Mac in remote.machines; named Macs never fall back locally. auto places on an approved Mac when this machine is full or busy. local runs here, whatever ios.remote says.", (value) => {
183
176
  if (parseMachine(value)) return value.trim();
184
177
  throw new InvalidArgumentError("expected eas, proxy, auto, local, or a remote Mac name");
185
178
  }).option("--wait <seconds>", "How long to wait for another workspace to release the phone it leases, before refusing with STIM_DEVICE_BUSY (default 60, 0 refuses at once). Without --device, wait for an owned-device slot (default 600 seconds; --no-wait refuses immediately).").option("--no-wait", "Install on a phone another workspace leases instead of waiting: this run takes no lease and, when both workspaces build the same app id, the install terminates the holder's running app. Without --device, refuse a full device cap or existing slot queue immediately.").action(async (opts) => {
@@ -190,38 +183,39 @@ function registerIos(program, deps = {}) {
190
183
  });
191
184
  return;
192
185
  }
193
- const completion = await runIosOperation((deps.findProjectRoot ?? DEFAULT_DEPS.findProjectRoot)(process.cwd()), {
186
+ const root = (deps.findProjectRoot ?? DEFAULT_DEPS.findProjectRoot)(process.cwd());
187
+ const { value: completion, interrupted } = await runProcessOperation(root ?? process.cwd(), (context) => runIosOperation(context, root, {
194
188
  ...opts,
195
189
  waitConflict: waitFlagConflict(process.argv)
196
- }, deps);
197
- if (!completion) process.exit(runCancellation() ? 130 : 1);
190
+ }, deps));
191
+ if (!completion) process.exit(interrupted ?? 1);
198
192
  else if (completion.uploadsAbandoned) exitAfterFlush(0);
199
193
  });
200
194
  }
201
- function runIosOperation(root, opts = {}, deps = {}, onFailure = () => {}) {
202
- const run = (progress) => runIos(root, opts, deps, progress, onFailure);
203
- return root ? withNativeBuildRun(root, {
195
+ function runIosOperation(context, root, opts = {}, deps = {}, onFailure = () => {}) {
196
+ const run = (progress) => runIos(context, root, opts, deps, progress, onFailure);
197
+ return root ? withNativeBuildRun(context, root, {
204
198
  command: "ios",
205
199
  platform: "ios",
206
200
  slot: opts.slot ?? "default"
207
201
  }, async (claim) => {
208
- recordWorkspaceUse(root);
202
+ recordWorkspaceUse(root, /* @__PURE__ */ new Date(), context.env, context.cwd);
209
203
  const progress = startBuildProgress({
210
204
  root,
211
205
  platform: "ios",
212
206
  slot: opts.slot ?? "default",
213
207
  claim,
214
- note: (line) => writeNote(chalk.dim(line))
208
+ note: (line) => context.output("stderr", `${chalk.dim(line)}\n`)
215
209
  });
216
210
  try {
217
211
  return await run(progress);
218
212
  } finally {
219
213
  progress.clear();
220
214
  }
221
- }, { write: (line) => writeNote(chalk.dim(phaseLine("lock", line))) }) : run();
215
+ }, { write: (line) => context.output("stderr", `${chalk.dim(phaseLine("lock", line))}\n`) }) : run();
222
216
  }
223
- function unlessCancelled(result) {
224
- if (!result.ok || !runCancellation()) return result;
217
+ function unlessCancelled(context, result) {
218
+ if (!result.ok || !runCancellation(context)) return result;
225
219
  return {
226
220
  ok: false,
227
221
  failure: {
@@ -312,7 +306,7 @@ function iosSlotDeps(d, slot) {
312
306
  }
313
307
  return d;
314
308
  }
315
- async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS, onFailure) {
309
+ async function runIos(context, projectRoot, opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS, onFailure) {
316
310
  const slot = validateDeviceSlot(opts.slot);
317
311
  let d = iosSlotDeps({
318
312
  ...DEFAULT_DEPS,
@@ -320,8 +314,9 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
320
314
  }, slot);
321
315
  const json = Boolean(opts.json);
322
316
  const metroCheck = opts.metroCheck !== false;
323
- const phase = writePhase;
324
- const note = writeNote;
317
+ const note = (line) => context.output("stderr", `${line}\n`);
318
+ const phase = (name, text) => note(phaseLine(name, text));
319
+ const emit = (line) => context.output("stdout", `${line}\n`);
325
320
  const started = d.now();
326
321
  const startedAt = new Date(started).toISOString();
327
322
  const elapsed = () => d.now() - started;
@@ -329,7 +324,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
329
324
  note(chalk.red(phaseLine("error", message)));
330
325
  note(chalk.dim(phaseLine("remedy", remedy)));
331
326
  note(chalk.red(phaseLine("failed", "STIM_NO_PROJECT")));
332
- if (json) console.log(JSON.stringify({
327
+ if (json) emit(JSON.stringify({
333
328
  code: "STIM_NO_PROJECT",
334
329
  message,
335
330
  remedy
@@ -352,7 +347,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
352
347
  const message = `Could not prepare this workspace's Stim state: ${error?.message || error}`;
353
348
  note(chalk.red(`${code}: ${message}`));
354
349
  note(chalk.dim("Check that STIM_HOME is writable and has free space. An EPERM on a directory you can write is a sandbox: allow writes to STIM_HOME, or run Stim with the sandbox disabled (`stim guide errors sandbox`)."));
355
- if (json) console.log(JSON.stringify({
350
+ if (json) emit(JSON.stringify({
356
351
  code,
357
352
  message,
358
353
  remedy: "Check that STIM_HOME is writable and has free space."
@@ -374,7 +369,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
374
369
  slot
375
370
  }
376
371
  }), progress);
377
- setRemoteLogSink((record) => logWriter().write(record));
372
+ setRemoteLogSink(context, (record) => logWriter().write(record));
378
373
  let leaseHandle = null;
379
374
  let stopLeaseSignals = null;
380
375
  const releaseLease = () => {
@@ -397,7 +392,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
397
392
  phases: () => progress.durations(),
398
393
  deviceSetup: () => progress.deviceSetupKnown()
399
394
  });
400
- const deviceWaitRun = createIosDeviceWaitRun(stats, progress, runCancellationSignal());
395
+ const deviceWaitRun = createIosDeviceWaitRun(stats, progress, runCancellationSignal(context));
401
396
  const recordRun = deviceWaitRun.record;
402
397
  let compilationCache = COMPILATION_CACHE_NOT_RUN;
403
398
  let reclaimed = [];
@@ -405,7 +400,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
405
400
  let devicePlacement;
406
401
  let builtConfiguration = null;
407
402
  const fail = ({ code, message, remedy = null, lines = [], logPath = null, build = null, lease, setup = false }) => {
408
- ({code, message, remedy, lines} = cancelledFailure("ios", {
403
+ ({code, message, remedy, lines} = cancelledFailure(context, "ios", {
409
404
  code,
410
405
  message
411
406
  }) ?? {
@@ -434,7 +429,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
434
429
  failed: true,
435
430
  durationMs: elapsed()
436
431
  });
437
- if (json) console.log(JSON.stringify({
432
+ if (json) emit(JSON.stringify({
438
433
  code,
439
434
  message: message ?? null,
440
435
  remedy: remedy ?? null,
@@ -456,7 +451,21 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
456
451
  });
457
452
  return null;
458
453
  };
459
- const settingsContext = projectSettingsContext(root, d);
454
+ const settingsSignal = runCancellationSignal(context) ?? context.signal;
455
+ let settingsContext;
456
+ try {
457
+ settingsContext = await projectSettingsContextAsync(root, d, {
458
+ env: context.env,
459
+ signal: settingsSignal
460
+ });
461
+ } catch (error) {
462
+ if (!settingsSignal.aborted) throw error;
463
+ return fail({
464
+ code: "STIM_CANCELLED",
465
+ message: "before resolving project settings",
466
+ setup: true
467
+ });
468
+ }
460
469
  const projectKey = statsProjectKey$1({
461
470
  root,
462
471
  commonDir: settingsContext.gitCommonDir,
@@ -470,7 +479,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
470
479
  platform: "ios"
471
480
  });
472
481
  const settings = d.resolveSettings(settingsContext);
473
- const setup = resolveIosBuildSetup(opts.remoteBuild, settings, (label, message) => note(phaseLine(label, chalk.yellow(message))));
482
+ const setup = resolveIosBuildSetup(opts.remoteBuild, settings, (label, message) => note(phaseLine(label, chalk.yellow(message))), context.env);
474
483
  if (!setup.ok) return fail(setup.failure);
475
484
  buildMachine = setup.buildMachine;
476
485
  const { optimizations } = setup;
@@ -532,7 +541,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
532
541
  }
533
542
  };
534
543
  const isExpo = integration.isExpo;
535
- const schemeRefusal = integration.schemeProblem(buildScheme, configuration);
544
+ const schemeRefusal = await integration.schemeProblem(buildScheme, configuration);
536
545
  if (schemeRefusal) return fail(schemeRefusal);
537
546
  const capabilityRefusal = iosProjectTargetRefusal(integration, {
538
547
  physical,
@@ -541,6 +550,8 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
541
550
  if (capabilityRefusal) return fail(capabilityRefusal);
542
551
  const remoteSelection = await selectIosPlacement({
543
552
  root,
553
+ env: context.env,
554
+ operation: context,
544
555
  slot,
545
556
  opts,
546
557
  settings,
@@ -603,10 +614,10 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
603
614
  const hostedTarget = connected.target;
604
615
  try {
605
616
  const simSnapshot = createIosSimSnapshot();
606
- const budget = await iosPlacementBudget(d, root, note, Boolean(hostedTarget), remoteSelection.budget, simSnapshot);
617
+ const budget = await iosPlacementBudget(d, root, note, Boolean(hostedTarget), remoteSelection.budget, simSnapshot, context.env);
607
618
  reclaimed = budget.reclaimed;
608
619
  if (budget.refusal) return fail(budget.refusal);
609
- const backendConnection = await connectIosBackend(root, remoteBackend, opts.deviceType, d);
620
+ const backendConnection = await connectIosBackend(root, remoteBackend, opts.deviceType, d, context.env, context);
610
621
  if ("failure" in backendConnection) return fail(backendConnection.failure);
611
622
  const remoteDevice = backendConnection.remote;
612
623
  const remoteArch = hostedTarget ? hostedTarget.choice.architecture : backendConnection.arch;
@@ -615,10 +626,11 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
615
626
  checkDeviceCapacity: remoteDevice.checkDeviceCapacity,
616
627
  ensureOwnedDevice: remoteDevice.ensureOwnedDevice,
617
628
  ensureBooted: remoteDevice.ensureBooted,
618
- installIosApp: remoteDevice.installIosApp,
619
- launchIosApp: remoteDevice.launchIosApp
629
+ installIosApp: async (args) => remoteDevice.installIosApp(args),
630
+ launchIosApp: async (args) => remoteDevice.launchIosApp(args)
620
631
  };
621
632
  const easBuild = await d.resolveEasDevelopmentBuild({
633
+ context,
622
634
  root,
623
635
  platform: "ios",
624
636
  profile: opts.easProfile,
@@ -626,14 +638,26 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
626
638
  isExpo,
627
639
  physical,
628
640
  selectors: [opts.scheme, opts.configuration],
629
- buildCache: opts.buildCache
641
+ buildCache: opts.buildCache,
642
+ env: context.env,
643
+ signal: settingsSignal
644
+ }).catch((error) => {
645
+ const cancelled = cancelledFailure(context, "ios", {
646
+ code: "STIM_CANCELLED",
647
+ message: "during EAS lookup"
648
+ });
649
+ if (cancelled) return {
650
+ ok: false,
651
+ ...cancelled
652
+ };
653
+ throw error;
630
654
  });
631
655
  if (isEasBuildFailure(easBuild)) return fail(easBuild);
632
- const registerProject = () => d.upsertProject(root, {
633
- bundleId: integration.bundleId() ?? void 0,
656
+ const registerProject = async () => d.upsertProject(root, {
657
+ bundleId: await integration.bundleId() ?? void 0,
634
658
  isExpo
635
659
  });
636
- if (remoteBackend !== "eas") registerProject();
660
+ if (remoteBackend !== "eas") await registerProject();
637
661
  const proj = d.getProject(root);
638
662
  const limits = d.getConcurrencyLimits();
639
663
  let physicalDevice = null;
@@ -643,13 +667,13 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
643
667
  root,
644
668
  platform: "ios",
645
669
  idLabel: "udid",
646
- list: () => iosPoolCandidates(d.listIosDevices()).map((entry) => ({
670
+ list: async () => iosPoolCandidates(await d.listIosDevices()).map((entry) => ({
647
671
  id: entry.udid,
648
672
  name: entry.name,
649
673
  fallback: isWirelessIosDevice(entry)
650
674
  })),
651
- noCandidates: () => {
652
- const resolved = iosPoolNoCandidatesRefusal(d.listIosDevices());
675
+ noCandidates: async () => {
676
+ const resolved = iosPoolNoCandidatesRefusal(await d.listIosDevices());
653
677
  return {
654
678
  message: resolved.error,
655
679
  remedy: resolved.remedy
@@ -672,7 +696,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
672
696
  };
673
697
  wireless = pooled.candidate.fallback === true;
674
698
  } else if (physical) {
675
- const resolved = resolveIosPhysicalDevice(typeof deviceFlag === "string" ? deviceFlag : null, d.listIosDevices());
699
+ const resolved = resolveIosPhysicalDevice(typeof deviceFlag === "string" ? deviceFlag : null, await d.listIosDevices());
676
700
  if (!resolved.udid) return fail({
677
701
  code: "STIM_NO_DEVICE",
678
702
  message: resolved.error,
@@ -769,6 +793,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
769
793
  async function prepareMetro() {
770
794
  if (metroCheck) {
771
795
  const gate = await ensureDevServer({
796
+ env: context.env,
772
797
  root,
773
798
  port: metroPort,
774
799
  settings: hostedMetroSettings(settings, Boolean(hostedTarget)),
@@ -792,7 +817,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
792
817
  metroPort = gate.port;
793
818
  devServer = gate.devServer;
794
819
  } else {
795
- const pin = metroPortSetting(settings);
820
+ const pin = metroPortSetting(settings, context.env);
796
821
  if (pin.error) return {
797
822
  ok: false,
798
823
  error: {
@@ -815,6 +840,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
815
840
  if (remoteDevice && metroPort !== null) {
816
841
  const reachable = await d.ensureMetroReachable({
817
842
  ctx: remoteDevice.ctx,
843
+ env: context.env,
818
844
  metroPort,
819
845
  isExpo,
820
846
  tunnelMode: tunnelModeSetting(settings) ?? void 0,
@@ -877,6 +903,21 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
877
903
  return null;
878
904
  }
879
905
  let artifact = null;
906
+ const reportRunFailure = (error) => {
907
+ const cancelled = cancelledFailure(context, "ios", {
908
+ code: "STIM_CANCELLED",
909
+ message: "while finishing the run"
910
+ });
911
+ if (cancelled) return fail({
912
+ ...cancelled,
913
+ build: artifact?.failureFields
914
+ });
915
+ recordRun({
916
+ failed: true,
917
+ durationMs: elapsed()
918
+ });
919
+ throw error;
920
+ };
880
921
  try {
881
922
  const boot = () => physicalDevice ? Promise.resolve({
882
923
  ok: true,
@@ -899,6 +940,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
899
940
  root,
900
941
  platform: "ios",
901
942
  sessionName: ownedSessionName(remoteDevice.ctx.label),
943
+ operation: context,
902
944
  startedAt: new Date(d.now()).toISOString(),
903
945
  deviceType: remoteDevice.ctx.deviceType ?? null,
904
946
  boot,
@@ -924,13 +966,15 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
924
966
  hostArch: d.hostSimulatorArch(),
925
967
  configuration
926
968
  });
927
- const acquiredArtifact = unlessCancelled(await acquireIosArtifact({
969
+ const acquiredArtifact = unlessCancelled(context, await acquireIosArtifact({
970
+ context,
928
971
  root,
929
972
  logFile,
930
973
  configuration,
931
974
  buildMachine,
932
975
  physical,
933
976
  recipe: integration.artifact({
977
+ operation: context,
934
978
  root,
935
979
  logFile,
936
980
  configuration,
@@ -983,6 +1027,7 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
983
1027
  artifact = acquiredArtifact.artifact;
984
1028
  compilationCache = artifact.cache.compilation;
985
1029
  if (hostedTarget) return await finishHostedIosRun({
1030
+ output: context.output,
986
1031
  target: hostedTarget,
987
1032
  projectBundleId: integration.bundleId,
988
1033
  root,
@@ -1043,12 +1088,14 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
1043
1088
  expiresAt: acquired.status === "leased" ? acquired.expiresAt : null
1044
1089
  });
1045
1090
  if (acquired.status === "leased") {
1046
- stopLeaseSignals = d.releaseLeaseOnSignal(releaseLease);
1091
+ stopLeaseSignals = d.releaseLeaseOnAbort(context, releaseLease);
1047
1092
  phase("lease", `${acquired.kind} lease on ${physicalDevice.udid} until ${leaseExpiryText(acquired.expiresAt, d.now())}`);
1048
1093
  }
1049
1094
  }
1050
1095
  try {
1051
1096
  return await finishIosRun({
1097
+ operation: context,
1098
+ output: context.output,
1052
1099
  projectBundleId: integration.bundleId,
1053
1100
  runtime: appRuntime,
1054
1101
  runtimePreparation,
@@ -1095,13 +1142,9 @@ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUIL
1095
1142
  releaseLease();
1096
1143
  }
1097
1144
  } catch (error) {
1098
- recordRun({
1099
- failed: true,
1100
- durationMs: elapsed()
1101
- });
1102
- throw error;
1145
+ return reportRunFailure(error);
1103
1146
  } finally {
1104
- artifact?.release();
1147
+ await artifact?.release();
1105
1148
  }
1106
1149
  } finally {
1107
1150
  await deviceWaitRun.finish();