stim 1.24.0 → 1.26.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 (162) hide show
  1. package/README.md +1 -1
  2. package/dist/{acquire-artifact-CEs02U2o.mjs → acquire-artifact-DVsvSwf7.mjs} +1 -1
  3. package/dist/{act-Cyvm8xYc.mjs → act-C-BqJEpu.mjs} +158 -36
  4. package/dist/{activity-Dq3ZcdD8.mjs → activity-Lnb_EoRY.mjs} +4 -5
  5. package/dist/{agent-device-usage-output-CccomeE0.mjs → agent-device-usage-output-DbXy5tg8.mjs} +4 -4
  6. package/dist/{android-CX5IcRuf.mjs → android-B5P81yI-.mjs} +1 -1
  7. package/dist/{android-DcztblCT.mjs → android-CSbLRD53.mjs} +5 -5
  8. package/dist/{android-BZppyPe_.mjs → android-CiNQw3kq.mjs} +81 -52
  9. package/dist/{android-882m4hxX.mjs → android-DTAcRwBC.mjs} +81 -34
  10. package/dist/{android-cas-BtCOrNqb.mjs → android-cas-BTVhZ0Qs.mjs} +4 -4
  11. package/dist/{android-project-DVWyCbWU.d.mts → android-project-DUGMbq28.d.mts} +61 -3
  12. package/dist/api.d.mts +8 -5
  13. package/dist/api.mjs +27 -27
  14. package/dist/apk-signed-tail-B46U9hXc.mjs +142 -0
  15. package/dist/{artifact-BR5VNArK.mjs → artifact-BxREhAaV.mjs} +25 -19
  16. package/dist/{artifact-Bdt_n9Jc.mjs → artifact-CsAP6AGK.mjs} +36 -21
  17. package/dist/{attempt-DW-mQqM7.mjs → attempt-ClyJlZPT.mjs} +4 -2
  18. package/dist/{browser-web-ycg9qWB8.mjs → browser-web-rYPyqhTf.mjs} +11 -12
  19. package/dist/{budget-dPGuhNai.mjs → budget-k2mZGvvk.mjs} +242 -38
  20. package/dist/{build-CaF574eS.mjs → build-DPhApsjV.mjs} +28 -24
  21. package/dist/{build-cache-HFUQ9eLz.mjs → build-cache-DrXNCy3T.mjs} +123 -23
  22. package/dist/{build-plan-JsDUq4w1.mjs → build-plan-DrMMdayj.mjs} +5 -5
  23. package/dist/{cache-manifest-BPXRONJz.mjs → cache-manifest-BEZ9Bpl1.mjs} +1 -1
  24. package/dist/cache-manifest.mjs +1 -1
  25. package/dist/{ccache-CCn1S6qG.mjs → ccache-Bx5TbxwG.mjs} +6 -6
  26. package/dist/{cli-xqAidP7O.mjs → cli-BBKFGOFl.mjs} +19 -19
  27. package/dist/cli.mjs +1 -1
  28. package/dist/{client-18-ZowoT.mjs → client-D9CaRks-.mjs} +55 -71
  29. package/dist/collector-run.mjs +4 -4
  30. package/dist/{command-output-DxC0k2rk.mjs → command-output-BF5AR2dL.mjs} +1 -1
  31. package/dist/{config-BZhXY15H.mjs → config-BktkY_zC.mjs} +321 -15
  32. package/dist/{launch-BVlyQw3T.mjs → dependencies-Dw6wfQdv.mjs} +259 -256
  33. package/dist/{dependency-state-C56ll9hY.mjs → dependency-state-DFB41vfr.mjs} +1 -1
  34. package/dist/{dev-client-w_fok0Ek.mjs → dev-client-DXR_tPVY.mjs} +2 -2
  35. package/dist/{device-BktRGdjS.mjs → device-BK-zwyd_.mjs} +64 -33
  36. package/dist/{device-4RUugw5X.mjs → device-BcYeHSFu.mjs} +14 -14
  37. package/dist/{device-capacity-Ic-kdmEV.mjs → device-capacity-DCSvUF0l.mjs} +10 -17
  38. package/dist/device-host-worker.mjs +11 -13
  39. package/dist/{device-ios-DzpSlZyd.mjs → device-ios-BLGfXQeK.mjs} +68 -25
  40. package/dist/{device-lease-run-DUtkbqBQ.mjs → device-lease-run-BmvIl7bI.mjs} +5 -5
  41. package/dist/{device-pool-CgBHk401.mjs → device-pool-Dluix4H3.mjs} +3 -3
  42. package/dist/{doctor-DZgpqR6J.mjs → doctor-Bhg1ii70.mjs} +14 -14
  43. package/dist/{doctor-BZ6oxNum.mjs → doctor-Cp-BhzTS.mjs} +1 -1
  44. package/dist/{doctor-C33AzVfR.mjs → doctor-OnwP94ne.mjs} +81 -26
  45. package/dist/{doctor-fingerprint-zlujA1Gs.mjs → doctor-fingerprint-D3a04Mhu.mjs} +8 -2
  46. package/dist/doctor-fingerprint.mjs +1 -1
  47. package/dist/{doctor-watchman-B453A231.mjs → doctor-watchman-BStK05nt.mjs} +4 -4
  48. package/dist/{eas-build-CxKUNHsb.mjs → eas-build-Dsj93iM9.mjs} +2 -2
  49. package/dist/{eas-fallback-LMxk9Kw0.mjs → eas-fallback-FwkeqqGi.mjs} +13 -12
  50. package/dist/{eas-session-ledger-Ck6YXPAO.mjs → eas-session-ledger-B5vygTiD.mjs} +5 -5
  51. package/dist/{error-diagnostics-BkKCZq4P.mjs → error-diagnostics-BOOm9Db7.mjs} +8 -8
  52. package/dist/{errors-ccaPc4ox.mjs → errors-DHm_U5gv.mjs} +2 -1
  53. package/dist/{gc-DDWEAj0w.mjs → gc-C_79zvz4.mjs} +2 -2
  54. package/dist/{gc-yVKpAOKM.mjs → gc-ldgr-hXU.mjs} +74 -43
  55. package/dist/{guide-Bggftwc5.mjs → guide-D7K0X6KG.mjs} +374 -78
  56. package/dist/{hosted-android-D4dweBof.mjs → hosted-android-Bk54ej6n.mjs} +3 -3
  57. package/dist/{hosted-client-BBTVe3X6.mjs → hosted-client-fHO8yqzc.mjs} +5 -5
  58. package/dist/{hosted-ios-Sn0djzg8.mjs → hosted-ios-D55QhYaD.mjs} +1 -1
  59. package/dist/{hosted-logs-CYIZ5ubJ.mjs → hosted-logs-BfbmDM4M.mjs} +17 -11
  60. package/dist/hosted-logs-sync-B0pvmOk-.mjs +195 -0
  61. package/dist/{hosted-macos-CXjsUNBR.mjs → hosted-macos-CPl0OZ9h.mjs} +5 -5
  62. package/dist/{hosted-native-Doxbfzem.mjs → hosted-native-CpDB3-PO.mjs} +6 -7
  63. package/dist/{idle-shutdown-BInjLKqm.mjs → idle-shutdown-FfxL1KdG.mjs} +22 -9
  64. package/dist/{ios-BItP6lkn.mjs → ios-B7-lToDu.mjs} +8 -8
  65. package/dist/{ios-CVUFFZ6C.mjs → ios-WxpDJ5T1.mjs} +129 -14
  66. package/dist/{ios-device-BI38NFFH.mjs → ios-device-CsyryvpT.mjs} +1 -1
  67. package/dist/{ios-B1FXRCMX.mjs → ios-ftxdQbJS.mjs} +84 -51
  68. package/dist/{ios-project-KYqeJURj.mjs → ios-project-Ty5pHl9O.mjs} +6 -6
  69. package/dist/{ios-state-DlElquYD.mjs → ios-state-Cw7-WQf2.mjs} +1 -1
  70. package/dist/{js-swap-BvrQvXHY.mjs → js-swap-BMhXYVDS.mjs} +4 -4
  71. package/dist/{launch-SfzGH_s9.mjs → launch-DOp8RjDz.mjs} +32 -27
  72. package/dist/{logs-DXE32kyb.mjs → logs-dQDki6Tt.mjs} +9 -173
  73. package/dist/{logs-ovlU7m7N.mjs → logs-s1dRIG1E.mjs} +85 -36
  74. package/dist/{macos-B3BveDrU.mjs → macos-B0VEV3Gf.mjs} +1 -1
  75. package/dist/{macos-CCfhb-jT.mjs → macos-DBBPNnIA.mjs} +18 -19
  76. package/dist/macos-run.mjs +1 -1
  77. package/dist/maintenance-run.mjs +28 -11
  78. package/dist/{metro-Bu8LBfzS.mjs → metro-CjC10t6E.mjs} +2 -2
  79. package/dist/{metro-gateway-DtsOy-0P.mjs → metro-gateway-B6_PgD0L.mjs} +2 -3
  80. package/dist/{named-ports-BWDuU5oQ.mjs → named-ports-BG0j1X4g.mjs} +2 -2
  81. package/dist/{native-android-96BBizbq.mjs → native-android-CL2NGiik.mjs} +17 -17
  82. package/dist/{native-gradle-artifact-inputs-BcLYBZil.mjs → native-gradle-artifact-inputs-btSUulme.mjs} +3 -3
  83. package/dist/{native-run-BmH7U8pr.mjs → native-run-BfIDFKLH.mjs} +2 -3
  84. package/dist/{native-runtime-DgtJkzIa.mjs → native-runtime-Dq3RBcON.mjs} +6 -7
  85. package/dist/{native-xcode-inputs-irplbQb0.mjs → native-xcode-inputs-BW7H8JGu.mjs} +2 -2
  86. package/dist/{native-xcode-ios-BY-6hh6M.mjs → native-xcode-ios-CBXJAxfC.mjs} +18 -18
  87. package/dist/offload-worker.d.mts +7 -2
  88. package/dist/offload-worker.mjs +34 -23
  89. package/dist/{ownership-DxlZGDcV.mjs → ownership-BjYvMNX_.mjs} +2 -2
  90. package/dist/{phone-reverses-BdsdesVF.mjs → phone-reverses-lmj6kcPm.mjs} +3 -3
  91. package/dist/{placement-log-DUvqqsB-.mjs → placement-log-DIFPQAXp.mjs} +1 -1
  92. package/dist/{plan-placement-4axc0Hs7.mjs → plan-placement-IiiSQhtz.mjs} +3 -3
  93. package/dist/{ports-D-E_OiAO.mjs → ports-C2_w1Z0Z.mjs} +3 -3
  94. package/dist/prebuild-gmouvmJZ.mjs +1247 -0
  95. package/dist/{project-Dz-hWkb-.mjs → project-BUu6Is4k.mjs} +15 -16
  96. package/dist/{react-native-android-DOinxgwB.mjs → react-native-android-Cgg99REN.mjs} +48 -33
  97. package/dist/{react-native-build-AuCu-aAP.mjs → react-native-build-oNwqF5Wb.mjs} +8 -8
  98. package/dist/{react-native-doctor-2ivJUmwZ.mjs → react-native-doctor-BhA3KUte.mjs} +49 -8
  99. package/dist/{react-native-ios-D5zTIuH8.mjs → react-native-ios-B-nf4rjN.mjs} +40 -25
  100. package/dist/{recordings-CdPwYwvs.mjs → recordings-BldzVKq0.mjs} +1 -1
  101. package/dist/{reload-Ck9RJeSq.mjs → reload-C9OduiNc.mjs} +1 -1
  102. package/dist/{reload-C1TTVesC.mjs → reload-CCR7KC_l.mjs} +14 -14
  103. package/dist/{remote-DEZ7AOVq.mjs → remote-C8S7FlPF.mjs} +16 -7
  104. package/dist/{result-DqBrb12U.mjs → result-7F5hEwQJ.mjs} +17 -17
  105. package/dist/{run-BIwoU44q.mjs → run-BqB0v3pt.mjs} +1 -1
  106. package/dist/{selection-BLtvaqxc.mjs → selection-BNPBZ6T5.mjs} +157 -44
  107. package/dist/{server-bare-Z1ToVLPn.mjs → server-bare-A75rDIdD.mjs} +55 -3
  108. package/dist/{server-command-C0pmjNdG.mjs → server-command-CssKFOD7.mjs} +4 -4
  109. package/dist/{server-expo-Tt_hLRpy.mjs → server-expo-eQfOdydb.mjs} +8 -6
  110. package/dist/server-expo-wvcj5tiZ.mjs +2 -0
  111. package/dist/{settings-RKwY33wv.mjs → settings-CosW5X-S.mjs} +59 -61
  112. package/dist/{settings-kkt0vP4w.mjs → settings-OaGQF-ri.mjs} +1 -1
  113. package/dist/{settings-write--gj6MACV.mjs → settings-write-QjYfSrjF.mjs} +5 -5
  114. package/dist/settings.schema.json +71 -6
  115. package/dist/{simslim-CdWKT3vA.mjs → simslim-Bax1qcxu.mjs} +22 -6
  116. package/dist/{slot-launch-A1BgotaM.mjs → slot-launch-CYCEhfBY.mjs} +6 -6
  117. package/dist/{stage-ERTMh88n.mjs → stage-jKQ7CP_B.mjs} +1 -1
  118. package/dist/{start-Bmg_qmHi.mjs → start-C_wefNKB.mjs} +1 -1
  119. package/dist/{start-BKGrEhzG.mjs → start-_BdJ32cZ.mjs} +9 -10
  120. package/dist/{state-B1ig0Kqy.mjs → state-C1i2nMOP.mjs} +2 -3
  121. package/dist/{state-BfAltYJP.mjs → state-C4OdpOTF.mjs} +1 -2
  122. package/dist/{stats-B-ckuiUg.mjs → stats-tEpEEH-u.mjs} +4 -4
  123. package/dist/{status-Pw-807f0.mjs → status-B9M7x4CZ.mjs} +1 -1
  124. package/dist/{status-Fect2w9R.mjs → status-CRXz-Gtj.mjs} +1 -1
  125. package/dist/{status-DfFp6a76.mjs → status-DQrqodLj.mjs} +22 -23
  126. package/dist/{status-watch-XC7F-AMf.mjs → status-watch-B5wDIH_o.mjs} +4 -4
  127. package/dist/status-worker.mjs +1 -1
  128. package/dist/{stim-desktop-DS0mzR8U.mjs → stim-desktop-6Dqp-gjX.mjs} +1 -1
  129. package/dist/{stop-BFu7X_Do.mjs → stop-CmdNhGlC.mjs} +2 -2
  130. package/dist/{stop-CL1kDHds.mjs → stop-DRqQVqDJ.mjs} +74 -53
  131. package/dist/{stop-DhclRwOO.mjs → stop-ySNQHXMG.mjs} +4 -5
  132. package/dist/supervisor-run.d.mts +1 -0
  133. package/dist/supervisor-run.mjs +15 -16
  134. package/dist/{support-B3tzVhKn.mjs → support-BGSCBoib.mjs} +4 -4
  135. package/dist/{support-B1W-hmC2.mjs → support-CVOCp0Ft.mjs} +15 -12
  136. package/dist/{swiftpm-artifact-inputs-BWYPj9Sn.mjs → swiftpm-artifact-inputs-CfUzt_0Z.mjs} +1 -1
  137. package/dist/{swiftpm-macos-BVCP5mO4.mjs → swiftpm-macos-x6HPpl_2.mjs} +10 -10
  138. package/dist/toolchain-DoavrvIA.mjs +2 -0
  139. package/dist/toolchain-J4J8MrAr.mjs +2107 -0
  140. package/dist/trigger-DzJu208Q.mjs +2 -0
  141. package/dist/{trigger-CBMe2YLH.mjs → trigger-KVaWWNyn.mjs} +1 -1
  142. package/dist/{warm-progress-ol0ZypEu.mjs → warm-progress-DvhTX_eu.mjs} +3 -4
  143. package/dist/web-BFLueSh-.mjs +2 -0
  144. package/dist/{web-BH7peScT.mjs → web-Bihbf7-u.mjs} +8 -9
  145. package/dist/web-run.mjs +4 -4
  146. package/dist/{workspace-state-CeBpIZgr.mjs → workspace-state-pUg3_RRA.mjs} +45 -7
  147. package/dist/{workspaces-CSV2Orf4.mjs → workspaces-g2lhdBXF.mjs} +17 -17
  148. package/dist/{worktree-Dw8kfacb.mjs → worktree-BKuklFh_.mjs} +34 -31
  149. package/dist/{worktree-DEDUzO_L.mjs → worktree-Bm4cb-nU.mjs} +1 -1
  150. package/package.json +8 -8
  151. package/shim/bundle-response.cjs +53 -1
  152. package/shim/bundle-response.d.cts +1 -1
  153. package/shim/expo-metro-config.cjs +23 -1
  154. package/dist/created-devices-D2Aca-xu.mjs +0 -52
  155. package/dist/paths-DQtTgsBf.mjs +0 -42
  156. package/dist/prebuild-DmVCf5xb.mjs +0 -501
  157. package/dist/server-expo-CEntXzRw.mjs +0 -2
  158. package/dist/toolchain-BjgKdoEf.mjs +0 -2
  159. package/dist/toolchain-D3bmRMia.mjs +0 -897
  160. package/dist/trigger-BLsHgAGR.mjs +0 -2
  161. package/dist/web-BdOFlTJr.mjs +0 -2
  162. package/dist/xcode-DHu41qQ4.mjs +0 -910
