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,50 +1,48 @@
1
- import { E as upsertProject, K as validateDeviceSlot, U as parseDeviceSlotOption, V as deviceSlotPlatforms, j as ownership_claim_exports, p as getProject, u as getConcurrencyLimits, z as deviceSlotFileKey } from "./config-BYDxlMY3.mjs";
2
- import { t as getExecutor } from "./exec-DqKo9GKJ.mjs";
3
- import { I as projectSettingsContext, K as resolveProjectSettings, L as publicUrlSetting, N as metroWarmupUrlSetting, V as remoteEasFallbackSetting, W as resolveCacheProviderConfig, a as SETTING_SHAPE_REMEDY, g as deviceReclaimIdleMinutesSetting, j as metroPortSetting, ot as detectProviders, q as resolveSettings, tt as tunnelModeSetting } from "./settings-B717odTD.mjs";
4
- import { _ as waitForBuild, g as releaseBuildLock, m as acquireBuildLock } from "./device-lease-BX1sJQ2E.mjs";
5
- import { c as writeWorkspaceState, f as emulatorLogFile, i as recordWorkspaceUse, r as readWorkspaceState$1, w as workspaceLogsDir$1 } from "./workspace-state-DJt_MMvf.mjs";
6
- import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
7
- import { I as workspaceDevServerMode, R as writeWorkspaceLaunch, c as projectShortcut, d as projectRegistry, r as findProjectRoot, t as NO_PROJECT_REFUSAL } from "./project-_phNIJfs.mjs";
8
- import { G as probeEmulatorSerial, J as resolveOwnedAvdSerial, O as listAdbDevices, U as physicalDeviceModel, Y as resolvePhysicalDevice, a as androidDeviceAbi, ht as configuredAndroidEmulatorApp, j as listInstalledSystemImages, tt as waitForBoot } from "./android-Mz_Inn3w.mjs";
9
- import { s as pidExists, u as resolveProjectMetro } from "./metro-DnCEjCxs.mjs";
10
- import { F as acquireBuildSlot, L as releaseBuildSlot } from "./workspaces-C36s2jb9.mjs";
11
- import { At as createRunRecorder, Ft as recordRunStats, It as statsProjectKey$1, Nt as recordCapacityRefusal, Ot as startBuildProgress, jt as readRunEstimates, kt as tapBuildLog, t as budgetGate, yt as NO_BUILD_PROGRESS } from "./budget-f7516Zk0.mjs";
12
- import { S as withNativeBuildRun, b as runCancellation, p as cancelledFailure, x as runCancellationSignal } from "./tailnet-Dh-qiYzG.mjs";
13
- import { r as createNdjsonWriter } from "./ndjson-GOnbyvso.mjs";
14
- import { f as resolveEasCliBin, i as checkEasAuth, m as uploadRemote, p as resolveRemote } from "./remote-cache-OyOyVIS3.mjs";
15
- import { f as setRemoteLogSink, g as parseBuildMachineOption, y as resolveBuildPlacement } from "./client-qQAaXSUs.mjs";
16
- import { c as startDevServer } from "./start-BWqzODpb.mjs";
17
- import { d as verifyAndroidReleaseLaunch, f as verifyLaunch } from "./launch-verify-B6Q8hZP-.mjs";
18
- import { b as launchAndroidApp, g as installAndroidApp, r as DEFAULT_METRO_PORT, t as ADB_INSTALL_TIMEOUT_MS, x as launchAndroidReleaseApp } from "./app-install-BIKtMfPq.mjs";
19
- import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-k8dTIrbK.mjs";
20
- import { n as devicePlacementRecord } from "./placement-log-MOfPVgaM.mjs";
21
- import { t as CCACHE_NOT_RUN } from "./ccache-zdKiYQ3E.mjs";
22
- import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-CBUAcRyQ.mjs";
23
- import { S as pooledAndroidDevice, a as PLATFORM, b as noDeviceDiagnostic, g as dumpApkManifest, h as displayPath, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme } from "./support-DMTqj3Hm.mjs";
24
- import { r as resolveAndroidRunPlan, t as androidDeviceSelectorRefusal } from "./plan-C4TjdPsR.mjs";
25
- import { t as acquireAndroidArtifact } from "./artifact-D3czlUvT.mjs";
26
- import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnSignal } from "./device-lease-run-Cw2M4z51.mjs";
27
- import { a as reportAndroidResult, i as persistLastBuild, n as finishAndroidUpload } from "./result-CaJg5Iat.mjs";
28
- import { r as hostedMetroSettings } from "./metro-gateway-CX9Xlkq2.mjs";
29
- import { a as writeHostedAndroid, i as writeDevicePlacement, t as readHostedAndroid } from "./ios-state-CBLe1xYw.mjs";
30
- import { a as refusePlan, c as devicePlacementLine, i as printPlan, n as planFlagRefusal, o as checkEasFallback, s as automaticDevicePlacement } from "./build-plan-B7SZsc2N.mjs";
31
- import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-C3MHGld1.mjs";
32
- import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DPt0m9Nd.mjs";
33
- import { S as ownedSessionName, a as ensureMetroReachable, c as remoteAndroidDeps, n as binOnPath, o as ensureRemoteBootOwned, u as resolveRemoteContext } from "./device-remote-xRT0Vmo9.mjs";
34
- import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-JyfqyHfC.mjs";
35
- import { n as verifyCollectorOwnership } from "./ownership-DCtw_2IA.mjs";
36
- import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-BECOiufl.mjs";
37
- import { t as selectFromPool } from "./device-pool-Bf-pOhSw.mjs";
38
- import { r as finishAndroidRun } from "./launch-F4sOqAhB.mjs";
1
+ import { f as ownership_claim_exports, t as getExecutor } from "./exec-_UbtCQcG.mjs";
2
+ import { m as workspaceLogsDir$1, t as emulatorLogFile } from "./paths-DQtTgsBf.mjs";
3
+ import { E as upsertProject, G as parseDeviceSlotOption, J as validateDeviceSlot, U as deviceSlotPlatforms, V as deviceSlotFileKey, p as getProject, u as getConcurrencyLimits } from "./config-CYcBF478.mjs";
4
+ import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-B1UrjZHL.mjs";
5
+ import { d as writeWorkspaceState, i as recordWorkspaceUse, r as readWorkspaceState$1 } from "./workspace-state-Cjuigeeu.mjs";
6
+ import { G as resolveCacheProviderConfig, H as remoteEasFallbackSetting, J as resolveProjectSettingsAsync, L as projectSettingsContextAsync, N as metroWarmupUrlSetting, R as publicUrlSetting, Y as resolveSettings, a as SETTING_SHAPE_REMEDY, ct as detectProviders, g as deviceReclaimIdleMinutesSetting, j as metroPortSetting, rt as tunnelModeSetting } from "./settings-CsJDEXgK.mjs";
7
+ import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunch } from "./project-BZNjmW_8.mjs";
8
+ import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
9
+ import { f as resolveProjectMetro, l as pidExists } from "./metro-DEXpIhHC.mjs";
10
+ import { Bn as checkEasAuth, Bt as ensureMetroReachable, Cn as launchAndroidApp, Gt as resolveRemoteContext, H as tapBuildLog, In as runProcessOperation, J as recordRunStats, Jn as resolveRemote, K as recordCapacityRefusal, Lt as binOnPath, M as NO_BUILD_PROGRESS, Pn as exitAfterFlush, U as createRunRecorder, Ut as remoteAndroidDeps, V as startBuildProgress, Vt as ensureRemoteBootOwned, W as readRunEstimates, Y as statsProjectKey$1, Yn as uploadRemote, cn as DEFAULT_METRO_PORT, in as verifyLaunch, qn as resolveEasCliBin, rn as verifyAndroidReleaseLaunch, rr as ownedSessionName, sn as ADB_INSTALL_TIMEOUT_MS, t as budgetGate, wn as launchAndroidReleaseApp, yn as installAndroidApp } from "./budget-Bs6SxxzO.mjs";
11
+ import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-DY_RLx3C.mjs";
12
+ import { F as acquireBuildSlot, L as releaseBuildSlot } from "./workspaces-BccMFmGQ.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-BzVfHSrY.mjs";
14
+ import { $ as resolvePhysicalDevice, P as listInstalledSystemImages, Q as resolveOwnedAvdSerialAsync, Y as probeEmulatorSerial, a as androidDeviceAbi, it as waitForBoot, k as listAdbDevices, ot as configuredAndroidEmulatorApp, q as physicalDeviceModel } from "./android-DUYkNF4u.mjs";
15
+ import { t as CCACHE_NOT_RUN } from "./ccache-BJRZ9pG3.mjs";
16
+ import { f as setRemoteLogSink } from "./client-UXD70ZbM.mjs";
17
+ import { i as parseBuildMachineOption, s as resolveBuildPlacement } from "./selection-CSl9i5qU.mjs";
18
+ import { r as hostedMetroSettings } from "./metro-gateway-BMJNlj3E.mjs";
19
+ import { a as writeHostedAndroid, i as writeDevicePlacement, t as readHostedAndroid } from "./ios-state-DvFX-K_l.mjs";
20
+ import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-Bw-honsd.mjs";
21
+ import { n as verifyCollectorOwnership } from "./ownership-DEmM5vhh.mjs";
22
+ import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DF8VfT64.mjs";
23
+ import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-C8raGFoP.mjs";
24
+ import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-CMlqEcvw.mjs";
25
+ import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-BomfRnFT.mjs";
26
+ import { c as startDevServer } from "./start-7lpH7hmN.mjs";
27
+ import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-Dg1Q7tfF.mjs";
28
+ import { n as devicePlacementRecord } from "./placement-log-BqGbTa61.mjs";
29
+ import { S as pooledAndroidDevice, a as PLATFORM, b as noDeviceDiagnostic, g as dumpApkManifest, h as displayPath, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme } from "./support-67vraa1Q.mjs";
30
+ import { t as acquireAndroidArtifact } from "./artifact-DAuZ-FNU.mjs";
31
+ import { a as reportAndroidResult, c as resolveAndroidRunPlan, i as persistLastBuild, n as finishAndroidUpload, o as androidDeviceSelectorRefusal } from "./result-DNiS-tTP.mjs";
32
+ import { n as automaticDevicePlacement, r as devicePlacementLine, t as checkEasFallback } from "./eas-fallback-DJwZpy0c.mjs";
33
+ import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-ExJq8Ei7.mjs";
34
+ import { t as selectFromPool } from "./device-pool-DMRpVX9a.mjs";
35
+ import { r as finishAndroidRun } from "./launch-CD1yVc7U.mjs";
39
36
  import { t as unsupportedPlan } from "./project-plan-BPwbLwQu.mjs";
