stim 1.25.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +1 -1
  2. package/dist/{acquire-artifact-zA4S7RHE.mjs → acquire-artifact-DVsvSwf7.mjs} +1 -1
  3. package/dist/{act-BbHS3oV8.mjs → act-C-BqJEpu.mjs} +157 -35
  4. package/dist/{activity-BpjwrQXU.mjs → activity-Lnb_EoRY.mjs} +4 -5
  5. package/dist/{agent-device-usage-output-Bnkerfod.mjs → agent-device-usage-output-DbXy5tg8.mjs} +4 -4
  6. package/dist/{android-saBeB4lr.mjs → android-B5P81yI-.mjs} +1 -1
  7. package/dist/{android-CNZgRC-4.mjs → android-CSbLRD53.mjs} +5 -5
  8. package/dist/{android-BGwuK3Mc.mjs → android-CiNQw3kq.mjs} +73 -49
  9. package/dist/{android-Cjcj8MCw.mjs → android-DTAcRwBC.mjs} +81 -34
  10. package/dist/{android-cas-BVqh2Zep.mjs → android-cas-BTVhZ0Qs.mjs} +4 -4
  11. package/dist/{android-project-CTYaETc0.d.mts → android-project-DUGMbq28.d.mts} +55 -1
  12. package/dist/api.d.mts +8 -5
  13. package/dist/api.mjs +27 -27
  14. package/dist/apk-signed-tail-B46U9hXc.mjs +142 -0
  15. package/dist/{artifact-Co8zixVx.mjs → artifact-BxREhAaV.mjs} +23 -18
  16. package/dist/{artifact-DN8JNwqS.mjs → artifact-CsAP6AGK.mjs} +35 -20
  17. package/dist/{attempt-DW-mQqM7.mjs → attempt-ClyJlZPT.mjs} +4 -2
  18. package/dist/{browser-web-CCgZsHmI.mjs → browser-web-rYPyqhTf.mjs} +11 -12
  19. package/dist/{budget-HyShrIpL.mjs → budget-k2mZGvvk.mjs} +196 -33
  20. package/dist/{build-CAiw8Ezm.mjs → build-DPhApsjV.mjs} +26 -23
  21. package/dist/{build-cache-CKCzxzxA.mjs → build-cache-DrXNCy3T.mjs} +103 -21
  22. package/dist/{build-plan-zCuHGlA8.mjs → build-plan-DrMMdayj.mjs} +5 -5
  23. package/dist/{cache-manifest-BPXRONJz.mjs → cache-manifest-BEZ9Bpl1.mjs} +1 -1
  24. package/dist/cache-manifest.mjs +1 -1
  25. package/dist/{ccache-h1FKhZeg.mjs → ccache-Bx5TbxwG.mjs} +6 -6
  26. package/dist/{cli-C4w607Pz.mjs → cli-BBKFGOFl.mjs} +19 -19
  27. package/dist/cli.mjs +1 -1
  28. package/dist/{client-BQsmyp_-.mjs → client-D9CaRks-.mjs} +36 -61
  29. package/dist/collector-run.mjs +4 -4
  30. package/dist/{command-output-BBvS1H6v.mjs → command-output-BF5AR2dL.mjs} +1 -1
  31. package/dist/{config-BZhXY15H.mjs → config-BktkY_zC.mjs} +321 -15
  32. package/dist/{launch-DscF1QfM.mjs → dependencies-Dw6wfQdv.mjs} +258 -255
  33. package/dist/{dependency-state-BwNCYG5Q.mjs → dependency-state-DFB41vfr.mjs} +1 -1
  34. package/dist/{dev-client-CHoXXZeg.mjs → dev-client-DXR_tPVY.mjs} +2 -2
  35. package/dist/{device-B9FqTBYW.mjs → device-BK-zwyd_.mjs} +13 -13
  36. package/dist/{device-F5-4z9ef.mjs → device-BcYeHSFu.mjs} +14 -14
  37. package/dist/{device-capacity-ZYaRALv5.mjs → device-capacity-DCSvUF0l.mjs} +10 -17
  38. package/dist/device-host-worker.mjs +11 -13
  39. package/dist/{device-ios-DkHBrmvH.mjs → device-ios-BLGfXQeK.mjs} +49 -17
  40. package/dist/{device-lease-run-ogEeJ62K.mjs → device-lease-run-BmvIl7bI.mjs} +4 -4
  41. package/dist/{device-pool-BIg8MU8l.mjs → device-pool-Dluix4H3.mjs} +3 -3
  42. package/dist/{doctor-k3P3PizH.mjs → doctor-Bhg1ii70.mjs} +14 -14
  43. package/dist/{doctor-A_Nr_fDe.mjs → doctor-Cp-BhzTS.mjs} +1 -1
  44. package/dist/{doctor-Bm8TVpGn.mjs → doctor-OnwP94ne.mjs} +72 -23
  45. package/dist/{doctor-fingerprint-zlujA1Gs.mjs → doctor-fingerprint-D3a04Mhu.mjs} +8 -2
  46. package/dist/doctor-fingerprint.mjs +1 -1
  47. package/dist/{doctor-watchman-BovI1y3-.mjs → doctor-watchman-BStK05nt.mjs} +4 -4
  48. package/dist/{eas-build-CyDKNTBP.mjs → eas-build-Dsj93iM9.mjs} +2 -2
  49. package/dist/{eas-fallback-gaZi-dJL.mjs → eas-fallback-FwkeqqGi.mjs} +10 -10
  50. package/dist/{eas-session-ledger-BMCA1gdO.mjs → eas-session-ledger-B5vygTiD.mjs} +5 -5
  51. package/dist/{error-diagnostics-B1Mj_-7h.mjs → error-diagnostics-BOOm9Db7.mjs} +8 -8
  52. package/dist/{gc-eaz403W6.mjs → gc-C_79zvz4.mjs} +2 -2
  53. package/dist/{gc-B9jcnmIk.mjs → gc-ldgr-hXU.mjs} +74 -43
  54. package/dist/{guide-DR0K0xW9.mjs → guide-D7K0X6KG.mjs} +272 -52
  55. package/dist/{hosted-android-Bvb2-ZxD.mjs → hosted-android-Bk54ej6n.mjs} +3 -3
  56. package/dist/{hosted-client-rsRqysJc.mjs → hosted-client-fHO8yqzc.mjs} +5 -5
  57. package/dist/{hosted-ios-RtVcJH3u.mjs → hosted-ios-D55QhYaD.mjs} +1 -1
  58. package/dist/{hosted-logs-CWKGYWNX.mjs → hosted-logs-BfbmDM4M.mjs} +17 -11
  59. package/dist/hosted-logs-sync-B0pvmOk-.mjs +195 -0
  60. package/dist/{hosted-macos-d0pv9Tth.mjs → hosted-macos-CPl0OZ9h.mjs} +5 -5
  61. package/dist/{hosted-native-BxTizGU2.mjs → hosted-native-CpDB3-PO.mjs} +6 -7
  62. package/dist/{idle-shutdown-BIyfl0Zj.mjs → idle-shutdown-FfxL1KdG.mjs} +22 -9
  63. package/dist/{ios-Dvt97HgQ.mjs → ios-B7-lToDu.mjs} +8 -8
  64. package/dist/{ios-BQzvJlzw.mjs → ios-WxpDJ5T1.mjs} +72 -5
  65. package/dist/{ios-device-CKSvk0bu.mjs → ios-device-CsyryvpT.mjs} +1 -1
  66. package/dist/{ios-BRVM8b0P.mjs → ios-ftxdQbJS.mjs} +74 -46
  67. package/dist/{ios-project-DCUDo06I.mjs → ios-project-Ty5pHl9O.mjs} +6 -6
  68. package/dist/{ios-state-CT9nV5SP.mjs → ios-state-Cw7-WQf2.mjs} +1 -1
  69. package/dist/{js-swap-Z9HbC4cj.mjs → js-swap-BMhXYVDS.mjs} +4 -4
  70. package/dist/{launch-D0lPvFFu.mjs → launch-DOp8RjDz.mjs} +31 -26
  71. package/dist/{logs-BsIRre8x.mjs → logs-dQDki6Tt.mjs} +9 -173
  72. package/dist/{logs-Crs9y34Z.mjs → logs-s1dRIG1E.mjs} +85 -36
  73. package/dist/{macos-CcUlJPMu.mjs → macos-B0VEV3Gf.mjs} +1 -1
  74. package/dist/{macos-D477nfzH.mjs → macos-DBBPNnIA.mjs} +18 -19
  75. package/dist/macos-run.mjs +1 -1
  76. package/dist/maintenance-run.mjs +28 -11
  77. package/dist/{metro-1pJgCX4U.mjs → metro-CjC10t6E.mjs} +2 -2
  78. package/dist/{metro-gateway-Bp9gJQAN.mjs → metro-gateway-B6_PgD0L.mjs} +2 -3
  79. package/dist/{named-ports-BVbn8SvC.mjs → named-ports-BG0j1X4g.mjs} +2 -2
  80. package/dist/{native-android-BvMizJn1.mjs → native-android-CL2NGiik.mjs} +17 -17
  81. package/dist/{native-gradle-artifact-inputs-BJscK4vN.mjs → native-gradle-artifact-inputs-btSUulme.mjs} +3 -3
  82. package/dist/{native-run-D5OJsGwA.mjs → native-run-BfIDFKLH.mjs} +2 -3
  83. package/dist/{native-runtime-B9w_Qyz3.mjs → native-runtime-Dq3RBcON.mjs} +6 -7
  84. package/dist/{native-xcode-inputs-Cv4l-obn.mjs → native-xcode-inputs-BW7H8JGu.mjs} +2 -2
  85. package/dist/{native-xcode-ios-DGrg90hE.mjs → native-xcode-ios-CBXJAxfC.mjs} +15 -16
  86. package/dist/offload-worker.d.mts +3 -1
  87. package/dist/offload-worker.mjs +31 -21
  88. package/dist/{ownership-jxxz-19m.mjs → ownership-BjYvMNX_.mjs} +2 -2
  89. package/dist/{phone-reverses-CYb7RRAx.mjs → phone-reverses-lmj6kcPm.mjs} +3 -3
  90. package/dist/{placement-log-DjOXJRIH.mjs → placement-log-DIFPQAXp.mjs} +1 -1
  91. package/dist/{plan-placement-BqKgKHCi.mjs → plan-placement-IiiSQhtz.mjs} +3 -3
  92. package/dist/{ports-DtS1Amb0.mjs → ports-C2_w1Z0Z.mjs} +3 -3
  93. package/dist/prebuild-gmouvmJZ.mjs +1247 -0
  94. package/dist/{project-BiC68mIp.mjs → project-BUu6Is4k.mjs} +15 -16
  95. package/dist/{react-native-android-DRYqoJc4.mjs → react-native-android-Cgg99REN.mjs} +47 -33
  96. package/dist/{react-native-build-CwZB-agu.mjs → react-native-build-oNwqF5Wb.mjs} +7 -7
  97. package/dist/{react-native-doctor-BCrytK7h.mjs → react-native-doctor-BhA3KUte.mjs} +49 -8
  98. package/dist/{react-native-ios-Cr1buNFo.mjs → react-native-ios-B-nf4rjN.mjs} +37 -23
  99. package/dist/{recordings-BaoQ0t-J.mjs → recordings-BldzVKq0.mjs} +1 -1
  100. package/dist/{reload-Beftw2X3.mjs → reload-C9OduiNc.mjs} +1 -1
  101. package/dist/{reload-FbSgMF8x.mjs → reload-CCR7KC_l.mjs} +14 -14
  102. package/dist/{remote-BuZj6AyU.mjs → remote-C8S7FlPF.mjs} +7 -7
  103. package/dist/{result-CR2vk2cj.mjs → result-7F5hEwQJ.mjs} +16 -16
  104. package/dist/{run-BtzE09Dl.mjs → run-BqB0v3pt.mjs} +1 -1
  105. package/dist/{selection-D5cxEl3t.mjs → selection-BNPBZ6T5.mjs} +155 -42
  106. package/dist/{server-bare-CH9X0RLn.mjs → server-bare-A75rDIdD.mjs} +1 -1
  107. package/dist/{server-command-CaBbDNU2.mjs → server-command-CssKFOD7.mjs} +4 -4
  108. package/dist/{server-expo-Ck8EIidM.mjs → server-expo-eQfOdydb.mjs} +2 -2
  109. package/dist/server-expo-wvcj5tiZ.mjs +2 -0
  110. package/dist/{settings-B5tCoq9N.mjs → settings-CosW5X-S.mjs} +1 -1
  111. package/dist/{settings-DzH9mGQZ.mjs → settings-OaGQF-ri.mjs} +1 -1
  112. package/dist/{settings-write-n0zwfohx.mjs → settings-write-QjYfSrjF.mjs} +5 -5
  113. package/dist/settings.schema.json +33 -6
  114. package/dist/{simslim-BjxszUAb.mjs → simslim-Bax1qcxu.mjs} +3 -2
  115. package/dist/{slot-launch-QeuJMlnJ.mjs → slot-launch-CYCEhfBY.mjs} +6 -6
  116. package/dist/{stage-D8xlRU2D.mjs → stage-jKQ7CP_B.mjs} +1 -1
  117. package/dist/{start-C1JLjkNw.mjs → start-C_wefNKB.mjs} +1 -1
  118. package/dist/{start-YMpNwLhh.mjs → start-_BdJ32cZ.mjs} +9 -10
  119. package/dist/{state-DMRNP7-4.mjs → state-C1i2nMOP.mjs} +2 -3
  120. package/dist/{state-DPaM3u5K.mjs → state-C4OdpOTF.mjs} +1 -2
  121. package/dist/{stats-CP7STzZw.mjs → stats-tEpEEH-u.mjs} +4 -4
  122. package/dist/{status-cNw6i0_t.mjs → status-B9M7x4CZ.mjs} +1 -1
  123. package/dist/{status-Fect2w9R.mjs → status-CRXz-Gtj.mjs} +1 -1
  124. package/dist/{status-CRLiJ-O_.mjs → status-DQrqodLj.mjs} +22 -23
  125. package/dist/{status-watch-Bc2J4TZn.mjs → status-watch-B5wDIH_o.mjs} +4 -4
  126. package/dist/status-worker.mjs +1 -1
  127. package/dist/{stim-desktop-DS0mzR8U.mjs → stim-desktop-6Dqp-gjX.mjs} +1 -1
  128. package/dist/{stop-Br7LKxBE.mjs → stop-CmdNhGlC.mjs} +2 -2
  129. package/dist/{stop-Db9Kh-UA.mjs → stop-DRqQVqDJ.mjs} +21 -19
  130. package/dist/{stop-COP6PQqw.mjs → stop-ySNQHXMG.mjs} +4 -5
  131. package/dist/supervisor-run.d.mts +1 -0
  132. package/dist/supervisor-run.mjs +14 -15
  133. package/dist/{support-Cxj9CmII.mjs → support-BGSCBoib.mjs} +4 -4
  134. package/dist/{support-qKcbgmI5.mjs → support-CVOCp0Ft.mjs} +9 -9
  135. package/dist/{swiftpm-artifact-inputs-iY9fsmOc.mjs → swiftpm-artifact-inputs-CfUzt_0Z.mjs} +1 -1
  136. package/dist/{swiftpm-macos-Bp_sn9P4.mjs → swiftpm-macos-x6HPpl_2.mjs} +9 -9
  137. package/dist/toolchain-DoavrvIA.mjs +2 -0
  138. package/dist/toolchain-J4J8MrAr.mjs +2107 -0
  139. package/dist/trigger-DzJu208Q.mjs +2 -0
  140. package/dist/{trigger-CBMe2YLH.mjs → trigger-KVaWWNyn.mjs} +1 -1
  141. package/dist/{warm-progress-BV3ZPmcY.mjs → warm-progress-DvhTX_eu.mjs} +3 -4
  142. package/dist/web-BFLueSh-.mjs +2 -0
  143. package/dist/{web-B4Yjyt1G.mjs → web-Bihbf7-u.mjs} +8 -9
  144. package/dist/web-run.mjs +4 -4
  145. package/dist/{workspace-state-CPSp3mav.mjs → workspace-state-pUg3_RRA.mjs} +45 -7
  146. package/dist/{workspaces-C9w4aeXF.mjs → workspaces-g2lhdBXF.mjs} +17 -17
  147. package/dist/{worktree-CclFIe1Z.mjs → worktree-BKuklFh_.mjs} +34 -31
  148. package/dist/{worktree-Ct9Gk3KL.mjs → worktree-Bm4cb-nU.mjs} +1 -1
  149. package/package.json +8 -8
  150. package/dist/created-devices-D2Aca-xu.mjs +0 -52
  151. package/dist/paths-DQtTgsBf.mjs +0 -42
  152. package/dist/prebuild-JUaqOLpc.mjs +0 -501
  153. package/dist/server-expo-C16Zf2k7.mjs +0 -2
  154. package/dist/toolchain-DB1aeqxO.mjs +0 -2
  155. package/dist/toolchain-VzLJzZ7O.mjs +0 -908
  156. package/dist/trigger-BLsHgAGR.mjs +0 -2
  157. package/dist/web-DS4UDWvf.mjs +0 -2
  158. package/dist/xcode-CiIIDnuD.mjs +0 -910
