stim 1.26.0 → 1.28.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 (172) hide show
  1. package/dist/{acquire-artifact-DVsvSwf7.mjs → acquire-artifact-CKByBnTD.mjs} +2 -2
  2. package/dist/{act-C-BqJEpu.mjs → act-8iswyfRa.mjs} +319 -126
  3. package/dist/{activity-Lnb_EoRY.mjs → activity-DRMg4_mD.mjs} +6 -6
  4. package/dist/{agent-device-usage-output-DbXy5tg8.mjs → agent-device-usage-output-tE90fDdo.mjs} +5 -5
  5. package/dist/{android-CiNQw3kq.mjs → android-CHmSU4B4.mjs} +101 -45
  6. package/dist/{android-DTAcRwBC.mjs → android-CsPs-7Mg.mjs} +23 -18
  7. package/dist/{android-B5P81yI-.mjs → android-D577ApKG.mjs} +37 -15
  8. package/dist/{android-CSbLRD53.mjs → android-YWCbmkVK.mjs} +5 -5
  9. package/dist/{android-cas-BTVhZ0Qs.mjs → android-cas-_aDifWW0.mjs} +4 -4
  10. package/dist/android-cas-compiler.mjs +1 -1
  11. package/dist/api.d.mts +14 -4
  12. package/dist/api.mjs +39 -29
  13. package/dist/{apk-signed-tail-B46U9hXc.mjs → apk-signed-tail-CQbwM0qO.mjs} +2 -2
  14. package/dist/{artifact-CsAP6AGK.mjs → artifact-DYtHjxsn.mjs} +19 -24
  15. package/dist/{artifact-BxREhAaV.mjs → artifact-bFkfD3vf.mjs} +18 -23
  16. package/dist/{artifact-platform-CMRc0M_r.mjs → artifact-platform-BO2Uvk_A.mjs} +1 -1
  17. package/dist/auto-placement-BVqs8AJi.mjs +350 -0
  18. package/dist/{browser-web-rYPyqhTf.mjs → browser-web-BUaLcafY.mjs} +16 -16
  19. package/dist/{build-DPhApsjV.mjs → build-cQURy_KW.mjs} +35 -31
  20. package/dist/{build-cache-DrXNCy3T.mjs → build-cache-CZULpXVl.mjs} +43 -21
  21. package/dist/{build-plan-DrMMdayj.mjs → build-plan-CxoYfxsc.mjs} +7 -6
  22. package/dist/{cache-manifest-BEZ9Bpl1.mjs → cache-manifest-DEjqGGat.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{budget-k2mZGvvk.mjs → ccache-Bm_A1xX9.mjs} +562 -1604
  25. package/dist/{cdp-BG3FJCCx.mjs → cdp-C3svvXiE.mjs} +1 -1
  26. package/dist/{chrome-BvV8ssI3.mjs → chrome-DyDWurWG.mjs} +1 -1
  27. package/dist/{cli-BBKFGOFl.mjs → cli-CpbaLDa7.mjs} +24 -23
  28. package/dist/cli.mjs +1 -1
  29. package/dist/{client-D9CaRks-.mjs → client-YxCer6ab.mjs} +84 -65
  30. package/dist/collector-run.d.mts +10 -9
  31. package/dist/collector-run.mjs +42 -27
  32. package/dist/{command-output-BF5AR2dL.mjs → command-output-C8R1KIvi.mjs} +1 -1
  33. package/dist/{config-BktkY_zC.mjs → config-Cn94Jc0g.mjs} +23 -4
  34. package/dist/{dependencies-Dw6wfQdv.mjs → dependencies-DKeMzwXY.mjs} +108 -60
  35. package/dist/{dependency-state-DFB41vfr.mjs → dependency-state-CojA2o0t.mjs} +14 -7
  36. package/dist/{detached-entry-KmieOKgN.mjs → detached-entry-BPlSaCwC.mjs} +1 -1
  37. package/dist/{dev-client-DXR_tPVY.mjs → dev-client-D-BW5uiq.mjs} +2 -2
  38. package/dist/{device-BK-zwyd_.mjs → device-CgXfbcz5.mjs} +25 -24
  39. package/dist/{device-capacity-DCSvUF0l.mjs → device-capacity-Cd8lMSn3.mjs} +175 -22
  40. package/dist/{device-BcYeHSFu.mjs → device-eeK95Lir.mjs} +16 -16
  41. package/dist/device-host-worker.mjs +22 -20
  42. package/dist/{device-ios-BLGfXQeK.mjs → device-ios-Cc9ulihb.mjs} +251 -23
  43. package/dist/{device-lease-run-BmvIl7bI.mjs → device-lease-run-Mtzp4THX.mjs} +5 -5
  44. package/dist/{device-pool-Dluix4H3.mjs → device-pool-eRz6DtCg.mjs} +3 -3
  45. package/dist/{doctor-Bhg1ii70.mjs → doctor-Bz_ouYAW.mjs} +28 -16
  46. package/dist/{doctor-Cp-BhzTS.mjs → doctor-C2QyhejJ.mjs} +1 -1
  47. package/dist/{doctor-fingerprint-D3a04Mhu.mjs → doctor-fingerprint-o7ZI9YLn.mjs} +1 -1
  48. package/dist/doctor-fingerprint.mjs +1 -1
  49. package/dist/{doctor-watchman-BStK05nt.mjs → doctor-watchman-BTW82PDC.mjs} +5 -5
  50. package/dist/{doctor-OnwP94ne.mjs → doctor-xf7ht-5n.mjs} +76 -32
  51. package/dist/{eas-build-Dsj93iM9.mjs → eas-build-Dm6q68QY.mjs} +4 -4
  52. package/dist/eas-fallback-DajNpxf-.mjs +87 -0
  53. package/dist/{eas-session-ledger-B5vygTiD.mjs → eas-session-ledger-CBFo_Uo1.mjs} +37 -8
  54. package/dist/{error-diagnostics-BOOm9Db7.mjs → error-diagnostics-D1QfyJzQ.mjs} +51 -25
  55. package/dist/{exec-VFRpu1iA.mjs → exec-aULwtNly.mjs} +57 -6
  56. package/dist/{gc-ldgr-hXU.mjs → gc-DM5oMm-J.mjs} +161 -45
  57. package/dist/{gc-C_79zvz4.mjs → gc-PLFwb0k4.mjs} +2 -2
  58. package/dist/{guide-D7K0X6KG.mjs → guide-C4I46XAk.mjs} +674 -213
  59. package/dist/{hosted-android-Bk54ej6n.mjs → hosted-android-DlaKLbW0.mjs} +6 -7
  60. package/dist/{hosted-client-fHO8yqzc.mjs → hosted-client-DDRm9hPJ.mjs} +51 -20
  61. package/dist/{hosted-logs-BfbmDM4M.mjs → hosted-logs-bSebOKbz.mjs} +8 -8
  62. package/dist/{hosted-logs-sync-B0pvmOk-.mjs → hosted-logs-sync-B0c53W_c.mjs} +5 -5
  63. package/dist/{hosted-macos-CPl0OZ9h.mjs → hosted-macos-B7-8Pv4H.mjs} +6 -6
  64. package/dist/{hosted-native-CpDB3-PO.mjs → hosted-native-CDe33CSr.mjs} +22 -18
  65. package/dist/{idle-shutdown-FfxL1KdG.mjs → idle-shutdown-CQ0QwU9J.mjs} +7 -8
  66. package/dist/{ios-WxpDJ5T1.mjs → ios-B1DYuOjh.mjs} +27 -11
  67. package/dist/{ios-B7-lToDu.mjs → ios-B1HvafEG.mjs} +8 -8
  68. package/dist/{ios-ENC4sRPA.mjs → ios-CsRVik64.mjs} +7 -1
  69. package/dist/{ios-device-CsyryvpT.mjs → ios-device-B4elVFKi.mjs} +3 -3
  70. package/dist/{ios-device-B6HK951C.mjs → ios-device-CiBA-er9.mjs} +1 -1
  71. package/dist/{ios-project-Ty5pHl9O.mjs → ios-project-CR4mZ7CH.mjs} +22 -9
  72. package/dist/{ios-signing-4c_qXvQm.mjs → ios-signing-BJzvDPfU.mjs} +2 -2
  73. package/dist/{ios-state-Cw7-WQf2.mjs → ios-state-BPHqMDdZ.mjs} +1 -1
  74. package/dist/{ios-ftxdQbJS.mjs → ios-tg4tp3q1.mjs} +94 -37
  75. package/dist/{js-swap-BMhXYVDS.mjs → js-swap-CVpSW1fn.mjs} +8 -7
  76. package/dist/{launch-DOp8RjDz.mjs → launch-DoySmhjz.mjs} +42 -38
  77. package/dist/lightened-DFAJgfIk.mjs +171 -0
  78. package/dist/{logs-s1dRIG1E.mjs → logs-BGsW7iPe.mjs} +46 -21
  79. package/dist/{logs-dQDki6Tt.mjs → logs-DI5ILkYB.mjs} +7 -7
  80. package/dist/{macos-DBBPNnIA.mjs → macos-Bo9st9Di.mjs} +73 -38
  81. package/dist/{macos-B0VEV3Gf.mjs → macos-C12RMJQF.mjs} +1 -1
  82. package/dist/macos-run.mjs +1 -1
  83. package/dist/maintenance-run.mjs +7 -7
  84. package/dist/{metro-CjC10t6E.mjs → metro-BnhXV2Mj.mjs} +4 -4
  85. package/dist/{metro-gateway-B6_PgD0L.mjs → metro-request-DXyKjVDF.mjs} +26 -47
  86. package/dist/{named-ports-BG0j1X4g.mjs → named-ports-Phoi2POD.mjs} +3 -3
  87. package/dist/{native-android-CL2NGiik.mjs → native-android-vxgtLD7w.mjs} +17 -18
  88. package/dist/{native-gradle-artifact-inputs-btSUulme.mjs → native-gradle-artifact-inputs-BN96IVw8.mjs} +5 -5
  89. package/dist/{native-runtime-Dq3RBcON.mjs → native-runtime-DG4Rodzj.mjs} +9 -8
  90. package/dist/{native-source-D-4Dh4JU.mjs → native-source-D1AzWiuP.mjs} +1 -1
  91. package/dist/{native-xcode-inputs-BW7H8JGu.mjs → native-xcode-inputs-BKarCoKg.mjs} +3 -3
  92. package/dist/{native-xcode-ios-CBXJAxfC.mjs → native-xcode-ios-8A-efGa5.mjs} +17 -17
  93. package/dist/{ndjson-CgE_o3Dl.mjs → ndjson-Dy2W4vRa.mjs} +2 -2
  94. package/dist/offload-worker.mjs +23 -24
  95. package/dist/{operation-exec-CUZifp6Z.mjs → operation-exec-Dp4FuIGR.mjs} +1 -1
  96. package/dist/{ownership-BjYvMNX_.mjs → ownership-DJCq48IJ.mjs} +3 -3
  97. package/dist/{page-CzEA_-5_.mjs → page-CQJlcj3x.mjs} +2 -2
  98. package/dist/{phone-reverses-lmj6kcPm.mjs → phone-reverses-BzTa8g1F.mjs} +18 -4
  99. package/dist/{placement-log-DIFPQAXp.mjs → placement-log-Cvhta5ib.mjs} +3 -3
  100. package/dist/{plan-placement-IiiSQhtz.mjs → plan-placement-WkZdccuN.mjs} +36 -10
  101. package/dist/{ports-C2_w1Z0Z.mjs → ports-UV4mJgyC.mjs} +3 -3
  102. package/dist/{prebuild-gmouvmJZ.mjs → prebuild-k8d_tqOq.mjs} +16 -17
  103. package/dist/{project-BUu6Is4k.mjs → project-Sui52ywT.mjs} +17 -17
  104. package/dist/{pull-request-CbNlkFok.mjs → pull-request-BzLmzAIQ.mjs} +2 -2
  105. package/dist/pull-requests.mjs +1 -1
  106. package/dist/{react-native-android-Cgg99REN.mjs → react-native-android-DANlGGQf.mjs} +32 -26
  107. package/dist/{react-native-build-oNwqF5Wb.mjs → react-native-build-jUHnIfZ9.mjs} +9 -9
  108. package/dist/{react-native-doctor-BhA3KUte.mjs → react-native-doctor-DCWRjS7K.mjs} +6 -6
  109. package/dist/{react-native-ios-B-nf4rjN.mjs → react-native-ios-BwMsFMXi.mjs} +23 -17
  110. package/dist/{recordings-BldzVKq0.mjs → recordings-iy0mkm7b.mjs} +1 -1
  111. package/dist/{registration-CN6nlhcD.mjs → registration-BwCe64PH.mjs} +1 -1
  112. package/dist/{reload-C9OduiNc.mjs → reload-Bj7QyuDy.mjs} +1 -1
  113. package/dist/{reload-CCR7KC_l.mjs → reload-c_uEyc_X.mjs} +16 -16
  114. package/dist/{remote-C8S7FlPF.mjs → remote-DFlpAqdV.mjs} +23 -10
  115. package/dist/{result-7F5hEwQJ.mjs → result-BIcXREyC.mjs} +32 -21
  116. package/dist/{run-BqB0v3pt.mjs → run-y2HwyNvg.mjs} +3 -3
  117. package/dist/{selection-BNPBZ6T5.mjs → selection-CXgM_VK_.mjs} +37 -29
  118. package/dist/{server-bare-A75rDIdD.mjs → server-bare-2N4vSRZG.mjs} +2 -2
  119. package/dist/{server-command-CssKFOD7.mjs → server-command-qneHPcRI.mjs} +6 -6
  120. package/dist/{server-expo-eQfOdydb.mjs → server-expo-Ccm9zB0o.mjs} +4 -4
  121. package/dist/server-expo-WulkyAwT.mjs +2 -0
  122. package/dist/{settings-CosW5X-S.mjs → settings-CY5JZlNN.mjs} +375 -62
  123. package/dist/{settings-OaGQF-ri.mjs → settings-Cfd_Q6ys.mjs} +24 -3
  124. package/dist/settings-payload-DwQiEMCn.mjs +257 -0
  125. package/dist/settings-write-CJpjkeAd.mjs +185 -0
  126. package/dist/settings.schema.json +51 -33
  127. package/dist/{simslim-Bax1qcxu.mjs → simslim-DCQwzoPy.mjs} +2 -2
  128. package/dist/{slot-launch-CYCEhfBY.mjs → slot-launch-BpmanOnk.mjs} +6 -6
  129. package/dist/{stage-jKQ7CP_B.mjs → stage-CmugrSG5.mjs} +2 -2
  130. package/dist/{start-C_wefNKB.mjs → start-CHH3zgIU.mjs} +1 -1
  131. package/dist/{start-_BdJ32cZ.mjs → start-DYLk6GXn.mjs} +27 -22
  132. package/dist/{state-C1i2nMOP.mjs → state-B2QJbDwz.mjs} +4 -4
  133. package/dist/{state-C4OdpOTF.mjs → state-BXC1Lfxw.mjs} +2 -2
  134. package/dist/{stats-tEpEEH-u.mjs → stats-DxKqhcGp.mjs} +5 -5
  135. package/dist/{stats-report-n2U5plhk.mjs → stats-report-B86Cv7Uc.mjs} +1 -1
  136. package/dist/{status-CRXz-Gtj.mjs → status-7ULDEJ1e.mjs} +1 -1
  137. package/dist/{status-DQrqodLj.mjs → status-BHCkOZga.mjs} +51 -28
  138. package/dist/{status-B9M7x4CZ.mjs → status-D_Ljc89p.mjs} +1 -1
  139. package/dist/{status-watch-B5wDIH_o.mjs → status-watch-BmsPqYSU.mjs} +18 -7
  140. package/dist/status-worker.mjs +1 -1
  141. package/dist/{stim-desktop-6Dqp-gjX.mjs → stim-desktop-CbWo21kb.mjs} +2 -2
  142. package/dist/{stop-DRqQVqDJ.mjs → stop-D-dGE9gh.mjs} +21 -20
  143. package/dist/{stop-ySNQHXMG.mjs → stop-DQvE-P76.mjs} +10 -6
  144. package/dist/{stop-CmdNhGlC.mjs → stop-b2pouxAO.mjs} +2 -2
  145. package/dist/supervisor-run.mjs +237 -63
  146. package/dist/{support-BGSCBoib.mjs → support-04IhBUTT.mjs} +6 -6
  147. package/dist/{support-CVOCp0Ft.mjs → support-BtlJKjyQ.mjs} +12 -11
  148. package/dist/{swiftpm-artifact-inputs-CfUzt_0Z.mjs → swiftpm-artifact-inputs-Cj2UpmPN.mjs} +4 -4
  149. package/dist/{swiftpm-macos-x6HPpl_2.mjs → swiftpm-macos-BhF2stxY.mjs} +11 -12
  150. package/dist/{toolchain-J4J8MrAr.mjs → toolchain-mLA_km-b.mjs} +321 -15
  151. package/dist/{toolchain-DoavrvIA.mjs → toolchain-qktiV8xc.mjs} +1 -1
  152. package/dist/{trigger-KVaWWNyn.mjs → trigger-DMou-X7j.mjs} +2 -2
  153. package/dist/trigger-qp2ji5wE.mjs +2 -0
  154. package/dist/{warm-progress-DvhTX_eu.mjs → warm-progress-B0Vpuvpl.mjs} +731 -727
  155. package/dist/{web-Bihbf7-u.mjs → web-BYmK0TjL.mjs} +9 -9
  156. package/dist/web-CrVLVQZY.mjs +2 -0
  157. package/dist/web-run.mjs +9 -9
  158. package/dist/windows-report.mjs +1 -1
  159. package/dist/{workspace-state-pUg3_RRA.mjs → workspace-state-kIZrdlSg.mjs} +3 -3
  160. package/dist/{workspaces-g2lhdBXF.mjs → workspaces-CmOcceDN.mjs} +1879 -74
  161. package/dist/{worktree-BKuklFh_.mjs → worktree-2dk5edza.mjs} +933 -534
  162. package/dist/worktree-nliAoHxB.mjs +2 -0
  163. package/package.json +7 -7
  164. package/dist/ccache-Bx5TbxwG.mjs +0 -143
  165. package/dist/eas-fallback-FwkeqqGi.mjs +0 -381
  166. package/dist/hosted-ios-D55QhYaD.mjs +0 -15
  167. package/dist/native-run-BfIDFKLH.mjs +0 -275
  168. package/dist/server-expo-wvcj5tiZ.mjs +0 -2
  169. package/dist/settings-write-QjYfSrjF.mjs +0 -360
  170. package/dist/trigger-DzJu208Q.mjs +0 -2
  171. package/dist/web-BFLueSh-.mjs +0 -2
  172. package/dist/worktree-Bm4cb-nU.mjs +0 -2
@@ -1,9 +1,9 @@
1
- import { r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
2
- import { G as projectDeviceSlots, U as parseDeviceSlotKey, p as getProject } from "./config-BktkY_zC.mjs";
3
- import { O as getAvdNameForSerialAsync, j as listAdbDevicesAsync } from "./android-DTAcRwBC.mjs";
4
- import { Cn as deviceShellArg } from "./budget-k2mZGvvk.mjs";
5
- import { y as fileLeaseIo } from "./activity-Lnb_EoRY.mjs";
6
- import { f as listAllIosSimsAsync } from "./ios-WxpDJ5T1.mjs";
1
+ import { r as readWorkspaceState$1 } from "./workspace-state-kIZrdlSg.mjs";
2
+ import { G as projectDeviceSlots, U as parseDeviceSlotKey, p as getProject } from "./config-Cn94Jc0g.mjs";
3
+ import { O as getAvdNameForSerialAsync, j as listAdbDevicesAsync } from "./android-CsPs-7Mg.mjs";
4
+ import { on as deviceShellArg } from "./ccache-Bm_A1xX9.mjs";
5
+ import { y as fileLeaseIo } from "./activity-DRMg4_mD.mjs";
6
+ import { f as listAllIosSimsAsync } from "./ios-B1DYuOjh.mjs";
7
7
  import { hostedNativeRecords } from "@stim-cli/core/state";
8
8
  //#region src/engine/slot-launch.ts
9
9
  function launchSlotScope(root, slot = "default") {
@@ -1,5 +1,5 @@
1
- import { c as throwIfCancelled, t as getExecutor, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
- import { d as runCancellationSignal } from "./native-run-BfIDFKLH.mjs";
1
+ import { c as throwIfCancelled, t as getExecutor, x as withDrainingCancellation } from "./exec-aULwtNly.mjs";
2
+ import { ot as runCancellationSignal } from "./toolchain-mLA_km-b.mjs";
3
3
  import { existsSync, lstatSync, promises, readdirSync, realpathSync, statSync } from "node:fs";
4
4
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
5
5
  import { validMacosResourceDestination } from "@stim-cli/core";
@@ -1,2 +1,2 @@
1
- import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-_BdJ32cZ.mjs";
1
+ import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-DYLk6GXn.mjs";
2
2
  export { startCommand as default, failureEvidence, liveSupervisor, parseWait, readLogTail, registerStart, resolveWorkspaceMetroPort, startDevServer, startFacts, supervisorEntry, supervisorSignalable, tailLines, wantsExpoOwnTunnel };
@@ -1,20 +1,21 @@
1
- import { D as ownership_claim_exports, S as process_identity_exports, a as waitForGroupExit, c as throwIfCancelled, d as workspaceProcessLockError, l as WorkspaceProcessCleanupError, o as cancellableSleep, r as groupExitBudgetMs, t as getExecutor, u as withWorkspaceProcessLock, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
- import { S as supervisorLogFile, _ as ensureWorkspaceStorage, i as recordWorkspaceUse, k as workspaceLogsDir$1, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync, w as workspaceAgentDeviceDir } from "./workspace-state-pUg3_RRA.mjs";
3
- import { E as upsertProject, O as withConfigLockAsync$1, p as getProject, x as releaseMetroPort } from "./config-BktkY_zC.mjs";
4
- import { _ as stepTimer, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
- import { A as metroCommandSettingError, F as ngrokUrlSetting, G as resolveAndroidLayout, H as remoteAndroidSetting, K as resolveCacheProviderConfig, M as metroPortSetting, N as metroTunnelSettingError, W as remoteIosSetting, Y as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, at as unknownSettingKeys, ct as PUBLIC_METRO_ENV, h as deviceIdleShutdownMinutesSetting, it as tunnelModeSetting, j as metroIdleStopMinutesSetting, k as metroCommandSetting, lt as detectProviders, m as defaultAndroidLayout, p as cacheProviderSettingError, q as resolveIosProjectDir, tt as settingShapeErrors, ut as planMetroReach, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
6
- import { E as MODE_EXPO, M as readMetroTunnel, O as clearManagedMetroTunnel, S as readAppJson, T as MODE_COMMAND, c as projectProblem, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL, v as detectIsExpo, w as MODE_BARE, x as readAppConfigText } from "./project-BUu6Is4k.mjs";
7
- import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-6Dqp-gjX.mjs";
8
- import { _ as PORT_INSPECTION_REMEDY, a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, f as signalProcessTree, g as reserveMetroPort, h as isMetroRunning, m as createPortProbe, u as processCwds, v as PortInspectionError } from "./metro-CjC10t6E.mjs";
9
- import { i as levelRank } from "./ndjson-CgE_o3Dl.mjs";
10
- import { $n as readProjectConfig, Un as runProcessOperation, Vn as exitAfterFlush, ir as remoteCliInvocation, p as stopOwnedMetroForReset, t as budgetGate } from "./budget-k2mZGvvk.mjs";
11
- import { S as withManagedTunnelLock, _ as startTunnelSequence, b as withManagedRemoteWorktreeLock, g as resolveSupervisorTarget, v as stopTunnel, y as terminateChild } from "./workspaces-g2lhdBXF.mjs";
1
+ import { D as ownership_claim_exports, S as process_identity_exports, a as waitForGroupExit, c as throwIfCancelled, d as workspaceProcessLockError, l as WorkspaceProcessCleanupError, o as cancellableSleep, r as groupExitBudgetMs, t as getExecutor, u as withWorkspaceProcessLock, x as withDrainingCancellation } from "./exec-aULwtNly.mjs";
2
+ import { S as supervisorLogFile, _ as ensureWorkspaceStorage, i as recordWorkspaceUse, k as workspaceLogsDir$1, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync, w as workspaceAgentDeviceDir } from "./workspace-state-kIZrdlSg.mjs";
3
+ import { E as upsertProject, O as withConfigLockAsync$1, p as getProject, x as releaseMetroPort } from "./config-Cn94Jc0g.mjs";
4
+ import { _ as stepTimer, l as phaseLine } from "./command-output-C8R1KIvi.mjs";
5
+ import { A as metroCommandSetting, B as publicUrlSetting, G as remoteIosSetting, I as ngrokUrlSetting, J as resolveCacheProviderConfig, M as metroIdleStopMinutesSetting, N as metroPortSetting, P as metroTunnelSettingError, U as remoteAndroidSetting, Y as resolveIosProjectDir, Z as resolveProjectSettingsAsync, _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, dt as detectProviders, ft as planMetroReach, h as deviceIdleShutdownMinutesSetting, j as metroCommandSettingError, m as defaultAndroidLayout, ot as tunnelModeSetting, p as cacheProviderSettingError, q as resolveAndroidLayout, rt as settingShapeErrors, st as unknownSettingKeys, ut as PUBLIC_METRO_ENV } from "./settings-CY5JZlNN.mjs";
6
+ import { E as MODE_EXPO, M as readMetroTunnel, O as clearManagedMetroTunnel, S as readAppJson, T as MODE_COMMAND, c as projectProblem, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL, v as detectIsExpo, w as MODE_BARE, x as readAppConfigText } from "./project-Sui52ywT.mjs";
7
+ import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-CbWo21kb.mjs";
8
+ import { _ as PORT_INSPECTION_REMEDY, a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, f as signalProcessTree, g as reserveMetroPort, h as isMetroRunning, m as createPortProbe, u as processCwds, v as PortInspectionError } from "./metro-BnhXV2Mj.mjs";
9
+ import { a as levelRank } from "./ndjson-Dy2W4vRa.mjs";
10
+ import { En as runProcessOperation, In as readProjectConfig, Vn as remoteCliInvocation, b as stopOwnedMetroForReset, c as budgetGate, wn as exitAfterFlush } from "./ccache-Bm_A1xX9.mjs";
11
+ import { C as stopTunnel, D as withManagedTunnelLock, S as startTunnelSequence, T as withManagedRemoteWorktreeLock, w as terminateChild, x as resolveSupervisorTarget } from "./workspaces-CmOcceDN.mjs";
12
+ import { i as restoreLightenedDependencies } from "./lightened-DFAJgfIk.mjs";
12
13
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
13
- import { n as windowsLauncherArgs } from "./detached-entry-KmieOKgN.mjs";
14
+ import { n as windowsLauncherArgs } from "./detached-entry-BPlSaCwC.mjs";
14
15
  import { appendFileSync, closeSync, mkdirSync, openSync, readFileSync } from "node:fs";
15
16
  import { dirname } from "node:path";
16
17
  import { ambientContext, ambientEnv } from "@stim-cli/core";
17
- import { IDLE_STOP_KEY, queryLogs } from "@stim-cli/core/state";
18
+ import { IDLE_STOP_KEY, queryLogs, trace } from "@stim-cli/core/state";
18
19
  import { join as join$1 } from "path";
19
20
  import chalk from "chalk";
20
21
  import { existsSync as existsSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1 } from "fs";
@@ -293,6 +294,8 @@ function registerStart(program, overrides = {}) {
293
294
  const waitSeconds = wait.seconds;
294
295
  const root = findProjectRoot$1(process.cwd());
295
296
  if (!root) return fail(NO_PROJECT_REFUSAL);
297
+ const lightened = (await runProcessOperation(root, (context) => restoreLightenedDependencies(root, context))).value;
298
+ if (lightened) return fail(lightened);
296
299
  const problem = projectProblem(root, "dev-server");
297
300
  if (problem) return fail({
298
301
  code: "STIM_NO_PROJECT",
@@ -317,7 +320,7 @@ function registerStart(program, overrides = {}) {
317
320
  lines: moreShapeErrors,
318
321
  remedy: SETTING_SHAPE_REMEDY
319
322
  });
320
- for (const key of unknownSettingKeys(settings)) note(chalk.yellow(`Warning: setting "${key}" is not read by Stim and will be ignored.`));
323
+ for (const key of unknownSettingKeys(settings)) note(chalk.yellow(inertSettingWarning(settings, key)));
321
324
  const cacheProviderError = cacheProviderSettingError(settings);
322
325
  if (cacheProviderError) note(chalk.yellow(`Warning: ${cacheProviderError} No cache provider is used.`));
323
326
  const { value: result, interrupted } = await runProcessOperation(root, (context) => withDrainingCancellation(context, context.signal, async () => {
@@ -1346,14 +1349,16 @@ async function reservePort(root, pinned, hostedPorts) {
1346
1349
  }
1347
1350
  }
1348
1351
  async function waitForMetro({ root, port, seconds, aborted = () => false, probe = resolveStartupMetro }) {
1349
- const deadline = Date.now() + seconds * 1e3;
1350
- while (Date.now() < deadline) {
1351
- if ((await probe(port, root)).metro) return true;
1352
- if (aborted()) return false;
1353
- await waitForStartup(POLL_MS);
1354
- }
1355
- const last = await probe(port, root);
1356
- return Boolean(last.metro);
1352
+ return trace.spanAsync("wait for metro", async () => {
1353
+ const deadline = Date.now() + seconds * 1e3;
1354
+ while (Date.now() < deadline) {
1355
+ if ((await probe(port, root)).metro) return true;
1356
+ if (aborted()) return false;
1357
+ await waitForStartup(POLL_MS);
1358
+ }
1359
+ const last = await probe(port, root);
1360
+ return Boolean(last.metro);
1361
+ }, { port });
1357
1362
  }
1358
1363
  async function waitForExpoTunnel({ root, seconds, aborted = () => false }) {
1359
1364
  const deadline = Date.now() + seconds * 1e3;
@@ -1,7 +1,7 @@
1
- import { D as ownership_claim_exports, S as process_identity_exports, l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { E as workspaceDir, d as writeWorkspaceState, k as workspaceLogsDir$1, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-pUg3_RRA.mjs";
3
- import { t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
4
- import { c as pidExists } from "./metro-CjC10t6E.mjs";
1
+ import { D as ownership_claim_exports, S as process_identity_exports, l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { E as workspaceDir, d as writeWorkspaceState, k as workspaceLogsDir$1, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-kIZrdlSg.mjs";
3
+ import { t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
4
+ import { c as pidExists } from "./metro-BnhXV2Mj.mjs";
5
5
  import { readFileSync, readlinkSync, rmSync } from "node:fs";
6
6
  import { hostname } from "node:os";
7
7
  import { join } from "node:path";
@@ -1,5 +1,5 @@
1
- import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
2
- import { E as workspaceDir, k as workspaceLogsDir$1, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
1
+ import { S as process_identity_exports } from "./exec-aULwtNly.mjs";
2
+ import { E as workspaceDir, k as workspaceLogsDir$1, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { existsSync } from "node:fs";
4
4
  import { join } from "node:path";
5
5
  import { readMacosRecord } from "@stim-cli/core/state";
@@ -1,8 +1,8 @@
1
- import { P as formatBytes } from "./config-BktkY_zC.mjs";
2
- import { o as formatLongDuration } from "./command-output-BF5AR2dL.mjs";
3
- import { i as findProjectRoot$1 } from "./project-BUu6Is4k.mjs";
4
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-DbXy5tg8.mjs";
5
- import { t as readProjectStats } from "./stats-report-n2U5plhk.mjs";
1
+ import { P as formatBytes } from "./config-Cn94Jc0g.mjs";
2
+ import { o as formatLongDuration } from "./command-output-C8R1KIvi.mjs";
3
+ import { i as findProjectRoot$1 } from "./project-Sui52ywT.mjs";
4
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-tE90fDdo.mjs";
5
+ import { t as readProjectStats } from "./stats-report-B86Cv7Uc.mjs";
6
6
  import { archivedUsage, readArchives } from "@stim-cli/core/state";
7
7
  import chalk from "chalk";
8
8
  //#region src/commands/stats.ts
@@ -1,4 +1,4 @@
1
- import { i as gitPath } from "./operation-exec-CUZifp6Z.mjs";
1
+ import { i as gitPath } from "./operation-exec-Dp4FuIGR.mjs";
2
2
  import { readStatsReport, statsProjectKey } from "@stim-cli/core/state";
3
3
  //#region src/engine/stats-report.ts
4
4
  /** The stats report for the project at `root`, keyed like the run recorders; Git runs with `env` and dies when `signal` aborts. */
@@ -1,4 +1,4 @@
1
- import { P as formatBytes } from "./config-BktkY_zC.mjs";
1
+ import { P as formatBytes } from "./config-Cn94Jc0g.mjs";
2
2
  import { t as resolveMaintenanceSettings } from "./settings-Djl-mpjX.mjs";
3
3
  import { claimRemoveCommand, readClaimSet } from "@stim-cli/core/ownership-claim";
4
4
  import { maintenanceRunClaims, readMaintenanceState } from "@stim-cli/core/state";
@@ -1,34 +1,35 @@
1
- import { S as process_identity_exports, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { O as workspaceLogErrorIndex, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
3
- import { G as projectDeviceSlots, P as formatBytes, R as volumeRootFor, U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, d as getConfigDir } from "./config-BktkY_zC.mjs";
4
- import { a as formatElapsed, i as formatDuration, r as clockTime, u as plural } from "./command-output-BF5AR2dL.mjs";
5
- import { s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
6
- import { Nt as repoRoot, Tt as linkedWorktreesOnDisk, X as resolveSettings, bt as gitCommonDirOnDisk, st as workspaceHiddenSetting, vt as gitCommonDir } from "./settings-CosW5X-S.mjs";
7
- import { I as readWorkspaceLaunches, M as readMetroTunnel, P as readRemoteSession, S as readAppJson, a as findServerWorkspace, l as projectShortcut, u as detectPlatforms, v as detectIsExpo, y as detectTutorial } from "./project-BUu6Is4k.mjs";
8
- import { A as listAdbDevices, B as ownedAvdDeviceProfile, W as ownedAvdSerialResolver, ft as POOL_SETTING_REMEDY, vt as parkedMaxSetting, yt as readParked } from "./android-DTAcRwBC.mjs";
9
- import { c as pidExists, d as resolveProjectMetro, h as isMetroRunning, i as listeningPids, l as processCwd, o as listeningPidsByPort, u as processCwds } from "./metro-CjC10t6E.mjs";
10
- import { a as parseNdjsonLine } from "./ndjson-CgE_o3Dl.mjs";
11
- import { a as readWebPage, o as readWebRecord, u as webFacts } from "./state-C1i2nMOP.mjs";
12
- import { A as remoteDeviceState, C as environmentState, D as parseDfFree, E as metroReverseTargets, M as tightVolumes, N as unprovisionedWorktrees, O as poolLine, P as withWebFacts, S as diskLine, T as gitSummaryText, _ as addReverseMissingIssue, b as deviceLeaseLines, g as activityLabel, j as statusActivity, k as remoteDeviceLine, r as readEasSessionLedger$1, v as applyMachineMemory, x as deviceLeaseStates, y as capacity } from "./eas-session-ledger-B5vygTiD.mjs";
13
- import { B as bundlingActivity, Er as readFootprints, F as ACTIVE_BUILD_KEY, H as parseActiveBuild, L as activeBuildState, R as buildReport, Tn as hasMetroReverse, Tr as attributeMachineUsage, Z as readStats$1, h as describeMetroLastStop, o as machineNumber, tt as statsProjectKey$1, y as metroLastStop, z as buildStatusLine } from "./budget-k2mZGvvk.mjs";
14
- import { g as resolveSupervisorTarget } from "./workspaces-g2lhdBXF.mjs";
15
- import { a as createDeviceProcessTables, b as leaseIsExpired, h as tailLines, m as readWebActivity, r as createActivityReader, w as parseWorkspaceLeases, x as listLeaseFiles } from "./activity-Lnb_EoRY.mjs";
16
- import { b as parseSimctlList, f as listAllIosSimsAsync } from "./ios-WxpDJ5T1.mjs";
17
- import { f as probeHostedSession } from "./hosted-client-fHO8yqzc.mjs";
18
- import "./hosted-macos-CPl0OZ9h.mjs";
19
- import { i as readSupervisorState } from "./stop-DRqQVqDJ.mjs";
20
- import { n as maintenanceLines, r as maintenanceStatus } from "./status-CRXz-Gtj.mjs";
21
- import { f as mergeState, i as createStatusMeasurer, n as workspacePhase, r as applyStatusMeasures } from "./warm-progress-DvhTX_eu.mjs";
22
- import { r as workspaceRecordingEnabled } from "./recordings-BldzVKq0.mjs";
23
- import { d as readIosDevices, s as isReachable } from "./ios-device-CsyryvpT.mjs";
24
- import { t as triggerMaintenance } from "./trigger-KVaWWNyn.mjs";
25
- import { a as createRefreshScheduler, c as watchStatusSources, n as WATCH_LIGHT_INTERVAL_MS, o as watchChangeKey, r as WATCH_MACHINE_INTERVAL_MS, s as watchPayload, t as WATCH_FALLBACK_MS } from "./status-watch-B5wDIH_o.mjs";
1
+ import { S as process_identity_exports, t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { O as workspaceLogErrorIndex, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-kIZrdlSg.mjs";
3
+ import { G as projectDeviceSlots, P as formatBytes, R as volumeRootFor, U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, d as getConfigDir, u as getConcurrencyLimits } from "./config-Cn94Jc0g.mjs";
4
+ import { a as formatElapsed, i as formatDuration, r as clockTime, u as plural } from "./command-output-C8R1KIvi.mjs";
5
+ import { s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
6
+ import { Bt as repoRoot, Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk, Q as resolveSettings, lt as workspaceHiddenSetting, xt as gitCommonDir } from "./settings-CY5JZlNN.mjs";
7
+ import { I as readWorkspaceLaunches, M as readMetroTunnel, P as readRemoteSession, S as readAppJson, a as findServerWorkspace, l as projectShortcut, u as detectPlatforms, v as detectIsExpo, y as detectTutorial } from "./project-Sui52ywT.mjs";
8
+ import { A as listAdbDevices, B as ownedAvdDeviceProfile, W as ownedAvdSerialResolver, ft as POOL_SETTING_REMEDY, j as listAdbDevicesAsync, vt as parkedMaxSetting, yt as readParked } from "./android-CsPs-7Mg.mjs";
9
+ import { c as pidExists, d as resolveProjectMetro, h as isMetroRunning, i as listeningPids, l as processCwd, o as listeningPidsByPort, u as processCwds } from "./metro-BnhXV2Mj.mjs";
10
+ import { o as parseNdjsonLine } from "./ndjson-Dy2W4vRa.mjs";
11
+ import { E as metroLastStop, S as describeMetroLastStop, cn as hasMetroReverse, cr as attributeMachineUsage, lr as readFootprints, p as machineNumber } from "./ccache-Bm_A1xX9.mjs";
12
+ import { a as readWebPage, o as readWebRecord, u as webFacts } from "./state-B2QJbDwz.mjs";
13
+ import { A as poolLine, C as diskLine, D as loadLine, E as gitSummaryText, F as tightVolumes, I as unprovisionedWorktrees, L as withWebFacts, M as remoteDeviceState, N as slotUsageLines, O as metroReverseTargets, P as statusActivity, S as deviceLeaseStates, _ as addReverseMissingIssue, b as capacityLoad, g as activityLabel, j as remoteDeviceLine, k as parseDfFree, r as readEasSessionLedger$1, v as applyMachineMemory, w as environmentState, x as deviceLeaseLines, y as capacity } from "./eas-session-ledger-CBFo_Uo1.mjs";
14
+ import { Ct as buildSlotUsage, G as buildStatusLine, J as parseActiveBuild, K as bundlingActivity, U as activeBuildState, V as ACTIVE_BUILD_KEY, W as buildReport, at as readStats$1, lt as statsProjectKey$1, x as resolveSupervisorTarget } from "./workspaces-CmOcceDN.mjs";
15
+ import { a as createDeviceProcessTables, b as leaseIsExpired, h as tailLines, m as readWebActivity, r as createActivityReader, w as parseWorkspaceLeases, x as listLeaseFiles } from "./activity-DRMg4_mD.mjs";
16
+ import { b as parseSimctlList, f as listAllIosSimsAsync } from "./ios-B1DYuOjh.mjs";
17
+ import { p as probeHostedSession } from "./hosted-client-DDRm9hPJ.mjs";
18
+ import "./hosted-macos-B7-8Pv4H.mjs";
19
+ import { i as readSupervisorState } from "./stop-D-dGE9gh.mjs";
20
+ import { l as applyStatusMeasures, n as workspacePhase, s as mergeState, u as createStatusMeasurer } from "./warm-progress-B0Vpuvpl.mjs";
21
+ import { r as workspaceRecordingEnabled } from "./recordings-iy0mkm7b.mjs";
22
+ import { n as maintenanceLines, r as maintenanceStatus } from "./status-7ULDEJ1e.mjs";
23
+ import { s as deviceSlotUsage } from "./device-capacity-Cd8lMSn3.mjs";
24
+ import { d as readIosDevices, s as isReachable } from "./ios-device-B4elVFKi.mjs";
25
+ import { t as triggerMaintenance } from "./trigger-DMou-X7j.mjs";
26
+ import { a as createRefreshScheduler, c as watchStatusSources, n as WATCH_LIGHT_INTERVAL_MS, o as watchChangeKey, r as WATCH_MACHINE_INTERVAL_MS, s as watchPayload, t as WATCH_FALLBACK_MS } from "./status-watch-BmsPqYSU.mjs";
26
27
  import { t as watchStdoutReader } from "./stdout-reader-C8yjre1x.mjs";
27
28
  import { createHash, randomUUID } from "node:crypto";
28
29
  import { mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
29
30
  import { join, posix, resolve } from "node:path";
30
31
  import { rotatedLogPath } from "@stim-cli/core";
31
- import { DEVICE_RECLAIM_REASON, ERROR_SOURCES, archiveRoot, archivedUsage, bundleMarkerPlatform, countErrorEntries, gitMergeCacheDir, hostedAndroidPlacements, hostedAndroidRecords, hostedAndroidStatus, hostedIosPlacements, hostedIosRecords, hostedIosStatus, linkReplacedArchives, logFiles, macosAppState, parseHostedAndroidPlacement, parseHostedIosPlacement, queryLogs, readArchives, readBuildDetail, readBuildHistory, readDeviceIdleShutdowns, readDevicePlacement, readIdleStop, readLastBuilds, readMacosRecord, recordMatches, sortByTs, unreadableHostedAndroid, unreadableHostedIos, withDerivedFacts, withGitChip, withStateReadCache } from "@stim-cli/core/state";
32
+ import { DEVICE_RECLAIM_REASON, ERROR_SOURCES, archiveRoot, archivedUsage, bundleMarkerPlatform, countErrorEntries, gitMergeCacheDir, hostedAndroidPlacements, hostedAndroidRecords, hostedAndroidStatus, hostedIosPlacements, hostedIosRecords, hostedIosStatus, linkReplacedArchives, loadPerCore, logFiles, macosAppState, maxLoadPerCore, parseHostedAndroidPlacement, parseHostedIosPlacement, queryLogs, readArchives, readBuildDetail, readBuildHistory, readDeviceIdleShutdowns, readDevicePlacement, readIdleStop, readLastBuilds, readMacosRecord, recordMatches, sortByTs, unreadableHostedAndroid, unreadableHostedIos, withDerivedFacts, withGitChip, withStateReadCache } from "@stim-cli/core/state";
32
33
  import { basename as basename$1, dirname as dirname$1, join as join$1 } from "path";
33
34
  import chalk from "chalk";
34
35
  import { closeSync as closeSync$1, existsSync as existsSync$1, fstatSync as fstatSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readSync as readSync$1, renameSync as renameSync$1, rmSync as rmSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "fs";
@@ -880,10 +881,12 @@ async function readStatusFacts(probes, gitScope, cwd) {
880
881
  const simsByUdid = {};
881
882
  let simsAvailable = true;
882
883
  let simctlError = null;
884
+ let simctlFailure = null;
883
885
  try {
884
886
  for (const sim of await simsRead) simsByUdid[sim.udid] = sim;
885
887
  } catch (e) {
886
888
  simsAvailable = false;
889
+ simctlFailure = e;
887
890
  simctlError = String(e?.message || e).split("\n")[0] ?? "";
888
891
  }
889
892
  const running = await processes;
@@ -1034,6 +1037,17 @@ async function readStatusFacts(probes, gitScope, cwd) {
1034
1037
  busy: sims.some((sim) => sim.state === "Booted"),
1035
1038
  probes
1036
1039
  });
1040
+ const { maxBuilds, maxDevices } = getConcurrencyLimits();
1041
+ const slotUsage = {
1042
+ ...maxBuilds > 0 ? { builds: buildSlotUsage(maxBuilds) } : {},
1043
+ ...maxDevices > 0 ? { devices: await deviceSlotUsage(maxDevices, {
1044
+ config: cfg,
1045
+ sims: process.platform !== "darwin" ? [] : simsAvailable ? sims : () => {
1046
+ throw simctlFailure;
1047
+ },
1048
+ adb: () => listAdbDevicesAsync({ timeoutMs: PHYSICAL_DEVICE_LIST_TIMEOUT_MS })
1049
+ }) } : {}
1050
+ };
1037
1051
  const archives = probes.archives();
1038
1052
  const maxCount = machineNumber("archive.maxCount", cfg, process.env);
1039
1053
  return {
@@ -1051,6 +1065,7 @@ async function readStatusFacts(probes, gitScope, cwd) {
1051
1065
  cwdRoot,
1052
1066
  tables,
1053
1067
  machine,
1068
+ slotUsage,
1054
1069
  roots,
1055
1070
  simNames,
1056
1071
  probes,
@@ -1431,10 +1446,14 @@ function statusCommand(program) {
1431
1446
  for (const line of renderStatus(await readStatus(), json)) console.log(line);
1432
1447
  });
1433
1448
  }
1434
- function renderStatus({ archived, archivedUsage: usage, projects, states, labelOnlyRoots, leases, leaseNow, orphanWorktrees, simsAvailable, simctlError, cwdRoot, machine }, json, settle = (payload) => payload, cwd = process.cwd()) {
1449
+ function renderStatus({ archived, archivedUsage: usage, projects, states, labelOnlyRoots, leases, leaseNow, orphanWorktrees, simsAvailable, simctlError, cwdRoot, machine, slotUsage }, json, settle = (payload) => payload, cwd = process.cwd()) {
1435
1450
  const out = [];
1436
1451
  const totalMemoryMb = Math.round(totalmem() / 1048576);
1437
- const cap = capacity(states, totalMemoryMb);
1452
+ const cap = {
1453
+ ...capacity(states, totalMemoryMb),
1454
+ ...slotUsage,
1455
+ load: capacityLoad(loadPerCore(), maxLoadPerCore(), null)
1456
+ };
1438
1457
  const pools = ["ios", "android"].map((platform) => {
1439
1458
  const { max, error } = parkedMaxSetting(platform);
1440
1459
  return {
@@ -1474,6 +1493,8 @@ function renderStatus({ archived, archivedUsage: usage, projects, states, labelO
1474
1493
  if (pool.line) out.push(chalk.dim(pool.line));
1475
1494
  }
1476
1495
  for (const line of deviceLeaseLines(leases, leaseNow)) out.push(line);
1496
+ out.push(chalk.dim(loadLine(cap.load)));
1497
+ for (const line of slotUsageLines(cap)) out.push(chalk.dim(line));
1477
1498
  return out;
1478
1499
  }
1479
1500
  if (!simsAvailable) out.push(chalk.yellow(`simctl could not be read (${simctlError}), so no iOS sim below could be checked.`));
@@ -1552,6 +1573,8 @@ function renderStatus({ archived, archivedUsage: usage, projects, states, labelO
1552
1573
  for (const w of orphanWorktrees) out.push(chalk.dim(` ${orphanWorktreeLine(w)}`));
1553
1574
  }
1554
1575
  out.push(chalk.dim(machine?.memorySource === "footprint" ? `\n${cap.liveCount} active environment(s) use ${formatGb(cap.committedMb)} of ${formatGb(cap.totalMemoryMb)}.` : `\n${cap.liveCount} active environment(s), roughly ${formatGb(cap.committedMb)} of ${formatGb(cap.totalMemoryMb)} committed.`));
1576
+ out.push(chalk.dim(loadLine(cap.load)));
1577
+ for (const line of slotUsageLines(cap)) out.push(chalk.dim(line));
1555
1578
  const volumes = readVolumes(cwdRoot || cwd);
1556
1579
  const line = diskLine(volumes);
1557
1580
  if (line) {
@@ -1,2 +1,2 @@
1
- import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-DQrqodLj.mjs";
1
+ import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-BHCkOZga.mjs";
2
2
  export { statusCommand as default, readVolumes, runStatusWatch };
@@ -1,8 +1,8 @@
1
- import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { d as androidToolPath } from "./android-DTAcRwBC.mjs";
3
- import { c as pidExists } from "./metro-CjC10t6E.mjs";
4
- import { n as easMachineStateRoot } from "./eas-session-ledger-B5vygTiD.mjs";
5
- import { b as parseSimctlList } from "./ios-WxpDJ5T1.mjs";
1
+ import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { d as androidToolPath } from "./android-CsPs-7Mg.mjs";
3
+ import { c as pidExists } from "./metro-BnhXV2Mj.mjs";
4
+ import { n as easMachineStateRoot } from "./eas-session-ledger-CBFo_Uo1.mjs";
5
+ import { b as parseSimctlList } from "./ios-B1DYuOjh.mjs";
6
6
  import { existsSync, readdirSync, statSync, watch } from "node:fs";
7
7
  import { basename, dirname, join } from "node:path";
8
8
  //#region src/status-watch.ts
@@ -417,9 +417,13 @@ function ownerKey(owner) {
417
417
  function ownerSteady(before, after) {
418
418
  return Math.abs(after.cpuPercent - before.cpuPercent) < 5 && Math.abs(after.memoryMb - before.memoryMb) < 16;
419
419
  }
420
+ function loadSteady(before, after) {
421
+ return before.state === after.state && before.limit === after.limit && before.busyAt === after.busyAt && before.cpus === after.cpus && Math.abs(Math.round((after.loadPerCore - before.loadPerCore) * 10)) < 10;
422
+ }
420
423
  /**
421
424
  * The payload `status --watch --json` prints. A usage figure keeps its value from the `previous` printed payload until it moves by a step: an owner's `cpuPercent`
422
- * and `memoryMb`, an environment's `memoryMb` and `capacity.committedMb`. An owner's row is kept whole, `residentMb`
425
+ * and `memoryMb`, an environment's `memoryMb`, `capacity.committedMb`, and `capacity.load` while its `state`, `limit`,
426
+ * `busyAt` and `cpus` stay the same and its `loadPerCore` moves less than a step. An owner's row is kept whole, `residentMb`
423
427
  * and `processes` included, until one of its two figures moves, so a machine whose processes only jitter prints no new line.
424
428
  */
425
429
  function watchPayload(previous, next) {
@@ -444,7 +448,14 @@ function watchPayload(previous, next) {
444
448
  } : env;
445
449
  });
446
450
  const { capacity } = previous;
447
- if (capacity.overCapacity === next.capacity.overCapacity && capacity.liveCount === next.capacity.liveCount && capacity.totalMemoryMb === next.capacity.totalMemoryMb && Math.abs(next.capacity.committedMb - capacity.committedMb) < 16) payload.capacity = capacity;
451
+ if (capacity.overCapacity === next.capacity.overCapacity && capacity.liveCount === next.capacity.liveCount && capacity.totalMemoryMb === next.capacity.totalMemoryMb && Math.abs(next.capacity.committedMb - capacity.committedMb) < 16) payload.capacity = {
452
+ ...payload.capacity,
453
+ committedMb: capacity.committedMb
454
+ };
455
+ if (capacity.load && next.capacity.load && loadSteady(capacity.load, next.capacity.load)) payload.capacity = {
456
+ ...payload.capacity,
457
+ load: capacity.load
458
+ };
448
459
  return payload;
449
460
  }
450
461
  const holdPullRequest = (worktree) => worktree.pullRequest ? {
@@ -1,4 +1,4 @@
1
- import { n as runStatusWatch } from "./status-DQrqodLj.mjs";
1
+ import { n as runStatusWatch } from "./status-BHCkOZga.mjs";
2
2
  import { parentPort, workerData } from "node:worker_threads";
3
3
  //#region src/status-worker.ts
4
4
  const STOP_EXIT_MS = 500;
@@ -1,5 +1,5 @@
1
- import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { C as saveConfig, c as ensureConfig } from "./config-BktkY_zC.mjs";
1
+ import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { C as saveConfig, c as ensureConfig } from "./config-Cn94Jc0g.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { workspaceId } from "@stim-cli/core";
5
5
  import { readHomeIdentity, withConfigLockAsync } from "@stim-cli/core/state";
@@ -1,20 +1,19 @@
1
- import { D as ownership_claim_exports, E as debugLog, S as process_identity_exports, l as WorkspaceProcessCleanupError, u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
2
- import { E as workspaceDir, c as withWorkspaceStateLock, d as writeWorkspaceState, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-pUg3_RRA.mjs";
3
- import { E as upsertProject, G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, U as parseDeviceSlotKey, W as parseDeviceSlotOption, o as clearSupervisor, p as getProject, q as validateDeviceSlot } from "./config-BktkY_zC.mjs";
4
- import { f as refuseNoProject, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-BF5AR2dL.mjs";
5
- import { A as clearWorkspaceLaunches, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, j as clearWorkspaceSupervisor, k as clearRemoteSession, n as findCommandWorkspace } from "./project-BUu6Is4k.mjs";
6
- import { t as macosAppPresent } from "./state-C4OdpOTF.mjs";
7
- import { et as removeOwnedEmulatorMetroReverses } from "./android-DTAcRwBC.mjs";
8
- import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, p as signalProcessTreeAsync, r as killMetroTreeAsync, u as processCwds } from "./metro-CjC10t6E.mjs";
9
- import { Gt as endRecordedSession, S as withdrawDevServerStopRequest, b as requestDevServerStop, er as resolveEasCliBin, v as logVanishedSupervisor } from "./budget-k2mZGvvk.mjs";
10
- import { a as decideStopAction, c as nativeRunWaitNotice, i as clearNativeRunCancel, l as requestNativeRunCancel, n as NATIVE_RUN_WAIT_MS, o as describeNativeRunHolder, s as nativeRunHolder, t as NATIVE_RUN_LOCK } from "./native-run-BfIDFKLH.mjs";
11
- import { A as teardownOwnedIosSim, O as teardownOwnedAvd, g as resolveSupervisorTarget, k as teardownOwnedBrowser, v as stopTunnel } from "./workspaces-g2lhdBXF.mjs";
12
- import { O as releaseWorkspaceLeasesAsync, y as fileLeaseIo } from "./activity-Lnb_EoRY.mjs";
13
- import { i as stopHostedAndroid } from "./hosted-android-Bk54ej6n.mjs";
14
- import { r as stopHostedIos } from "./hosted-ios-D55QhYaD.mjs";
15
- import { n as stopMacosApp } from "./stop-ySNQHXMG.mjs";
16
- import { n as verifyCollectorOwnership } from "./ownership-BjYvMNX_.mjs";
17
- import { n as removePhoneReverses } from "./phone-reverses-lmj6kcPm.mjs";
1
+ import { D as ownership_claim_exports, E as debugLog, S as process_identity_exports, l as WorkspaceProcessCleanupError, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
+ import { E as workspaceDir, c as withWorkspaceStateLock, d as writeWorkspaceState, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-kIZrdlSg.mjs";
3
+ import { E as upsertProject, G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, U as parseDeviceSlotKey, W as parseDeviceSlotOption, o as clearSupervisor, p as getProject, q as validateDeviceSlot } from "./config-Cn94Jc0g.mjs";
4
+ import { f as refuseNoProject, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-C8R1KIvi.mjs";
5
+ import { A as clearWorkspaceLaunches, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, j as clearWorkspaceSupervisor, k as clearRemoteSession, n as findCommandWorkspace } from "./project-Sui52ywT.mjs";
6
+ import { t as macosAppPresent } from "./state-BXC1Lfxw.mjs";
7
+ import { et as removeOwnedEmulatorMetroReverses } from "./android-CsPs-7Mg.mjs";
8
+ import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, p as signalProcessTreeAsync, r as killMetroTreeAsync, u as processCwds } from "./metro-BnhXV2Mj.mjs";
9
+ import { D as requestDevServerStop, Ln as resolveEasCliBin, Ot as endRecordedSession, T as logVanishedSupervisor, k as withdrawDevServerStopRequest } from "./ccache-Bm_A1xX9.mjs";
10
+ import { C as stopTunnel, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, pt as teardownOwnedAvd, x as resolveSupervisorTarget } from "./workspaces-CmOcceDN.mjs";
11
+ import { $ as clearNativeRunCancel, X as NATIVE_RUN_LOCK, Z as NATIVE_RUN_WAIT_MS, et as decideStopAction, it as requestNativeRunCancel, nt as nativeRunHolder, rt as nativeRunWaitNotice, tt as describeNativeRunHolder } from "./toolchain-mLA_km-b.mjs";
12
+ import { O as releaseWorkspaceLeasesAsync, y as fileLeaseIo } from "./activity-DRMg4_mD.mjs";
13
+ import { i as stopHostedAndroid } from "./hosted-android-DlaKLbW0.mjs";
14
+ import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-BzTa8g1F.mjs";
15
+ import { r as stopMacosApp } from "./stop-DQvE-P76.mjs";
16
+ import { n as verifyCollectorOwnership } from "./ownership-DJCq48IJ.mjs";
18
17
  import { hostedAndroidDeviceName, hostedAndroidRecords, hostedIosRecords, hostedNativeRecords, isJsonObject, parseHostedNativePlacement } from "@stim-cli/core/state";
19
18
  import chalk from "chalk";
20
19
  //#region src/commands/stop.ts
@@ -218,7 +217,8 @@ async function stopBrowserOnly({ root, project = void 0, teardownBrowser = (proj
218
217
  summary: summarize(root, outcomes, ok)
219
218
  };
220
219
  }
221
- async function stopWorkspaceHostedNative(root, slot, report, failed) {
220
+ async function stopWorkspaceHostedNative(root, slot, report, failed, operation) {
221
+ const signal = operation?.signal;
222
222
  const devices = {};
223
223
  let anyFailed = false;
224
224
  for (const platform of ["ios", "android"]) for (const [name, record] of Object.entries(hostedNativeRecords(readWorkspaceState$1(root), platform))) {
@@ -226,13 +226,14 @@ async function stopWorkspaceHostedNative(root, slot, report, failed) {
226
226
  const placement = parseHostedNativePlacement(record, platform);
227
227
  const label = placement ? `${placement.device ? "udid" in placement.device ? placement.device.name : hostedAndroidDeviceName(placement.device) : `${platform} device`} on ${placement.machine}` : `hosted ${platform === "ios" ? "iOS simulator" : "Android emulator"} for slot ${name}`;
228
228
  try {
229
- await (platform === "ios" ? stopHostedIos : stopHostedAndroid)(root, name);
229
+ await (platform === "ios" ? stopHostedIos : stopHostedAndroid)(root, name, signal);
230
230
  devices[`${platform}:host:${name}`] = {
231
231
  status: "shut-down",
232
232
  label
233
233
  };
234
234
  report(chalk.dim(phaseLine("device", `stopped ${label}`)));
235
235
  } catch (error) {
236
+ signal?.throwIfAborted();
236
237
  const reason = error.message;
237
238
  devices[`${platform}:host:${name}`] = {
238
239
  status: "failed",
@@ -478,7 +479,7 @@ async function stopWorkspace({ root, operation, project = void 0, state = void 0
478
479
  }, stopMacos);
479
480
  const hosted = await stopWorkspaceHostedNative(root, hostedSlot, report, () => {
480
481
  ok = false;
481
- });
482
+ }, operation);
482
483
  Object.assign(outcomes.device, hosted.devices);
483
484
  await updateWorkspaceStateAsync(root, (workspace) => {
484
485
  const slots = isJsonObject(workspace.deviceSlots) ? workspace.deviceSlots : {};
@@ -1,8 +1,8 @@
1
- import { D as ownership_claim_exports, S as process_identity_exports, u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
2
- import { E as workspaceDir, d as writeWorkspaceState, l as withWorkspaceStateLockAsync } from "./workspace-state-pUg3_RRA.mjs";
3
- import { a as macosRuntimeClaim, o as requiredMacosRecord } from "./state-C4OdpOTF.mjs";
4
- import { w as runningBundleInstancesAsync } from "./workspaces-g2lhdBXF.mjs";
5
- import { n as stopHostedMacos } from "./hosted-macos-CPl0OZ9h.mjs";
1
+ import { D as ownership_claim_exports, S as process_identity_exports, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
+ import { E as workspaceDir, d as writeWorkspaceState, l as withWorkspaceStateLockAsync } from "./workspace-state-kIZrdlSg.mjs";
3
+ import { a as macosRuntimeClaim, o as requiredMacosRecord } from "./state-BXC1Lfxw.mjs";
4
+ import { A as runningBundleInstancesAsync, j as runningInstancesInAsync, k as hostedBundleDirs } from "./workspaces-CmOcceDN.mjs";
5
+ import { n as stopHostedMacos } from "./hosted-macos-B7-8Pv4H.mjs";
6
6
  import { readMacosRecord } from "@stim-cli/core/state";
7
7
  //#region src/macos/stop.ts
8
8
  const APP_EXIT_MS = 5e3;
@@ -40,6 +40,10 @@ async function stopBundleInstances(root, operation) {
40
40
  await stopProcesses(instances, void 0, operation);
41
41
  return instances.length > 0;
42
42
  }
43
+ /** Stops every running copy of a hosted session's app bundles, including copies LaunchServices started from an earlier attempt. */
44
+ async function stopHostedBundleInstances(area, operation) {
45
+ await stopProcesses(await runningInstancesInAsync(hostedBundleDirs(area), operation), void 0, operation);
46
+ }
43
47
  async function stopMacosAppHeld(root, operation) {
44
48
  operation?.signal.throwIfAborted();
45
49
  const record = requiredMacosRecord(root);
@@ -78,4 +82,4 @@ function stopMacosApp(root, operation) {
78
82
  });
79
83
  }
80
84
  //#endregion
81
- export { stopMacosApp as n, stopMacosAppHeld as r, stopBundleInstances as t };
85
+ export { stopMacosAppHeld as i, stopHostedBundleInstances as n, stopMacosApp as r, stopBundleInstances as t };
@@ -1,3 +1,3 @@
1
- import { g as resolveSupervisorTarget } from "./workspaces-g2lhdBXF.mjs";
2
- import { a as resolveCollectorTargets, c as stopWorkspaceNow, i as readSupervisorState, n as clearSupervisorState, o as runStop, r as readCollectorState, s as stopCommand, t as clearCollectorState } from "./stop-DRqQVqDJ.mjs";
1
+ import { x as resolveSupervisorTarget } from "./workspaces-CmOcceDN.mjs";
2
+ import { a as resolveCollectorTargets, c as stopWorkspaceNow, i as readSupervisorState, n as clearSupervisorState, o as runStop, r as readCollectorState, s as stopCommand, t as clearCollectorState } from "./stop-D-dGE9gh.mjs";
3
3
  export { clearCollectorState, clearSupervisorState, stopCommand as default, readCollectorState, readSupervisorState, resolveCollectorTargets, resolveSupervisorTarget, runStop, stopWorkspaceNow };