37
+ import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-CaFskB7_.mjs";
40
38
  import { basename, join } from "node:path";
41
- import { hostedAndroidStatus, parseMachine } from "@stim-cli/core/state";
42
- import { loadCacheProvider } from "@stim-cli/cache";
43
39
  import { workspaceId } from "@stim-cli/core";
44
- import { InvalidArgumentError } from "commander";
40
+ import { hostedAndroidStatus, parseMachine } from "@stim-cli/core/state";
45
41
  import chalk from "chalk";
42
+ import { InvalidArgumentError } from "commander";
43
+ import { loadCacheProvider } from "@stim-cli/cache";
46
44
  //#region src/commands/android/remote.ts
47
- async function connectAndroidHosting({ root, slot, machine, release, appMode = release ? "release" : "development", metroCheck, selectors, read = readHostedAndroid, resolveSerial = resolveOwnedAvdSerial, prepare = prepareHostedAndroid }) {
45
+ async function connectAndroidHosting({ root, slot, machine, release, appMode = release ? "release" : "development", metroCheck, selectors, read = readHostedAndroid, resolveSerial = resolveOwnedAvdSerialAsync, prepare = prepareHostedAndroid }) {
48
46
  let recorded;
49
47
  try {
50
48
  recorded = read(root, slot)[slot];
@@ -69,12 +67,12 @@ async function connectAndroidHosting({ root, slot, machine, release, appMode = r
69
67
  if (local?.owned && local.avdName) {
70
68
  let running = true;
71
69
  try {
72
- const resolved = resolveSerial(local.avdName, { timeoutMs: 5e3 });
70
+ const resolved = await resolveSerial(local.avdName, { timeoutMs: 5e3 });
73
71
  running = Boolean(resolved.serial) || !resolved.notRunning && !resolved.missing;
74
72
  } catch {}
75
73
  if (running) return { failure: {
76
74
  code: "STIM_BAD_ARG",
77
- message: `This workspace's Android emulator for slot ${slot} runs on this Mac; run stim stop first.`
75
+ message: `This workspace's Android emulator for slot ${slot} runs on this machine; run stim stop first.`
78
76
  } };
79
77
  }
80
78
  try {
@@ -184,7 +182,7 @@ async function selectAndroidPlacement({ target: selected, automatic = automaticD
184
182
  //#endregion
185
183
  //#region src/commands/android/hosted.ts
186
184
  async function finishHostedAndroidRun({ target, artifact, root, slot = "default", release, appMode = release ? "release" : "development", isExpo, metroPort, logsDir, selectors, place, writePlacement, verifyLaunch: verify, writeLaunch, readApkPackage, resolveDevClientScheme, now, started, startedAt, fail, phase, enterPhase, out, recordBuild, ...report }) {
187
- const packageName = artifact.androidPackage ?? readApkPackage(artifact.apkPath);
185
+ const packageName = artifact.androidPackage ?? await readApkPackage(artifact.apkPath);
188
186
  if (!artifact.apkPath || !packageName) return fail("STIM_INSTALL_FAILED", "The built APK has no package identity.");
189
187
  const launchedAt = now();
190
188
  try {
@@ -198,7 +196,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
198
196
  ...appMode === "process" ? { mode: appMode } : {},
199
197
  metroPort,
200
198
  selectors,
201
- ...appMode === "development" && isExpo ? { devClientScheme: resolveDevClientScheme(root, artifact.apkPath) ?? void 0 } : {},
199
+ ...appMode === "development" && isExpo ? { devClientScheme: await resolveDevClientScheme(root, artifact.apkPath) ?? void 0 } : {},
202
200
  reserved: (placement) => writePlacement(root, slot, placement),
203
201
  note: out,
204
202
  enterPhase
@@ -222,7 +220,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
222
220
  metroPort,
223
221
  mode: workspaceDevServerMode(root, isExpo),
224
222
  slot: launchSlotScope(root, slot),
225
- platformShared: siblingPlatformSlots(root, "android", slot).length > 0
223
+ platformShared: (await siblingPlatformSlots(root, "android", slot)).length > 0
226
224
  });
227
225
  if (evidence.fatal) return fail("STIM_LAUNCH_FAILED", "Metro could not deliver the hosted app bundle.", "Run stim logs --errors and fix the bundle error.");
228
226
  launched = evidence.verified ? true : evidence.requested ? "bundling" : "unverified";
@@ -246,6 +244,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
246
244
  ok: true,
247
245
  facts: reportAndroidResult({
248
246
  ...report,
247
+ out,
249
248
  ...appMode === "process" ? { runtimeKind: "process" } : {},
250
249
  root,
251
250
  slot,
@@ -267,7 +266,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
267
266
  })
268
267
  };
269
268
  } catch (error) {
270
- return fail(error.code ?? "STIM_HOSTING_REFUSED", error.message, `Retry stim android --remote ${target.host.machine}, or run stim stop to reconcile the recorded placement.`);
269
+ return fail(error.code ?? "STIM_HOSTING_REFUSED", error.message, `Retry stim android --remote ${target.host.machine}, or run stim stop to reconcile the recorded placement.`, { lastBuildStatus: true });
271
270
  }
272
271
  }
273
272
  //#endregion
@@ -281,7 +280,7 @@ function runOnlyFlag(opts) {
281
280
  }
282
281
  async function planAndroid(opts, overrides = {}) {
283
282
  const deps = {
284
- findRoot: findProjectRoot,
283
+ findRoot: findProjectRoot$1,
285
284
  projectRegistry,
286
285
  ...overrides
287
286
  };
@@ -295,12 +294,13 @@ async function planAndroid(opts, overrides = {}) {
295
294
  code: "STIM_NO_PROJECT",
296
295
  ...selected.problem
297
296
  }, json);
298
- const resolved = resolveProjectSettings(root);
299
- const project = await selected.load(resolved);
300
- if (!project.plan) return refusePlan(unsupportedPlan("android"), json);
301
- const result = await project.plan(opts, resolved);
297
+ const resolved = await resolveProjectSettingsAsync(root);
298
+ const planner = (await selected.load(resolved)).plan;
299
+ if (!planner) return refusePlan(unsupportedPlan("android"), json);
300
+ const { value: result, interrupted } = await runProcessOperation(root, (operation) => planner(opts, resolved, operation));
302
301
  if ("platform" in result) printPlan(result, json);
303
302
  else refusePlan(result.refusal, json, result.lines);
303
+ if (interrupted) process.exitCode = interrupted;
304
304
  }
305
305
  //#endregion
306
306
  //#region src/commands/android.ts
@@ -308,38 +308,41 @@ function androidCommand(program) {
308
308
  registerAndroid(program);
309
309
  }
310
310
  function registerAndroid(program) {
311
- program.command("android").description("Build (or install from the shared cache), install and launch this workspace's Android app on its owned emulator. 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("--no-metro-check", "Skip the reserved-port Metro health check and do not start it (the app will load no bundle unless something else serves it)").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("--variant <name>", "Gradle variant to assemble and install (e.g. productionDebug on a flavored project); overrides the android.variant setting. A variant ending in Release embeds the JS bundle and skips Metro entirely. Default: debug").option("--system-image <id>", "Android system image to create this workspace's owned AVD from, as the sdkmanager package id (e.g. \"system-images;android-36;google_apis;arm64-v8a\"). Overrides the android.systemImage setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the installed images.").option("--device-profile <id>", "Hardware profile to create this workspace's owned AVD with, as an `avdmanager list device -c` id (e.g. \"pixel_fold\", \"pixel_tablet\"). Overrides the android.deviceProfile setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the available ids.").option("--device [serial]", "Install and launch on a connected physical device instead of this workspace's owned emulator. With no serial, the first connected device this workspace can lease is used. Stim never creates, boots, or deletes a physical device.").option("--remote <target>", "Run on eas, proxy, or a named approved Mac from remote.machines; auto places on an approved Mac when this Mac is full or busy; local runs here, whatever android.remote says", (value) => {
311
+ program.command("android").description("Build (or install from the shared cache), install and launch this workspace's Android app on its owned emulator. 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("--no-metro-check", "Skip the reserved-port Metro health check and do not start it (the app will load no bundle unless something else serves it)").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("--variant <name>", "Gradle variant to assemble and install (e.g. productionDebug on a flavored project); overrides the android.variant setting. A variant ending in Release embeds the JS bundle and skips Metro entirely. Default: debug").option("--system-image <id>", "Android system image to create this workspace's owned AVD from, as the sdkmanager package id (e.g. \"system-images;android-36;google_apis;arm64-v8a\"). Overrides the android.systemImage setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the installed images.").option("--device-profile <id>", "Hardware profile to create this workspace's owned AVD with, as an `avdmanager list device -c` id (e.g. \"pixel_fold\", \"pixel_tablet\"). Overrides the android.deviceProfile setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the available ids.").option("--device [serial]", "Install and launch on a connected physical device instead of this workspace's owned emulator. With no serial, the first connected device this workspace can lease is used. Stim never creates, boots, or deletes a physical device.").option("--remote <target>", "Run on eas, proxy, or a named approved Mac from remote.machines; auto places on an approved Mac when this machine is full or busy; local runs here, whatever android.remote says", (value) => {
312
312
  if (!parseMachine(value)) throw new InvalidArgumentError("expected eas, proxy, auto, local, or a tailnet machine name");
313
313
  return value;
314
314
  }).option("--wait <seconds>", "How long to wait for another workspace to release the device 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 device 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) => {
315
315
  if (opts.plan) return planAndroid(opts);
316
- const root = findProjectRoot(process.cwd());
316
+ const root = findProjectRoot$1(process.cwd());
317
317
  if (!root) {
318
318
  refuseNoProject({ json: Boolean(opts.json) });
319
319
  return;
320
320
  }
321
- if (!(await runAndroidOperation(root, {
321
+ const { value: result, interrupted } = await runProcessOperation(root, (context) => runAndroidOperation(context, root, {
322
322
  ...opts,
323
323
  waitConflict: waitFlagConflict(process.argv)
324
- })).ok) process.exit(runCancellation() ? 130 : 1);
324
+ }));
325
+ if (!result.ok) process.exit(interrupted ?? 1);
326
+ else if (result.uploadsAbandoned) exitAfterFlush(0);
325
327
  });
326
328
  }
327
- function runAndroidOperation(root, opts = {}) {
328
- return withNativeBuildRun(root, {
329
+ function runAndroidOperation(context, root, opts = {}) {
330
+ return withNativeBuildRun(context, root, {
329
331
  command: "android",
330
332
  platform: PLATFORM,
331
333
  slot: opts.slot ?? "default"
332
334
  }, async (claim) => {
333
- recordWorkspaceUse(root);
335
+ recordWorkspaceUse(root, /* @__PURE__ */ new Date(), context.env, context.cwd);
334
336
  const progress = startBuildProgress({
335
337
  root,
336
338
  platform: PLATFORM,
337
339
  slot: opts.slot ?? "default",
338
340
  claim,
339
- note: (line) => console.error(chalk.dim(line))
341
+ note: (line) => context.output("stderr", `${chalk.dim(line)}\n`)
340
342
  });
341
343
  try {
342
344
  return await runAndroid({
345
+ context,
343
346
  root,
344
347
  buildMachine: opts.remoteBuild,
345
348
  slot: opts.slot,
@@ -359,9 +362,12 @@ function runAndroidOperation(root, opts = {}) {
359
362
  } finally {
360
363
  progress.clear();
361
364
  }
362
- }, { write: (line) => console.error(chalk.dim(phaseLine("lock", line))) });
365
+ }, { write: (line) => context.output("stderr", `${chalk.dim(phaseLine("lock", line))}\n`) });
363
366
  }
364
- function resolveRunAndroidOptions({ root, json = false, remoteDevice: commandRemoteBackend = null, resolveSettingsFor = resolveSettings, resolveRemoteDeviceContext = resolveRemoteContext, remoteDeviceDeps: makeRemoteDeviceDeps = remoteAndroidDeps, resolveEasBin = resolveEasCliBin, ensureMetroReachable: ensureRemoteMetro = ensureMetroReachable, ensureRemoteBootOwned: ensureRemoteOwned = ensureRemoteBootOwned, detectRemoteProviders = detectProviders, metroCheck = true, useBuildCache = true, easProfile, resolveEasDevelopmentBuild: resolveEasBuild = resolveEasDevelopmentBuild, variant: variantFlag = null, systemImage: systemImageFlag = null, deviceProfile: deviceProfileFlag, device: deviceFlag = null, wait: waitFlag = void 0, waitConflict = false, acquireLease = acquireRunLease, makeRunLease = runLease, selectPool = selectFromPool, onLeaseSignal = releaseLeaseOnSignal, listDevices = listAdbDevices, deviceModel = physicalDeviceModel, deviceAbi = androidDeviceAbi, isEmulatorDevice = probeEmulatorSerial, readApkPackage = (apkPath) => apkPackage(dumpApkManifest(apkPath)), getLimits = getConcurrencyLimits, checkCapacity = checkDeviceCapacity, acquireSlot = acquireBuildSlot, releaseSlot = releaseBuildSlot, ensureDevice = ensureOwnedDevice, listSystemImages = listInstalledSystemImages, listDeviceProfiles, ensureDeviceBooted = ensureBooted, resolveAvdSerial = resolveOwnedAvdSerial, waitForDeviceBoot = waitForBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro = resolveProjectMetro, warmMetro: prewarmMetro = warmMetro, startServer = startDevServer, readState = readWorkspaceState$1, pidAlive = pidExists, verifyCollector = verifyCollectorOwnership, verifyLaunched = verifyLaunch, ensureStorage = ensureWorkspaceStorageSafely, acquireLock = acquireBuildLock, releaseLock = releaseBuildLock, waitForBuild: waitForBuild$1 = waitForBuild, easAuth = checkEasAuth, resolveRemoteBuild = resolveRemote, uploadRemoteBuild = uploadRemote, resolveCacheProvider = resolveCacheProviderConfig, loadCacheProviderModule = loadCacheProvider, install = installAndroidApp, launch = launchAndroidApp, launchRelease = launchAndroidReleaseApp, verifyReleaseLaunched = verifyAndroidReleaseLaunch, resolveDevClientScheme = androidDevClientScheme, spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), createWriter = createNdjsonWriter, writeLaunch = writeWorkspaceLaunch, writeState = writeWorkspaceState, recordBuild, recordStats = recordRunStats, recordCapacityRefusal: recordRefusal, readEstimates = readRunEstimates, now = Date.now, out = (line) => console.error(line), emit = (line) => console.log(line) } = {}) {
367
+ function resolveRunAndroidOptions({ context, root, json = false, remoteDevice: commandRemoteBackend = null, resolveSettingsFor = resolveSettings, resolveRemoteDeviceContext = resolveRemoteContext, remoteDeviceDeps: makeRemoteDeviceDeps = remoteAndroidDeps, resolveEasBin = resolveEasCliBin, ensureMetroReachable: ensureRemoteMetro = ensureMetroReachable, ensureRemoteBootOwned: ensureRemoteOwned = ensureRemoteBootOwned, detectRemoteProviders = detectProviders, metroCheck = true, useBuildCache = true, easProfile, resolveEasDevelopmentBuild: resolveEasBuild = resolveEasDevelopmentBuild, variant: variantFlag = null, systemImage: systemImageFlag = null, deviceProfile: deviceProfileFlag, device: deviceFlag = null, wait: waitFlag = void 0, waitConflict = false, acquireLease = acquireRunLease, makeRunLease = runLease, selectPool = selectFromPool, onLeaseSignal = releaseLeaseOnAbort, listDevices = listAdbDevices, deviceModel = physicalDeviceModel, deviceAbi = androidDeviceAbi, isEmulatorDevice = probeEmulatorSerial, readApkPackage = async (apkPath) => apkPackage(await dumpApkManifest(apkPath, { context })), getLimits = getConcurrencyLimits, checkCapacity = checkDeviceCapacity, acquireSlot = acquireBuildSlot, releaseSlot = releaseBuildSlot, ensureDevice = ensureOwnedDevice, listSystemImages = listInstalledSystemImages, listDeviceProfiles, ensureDeviceBooted = ensureBooted, resolveAvdSerial = resolveOwnedAvdSerialAsync, waitForDeviceBoot = waitForBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro = resolveProjectMetro, warmMetro: prewarmMetro = warmMetro, startServer = startDevServer, readState = readWorkspaceState$1, pidAlive = pidExists, verifyCollector = verifyCollectorOwnership, verifyLaunched = verifyLaunch, ensureStorage = ensureWorkspaceStorageSafely, acquireLock = acquireBuildLock, releaseLock = releaseBuildLock, waitForBuild: waitForBuild$1 = waitForBuild, easAuth = checkEasAuth, resolveRemoteBuild = resolveRemote, uploadRemoteBuild = uploadRemote, resolveCacheProvider = resolveCacheProviderConfig, loadCacheProviderModule = loadCacheProvider, install = installAndroidApp, launch = launchAndroidApp, launchRelease = launchAndroidReleaseApp, verifyReleaseLaunched = verifyAndroidReleaseLaunch, resolveDevClientScheme = (projectRoot, apkPath, options) => androidDevClientScheme(projectRoot, apkPath, {
368
+ ...options,
369
+ context
370
+ }), spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), createWriter = createNdjsonWriter, writeLaunch = writeWorkspaceLaunch, writeState = writeWorkspaceState, recordBuild, recordStats = recordRunStats, recordCapacityRefusal: recordRefusal, readEstimates = readRunEstimates, now = Date.now, out = (line) => context ? context.output("stderr", `${line}\n`) : console.error(line), emit = (line) => context ? context.output("stdout", `${line}\n`) : console.log(line) } = {}) {
365
371
  return {
366
372
  root,
367
373
  json,
@@ -498,6 +504,7 @@ function avdSetupFailure(error, root, logFile) {
498
504
  };
499
505
  }
500
506
  async function runAndroid(options = {}) {
507
+ const { context } = options;
501
508
  let { root, json, commandRemoteBackend, resolveSettingsFor, resolveRemoteDeviceContext, makeRemoteDeviceDeps, resolveEasBin, ensureRemoteMetro, ensureRemoteOwned, detectRemoteProviders, metroCheck, useBuildCache: requestedBuildCache, easProfile, resolveEasBuild, variantFlag, systemImageFlag, deviceProfileFlag, deviceFlag, waitFlag, waitConflict, acquireLease, makeRunLease, selectPool, onLeaseSignal, listDevices, deviceModel, deviceAbi, isEmulatorDevice, readApkPackage, getLimits, checkCapacity, acquireSlot, releaseSlot, ensureDevice, listSystemImages, listDeviceProfiles, ensureDeviceBooted, resolveAvdSerial, waitForDeviceBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro, prewarmMetro, startServer, readState, pidAlive, verifyCollector, verifyLaunched, ensureStorage, acquireLock, releaseLock, waitForBuild, easAuth, resolveRemoteBuild, uploadRemoteBuild, resolveCacheProvider, loadCacheProviderModule, install, launch, launchRelease, verifyReleaseLaunched, resolveDevClientScheme, spawn, kill, createWriter, writeLaunch, writeState, recordBuild, recordStats, recordCapacityRefusal: recordRefusal = recordCapacityRefusal, readEstimates, now, out, emit } = androidSlotOptions(options);
502
509
  const progress = options.progress ?? NO_BUILD_PROGRESS;
503
510
  const slot = validateDeviceSlot(options.slot);
@@ -553,7 +560,7 @@ async function runAndroid(options = {}) {
553
560
  slot
554
561
  }
555
562
  }), progress);
556
- setRemoteLogSink((entry) => writer.write(entry));
563
+ setRemoteLogSink(context, (entry) => writer.write(entry));
557
564
  const record = {
558
565
  fingerprint: null,
559
566
  cacheKey: null,
@@ -576,7 +583,7 @@ async function runAndroid(options = {}) {
576
583
  let ccacheActivity = CCACHE_NOT_RUN;
577
584
  let reclaimed = [];
578
585
  const fail = (code, message, remedy, { lastBuildStatus = false, setup = false, diagnostics = [], buildDiagnostics: rawDiagnostics = [], lines = [], logPath = null, lease } = {}) => {
579
- const cancellation = cancelledFailure(PLATFORM, {
586
+ const cancellation = cancelledFailure(context, PLATFORM, {
580
587
  code,
581
588
  message
582
589
  });
@@ -621,7 +628,17 @@ async function runAndroid(options = {}) {
621
628
  };
622
629
  };
623
630
  const settingsRoot = root;
624
- const settingsContext = projectSettingsContext(root);
631
+ const settingsSignal = runCancellationSignal(context) ?? context.signal;
632
+ let settingsContext;
633
+ try {
634
+ settingsContext = await projectSettingsContextAsync(root, void 0, {
635
+ env: context.env,
636
+ signal: settingsSignal
637
+ });
638
+ } catch (error) {
639
+ if (!settingsSignal.aborted) throw error;
640
+ return fail("STIM_CANCELLED", "before resolving project settings", null, { setup: true });
641
+ }
625
642
  const projectKey = statsProjectKey$1({
626
643
  root,
627
644
  commonDir: settingsContext.gitCommonDir,
@@ -648,6 +665,7 @@ async function runAndroid(options = {}) {
648
665
  const planned = resolveAndroidRunPlan({
649
666
  settings,
650
667
  settingsContext,
668
+ env: context.env,
651
669
  slot,
652
670
  easProfile,
653
671
  variant: variantFlag,
@@ -673,7 +691,7 @@ async function runAndroid(options = {}) {
673
691
  if (easProfile !== void 0 && !integration.eas) return fail("STIM_BAD_ARG", "This project integration does not support EAS builds.", "Use its local Android build recipe.");
674
692
  const deviceSlotWait = {
675
693
  automatic: plan.target.kind === "hosted" && plan.target.machine === "auto",
676
- signal: runCancellationSignal(),
694
+ signal: runCancellationSignal(context),
677
695
  waitMs: plan.deviceSlotWaitMs,
678
696
  displayName: basename(root),
679
697
  reclaimIdleMinutes: deviceReclaimIdleMinutesSetting(settings),
@@ -704,6 +722,8 @@ async function runAndroid(options = {}) {
704
722
  ...integration.eas && remoteEasFallbackSetting(settings) ? { eas: () => (options.checkEasFallback ?? checkEasFallback)({
705
723
  root,
706
724
  platform: PLATFORM,
725
+ env: context.env,
726
+ operation: context,
707
727
  slot,
708
728
  release,
709
729
  isExpo,
@@ -724,7 +744,10 @@ async function runAndroid(options = {}) {
724
744
  listSystemImages,
725
745
  listDeviceProfiles
726
746
  }),
727
- checkBudget: options.checkBudget,
747
+ checkBudget: (args) => (options.checkBudget ?? budgetGate)({
748
+ ...args,
749
+ env: context.env
750
+ }),
728
751
  note: out,
729
752
  phase,
730
753
  log: (entry) => writer.write(entry),
@@ -746,10 +769,13 @@ async function runAndroid(options = {}) {
746
769
  root,
747
770
  platform: PLATFORM,
748
771
  backend: remoteBackend,
772
+ env: context.env,
773
+ operation: context,
749
774
  easBin: resolveEasBin(root)?.file ?? null
750
775
  }) : null;
751
776
  if (remoteContext && "failed" in remoteContext) return fail(remoteContext.code ?? "STIM_NO_REMOTE_SESSION", remoteContext.failed, remoteContext.remedy);
752
777
  const easBuild = await resolveEasBuild({
778
+ context,
753
779
  root,
754
780
  platform: PLATFORM,
755
781
  profile: easProfile,
@@ -757,10 +783,22 @@ async function runAndroid(options = {}) {
757
783
  isExpo,
758
784
  physical,
759
785
  selectors: [variantFlag],
760
- buildCache: requestedBuildCache
786
+ buildCache: requestedBuildCache,
787
+ env: context.env,
788
+ signal: settingsSignal
789
+ }).catch((error) => {
790
+ const cancelled = cancelledFailure(context, PLATFORM, {
791
+ code: "STIM_CANCELLED",
792
+ message: "during EAS lookup"
793
+ });
794
+ if (cancelled) return {
795
+ ok: false,
796
+ ...cancelled
797
+ };
798
+ throw error;
761
799
  });
762
800
  if (isEasBuildFailure(easBuild)) return fail(easBuild.code, easBuild.message, easBuild.remedy);
763
- const appIds = integration.appIds();
801
+ const appIds = await integration.appIds();
764
802
  let androidPackage = appIds.androidPackage;
765
803
  record.bundleId = androidPackage;
766
804
  const registerProject = () => upsertProject(root, {
@@ -778,6 +816,7 @@ async function runAndroid(options = {}) {
778
816
  async function prepareMetro() {
779
817
  if (metroCheck) {
780
818
  const gate = await ensureDevServer({
819
+ env: context.env,
781
820
  root,
782
821
  port: reservedPort,
783
822
  settings: hostedMetroSettings(settings, Boolean(hostedTarget)),
@@ -806,7 +845,7 @@ async function runAndroid(options = {}) {
806
845
  prepared: { metroPort }
807
846
  };
808
847
  } else {
809
- const pin = metroPortSetting(settings);
848
+ const pin = metroPortSetting(settings, context.env);
810
849
  if (pin.error) return {
811
850
  ok: false,
812
851
  error: {
@@ -841,6 +880,7 @@ async function runAndroid(options = {}) {
841
880
  if (metroPort !== null) {
842
881
  const reachable = await ensureRemoteMetro({
843
882
  ctx: remoteDevice.ctx,
883
+ env: context.env,
844
884
  metroPort,
845
885
  isExpo,
846
886
  tunnelMode: tunnelModeSetting(settings) ?? void 0,
@@ -852,8 +892,9 @@ async function runAndroid(options = {}) {
852
892
  checkCapacity = remoteDevice.checkCapacity;
853
893
  ensureDevice = remoteDevice.ensureDevice;
854
894
  ensureDeviceBooted = remoteDevice.ensureDeviceBooted;
855
- install = remoteDevice.install;
856
- launch = remoteDevice.launch;
895
+ const remote = remoteDevice;
896
+ install = async (args) => remote.install(args);
897
+ launch = async (args) => remote.launch(args);
857
898
  }
858
899
  const emuLog = emulatorLogFile(root);
859
900
  const limits = getLimits();
@@ -901,7 +942,7 @@ async function runAndroid(options = {}) {
901
942
  });
902
943
  } else {
903
944
  if (!remoteDevice) try {
904
- configuredAndroidEmulatorApp();
945
+ await configuredAndroidEmulatorApp();
905
946
  } catch (err) {
906
947
  return fail("STIM_BAD_ARG", err.message, "Run `stim settings set androidEmulatorApp emulator` or `stim settings set androidEmulatorApp stim-desktop`.");
907
948
  }
@@ -962,6 +1003,7 @@ async function runAndroid(options = {}) {
962
1003
  root,
963
1004
  platform: PLATFORM,
964
1005
  sessionName: ownedSessionName(remoteDevice.ctx.label),
1006
+ operation: context,
965
1007
  startedAt: new Date(now()).toISOString(),
966
1008
  boot,
967
1009
  createdSessionId: remoteDevice.createdSessionId,
@@ -993,10 +1035,12 @@ async function runAndroid(options = {}) {
993
1035
  bundleUrl: metroWarmupUrlSetting(settings, "android")
994
1036
  });
995
1037
  const acquiredArtifact = await acquireAndroidArtifact({
1038
+ context,
996
1039
  root,
997
1040
  buildLog,
998
1041
  writer,
999
1042
  recipe: integration.artifact({
1043
+ operation: context,
1000
1044
  root,
1001
1045
  buildLog,
1002
1046
  writer,
@@ -1058,7 +1102,7 @@ async function runAndroid(options = {}) {
1058
1102
  ccacheActivity = artifact.ccache;
1059
1103
  androidPackage = artifact.androidPackage;
1060
1104
  record.appPath = apkPath;
1061
- if (runCancellation()) return fail("STIM_CANCELLED", "before install");
1105
+ if (runCancellation(context)) return fail("STIM_CANCELLED", "before install");
1062
1106
  if (hostedTarget) return finishHostedAndroidRun({
1063
1107
  target: hostedTarget,
1064
1108
  artifact,
@@ -1151,12 +1195,13 @@ async function runAndroid(options = {}) {
1151
1195
  expiresAt: acquired.status === "leased" ? acquired.expiresAt : null
1152
1196
  });
1153
1197
  if (acquired.status === "leased") {
1154
- stopLeaseSignals = onLeaseSignal(releaseLease);
1198
+ stopLeaseSignals = onLeaseSignal(context, releaseLease);
1155
1199
  phase("lease", `${acquired.kind} lease on ${device.serial} until ${leaseExpiryText(acquired.expiresAt, now())}`);
1156
1200
  }
1157
1201
  }
1158
1202
  try {
1159
1203
  return await finishAndroidRun({
1204
+ operation: context,
1160
1205
  runtime,
1161
1206
  runtimePreparation,
1162
1207
  slot,
@@ -1200,7 +1245,7 @@ async function runAndroid(options = {}) {
1200
1245
  phase,
1201
1246
  fail,
1202
1247
  readApkPackage,
1203
- readProjectPackage: () => integration.appIds().androidPackage,
1248
+ readProjectPackage: async () => (await integration.appIds()).androidPackage,
1204
1249
  packageRemedy: integration.packageRemedy,
1205
1250
  install,
1206
1251
  launch,
@@ -1244,13 +1289,18 @@ async function runAndroid(options = {}) {
1244
1289
  try {
1245
1290
  return await runFromFingerprint();
1246
1291
  } catch (error) {
1292
+ const cancelled = cancelledFailure(context, PLATFORM, {
1293
+ code: "STIM_CANCELLED",
1294
+ message: "while finishing the run"
1295
+ });
1296
+ if (cancelled) return fail(cancelled.code, cancelled.message, cancelled.remedy, { lastBuildStatus: true });
1247
1297
  recordRun({
1248
1298
  failed: true,
1249
1299
  durationMs: now() - started
1250
1300
  });
1251
1301
  throw error;
1252
1302
  } finally {
1253
- preparedArtifact?.release();
1303
+ await preparedArtifact?.release();
1254
1304
  }
1255
1305
  }
1256
1306
  //#endregion
@@ -1,6 +1,6 @@
1
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BTy8hZ0F.mjs";
2
- import { E as resolveVariant, T as resolveSystemImage, _ as findAapt, b as noDeviceDiagnostic, d as androidVariantSetting, f as apkDevClientFacts, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme, u as androidSystemImageSetting, x as parseXmltree, y as isReleaseVariant } from "./support-DMTqj3Hm.mjs";
3
- import { r as lastBuildRecord, t as androidFacts } from "./result-CaJg5Iat.mjs";
4
- import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-DCKZrNvV.mjs";
5
- import { a as killPreviousCollector, i as collectorLogFile, o as startCollector } from "./launch-F4sOqAhB.mjs";
1
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-B1UrjZHL.mjs";
2
+ import { E as resolveVariant, T as resolveSystemImage, _ as findAapt, b as noDeviceDiagnostic, d as androidVariantSetting, f as apkDevClientFacts, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme, u as androidSystemImageSetting, x as parseXmltree, y as isReleaseVariant } from "./support-67vraa1Q.mjs";
3
+ import { r as lastBuildRecord, t as androidFacts } from "./result-DNiS-tTP.mjs";
4
+ import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-BLgbNqox.mjs";
5
+ import { a as killPreviousCollector, i as collectorLogFile, o as startCollector } from "./launch-CD1yVc7U.mjs";
6
6
  export { NO_DEVICE, NO_FINGERPRINT, androidDevClientScheme, androidFacts, androidSystemImageSetting, androidVariantSetting, apkDevClientFacts, apkPackage, collectorLogFile, androidCommand as default, displayPath, dumpApkManifest, findAapt, formatDuration, isReleaseVariant, killPreviousCollector, lastBuildRecord, noDeviceDiagnostic, parseXmltree, phaseLine, registerAndroid, resolveSystemImage, resolveVariant, runAndroid, runAndroidOperation, shortHash, startCollector };