@@ -1,33 +1,33 @@
1
1
  import { D as ownership_claim_exports, E as debugLog, S as process_identity_exports, b as operationState, c as throwIfCancelled, d as workspaceProcessLockError, l as WorkspaceProcessCleanupError, n as isTimeoutError, o as cancellableSleep, s as cancelledError, t as getExecutor, u as withWorkspaceProcessLock, y as isTermination } from "./exec-VFRpu1iA.mjs";
2
- import { d as workspaceDir, f as workspaceId$1, g as workspaceStateFile$1, i as sharedBuildCache, m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
- import { D as withConfigLock$1, F as isOnMountedVolume, G as projectDeviceSlots, H as deviceSlotPlatforms, L as measuredDirectorySizeAsync, M as directorySize, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, _ as loadConfig$1, a as clearDevice, d as getConfigDir, o as clearSupervisor, p as getProject } from "./config-BZhXY15H.mjs";
2
+ import { D as workspaceId$1, E as workspaceDir, d as writeWorkspaceState, j as workspaceStateFile$1, k as workspaceLogsDir$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey, y as sharedBuildCache } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { D as withConfigLock$1, F as isOnMountedVolume, G as projectDeviceSlots, H as deviceSlotPlatforms, L as measuredDirectorySizeAsync, M as directorySize, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, _ as loadConfig$1, a as clearDevice, d as getConfigDir, o as clearSupervisor, p as getProject } from "./config-BktkY_zC.mjs";
4
4
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
5
- import { a as formatElapsed, l as phaseLine, o as formatLongDuration, s as isAppLaunchError, u as plural } from "./command-output-BBvS1H6v.mjs";
5
+ import { a as formatElapsed, l as phaseLine, o as formatLongDuration, s as isAppLaunchError, u as plural } from "./command-output-BF5AR2dL.mjs";
6
6
  import { a as killOnAbort, n as runOperationFileQuiet, r as childEnvironment, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
7
- import { d as writeWorkspaceState, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-CPSp3mav.mjs";
8
- import { Y as resolveProjectSettingsAsync, d as androidLayoutSetting, ut as planMetroReach } from "./settings-B5tCoq9N.mjs";
9
- import { C as resolvePackageJson, M as readMetroTunnel, N as readPidFile, P as readRemoteSession, i as findProjectRoot$1, j as clearWorkspaceSupervisor, k as clearRemoteSession, s as ownedDeviceLabel, v as detectIsExpo } from "./project-BiC68mIp.mjs";
10
- import { F as listAvdsAsync, G as ownedAvdSerialResolverAsync, I as listInstalledSystemImages, J as parseAvdSystemImage, V as ownedAvdDirectory, W as ownedAvdSerialResolver, d as androidToolPath, dt as isStimOwnedSim, m as avdIniPaths, mt as dropParked, o as androidHome, q as parseAvdDeviceProfile, ut as isStimOwnedAvd, v as avdStorageRoots, yt as readParked } from "./android-Cjcj8MCw.mjs";
11
- import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, r as killMetroTreeAsync, u as processCwds } from "./metro-1pJgCX4U.mjs";
7
+ import { Y as resolveProjectSettingsAsync, d as androidLayoutSetting, ut as planMetroReach } from "./settings-CosW5X-S.mjs";
8
+ import { C as resolvePackageJson, M as readMetroTunnel, N as readPidFile, P as readRemoteSession, i as findProjectRoot$1, j as clearWorkspaceSupervisor, k as clearRemoteSession, s as ownedDeviceLabel, v as detectIsExpo } from "./project-BUu6Is4k.mjs";
9
+ import { F as listAvdsAsync, G as ownedAvdSerialResolverAsync, I as listInstalledSystemImages, J as parseAvdSystemImage, V as ownedAvdDirectory, W as ownedAvdSerialResolver, d as androidToolPath, dt as isStimOwnedSim, m as avdIniPaths, mt as dropParked, o as androidHome, q as parseAvdDeviceProfile, ut as isStimOwnedAvd, v as avdStorageRoots, yt as readParked } from "./android-DTAcRwBC.mjs";
10
+ import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, r as killMetroTreeAsync, u as processCwds } from "./metro-CjC10t6E.mjs";
12
11
  import { r as createNdjsonWriter, s as readNdjsonGenerations$1 } from "./ndjson-CgE_o3Dl.mjs";
13
- import { C as environmentState, a as removeEasSessionClaim, d as parseWatchRoots, f as parseWatchmanClients, i as recordEasSessionClaim, l as parseSubscriberNames, n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, p as parseWatchmanPid, r as readEasSessionLedger$1, s as compareStimVersions, t as assertEasMachineRootWritable, u as parseTriggerCount, w as formatSpace, y as capacity } from "./eas-session-ledger-BMCA1gdO.mjs";
14
- import { i as registeredCaches } from "./cache-manifest-BPXRONJz.mjs";
12
+ import { C as environmentState, a as removeEasSessionClaim, d as parseWatchRoots, f as parseWatchmanClients, i as recordEasSessionClaim, l as parseSubscriberNames, n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, p as parseWatchmanPid, r as readEasSessionLedger$1, s as compareStimVersions, t as assertEasMachineRootWritable, u as parseTriggerCount, w as formatSpace, y as capacity } from "./eas-session-ledger-B5vygTiD.mjs";
13
+ import { i as registeredCaches } from "./cache-manifest-BEZ9Bpl1.mjs";
15
14
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
16
- import { c as nativeRunWaitNotice, d as runCancellationSignal, m as claimForEmptying } from "./native-run-D5OJsGwA.mjs";
17
- import { A as teardownOwnedIosSim, B as GC_OUTPUT, E as eraseParkedIosSim, F as measureDu, I as writeUsageCache, M as teardownParkedIosSim, N as probePublicHttp, O as teardownOwnedAvd, P as canonical, R as listBuildSlots, T as eraseParkedAvd, a as collectWorkspaceOutputs, g as resolveSupervisorTarget, j as teardownParkedAvd, p as withIdleWorkspace, r as clearWorkspaceOutputs } from "./workspaces-C9w4aeXF.mjs";
18
- import { N as listBuildLocks, b as leaseIsExpired, g as workspaceActivity, i as createActivityReaderAsync, o as envDir, p as readHostProcessTableAsync, r as createActivityReader, s as idleForMs, x as listLeaseFiles } from "./activity-BpjwrQXU.mjs";
19
- import { c as expoConfigContents } from "./build-cache-CKCzxzxA.mjs";
20
- import { D as sanitizeDeviceLabel, H as deviceHoldsApk, U as deviceHoldsBundle, b as parseSimctlList, f as listAllIosSimsAsync, g as listUserApps, k as uninstallIosApp, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, y as parseRuntimeVersion } from "./ios-BQzvJlzw.mjs";
15
+ import { c as nativeRunWaitNotice, d as runCancellationSignal, m as claimForEmptying } from "./native-run-BfIDFKLH.mjs";
16
+ import { A as teardownOwnedIosSim, B as GC_OUTPUT, E as eraseParkedIosSim, F as measureDu, I as writeUsageCache, M as teardownParkedIosSim, N as probePublicHttp, O as teardownOwnedAvd, P as canonical, R as listBuildSlots, T as eraseParkedAvd, V as createGcResults, a as collectWorkspaceOutputs, g as resolveSupervisorTarget, j as teardownParkedAvd, p as withIdleWorkspace, r as clearWorkspaceOutputs } from "./workspaces-g2lhdBXF.mjs";
17
+ import { N as listBuildLocks, b as leaseIsExpired, g as workspaceActivity, i as createActivityReaderAsync, o as envDir, p as readHostProcessTableAsync, r as createActivityReader, s as idleForMs, x as listLeaseFiles } from "./activity-Lnb_EoRY.mjs";
18
+ import { c as expoConfigContents } from "./build-cache-DrXNCy3T.mjs";
19
+ import { A as uninstallIosApp, O as sanitizeDeviceLabel, U as deviceHoldsApk, W as deviceHoldsBundle, b as parseSimctlList, f as listAllIosSimsAsync, g as listUserApps, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, y as parseRuntimeVersion } from "./ios-WxpDJ5T1.mjs";
21
20
  import { n as supervisorError } from "./errors-DHm_U5gv.mjs";
22
- import { c as findBinUpward, n as expoBinFromPackage, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-Ck8EIidM.mjs";
21
+ import { c as findBinUpward, n as expoBinFromPackage, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-eQfOdydb.mjs";
23
22
  import { t as DEV_MENU_LAUNCH_ARGS } from "./ios-device-B6HK951C.mjs";
23
+ import { t as resolveMaintenanceSettings } from "./settings-Djl-mpjX.mjs";
24
24
  import { createRequire } from "node:module";
25
25
  import { randomUUID } from "node:crypto";
26
- import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, realpathSync, renameSync, rmSync, statSync, statfsSync, writeFileSync } from "node:fs";
26
+ import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, realpathSync, renameSync, rmSync, statSync, statfsSync, unlinkSync, writeFileSync } from "node:fs";
27
27
  import { homedir, platform, totalmem } from "node:os";
28
28
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
29
- import { LOG_ROTATE_BYTES, METRO_NAMED_CACHE_LAYOUT, ambientContext, cacheDirRefusal, compiledHelper, configDir, withAmbientContext } from "@stim-cli/core";
30
- import { BUILD_HISTORY_KEY, BUILD_HISTORY_LIMIT, BUILD_PHASES, DEV_SERVER_STOP_REQUEST_KEY, LAST_BUILD_KEYS, MACHINE_OWNER_KINDS, STATS_VERSION, buildWorkerRoot, decodeStats, isJsonObject, loadConfig, machineCacheUsageFile, parseMissReason, readDevServerStop, readDevServerStopRequest, readJsonObject, readMachineCacheUsage, readRunEstimates, readStats as readStats$1, runId, settingDefinition, settingValueError, statsFile, statsProjectKey as statsProjectKey$1, trimCapacityRefusals, trimCapacityWaits, trimSamples, wholePhases, workspaceBuildDetailFile } from "@stim-cli/core/state";
29
+ import { LOG_ROTATE_BYTES, METRO_NAMED_CACHE_LAYOUT, ambientContext, cacheDirRefusal, compiledHelper, configDir, ensurePrivateDir, rotatedLogPath, withAmbientContext, withDirLock } from "@stim-cli/core";
30
+ import { BUILD_HISTORY_KEY, BUILD_HISTORY_LIMIT, BUILD_PHASES, DEV_SERVER_STOP_REQUEST_KEY, LAST_BUILD_KEYS, MACHINE_OWNER_KINDS, MAINTENANCE_LOG_NAME, STATS_VERSION, buildWorkerRoot, decodeStats, gcLogFile, isJsonObject, loadConfig, machineCacheUsageFile, maintenanceNdjsonFile, parseMissReason, readDevServerStop, readDevServerStopRequest, readJsonObject, readMachineCacheUsage, readRunEstimates, readStats as readStats$1, runId, settingDefinition, settingValueError, statsFile, statsProjectKey as statsProjectKey$1, trimCapacityRefusals, trimCapacityWaits, trimSamples, wholePhases, workspaceBuildDetailFile, workspaceLogsDir } from "@stim-cli/core/state";
31
31
  import { basename as basename$1, dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, relative as relative$1, resolve as resolve$1 } from "path";
32
32
  import { fileURLToPath } from "node:url";
33
33
  import chalk from "chalk";
@@ -3684,6 +3684,7 @@ const MANIFEST_VERIFY_TIMEOUT_MS = 6e4;
3684
3684
  const STABILITY_WINDOW_MS = 3e3;
3685
3685
  const JS_RUNNING_SETTLE_MS = 500;
3686
3686
  const VERIFY_POLL_MS = 500;
3687
+ const DEVICE_LOG_LAG_LIMIT_MS = 1e4;
3687
3688
  const BUNDLE_EVENTS = /* @__PURE__ */ new Set([
3688
3689
  "bundle_build_started",
3689
3690
  "bundle_build_done",
@@ -3762,7 +3763,7 @@ function manifestDeadline(records, { startedAt, timeoutMs }) {
3762
3763
  if (open.size > 0) return cap;
3763
3764
  return servedAt === null ? base : Math.min(cap, Math.max(base, servedAt + MANIFEST_GRACE_MS));
3764
3765
  }
3765
- async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metroPort = null, platform = null, mode = null, requireBundleResponse, timeoutMs = VERIFY_TIMEOUT_MS, stabilityMs = STABILITY_WINDOW_MS, pollMs = VERIFY_POLL_MS, readRecords = null, readDeviceRecords = null, readClientRecords = null, readNativeCrashes = null, processAlive = null, onReadinessPending = null, onActivity, now = Date.now, sleep = (ms) => new Promise((r) => setTimeout(r, ms)) } = {}) {
3766
+ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metroPort = null, platform = null, mode = null, requireBundleResponse, timeoutMs = VERIFY_TIMEOUT_MS, stabilityMs = STABILITY_WINDOW_MS, pollMs = VERIFY_POLL_MS, readRecords = null, readDeviceRecords = null, readClientRecords = null, readNativeCrashes = null, processAlive = null, onReadinessPending = null, onActivity, deviceLogsThrough, now = Date.now, sleep = (ms) => new Promise((r) => setTimeout(r, ms)) } = {}) {
3766
3767
  const delivered = (record) => deliveryOwner(record, {
3767
3768
  slot,
3768
3769
  appPid,
@@ -3771,6 +3772,10 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3771
3772
  const read = readRecords || (() => readMetroRecords(logsDir));
3772
3773
  const readDevice = readDeviceRecords || (() => readNdjson(logsDir, "device.ndjson"));
3773
3774
  const readClient = readClientRecords || (() => readNdjson(logsDir, "client.ndjson"));
3775
+ const deviceNow = () => {
3776
+ const at = now();
3777
+ return deviceLogsThrough ? Math.max(Math.min(at, deviceLogsThrough() ?? -Infinity), at - DEVICE_LOG_LAG_LIMIT_MS) : at;
3778
+ };
3774
3779
  const startedAt = now();
3775
3780
  const baseTimeoutMs = Math.max(0, timeoutMs);
3776
3781
  let bundleDeadline = startedAt + baseTimeoutMs;
@@ -3867,7 +3872,7 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3867
3872
  ...pendingAt !== null ? { readiness: "error" } : {}
3868
3873
  };
3869
3874
  }
3870
- if (proof && windowEnd !== null && (pendingAt !== null || now() >= windowEnd)) {
3875
+ if (proof && windowEnd !== null && (pendingAt !== null || deviceNow() >= windowEnd)) {
3871
3876
  const errorSince = pendingAt === null ? Number(proof.ts ?? since ?? 0) : Number(since ?? 0);
3872
3877
  const errors = [
3873
3878
  ...metroRecords.filter((record) => after(record, errorSince) && recordCouldBelongToPlatform(record, platform)),
@@ -3888,7 +3893,7 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3888
3893
  };
3889
3894
  const actionableErrors = errors.filter((record) => !isIosConnectionRefusal(record, platform));
3890
3895
  const appErrors = actionableErrors.some(isAppLaunchError);
3891
- if (!runtimeWaiting && pendingAt === null || appErrors || ready || now() >= readinessDeadline) return {
3896
+ if (!runtimeWaiting && pendingAt === null || appErrors || ready || deviceNow() >= readinessDeadline) return {
3892
3897
  verified: true,
3893
3898
  record: proof,
3894
3899
  errors: actionableErrors,
@@ -3912,7 +3917,7 @@ async function verifyLaunch({ slot, appPid, platformShared, logsDir, since, metr
3912
3917
  mode,
3913
3918
  waitedMs: now() - startedAt
3914
3919
  });
3915
- await sleep(Math.min(pollMs, Math.max(0, (runtimeWaiting ? bundleDeadline : proof && pendingAt !== null ? readinessDeadline : windowEnd ?? bundleDeadline) - now())));
3920
+ await sleep(Math.min(pollMs, Math.max(0, (runtimeWaiting ? bundleDeadline : proof && pendingAt !== null ? readinessDeadline : windowEnd ?? bundleDeadline) - deviceNow())));
3916
3921
  }
3917
3922
  }
3918
3923
  function launchActivity(pendingAt, proof, bundling) {
@@ -8553,6 +8558,152 @@ async function shutDownIdleDevices(devices, idleMs, recollect, { log, record } =
8553
8558
  };
8554
8559
  }
8555
8560
  //#endregion
8561
+ //#region src/maintenance/log.ts
8562
+ function openRetainedLog(file, settings) {
8563
+ ensurePrivateDir(dirname(file));
8564
+ const rotated = rotatedLogPath(file);
8565
+ withDirLock(`${file}.lock`, () => {
8566
+ try {
8567
+ if (Date.now() - statSync(rotated).mtimeMs > settings.logRetentionDays * 864e5) unlinkSync(rotated);
8568
+ } catch {}
8569
+ });
8570
+ return createNdjsonWriter(file, { maxBytes: settings.logMaxMb * 1024 ** 2 });
8571
+ }
8572
+ function maintenanceLogger(settings, pass, trigger) {
8573
+ const file = maintenanceNdjsonFile();
8574
+ const writer = openRetainedLog(file, settings);
8575
+ return {
8576
+ write(event, level, msg, fields = {}) {
8577
+ if (level === "debug" && !settings.logChecks) return null;
8578
+ const record = {
8579
+ ...fields,
8580
+ ts: Date.now(),
8581
+ src: "maintenance",
8582
+ level,
8583
+ msg,
8584
+ event,
8585
+ pass,
8586
+ trigger,
8587
+ mode: settings.mode === "on" ? "on" : "report"
8588
+ };
8589
+ if (!writer.write(record)) throw writer.lastError ?? /* @__PURE__ */ new Error(`Could not append ${file}`);
8590
+ if (typeof fields.workspace === "string" && [
8591
+ "maintenance_action",
8592
+ "maintenance_failure",
8593
+ "maintenance_skip"
8594
+ ].includes(event)) {
8595
+ const workspace = createNdjsonWriter(join(workspaceLogsDir(fields.workspace), MAINTENANCE_LOG_NAME), { maxBytes: LOG_ROTATE_BYTES });
8596
+ try {
8597
+ if (!workspace.write(record)) throw workspace.lastError ?? /* @__PURE__ */ new Error("Could not append workspace maintenance log");
8598
+ } finally {
8599
+ workspace.close();
8600
+ }
8601
+ }
8602
+ return record;
8603
+ },
8604
+ close: () => writer.close()
8605
+ };
8606
+ }
8607
+ //#endregion
8608
+ //#region src/commands/gc/log.ts
8609
+ const VERBS = {
8610
+ done: "Cleared",
8611
+ kept: "Kept",
8612
+ failed: "Failed to clear"
8613
+ };
8614
+ function gcLogRecord(run, result, ts) {
8615
+ const path = [result.id, result.label].find((value) => value !== null && isAbsolute(value)) ?? null;
8616
+ const size = result.bytes ? ` (${formatBytes(result.bytes)})` : "";
8617
+ const why = result.detail ? `: ${result.detail}` : "";
8618
+ return {
8619
+ ts,
8620
+ src: "gc",
8621
+ level: result.status === "failed" ? "error" : "info",
8622
+ msg: `${VERBS[result.status]} ${result.kind} ${result.label}${size}${why}`,
8623
+ event: "gc_item",
8624
+ runId: run.runId ?? runId(),
8625
+ trigger: run.trigger,
8626
+ ...run.via === void 0 ? {} : { via: run.via },
8627
+ ...run.options === void 0 ? {} : { options: run.options },
8628
+ kind: result.kind,
8629
+ status: result.status,
8630
+ label: result.label,
8631
+ id: result.id,
8632
+ path,
8633
+ bytes: result.bytes,
8634
+ detail: result.detail
8635
+ };
8636
+ }
8637
+ function openGcLog(run) {
8638
+ let failed = false;
8639
+ let acted = run.holdKept !== true;
8640
+ const held = [];
8641
+ const append = (record) => {
8642
+ try {
8643
+ const writer = openRetainedLog(gcLogFile(), resolveMaintenanceSettings(loadConfig$1(), run.env));
8644
+ try {
8645
+ if (!writer.write(record)) throw writer.lastError ?? /* @__PURE__ */ new Error("write failed");
8646
+ } finally {
8647
+ writer.close();
8648
+ }
8649
+ } catch (error) {
8650
+ if (failed) return;
8651
+ failed = true;
8652
+ console.error(`Could not write the gc log ${gcLogFile()}: ${error instanceof Error ? error.message : error}`);
8653
+ }
8654
+ };
8655
+ return { record(result) {
8656
+ const record = gcLogRecord(run, result, Date.now());
8657
+ if (!acted && result.status === "kept") {
8658
+ held.push(record);
8659
+ return;
8660
+ }
8661
+ if (!acted) {
8662
+ acted = true;
8663
+ for (const earlier of held.splice(0)) append(earlier);
8664
+ }
8665
+ append(record);
8666
+ } };
8667
+ }
8668
+ const MAINTENANCE_KINDS = {
8669
+ "clear-outputs": "workspaceOutputs",
8670
+ "trim-cache": "cache",
8671
+ "empty-cache": "cache",
8672
+ "unregister-cache": "cache",
8673
+ "remove-worktree": "worktree",
8674
+ "remove-orphan": "workspaceDirectory",
8675
+ "delete-parked-device": "parkedDevice",
8676
+ "delete-devices": "device",
8677
+ "stop-workspace": "device",
8678
+ "shutdown-device": "idleDevice",
8679
+ "delete-temp-leftovers": "tempLeftover",
8680
+ "stop-gradle-daemons": "gradleDaemon",
8681
+ "delete-gradle-version": "gradleVersion",
8682
+ "clear-build-dirs": "buildDirectory",
8683
+ "delete-dependencies": "dependencies"
8684
+ };
8685
+ function maintenanceItem(action, outcome) {
8686
+ const name = action.kind.replace(/^would-/, "");
8687
+ const done = outcome.status === "done";
8688
+ return {
8689
+ kind: MAINTENANCE_KINDS[name] ?? name,
8690
+ status: outcome.status,
8691
+ label: action.target,
8692
+ id: action.dir ?? action.workspace ?? null,
8693
+ bytes: done && outcome.bytes ? outcome.bytes : null,
8694
+ detail: done ? outcome.detail ? `${action.reason} (${outcome.detail})` : action.reason : outcome.detail
8695
+ };
8696
+ }
8697
+ function gcOptionsOf(opts) {
8698
+ return {
8699
+ ...opts.delete ? { delete: true } : {},
8700
+ ...opts.worktrees ? { worktrees: true } : {},
8701
+ ...opts.olderThan === void 0 ? {} : { olderThan: opts.olderThan },
8702
+ ...opts.cache === void 0 ? {} : { cache: opts.cache },
8703
+ ...opts.idle === void 0 ? {} : { idleMs: opts.idle }
8704
+ };
8705
+ }
8706
+ //#endregion
8556
8707
  //#region src/supervisor/stop-cause.ts
8557
8708
  function requestDevServerStop(root, processToken, requester) {
8558
8709
  if (!processToken) return;
@@ -8929,7 +9080,7 @@ function isOtherWorkspace(root) {
8929
9080
  function deviceLabel(device) {
8930
9081
  return `${device.kind} ${device.name} in ${device.project}`;
8931
9082
  }
8932
- async function reclaimIdleDevices({ root, dryRun, note, now, env, signal, operation }) {
9083
+ async function reclaimIdleDevices({ root, dryRun, note, record, now, env, signal, operation }) {
8933
9084
  if (deviceSweepIsScoped(env)) {
8934
9085
  note(chalk.dim(phaseLine("budget", "idle devices left alone: STIM_HOME scopes this config, devices are global")));
8935
9086
  return {
@@ -8949,7 +9100,7 @@ async function reclaimIdleDevices({ root, dryRun, note, now, env, signal, operat
8949
9100
  targets: idle.map(deviceLabel),
8950
9101
  failures: 0
8951
9102
  };
8952
- const { failures, shutDown } = await shutDownIdleDevices(idle, 0, () => collect(Date.now()), stepOutput(note), signal, operation);
9103
+ const { failures, shutDown } = await shutDownIdleDevices(idle, 0, () => collect(Date.now()), stepOutput(note, record), signal, operation);
8953
9104
  return {
8954
9105
  targets: shutDown.map(deviceLabel),
8955
9106
  failures
@@ -8960,7 +9111,7 @@ function idleSince(path, now) {
8960
9111
  const at = Date.parse(activity.lastActivityAt ?? "");
8961
9112
  return activity.state === "idle" && Number.isFinite(at) ? at : null;
8962
9113
  }
8963
- async function reclaimIdleDevServers({ root, dryRun, note, now, env, signal, operation }) {
9114
+ async function reclaimIdleDevServers({ root, dryRun, note, record, now, env, signal, operation }) {
8964
9115
  const config = loadConfig$1();
8965
9116
  const other = isOtherWorkspace(root);
8966
9117
  const serving = Object.entries(config?.projects ?? {}).flatMap(([path, project]) => {
@@ -9029,22 +9180,27 @@ async function reclaimIdleDevServers({ root, dryRun, note, now, env, signal, ope
9029
9180
  signal?.throwIfAborted();
9030
9181
  failures++;
9031
9182
  note(chalk.red(`Could not stop the dev server of ${path}: ${error?.message || error}`));
9183
+ record?.("devServer", "failed", path, { detail: error instanceof Error ? error.message : String(error) });
9032
9184
  continue;
9033
9185
  }
9034
9186
  if (!run.ran) {
9035
9187
  note(chalk.yellow(`Kept the dev server of ${path}: ${run.reasons.join("; ")}`));
9188
+ record?.("devServer", "kept", path, { detail: run.reasons.join("; ") });
9036
9189
  continue;
9037
9190
  }
9038
9191
  const stopped = run.value;
9039
9192
  if (stopped === "busy" || stopped === "starting") {
9040
9193
  const why = stopped === "busy" ? "it is no longer idle" : "a stim start holds its metro-start lock";
9041
9194
  note(chalk.dim(`Kept the dev server of ${path}: ${why}`));
9195
+ record?.("devServer", "kept", path, { detail: why });
9042
9196
  } else if (stopped.status === "stopped") {
9043
9197
  targets.push(path);
9044
9198
  note(chalk.green(`Stopped the idle dev server of ${path}`));
9199
+ record?.("devServer", "done", path);
9045
9200
  } else if ("reason" in stopped) {
9046
9201
  if (stopped.status === "stuck") failures++;
9047
9202
  note(chalk.yellow(`Kept the dev server of ${path}: ${stopped.reason}`));
9203
+ record?.("devServer", stopped.status === "stuck" ? "failed" : "kept", path, { detail: stopped.reason });
9048
9204
  }
9049
9205
  }
9050
9206
  return {
@@ -9052,7 +9208,7 @@ async function reclaimIdleDevServers({ root, dryRun, note, now, env, signal, ope
9052
9208
  failures
9053
9209
  };
9054
9210
  }
9055
- async function reclaimWorkspaceOutputs({ root, dryRun, now, note, diskRecovered, signal, operation }) {
9211
+ async function reclaimWorkspaceOutputs({ root, dryRun, now, note, record, diskRecovered, signal, operation }) {
9056
9212
  const other = isOtherWorkspace(root);
9057
9213
  const report = await collectWorkspaceOutputs({
9058
9214
  olderThan: null,
@@ -9084,7 +9240,7 @@ async function reclaimWorkspaceOutputs({ root, dryRun, now, note, diskRecovered,
9084
9240
  now,
9085
9241
  signal,
9086
9242
  operation
9087
- }, stepOutput(note));
9243
+ }, stepOutput(note, record));
9088
9244
  failures += result.failures;
9089
9245
  targets.push(...result.cleared);
9090
9246
  if (await diskRecovered()) break;
@@ -9100,23 +9256,23 @@ function cacheLabel(cache) {
9100
9256
  function trimmableCaches(env = process.env, cwd) {
9101
9257
  return planCacheEmptying(discoverCaches(env, cwd), false, env).filter((cache) => cache.prune !== "report-only" && cache.prune !== "atomic" && !cache.machineGlobal);
9102
9258
  }
9103
- async function reclaimStaleCacheEntries({ dryRun, note, env, cwd, signal }) {
9259
+ async function reclaimStaleCacheEntries({ dryRun, note, record, env, cwd, signal }) {
9104
9260
  const caches = trimmableCaches(env, cwd);
9105
9261
  if (dryRun) return {
9106
9262
  targets: caches.map(cacheLabel),
9107
9263
  failures: 0
9108
9264
  };
9109
- const { trimmed, failures } = await trimCaches(caches, 14, stepOutput(note), signal);
9265
+ const { trimmed, failures } = await trimCaches(caches, 14, stepOutput(note, record), signal);
9110
9266
  return {
9111
9267
  targets: trimmed.map(cacheLabel),
9112
9268
  failures
9113
9269
  };
9114
9270
  }
9115
- function stepOutput(note) {
9271
+ function stepOutput(note, record = () => {}) {
9116
9272
  return {
9117
9273
  log: note,
9118
9274
  error: note,
9119
- record: () => {},
9275
+ record,
9120
9276
  fail: () => {}
9121
9277
  };
9122
9278
  }
@@ -9216,6 +9372,12 @@ async function enforceBudget({ root, note, dryRun = false, budget: resolved, env
9216
9372
  const reclaimed = [];
9217
9373
  const plan = reclaimPlan(short);
9218
9374
  if (plan.length) note(chalk.yellow(phaseLine("budget", `${describeShortfall(budget, measure, short).join("; ")}; ${dryRun ? "would reclaim" : "reclaiming"}`)));
9375
+ const gcLog = dryRun ? null : openGcLog({
9376
+ trigger: "budget",
9377
+ holdKept: true,
9378
+ env
9379
+ });
9380
+ const gcResults = gcLog && createGcResults(gcLog.record);
9219
9381
  for (const step of plan) {
9220
9382
  signal?.throwIfAborted();
9221
9383
  if (!dryRun && (!overBudget(short) || DISK_ONLY.includes(step) && short.disk.length === 0)) break;
@@ -9226,6 +9388,7 @@ async function enforceBudget({ root, note, dryRun = false, budget: resolved, env
9226
9388
  env,
9227
9389
  dryRun,
9228
9390
  note,
9391
+ record: gcResults?.record,
9229
9392
  now: deps.now(),
9230
9393
  diskRecovered: async () => budgetShortfalls(budget, {
9231
9394
  volumes: await (deps.volumesAsync?.(paths) ?? deps.volumes(paths)),
@@ -9384,4 +9547,4 @@ function budgetLine(report) {
9384
9547
  return `${report.volumes.length ? `${report.volumes.map((v) => `${v.freeGb} GB free on ${v.volume}`).join(", ")} (reclaims below ${Math.max(budget.minFreeDiskGb, budget.hardFloorDiskGb)} GB, ${budget.hardFloorDiskGb ? `refuses below ${budget.hardFloorDiskGb} GB` : "never refuses"})` : "disk budget off"}; ${report.memory ? `roughly ${report.memory.committedGb} GB of a ${budget.maxCommittedMemoryGb} GB memory budget committed` : "memory budget off"}`;
9385
9548
  }
9386
9549
  //#endregion
9387
- export { includesArchives as $, bundleInvocation as $n, RELEASE_VERIFY_WAIT_MS as $t, workspaceBuildInProgress as A, reverseMetroPorts as An, findStaleDeviceRecords as At, recordFinishedBuild as B, RESOLVE_TIMEOUT_MS as Bn, bundleEntryPoint as Bt, collectIdleDevices as C, installConflictKind as Cn, discoverCaches as Cr, deleteParkedSims as Ct, idleDeviceLines as D, launchAndroidReleaseApp as Dn, deviceSweepIsScoped as Dt, collectOwnedDeviceActivityAsync as E, launchAndroidApp as En, describeUnverifiableDevices as Et, buildStatusLine as F, readRemoteSimulatorArch as Fn, deleteEasSessions as Ft, createRunRecorder as G, isEasAuthFailureText as Gn, remoteAndroidDeps as Gt, startBuildProgress as H, cacheLevel as Hn, ensureMetroReachable as Ht, bundlingActivity as I, gateMetroOrigin as In, describeError as It, recordCapacityRefusal as J, providerFromConfig as Jn, withEasProjectLock as Jt, readRunEstimates as K, loadProjectProvider as Kn, remoteIosDeps as Kt, estimateBuild as L, exitAfterFlush as Ln, withRemoteSessionGcLocks as Lt, NO_BUILD_PROGRESS as M, pickDevClientScheme as Mn, unverifiedDeviceCommand as Mt, activeBuildState as N, readBundleSchemes as Nn, withAndroidAvdSizes as Nt, parseIdleDuration as O, launchIosApp as On, eraseParkedDevices as Ot, buildReport as P, schemesFromInfoPlist as Pn, collectEasSessionSweep as Pt, emptyCaches as Q, uploadRemote as Qn, MANIFEST_VERIFY_TIMEOUT_MS as Qt, parseActiveBuild as R, processContext as Rn, REMOTE_SESSION_ERROR as Rt, withdrawDevServerStopRequest as S, installAndroidApp as Sn, readFootprints as Sr, deleteParkedAvds as St, collectOwnedDeviceActivity as T, iosAppProcess as Tn, sizeCaches as Tr, describeParkedSims as Tt, tapBuildLog as U, checkEasAuth as Un, ensureRemoteBootOwned as Ut, runFailureRecord as V, UPLOAD_TIMEOUT_MS as Vn, endRecordedSession as Vt, thrownRunFailureRecord as W, easAuthNote as Wn, readInstalledEasCliVersionAsync as Wt, recordRunStats as X, resolveEasCliBin as Xn, LAUNCH_FATAL as Xt, recordCapacityWait as Y, readProjectConfig as Yn, LAUNCH_BUNDLING as Yt, statsProjectKey$1 as Z, resolveRemote as Zn, LAUNCH_UNVERIFIED as Zt, devServerStopRecord as _, clearOtherUserApps as _n, reclaimMemory as _r, collectInventory as _t, inspectBudget as a, unverifiedLaunchLines as an, easCliUpgradeRemedy as ar, previewScopedEmptying as at, requestDevServerStop as b, ensureMetroReverse as bn, phase as br, collectParkedAvds as bt, readVolumeSpace as c, verifyReleaseLaunch as cn, GRADLE_DAEMONS_KIND as cr, trimCaches as ct, trimmableCaches as d, DEFAULT_METRO_PORT as dn, inspectWatchmanMemory as dr, deleteGradleVersions as dt, VERIFY_TIMEOUT_MS as en, remoteCliInvocation as er, includesParkedDevices as et, stopOwnedMetro as f, INSTALL_ERROR as fn, memoryCacheKind as fr, gradleVersionLines as ft, devServerStopLevel as g, appProcessFromPid as gn, memoryWorkPending as gr, getMachineCacheReport as gt, describeMetroLastStop as h, androidDevClientUrl as hn, memorySweepIsScoped as hr, waitForGradleExit as ht, enforceBudget as i, unattributedLaunchLines as in, easCliSupport as ir, planCacheEmptying as it, ACTIVE_BUILD_KEY as j, writeDebugHttpHost as jn, findStaleProjectDevices as jt, shutDownIdleDevices as k, restartedAppNote as kn, findOrphanedDevices as kt, readVolumeSpaceAsync as l, APP_READINESS_TIMEOUT_MS as ln, WATCHMAN_KIND as lr, collectGradleVersions as lt, describeDevServerStop as m, androidAppProcess as mn, memoryScope as mr, includesGradleVersions as mt, budgetLine as n, readCollectorRecords as nn, MIN_EAS_CLI_DEVICE_VERSION as nr, includesWorkspaceOutputs as nt, machineNumber as o, verifyAndroidReleaseLaunch as on, ownedSessionName as or, selectCaches as ot, stopOwnedMetroForReset as p, IOS_DEV_MENU_OFF_DEFAULTS_PLIST as pn, memoryLines as pr, gradleVersionsPending as pt, readStats$1 as q, ownerFromConfig as qn, resolveRemoteContext as qt, cacheLabel as r, readMetroRecords as rn, MIN_EAS_CLI_SIMULATOR_VERSION as rr, isWorkspacesScope as rt, peekBudget as s, verifyLaunch as sn, parseArchiveSelector as sr, selectsBeyondCaches as st, budgetGate as t, isBundleProof as tn, remoteCommand as tr, includesRecordings as tt, resolveBudget as u, ADB_INSTALL_TIMEOUT_MS as un, collectMemoryReport as ur, deleteGradleVersion as ut, logVanishedSupervisor as v, devClientUrl as vn, scopedMemoryReport as vr, DEVICE_LIST_TIMEOUT_MS$1 as vt, collectIdleDevicesAsync as w, installIosApp as wn, pruneCache as wr, deleteProjectDevices as wt, vanishedSupervisorMessage as x, hasMetroReverse as xn, attributeMachineUsage as xr, collectParkedSims as xt, metroLastStop as y, deviceShellArg as yn, stopIdleGradleDaemons as yr, collectDeviceLeases as yt, recordBuildPhase as z, runProcessOperation as zn, binOnPath as zt };
9550
+ export { recordCapacityWait as $, readProjectConfig as $n, LAUNCH_BUNDLING as $t, collectOwnedDeviceActivityAsync as A, launchAndroidApp as An, describeUnverifiableDevices as At, bundlingActivity as B, gateMetroOrigin as Bn, describeError as Bt, gcOptionsOf as C, deviceShellArg as Cn, stopIdleGradleDaemons as Cr, collectDeviceLeases as Ct, collectIdleDevices as D, installConflictKind as Dn, discoverCaches as Dr, deleteParkedSims as Dt, maintenanceLogger as E, installAndroidApp as En, readFootprints as Er, deleteParkedAvds as Et, ACTIVE_BUILD_KEY as F, writeDebugHttpHost as Fn, findStaleProjectDevices as Ft, runFailureRecord as G, UPLOAD_TIMEOUT_MS as Gn, endRecordedSession as Gt, parseActiveBuild as H, processContext as Hn, REMOTE_SESSION_ERROR as Ht, NO_BUILD_PROGRESS as I, pickDevClientScheme as In, unverifiedDeviceCommand as It, thrownRunFailureRecord as J, easAuthNote as Jn, readInstalledEasCliVersionAsync as Jt, startBuildProgress as K, cacheLevel as Kn, ensureMetroReachable as Kt, activeBuildState as L, readBundleSchemes as Ln, withAndroidAvdSizes as Lt, parseIdleDuration as M, launchIosApp as Mn, eraseParkedDevices as Mt, shutDownIdleDevices as N, restartedAppNote as Nn, findOrphanedDevices as Nt, collectIdleDevicesAsync as O, installIosApp as On, pruneCache as Or, deleteProjectDevices as Ot, workspaceBuildInProgress as P, reverseMetroPorts as Pn, findStaleDeviceRecords as Pt, recordCapacityRefusal as Q, providerFromConfig as Qn, withEasProjectLock as Qt, buildReport as R, schemesFromInfoPlist as Rn, collectEasSessionSweep as Rt, withdrawDevServerStopRequest as S, devClientUrl as Sn, scopedMemoryReport as Sr, DEVICE_LIST_TIMEOUT_MS$1 as St, openGcLog as T, hasMetroReverse as Tn, attributeMachineUsage as Tr, collectParkedSims as Tt, recordBuildPhase as U, runProcessOperation as Un, binOnPath as Ut, estimateBuild as V, exitAfterFlush as Vn, withRemoteSessionGcLocks as Vt, recordFinishedBuild as W, RESOLVE_TIMEOUT_MS as Wn, bundleEntryPoint as Wt, readRunEstimates as X, loadProjectProvider as Xn, remoteIosDeps as Xt, createRunRecorder as Y, isEasAuthFailureText as Yn, remoteAndroidDeps as Yt, readStats$1 as Z, ownerFromConfig as Zn, resolveRemoteContext as Zt, devServerStopRecord as _, IOS_DEV_MENU_OFF_DEFAULTS_PLIST as _n, memoryLines as _r, gradleVersionsPending as _t, inspectBudget as a, isBundleProof as an, remoteCommand as ar, includesRecordings as at, requestDevServerStop as b, appProcessFromPid as bn, memoryWorkPending as br, getMachineCacheReport as bt, readVolumeSpace as c, unattributedLaunchLines as cn, easCliSupport as cr, planCacheEmptying as ct, trimmableCaches as d, verifyLaunch as dn, parseArchiveSelector as dr, selectsBeyondCaches as dt, LAUNCH_FATAL as en, resolveEasCliBin as er, recordRunStats as et, stopOwnedMetro as f, verifyReleaseLaunch as fn, GRADLE_DAEMONS_KIND as fr, trimCaches as ft, devServerStopLevel as g, INSTALL_ERROR as gn, memoryCacheKind as gr, gradleVersionLines as gt, describeMetroLastStop as h, DEFAULT_METRO_PORT as hn, inspectWatchmanMemory as hr, deleteGradleVersions as ht, enforceBudget as i, VERIFY_TIMEOUT_MS as in, remoteCliInvocation as ir, includesParkedDevices as it, idleDeviceLines as j, launchAndroidReleaseApp as jn, deviceSweepIsScoped as jt, collectOwnedDeviceActivity as k, iosAppProcess as kn, sizeCaches as kr, describeParkedSims as kt, readVolumeSpaceAsync as l, unverifiedLaunchLines as ln, easCliUpgradeRemedy as lr, previewScopedEmptying as lt, describeDevServerStop as m, ADB_INSTALL_TIMEOUT_MS as mn, collectMemoryReport as mr, deleteGradleVersion as mt, budgetLine as n, MANIFEST_VERIFY_TIMEOUT_MS as nn, uploadRemote as nr, emptyCaches as nt, machineNumber as o, readCollectorRecords as on, MIN_EAS_CLI_DEVICE_VERSION as or, includesWorkspaceOutputs as ot, stopOwnedMetroForReset as p, APP_READINESS_TIMEOUT_MS as pn, WATCHMAN_KIND as pr, collectGradleVersions as pt, tapBuildLog as q, checkEasAuth as qn, ensureRemoteBootOwned as qt, cacheLabel as r, RELEASE_VERIFY_WAIT_MS as rn, bundleInvocation as rr, includesArchives as rt, peekBudget as s, readMetroRecords as sn, MIN_EAS_CLI_SIMULATOR_VERSION as sr, isWorkspacesScope as st, budgetGate as t, LAUNCH_UNVERIFIED as tn, resolveRemote as tr, statsProjectKey$1 as tt, resolveBudget as u, verifyAndroidReleaseLaunch as un, ownedSessionName as ur, selectCaches as ut, logVanishedSupervisor as v, androidAppProcess as vn, memoryScope as vr, includesGradleVersions as vt, maintenanceItem as w, ensureMetroReverse as wn, phase as wr, collectParkedAvds as wt, vanishedSupervisorMessage as x, clearOtherUserApps as xn, reclaimMemory as xr, collectInventory as xt, metroLastStop as y, androidDevClientUrl as yn, memorySweepIsScoped as yr, waitForGradleExit as yt, buildStatusLine as z, readRemoteSimulatorArch as zn, deleteEasSessions as zt };
@@ -1,32 +1,33 @@
1
1
  import { c as throwIfCancelled, s as cancelledError, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
- import { d as workspaceDir, m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
3
- import { E as upsertProject, O as withConfigLockAsync, p as getProject, u as getConcurrencyLimits } from "./config-BZhXY15H.mjs";
4
- import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
5
- import { a as recordWorkspaceUseAsync } from "./workspace-state-CPSp3mav.mjs";
6
- import { K as resolveCacheProviderConfig, Y as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY } from "./settings-B5tCoq9N.mjs";
7
- import { f as projectRegistry, v as detectIsExpo } from "./project-BiC68mIp.mjs";
8
- import { s as workspaceShareURL } from "./stim-desktop-DS0mzR8U.mjs";
9
- import { k as hostSystemImageArch } from "./android-Cjcj8MCw.mjs";
2
+ import { E as workspaceDir, a as recordWorkspaceUseAsync, k as workspaceLogsDir } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { E as upsertProject, O as withConfigLockAsync, p as getProject, u as getConcurrencyLimits } from "./config-BktkY_zC.mjs";
4
+ import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
+ import { K as resolveCacheProviderConfig, Y as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY } from "./settings-CosW5X-S.mjs";
6
+ import { f as projectRegistry, v as detectIsExpo } from "./project-BUu6Is4k.mjs";
7
+ import { s as workspaceShareURL } from "./stim-desktop-6Dqp-gjX.mjs";
8
+ import { k as hostSystemImageArch } from "./android-DTAcRwBC.mjs";
10
9
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
11
- import { B as recordFinishedBuild, G as createRunRecorder, H as startBuildProgress, K as readRunEstimates, Qn as uploadRemote, U as tapBuildLog, Un as checkEasAuth, X as recordRunStats, Z as statsProjectKey, Zn as resolveRemote } from "./budget-HyShrIpL.mjs";
12
- import { d as runCancellationSignal, f as withNativeBuildRun } from "./native-run-D5OJsGwA.mjs";
13
- import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-C9w4aeXF.mjs";
14
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-BpjwrQXU.mjs";
15
- import { _ as providerUploadOutcome, x as storedAppId } from "./build-cache-CKCzxzxA.mjs";
16
- import { m as listIosRuntimes } from "./ios-BQzvJlzw.mjs";
10
+ import { K as startBuildProgress, W as recordFinishedBuild, X as readRunEstimates, Y as createRunRecorder, et as recordRunStats, nr as uploadRemote, q as tapBuildLog, qn as checkEasAuth, tr as resolveRemote, tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
11
+ import { d as runCancellationSignal, f as withNativeBuildRun } from "./native-run-BfIDFKLH.mjs";
12
+ import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-g2lhdBXF.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-Lnb_EoRY.mjs";
14
+ import { b as providerUploadOutcome, w as storedAppId } from "./build-cache-DrXNCy3T.mjs";
15
+ import { m as listIosRuntimes } from "./ios-WxpDJ5T1.mjs";
17
16
  import { d as optimizationBuildProfile, l as artifactCachePolicy } from "./errors-DHm_U5gv.mjs";
18
- import { p as readBundleId } from "./xcode-CiIIDnuD.mjs";
19
- import { S as setRemoteLogSink } from "./client-BQsmyp_-.mjs";
20
- import { c as resolveBuildPlacement } from "./selection-D5cxEl3t.mjs";
21
- import { c as iosProjectPathError, g as resolveIosBuildSetup, m as resolveConfiguration, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-qKcbgmI5.mjs";
22
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-B9w_Qyz3.mjs";
23
- import { t as acquireAndroidArtifact } from "./artifact-Co8zixVx.mjs";
24
- import { a as persistLastBuild, l as resolveAndroidBuildPlan, n as finishAndroidUpload } from "./result-CR2vk2cj.mjs";
25
- import { a as lastBuildRecord } from "./ios-project-DCUDo06I.mjs";
26
- import { t as acquireIosArtifact } from "./artifact-DN8JNwqS.mjs";
17
+ import { V as readBundleId } from "./toolchain-J4J8MrAr.mjs";
18
+ import { S as setRemoteLogSink } from "./client-D9CaRks-.mjs";
19
+ import { l as resolveBuildPlacement } from "./selection-BNPBZ6T5.mjs";
20
+ import { c as iosProjectPathError, g as resolveIosBuildSetup, m as resolveConfiguration, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-CVOCp0Ft.mjs";
21
+ import { f as settleFingerprintCheck } from "./prebuild-gmouvmJZ.mjs";
22
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-Dq3RBcON.mjs";
23
+ import { t as acquireAndroidArtifact } from "./artifact-BxREhAaV.mjs";
24
+ import { a as persistLastBuild, l as resolveAndroidBuildPlan, n as finishAndroidUpload } from "./result-7F5hEwQJ.mjs";
25
+ import { a as lastBuildRecord } from "./ios-project-Ty5pHl9O.mjs";
26
+ import { t as acquireIosArtifact } from "./artifact-CsAP6AGK.mjs";
27
27
  import { constants, promises } from "node:fs";
28
28
  import { basename, join } from "node:path";
29
29
  import { hostSimulatorArch } from "@stim-cli/core";
30
+ import chalk from "chalk";
30
31
  import { loadCacheProvider } from "@stim-cli/cache";
31
32
  //#region src/commands/android/build.ts
32
33
  async function buildAndroidOperation(context, root, options, { artifactScope, cachePolicy } = {}) {
@@ -200,6 +201,7 @@ async function buildAndroidOperation(context, root, options, { artifactScope, ca
200
201
  await finishAndroidUpload(artifact.uploadPending, artifact.remote, phase);
201
202
  const uploaded = providerUploadOutcome(artifact.providerUpload ? await artifact.providerUpload : null, artifact.providerName, context.env);
202
203
  if (uploaded) phase("cache", uploaded.line);
204
+ await settleFingerprintCheck(artifact.fingerprintCheck, "android", (line) => phase("fingerprint", chalk.yellow(line)), (entry) => writer.write(entry));
203
205
  const links = { workspace: await workspaceShareURL(root, { platform: "android" }, runCancellationSignal(context) ?? context.signal) };
204
206
  throwIfCancelled(runCancellationSignal(context), "Android build");
205
207
  record.appPath = apkPath;
@@ -482,6 +484,7 @@ async function buildIosOperation(context, root, options) {
482
484
  });
483
485
  throw failure;
484
486
  } finally {
487
+ artifact?.cancelFingerprintCheck();
485
488
  await artifact?.release();
486
489
  failureAfterCleanup = built && runCancellationSignal(context)?.aborted ? cancelledError("iOS build") : null;
487
490
  if (failureAfterCleanup) {