stim 1.28.0 → 1.29.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 (153) hide show
  1. package/dist/{acquire-artifact-CKByBnTD.mjs → acquire-artifact-C2DKfenN.mjs} +1 -1
  2. package/dist/{act-8iswyfRa.mjs → act-CrTcskiE.mjs} +479 -29
  3. package/dist/{activity-DRMg4_mD.mjs → activity-BR5oHSO5.mjs} +6 -5
  4. package/dist/{agent-device-usage-output-tE90fDdo.mjs → agent-device-usage-output-W0x4SoC7.mjs} +4 -4
  5. package/dist/{android-CsPs-7Mg.mjs → android-BHKgeOuq.mjs} +5 -5
  6. package/dist/{android-YWCbmkVK.mjs → android-BPmCmyAy.mjs} +5 -5
  7. package/dist/{android-D577ApKG.mjs → android-CLU_MMnb.mjs} +1 -1
  8. package/dist/{android-cas-_aDifWW0.mjs → android-cas-BH6K12__.mjs} +4 -4
  9. package/dist/{android-CHmSU4B4.mjs → android-l616dRP1.mjs} +37 -37
  10. package/dist/{android-project-DUGMbq28.d.mts → android-project-CCEQyYJK.d.mts} +6 -2
  11. package/dist/api.d.mts +7 -4
  12. package/dist/api.mjs +27 -27
  13. package/dist/{apk-signed-tail-CQbwM0qO.mjs → apk-signed-tail-B-wKoF_8.mjs} +2 -2
  14. package/dist/{artifact-bFkfD3vf.mjs → artifact-DHuFYfhD.mjs} +12 -12
  15. package/dist/{artifact-DYtHjxsn.mjs → artifact-Dm9ScLrh.mjs} +12 -12
  16. package/dist/{auto-placement-BVqs8AJi.mjs → auto-placement-C8sJsyMN.mjs} +8 -8
  17. package/dist/{browser-web-BUaLcafY.mjs → browser-web-_tQTbQUs.mjs} +12 -12
  18. package/dist/{build-cQURy_KW.mjs → build-DtCU9Kim.mjs} +23 -23
  19. package/dist/{build-cache-CZULpXVl.mjs → build-cache-BGwTsIEa.mjs} +4 -4
  20. package/dist/{build-plan-CxoYfxsc.mjs → build-plan-CWyjMPKo.mjs} +6 -6
  21. package/dist/{cache-manifest-DEjqGGat.mjs → cache-manifest-evF_zJ9U.mjs} +1 -1
  22. package/dist/cache-manifest.mjs +1 -1
  23. package/dist/{ccache-Bm_A1xX9.mjs → ccache-DsDkdP72.mjs} +17 -17
  24. package/dist/{cli-CpbaLDa7.mjs → cli-3fjOg-Oc.mjs} +19 -19
  25. package/dist/cli.mjs +1 -1
  26. package/dist/{client-YxCer6ab.mjs → client-BTUH8TF1.mjs} +5 -5
  27. package/dist/collector-run.mjs +5 -5
  28. package/dist/{command-output-C8R1KIvi.mjs → command-output-DjCsmzLZ.mjs} +1 -1
  29. package/dist/{config-Cn94Jc0g.mjs → config-AbUjIBOQ.mjs} +121 -19
  30. package/dist/{dependencies-DKeMzwXY.mjs → dependencies-CHNqX6Pr.mjs} +38 -38
  31. package/dist/{dependency-state-CojA2o0t.mjs → dependency-state-CPKAKCZ8.mjs} +1 -1
  32. package/dist/{dev-client-D-BW5uiq.mjs → dev-client-CROrxj1x.mjs} +2 -2
  33. package/dist/{device-CgXfbcz5.mjs → device-Bmm5qjM-.mjs} +14 -14
  34. package/dist/device-BvpasThQ.mjs +297 -0
  35. package/dist/{device-capacity-Cd8lMSn3.mjs → device-capacity-B2ChA-bz.mjs} +7 -7
  36. package/dist/device-host-worker.mjs +12 -12
  37. package/dist/{device-ios-Cc9ulihb.mjs → device-ios-CYzivd31.mjs} +9 -9
  38. package/dist/{device-lease-run-Mtzp4THX.mjs → device-lease-run-qRq_2W2V.mjs} +4 -4
  39. package/dist/{device-pool-eRz6DtCg.mjs → device-pool-CrmiE4_x.mjs} +3 -3
  40. package/dist/{device-eeK95Lir.mjs → device-provision-CK2XiEp1.mjs} +11 -302
  41. package/dist/{doctor-C2QyhejJ.mjs → doctor-BO_kaFWX.mjs} +1 -1
  42. package/dist/{doctor-Bz_ouYAW.mjs → doctor-Cp4-HN1f.mjs} +20 -15
  43. package/dist/{doctor-xf7ht-5n.mjs → doctor-Dr3C1iXV.mjs} +19 -19
  44. package/dist/doctor-fingerprint.mjs +1 -1
  45. package/dist/{doctor-watchman-BTW82PDC.mjs → doctor-watchman-CJr2aXXv.mjs} +4 -4
  46. package/dist/{eas-build-Dm6q68QY.mjs → eas-build-D-9HmGZS.mjs} +2 -2
  47. package/dist/{eas-fallback-DajNpxf-.mjs → eas-fallback-Cemt2GVL.mjs} +4 -4
  48. package/dist/{eas-session-ledger-CBFo_Uo1.mjs → eas-session-ledger-B0KLZx5m.mjs} +5 -5
  49. package/dist/{error-diagnostics-D1QfyJzQ.mjs → error-diagnostics-CV_1RoEH.mjs} +8 -8
  50. package/dist/{gc-DM5oMm-J.mjs → gc-CKHqL4aS.mjs} +80 -18
  51. package/dist/{gc-PLFwb0k4.mjs → gc-DjXwQXHK.mjs} +2 -2
  52. package/dist/{guide-C4I46XAk.mjs → guide-CeRlWVsS.mjs} +129 -25
  53. package/dist/{hosted-android-DlaKLbW0.mjs → hosted-android-DI_vvv7U.mjs} +3 -3
  54. package/dist/{hosted-client-DDRm9hPJ.mjs → hosted-client-CgoxdU9j.mjs} +3 -3
  55. package/dist/{hosted-logs-bSebOKbz.mjs → hosted-logs-C-4INmkn.mjs} +17 -8
  56. package/dist/{hosted-logs-sync-B0c53W_c.mjs → hosted-logs-sync-Bf5s02fi.mjs} +5 -5
  57. package/dist/{hosted-macos-B7-8Pv4H.mjs → hosted-macos-Doh85YUM.mjs} +5 -5
  58. package/dist/{hosted-native-CDe33CSr.mjs → hosted-native-DvZENAL-.mjs} +6 -6
  59. package/dist/{idle-shutdown-CQ0QwU9J.mjs → idle-shutdown-BM37gMfU.mjs} +7 -7
  60. package/dist/{ios-B1HvafEG.mjs → ios-CNDH6fNF.mjs} +8 -8
  61. package/dist/{ios-B1DYuOjh.mjs → ios-CoMCWfub.mjs} +4 -4
  62. package/dist/{ios-tg4tp3q1.mjs → ios-UM_dManb.mjs} +28 -28
  63. package/dist/{ios-device-B4elVFKi.mjs → ios-device-L1-pota_.mjs} +1 -1
  64. package/dist/{ios-project-CR4mZ7CH.mjs → ios-project-DJYptOCh.mjs} +7 -7
  65. package/dist/{ios-state-BPHqMDdZ.mjs → ios-state-Ce_dystM.mjs} +1 -1
  66. package/dist/{js-swap-CVpSW1fn.mjs → js-swap-BthE4kZC.mjs} +4 -4
  67. package/dist/{launch-DoySmhjz.mjs → launch-D798aSm8.mjs} +19 -19
  68. package/dist/{lightened-DFAJgfIk.mjs → lightened-vSxkstg6.mjs} +4 -4
  69. package/dist/{logs-BGsW7iPe.mjs → logs-BND8MiBq.mjs} +9 -8
  70. package/dist/{logs-DI5ILkYB.mjs → logs-CilPftm3.mjs} +5 -5
  71. package/dist/{macos-C12RMJQF.mjs → macos-BOQrKYeJ.mjs} +1 -1
  72. package/dist/{macos-Bo9st9Di.mjs → macos-CxUi9xcE.mjs} +20 -20
  73. package/dist/macos-run.mjs +1 -1
  74. package/dist/maintenance-run.mjs +13 -9
  75. package/dist/{metro-BnhXV2Mj.mjs → metro-BMQHczcf.mjs} +2 -2
  76. package/dist/{metro-request-DXyKjVDF.mjs → metro-request-BtF7ox53.mjs} +1 -1
  77. package/dist/{named-ports-Phoi2POD.mjs → named-ports-DcktE2Pw.mjs} +2 -2
  78. package/dist/{native-android-vxgtLD7w.mjs → native-android-BkhrCjdX.mjs} +16 -16
  79. package/dist/{native-gradle-artifact-inputs-BN96IVw8.mjs → native-gradle-artifact-inputs-Cw4P6Gyr.mjs} +3 -3
  80. package/dist/{native-runtime-DG4Rodzj.mjs → native-runtime-DyH2gkXK.mjs} +6 -6
  81. package/dist/{native-xcode-inputs-BKarCoKg.mjs → native-xcode-inputs-DV8jr3kJ.mjs} +2 -2
  82. package/dist/{native-xcode-ios-8A-efGa5.mjs → native-xcode-ios-DdpPG2iT.mjs} +15 -15
  83. package/dist/{ndjson-Dy2W4vRa.mjs → ndjson-CrjIsGzw.mjs} +2 -2
  84. package/dist/offload-worker.d.mts +1 -1
  85. package/dist/offload-worker.mjs +22 -22
  86. package/dist/{ownership-DJCq48IJ.mjs → ownership-Dtz9G5Gl.mjs} +2 -2
  87. package/dist/{phone-reverses-BzTa8g1F.mjs → phone-reverses-DZRad8HT.mjs} +4 -4
  88. package/dist/{placement-log-Cvhta5ib.mjs → placement-log-CoN6xrjY.mjs} +1 -1
  89. package/dist/{plan-placement-WkZdccuN.mjs → plan-placement-7sHuqR-r.mjs} +6 -6
  90. package/dist/{ports-UV4mJgyC.mjs → ports-VQSAPZhl.mjs} +3 -3
  91. package/dist/{prebuild-k8d_tqOq.mjs → prebuild-Bqp0LFGN.mjs} +9 -9
  92. package/dist/{project-Sui52ywT.mjs → project-D1n0K4yg.mjs} +15 -15
  93. package/dist/{react-native-android-DANlGGQf.mjs → react-native-android-FQ-yX3Mv.mjs} +22 -22
  94. package/dist/{react-native-build-jUHnIfZ9.mjs → react-native-build-D58bIqV9.mjs} +7 -7
  95. package/dist/{react-native-doctor-DCWRjS7K.mjs → react-native-doctor-AkUH2aca.mjs} +5 -5
  96. package/dist/{react-native-ios-BwMsFMXi.mjs → react-native-ios-Dmsv8j7T.mjs} +14 -14
  97. package/dist/{recordings-iy0mkm7b.mjs → recordings-CHMaF73C.mjs} +1 -1
  98. package/dist/{reload-c_uEyc_X.mjs → reload-BV0nD-k9.mjs} +14 -14
  99. package/dist/{reload-Bj7QyuDy.mjs → reload-CDKEzzaf.mjs} +1 -1
  100. package/dist/{remote-DFlpAqdV.mjs → remote-C8xyslUa.mjs} +8 -8
  101. package/dist/{result-BIcXREyC.mjs → result-9fqcJ90W.mjs} +16 -16
  102. package/dist/{run-y2HwyNvg.mjs → run-BQAmrohh.mjs} +2 -2
  103. package/dist/{selection-CXgM_VK_.mjs → selection-D1ZDzHFX.mjs} +105 -62
  104. package/dist/{server-bare-2N4vSRZG.mjs → server-bare-CEQdB_F4.mjs} +37 -1
  105. package/dist/{server-command-qneHPcRI.mjs → server-command-RlS-Kl4a.mjs} +5 -5
  106. package/dist/server-expo-BVV9qy31.mjs +2 -0
  107. package/dist/{server-expo-Ccm9zB0o.mjs → server-expo-bB1VV2k-.mjs} +8 -5
  108. package/dist/{settings-Cfd_Q6ys.mjs → settings-BcVCcAT5.mjs} +2 -2
  109. package/dist/{settings-CY5JZlNN.mjs → settings-D776ygML.mjs} +1 -1
  110. package/dist/{settings-Djl-mpjX.mjs → settings-D9LtQaUw.mjs} +2 -1
  111. package/dist/{settings-payload-DwQiEMCn.mjs → settings-payload-_aatELz2.mjs} +4 -4
  112. package/dist/{settings-write-CJpjkeAd.mjs → settings-write-CkTVGQ4O.mjs} +5 -5
  113. package/dist/settings.schema.json +58 -9
  114. package/dist/{simslim-DCQwzoPy.mjs → simslim-CbpHERcv.mjs} +1 -1
  115. package/dist/{slot-launch-BpmanOnk.mjs → slot-launch-Dbgfh8gc.mjs} +6 -6
  116. package/dist/{stage-CmugrSG5.mjs → stage-BuHuRj1y.mjs} +1 -1
  117. package/dist/{start-CHH3zgIU.mjs → start-Cr-c3Xhq.mjs} +1 -1
  118. package/dist/{start-DYLk6GXn.mjs → start-Dlv4XXTP.mjs} +11 -11
  119. package/dist/{state-BXC1Lfxw.mjs → state-C2AUjjhg.mjs} +1 -1
  120. package/dist/{state-B2QJbDwz.mjs → state-D5ZxwCGJ.mjs} +2 -2
  121. package/dist/{stats-DxKqhcGp.mjs → stats-D5c-uIBp.mjs} +4 -4
  122. package/dist/{status-7ULDEJ1e.mjs → status-CK7ZoEhV.mjs} +2 -2
  123. package/dist/{status-BHCkOZga.mjs → status-D6PBK6_-.mjs} +24 -24
  124. package/dist/{status-D_Ljc89p.mjs → status-DbQv--Yb.mjs} +1 -1
  125. package/dist/{status-watch-BmsPqYSU.mjs → status-watch-okrpea4i.mjs} +4 -4
  126. package/dist/status-worker.mjs +1 -1
  127. package/dist/{stim-desktop-CbWo21kb.mjs → stim-desktop-CYXLFpFS.mjs} +1 -1
  128. package/dist/{stop-b2pouxAO.mjs → stop-CHtAiv79.mjs} +2 -2
  129. package/dist/{stop-D-dGE9gh.mjs → stop-p9uSKuGE.mjs} +20 -19
  130. package/dist/{stop-DQvE-P76.mjs → stop-uRQ-zYcl.mjs} +4 -4
  131. package/dist/supervisor-run.d.mts +1 -0
  132. package/dist/supervisor-run.mjs +23 -19
  133. package/dist/{support-BtlJKjyQ.mjs → support-BMpQIug0.mjs} +9 -9
  134. package/dist/{support-04IhBUTT.mjs → support-PFyTkrnr.mjs} +4 -4
  135. package/dist/{swiftpm-artifact-inputs-Cj2UpmPN.mjs → swiftpm-artifact-inputs-Cddq6jN2.mjs} +1 -1
  136. package/dist/{swiftpm-macos-BhF2stxY.mjs → swiftpm-macos-BSj9iZlI.mjs} +8 -8
  137. package/dist/{toolchain-qktiV8xc.mjs → toolchain-B-mzR9Rh.mjs} +1 -1
  138. package/dist/{toolchain-mLA_km-b.mjs → toolchain-CLGnEUgT.mjs} +4 -4
  139. package/dist/{trigger-DMou-X7j.mjs → trigger-CfnOfpDd.mjs} +1 -1
  140. package/dist/trigger-DBZ-GBrl.mjs +2 -0
  141. package/dist/{warm-progress-B0Vpuvpl.mjs → warm-progress--KkkBBaq.mjs} +3 -3
  142. package/dist/web-BxSo493O.mjs +2 -0
  143. package/dist/web-run.mjs +5 -5
  144. package/dist/{web-BYmK0TjL.mjs → web-xlVssjQf.mjs} +8 -8
  145. package/dist/{workspace-state-kIZrdlSg.mjs → workspace-state-DGwkPXwq.mjs} +2 -2
  146. package/dist/{workspaces-CmOcceDN.mjs → workspaces-CvSYD_78.mjs} +11 -11
  147. package/dist/{worktree-2dk5edza.mjs → worktree-CaQBf6kh.mjs} +25 -25
  148. package/dist/{worktree-nliAoHxB.mjs → worktree-DTOIohFe.mjs} +1 -1
  149. package/package.json +7 -7
  150. package/shim/bundle-response.cjs +37 -0
  151. package/dist/server-expo-WulkyAwT.mjs +0 -2
  152. package/dist/trigger-qp2ji5wE.mjs +0 -2
  153. package/dist/web-CrVLVQZY.mjs +0 -2
