stim 1.20.2 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +141 -8
  2. package/dist/acquire-artifact-Co2k4f7O.mjs +171 -0
  3. package/dist/act-DsuqEkiM.mjs +2801 -0
  4. package/dist/activity-CMLmzp7o.mjs +1397 -0
  5. package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-DUFaTMdd.mjs} +23 -67
  6. package/dist/{android-DCKZrNvV.mjs → android-ByRMUoiJ.mjs} +157 -93
  7. package/dist/{android-Mz_Inn3w.mjs → android-C7sVmyI9.mjs} +299 -116
  8. package/dist/{android-Dlzxshgp.mjs → android-DGkNqa_c.mjs} +5 -5
  9. package/dist/{android-HqP1_vB_.mjs → android-DR5lZ2Az.mjs} +2 -2
  10. package/dist/android-cas-compiler.mjs +2 -2
  11. package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-ngferVq2.mjs} +7 -6
  12. package/dist/android-project-BCAAmMwz.mjs +12 -0
  13. package/dist/android-project-DVWyCbWU.d.mts +391 -0
  14. package/dist/api.d.mts +810 -64
  15. package/dist/api.mjs +782 -1
  16. package/dist/{artifact-HSwkIWEQ.mjs → artifact-8EY8SAPw.mjs} +240 -213
  17. package/dist/{artifact-D3czlUvT.mjs → artifact-DJPy518Y.mjs} +203 -164
  18. package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
  19. package/dist/{browser-web-CA-F1GQo.mjs → browser-web-Bcv99PBM.mjs} +194 -64
  20. package/dist/budget-Cvwn54qV.mjs +9285 -0
  21. package/dist/{build-DYDbfkk5.mjs → build-CabC3G23.mjs} +153 -98
  22. package/dist/build-cache-Dv7RN200.mjs +602 -0
  23. package/dist/build-plan-DUC8Ka9y.mjs +248 -0
  24. package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DSeQjt-Q.mjs} +2 -2
  25. package/dist/cache-manifest.mjs +1 -1
  26. package/dist/{ccache-zdKiYQ3E.mjs → ccache-Btwc36-I.mjs} +10 -9
  27. package/dist/{cdp-Dq_ypAlJ.mjs → cdp-3fwICjzi.mjs} +18 -5
  28. package/dist/{chrome-BnzZMqsR.mjs → chrome-Bbw689-6.mjs} +7 -4
  29. package/dist/{cli-CLP3diBm.mjs → cli-CHZa9Lvk.mjs} +20 -20
  30. package/dist/cli.mjs +1 -1
  31. package/dist/client-OyRoEuSr.mjs +1577 -0
  32. package/dist/collector-run.d.mts +4 -40
  33. package/dist/collector-run.mjs +9 -8
  34. package/dist/{command-output-BTy8hZ0F.mjs → command-output-gwpm28fu.mjs} +1 -1
  35. package/dist/config-DlrsduwG.mjs +955 -0
  36. package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-x9rN6bhs.mjs} +14 -4
  37. package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-1I9KZT1Y.mjs} +20 -5
  38. package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
  39. package/dist/{dev-client-DAWVIGBu.mjs → dev-client-BSDR5h3F.mjs} +2 -2
  40. package/dist/{device-BECOiufl.mjs → device-B-L3Fbxy.mjs} +91 -34
  41. package/dist/device-DklWZLqb.mjs +1068 -0
  42. package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-DK5_EwRS.mjs} +42 -13
  43. package/dist/device-host-worker.mjs +76 -79
  44. package/dist/{device-ios-COSi6oS1.mjs → device-ios-DoB6KFCO.mjs} +77 -51
  45. package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-xJPQ_QQG.mjs} +14 -26
  46. package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-BMkdsefq.mjs} +5 -5
  47. package/dist/{doctor-kfMBnUw6.mjs → doctor-Bo7BXLux.mjs} +271 -320
  48. package/dist/{doctor-CB8oZKCk.mjs → doctor-D5_EzwfA.mjs} +186 -91
  49. package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
  50. package/dist/doctor-fingerprint.mjs +19 -0
  51. package/dist/doctor-thjWAV0z.mjs +2 -0
  52. package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-N2wDotwQ.mjs} +40 -21
  53. package/dist/{eas-build-JyfqyHfC.mjs → eas-build-CwknaQYj.mjs} +53 -20
  54. package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-CSgAulr5.mjs} +41 -214
  55. package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-DlY_serQ.mjs} +230 -11
  56. package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-DBWO2rxE.mjs} +172 -82
  57. package/dist/exec-DEoAhcze.mjs +858 -0
  58. package/dist/exec-DnYc4HGH.d.mts +78 -0
  59. package/dist/{gc-qWOMdnER.mjs → gc-CXxN-4SE.mjs} +1091 -1029
  60. package/dist/gc-DnNDQyaP.mjs +3 -0
  61. package/dist/{guide-G9cAbVAc.mjs → guide-Br0LEfKy.mjs} +1165 -297
  62. package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-B-9f-jkd.mjs} +10 -8
  63. package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DZAPrcro.mjs} +34 -19
  64. package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
  65. package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-FIRx9X2f.mjs} +77 -43
  66. package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-_awYSpfv.mjs} +35 -22
  67. package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-BdzE668-.mjs} +49 -27
  68. package/dist/idle-C4cZ757K.d.mts +24 -0
  69. package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DDg3SdvY.mjs} +11 -10
  70. package/dist/ios-CDvlmUs7.d.mts +24 -0
  71. package/dist/{ios-BwVCF7oA.mjs → ios-Ds1clbIt.mjs} +8 -8
  72. package/dist/{ios-device-D7pi2Sca.mjs → ios-device--h_-8ENa.mjs} +51 -26
  73. package/dist/{ios-device-B5veSDDQ.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
  74. package/dist/{ios-RkW4pnQf.mjs → ios-hcBpnEGk.mjs} +200 -93
  75. package/dist/{ios-Ce7bc7br.mjs → ios-pm4nL6By.mjs} +160 -108
  76. package/dist/{ios-project-K9hY_Jab.mjs → ios-project-CZhKODF3.mjs} +13 -13
  77. package/dist/ios-signing-BtAffm0A.mjs +489 -0
  78. package/dist/{ios-state-CBLe1xYw.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
  79. package/dist/{ios-nOLJGVdy.mjs → ios-xtlRHaeB.mjs} +1 -1
  80. package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Bwhh4S7V.mjs} +30 -25
  81. package/dist/{launch-C3qJ6Agb.mjs → launch-BjxemNpK.mjs} +85 -543
  82. package/dist/{launch-F4sOqAhB.mjs → launch-CCzXlc8r.mjs} +91 -90
  83. package/dist/logs-BfwwadsZ.mjs +479 -0
  84. package/dist/logs-jTS_lHSo.mjs +248 -0
  85. package/dist/{macos-D7uDvO-z.mjs → macos-DVlSSyUg.mjs} +1 -1
  86. package/dist/macos-NfV2D7dO.mjs +694 -0
  87. package/dist/macos-run.mjs +1 -1
  88. package/dist/maintenance-run.mjs +123 -248
  89. package/dist/{metro-DnCEjCxs.mjs → metro-DiXtA3Ty.mjs} +107 -30
  90. package/dist/metro-gateway-CKZqKqx7.mjs +209 -0
  91. package/dist/{named-ports-4WopRPg-.mjs → named-ports-DkEzOfzO.mjs} +42 -90
  92. package/dist/native-android-CqgnOgsT.mjs +645 -0
  93. package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
  94. package/dist/native-gradle-inputs-Dnh84Zbd.mjs +211 -0
  95. package/dist/native-inputs-TRTTTRxt.mjs +91 -0
  96. package/dist/native-run-NwUuxbkg.mjs +276 -0
  97. package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-B7KIafpM.mjs} +11 -9
  98. package/dist/native-source-Y0yLhFyQ.mjs +133 -0
  99. package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-D_VOfFL7.mjs} +26 -18
  100. package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-BYDOHWLN.mjs} +104 -60
  101. package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
  102. package/dist/offload-worker.d.mts +59 -41
  103. package/dist/offload-worker.mjs +478 -115
  104. package/dist/operation-exec-BW0em61G.mjs +171 -0
  105. package/dist/{ownership-DCtw_2IA.mjs → ownership-C5fo5Edb.mjs} +3 -3
  106. package/dist/{page-DRHy329N.mjs → page-DBL2PiUU.mjs} +12 -5
  107. package/dist/paths-BsJMoPP2.mjs +12 -0
  108. package/dist/paths-DQtTgsBf.mjs +42 -0
  109. package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BnGgJRRZ.mjs} +5 -5
  110. package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-DIsMtN-d.mjs} +15 -11
  111. package/dist/{ports-DdSUicVo.mjs → ports-Cy1RkmuQ.mjs} +3 -3
  112. package/dist/prebuild-D4JoEAEs.mjs +484 -0
  113. package/dist/{project-_phNIJfs.mjs → project-wM_XFTvE.mjs} +65 -37
  114. package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-W1IuLXDt.mjs} +102 -20
  115. package/dist/pull-request-eODyIqZF.d.mts +124 -0
  116. package/dist/pull-requests.d.mts +2 -120
  117. package/dist/pull-requests.mjs +2 -2
  118. package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-6OZ7MSM7.mjs} +121 -72
  119. package/dist/{gradle-DSrXb6lG.mjs → react-native-build-Dvd8hC21.mjs} +292 -15
  120. package/dist/react-native-doctor-DsoSF1Y9.mjs +234 -0
  121. package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-4u1Rn-GR.mjs} +71 -39
  122. package/dist/{recordings-D0d5aQt0.mjs → recordings-CQmfzAh7.mjs} +12 -9
  123. package/dist/registration-BcRgF6Ox.mjs +51 -0
  124. package/dist/{reload-C8JhxjSh.mjs → reload-BzkYabB-.mjs} +94 -47
  125. package/dist/reload-D7AVlb8N.mjs +2 -0
  126. package/dist/{remote-BiR6aYjy.mjs → remote-DjGDmlTZ.mjs} +26 -18
  127. package/dist/result-D2Ykz_iD.mjs +435 -0
  128. package/dist/{run-BtPgpKks.mjs → run-DidHghD1.mjs} +5 -5
  129. package/dist/selection-DSMbWEX2.mjs +620 -0
  130. package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CafzuyFB.mjs} +3 -4
  131. package/dist/{server-command-CTtCkmcQ.mjs → server-command-C6QjeupS.mjs} +14 -7
  132. package/dist/{server-expo-DsguMGUF.mjs → server-expo-CrjB29pq.mjs} +54 -11
  133. package/dist/server-expo-D58c9L0M.mjs +2 -0
  134. package/dist/{settings-B717odTD.mjs → settings-C7O8A6ZI.mjs} +309 -119
  135. package/dist/settings-DpR-1Wnn.mjs +114 -0
  136. package/dist/settings-write-CzD60rOD.mjs +360 -0
  137. package/dist/settings.schema.json +176 -16
  138. package/dist/{simslim-CCr3rE-A.mjs → simslim-BNckWpXi.mjs} +14 -12
  139. package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-CbfmNgM6.mjs} +15 -20
  140. package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
  141. package/dist/stage-Bps5oius.mjs +200 -0
  142. package/dist/{start-TXeMmmO2.mjs → start-Br-oxqMD.mjs} +1 -1
  143. package/dist/start-EojN4WFz.mjs +1364 -0
  144. package/dist/{state-D1Icyjlu.mjs → state--smjFSTL.mjs} +55 -13
  145. package/dist/{state-CG_OFoaA.mjs → state-08I3hw3_.mjs} +3 -2
  146. package/dist/{stats-BoY5sEPU.mjs → stats-D3GerlFW.mjs} +7 -13
  147. package/dist/stats-report-BzaPrRm6.mjs +16 -0
  148. package/dist/{status-BTA7kKiQ.mjs → status-BRROykC8.mjs} +7 -5
  149. package/dist/status-EvrK72L2.mjs +2 -0
  150. package/dist/{status-WgFbkRzj.mjs → status-WBDajew2.mjs} +554 -452
  151. package/dist/{status-watch-C23ILtf9.mjs → status-watch-Bg_u-pwR.mjs} +222 -25
  152. package/dist/status-worker.d.mts +1 -0
  153. package/dist/status-worker.mjs +19 -0
  154. package/dist/stim-desktop-D5OGpYZM.mjs +112 -0
  155. package/dist/{stop-DR6VoDIk.mjs → stop-DTZ9uTw3.mjs} +2 -2
  156. package/dist/{stop-DPEhunlw.mjs → stop-Dky10AEJ.mjs} +33 -23
  157. package/dist/{stop-BNmBMi1F.mjs → stop-Mv6W9FAk.mjs} +137 -98
  158. package/dist/supervisor-run.d.mts +8 -17
  159. package/dist/supervisor-run.mjs +56 -28
  160. package/dist/{support-CwjbFs9H.mjs → support-CNioewsd.mjs} +14 -14
  161. package/dist/{support-DMTqj3Hm.mjs → support-yUiOjnVY.mjs} +20 -13
  162. package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
  163. package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
  164. package/dist/toolchain-BY8X8HXx.mjs +2 -0
  165. package/dist/toolchain-DpJMHq0n.mjs +876 -0
  166. package/dist/{trigger-CigAYjeL.mjs → trigger-Cbyc41d_.mjs} +21 -6
  167. package/dist/trigger-yb_nFzPF.mjs +2 -0
  168. package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-CA3TgT3-.mjs} +263 -156
  169. package/dist/web-CZ07gd77.mjs +2 -0
  170. package/dist/{web-BDBMxDpx.mjs → web-DKx6yoFA.mjs} +20 -14
  171. package/dist/web-run.mjs +13 -12
  172. package/dist/windows-report.d.mts +1 -0
  173. package/dist/windows-report.mjs +18 -0
  174. package/dist/windows-report.ps1 +43 -0
  175. package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-U08dEzhG.mjs} +62 -58
  176. package/dist/{workspaces-C36s2jb9.mjs → workspaces-CpANmBlq.mjs} +1723 -1286
  177. package/dist/{worktree-CgvJYJ-Q.mjs → worktree-CHecZ4Oq.mjs} +1097 -547
  178. package/dist/worktree-ZqZVjD9K.mjs +2 -0
  179. package/dist/xcode-BXn9-xYx.mjs +896 -0
  180. package/package.json +7 -5
  181. package/shim/android-audio/Main.java +24 -0
  182. package/shim/android-audio/README.md +17 -0
  183. package/shim/android-audio.jar +0 -0
  184. package/shim/android-optimizations.gradle +7 -5
  185. package/dist/activity-BSV745Kz.mjs +0 -629
  186. package/dist/api-qvOzWyfO.mjs +0 -154
  187. package/dist/api-run.mjs +0 -294
  188. package/dist/app-install-BIKtMfPq.mjs +0 -896
  189. package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
  190. package/dist/budget-f7516Zk0.mjs +0 -4106
  191. package/dist/build-facts-DcLv2HSd.d.mts +0 -111
  192. package/dist/cancellation-C_22VQTH.mjs +0 -24
  193. package/dist/client-qQAaXSUs.mjs +0 -1771
  194. package/dist/config-BYDxlMY3.mjs +0 -562
  195. package/dist/device-DuiPJQSn.mjs +0 -290
  196. package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
  197. package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
  198. package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
  199. package/dist/exec-DqKo9GKJ.mjs +0 -268
  200. package/dist/git-DDfFzkMm.mjs +0 -45
  201. package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
  202. package/dist/logs-BGrEUaEs.mjs +0 -383
  203. package/dist/macos-Ch5VJmcS.mjs +0 -584
  204. package/dist/metro-gateway-CX9Xlkq2.mjs +0 -103
  205. package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
  206. package/dist/native-android-D5qc3-_v.mjs +0 -226
  207. package/dist/native-gradle-inputs-BsLRrl7u.mjs +0 -349
  208. package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
  209. package/dist/plan-C4TjdPsR.mjs +0 -260
  210. package/dist/prebuild-DYbucPXy.mjs +0 -212
  211. package/dist/preview-78a9kR_-.mjs +0 -1011
  212. package/dist/react-native-build-CtCccJtb.mjs +0 -239
  213. package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
  214. package/dist/remote-cache-OyOyVIS3.mjs +0 -526
  215. package/dist/result-CaJg5Iat.mjs +0 -186
  216. package/dist/server-expo-Bigriskl.mjs +0 -2
  217. package/dist/settings-BORNaaCO.mjs +0 -402
  218. package/dist/settings-vk3mJGSm.d.mts +0 -13
  219. package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
  220. package/dist/stage-KNTQopqv.mjs +0 -157
  221. package/dist/start-BWqzODpb.mjs +0 -1116
  222. package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
  223. package/dist/swiftpm-macos-DRNVJWlb.mjs +0 -119
  224. package/dist/tailnet-Dh-qiYzG.mjs +0 -265
  225. package/dist/toolchain-BFkAcstd.mjs +0 -2
  226. package/dist/toolchain-DxSsNssu.mjs +0 -1657
  227. package/dist/trigger-9_USgmxz.mjs +0 -2
  228. package/dist/web-Dq-i3wzJ.mjs +0 -2
  229. package/dist/worktree-DpLdCHga.mjs +0 -2
  230. package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
  231. package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