@@ -1,40 +1,41 @@
1
1
  import { D as ownership_claim_exports, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { m as workspaceLogsDir$1, t as emulatorLogFile } from "./paths-DQtTgsBf.mjs";
3
- import { B as deviceSlotFileKey, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync$1, W as parseDeviceSlotOption, p as getProject, q as validateDeviceSlot, u as getConcurrencyLimits } from "./config-BZhXY15H.mjs";
4
- import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
5
- import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.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-RKwY33wv.mjs";
7
- import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-Dz-hWkb-.mjs";
8
- import { A as listAdbDevices, I as listInstalledSystemImages, St as configuredAndroidEmulatorApp, Y as physicalDeviceModel, Z as probeEmulatorSerial, a as androidDeviceAbi, ct as waitForBoot, nt as resolveOwnedAvdSerialAsync, rt as resolvePhysicalDevice } from "./android-882m4hxX.mjs";
9
- import { c as pidExists, d as resolveProjectMetro } from "./metro-Bu8LBfzS.mjs";
2
+ import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, g as emulatorLogFile, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { B as deviceSlotFileKey, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync$1, W as parseDeviceSlotOption, p as getProject, q as validateDeviceSlot, u as getConcurrencyLimits } from "./config-BktkY_zC.mjs";
4
+ import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
+ import { K as resolveCacheProviderConfig, M as metroPortSetting, P as metroWarmupUrlSetting, R as projectSettingsContextAsync, U as remoteEasFallbackSetting, X as resolveSettings, Y as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, g as deviceReclaimIdleMinutesSetting, it as tunnelModeSetting, lt as detectProviders, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
6
+ import { f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-BUu6Is4k.mjs";
7
+ import { A as listAdbDevices, Dt as configuredAndroidEmulatorApp, I as listInstalledSystemImages, Y as physicalDeviceModel, Z as probeEmulatorSerial, a as androidDeviceAbi, ct as waitForBoot, nt as resolveOwnedAvdSerialAsync, rt as resolvePhysicalDevice } from "./android-DTAcRwBC.mjs";
8
+ import { c as pidExists, d as resolveProjectMetro } from "./metro-CjC10t6E.mjs";
10
9
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
11
- import { En as launchAndroidReleaseApp, G as createRunRecorder, Gt as remoteAndroidDeps, H as startBuildProgress, Hn as checkEasAuth, Ht as ensureMetroReachable, In as exitAfterFlush, J as recordCapacityRefusal, K as readRunEstimates, M as NO_BUILD_PROGRESS, Rn as runProcessOperation, Tn as launchAndroidApp, U as tapBuildLog, Ut as ensureRemoteBootOwned, V as runFailureRecord, W as thrownRunFailureRecord, X as recordRunStats, Xn as resolveRemote, Yn as resolveEasCliBin, Z as statsProjectKey$1, Zn as uploadRemote, an as verifyAndroidReleaseLaunch, ar as ownedSessionName, ln as ADB_INSTALL_TIMEOUT_MS, on as verifyLaunch, qt as resolveRemoteContext, t as budgetGate, un as DEFAULT_METRO_PORT, xn as installAndroidApp, zt as binOnPath } from "./budget-dPGuhNai.mjs";
12
- import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-BmH7U8pr.mjs";
13
- import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-CSV2Orf4.mjs";
14
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-Dq3ZcdD8.mjs";
15
- import { t as CCACHE_NOT_RUN } from "./ccache-CCn1S6qG.mjs";
16
- import { S as setRemoteLogSink } from "./client-18-ZowoT.mjs";
17
- import { a as parseBuildMachineOption, c as resolveBuildPlacement } from "./selection-BLtvaqxc.mjs";
18
- import { r as hostedMetroSettings } from "./metro-gateway-DtsOy-0P.mjs";
19
- import { a as writeHostedAndroidAsync, i as writeDevicePlacementAsync, t as readHostedAndroid } from "./ios-state-DlElquYD.mjs";
20
- import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-D4dweBof.mjs";
21
- import { n as verifyCollectorOwnership } from "./ownership-DxlZGDcV.mjs";
22
- import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-A1BgotaM.mjs";
23
- import { c as startDevServer } from "./start-BKGrEhzG.mjs";
24
- import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-DUtkbqBQ.mjs";
25
- import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-Ic-kdmEV.mjs";
26
- import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-CxKUNHsb.mjs";
27
- import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-DgtJkzIa.mjs";
28
- import { n as devicePlacementRecord } from "./placement-log-DUvqqsB-.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-B3tzVhKn.mjs";
30
- import { t as acquireAndroidArtifact } from "./artifact-BR5VNArK.mjs";
31
- import { a as persistLastBuild, c as androidDeviceSelectorRefusal, i as logPostBuildFailure, n as finishAndroidUpload, o as persistThrownBuild, s as reportAndroidResult, u as resolveAndroidRunPlan } from "./result-DqBrb12U.mjs";
32
- import { n as automaticDevicePlacement, r as devicePlacementLine, t as checkEasFallback } from "./eas-fallback-LMxk9Kw0.mjs";
33
- import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-BktRGdjS.mjs";
34
- import { t as selectFromPool } from "./device-pool-CgBHk401.mjs";
35
- import { r as finishAndroidRun } from "./launch-SfzGH_s9.mjs";
10
+ import { An as launchAndroidApp, En as installAndroidApp, G as runFailureRecord, I as NO_BUILD_PROGRESS, J as thrownRunFailureRecord, K as startBuildProgress, Kt as ensureMetroReachable, Q as recordCapacityRefusal, Un as runProcessOperation, Ut as binOnPath, Vn as exitAfterFlush, X as readRunEstimates, Y as createRunRecorder, Yt as remoteAndroidDeps, Zt as resolveRemoteContext, dn as verifyLaunch, er as resolveEasCliBin, et as recordRunStats, hn as DEFAULT_METRO_PORT, jn as launchAndroidReleaseApp, mn as ADB_INSTALL_TIMEOUT_MS, nr as uploadRemote, q as tapBuildLog, qn as checkEasAuth, qt as ensureRemoteBootOwned, t as budgetGate, tr as resolveRemote, tt as statsProjectKey$1, un as verifyAndroidReleaseLaunch, ur as ownedSessionName } from "./budget-k2mZGvvk.mjs";
11
+ import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-BfIDFKLH.mjs";
12
+ import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-g2lhdBXF.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-Lnb_EoRY.mjs";
14
+ import { w as storedAppId } from "./build-cache-DrXNCy3T.mjs";
15
+ import { t as CCACHE_NOT_RUN } from "./ccache-Bx5TbxwG.mjs";
16
+ import { S as setRemoteLogSink } from "./client-D9CaRks-.mjs";
17
+ import { a as parseBuildMachineOption, l as resolveBuildPlacement } from "./selection-BNPBZ6T5.mjs";
18
+ import { r as hostedMetroSettings } from "./metro-gateway-B6_PgD0L.mjs";
19
+ import { a as writeHostedAndroidAsync, i as writeDevicePlacementAsync, t as readHostedAndroid } from "./ios-state-Cw7-WQf2.mjs";
20
+ import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-Bk54ej6n.mjs";
21
+ import { n as verifyCollectorOwnership } from "./ownership-BjYvMNX_.mjs";
22
+ import { c as startDevServer } from "./start-_BdJ32cZ.mjs";
23
+ import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-BmvIl7bI.mjs";
24
+ import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-DCSvUF0l.mjs";
25
+ import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-Dsj93iM9.mjs";
26
+ import { t as followHostedLaunchLogs } from "./hosted-logs-sync-B0pvmOk-.mjs";
27
+ import { f as settleFingerprintCheck } from "./prebuild-gmouvmJZ.mjs";
28
+ import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-Dq3RBcON.mjs";
29
+ import { n as devicePlacementRecord } from "./placement-log-DIFPQAXp.mjs";
30
+ 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-BGSCBoib.mjs";
31
+ import { t as acquireAndroidArtifact } from "./artifact-BxREhAaV.mjs";
32
+ import { a as persistLastBuild, c as androidDeviceSelectorRefusal, i as logPostBuildFailure, n as finishAndroidUpload, o as persistThrownBuild, s as reportAndroidResult, u as resolveAndroidRunPlan } from "./result-7F5hEwQJ.mjs";
33
+ import { n as automaticDevicePlacement, r as devicePlacementLine, t as checkEasFallback } from "./eas-fallback-FwkeqqGi.mjs";
34
+ import { i as verifyAndroidMetroRun, r as finishAndroidRun } from "./launch-DOp8RjDz.mjs";
35
+ import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-BK-zwyd_.mjs";
36
+ import { t as selectFromPool } from "./device-pool-Dluix4H3.mjs";
36
37
  import { t as unsupportedPlan } from "./project-plan-BPwbLwQu.mjs";
37
- import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-JsDUq4w1.mjs";
38
+ import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-DrMMdayj.mjs";
38
39
  import { basename, join } from "node:path";
39
40
  import { workspaceId } from "@stim-cli/core";
40
41
  import { hostedAndroidStatus, parseMachine } from "@stim-cli/core/state";
@@ -181,9 +182,10 @@ async function selectAndroidPlacement({ target: selected, automatic = automaticD
181
182
  }
182
183
  //#endregion
183
184
  //#region src/commands/android/hosted.ts
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 }) {
185
+ async function finishHostedAndroidRun({ target, artifact, root, slot = "default", release, appMode = release ? "release" : "development", isExpo, metroPort, logsDir, selectors, place, writePlacement, verifyLaunch: verify, followLogs, writeLaunch, readApkPackage, resolveDevClientScheme, now, started, startedAt, fail, phase, enterPhase, enterActivity, out, recordBuild, ...report }) {
185
186
  const packageName = artifact.androidPackage ?? await readApkPackage(artifact.apkPath);
186
187
  if (!artifact.apkPath || !packageName) return fail("STIM_INSTALL_FAILED", "The built APK has no package identity.");
188
+ const devClientScheme = appMode === "development" && isExpo ? await resolveDevClientScheme(root, artifact.apkPath) ?? void 0 : void 0;
187
189
  const launchedAt = now();
188
190
  try {
189
191
  const run = await place(target, {
@@ -196,7 +198,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
196
198
  ...appMode === "process" ? { mode: appMode } : {},
197
199
  metroPort,
198
200
  selectors,
199
- ...appMode === "development" && isExpo ? { devClientScheme: await resolveDevClientScheme(root, artifact.apkPath) ?? void 0 } : {},
201
+ ...appMode === "development" && isExpo ? { devClientScheme } : {},
200
202
  reserved: (placement) => writePlacement(root, slot, placement),
201
203
  note: out,
202
204
  enterPhase
@@ -211,19 +213,37 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
211
213
  launchedAt: new Date(launchedAt).toISOString()
212
214
  }, slot);
213
215
  let launched = run.launched;
216
+ let launchWarning;
214
217
  if (appMode === "development") {
215
- const evidence = await verify({
216
- requireBundleResponse: true,
217
- platform: "android",
218
- logsDir: logsDir ?? void 0,
219
- since: launchedAt,
220
- metroPort,
221
- mode: workspaceDevServerMode(root, isExpo),
222
- slot: launchSlotScope(root, slot),
223
- platformShared: (await siblingPlatformSlots(root, "android", slot)).length > 0
224
- });
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.");
226
- launched = evidence.verified ? true : evidence.requested ? "bundling" : "unverified";
218
+ const hostedLogs = followLogs(root, slot, "android", launchedAt);
219
+ let verification;
220
+ try {
221
+ verification = await verifyAndroidMetroRun({
222
+ root,
223
+ slot,
224
+ remoteDevice: false,
225
+ verifyLaunched: verify,
226
+ serial: run.placement.device?.serial ?? "",
227
+ androidPackage: packageName,
228
+ metroCheck: report.metroCheck,
229
+ logsDir: logsDir ?? "",
230
+ launchedAt,
231
+ metroPort,
232
+ isExpo,
233
+ physical: false,
234
+ device: {},
235
+ scheme: devClientScheme,
236
+ phase,
237
+ enterActivity,
238
+ hostedLogs,
239
+ hostedRunCommand: `stim android --remote ${run.placement.selected}${slot === "default" ? "" : ` --slot ${slot}`}`
240
+ });
241
+ } finally {
242
+ hostedLogs.stop();
243
+ }
244
+ if (verification.state === "fatal") return fail("STIM_LAUNCH_FAILED", "The app failed its launch readiness check.", `Read the launch error above or run \`stim logs --errors\`. The full timeline is in ${logsDir}.`, { lastBuildStatus: true });
245
+ launched = verification.state === true ? true : verification.state === "bundling" ? "bundling" : "unverified";
246
+ launchWarning = verification.warning;
227
247
  }
228
248
  if (launched === "unverified") out(`Launch on ${target.host.machine} is unverified; check the hosted app, then retry stim android --remote ${target.host.machine}.`);
229
249
  const host = hostedAndroidStatus(run.placement);
@@ -240,6 +260,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
240
260
  });
241
261
  await finishAndroidUpload(artifact.uploadPending, artifact.remote, phase);
242
262
  await artifact.providerUpload;
263
+ await settleFingerprintCheck(artifact.fingerprintCheck, "android", (line) => phase("fingerprint", chalk.yellow(line)), (entry) => report.writer.write(entry));
243
264
  return {
244
265
  ok: true,
245
266
  facts: reportAndroidResult({
@@ -260,6 +281,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
260
281
  remote: artifact.remote,
261
282
  providerName: artifact.providerName,
262
283
  launchState: launched,
284
+ launchWarning,
263
285
  launched: {},
264
286
  ccache: artifact.ccache,
265
287
  durationMs: now() - started
@@ -371,7 +393,7 @@ function runAndroidOperation(context, root, opts = {}) {
371
393
  }
372
394
  }, { write: (line) => context.output("stderr", `${chalk.dim(phaseLine("lock", line))}\n`) });
373
395
  }
374
- 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, {
396
+ 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, storedAppId: storedAppId$1 = storedAppId, install = installAndroidApp, launch = launchAndroidApp, launchRelease = launchAndroidReleaseApp, verifyReleaseLaunched = verifyAndroidReleaseLaunch, resolveDevClientScheme = (projectRoot, apkPath, options) => androidDevClientScheme(projectRoot, apkPath, {
375
397
  ...options,
376
398
  context
377
399
  }), spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), createWriter = createNdjsonWriter, writeLaunch = writeWorkspaceLaunchAsync, writeState = writeWorkspaceStateAsync, 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) } = {}) {
@@ -434,6 +456,7 @@ function resolveRunAndroidOptions({ context, root, json = false, remoteDevice: c
434
456
  uploadRemoteBuild,
435
457
  resolveCacheProvider,
436
458
  loadCacheProviderModule,
459
+ storedAppId: storedAppId$1,
437
460
  install,
438
461
  launch,
439
462
  launchRelease,
@@ -512,7 +535,7 @@ function avdSetupFailure(error, root, logFile) {
512
535
  }
513
536
  async function runAndroid(options = {}) {
514
537
  const { context } = options;
515
- 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);
538
+ 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, storedAppId, install, launch, launchRelease, verifyReleaseLaunched, resolveDevClientScheme, spawn, kill, createWriter, writeLaunch, writeState, recordBuild, recordStats, recordCapacityRefusal: recordRefusal = recordCapacityRefusal, readEstimates, now, out, emit } = androidSlotOptions(options);
516
539
  const progress = options.progress ?? NO_BUILD_PROGRESS;
517
540
  const slot = validateDeviceSlot(options.slot);
518
541
  const started = now();
@@ -1054,7 +1077,9 @@ async function runAndroid(options = {}) {
1054
1077
  platform: "android",
1055
1078
  isExpo,
1056
1079
  appId: androidPackage,
1057
- bundleUrl: metroWarmupUrlSetting(settings, "android")
1080
+ bundleUrl: metroWarmupUrlSetting(settings, "android"),
1081
+ logsDir,
1082
+ root
1058
1083
  });
1059
1084
  const acquiredArtifact = await acquireAndroidArtifact({
1060
1085
  context,
@@ -1109,6 +1134,7 @@ async function runAndroid(options = {}) {
1109
1134
  resolveRemoteBuild,
1110
1135
  uploadRemoteBuild,
1111
1136
  loadCacheProviderModule,
1137
+ storedAppId,
1112
1138
  acquireSlot,
1113
1139
  releaseSlot,
1114
1140
  now
@@ -1140,6 +1166,7 @@ async function runAndroid(options = {}) {
1140
1166
  place: options.placeHostedAndroid ?? placeHostedAndroid,
1141
1167
  writePlacement: options.writeHostedAndroid ?? writeHostedAndroidAsync,
1142
1168
  verifyLaunch: verifyLaunched,
1169
+ followLogs: options.followHostedLaunchLogs ?? followHostedLaunchLogs,
1143
1170
  writeLaunch,
1144
1171
  readApkPackage,
1145
1172
  resolveDevClientScheme,
@@ -1150,6 +1177,7 @@ async function runAndroid(options = {}) {
1150
1177
  fail,
1151
1178
  phase,
1152
1179
  enterPhase: progress.step,
1180
+ enterActivity: progress.activity,
1153
1181
  out,
1154
1182
  json,
1155
1183
  useBuildCache,
@@ -1258,6 +1286,7 @@ async function runAndroid(options = {}) {
1258
1286
  waitedForBuild: artifact.waitedForBuild,
1259
1287
  ccache: ccacheActivity,
1260
1288
  uploadPending: artifact.uploadPending,
1289
+ fingerprintCheck: artifact.fingerprintCheck,
1261
1290
  providerUpload: artifact.providerUpload,
1262
1291
  providerName: artifact.providerName,
1263
1292
  remote: artifact.remote,
@@ -1267,7 +1296,7 @@ async function runAndroid(options = {}) {
1267
1296
  writer,
1268
1297
  phase,
1269
1298
  fail,
1270
- readApkPackage,
1299
+ readApkPackage: (path) => artifact.apkPackage ?? readApkPackage(path),
1271
1300
  readProjectPackage: async () => (await integration.appIds()).androidPackage,
1272
1301
  packageRemedy: integration.packageRemedy,
1273
1302
  install,
@@ -1,16 +1,17 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, o as cancellableSleep, t as getExecutor, v as stopDeclaringSpawnsOn } from "./exec-VFRpu1iA.mjs";
2
- import { C as saveConfig, D as withConfigLock$1, G as projectDeviceSlots, H as deviceSlotPlatforms, K as removeSlotDevice, O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig, d as getConfigDir, f as getConfigPath$1, z as assignSlotDevice } from "./config-BZhXY15H.mjs";
2
+ import { M as withDirLock$1, N as withDirLockAsync$1 } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { C as saveConfig, D as withConfigLock$1, G as projectDeviceSlots, H as deviceSlotPlatforms, K as removeSlotDevice, O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig, d as getConfigDir, f as getConfigPath$1, z as assignSlotDevice } from "./config-BktkY_zC.mjs";
3
4
  import { n as runOperationFileQuiet, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
4
- import { c as androidDataPartitionSizeBytes } from "./settings-RKwY33wv.mjs";
5
- import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-DS0mzR8U.mjs";
6
- import { a as recordCreatedDeviceAsync, n as forgetCreatedDeviceAsync, r as readCreatedDevices$1 } from "./created-devices-D2Aca-xu.mjs";
7
- import { c as pidExists, p as signalProcessTreeAsync } from "./metro-Bu8LBfzS.mjs";
5
+ import { c as androidDataPartitionSizeBytes } from "./settings-CosW5X-S.mjs";
6
+ import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-6Dqp-gjX.mjs";
7
+ import { c as pidExists, p as signalProcessTreeAsync } from "./metro-CjC10t6E.mjs";
8
+ import { renameSync, rmSync, writeFileSync } from "node:fs";
8
9
  import { isDeepStrictEqual } from "node:util";
9
10
  import { join } from "node:path";
10
- import { ambientEnv, ambientWrite } from "@stim-cli/core";
11
- import { ANDROID_EMULATOR_APPS, getParkedMax, isJsonObject, loadConfig, settingDefinition } from "@stim-cli/core/state";
11
+ import { ambientEnv, ambientWrite, ensurePrivateDir } from "@stim-cli/core";
12
+ import { ANDROID_EMULATOR_APPS, createdDevicesFile, createdDevicesLock, getParkedMax, isJsonObject, loadConfig, readCreatedDevices, readCreatedDevices as readCreatedDevices$1, settingDefinition } from "@stim-cli/core/state";
12
13
  import { dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, resolve as resolve$1 } from "path";
13
- import { existsSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
14
+ import { existsSync as existsSync$1, lstatSync as lstatSync$1, mkdirSync as mkdirSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, realpathSync as realpathSync$1, renameSync as renameSync$1, rmSync as rmSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "fs";
14
15
  import { rm } from "node:fs/promises";
15
16
  import { homedir, tmpdir } from "os";
16
17
  //#region src/devices/android-emulator-viewer.ts
@@ -34,6 +35,52 @@ async function openEmulatorInStimDesktop(serial) {
34
35
  ], STIM_DESKTOP_OPEN_OPTIONS);
35
36
  }
36
37
  //#endregion
38
+ //#region src/devices/created-devices.ts
39
+ function update(platform, change) {
40
+ const dir = getConfigDir();
41
+ withDirLock$1(createdDevicesLock(), () => {
42
+ const current = readCreatedDevices();
43
+ const entries = new Set(current[platform]);
44
+ if (!change(entries)) return;
45
+ const next = {
46
+ version: 1,
47
+ ios: [...current.ios],
48
+ android: [...current.android],
49
+ web: [...current.web],
50
+ [platform]: [...entries]
51
+ };
52
+ const file = createdDevicesFile();
53
+ const tmp = `${file}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
54
+ writeFileSync(tmp, `${JSON.stringify(next, null, 2)}\n`, { mode: 384 });
55
+ try {
56
+ renameSync(tmp, file);
57
+ } catch (error) {
58
+ rmSync(tmp, { force: true });
59
+ throw error;
60
+ }
61
+ }, { ensureParent: () => ensurePrivateDir(dir) });
62
+ }
63
+ function recordCreatedDevice(platform, id) {
64
+ update(platform, (entries) => entries.size !== entries.add(id).size);
65
+ }
66
+ function forgetCreatedDevice(platform, id) {
67
+ update(platform, (entries) => entries.delete(id));
68
+ }
69
+ /** Waits asynchronously for the ledger lock, then records the device. */
70
+ function recordCreatedDeviceAsync(platform, id) {
71
+ return withDirLockAsync$1(createdDevicesLock(), () => recordCreatedDevice(platform, id), { ensureParent: () => ensurePrivateDir(getConfigDir()) });
72
+ }
73
+ /** Waits asynchronously for the ledger lock, then atomically forgets the device. The synchronous transaction decides whether to commit the removal; cancellation stops admission. */
74
+ function forgetCreatedDeviceAsync(platform, id, signal, transaction = (forget) => {
75
+ forget();
76
+ return true;
77
+ }) {
78
+ return withDirLockAsync$1(createdDevicesLock(), () => transaction(() => forgetCreatedDevice(platform, id)), {
79
+ ensureParent: () => ensurePrivateDir(getConfigDir()),
80
+ signal
81
+ });
82
+ }
83
+ //#endregion
37
84
  //#region src/devices/sim-pool.ts
38
85
  const POOL_SETTING_REMEDY = "Run `stim guide settings` for the device pool bounds and where it can be set.";
39
86
  function parkedMaxSetting(platform, options = {}) {
@@ -307,7 +354,7 @@ function androidToolPath(tool, platform = process.platform, env = ambientEnv())
307
354
  const bare = location.at(-1);
308
355
  const name = platform === "win32" ? `${bare}${WINDOWS_SDK_TOOL_EXTENSIONS[tool]}` : bare;
309
356
  const abs = join$1(androidHome(env), ...location.slice(0, -1), name);
310
- return existsSync(abs) ? abs : bare;
357
+ return existsSync$1(abs) ? abs : bare;
311
358
  }
312
359
  const WINDOWS_BUILD_TOOL_EXTENSIONS = { apksigner: ".bat" };
313
360
  function androidBuildToolName(tool, platform = process.platform) {
@@ -329,7 +376,7 @@ function buildToolsMajor(version) {
329
376
  const major = Number(String(version ?? "").split(/[.-]/)[0]);
330
377
  return Number.isFinite(major) ? major : 0;
331
378
  }
332
- function findBuildTool(tools, { home = androidHome(), readDir = readdirSync, exists = existsSync, platform = process.platform } = {}) {
379
+ function findBuildTool(tools, { home = androidHome(), readDir = readdirSync$1, exists = existsSync$1, platform = process.platform } = {}) {
333
380
  const root = join$1(home, "build-tools");
334
381
  let versions = [];
335
382
  try {
@@ -358,7 +405,7 @@ function listInstalledSystemImages(onUnreadable, env = ambientEnv()) {
358
405
  const images = [];
359
406
  const list = (dir) => {
360
407
  try {
361
- return readdirSync(dir);
408
+ return readdirSync$1(dir);
362
409
  } catch (error) {
363
410
  const code = error.code;
364
411
  if (code !== "ENOENT" && code !== "ENOTDIR") onUnreadable?.(error);
@@ -397,7 +444,7 @@ function profileNeedsFoldFeature(profile) {
397
444
  }
398
445
  function systemImageSupportsFold(pkg, home = androidHome()) {
399
446
  try {
400
- const ini = readFileSync(join$1(home, ...pkg.split(";"), "advancedFeatures.ini"), "utf8");
447
+ const ini = readFileSync$1(join$1(home, ...pkg.split(";"), "advancedFeatures.ini"), "utf8");
401
448
  return /^\s*SupportPixelFold\s*=\s*on\s*$/im.test(ini);
402
449
  } catch {
403
450
  return false;
@@ -425,7 +472,7 @@ async function createOwnedAvd(label, { systemImage, deviceProfile = DEFAULT_AVD_
425
472
  let env = ambientEnv();
426
473
  if (!env.ANDROID_AVD_HOME) {
427
474
  const root = avdLookupRoots(env, (process.platform === "win32" ? env.USERPROFILE : env.HOME) || homedir())[0];
428
- mkdirSync(root, { recursive: true });
475
+ mkdirSync$1(root, { recursive: true });
429
476
  env = {
430
477
  ...env,
431
478
  ANDROID_AVD_HOME: root
@@ -479,7 +526,7 @@ function avdIniValue(configIni, key) {
479
526
  }
480
527
  return null;
481
528
  }
482
- function ownedAvdSystemImage(avdName, { avdDirectory = ownedAvdDirectory, readFile = (path) => readFileSync(path, "utf8") } = {}) {
529
+ function ownedAvdSystemImage(avdName, { avdDirectory = ownedAvdDirectory, readFile = (path) => readFileSync$1(path, "utf8") } = {}) {
483
530
  const directory = avdDirectory(avdName);
484
531
  if (!directory) return null;
485
532
  try {
@@ -516,7 +563,7 @@ function sanitizeAvdLabel(label) {
516
563
  function avdConfigIni(avdName, directory = ownedAvdDirectory(avdName)) {
517
564
  if (!directory) return null;
518
565
  try {
519
- return readFileSync(join$1(directory, "config.ini"), "utf8");
566
+ return readFileSync$1(join$1(directory, "config.ini"), "utf8");
520
567
  } catch {
521
568
  return null;
522
569
  }
@@ -779,7 +826,7 @@ function avdStorageRoots(env = ambientEnv()) {
779
826
  }
780
827
  function avdPathExists(path) {
781
828
  try {
782
- lstatSync(path);
829
+ lstatSync$1(path);
783
830
  return true;
784
831
  } catch (error) {
785
832
  if (error.code === "ENOENT") return false;
@@ -797,7 +844,7 @@ function avdNameAbsent(avdName, roots = avdStorageRoots()) {
797
844
  }
798
845
  function isDirectoryPath(path) {
799
846
  try {
800
- return statSync(path).isDirectory();
847
+ return statSync$1(path).isDirectory();
801
848
  } catch (error) {
802
849
  if (error.code === "ENOENT") return false;
803
850
  throw error;
@@ -807,17 +854,17 @@ function listOrphanedAvdDirectories(avdName) {
807
854
  const roots = avdStorageRoots();
808
855
  const stores = roots.filter(avdPathExists).map((root) => ({
809
856
  root,
810
- canonicalRoot: realpathSync(root),
811
- names: readdirSync(root)
857
+ canonicalRoot: realpathSync$1(root),
858
+ names: readdirSync$1(root)
812
859
  }));
813
860
  const registered = /* @__PURE__ */ new Set();
814
861
  for (const { root, canonicalRoot, names } of stores) for (const name of names.filter((entry) => entry.endsWith(".ini"))) {
815
862
  const path = join$1(root, name);
816
- const ini = readFileSync(path, "utf8");
863
+ const ini = readFileSync$1(path, "utf8");
817
864
  const targets = /* @__PURE__ */ new Set([...avdIniPaths(root, ini), ...avdIniPaths(canonicalRoot, ini)]);
818
865
  if (!targets.size) throw new Error(`Cannot verify AVD registration at ${path}; its data was kept.`);
819
866
  for (const target of targets) try {
820
- registered.add(realpathSync(target));
867
+ registered.add(realpathSync$1(target));
821
868
  } catch (error) {
822
869
  const code = error.code;
823
870
  if (code !== "ENOENT" && code !== "ENOTDIR") throw error;
@@ -832,8 +879,8 @@ function listOrphanedAvdDirectories(avdName) {
832
879
  if (roots.some((candidate) => avdPathExists(join$1(candidate, `${name}.ini`)))) continue;
833
880
  const directory = join$1(canonicalRoot, entry);
834
881
  if (registered.has(directory) || !avdPathExists(directory)) continue;
835
- const stat = lstatSync(directory);
836
- if (!stat.isDirectory() || stat.isSymbolicLink() || realpathSync(directory) !== directory) throw new Error(`Cannot verify AVD data at ${directory}; it was kept.`);
882
+ const stat = lstatSync$1(directory);
883
+ if (!stat.isDirectory() || stat.isSymbolicLink() || realpathSync$1(directory) !== directory) throw new Error(`Cannot verify AVD data at ${directory}; it was kept.`);
837
884
  if (!orphaned.some((candidate) => candidate.directory === directory)) orphaned.push({
838
885
  name,
839
886
  directory,
@@ -852,7 +899,7 @@ function avdLookupRoots(env, home) {
852
899
  ];
853
900
  return [...new Set(roots.filter((value) => Boolean(value)))];
854
901
  }
855
- function ownedAvdDirectory(avdName, { env = ambientEnv(), home = (process.platform === "win32" ? env.USERPROFILE : env.HOME) || homedir(), readFile = (path) => readFileSync(path, "utf8"), realpath = realpathSync, isDirectory = (path) => statSync(path).isDirectory() } = {}) {
902
+ function ownedAvdDirectory(avdName, { env = ambientEnv(), home = (process.platform === "win32" ? env.USERPROFILE : env.HOME) || homedir(), readFile = (path) => readFileSync$1(path, "utf8"), realpath = realpathSync$1, isDirectory = (path) => statSync$1(path).isDirectory() } = {}) {
856
903
  if (!/^stim-[A-Za-z0-9._-]+$/.test(avdName)) return null;
857
904
  for (const root of avdLookupRoots(env, home)) {
858
905
  let ini;
@@ -910,10 +957,10 @@ function withAvdConfigOverrides(contents, overrides) {
910
957
  return updated.join(newline) + (trailingNewline ? newline : "");
911
958
  }
912
959
  let avdConfigWriteSequence = 0;
913
- function configureNewOwnedAvd(avdName, { dataPartitionSizeGb, avdConfig = {} }, { avdDirectory = ownedAvdDirectory, readFile = (path) => readFileSync(path, "utf8"), writeFile = (path, contents) => writeFileSync(path, contents, {
960
+ function configureNewOwnedAvd(avdName, { dataPartitionSizeGb, avdConfig = {} }, { avdDirectory = ownedAvdDirectory, readFile = (path) => readFileSync$1(path, "utf8"), writeFile = (path, contents) => writeFileSync$1(path, contents, {
914
961
  encoding: "utf8",
915
962
  flag: "wx"
916
- }), rename = renameSync, remove = (path) => rmSync(path, { force: true }) } = {}) {
963
+ }), rename = renameSync$1, remove = (path) => rmSync$1(path, { force: true }) } = {}) {
917
964
  const sizeBytes = androidDataPartitionSizeBytes(dataPartitionSizeGb);
918
965
  const directory = avdDirectory(avdName);
919
966
  if (!directory) throw new Error(`Could not resolve the content directory for newly created AVD ${avdName}.`);
@@ -953,7 +1000,7 @@ function avdPoolConfiguration(dataPartitionSizeGb, avdConfig, deviceProfile = DE
953
1000
  function ownedAvdMatchesConfiguration(avdName, configuration) {
954
1001
  const directory = ownedAvdDirectory(avdName);
955
1002
  if (!directory) return false;
956
- const contents = readFileSync(join$1(directory, "config.ini"), "utf8");
1003
+ const contents = readFileSync$1(join$1(directory, "config.ini"), "utf8");
957
1004
  const expected = JSON.parse(configuration);
958
1005
  return Array.isArray(expected) && expected.length > 0 && expected.every((entry) => Array.isArray(entry) && entry.length === 2 && entry.every((value) => typeof value === "string") && contents.split(/\r?\n/).some((line) => line.trim() === `${entry[0]}=${entry[1]}`));
959
1006
  }
@@ -1068,7 +1115,7 @@ const CRASH_REPORT_MODE_EMULATOR_VERSION = 37;
1068
1115
  function emulatorCrashDatabases(env = ambientEnv()) {
1069
1116
  const root = join$1(env.TMP || env.TEMP || tmpdir(), "AndroidEmulator");
1070
1117
  try {
1071
- return readdirSync(root).filter((name) => /^emu-crash-.*\.db$/.test(name)).map((name) => join$1(root, name));
1118
+ return readdirSync$1(root).filter((name) => /^emu-crash-.*\.db$/.test(name)).map((name) => join$1(root, name));
1072
1119
  } catch {
1073
1120
  return [];
1074
1121
  }
@@ -1082,7 +1129,7 @@ function emulatorCrashDatabases(env = ambientEnv()) {
1082
1129
  * removed instead, which has the same effect unless a crash handler is still writing into it.
1083
1130
  * https://github.com/appandflow/stim/issues/918
1084
1131
  */
1085
- function suppressEmulatorCrashConsent({ platform = process.platform, version = emulatorMajorVersion, databases = emulatorCrashDatabases, remove = (path) => rmSync(path, {
1132
+ function suppressEmulatorCrashConsent({ platform = process.platform, version = emulatorMajorVersion, databases = emulatorCrashDatabases, remove = (path) => rmSync$1(path, {
1086
1133
  recursive: true,
1087
1134
  force: true
1088
1135
  }) } = {}) {
@@ -1120,8 +1167,8 @@ async function bootAndroidEmulator(avdName, consolePort, { logFile, platform = p
1120
1167
  function emulatorStdio(logFile) {
1121
1168
  if (!logFile) return "ignore";
1122
1169
  try {
1123
- mkdirSync(dirname$1(logFile), { recursive: true });
1124
- const fd = openSync(logFile, "w");
1170
+ mkdirSync$1(dirname$1(logFile), { recursive: true });
1171
+ const fd = openSync$1(logFile, "w");
1125
1172
  return [
1126
1173
  "ignore",
1127
1174
  fd,
@@ -1329,7 +1376,7 @@ function avdProcessLockPaths(avdDirectory, platform) {
1329
1376
  }
1330
1377
  function readAvdProcessId(path) {
1331
1378
  try {
1332
- const pid = Number(readFileSync(path, "utf8").split("\0")[0]);
1379
+ const pid = Number(readFileSync$1(path, "utf8").split("\0")[0]);
1333
1380
  if (!Number.isSafeInteger(pid) || pid <= 0) throw new Error(`Could not read the emulator PID from process lock ${path}.`);
1334
1381
  return pid;
1335
1382
  } catch (error) {
@@ -1459,7 +1506,7 @@ const EMULATOR_SIGNAL_GRACE_MS = 5e3;
1459
1506
  async function waitForAndroidEmulatorShutdown(avdName, shutdown, { operation, timeoutMs = ANDROID_EMULATOR_SHUTDOWN_TIMEOUT_MS, pollMs = ANDROID_EMULATOR_SHUTDOWN_POLL_MS, signalGraceMs = EMULATOR_SIGNAL_GRACE_MS, platform = process.platform, resolveDirectory = ownedAvdDirectory, readProcessId = readAvdProcessId, processAlive = pidExists, listProcesses = (name, host) => listAvdEmulatorProcessesAsync(name, host, operation), captureIdentity = process_identity_exports.captureProcessIdentity, inspectIdentity = process_identity_exports.inspectProcessIdentity, signal = (pid, name) => signalProcessTreeAsync(pid, name, {
1460
1507
  platform,
1461
1508
  operation
1462
- }), directoryExists = (path) => statSync(path).isDirectory(), crashHandlerPids = (pid) => emulatorCrashHandlerPids(pid, operation), killCrashHandler = (pid) => signalProcessTreeAsync(pid, "SIGKILL", {
1509
+ }), directoryExists = (path) => statSync$1(path).isDirectory(), crashHandlerPids = (pid) => emulatorCrashHandlerPids(pid, operation), killCrashHandler = (pid) => signalProcessTreeAsync(pid, "SIGKILL", {
1463
1510
  platform,
1464
1511
  operation
1465
1512
  }), now = Date.now, sleep = (ms) => cancellableSleep(ms, {
@@ -1725,4 +1772,4 @@ function ownedAvdSerialResolver({ timeoutMs } = {}) {
1725
1772
  };
1726
1773
  }
1727
1774
  //#endregion
1728
- export { removeMetroReverses as $, listAdbDevices as A, ownedAvdDeviceProfile as B, emulatorDiskSpaceRemedy as C, getAvdNameForSerial as D, findBuildTool as E, listAvdsAsync as F, ownedAvdSerialResolverAsync as G, ownedAvdMatchesConfiguration as H, listInstalledSystemImages as I, parseAvdSystemImage as J, ownedAvdSystemImage as K, listOrphanedAvdDirectories as L, listAvdDeviceProfiles as M, listAvdDeviceProfilesAsync as N, getAvdNameForSerialAsync as O, listAvds as P, profileNeedsFoldFeature as Q, memoizeEmulatorProbe as R, deleteAvd as S, configuredAndroidEmulatorApp as St, extractEmulatorFailure as T, ownedAvdName as U, ownedAvdDirectory as V, ownedAvdSerialResolver as W, pickDefaultSystemImage as X, physicalDeviceModel as Y, probeEmulatorSerial as Z, avdPoolConfiguration as _, parkSim as _t, androidDeviceAbi as a, systemImageSupportsFold as at, configureNewOwnedAvd as b, removeParkedAfter as bt, androidPoolNoCandidatesRefusal as c, waitForBoot as ct, androidToolPath as d, isStimOwnedSim as dt, removeOwnedEmulatorMetroReverses as et, assertOwnedAvdStopped as f, POOL_SETTING_REMEDY as ft, avdPathExists as g, isLegacyDeletionClaim as gt, avdNameAbsent as h, eraseParkedAfter as ht, androidDataFreeBytes as i, shutdownAndroidEmulator as it, listAdbDevicesAsync as j, hostSystemImageArch as k, androidSystemImageAbi as l, wipeAvdUserData as lt, avdIniPaths as m, dropParked as mt, OWNED_AVD_CONFIG_DEFAULTS as n, resolveOwnedAvdSerialAsync as nt, androidHome as o, trimAndroidCaches as ot, assertOwnedAvdStoppedAsync as p, adoptParked as pt, parseAvdDeviceProfile as q, androidBuildToolName as r, resolvePhysicalDevice as rt, androidPoolCandidates as s, waitForAndroidEmulatorShutdown as st, DEFAULT_AVD_DEVICE_PROFILE as t, resetAdoptedAvd as tt, androidToolCwd as u, isStimOwnedAvd as ut, avdStorageRoots as v, parkedMaxSetting as vt, emulatorFailureRemedy as w, createOwnedAvd as x, selectParked as xt, bootAndroidEmulator as y, readParked as yt, nextConsolePort as z };
1775
+ export { removeMetroReverses as $, listAdbDevices as A, ownedAvdDeviceProfile as B, emulatorDiskSpaceRemedy as C, forgetCreatedDeviceAsync as Ct, getAvdNameForSerial as D, configuredAndroidEmulatorApp as Dt, findBuildTool as E, recordCreatedDeviceAsync as Et, listAvdsAsync as F, ownedAvdSerialResolverAsync as G, ownedAvdMatchesConfiguration as H, listInstalledSystemImages as I, parseAvdSystemImage as J, ownedAvdSystemImage as K, listOrphanedAvdDirectories as L, listAvdDeviceProfiles as M, listAvdDeviceProfilesAsync as N, getAvdNameForSerialAsync as O, listAvds as P, profileNeedsFoldFeature as Q, memoizeEmulatorProbe as R, deleteAvd as S, forgetCreatedDevice as St, extractEmulatorFailure as T, recordCreatedDevice as Tt, ownedAvdName as U, ownedAvdDirectory as V, ownedAvdSerialResolver as W, pickDefaultSystemImage as X, physicalDeviceModel as Y, probeEmulatorSerial as Z, avdPoolConfiguration as _, parkSim as _t, androidDeviceAbi as a, systemImageSupportsFold as at, configureNewOwnedAvd as b, removeParkedAfter as bt, androidPoolNoCandidatesRefusal as c, waitForBoot as ct, androidToolPath as d, isStimOwnedSim as dt, removeOwnedEmulatorMetroReverses as et, assertOwnedAvdStopped as f, POOL_SETTING_REMEDY as ft, avdPathExists as g, isLegacyDeletionClaim as gt, avdNameAbsent as h, eraseParkedAfter as ht, androidDataFreeBytes as i, shutdownAndroidEmulator as it, listAdbDevicesAsync as j, hostSystemImageArch as k, androidSystemImageAbi as l, wipeAvdUserData as lt, avdIniPaths as m, dropParked as mt, OWNED_AVD_CONFIG_DEFAULTS as n, resolveOwnedAvdSerialAsync as nt, androidHome as o, trimAndroidCaches as ot, assertOwnedAvdStoppedAsync as p, adoptParked as pt, parseAvdDeviceProfile as q, androidBuildToolName as r, resolvePhysicalDevice as rt, androidPoolCandidates as s, waitForAndroidEmulatorShutdown as st, DEFAULT_AVD_DEVICE_PROFILE as t, resetAdoptedAvd as tt, androidToolCwd as u, isStimOwnedAvd as ut, avdStorageRoots as v, parkedMaxSetting as vt, emulatorFailureRemedy as w, readCreatedDevices$1 as wt, createOwnedAvd as x, selectParked as xt, bootAndroidEmulator as y, readParked as yt, nextConsolePort as z };
@@ -1,7 +1,7 @@
1
- import { n as ensureWorkspaceStorage, v as withDirLock$1 } from "./paths-DQtTgsBf.mjs";
2
- import { d as getConfigDir } from "./config-BZhXY15H.mjs";
3
- import { m as defaultAndroidLayout } from "./settings-RKwY33wv.mjs";
4
- import { r as register } from "./cache-manifest-BPXRONJz.mjs";
1
+ import { M as withDirLock$1, _ as ensureWorkspaceStorage } from "./workspace-state-pUg3_RRA.mjs";
2
+ import { d as getConfigDir } from "./config-BktkY_zC.mjs";
3
+ import { m as defaultAndroidLayout } from "./settings-CosW5X-S.mjs";
4
+ import { r as register } from "./cache-manifest-BEZ9Bpl1.mjs";
5
5
  import { createHash, randomUUID } from "node:crypto";
6
6
  import { accessSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync } from "node:fs";
7
7
  import { join } from "node:path";