@@ -1,23 +1,24 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, c as throwIfCancelled, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, t as getExecutor, v as stopDeclaringSpawnsOn, x as withDrainingCancellation } from "./exec-aULwtNly.mjs";
2
- import { E as workspaceDir, u as workspaceLastUsed } from "./workspace-state-kIZrdlSg.mjs";
3
- import { F as isOnMountedVolume, G as projectDeviceSlots, I as listMountedVolumes, L as measuredDirectorySizeAsync, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, S as removeProject, _ as loadConfig$1, d as getConfigDir, j as acquireAvdClaim } from "./config-Cn94Jc0g.mjs";
4
- import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-C8R1KIvi.mjs";
2
+ import { E as workspaceDir, u as workspaceLastUsed } from "./workspace-state-DGwkPXwq.mjs";
3
+ import { F as isOnMountedVolume, G as projectDeviceSlots, I as listMountedVolumes, L as measuredDirectorySizeAsync, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, S as removeProject, _ as loadConfig$1, d as getConfigDir, j as acquireAvdClaim } from "./config-AbUjIBOQ.mjs";
4
+ import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-DjCsmzLZ.mjs";
5
5
  import { t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
6
- import { $t as TRASH_MANIFEST, Ft as matchWorktreeEntry, Wt as resolveSourceCheckoutAsync, Zt as TRASH_CLAIMS, en as deleteTrashEntry, jt as listWorktreesAsync } from "./settings-CY5JZlNN.mjs";
7
- import { i as findProjectRoot$1, v as detectIsExpo } from "./project-Sui52ywT.mjs";
8
- import { Ct as forgetCreatedDeviceAsync, F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, ft as POOL_SETTING_REMEDY, h as avdNameAbsent, vt as parkedMaxSetting, wt as readCreatedDevices$1 } from "./android-CsPs-7Mg.mjs";
9
- import { $ as gradleVersionLines, $n as memoryCacheKind, B as includesArchives, Ct as describeError, En as runProcessOperation, F as gcOptionsOf, Ft as withEasProjectLock, G as planCacheEmptying, H as includesRecordings, J as selectsBeyondCaches, Jn as parseArchiveSelector, K as previewScopedEmptying, L as openGcLog, Q as deleteGradleVersions, St as deleteEasSessions, U as includesWorkspaceOutputs, V as includesParkedDevices, W as isWorkspacesScope, X as collectGradleVersions, Y as trimCaches, Zn as collectMemoryReport, _t as findStaleDeviceRecords, ar as scopedMemoryReport, at as DEVICE_LIST_TIMEOUT_MS, bt as withAndroidAvdSizes, ct as collectParkedSims, dt as deleteProjectDevices, er as memoryLines, et as gradleVersionsPending, fr as sizeCaches, gt as findOrphanedDevices, ht as eraseParkedDevices, ir as reclaimMemory, it as collectInventory, lt as deleteParkedAvds, mt as deviceSweepIsScoped, nr as memorySweepIsScoped, ot as collectDeviceLeases, pt as describeUnverifiableDevices, q as selectCaches, rr as memoryWorkPending, rt as getMachineCacheReport, sr as phase, st as collectParkedAvds, tr as memoryScope, tt as includesGradleVersions, ur as discoverCaches, ut as deleteParkedSims, vt as findStaleProjectDevices, wt as withRemoteSessionGcLocks, xt as collectEasSessionSweep, yt as unverifiedDeviceCommand, z as emptyCaches } from "./ccache-Bm_A1xX9.mjs";
10
- import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-CBFo_Uo1.mjs";
11
- import { At as mapLimited, Dt as createGcResults, Et as GC_OUTPUT, I as idleDeviceLines, M as collectIdleDevices, Mt as sizeConcurrency, N as collectIdleDevicesAsync, R as parseIdleDuration, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, f as rootPresence, g as ARTIFACT_DIRS, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, n as REBUILD_COST, o as collectWorkspaceOutputs, p as sizeText, r as WORKSPACE_OUTPUT_DIRS, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, wt as listBuildSlots, z as shutDownIdleDevices } from "./workspaces-CmOcceDN.mjs";
6
+ import { $t as TRASH_MANIFEST, Ft as matchWorktreeEntry, Wt as resolveSourceCheckoutAsync, Zt as TRASH_CLAIMS, en as deleteTrashEntry, jt as listWorktreesAsync } from "./settings-D776ygML.mjs";
7
+ import { i as findProjectRoot$1, v as detectIsExpo } from "./project-D1n0K4yg.mjs";
8
+ import { Ct as forgetCreatedDeviceAsync, F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, ft as POOL_SETTING_REMEDY, h as avdNameAbsent, vt as parkedMaxSetting, wt as readCreatedDevices$1 } from "./android-BHKgeOuq.mjs";
9
+ import { $ as gradleVersionLines, $n as memoryCacheKind, B as includesArchives, Ct as describeError, En as runProcessOperation, F as gcOptionsOf, Ft as withEasProjectLock, G as planCacheEmptying, H as includesRecordings, J as selectsBeyondCaches, Jn as parseArchiveSelector, K as previewScopedEmptying, L as openGcLog, Q as deleteGradleVersions, St as deleteEasSessions, U as includesWorkspaceOutputs, V as includesParkedDevices, W as isWorkspacesScope, X as collectGradleVersions, Y as trimCaches, Zn as collectMemoryReport, _t as findStaleDeviceRecords, ar as scopedMemoryReport, at as DEVICE_LIST_TIMEOUT_MS, bt as withAndroidAvdSizes, ct as collectParkedSims, dt as deleteProjectDevices, er as memoryLines, et as gradleVersionsPending, fr as sizeCaches, gt as findOrphanedDevices, ht as eraseParkedDevices, ir as reclaimMemory, it as collectInventory, lt as deleteParkedAvds, mt as deviceSweepIsScoped, nr as memorySweepIsScoped, ot as collectDeviceLeases, pt as describeUnverifiableDevices, q as selectCaches, rr as memoryWorkPending, rt as getMachineCacheReport, sr as phase, st as collectParkedAvds, tr as memoryScope, tt as includesGradleVersions, ur as discoverCaches, ut as deleteParkedSims, vt as findStaleProjectDevices, wt as withRemoteSessionGcLocks, xt as collectEasSessionSweep, yt as unverifiedDeviceCommand, z as emptyCaches } from "./ccache-DsDkdP72.mjs";
10
+ import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-B0KLZx5m.mjs";
11
+ import { At as mapLimited, Dt as createGcResults, Et as GC_OUTPUT, I as idleDeviceLines, M as collectIdleDevices, Mt as sizeConcurrency, N as collectIdleDevicesAsync, R as parseIdleDuration, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, f as rootPresence, g as ARTIFACT_DIRS, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, n as REBUILD_COST, o as collectWorkspaceOutputs, p as sizeText, r as WORKSPACE_OUTPUT_DIRS, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, wt as listBuildSlots, z as shutDownIdleDevices } from "./workspaces-CvSYD_78.mjs";
12
12
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
13
- import { N as listBuildLocks, k as removeExpiredLease } from "./activity-DRMg4_mD.mjs";
14
- import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-B1DYuOjh.mjs";
15
- import { r as readCollectors } from "./ownership-DJCq48IJ.mjs";
16
- import { A as deleteSelectedArchives, O as describeDereferenced, j as sweepArchiveStaging, k as reclaimProject } from "./worktree-2dk5edza.mjs";
17
- import { p as writeCacheFile } from "./warm-progress-B0Vpuvpl.mjs";
18
- import { a as restoreProblem, o as workspaceKeys } from "./lightened-DFAJgfIk.mjs";
19
- import { C as worktreeRemovalReason, S as worktreePullRequestNote, _ as ownedDeviceUsage, a as previewMaintenance, b as collectWorktreeSweep, c as deleteTempLeftovers, d as appRoots, f as artifactWorktrees, h as finishedWorkspaces, l as tempLeftoverLines, m as collectArtifactsAsync, o as triggeringRoot, p as clearArtifact, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as maintenancePinned, x as removeWorktrees, y as candidateRootsAsync } from "./act-8iswyfRa.mjs";
20
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-tE90fDdo.mjs";
13
+ import { N as listBuildLocks, k as removeExpiredLease } from "./activity-BR5oHSO5.mjs";
14
+ import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-CoMCWfub.mjs";
15
+ import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
16
+ import { r as readCollectors } from "./ownership-Dtz9G5Gl.mjs";
17
+ import { A as deleteSelectedArchives, O as describeDereferenced, j as sweepArchiveStaging, k as reclaimProject } from "./worktree-CaQBf6kh.mjs";
18
+ import { p as writeCacheFile } from "./warm-progress--KkkBBaq.mjs";
19
+ import { a as restoreProblem, o as workspaceKeys } from "./lightened-vSxkstg6.mjs";
20
+ import { C as candidateRootsAsync, D as worktreeRemovalReason, E as worktreePullRequestNote, S as maintenancePinned, T as removeWorktrees, _ as finishedWorkspaces, a as previewMaintenance, b as cachedDeviceActivity, c as deleteTempLeftovers, d as appRoots, f as artifactWorktrees, g as stopIdleWorkspace, h as planIdleStop, l as tempLeftoverLines, m as collectArtifactsAsync, o as triggeringRoot, p as clearArtifact, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, w as collectWorktreeSweep, x as cachedDeviceActivityAsync, y as ownedDeviceUsage } from "./act-CrTcskiE.mjs";
21
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-W0x4SoC7.mjs";
21
22
  import { claimRemoveCommand, isClaimRefusal, isClaimUnavailable, readClaimSet, releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
22
23
  import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
23
24
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -2192,6 +2193,65 @@ async function deleteParkedHostedDevices(devices, { listAvds: list, operation }
2192
2193
  return failures;
2193
2194
  }
2194
2195
  //#endregion
2196
+ //#region src/commands/gc/idle-workspaces.ts
2197
+ /**
2198
+ * Stops each workspace idle past its maintenance.idleStopHours, as automatic maintenance does, unless
2199
+ * maintenance.mode is off, so the dry run's maintenance plan lists every stop; returns failures.
2200
+ */
2201
+ async function stopIdleWorkspaces(output, operation) {
2202
+ const env = operation?.env ?? process.env;
2203
+ if (resolveMaintenanceSettings(void 0, env).mode === "off") return 0;
2204
+ const devices = () => {
2205
+ const now = Date.now();
2206
+ return operation ? cachedDeviceActivityAsync(now, env, operation.signal, operation) : cachedDeviceActivity(now);
2207
+ };
2208
+ const protectedRoot = triggeringRoot(operation);
2209
+ let plan;
2210
+ try {
2211
+ plan = await planIdleStop({
2212
+ protectedRoot,
2213
+ now: Date.now(),
2214
+ env,
2215
+ devices: devices(),
2216
+ operation
2217
+ });
2218
+ } catch (error) {
2219
+ if (error instanceof WorkspaceProcessCleanupError || error instanceof Error && "reportCleanup" in error) throw error;
2220
+ operation?.signal.throwIfAborted();
2221
+ output.log(chalk.red(`Could not plan idle workspace stops: ${error instanceof Error ? error.message : String(error)}`));
2222
+ return 1;
2223
+ }
2224
+ let failures = 0;
2225
+ for (const action of plan.actions) {
2226
+ operation?.signal.throwIfAborted();
2227
+ let outcome;
2228
+ try {
2229
+ outcome = await stopIdleWorkspace(action, {
2230
+ protectedRoot,
2231
+ devices,
2232
+ operation,
2233
+ by: "stim gc --delete"
2234
+ });
2235
+ } catch (error) {
2236
+ if (error instanceof WorkspaceProcessCleanupError || error instanceof Error && "reportCleanup" in error) throw error;
2237
+ operation?.signal.throwIfAborted();
2238
+ outcome = {
2239
+ status: "failed",
2240
+ bytes: 0,
2241
+ detail: error instanceof Error ? error.message : String(error)
2242
+ };
2243
+ }
2244
+ output.record("devServer", outcome.status, action.target, { detail: outcome.status === "done" ? action.reason : outcome.detail });
2245
+ if (outcome.status === "done") output.log(chalk.green(`Stopped the idle workspace ${action.target}: ${action.reason}`));
2246
+ else if (outcome.status === "kept") output.log(chalk.dim(`Kept the workspace ${action.target}: ${outcome.detail}`));
2247
+ else {
2248
+ failures++;
2249
+ output.log(chalk.red(`Could not stop the idle workspace ${action.target}: ${outcome.detail}`));
2250
+ }
2251
+ }
2252
+ return failures;
2253
+ }
2254
+ //#endregion
2195
2255
  //#region src/commands/gc.ts
2196
2256
  function readGcReport(options = {}, deps = {}) {
2197
2257
  return sweep({
@@ -3009,6 +3069,8 @@ async function runGcCore(opts, deps, execution, reportOnly = false) {
3009
3069
  }
3010
3070
  let deleteFailures = idleFailures;
3011
3071
  throwIfCancelled(signal, "GC");
3072
+ if (cache === null) deleteFailures += await stopIdleWorkspaces(output, deps.operation);
3073
+ throwIfCancelled(signal, "GC");
3012
3074
  deleteFailures += await deleteArchives(report.archives, output, signal);
3013
3075
  throwIfCancelled(signal, "GC");
3014
3076
  deleteFailures += report.workspaceOutputs ? (await clearWorkspaceOutputs(report.workspaceOutputs, {
@@ -3143,7 +3205,7 @@ async function runGcCore(opts, deps, execution, reportOnly = false) {
3143
3205
  return payload(deleteFailures);
3144
3206
  }
3145
3207
  function gcCommand(program) {
3146
- program.command("gc").description("Report what Stim has left behind: dead project entries, orphaned workspace directories, clean Stim-managed linked worktrees whose branch is merged or whose pull request was merged or closed, orphaned owned devices and EAS sessions, records of devices that no longer exist, build locks whose builder is gone, expired physical-device leases, the shared build caches, the build outputs and logs of each workspace, the memory of watchman and of the Gradle and Kotlin daemons, and recognized leftovers in TMPDIR. Reports by default; pass --delete to act.").option("--worktrees", "also remove clean, idle Stim-managed linked worktrees, not only merged ones: with --delete run `stim worktree remove` (never --force) on each; idle means unused for --older-than days, 7 without it").option("--delete", "actually prune the reported entries, reap the reported devices, lighten every workspace that is not building and ran no ios, android or macos command in the last 15 minutes by clearing its build outputs, a running dev server or booted device included, and trim its Metro, client and device logs to their newest 8 MiB").option("--older-than <days>", "also reap owned devices whose workspace has not been used this long, trim shared cache entries nothing has used in that time and device recordings made before it, and clear workspace build outputs only for workspaces idle this long and parked devices only once parked this long", (v) => {
3208
+ program.command("gc").description("Report what Stim has left behind: dead project entries, orphaned workspace directories, clean Stim-managed linked worktrees whose branch is merged or whose pull request was merged or closed, orphaned owned devices and EAS sessions, records of devices that no longer exist, build locks whose builder is gone, expired physical-device leases, the shared build caches, the build outputs and logs of each workspace, the memory of watchman and of the Gradle and Kotlin daemons, and recognized leftovers in TMPDIR. Reports by default; pass --delete to act.").option("--worktrees", "also remove clean, idle Stim-managed linked worktrees, not only merged ones: with --delete run `stim worktree remove` (never --force) on each; idle means unused for --older-than days, 7 without it").option("--delete", "actually prune the reported entries, reap the reported devices, lighten every workspace that is not building and ran no ios, android or macos command in the last 15 minutes by clearing its build outputs, a running dev server or booted device included, trim its Metro, client and device logs to their newest 8 MiB, and, unless maintenance.mode is off, stop each workspace idle past maintenance.idleStopHours as stim stop does").option("--older-than <days>", "also reap owned devices whose workspace has not been used this long, trim shared cache entries nothing has used in that time and device recordings made before it, and clear workspace build outputs only for workspaces idle this long and parked devices only once parked this long", (v) => {
3147
3209
  const n = parseInt(v, 10);
3148
3210
  if (!Number.isFinite(n) || String(n) !== String(v).trim()) throw new InvalidArgumentError("must be a whole number of days, e.g. --older-than 30");
3149
3211
  return n;
@@ -1,3 +1,3 @@
1
- import { _t as findStaleDeviceRecords, ft as describeParkedSims, gt as findOrphanedDevices, pt as describeUnverifiableDevices, q as selectCaches, ut as deleteParkedSims, vt as findStaleProjectDevices } from "./ccache-Bm_A1xX9.mjs";
2
- import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-DM5oMm-J.mjs";
1
+ import { _t as findStaleDeviceRecords, ft as describeParkedSims, gt as findOrphanedDevices, pt as describeUnverifiableDevices, q as selectCaches, ut as deleteParkedSims, vt as findStaleProjectDevices } from "./ccache-DsDkdP72.mjs";
2
+ import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-CKHqL4aS.mjs";
3
3
  export { collectGcReport, gcCommand as default, deleteParkedSims, describeParkedSims, describeUnverifiableDevices, executeGc, findOrphanedDevices, findStaleDeviceRecords, findStaleProjectDevices, formatGcReport, readGcReport, runGc, selectCaches, withGcMaintenanceClaim };
@@ -1,8 +1,8 @@
1
- import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-CY5JZlNN.mjs";
2
- import { i as findProjectRoot$1 } from "./project-Sui52ywT.mjs";
3
- import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-CBFo_Uo1.mjs";
4
- import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-BTW82PDC.mjs";
5
- import "./status-watch-BmsPqYSU.mjs";
1
+ import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-D776ygML.mjs";
2
+ import { i as findProjectRoot$1 } from "./project-D1n0K4yg.mjs";
3
+ import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-B0KLZx5m.mjs";
4
+ import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-CJr2aXXv.mjs";
5
+ import "./status-watch-okrpea4i.mjs";
6
6
  import { SETTINGS, SETTINGS_SCHEMA_URL, TUTORIAL_VERSION } from "@stim-cli/core/state";
7
7
  import chalk from "chalk";
8
8
  //#region src/guide/agent.ts
@@ -288,6 +288,12 @@ activity prevent reclaim. The supervisor's own idle shutdown default is 30m.
288
288
  Read the holder names in progress and build.waitingFor in status; do not start
289
289
  replacement runs while one is queued. See \`stim guide lifecycle concurrency\`.
290
290
 
291
+ After maintenance.idleStopHours (default 6) with no Stim command, native run,
292
+ Metro bundle or HMR request, agent-device command or live view, automatic
293
+ maintenance stops the workspace as stim stop does. Device and app logs do not
294
+ count. After a long pause, run stim ios or android again before driving the
295
+ app; see \`stim guide cleanup\`.
296
+
291
297
  Treat a refusal as an ownership or state mismatch: read its code and remedy.
292
298
  Never reach for --force first.
293
299
  Stim leaves externally started Metro servers alone. Stop them with their original
@@ -1236,9 +1242,10 @@ leased until <time>" for each one.`,
1236
1242
  null when off; plan lists what the next start, ios or
1237
1243
  android would reclaim, in the \`reclaimed\` shape without
1238
1244
  freedMb, and is empty while under budget
1239
- deviceHosts one { machine, state, dnsName?, deviceId?, requestedAt?, expiresAt?,
1240
- host? } per remote.machines entry. state is "approved",
1241
- "pending", "not-asked", "revoked", "lapsed", "key-changed", "outdated",
1245
+ deviceHosts one { machine, state, dnsName?, fingerprint?, deviceId?, requestedAt?,
1246
+ expiresAt?, host? } per remote.machines entry. state is "approved",
1247
+ "pending", "not-asked", "revoked", "lapsed", "key-changed",
1248
+ "key-unconfirmed", "outdated",
1242
1249
  "not-on-tailnet", "tailscale-off", "unreachable", "invalid",
1243
1250
  "credentials-unavailable" or "busy". Setup tickets stay private.
1244
1251
  Only --fix asks for access or forgets removed names. A
@@ -1254,7 +1261,12 @@ leased until <time>" for each one.`,
1254
1261
  expires, absent for a Stim Desktop ticket; "lapsed" is a
1255
1262
  pending request whose expiry passed. --fix asks again.
1256
1263
  "key-changed" means the worker did not prove the
1257
- stim-server key pinned at approval. "outdated" means its
1264
+ stim-server key pinned at approval. "key-unconfirmed" is a
1265
+ local: machine that approved this one but whose key no
1266
+ person confirmed, so nothing pinned it; fingerprint is the
1267
+ key's fingerprint to compare with the one stim-server setup
1268
+ printed there, and only stim doctor --fix in a terminal asks.
1269
+ A local: entry has no dnsName. "outdated" means its
1258
1270
  stim-server speaks protocol 1; the finding names the
1259
1271
  stim-server service update command to run there.
1260
1272
  toolchain { entries, projectNode } on macOS, else null. entries is one { name, value,
@@ -1267,11 +1279,12 @@ leased until <time>" for each one.`,
1267
1279
  pins Node (bin, version and match are null when no install
1268
1280
  fits the pin; match is "exact", or "major" for the newest
1269
1281
  install of the pinned major not older than the pin), else null
1270
- remoteMachines one { machine, state, diagnosis?, dnsName?, deviceId?, requestedAt?,
1271
- expiresAt?, offloadable?, reasons?, problems?, capacity?, host? } per
1282
+ remoteMachines one { machine, state, diagnosis?, dnsName?, fingerprint?, deviceId?,
1283
+ requestedAt?, expiresAt?, offloadable?, reasons?, problems?, capacity?, host? } per
1272
1284
  remote.machines entry, for its build approval; state is "approved", "pending", "not-asked",
1273
1285
  "revoked" (revoked or denied), "lapsed" (the request lapsed
1274
- before approval), "key-changed", "outdated",
1286
+ before approval), "key-changed", "key-unconfirmed" (as in
1287
+ deviceHosts), "outdated",
1275
1288
  "not-on-tailnet", "tailscale-off", "unreachable" or
1276
1289
  "invalid". diagnosis is { layer, code, title, message, remedy }
1277
1290
  for the first layer that stopped this machine, present for
@@ -1286,6 +1299,11 @@ leased until <time>" for each one.`,
1286
1299
  nothing behind the route), server-not-ready (503: running but
1287
1300
  not serving; its message gives the cause the server reports),
1288
1301
  server-no-answer (silent route while tailscale ping reaches the Mac), server-outdated and connect-failed (none of the above).
1302
+ A local: machine never reads Tailscale and reports
1303
+ lan-not-listening (nothing accepts connections on its
1304
+ stim-server port), lan-no-answer (no reply: the network, or
1305
+ the macOS firewall on that machine), server-not-ready or
1306
+ connect-failed.
1289
1307
  Tailscale's own "offline" flag lags a reachable peer, so an
1290
1308
  answer from the machine outranks it. host has the same shape and presence rule as in
1291
1309
  deviceHosts, as do expiresAt (a pending request's lapse
@@ -2041,7 +2059,7 @@ RULES
2041
2059
  Each booted simulator and detected emulator in environments (and in
2042
2060
  slots) carries activity; a shut-down or physical device has none:
2043
2061
 
2044
- activity { state, driver?, lastActivityAt?, recent?, basis }
2062
+ activity { state, driver?, lastActivityAt?, recent?, basis, unknown? }
2045
2063
 
2046
2064
  state "driven" a live claim or driver holds the device now
2047
2065
  "active" no driver, but activity in the last 10 minutes
@@ -2064,6 +2082,8 @@ RULES
2064
2082
  workspace-use, supervisor-start, page-log or viewer, each
2065
2083
  rounded down to the minute. viewer is now while a
2066
2084
  stim-server client streams the device's frames
2085
+ unknown for "driven" only: the checks that could not be read, in
2086
+ basis's vocabulary; absent when every check was read
2067
2087
  basis the evidence behind state, strongest first:
2068
2088
  agent-device-claim, agent-device-lease agent-device state,
2069
2089
  read only; live only when every recorded process is alive
@@ -2445,8 +2465,8 @@ RULES
2445
2465
  minutes. It caches them in $STIM_HOME/agent-sessions.json, which one-shot
2446
2466
  status reads and ignores once it is 2 minutes old. Both sources are other
2447
2467
  tools' internal files; a missing or changed one only drops its sessions.
2448
- \`start\`, \`ios\`, \`android\`, \`web\`, \`reload\` and \`worktree warm\`
2449
- also record the CLAUDE_CODE_SESSION_ID or CODEX_THREAD_ID of the shell
2468
+ \`start\`, \`ios\`, \`android\`, \`web\`, \`reload\`, \`logs\` and
2469
+ \`worktree warm\` also record the CLAUDE_CODE_SESSION_ID or CODEX_THREAD_ID of the shell
2450
2470
  that ran them, so that session is listed for 30 minutes after the command
2451
2471
  even when status cannot see it, and for as long as it runs.
2452
2472
 
@@ -2990,8 +3010,8 @@ WHAT THE SUPERVISOR IS
2990
3010
  (default 60; 0 never stops) with no bundle request, no client log record
2991
3011
  (in-app console logs; for Expo or metro.command, any stdout line of the
2992
3012
  dev server) and no Stim
2993
- command in the workspace (start, ios, android, reload, worktree warm). It
2994
- checks once a minute. It keeps running while a bundle response is in
3013
+ command in the workspace (start, ios, android, reload, logs, worktree
3014
+ warm). It checks once a minute. It keeps running while a bundle response is in
2995
3015
  flight, while a build in the workspace is in progress, while a stim ios,
2996
3016
  android or stop run holds the workspace's native-run lock, while the
2997
3017
  workspace holds an unexpired device lease (\`stim device lock\` or a
@@ -3024,8 +3044,9 @@ WHAT THE SUPERVISOR IS
3024
3044
  own stops show only in the log).
3025
3045
  requested a Stim command stopped it and says which: stim stop,
3026
3046
  stim worktree remove, stim gc --delete, stim start
3027
- --reset-cache, or budget reclaim (with the workspace whose
3028
- ios, android or start run reclaimed it)
3047
+ --reset-cache, budget reclaim (with the workspace whose
3048
+ ios, android or start run reclaimed it), or automatic
3049
+ maintenance with its idle reason (guide cleanup, IDLE STOP)
3029
3050
  signal a SIGTERM or SIGINT with no Stim stop request recorded,
3030
3051
  so it likely came from outside Stim (level warn)
3031
3052
  server-exited the dev server exited on its own (level error). Expo CLI
@@ -3627,7 +3648,9 @@ WHAT WRITES WHAT
3627
3648
  and, on Expo, one per dev-client manifest
3628
3649
  request (manifest_request_started, _finished,
3629
3650
  _failed: debug level, with platform and requestId;
3630
- launch verification reads them as progress)
3651
+ launch verification reads them as progress), and
3652
+ an hmr_update debug record, at most once a minute,
3653
+ when Metro pushes a Fast Refresh change to the app
3631
3654
  client.ndjson in-app console logs and redboxes -- BARE PROJECTS ONLY.
3632
3655
  In expo-child and command-child mode everything the
3633
3656
  dev server prints lands in metro.ndjson with raw: true,
@@ -7904,7 +7927,7 @@ OPT-IN CONCURRENCY LIMITS (UNLIMITED BY DEFAULT)
7904
7927
 
7905
7928
  Warm registers the app it prepares, so \`stim status\` lists the workspace
7906
7929
  with phase "warming" while it runs and "ready" once it succeeds, until the
7907
- first start, ios, android, web or reload there or for 2 hours
7930
+ first start, ios, android, web, reload or logs there or for 2 hours
7908
7931
  (\`guide facts status\`). In a monorepo worktree root, that app is the one
7909
7932
  the source checkout has registered.
7910
7933
 
@@ -8689,6 +8712,52 @@ supervisor's idle rules and records (guide lifecycle budget). While the level is
8689
8712
  check also names abnormally large processes (guide lifecycle simslim) in
8690
8713
  status's maintenance block and the maintenance log.
8691
8714
 
8715
+ IDLE STOP: the idle check, and gc --delete unless maintenance.mode is off (its
8716
+ dry run lists them in the maintenance plan), stop a workspace whose dev server
8717
+ runs or whose owned simulator or emulator is booted once it has had no real
8718
+ activity for maintenance.idleStopHours (default 6; 0 never; machine or project
8719
+ layers; STIM_MAINTENANCE_IDLE_STOP_HOURS overrides; fractions work). Six hours
8720
+ outlasts a lunch break, a meeting or an agent's pause between tasks, and still
8721
+ frees the memory overnight. Real activity is the newest of: a Stim command in
8722
+ the workspace (start, ios, android, macos, web, reload, logs, worktree warm),
8723
+ the end of its last native build, the start, progress or end of a Metro
8724
+ bundle or manifest request, or an HMR update, in metro.ndjson, an agent-device command in the workspace's
8725
+ agent-device sessions, and an open stim-server live view of its device.
8726
+ Device and system log lines, in-app console logs, dev server output,
8727
+ collector writes and maintenance's own records never count, and an app that
8728
+ only stays connected does not either. The stop is stim stop's: the dev
8729
+ server stops, the owned devices shut down through centralized teardown
8730
+ (never deleted), and the port is released; device leases stay. A build, a
8731
+ held native-run or metro-start lock, a build lock or slot, a running macOS
8732
+ app, a hosted or remote session, an unexpired device lease, a managed tunnel
8733
+ or remote lock, a running owned Chrome, a device driver other than
8734
+ agent-device, a live agent-device claim with no session activity to judge,
8735
+ device activity, an emulator list or an emulator's AVD name that cannot be read keeps
8736
+ the workspace;
8737
+ the check decides again under the native-run and metro-start locks. Each stop
8738
+ is a maintenance_action line naming the idle time (gc --delete records itself
8739
+ as the requester), each workspace kept past the window a maintenance_skip line
8740
+ with the reason. The port is released, so status shows the workspace idle as
8741
+ after stim stop, and the supervisor_stopped line in metro.ndjson names
8742
+ automatic maintenance and the idle time as the requester. The next start, ios or android starts it
8743
+ again. An owned emulator the activity check missed keeps the workspace while
8744
+ adb lists it, and so does any emulator adb lists without an AVD name, such as
8745
+ a stale offline entry that adb kill-server clears. A dev server that may still run after its supervisor
8746
+ exited is kept until stim stop ends it. So is a dev server whose requests Stim
8747
+ does not record: an Expo project before SDK 54, which cannot load Stim's Metro config
8748
+ adapter, or a dev server an older Stim started, until stim stop and stim start
8749
+ restart it. Unlike the other actions, it can stop the workspace whose dev server
8750
+ supervisor or status --watch timer started the pass; a pass a command starts,
8751
+ gc --delete included, never stops the command's own workspace.
8752
+ A dev server run through metro.command is kept: Stim sees none of its
8753
+ bundle or HMR requests. A Metro log that cannot be read, or that rotated
8754
+ within the window, and agent-device sessions, a state.json or a stim-server
8755
+ viewer record that cannot be read or verified keep the workspace too. A STIM_HOME-scoped home never
8756
+ idle-stops, because its devices are machine-wide. maintenance.keep does not keep a workspace from idle
8757
+ stop, which deletes nothing; set maintenance.idleStopHours 0 at workspace
8758
+ scope instead.
8759
+ stim settings set maintenance.idleStopHours 1 --scope machine
8760
+
8692
8761
  In on mode a pass runs, cheapest to rebuild first:
8693
8762
  1. orphaned workspace directories whose project is gone, and registered
8694
8763
  caches whose directory no longer exists
@@ -8733,7 +8802,8 @@ live build lock, or in a Metro store with a running or unverifiable dev
8733
8802
  server. Anything the pass cannot verify is kept. A device is deleted only when
8734
8803
  its workspace is idle: no dev server, native run, build, lease, managed lock,
8735
8804
  driven or busy device, and no recorded use within the window. Below disk
8736
- pressure level 3 a pass never stops a dev server or watchman; removing a
8805
+ pressure level 3 a pass stops a dev server only by IDLE STOP above and never
8806
+ stops watchman; removing a
8737
8807
  finished worktree or orphaned directory does tear down that workspace's own
8738
8808
  dev server, owned devices and Chrome profile, as gc --delete does. ccache evicts by itself under
8739
8809
  caches.ccacheMaxGb.
@@ -9792,8 +9862,8 @@ WORKSPACE BUILD OUTPUTS
9792
9862
  1 keeps its own rules. A running, building, unverified or hosted macOS app
9793
9863
  keeps its workspace untouched.
9794
9864
  stim gc --delete --cache workspaces --older-than 7
9795
- Last use is the newest of the lastUsedAt that start, ios, android, reload
9796
- and worktree warm record in state.json, lastBuild.startedAt,
9865
+ Last use is the newest of the lastUsedAt that start, ios, android, reload,
9866
+ logs and worktree warm record in state.json, lastBuild.startedAt,
9797
9867
  supervisor.startedAt and the mtimes under logs/, so a dev server that keeps
9798
9868
  logging keeps its workspace in use.
9799
9869
  A workspace with none of those was last used when its workspace.json was
@@ -10529,6 +10599,8 @@ floors below; report measures and plans and deletes nothing; off disables it.
10529
10599
  STIM_HOME and CI make the mode off unless STIM_MAINTENANCE is set.
10530
10600
  maintenance.keep is a project setting: pin a workspace so a pass never clears
10531
10601
  its build outputs or removes its worktree.
10602
+ maintenance.idleStopHours takes machine or project layers, so one workspace can
10603
+ stop sooner, later or never.
10532
10604
  See \`guide cleanup\` for checks, plans and log paths.
10533
10605
 
10534
10606
  ${SETTINGS.filter((setting) => setting.key.startsWith("maintenance.") || /^caches\..*MaxGb$/.test(setting.key)).map((setting) => ` ${setting.key} ${setting.env ?? "project setting"} ${setting.default === void 0 ? "unset" : `default ${setting.default}`}
@@ -10697,6 +10769,38 @@ machine a \`priority\` in its JSON:
10697
10769
  A host reports its own load limit in its device offer; a stim-server older than
10698
10770
  that does not, and this machine's \`server.maxLoadPerCore\` stands in for it.
10699
10771
 
10772
+ REMOTE MACHINES ON THE LOCAL NETWORK
10773
+ A machine on the same local network, without Tailscale, is named
10774
+ \`local:<host>\`: its private IPv4 address or host name, with an optional
10775
+ stim-server port (default 7787). On the worker, a person first chooses where
10776
+ stim-server listens with the machine setting \`server.lanAddresses\`, a list of
10777
+ network interface names or private IPv4 addresses. It defaults to [], which
10778
+ listens on no local network address; wildcard, loopback, public and IPv6
10779
+ addresses are refused, and the running server applies a change within seconds.
10780
+ An interface name follows the interface onto whatever private network it
10781
+ joins, so name the address on a machine that moves between networks, and an
10782
+ interface only on a worker that stays put. Then the person runs the setup
10783
+ command \`stim doctor --fix\` prints here:
10784
+
10785
+ stim settings set server.lanAddresses '["10.0.0.92"]' # on the worker
10786
+ stim settings set remote.machines '["local:10.0.0.92"]' # on this machine
10787
+ stim doctor --fix
10788
+
10789
+ Every connection runs Stim's Noise handshake, so plain WebSocket carries it
10790
+ without TLS, and the address never identifies anyone. Nothing on a local network
10791
+ vouches for the worker's key, so \`stim-server setup\` prints the worker's server
10792
+ key fingerprint and \`stim doctor --fix\`, run by a person in a terminal, shows
10793
+ the fingerprint the worker answered with and pins the key only after they
10794
+ confirm it matches. Until then the entry reports key-unconfirmed and is not
10795
+ used. Agents never answer that question. The printed setup command carries the
10796
+ ticket, which is a credential: whoever spends it first, after setup stores it,
10797
+ gets the approval, and on a local network that takes only the ticket and a
10798
+ route to the worker, not tailnet membership. Agents show it only to the user.
10799
+ Offloaded builds and hosted Debug and
10800
+ Release runs work there; agent control of hosted apps needs a tailnet machine.
10801
+ \`stim-server pair\` puts \`ws://<address>:<port>\` in the phone pairing code
10802
+ when Tailscale is not running and \`server.lanAddresses\` is set.
10803
+
10700
10804
  Automatic membership is separate from approval. In Desktop Settings > Remote
10701
10805
  Machines, use Builds enabled and Simulators enabled for this machine or a
10702
10806
  configured remote. The equivalent machine settings list the excluded members;
@@ -11135,7 +11239,7 @@ scope, so it needs no --scope. Run it from the workspace:
11135
11239
 
11136
11240
  \`stim status --json\` then reports hidden: true on that environment, and
11137
11241
  clients that read it list the workspace under Hidden. The next start, ios,
11138
- android, web, macos, reload or worktree warm in the workspace clears it, so
11242
+ android, web, macos, reload, logs or worktree warm in the workspace clears it, so
11139
11243
  a workspace in use is never hidden. \`worktree remove\` drops it with the
11140
11244
  workspace.
11141
11245
 
@@ -1,7 +1,7 @@
1
1
  import { c as throwIfCancelled } from "./exec-aULwtNly.mjs";
2
- import { c as call, l as connectHost } from "./hosted-client-DDRm9hPJ.mjs";
3
- import { i as requestHostedMetro } from "./metro-request-DXyKjVDF.mjs";
4
- import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-CDe33CSr.mjs";
2
+ import { c as call, l as connectHost } from "./hosted-client-CgoxdU9j.mjs";
3
+ import { i as requestHostedMetro } from "./metro-request-BtF7ox53.mjs";
4
+ import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-DvZENAL-.mjs";
5
5
  //#region src/device-host/hosted-android.ts
6
6
  async function prepareHostedAndroid(machine, selectors, recorded, mode) {
7
7
  return await prepareHostedNative(machine, selectors, recorded, "android", false, mode);
@@ -1,7 +1,7 @@
1
1
  import { c as throwIfCancelled, o as cancellableSleep } from "./exec-aULwtNly.mjs";
2
- import { Y as diagnoseConnectFailure, ot as resolveEndpoint } from "./config-Cn94Jc0g.mjs";
3
- import { t as BuildConnection } from "./client-YxCer6ab.mjs";
4
- import { g as configuredMachines } from "./selection-CXgM_VK_.mjs";
2
+ import { Y as diagnoseConnectFailure, st as resolveEndpoint } from "./config-AbUjIBOQ.mjs";
3
+ import { t as BuildConnection } from "./client-BTUH8TF1.mjs";
4
+ import { g as configuredMachines } from "./selection-D1ZDzHFX.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { lstatSync, readFileSync, readdirSync, readlinkSync } from "node:fs";
7
7
  import { join } from "node:path";
@@ -1,11 +1,11 @@
1
1
  import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { E as workspaceDir, k as workspaceLogsDir$1 } from "./workspace-state-kIZrdlSg.mjs";
3
- import { B as deviceSlotFileKey, q as validateDeviceSlot, rt as parseMachine$1 } from "./config-Cn94Jc0g.mjs";
4
- import { l as phaseLine } from "./command-output-C8R1KIvi.mjs";
5
- import { n as macosDir } from "./state-BXC1Lfxw.mjs";
6
- import { n as androidLogGroups, r as isAndroidCrashText } from "./android-D577ApKG.mjs";
7
- import { c as readNdjsonGenerations$1, i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.mjs";
8
- import { c as call } from "./hosted-client-DDRm9hPJ.mjs";
2
+ import { E as workspaceDir, k as workspaceLogsDir$1 } from "./workspace-state-DGwkPXwq.mjs";
3
+ import { B as deviceSlotFileKey, it as parseMachine$1, q as validateDeviceSlot } from "./config-AbUjIBOQ.mjs";
4
+ import { l as phaseLine } from "./command-output-DjCsmzLZ.mjs";
5
+ import { n as macosDir } from "./state-C2AUjjhg.mjs";
6
+ import { n as androidLogGroups, r as isAndroidCrashText } from "./android-CLU_MMnb.mjs";
7
+ import { c as readNdjsonGenerations$1, i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
8
+ import { c as call } from "./hosted-client-CgoxdU9j.mjs";
9
9
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
10
10
  import { dirname, join } from "node:path";
11
11
  import { LOG_ROTATE_BYTES, ambientWrite, withDirLockAsync } from "@stim-cli/core";
@@ -47,11 +47,20 @@ async function removeAgentAccess(file, keep) {
47
47
  }
48
48
  }
49
49
  async function agentAccess(file, credential, grant, note, platform = "macos") {
50
+ const machine = parseMachine$1(credential.machine);
51
+ if (machine?.transport === "local") {
52
+ if (grant !== void 0) note(`Agent control of apps hosted on ${credential.machine} needs a tailnet machine; the local network does not carry it.`);
53
+ await removeAgentAccess(file);
54
+ return {
55
+ driver: "none",
56
+ setting: "hosting.agentDriver"
57
+ };
58
+ }
50
59
  const parsed = grant === void 0 ? null : parseHostedAgentGrant(grant);
51
60
  const issued = parsed && "token" in parsed ? parsed : null;
52
61
  const loaded = issued ? await agentDriverClient(issued.driver) : null;
53
62
  if (grant !== void 0 && !parsed || loaded && "unavailable" in loaded) note(`${credential.machine} offered agent control this Stim does not support.`);
54
- const port = parseMachine$1(credential.machine)?.port ?? 443;
63
+ const port = machine?.port ?? 443;
55
64
  const client = loaded && "client" in loaded ? loaded.client : null;
56
65
  const target = client ? join(dirname(file), client.configFile) : file;
57
66
  const access = client && issued ? client.access({
@@ -1,8 +1,8 @@
1
- import { n as pullHostedNativeLogs, r as readHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-bSebOKbz.mjs";
2
- import { l as phaseLine } from "./command-output-C8R1KIvi.mjs";
3
- import { l as connectHost } from "./hosted-client-DDRm9hPJ.mjs";
4
- import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-BPHqMDdZ.mjs";
5
- import "./hosted-macos-B7-8Pv4H.mjs";
1
+ import { n as pullHostedNativeLogs, r as readHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-C-4INmkn.mjs";
2
+ import { l as phaseLine } from "./command-output-DjCsmzLZ.mjs";
3
+ import { l as connectHost } from "./hosted-client-CgoxdU9j.mjs";
4
+ import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-Ce_dystM.mjs";
5
+ import "./hosted-macos-Doh85YUM.mjs";
6
6
  import { watch } from "node:fs";
7
7
  import { dirname, relative, resolve, sep } from "node:path";
8
8
  import { ambientWrite, configDir } from "@stim-cli/core";
@@ -1,9 +1,9 @@
1
1
  import { o as cancellableSleep } from "./exec-aULwtNly.mjs";
2
- import { a as agentAccess, i as closeAgentConnection, o as removeAgentAccess, t as pullHostedMacosLogs } from "./hosted-logs-bSebOKbz.mjs";
3
- import { l as phaseLine } from "./command-output-C8R1KIvi.mjs";
4
- import { n as macosDir } from "./state-BXC1Lfxw.mjs";
5
- import { ot as runCancellationSignal } from "./toolchain-mLA_km-b.mjs";
6
- import { _ as stoppedSession, a as SESSION_TIMEOUT_MS, c as call, f as hostedSession, g as sha256, h as settle, i as RESERVE_TIMEOUT_MS, l as connectHost, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as unknownSession, y as upload } from "./hosted-client-DDRm9hPJ.mjs";
2
+ import { a as agentAccess, i as closeAgentConnection, o as removeAgentAccess, t as pullHostedMacosLogs } from "./hosted-logs-C-4INmkn.mjs";
3
+ import { l as phaseLine } from "./command-output-DjCsmzLZ.mjs";
4
+ import { n as macosDir } from "./state-C2AUjjhg.mjs";
5
+ import { ot as runCancellationSignal } from "./toolchain-CLGnEUgT.mjs";
6
+ import { _ as stoppedSession, a as SESSION_TIMEOUT_MS, c as call, f as hostedSession, g as sha256, h as settle, i as RESERVE_TIMEOUT_MS, l as connectHost, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as unknownSession, y as upload } from "./hosted-client-CgoxdU9j.mjs";
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { join } from "node:path";
9
9
  import { ambientContext, ambientWrite } from "@stim-cli/core";
@@ -1,10 +1,10 @@
1
1
  import { o as cancellableSleep, x as withDrainingCancellation } from "./exec-aULwtNly.mjs";
2
- import { E as workspaceDir, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-kIZrdlSg.mjs";
3
- import { a as agentAccess, i as closeAgentConnection, n as pullHostedNativeLogs, o as removeAgentAccess } from "./hosted-logs-bSebOKbz.mjs";
4
- import { ot as runCancellationSignal } from "./toolchain-mLA_km-b.mjs";
5
- import { _ as stoppedSession, a as SESSION_TIMEOUT_MS, c as call, f as hostedSession, g as sha256, h as settle, i as RESERVE_TIMEOUT_MS, l as connectHost, m as requireHostedAppMode, n as OFFER_TIMEOUT_MS, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as unknownSession, y as upload } from "./hosted-client-DDRm9hPJ.mjs";
6
- import { a as requireHostedMetro, i as requestHostedMetro, n as closeHostedMetro } from "./metro-request-DXyKjVDF.mjs";
7
- import { s as writeHostedNative } from "./ios-state-BPHqMDdZ.mjs";
2
+ import { E as workspaceDir, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-DGwkPXwq.mjs";
3
+ import { a as agentAccess, i as closeAgentConnection, n as pullHostedNativeLogs, o as removeAgentAccess } from "./hosted-logs-C-4INmkn.mjs";
4
+ import { ot as runCancellationSignal } from "./toolchain-CLGnEUgT.mjs";
5
+ import { _ as stoppedSession, a as SESSION_TIMEOUT_MS, c as call, f as hostedSession, g as sha256, h as settle, i as RESERVE_TIMEOUT_MS, l as connectHost, m as requireHostedAppMode, n as OFFER_TIMEOUT_MS, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as unknownSession, y as upload } from "./hosted-client-CgoxdU9j.mjs";
6
+ import { a as requireHostedMetro, i as requestHostedMetro, n as closeHostedMetro } from "./metro-request-BtF7ox53.mjs";
7
+ import { s as writeHostedNative } from "./ios-state-Ce_dystM.mjs";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { readFileSync } from "node:fs";
10
10
  import { join } from "node:path";
@@ -1,11 +1,11 @@
1
- import { k as workspaceLogsDir$1, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-kIZrdlSg.mjs";
2
- import { V as deviceSlotKey, _ as loadConfig$1 } from "./config-Cn94Jc0g.mjs";
3
- import { o as formatLongDuration } from "./command-output-C8R1KIvi.mjs";
4
- import { i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.mjs";
5
- import { B as workspaceBuildInProgress, P as collectOwnedDeviceActivity, ht as teardownOwnedIosSim, pt as teardownOwnedAvd } from "./workspaces-CmOcceDN.mjs";
1
+ import { k as workspaceLogsDir$1, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-DGwkPXwq.mjs";
2
+ import { V as deviceSlotKey, _ as loadConfig$1 } from "./config-AbUjIBOQ.mjs";
3
+ import { o as formatLongDuration } from "./command-output-DjCsmzLZ.mjs";
4
+ import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
5
+ import { B as workspaceBuildInProgress, P as collectOwnedDeviceActivity, ht as teardownOwnedIosSim, pt as teardownOwnedAvd } from "./workspaces-CvSYD_78.mjs";
6
6
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
7
- import { _ as workspaceDeviceLastUseAt } from "./activity-DRMg4_mD.mjs";
8
- import { d as listAllIosSims } from "./ios-B1DYuOjh.mjs";
7
+ import { _ as workspaceDeviceLastUseAt } from "./activity-BR5oHSO5.mjs";
8
+ import { d as listAllIosSims } from "./ios-CoMCWfub.mjs";
9
9
  import { join } from "node:path";
10
10
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
11
11
  import { DEVICE_IDLE_SHUTDOWN_KEY, DEVICE_RECLAIM_REASON, readDeviceIdleShutdowns } from "@stim-cli/core/state";
@@ -1,9 +1,9 @@
1
- import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-C8R1KIvi.mjs";
2
- import { xn as schemesFromInfoPlist, yn as pickDevClientScheme } from "./ccache-Bm_A1xX9.mjs";
3
- import { f as podAction, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, s as iosConfigurationSetting, t as appNameFromPath, u as isReleaseConfiguration, v as resolveRuntime } from "./support-BtlJKjyQ.mjs";
4
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DG4Rodzj.mjs";
5
- import { t as devClientScheme } from "./dev-client-D-BW5uiq.mjs";
6
- import { c as writeLastBuild, i as iosFacts, n as cacheDescription, o as lastBuildRecord } from "./ios-project-CR4mZ7CH.mjs";
7
- import { d as replaceCollector, u as collectorEntry } from "./dependencies-DKeMzwXY.mjs";
8
- import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-tg4tp3q1.mjs";
1
+ import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DjCsmzLZ.mjs";
2
+ import { xn as schemesFromInfoPlist, yn as pickDevClientScheme } from "./ccache-DsDkdP72.mjs";
3
+ import { f as podAction, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, s as iosConfigurationSetting, t as appNameFromPath, u as isReleaseConfiguration, v as resolveRuntime } from "./support-BMpQIug0.mjs";
4
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DyH2gkXK.mjs";
5
+ import { t as devClientScheme } from "./dev-client-CROrxj1x.mjs";
6
+ import { c as writeLastBuild, i as iosFacts, n as cacheDescription, o as lastBuildRecord } from "./ios-project-DJYptOCh.mjs";
7
+ import { d as replaceCollector, u as collectorEntry } from "./dependencies-CHNqX6Pr.mjs";
8
+ import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-UM_dManb.mjs";
9
9
  export { appNameFromPath, buildLogFile, cacheDescription, collectorEntry, iosCommand as default, devClientScheme, deviceLabel, ensureWorkspaceStorageSafely, formatDuration, iosConfigurationSetting, iosFacts, isReleaseConfiguration, lastBuildRecord, phaseLine, pickDevClientScheme, podAction, registerIos, replaceCollector, resolveConfiguration, resolveDeviceType, resolveRuntime, runIosOperation, schemesFromInfoPlist, shortHash, shortUdid, writeLastBuild };
@@ -1,10 +1,10 @@
1
1
  import { l as WorkspaceProcessCleanupError, n as isTimeoutError, o as cancellableSleep, t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { P as formatBytes, _ as loadConfig$1 } from "./config-Cn94Jc0g.mjs";
2
+ import { P as formatBytes, _ as loadConfig$1 } from "./config-AbUjIBOQ.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
4
  import { n as runOperationFileQuiet, t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
5
- import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-CbWo21kb.mjs";
6
- import { Ct as forgetCreatedDeviceAsync, Et as recordCreatedDeviceAsync, dt as isStimOwnedSim } from "./android-CsPs-7Mg.mjs";
7
- import { n as signedTailFor } from "./apk-signed-tail-CQbwM0qO.mjs";
5
+ import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-CYXLFpFS.mjs";
6
+ import { Ct as forgetCreatedDeviceAsync, Et as recordCreatedDeviceAsync, dt as isStimOwnedSim } from "./android-BHKgeOuq.mjs";
7
+ import { n as signedTailFor } from "./apk-signed-tail-B-wKoF_8.mjs";
8
8
  import { createHash } from "node:crypto";
9
9
  import { closeSync, existsSync, lstatSync, mkdtempSync, openSync, readSync, readdirSync, rmSync, writeFileSync } from "node:fs";
10
10
  import { tmpdir, totalmem } from "node:os";