@@ -0,0 +1,24 @@
1
+ import "./ios-CDvlmUs7.mjs";
2
+ import { StimContext } from "@stim-cli/core";
3
+ import { DeviceActivity } from "@stim-cli/core/state";
4
+ //#region src/commands/gc/idle.d.ts
5
+ interface IdleDevice {
6
+ kind: "ios" | "android";
7
+ id: string;
8
+ name: string;
9
+ project: string;
10
+ slot: string;
11
+ lastActivityAt: string | null;
12
+ idleForMs: number | null;
13
+ buildInProgress: boolean;
14
+ }
15
+ interface OwnedDeviceActivity {
16
+ kind: "ios" | "android";
17
+ id: string;
18
+ name: string;
19
+ project: string;
20
+ slot: string;
21
+ activity: DeviceActivity;
22
+ }
23
+ //#endregion
24
+ export { OwnedDeviceActivity as n, IdleDevice as t };
@@ -1,10 +1,11 @@
1
- import { B as deviceSlotKey, _ as loadConfig$1 } from "./config-BYDxlMY3.mjs";
2
- import { a as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-DJt_MMvf.mjs";
3
- import { o as formatLongDuration } from "./command-output-BTy8hZ0F.mjs";
4
- import { T as canonicalPath, b as teardownOwnedIosSim, v as teardownOwnedAvd } from "./workspaces-C36s2jb9.mjs";
5
- import { f as collectOwnedDeviceActivity, g as workspaceBuildInProgress } from "./budget-f7516Zk0.mjs";
6
- import { m as workspaceDeviceLastUseAt } from "./activity-BSV745Kz.mjs";
7
- import { d as listAllIosSims } from "./ios-RkW4pnQf.mjs";
1
+ import { V as deviceSlotKey, _ as loadConfig$1 } from "./config-DlrsduwG.mjs";
2
+ import { o as formatLongDuration } from "./command-output-gwpm28fu.mjs";
3
+ import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
4
+ import { A as workspaceBuildInProgress, T as collectOwnedDeviceActivity } from "./budget-Cvwn54qV.mjs";
5
+ import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
6
+ import { D as teardownOwnedAvd, k as teardownOwnedIosSim } from "./workspaces-CpANmBlq.mjs";
7
+ import { _ as workspaceDeviceLastUseAt } from "./activity-CMLmzp7o.mjs";
8
+ import { d as listAllIosSims } from "./ios-hcBpnEGk.mjs";
8
9
  import { DEVICE_IDLE_SHUTDOWN_KEY, DEVICE_RECLAIM_REASON, readDeviceIdleShutdowns } from "@stim-cli/core/state";
9
10
  //#region src/devices/idle-shutdown.ts
10
11
  const SIM_LIST_TIMEOUT_MS = 1e4;
@@ -62,15 +63,15 @@ function dueIdleDevices(root, idleMs, now = Date.now()) {
62
63
  * and records why. The caller holds the workspace's native-run lock, so no `ios` or `android` run is booting or
63
64
  * installing on them.
64
65
  */
65
- function shutDownIdleDevices(root, idleMs, log, now = Date.now(), { only, reason } = {}) {
66
+ async function shutDownIdleDevices(root, idleMs, log, now = Date.now(), { only, reason } = {}) {
66
67
  let shutDown = 0;
67
68
  for (const { device, idleForMs } of dueIdleDevices(root, idleMs, now)) {
68
69
  if (only && (device.kind !== only.kind || device.id !== only.id || device.project !== only.project || device.slot !== only.slot)) continue;
69
70
  const what = `${device.kind === "ios" ? "simulator" : "emulator"} ${device.name}`;
70
- const outcome = device.kind === "ios" ? teardownOwnedIosSim(device.id, {
71
+ const outcome = device.kind === "ios" ? await teardownOwnedIosSim(device.id, {
71
72
  label: device.name,
72
73
  workspace: root
73
- }) : teardownOwnedAvd(device.id, {
74
+ }) : await teardownOwnedAvd(device.id, {
74
75
  owner: {
75
76
  projectPath: device.project,
76
77
  slot: device.slot
@@ -0,0 +1,24 @@
1
+ import "./exec-DnYc4HGH.mjs";
2
+ import { StimContext } from "@stim-cli/core";
3
+ import { IOS_SIMULATOR_APPS, SettingScope, SettingsObject, WebViewport } from "@stim-cli/core/state";
4
+ import { ProcessRecord } from "@stim-cli/core/process-identity";
5
+ import { CacheProviderConfig } from "@stim-cli/cache";
6
+ //#region src/supervisor/state.d.ts
7
+ declare const MODE_BARE = "bare-inproc";
8
+ declare const MODE_EXPO = "expo-child";
9
+ type WorkspaceLaunchPlatform = "ios" | "android";
10
+ declare function clearWorkspaceSupervisor(root: string, expected?: ProcessRecord | null): boolean;
11
+ declare function clearExpoMetroTunnel(root: string): void;
12
+ declare function writePidFile(root: string, pid: number): string;
13
+ declare function readPidFile(root: string): number | null;
14
+ //#endregion
15
+ //#region src/workspace/settings.d.ts
16
+ interface AndroidLayout {
17
+ gradleRoot: string;
18
+ gradleRootRelative: string;
19
+ module: string;
20
+ moduleDir: string;
21
+ custom: boolean;
22
+ }
23
+ //#endregion
24
+ export { WorkspaceLaunchPlatform as a, readPidFile as c, MODE_EXPO as i, writePidFile as l, SettingsObject as n, clearExpoMetroTunnel as o, MODE_BARE as r, clearWorkspaceSupervisor as s, AndroidLayout as t };
@@ -1,9 +1,9 @@
1
- import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BTy8hZ0F.mjs";
2
- import { E as pickDevClientScheme, O as schemesFromInfoPlist } from "./app-install-BIKtMfPq.mjs";
3
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-k8dTIrbK.mjs";
4
- import { t as devClientScheme } from "./dev-client-DAWVIGBu.mjs";
5
- import { f as podAction, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, s as iosConfigurationSetting, t as appNameFromPath, u as isReleaseConfiguration, v as resolveRuntime } from "./support-CwjbFs9H.mjs";
6
- import { a as lastBuildRecord, i as iosFacts, n as cacheDescription, s as writeLastBuild } from "./ios-project-K9hY_Jab.mjs";
7
- import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-Ce7bc7br.mjs";
8
- import { a as collectorEntry, o as replaceCollector } from "./launch-C3qJ6Agb.mjs";
1
+ import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-gwpm28fu.mjs";
2
+ import { jn as schemesFromInfoPlist, kn as pickDevClientScheme } from "./budget-Cvwn54qV.mjs";
3
+ import { f as podAction, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, s as iosConfigurationSetting, t as appNameFromPath, u as isReleaseConfiguration, v as resolveRuntime } from "./support-CNioewsd.mjs";
4
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-B7KIafpM.mjs";
5
+ import { t as devClientScheme } from "./dev-client-BSDR5h3F.mjs";
6
+ import { a as lastBuildRecord, i as iosFacts, n as cacheDescription, s as writeLastBuild } from "./ios-project-CZhKODF3.mjs";
7
+ import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-pm4nL6By.mjs";
8
+ import { a as collectorEntry, o as replaceCollector } from "./launch-BjxemNpK.mjs";
9
9
  export { appNameFromPath, buildLogFile, cacheDescription, collectorEntry, iosCommand as default, devClientScheme, deviceLabel, ensureWorkspaceStorageSafely, formatDuration, iosConfigurationSetting, iosFacts, isReleaseConfiguration, lastBuildRecord, phaseLine, pickDevClientScheme, podAction, registerIos, replaceCollector, resolveConfiguration, resolveDeviceType, resolveRuntime, runIosOperation, schemesFromInfoPlist, shortHash, shortUdid, writeLastBuild };
@@ -1,9 +1,9 @@
1
- import { t as getExecutor } from "./exec-DqKo9GKJ.mjs";
2
- import { n as TOOL_ERROR_PREFIX } from "./ios-device-B5veSDDQ.mjs";
3
- import { i as INSTALL_ERROR, l as appProcessFromPid } from "./app-install-BIKtMfPq.mjs";
1
+ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
+ import { ln as INSTALL_ERROR, pn as appProcessFromPid } from "./budget-Cvwn54qV.mjs";
3
+ import { n as TOOL_ERROR_PREFIX } from "./ios-device-BXZ0c7Kb.mjs";
4
4
  import { mkdtempSync, readFileSync, rmSync } from "node:fs";
5
- import { join } from "node:path";
6
5
  import { tmpdir } from "node:os";
6
+ import { join } from "node:path";
7
7
  //#region src/engine/ios-device.ts
8
8
  const DEVICECTL_TIMEOUT_MS = 3e4;
9
9
  function text(value) {
@@ -44,8 +44,27 @@ function parseDevicectlDevices(payload) {
44
44
  }
45
45
  return out;
46
46
  }
47
- function listIosDevices({ exec = null } = {}) {
48
- return readIosDevices({ exec }) ?? [];
47
+ async function listIosDevices({ exec = null } = {}) {
48
+ const executor = exec || getExecutor();
49
+ const dir = mkdtempSync(join(tmpdir(), "stim-devicectl-"));
50
+ const out = join(dir, "devices.json");
51
+ try {
52
+ await executor.runFileAsync("xcrun", [
53
+ "devicectl",
54
+ "list",
55
+ "devices",
56
+ "-j",
57
+ out
58
+ ], { timeoutMs: DEVICECTL_TIMEOUT_MS });
59
+ return parseDevicectlDevices(readFileSync(out, "utf-8"));
60
+ } catch {
61
+ return [];
62
+ } finally {
63
+ rmSync(dir, {
64
+ recursive: true,
65
+ force: true
66
+ });
67
+ }
49
68
  }
50
69
  /** devicectl's device list, or null when devicectl failed or did not answer within `timeoutMs`. */
51
70
  function readIosDevices({ exec = null, timeoutMs = DEVICECTL_TIMEOUT_MS } = {}) {
@@ -91,18 +110,18 @@ function isWirelessIosDevice(device) {
91
110
  function isPhysical(device) {
92
111
  return isIosHardware(device) && isReachable(device) && (isWired(device) || isWirelessIosDevice(device));
93
112
  }
94
- function notUsableRefusal(device) {
113
+ function notUsableRefusal(device, wording) {
95
114
  if (!isIosHardware(device)) return {
96
- error: `${describe(device)} is a ${[device.reality, device.platform].filter(Boolean).join(" ")} device, and \`ios --device\` installs only on a physical iPhone or iPad.`,
97
- remedy: NOT_A_PHONE_REMEDY
115
+ error: `${describe(device)} is a ${[device.reality, device.platform].filter(Boolean).join(" ")} device, and ${wording.physicalOnly}.`,
116
+ remedy: wording.notAPhone
98
117
  };
99
118
  if (!isReachable(device)) return {
100
119
  error: `${describe(device)} is paired, but devicectl reports it unavailable: it cannot reach the phone right now.`,
101
120
  remedy: UNREACHABLE_REMEDY
102
121
  };
103
122
  return {
104
- error: `${describe(device)} is reached over ${device.transportType}, and Stim installs on a phone only over a cable or Wi-Fi.`,
105
- remedy: NOT_A_PHONE_REMEDY
123
+ error: `${describe(device)} is reached over ${device.transportType}, and ${wording.transportOnly}.`,
124
+ remedy: wording.notAPhone
106
125
  };
107
126
  }
108
127
  function describe(device) {
@@ -142,15 +161,21 @@ function iosPoolNoCandidatesRefusal(devices) {
142
161
  }
143
162
  return resolveIosPhysicalDevice(null, listed);
144
163
  }
145
- function pickOne(devices) {
164
+ function pickOne(devices, severalRemedy) {
146
165
  if (devices.length === 1) return unhealthy(devices[0]) ?? selected(devices[0]);
147
166
  if (devices.length > 1) return {
148
167
  error: `Several devices are connected: ${devices.map(describe).join(", ")}.`,
149
- remedy: "Name the one to build for with `stim ios --device <udid>`."
168
+ remedy: severalRemedy
150
169
  };
151
170
  return null;
152
171
  }
153
- function resolveIosPhysicalDevice(requested, devices) {
172
+ const IOS_RUN_WORDING = {
173
+ several: "Name the one to build for with `stim ios --device <udid>`.",
174
+ notAPhone: NOT_A_PHONE_REMEDY,
175
+ physicalOnly: "`ios --device` installs only on a physical iPhone or iPad",
176
+ transportOnly: "Stim installs on a phone only over a cable or Wi-Fi"
177
+ };
178
+ function resolveIosPhysicalDevice(requested, devices, wording = IOS_RUN_WORDING) {
154
179
  const listed = Array.isArray(devices) ? devices : [];
155
180
  const physical = listed.filter(isPhysical);
156
181
  if (requested) {
@@ -158,13 +183,13 @@ function resolveIosPhysicalDevice(requested, devices) {
158
183
  const match = physical.find(same);
159
184
  if (match) return unhealthy(match) ?? selected(match);
160
185
  const other = listed.find(same);
161
- if (other) return notUsableRefusal(other);
186
+ if (other) return notUsableRefusal(other, wording);
162
187
  return {
163
188
  error: physical.length ? `${requested} is not connected. devicectl reports these devices: ${physical.map(describe).join(", ")}.` : `${requested} is not connected, and devicectl reports no device over a cable or Wi-Fi at all.`,
164
189
  remedy: "Check the cable and `xcrun devicectl list devices`, then retry with a UDID it lists."
165
190
  };
166
191
  }
167
- const chosen = pickOne(physical);
192
+ const chosen = pickOne(physical, wording.several);
168
193
  if (chosen) return chosen;
169
194
  return {
170
195
  error: "No physical iOS device is connected.",
@@ -237,7 +262,7 @@ function wirelessInstallFailure(error, { udid, appPath, wireless }) {
237
262
  * second install, each with the same bound; `beforeStep` runs before each of those two
238
263
  * so the caller can extend its device lease.
239
264
  */
240
- function installIosDeviceApp({ udid, appPath, bundleId = null, wireless = false }, { exec = null, beforeStep = () => {} } = {}) {
265
+ async function installIosDeviceApp({ udid, appPath, bundleId = null, wireless = false }, { exec = null, beforeStep = () => {} } = {}) {
241
266
  const e = exec || getExecutor();
242
267
  const timeoutMs = iosDeviceBounds(wireless).installMs;
243
268
  const target = {
@@ -245,8 +270,8 @@ function installIosDeviceApp({ udid, appPath, bundleId = null, wireless = false
245
270
  appPath,
246
271
  wireless
247
272
  };
248
- const install = () => {
249
- e.runFile("xcrun", [
273
+ const install = async () => {
274
+ await e.runFileAsync("xcrun", [
250
275
  "devicectl",
251
276
  "device",
252
277
  "install",
@@ -257,7 +282,7 @@ function installIosDeviceApp({ udid, appPath, bundleId = null, wireless = false
257
282
  ], { timeoutMs });
258
283
  };
259
284
  try {
260
- install();
285
+ await install();
261
286
  return {
262
287
  ok: true,
263
288
  appPath
@@ -278,7 +303,7 @@ function installIosDeviceApp({ udid, appPath, bundleId = null, wireless = false
278
303
  };
279
304
  try {
280
305
  beforeStep();
281
- e.runFile("xcrun", [
306
+ await e.runFileAsync("xcrun", [
282
307
  "devicectl",
283
308
  "device",
284
309
  "uninstall",
@@ -301,7 +326,7 @@ function installIosDeviceApp({ udid, appPath, bundleId = null, wireless = false
301
326
  }
302
327
  try {
303
328
  beforeStep();
304
- install();
329
+ await install();
305
330
  } catch (retryErr) {
306
331
  return wirelessInstallFailure(retryErr, target) ?? {
307
332
  failed: true,
@@ -348,12 +373,12 @@ function deviceProcessPid(processes, appName) {
348
373
  for (const entry of processes) if (entry.executable.includes(marker)) return entry.pid;
349
374
  return null;
350
375
  }
351
- function iosDeviceProcess({ udid, appName }, { exec = null } = {}) {
376
+ async function iosDeviceProcess({ udid, appName }, { exec = null } = {}) {
352
377
  const executor = exec || getExecutor();
353
378
  const dir = mkdtempSync(join(tmpdir(), "stim-devicectl-"));
354
379
  const out = join(dir, "processes.json");
355
380
  try {
356
- executor.runFile("xcrun", [
381
+ await executor.runFileAsync("xcrun", [
357
382
  "devicectl",
358
383
  "device",
359
384
  "info",
@@ -427,7 +452,7 @@ async function awaitIosDeviceLaunch({ udid, bundleId, appName, collectorPid = nu
427
452
  for (;;) {
428
453
  const records = collectorRecordsFor(readRecords(), collectorPid);
429
454
  const ended = records.find((entry) => typeof entry.event === "string" && COLLECTOR_ENDED_EVENTS.has(entry.event));
430
- const running = probeProcess();
455
+ const running = await probeProcess();
431
456
  if (running.state === "running") return { pid: running.pid };
432
457
  if (ended) {
433
458
  const evidence = launchEvidence(records);
@@ -482,7 +507,7 @@ async function verifyIosDeviceReleaseLaunch({ udid, appName, waitMs = 3e3, probe
482
507
  }));
483
508
  const startedAt = now();
484
509
  await sleep(Math.max(0, waitMs));
485
- const running = probeProcess();
510
+ const running = await probeProcess();
486
511
  const waitedMs = now() - startedAt;
487
512
  if (running.state === "unknown") return {
488
513
  verified: false,
@@ -1,4 +1,4 @@
1
- import { t as getExecutor } from "./exec-DqKo9GKJ.mjs";
1
+ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  //#region src/collector/ios-device.ts
3
3
  const CONSOLE_ENV = { OS_ACTIVITY_DT_MODE: "enable" };
4
4
  const DEV_MENU_LAUNCH_ARGS = [