stim 1.23.1 → 1.24.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 (169) hide show
  1. package/README.md +3 -2
  2. package/dist/{acquire-artifact-BzYRDgaP.mjs → acquire-artifact-CEs02U2o.mjs} +2 -2
  3. package/dist/{act-vxiMwdf5.mjs → act-Cyvm8xYc.mjs} +40 -25
  4. package/dist/{activity-BpWUPgUm.mjs → activity-Dq3ZcdD8.mjs} +6 -6
  5. package/dist/{agent-device-usage-output-CUlLsbRt.mjs → agent-device-usage-output-CccomeE0.mjs} +5 -5
  6. package/dist/{android-C7sVmyI9.mjs → android-882m4hxX.mjs} +140 -46
  7. package/dist/{android-DtfRGLcc.mjs → android-BZppyPe_.mjs} +66 -46
  8. package/dist/{android-DR5lZ2Az.mjs → android-CX5IcRuf.mjs} +13 -3
  9. package/dist/{android-CLi6DSiS.mjs → android-DcztblCT.mjs} +5 -5
  10. package/dist/{android-cas-ngferVq2.mjs → android-cas-BtCOrNqb.mjs} +3 -3
  11. package/dist/android-cas-compiler.mjs +1 -1
  12. package/dist/api.d.mts +21 -4
  13. package/dist/api.mjs +32 -31
  14. package/dist/{artifact-Xvgibgzq.mjs → artifact-BR5VNArK.mjs} +17 -16
  15. package/dist/{artifact-DBI3DALs.mjs → artifact-Bdt_n9Jc.mjs} +17 -16
  16. package/dist/{artifact-platform-CXcmX_j3.mjs → artifact-platform-CMRc0M_r.mjs} +3 -3
  17. package/dist/{browser-web-BJN9ZHxB.mjs → browser-web-ycg9qWB8.mjs} +16 -17
  18. package/dist/{budget-3ivAK99e.mjs → budget-dPGuhNai.mjs} +101 -40
  19. package/dist/{build-Dv9s8Fz-.mjs → build-CaF574eS.mjs} +31 -28
  20. package/dist/{build-cache-Dv7RN200.mjs → build-cache-HFUQ9eLz.mjs} +152 -19
  21. package/dist/{build-plan-BmbdHQbr.mjs → build-plan-JsDUq4w1.mjs} +8 -7
  22. package/dist/{cache-manifest-DSeQjt-Q.mjs → cache-manifest-BPXRONJz.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{ccache-CH2EWGPB.mjs → ccache-CCn1S6qG.mjs} +6 -6
  25. package/dist/{cdp-3fwICjzi.mjs → cdp-BG3FJCCx.mjs} +1 -1
  26. package/dist/{chrome-Bbw689-6.mjs → chrome-BvV8ssI3.mjs} +1 -1
  27. package/dist/{cli-BkK6Wr5i.mjs → cli-xqAidP7O.mjs} +20 -20
  28. package/dist/cli.mjs +1 -1
  29. package/dist/{client-B4MMzfo_.mjs → client-18-ZowoT.mjs} +254 -28
  30. package/dist/collector-run.mjs +6 -6
  31. package/dist/{command-output-YKGWivpG.mjs → command-output-DxC0k2rk.mjs} +3 -2
  32. package/dist/{config-DlrsduwG.mjs → config-BZhXY15H.mjs} +3 -3
  33. package/dist/{created-devices-x9rN6bhs.mjs → created-devices-D2Aca-xu.mjs} +6 -2
  34. package/dist/{dependency-state-1I9KZT1Y.mjs → dependency-state-C56ll9hY.mjs} +2 -2
  35. package/dist/{detached-entry-BwNEtIrP.mjs → detached-entry-KmieOKgN.mjs} +1 -1
  36. package/dist/{dev-client-BFxiDpkf.mjs → dev-client-w_fok0Ek.mjs} +3 -3
  37. package/dist/{device-B7ljwccX.mjs → device-4RUugw5X.mjs} +16 -16
  38. package/dist/{device-CiNYxqp6.mjs → device-BktRGdjS.mjs} +40 -44
  39. package/dist/{device-capacity-DH0QsZYZ.mjs → device-capacity-Ic-kdmEV.mjs} +20 -16
  40. package/dist/device-host-worker.mjs +17 -17
  41. package/dist/{device-ios-CbVDtDIy.mjs → device-ios-DzpSlZyd.mjs} +23 -52
  42. package/dist/{device-lease-run-DXPSwdbb.mjs → device-lease-run-DUtkbqBQ.mjs} +5 -5
  43. package/dist/{device-pool-B4iOXIrD.mjs → device-pool-CgBHk401.mjs} +3 -3
  44. package/dist/{doctor-DRu-8ld6.mjs → doctor-BZ6oxNum.mjs} +1 -1
  45. package/dist/{doctor-HUC1igzw.mjs → doctor-C33AzVfR.mjs} +28 -28
  46. package/dist/{doctor-C6t4Maue.mjs → doctor-DZgpqR6J.mjs} +14 -14
  47. package/dist/{doctor-fingerprint-DZLoYFVb.mjs → doctor-fingerprint-zlujA1Gs.mjs} +1 -1
  48. package/dist/doctor-fingerprint.mjs +1 -1
  49. package/dist/{doctor-watchman-iGBpC6KM.mjs → doctor-watchman-B453A231.mjs} +5 -5
  50. package/dist/{eas-build-DMWSSvxq.mjs → eas-build-CxKUNHsb.mjs} +4 -4
  51. package/dist/{eas-fallback-vKlrqxgE.mjs → eas-fallback-LMxk9Kw0.mjs} +14 -14
  52. package/dist/{eas-session-ledger-BQF9Yyy9.mjs → eas-session-ledger-Ck6YXPAO.mjs} +12 -8
  53. package/dist/{error-diagnostics-DYsjJIHz.mjs → error-diagnostics-BkKCZq4P.mjs} +17 -42
  54. package/dist/{exec-DEoAhcze.mjs → exec-VFRpu1iA.mjs} +116 -28
  55. package/dist/{gc-dDE4QPVu.mjs → gc-DDWEAj0w.mjs} +2 -2
  56. package/dist/{gc-BW8E1uSC.mjs → gc-yVKpAOKM.mjs} +205 -28
  57. package/dist/{guide-DYYEO3Wz.mjs → guide-Bggftwc5.mjs} +222 -59
  58. package/dist/{hosted-android-xcfgCgSF.mjs → hosted-android-D4dweBof.mjs} +4 -4
  59. package/dist/{hosted-client-Bt-tndxV.mjs → hosted-client-BBTVe3X6.mjs} +4 -4
  60. package/dist/{hosted-ios-y19jCYFF.mjs → hosted-ios-Sn0djzg8.mjs} +1 -1
  61. package/dist/{hosted-logs-DzJKzKlj.mjs → hosted-logs-CYIZ5ubJ.mjs} +11 -6
  62. package/dist/{hosted-macos-BJusKvqL.mjs → hosted-macos-CXjsUNBR.mjs} +7 -7
  63. package/dist/{hosted-native-BmQC6U_x.mjs → hosted-native-Doxbfzem.mjs} +58 -11
  64. package/dist/{idle-shutdown-CJmUOV5x.mjs → idle-shutdown-BInjLKqm.mjs} +10 -10
  65. package/dist/{ios-CWjqfSm_.mjs → ios-B1FXRCMX.mjs} +71 -44
  66. package/dist/{ios-DTOYZGMJ.mjs → ios-BItP6lkn.mjs} +8 -8
  67. package/dist/{ios-hcBpnEGk.mjs → ios-CVUFFZ6C.mjs} +70 -13
  68. package/dist/{ios-xtlRHaeB.mjs → ios-ENC4sRPA.mjs} +1 -1
  69. package/dist/{ios-device-BXZ0c7Kb.mjs → ios-device-B6HK951C.mjs} +1 -1
  70. package/dist/{ios-device-DFGuwF4U.mjs → ios-device-BI38NFFH.mjs} +3 -3
  71. package/dist/{ios-project-CSZYI1iu.mjs → ios-project-KYqeJURj.mjs} +5 -5
  72. package/dist/{ios-signing-BtAffm0A.mjs → ios-signing-4c_qXvQm.mjs} +2 -2
  73. package/dist/{ios-state-Dtw5K2aI.mjs → ios-state-DlElquYD.mjs} +15 -7
  74. package/dist/{js-swap-BSBHldmm.mjs → js-swap-BvrQvXHY.mjs} +7 -6
  75. package/dist/{launch-CP2wDCVd.mjs → launch-BVlyQw3T.mjs} +51 -49
  76. package/dist/{launch-D-zq8SHG.mjs → launch-SfzGH_s9.mjs} +48 -29
  77. package/dist/{logs-pNvA2hHK.mjs → logs-DXE32kyb.mjs} +16 -9
  78. package/dist/{logs-By5aw3g9.mjs → logs-ovlU7m7N.mjs} +8 -6
  79. package/dist/{macos-CPMahOC2.mjs → macos-B3BveDrU.mjs} +1 -1
  80. package/dist/{macos-C67FZ2ft.mjs → macos-CCfhb-jT.mjs} +49 -42
  81. package/dist/macos-run.mjs +1 -1
  82. package/dist/maintenance-run.mjs +7 -7
  83. package/dist/{metro-DiXtA3Ty.mjs → metro-Bu8LBfzS.mjs} +4 -4
  84. package/dist/{metro-gateway-CKZqKqx7.mjs → metro-gateway-DtsOy-0P.mjs} +3 -4
  85. package/dist/{named-ports-DkEzOfzO.mjs → named-ports-BWDuU5oQ.mjs} +3 -3
  86. package/dist/{native-android-_MWSs3PP.mjs → native-android-96BBizbq.mjs} +17 -17
  87. package/dist/{native-gradle-artifact-inputs-DHFnmrVf.mjs → native-gradle-artifact-inputs-BcLYBZil.mjs} +5 -5
  88. package/dist/{native-run-Dv88i0aU.mjs → native-run-BmH7U8pr.mjs} +6 -6
  89. package/dist/{native-runtime-DBRfY_PN.mjs → native-runtime-DgtJkzIa.mjs} +10 -9
  90. package/dist/{native-source-Y0yLhFyQ.mjs → native-source-D-4Dh4JU.mjs} +7 -4
  91. package/dist/{native-xcode-inputs-CqViUh3r.mjs → native-xcode-inputs-irplbQb0.mjs} +2 -2
  92. package/dist/{native-xcode-ios-vFgqL_yS.mjs → native-xcode-ios-BY-6hh6M.mjs} +18 -18
  93. package/dist/offload-worker.d.mts +7 -2
  94. package/dist/offload-worker.mjs +75 -41
  95. package/dist/{operation-exec-BW0em61G.mjs → operation-exec-CUZifp6Z.mjs} +2 -25
  96. package/dist/{ownership-C5fo5Edb.mjs → ownership-DxlZGDcV.mjs} +3 -3
  97. package/dist/{page-DBL2PiUU.mjs → page-CzEA_-5_.mjs} +2 -3
  98. package/dist/phone-reverses-BdsdesVF.mjs +57 -0
  99. package/dist/{placement-log-BnGgJRRZ.mjs → placement-log-DUvqqsB-.mjs} +1 -1
  100. package/dist/{plan-placement-cr0fEU7b.mjs → plan-placement-4axc0Hs7.mjs} +3 -3
  101. package/dist/{ports-DpXjKkSV.mjs → ports-D-E_OiAO.mjs} +3 -3
  102. package/dist/{prebuild-BligW0QS.mjs → prebuild-DmVCf5xb.mjs} +14 -9
  103. package/dist/{project-DhCtQWWU.mjs → project-Dz-hWkb-.mjs} +21 -17
  104. package/dist/{pull-request-W1IuLXDt.mjs → pull-request-CbNlkFok.mjs} +2 -2
  105. package/dist/pull-requests.mjs +1 -1
  106. package/dist/{react-native-android-ZlhQfhvq.mjs → react-native-android-DOinxgwB.mjs} +75 -32
  107. package/dist/{react-native-build-CelbTO_y.mjs → react-native-build-AuCu-aAP.mjs} +22 -19
  108. package/dist/{react-native-doctor-LTIaP7lv.mjs → react-native-doctor-2ivJUmwZ.mjs} +10 -9
  109. package/dist/{react-native-ios-C5W0SA6f.mjs → react-native-ios-D5zTIuH8.mjs} +38 -22
  110. package/dist/{recordings-CQmfzAh7.mjs → recordings-CdPwYwvs.mjs} +1 -1
  111. package/dist/{registration-BcRgF6Ox.mjs → registration-CN6nlhcD.mjs} +1 -1
  112. package/dist/{reload-COJWTbae.mjs → reload-C1TTVesC.mjs} +144 -42
  113. package/dist/{reload-QcwnYLYV.mjs → reload-Ck9RJeSq.mjs} +1 -1
  114. package/dist/{remote-DR8qUERM.mjs → remote-DEZ7AOVq.mjs} +7 -7
  115. package/dist/{result-utnBea7x.mjs → result-DqBrb12U.mjs} +40 -17
  116. package/dist/{run-DidHghD1.mjs → run-BIwoU44q.mjs} +2 -2
  117. package/dist/{selection-DSMbWEX2.mjs → selection-BLtvaqxc.mjs} +11 -5
  118. package/dist/{server-bare-CafzuyFB.mjs → server-bare-Z1ToVLPn.mjs} +2 -2
  119. package/dist/{server-command-B9o92sLM.mjs → server-command-C0pmjNdG.mjs} +5 -5
  120. package/dist/server-expo-CEntXzRw.mjs +2 -0
  121. package/dist/{server-expo-BXrWxNYh.mjs → server-expo-Tt_hLRpy.mjs} +8 -5
  122. package/dist/{settings-C7O8A6ZI.mjs → settings-RKwY33wv.mjs} +114 -19
  123. package/dist/{settings-PfJx8uK1.mjs → settings-kkt0vP4w.mjs} +1 -1
  124. package/dist/{settings-write-Chuy7Cte.mjs → settings-write--gj6MACV.mjs} +7 -7
  125. package/dist/settings.schema.json +13 -0
  126. package/dist/{simslim-BNckWpXi.mjs → simslim-CdWKT3vA.mjs} +2 -2
  127. package/dist/{slot-launch-B7AuoWJv.mjs → slot-launch-A1BgotaM.mjs} +6 -6
  128. package/dist/{stage-C4u17aES.mjs → stage-ERTMh88n.mjs} +2 -3
  129. package/dist/{start-CU8mCPC7.mjs → start-BKGrEhzG.mjs} +75 -35
  130. package/dist/{start-BL_BsiWt.mjs → start-Bmg_qmHi.mjs} +1 -1
  131. package/dist/{state--smjFSTL.mjs → state-B1ig0Kqy.mjs} +4 -4
  132. package/dist/{state-08I3hw3_.mjs → state-BfAltYJP.mjs} +2 -2
  133. package/dist/{stats-CO6sK0Nh.mjs → stats-B-ckuiUg.mjs} +5 -5
  134. package/dist/{stats-report-BzaPrRm6.mjs → stats-report-n2U5plhk.mjs} +1 -1
  135. package/dist/{status-_WPHzVft.mjs → status-DfFp6a76.mjs} +24 -24
  136. package/dist/{status-BRROykC8.mjs → status-Fect2w9R.mjs} +1 -1
  137. package/dist/{status-CrJutl6-.mjs → status-Pw-807f0.mjs} +1 -1
  138. package/dist/{status-watch-BHFasOZN.mjs → status-watch-XC7F-AMf.mjs} +5 -5
  139. package/dist/status-worker.mjs +1 -1
  140. package/dist/stim-clonefile.c +18 -0
  141. package/dist/{stim-desktop-D5OGpYZM.mjs → stim-desktop-DS0mzR8U.mjs} +2 -2
  142. package/dist/{stop-iuFHjUST.mjs → stop-BFu7X_Do.mjs} +2 -2
  143. package/dist/{stop-BJ06ipTZ.mjs → stop-CL1kDHds.mjs} +55 -21
  144. package/dist/{stop-CR5689oB.mjs → stop-DhclRwOO.mjs} +5 -5
  145. package/dist/supervisor-run.mjs +16 -16
  146. package/dist/{support-TWuQlHQo.mjs → support-B1W-hmC2.mjs} +8 -8
  147. package/dist/{support-CbXPbUMJ.mjs → support-B3tzVhKn.mjs} +6 -6
  148. package/dist/{swiftpm-artifact-inputs-DFcGsXDP.mjs → swiftpm-artifact-inputs-BWYPj9Sn.mjs} +4 -4
  149. package/dist/{swiftpm-macos-DbwGCpZg.mjs → swiftpm-macos-BVCP5mO4.mjs} +14 -13
  150. package/dist/{toolchain-XkA2PfJZ.mjs → toolchain-BjgKdoEf.mjs} +1 -1
  151. package/dist/{toolchain-B9hCFCQw.mjs → toolchain-D3bmRMia.mjs} +57 -36
  152. package/dist/trigger-BLsHgAGR.mjs +2 -0
  153. package/dist/{trigger-Cbyc41d_.mjs → trigger-CBMe2YLH.mjs} +2 -2
  154. package/dist/{warm-progress-CA3TgT3-.mjs → warm-progress-ol0ZypEu.mjs} +6 -6
  155. package/dist/{web-DRF_oFXk.mjs → web-BH7peScT.mjs} +12 -10
  156. package/dist/web-BdOFlTJr.mjs +2 -0
  157. package/dist/web-run.mjs +8 -9
  158. package/dist/windows-report.mjs +12 -1
  159. package/dist/windows-report.ps1 +1 -1
  160. package/dist/{workspace-state-U08dEzhG.mjs → workspace-state-CeBpIZgr.mjs} +11 -4
  161. package/dist/{workspaces-e41xsjKr.mjs → workspaces-CSV2Orf4.mjs} +36 -32
  162. package/dist/{worktree-BEwxVwKF.mjs → worktree-DEDUzO_L.mjs} +1 -1
  163. package/dist/{worktree-B4Nj3EGS.mjs → worktree-Dw8kfacb.mjs} +324 -99
  164. package/dist/{xcode-Rq744mBF.mjs → xcode-DHu41qQ4.mjs} +41 -27
  165. package/package.json +7 -7
  166. package/dist/native-gradle-inputs-Dnh84Zbd.mjs +0 -211
  167. package/dist/server-expo-Ddr8cG_c.mjs +0 -2
  168. package/dist/trigger-yb_nFzPF.mjs +0 -2
  169. package/dist/web-kDE9Myoy.mjs +0 -2
@@ -1,40 +1,40 @@
1
- import { t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
1
+ import { D as ownership_claim_exports, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { m as workspaceLogsDir$1, t as emulatorLogFile } from "./paths-DQtTgsBf.mjs";
3
- import { B as deviceSlotFileKey, E as upsertProject, H as deviceSlotPlatforms, W as parseDeviceSlotOption, p as getProject, q as validateDeviceSlot, u as getConcurrencyLimits } from "./config-DlrsduwG.mjs";
4
- import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
- import { d as writeWorkspaceState, i as recordWorkspaceUse, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
6
- import { G as resolveCacheProviderConfig, H as remoteEasFallbackSetting, J as resolveProjectSettingsAsync, L as projectSettingsContextAsync, N as metroWarmupUrlSetting, R as publicUrlSetting, Y as resolveSettings, a as SETTING_SHAPE_REMEDY, ct as detectProviders, g as deviceReclaimIdleMinutesSetting, j as metroPortSetting, rt as tunnelModeSetting } from "./settings-C7O8A6ZI.mjs";
7
- import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunch } from "./project-DhCtQWWU.mjs";
3
+ import { B as deviceSlotFileKey, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync$1, W as parseDeviceSlotOption, p as getProject, q as validateDeviceSlot, u as getConcurrencyLimits } from "./config-BZhXY15H.mjs";
4
+ import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
5
+ import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
6
+ import { G as resolveCacheProviderConfig, H as remoteEasFallbackSetting, J as resolveProjectSettingsAsync, L as projectSettingsContextAsync, N as metroWarmupUrlSetting, R as publicUrlSetting, Y as resolveSettings, a as SETTING_SHAPE_REMEDY, ct as detectProviders, g as deviceReclaimIdleMinutesSetting, j as metroPortSetting, rt as tunnelModeSetting } from "./settings-RKwY33wv.mjs";
7
+ import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-Dz-hWkb-.mjs";
8
+ import { A as listAdbDevices, I as listInstalledSystemImages, St as configuredAndroidEmulatorApp, Y as physicalDeviceModel, Z as probeEmulatorSerial, a as androidDeviceAbi, ct as waitForBoot, nt as resolveOwnedAvdSerialAsync, rt as resolvePhysicalDevice } from "./android-882m4hxX.mjs";
9
+ import { c as pidExists, d as resolveProjectMetro } from "./metro-Bu8LBfzS.mjs";
8
10
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
9
- import { c as pidExists, d as resolveProjectMetro } from "./metro-DiXtA3Ty.mjs";
10
- import { Bn as checkEasAuth, Bt as ensureMetroReachable, Cn as launchAndroidApp, Gt as resolveRemoteContext, H as tapBuildLog, In as runProcessOperation, J as recordRunStats, Jn as resolveRemote, K as recordCapacityRefusal, Lt as binOnPath, M as NO_BUILD_PROGRESS, Pn as exitAfterFlush, U as createRunRecorder, Ut as remoteAndroidDeps, V as startBuildProgress, Vt as ensureRemoteBootOwned, W as readRunEstimates, Y as statsProjectKey$1, Yn as uploadRemote, cn as DEFAULT_METRO_PORT, in as verifyLaunch, qn as resolveEasCliBin, rn as verifyAndroidReleaseLaunch, rr as ownedSessionName, sn as ADB_INSTALL_TIMEOUT_MS, t as budgetGate, wn as launchAndroidReleaseApp, yn as installAndroidApp } from "./budget-3ivAK99e.mjs";
11
- import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-Dv88i0aU.mjs";
12
- import { I as acquireBuildSlot, R as releaseBuildSlot } from "./workspaces-e41xsjKr.mjs";
13
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-BpWUPgUm.mjs";
14
- import { A as listAdbDevices, I as listInstalledSystemImages, Y as physicalDeviceModel, Z as probeEmulatorSerial, a as androidDeviceAbi, ct as configuredAndroidEmulatorApp, et as resolveOwnedAvdSerialAsync, ot as waitForBoot, tt as resolvePhysicalDevice } from "./android-C7sVmyI9.mjs";
15
- import { t as CCACHE_NOT_RUN } from "./ccache-CH2EWGPB.mjs";
16
- import { h as setRemoteLogSink } from "./client-B4MMzfo_.mjs";
17
- import { i as parseBuildMachineOption, s as resolveBuildPlacement } from "./selection-DSMbWEX2.mjs";
18
- import { r as hostedMetroSettings } from "./metro-gateway-CKZqKqx7.mjs";
19
- import { a as writeHostedAndroid, i as writeDevicePlacement, t as readHostedAndroid } from "./ios-state-Dtw5K2aI.mjs";
20
- import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-xcfgCgSF.mjs";
21
- import { n as verifyCollectorOwnership } from "./ownership-C5fo5Edb.mjs";
22
- import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-B7AuoWJv.mjs";
23
- import { c as startDevServer } from "./start-CU8mCPC7.mjs";
24
- import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-DXPSwdbb.mjs";
25
- import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-DH0QsZYZ.mjs";
26
- import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-DMWSSvxq.mjs";
27
- import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-DBRfY_PN.mjs";
28
- import { n as devicePlacementRecord } from "./placement-log-BnGgJRRZ.mjs";
29
- import { S as pooledAndroidDevice, a as PLATFORM, b as noDeviceDiagnostic, g as dumpApkManifest, h as displayPath, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme } from "./support-CbXPbUMJ.mjs";
30
- import { t as acquireAndroidArtifact } from "./artifact-Xvgibgzq.mjs";
31
- import { a as reportAndroidResult, c as resolveAndroidRunPlan, i as persistLastBuild, n as finishAndroidUpload, o as androidDeviceSelectorRefusal } from "./result-utnBea7x.mjs";
32
- import { n as automaticDevicePlacement, r as devicePlacementLine, t as checkEasFallback } from "./eas-fallback-vKlrqxgE.mjs";
33
- import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-CiNYxqp6.mjs";
34
- import { t as selectFromPool } from "./device-pool-B4iOXIrD.mjs";
35
- import { r as finishAndroidRun } from "./launch-D-zq8SHG.mjs";
11
+ import { En as launchAndroidReleaseApp, G as createRunRecorder, Gt as remoteAndroidDeps, H as startBuildProgress, Hn as checkEasAuth, Ht as ensureMetroReachable, In as exitAfterFlush, J as recordCapacityRefusal, K as readRunEstimates, M as NO_BUILD_PROGRESS, Rn as runProcessOperation, Tn as launchAndroidApp, U as tapBuildLog, Ut as ensureRemoteBootOwned, V as runFailureRecord, W as thrownRunFailureRecord, X as recordRunStats, Xn as resolveRemote, Yn as resolveEasCliBin, Z as statsProjectKey$1, Zn as uploadRemote, an as verifyAndroidReleaseLaunch, ar as ownedSessionName, ln as ADB_INSTALL_TIMEOUT_MS, on as verifyLaunch, qt as resolveRemoteContext, t as budgetGate, un as DEFAULT_METRO_PORT, xn as installAndroidApp, zt as binOnPath } from "./budget-dPGuhNai.mjs";
12
+ import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-BmH7U8pr.mjs";
13
+ import { L as acquireBuildSlot, z as releaseBuildSlot } from "./workspaces-CSV2Orf4.mjs";
14
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-Dq3ZcdD8.mjs";
15
+ import { t as CCACHE_NOT_RUN } from "./ccache-CCn1S6qG.mjs";
16
+ import { S as setRemoteLogSink } from "./client-18-ZowoT.mjs";
17
+ import { a as parseBuildMachineOption, c as resolveBuildPlacement } from "./selection-BLtvaqxc.mjs";
18
+ import { r as hostedMetroSettings } from "./metro-gateway-DtsOy-0P.mjs";
19
+ import { a as writeHostedAndroidAsync, i as writeDevicePlacementAsync, t as readHostedAndroid } from "./ios-state-DlElquYD.mjs";
20
+ import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-D4dweBof.mjs";
21
+ import { n as verifyCollectorOwnership } from "./ownership-DxlZGDcV.mjs";
22
+ import { r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-A1BgotaM.mjs";
23
+ import { c as startDevServer } from "./start-BKGrEhzG.mjs";
24
+ import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-DUtkbqBQ.mjs";
25
+ import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-Ic-kdmEV.mjs";
26
+ import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-CxKUNHsb.mjs";
27
+ import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-DgtJkzIa.mjs";
28
+ import { n as devicePlacementRecord } from "./placement-log-DUvqqsB-.mjs";
29
+ import { S as pooledAndroidDevice, a as PLATFORM, b as noDeviceDiagnostic, g as dumpApkManifest, h as displayPath, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme } from "./support-B3tzVhKn.mjs";
30
+ import { t as acquireAndroidArtifact } from "./artifact-BR5VNArK.mjs";
31
+ import { a as persistLastBuild, c as androidDeviceSelectorRefusal, i as logPostBuildFailure, n as finishAndroidUpload, o as persistThrownBuild, s as reportAndroidResult, u as resolveAndroidRunPlan } from "./result-DqBrb12U.mjs";
32
+ import { n as automaticDevicePlacement, r as devicePlacementLine, t as checkEasFallback } from "./eas-fallback-LMxk9Kw0.mjs";
33
+ import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-BktRGdjS.mjs";
34
+ import { t as selectFromPool } from "./device-pool-CgBHk401.mjs";
35
+ import { r as finishAndroidRun } from "./launch-SfzGH_s9.mjs";
36
36
  import { t as unsupportedPlan } from "./project-plan-BPwbLwQu.mjs";
37
- import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-BmbdHQbr.mjs";
37
+ import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-JsDUq4w1.mjs";
38
38
  import { basename, join } from "node:path";
39
39
  import { workspaceId } from "@stim-cli/core";
40
40
  import { hostedAndroidStatus, parseMachine } from "@stim-cli/core/state";
@@ -201,8 +201,8 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
201
201
  note: out,
202
202
  enterPhase
203
203
  });
204
- writePlacement(root, slot, run.placement);
205
- writeLaunch(root, "android", {
204
+ await writePlacement(root, slot, run.placement);
205
+ await writeLaunch(root, "android", {
206
206
  appId: packageName,
207
207
  deviceId: run.placement.session,
208
208
  metroPort,
@@ -235,7 +235,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
235
235
  record: report.record,
236
236
  startedAt,
237
237
  durationMs: now() - started,
238
- status: "success",
238
+ status: "ok",
239
239
  out
240
240
  });
241
241
  await finishAndroidUpload(artifact.uploadPending, artifact.remote, phase);
@@ -339,7 +339,7 @@ function runAndroidOperation(context, root, opts = {}) {
339
339
  platform: PLATFORM,
340
340
  slot: opts.slot ?? "default"
341
341
  }, async (claim) => {
342
- recordWorkspaceUse(root, /* @__PURE__ */ new Date(), context.env, context.cwd);
342
+ await recordWorkspaceUseAsync(root, /* @__PURE__ */ new Date(), context.env, context.cwd, context.signal);
343
343
  const progress = startBuildProgress({
344
344
  root,
345
345
  platform: PLATFORM,
@@ -374,7 +374,7 @@ function runAndroidOperation(context, root, opts = {}) {
374
374
  function resolveRunAndroidOptions({ context, root, json = false, remoteDevice: commandRemoteBackend = null, resolveSettingsFor = resolveSettings, resolveRemoteDeviceContext = resolveRemoteContext, remoteDeviceDeps: makeRemoteDeviceDeps = remoteAndroidDeps, resolveEasBin = resolveEasCliBin, ensureMetroReachable: ensureRemoteMetro = ensureMetroReachable, ensureRemoteBootOwned: ensureRemoteOwned = ensureRemoteBootOwned, detectRemoteProviders = detectProviders, metroCheck = true, useBuildCache = true, easProfile, resolveEasDevelopmentBuild: resolveEasBuild = resolveEasDevelopmentBuild, variant: variantFlag = null, systemImage: systemImageFlag = null, deviceProfile: deviceProfileFlag, device: deviceFlag = null, wait: waitFlag = void 0, waitConflict = false, acquireLease = acquireRunLease, makeRunLease = runLease, selectPool = selectFromPool, onLeaseSignal = releaseLeaseOnAbort, listDevices = listAdbDevices, deviceModel = physicalDeviceModel, deviceAbi = androidDeviceAbi, isEmulatorDevice = probeEmulatorSerial, readApkPackage = async (apkPath) => apkPackage(await dumpApkManifest(apkPath, { context })), getLimits = getConcurrencyLimits, checkCapacity = checkDeviceCapacity, acquireSlot = acquireBuildSlot, releaseSlot = releaseBuildSlot, ensureDevice = ensureOwnedDevice, listSystemImages = listInstalledSystemImages, listDeviceProfiles, ensureDeviceBooted = ensureBooted, resolveAvdSerial = resolveOwnedAvdSerialAsync, waitForDeviceBoot = waitForBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro = resolveProjectMetro, warmMetro: prewarmMetro = warmMetro, startServer = startDevServer, readState = readWorkspaceState$1, pidAlive = pidExists, verifyCollector = verifyCollectorOwnership, verifyLaunched = verifyLaunch, ensureStorage = ensureWorkspaceStorageSafely, acquireLock = acquireBuildLock, releaseLock = releaseBuildLock, waitForBuild: waitForBuild$1 = waitForBuild, easAuth = checkEasAuth, resolveRemoteBuild = resolveRemote, uploadRemoteBuild = uploadRemote, resolveCacheProvider = resolveCacheProviderConfig, loadCacheProviderModule = loadCacheProvider, install = installAndroidApp, launch = launchAndroidApp, launchRelease = launchAndroidReleaseApp, verifyReleaseLaunched = verifyAndroidReleaseLaunch, resolveDevClientScheme = (projectRoot, apkPath, options) => androidDevClientScheme(projectRoot, apkPath, {
375
375
  ...options,
376
376
  context
377
- }), spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), createWriter = createNdjsonWriter, writeLaunch = writeWorkspaceLaunch, writeState = writeWorkspaceState, recordBuild, recordStats = recordRunStats, recordCapacityRefusal: recordRefusal, readEstimates = readRunEstimates, now = Date.now, out = (line) => context ? context.output("stderr", `${line}\n`) : console.error(line), emit = (line) => context ? context.output("stdout", `${line}\n`) : console.log(line) } = {}) {
377
+ }), spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), createWriter = createNdjsonWriter, writeLaunch = writeWorkspaceLaunchAsync, writeState = writeWorkspaceStateAsync, recordBuild, recordStats = recordRunStats, recordCapacityRefusal: recordRefusal, readEstimates = readRunEstimates, now = Date.now, out = (line) => context ? context.output("stderr", `${line}\n`) : console.error(line), emit = (line) => context ? context.output("stdout", `${line}\n`) : console.log(line) } = {}) {
378
378
  return {
379
379
  root,
380
380
  json,
@@ -589,13 +589,14 @@ async function runAndroid(options = {}) {
589
589
  const recordRun = stats.record;
590
590
  let ccacheActivity = CCACHE_NOT_RUN;
591
591
  let reclaimed = [];
592
+ let artifactAcquired = false;
592
593
  const fail = (code, message, remedy, { lastBuildStatus = false, setup = false, diagnostics = [], buildDiagnostics: rawDiagnostics = [], retainedClaimRoots, lines = [], logPath = null, lease } = {}) => {
593
594
  const cancellation = cancelledFailure(context, PLATFORM, {
594
595
  code,
595
596
  message
596
597
  });
597
598
  if (cancellation) ({code, message, remedy, lines} = cancellation);
598
- if (lastBuildStatus) persistLastBuild({
599
+ if (lastBuildStatus || artifactAcquired) persistLastBuild({
599
600
  recordBuild,
600
601
  root,
601
602
  record,
@@ -606,6 +607,11 @@ async function runAndroid(options = {}) {
606
607
  diagnostics: rawDiagnostics,
607
608
  out
608
609
  });
610
+ logPostBuildFailure(artifactAcquired, writer, runFailureRecord({
611
+ code,
612
+ message,
613
+ phase: progress.phase()
614
+ }));
609
615
  out(phaseLine("error", chalk.red(`${code}: ${message}`)));
610
616
  for (const diagnostic of diagnostics) out(phaseLine("error", chalk.red(diagnostic)));
611
617
  for (const line of lines) out(phaseLine("", chalk.dim(line)));
@@ -684,8 +690,10 @@ async function runAndroid(options = {}) {
684
690
  wait: waitFlag,
685
691
  waitConflict,
686
692
  remote: commandRemoteBackend,
687
- buildCache: requestedBuildCache
693
+ buildCache: requestedBuildCache,
694
+ buildMachine: placement.selected
688
695
  }, {
696
+ preflight: integration.preflight,
689
697
  resolveCacheProvider,
690
698
  runtimeKind: integration.runtimeKind,
691
699
  variantProblem: integration.variantProblem,
@@ -766,7 +774,7 @@ async function runAndroid(options = {}) {
766
774
  if ("failure" in hosting) return fail(hosting.failure.code, hosting.failure.message, hosting.failure.remedy);
767
775
  const { target, hostedTarget, budget, selectors } = hosting;
768
776
  record.devicePlacement = hosting.devicePlacement;
769
- writeDevicePlacement(root, slot, PLATFORM, record.devicePlacement);
777
+ await writeDevicePlacementAsync(root, slot, PLATFORM, record.devicePlacement);
770
778
  const physical = target.kind === "physical";
771
779
  const remoteBackend = target.kind === "remote" ? target.backend : null;
772
780
  if (hostedTarget) {
@@ -811,12 +819,12 @@ async function runAndroid(options = {}) {
811
819
  const appIds = await integration.appIds();
812
820
  let androidPackage = appIds.androidPackage;
813
821
  record.bundleId = androidPackage;
814
- const registerProject = () => upsertProject(root, {
822
+ const registerProject = () => withConfigLockAsync$1(() => upsertProject(root, {
815
823
  bundleId: appIds.bundleId ?? void 0,
816
824
  androidPackage: androidPackage ?? void 0,
817
825
  isExpo
818
- });
819
- if (remoteBackend !== "eas") registerProject();
826
+ }));
827
+ if (remoteBackend !== "eas") await registerProject();
820
828
  const project = getProject(root);
821
829
  const label = projectShortcut(root, project);
822
830
  let remoteDevice = null;
@@ -1116,6 +1124,7 @@ async function runAndroid(options = {}) {
1116
1124
  ccacheActivity = artifact.ccache;
1117
1125
  androidPackage = artifact.androidPackage;
1118
1126
  record.appPath = apkPath;
1127
+ artifactAcquired = true;
1119
1128
  if (runCancellation(context)) return fail("STIM_CANCELLED", "before install");
1120
1129
  if (hostedTarget) return finishHostedAndroidRun({
1121
1130
  target: hostedTarget,
@@ -1129,7 +1138,7 @@ async function runAndroid(options = {}) {
1129
1138
  logsDir,
1130
1139
  selectors,
1131
1140
  place: options.placeHostedAndroid ?? placeHostedAndroid,
1132
- writePlacement: options.writeHostedAndroid ?? writeHostedAndroid,
1141
+ writePlacement: options.writeHostedAndroid ?? writeHostedAndroidAsync,
1133
1142
  verifyLaunch: verifyLaunched,
1134
1143
  writeLaunch,
1135
1144
  readApkPackage,
@@ -1308,6 +1317,17 @@ async function runAndroid(options = {}) {
1308
1317
  message: "while finishing the run"
1309
1318
  });
1310
1319
  if (cancelled) return fail(cancelled.code, cancelled.message, cancelled.remedy, { lastBuildStatus: true });
1320
+ logPostBuildFailure(artifactAcquired, writer, thrownRunFailureRecord(error, progress.phase()));
1321
+ persistThrownBuild({
1322
+ acquired: artifactAcquired,
1323
+ error,
1324
+ recordBuild,
1325
+ root,
1326
+ record,
1327
+ startedAt,
1328
+ durationMs: now() - started,
1329
+ out
1330
+ });
1311
1331
  recordRun({
1312
1332
  failed: true,
1313
1333
  durationMs: now() - started
@@ -1,5 +1,5 @@
1
- import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
- import { u as androidToolCwd } from "./android-C7sVmyI9.mjs";
1
+ import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
+ import { u as androidToolCwd } from "./android-882m4hxX.mjs";
3
3
  //#region src/collector/android.ts
4
4
  const LEVEL_BY_LETTER = {
5
5
  V: "debug",
@@ -90,6 +90,16 @@ function parseLogcatLine(line, { now = Date.now, clockOffsetMs = null } = {}) {
90
90
  proc: `${tag.trim()}(${pid})`
91
91
  };
92
92
  }
93
+ const isAndroidCrashText = (text) => /FATAL EXCEPTION:|signal \d+ \(/.test(text);
94
+ function androidLogGroups(entries) {
95
+ const groups = [];
96
+ for (const entry of entries) {
97
+ const last = groups.at(-1);
98
+ if (!last || entry.proc !== last.at(-1)?.proc || /^\s*(?:FATAL EXCEPTION:|\*\*\* \*\*\*)/.test(entry.msg ?? "")) groups.push([entry]);
99
+ else last.push(entry);
100
+ }
101
+ return groups;
102
+ }
93
103
  function logcatArgs(serial, pid) {
94
104
  return [
95
105
  "-s",
@@ -214,4 +224,4 @@ function watchAppPid({ serial, packageName, pid, intervalMs = null, exec = null,
214
224
  };
215
225
  }
216
226
  //#endregion
217
- export { waitForAppPid as a, startAndroidLogcat as i, parseLogcatLine as n, watchAppPid as o, parsePidof as r, androidClockOffset as t };
227
+ export { parsePidof as a, watchAppPid as c, parseLogcatLine as i, androidLogGroups as n, startAndroidLogcat as o, isAndroidCrashText as r, waitForAppPid as s, androidClockOffset as t };
@@ -1,6 +1,6 @@
1
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-YKGWivpG.mjs";
2
- import { E as resolveVariant, T as resolveSystemImage, _ as findAapt, b as noDeviceDiagnostic, d as androidVariantSetting, f as apkDevClientFacts, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme, u as androidSystemImageSetting, x as parseXmltree, y as isReleaseVariant } from "./support-CbXPbUMJ.mjs";
3
- import { r as lastBuildRecord, t as androidFacts } from "./result-utnBea7x.mjs";
4
- import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-DtfRGLcc.mjs";
5
- import { a as killPreviousCollector, i as collectorLogFile, o as startCollector } from "./launch-D-zq8SHG.mjs";
1
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DxC0k2rk.mjs";
2
+ import { E as resolveVariant, T as resolveSystemImage, _ as findAapt, b as noDeviceDiagnostic, d as androidVariantSetting, f as apkDevClientFacts, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme, u as androidSystemImageSetting, x as parseXmltree, y as isReleaseVariant } from "./support-B3tzVhKn.mjs";
3
+ import { r as lastBuildRecord, t as androidFacts } from "./result-DqBrb12U.mjs";
4
+ import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-BZppyPe_.mjs";
5
+ import { a as killPreviousCollector, i as collectorLogFile, o as startCollector } from "./launch-SfzGH_s9.mjs";
6
6
  export { NO_DEVICE, NO_FINGERPRINT, androidDevClientScheme, androidFacts, androidSystemImageSetting, androidVariantSetting, apkDevClientFacts, apkPackage, collectorLogFile, androidCommand as default, displayPath, dumpApkManifest, findAapt, formatDuration, isReleaseVariant, killPreviousCollector, lastBuildRecord, noDeviceDiagnostic, parseXmltree, phaseLine, registerAndroid, resolveSystemImage, resolveVariant, runAndroid, runAndroidOperation, shortHash, startCollector };
@@ -1,7 +1,7 @@
1
1
  import { n as ensureWorkspaceStorage, v as withDirLock$1 } from "./paths-DQtTgsBf.mjs";
2
- import { d as getConfigDir } from "./config-DlrsduwG.mjs";
3
- import { m as defaultAndroidLayout } from "./settings-C7O8A6ZI.mjs";
4
- import { r as register } from "./cache-manifest-DSeQjt-Q.mjs";
2
+ import { d as getConfigDir } from "./config-BZhXY15H.mjs";
3
+ import { m as defaultAndroidLayout } from "./settings-RKwY33wv.mjs";
4
+ import { r as register } from "./cache-manifest-BPXRONJz.mjs";
5
5
  import { createHash, randomUUID } from "node:crypto";
6
6
  import { accessSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync } from "node:fs";
7
7
  import { join } from "node:path";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
+ import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
5
5
  import { join } from "node:path";
package/dist/api.d.mts CHANGED
@@ -19,7 +19,7 @@ interface ReleasedLease {
19
19
  }
20
20
  //#endregion
21
21
  //#region src/commands/gc/results.d.ts
22
- type GcResultKind = "archive" | "device" | "parkedDevice" | "parkedHostedDevice" | "idleDevice" | "deviceRecord" | "workspaceOutputs" | "recording" | "workspaceDirectory" | "project" | "buildLock" | "buildSlot" | "deviceLease" | "easSession" | "worktree" | "cache" | "statusCache" | "tempLeftover" | "watchmanRoot" | "watchman" | "gradleDaemon" | "gradleVersion" | "kotlinDaemon";
22
+ type GcResultKind = "archive" | "device" | "parkedDevice" | "parkedHostedDevice" | "idleDevice" | "deviceRecord" | "workspaceOutputs" | "recording" | "workspaceDirectory" | "project" | "buildLock" | "buildSlot" | "deviceLease" | "easSession" | "worktree" | "cache" | "statusCache" | "tempLeftover" | "trash" | "watchmanRoot" | "watchman" | "gradleDaemon" | "gradleVersion" | "kotlinDaemon";
23
23
  type GcResultStatus = "done" | "kept" | "failed";
24
24
  interface GcResult {
25
25
  kind: GcResultKind;
@@ -449,7 +449,8 @@ interface OwnedDeviceDisk {
449
449
  type RecordingKeptCode = "unresolved" | "retained" | "recently-recorded";
450
450
  //#endregion
451
451
  //#region src/commands/gc/temp-leftovers.d.ts
452
- type TempLeftoverKind = "stim" | "xctrace" | "jest";
452
+ type TempLeftoverKind = "stim" | "xctrace" | "swiftpm" | "jest";
453
+ type DeletableKind = Exclude<TempLeftoverKind, "jest">;
453
454
  interface TempLeftover {
454
455
  kind: TempLeftoverKind;
455
456
  path: string;
@@ -461,7 +462,7 @@ interface TempLeftoverReport {
461
462
  root: string;
462
463
  entries: TempLeftover[];
463
464
  /** Judges an entry again right before deletion (a Stim directory after its rename to `staged`), so a claim or recording use since the scan keeps it. */
464
- recheck?: (staged: string, original: string, kind: "stim" | "xctrace") => Promise<string | null>;
465
+ recheck?: (staged: string, original: string, kind: DeletableKind) => Promise<string | null>;
465
466
  }
466
467
  interface TempLeftoverGroup {
467
468
  kind: TempLeftoverKind;
@@ -480,6 +481,20 @@ declare function tempLeftoverSection(report: TempLeftoverReport | null | undefin
480
481
  groups: TempLeftoverGroup[];
481
482
  } | null;
482
483
  //#endregion
484
+ //#region src/commands/gc/trash.d.ts
485
+ interface TrashEntry {
486
+ path: string;
487
+ worktree: string | null;
488
+ removedAt: string | null;
489
+ bytes: number | null;
490
+ willDelete: boolean;
491
+ kept: string | null;
492
+ }
493
+ interface TrashReport {
494
+ root: string;
495
+ entries: TrashEntry[];
496
+ }
497
+ //#endregion
483
498
  //#region src/commands/gc/memory.d.ts
484
499
  declare const WATCHMAN_KIND = "watchman";
485
500
  declare const GRADLE_DAEMONS_KIND = "gradle-daemons";
@@ -691,6 +706,7 @@ interface GcJsonSections {
691
706
  swiftpmCache: SwiftpmCacheUsage | null;
692
707
  machineCaches: MachineCacheReport | null;
693
708
  tempLeftovers: ReturnType<typeof tempLeftoverSection>;
709
+ trash: TrashReport | null;
694
710
  gradleVersions: GradleVersionSweep | null;
695
711
  caches: {
696
712
  name: string;
@@ -793,7 +809,8 @@ interface ReloadFacts {
793
809
  platform: ReloadPlatform;
794
810
  deviceId: string;
795
811
  deviceName: string;
796
- appId: string;
812
+ /** Null when the app was not launched by Stim: a physical device or an EAS Simulator session. */
813
+ appId: string | null;
797
814
  metroPort: number | null;
798
815
  strategy: "metro-websocket" | "metro-broadcast" | "cdp";
799
816
  targets: number | null;
package/dist/api.mjs CHANGED
@@ -1,32 +1,31 @@
1
- import { m as operationState, r as WorkspaceProcessCleanupError, v as runReport, x as ownership_claim_exports, y as trackReportResource } from "./exec-DEoAhcze.mjs";
2
- import { d as workspaceDir, m as workspaceLogsDir$1, n as ensureWorkspaceStorage, r as ensureWorkspaceStorageAsync } from "./paths-DQtTgsBf.mjs";
3
- import { E as upsertProject, p as getProject, q as validateDeviceSlot, y as refuseRelativeStimPaths } from "./config-DlrsduwG.mjs";
4
- import { l as phaseLine } from "./command-output-YKGWivpG.mjs";
5
- import { d as cancelledError, f as throwIfCancelled } from "./operation-exec-BW0em61G.mjs";
6
- import { a as recordWorkspaceUseAsync, i as recordWorkspaceUse } from "./workspace-state-U08dEzhG.mjs";
7
- import { J as resolveProjectSettingsAsync, Nt as repoRootAsync, a as SETTING_SHAPE_REMEDY, et as settingShapeErrors, it as unknownSettingKeys, p as cacheProviderSettingError } from "./settings-C7O8A6ZI.mjs";
8
- import { c as projectProblem, f as projectRegistry, i as findProjectRoot$1, r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-DhCtQWWU.mjs";
9
- import { n as macosDir } from "./state-08I3hw3_.mjs";
1
+ import { D as ownership_claim_exports, T as trackReportResource, b as operationState, c as throwIfCancelled, l as WorkspaceProcessCleanupError, s as cancelledError, w as runReport } from "./exec-VFRpu1iA.mjs";
2
+ import { d as workspaceDir, m as workspaceLogsDir$1, r as ensureWorkspaceStorageAsync } from "./paths-DQtTgsBf.mjs";
3
+ import { E as upsertProject, O as withConfigLockAsync$1, p as getProject, q as validateDeviceSlot, y as refuseRelativeStimPaths } from "./config-BZhXY15H.mjs";
4
+ import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
5
+ import { a as recordWorkspaceUseAsync } from "./workspace-state-CeBpIZgr.mjs";
6
+ import { J as resolveProjectSettingsAsync, Nt as repoRootAsync, a as SETTING_SHAPE_REMEDY, et as settingShapeErrors, it as unknownSettingKeys, p as cacheProviderSettingError } from "./settings-RKwY33wv.mjs";
7
+ import { c as projectProblem, f as projectRegistry, i as findProjectRoot$1, r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-Dz-hWkb-.mjs";
8
+ import { n as macosDir } from "./state-BfAltYJP.mjs";
9
+ import { c as ensureHomeIdentity, s as workspaceShareURL } from "./stim-desktop-DS0mzR8U.mjs";
10
10
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
11
- import { B as recordFinishedBuild, H as tapBuildLog, V as startBuildProgress } from "./budget-3ivAK99e.mjs";
12
- import { d as runCancellationSignal, f as withNativeBuildRun } from "./native-run-Dv88i0aU.mjs";
13
- import { c as ensureHomeIdentity, s as workspaceShareURL } from "./stim-desktop-D5OGpYZM.mjs";
14
- import { s as resolveBuildPlacement } from "./selection-DSMbWEX2.mjs";
15
- import { c as stopWorkspaceNow } from "./stop-BJ06ipTZ.mjs";
16
- import { r as runReload } from "./reload-COJWTbae.mjs";
17
- import { c as startDevServer } from "./start-CU8mCPC7.mjs";
18
- import { s as recordDoctorCheck } from "./doctor-watchman-iGBpC6KM.mjs";
19
- import { a as readDoctorReport } from "./doctor-C6t4Maue.mjs";
20
- import { h as warmWorktreeTarget, m as removeWorktreeTarget } from "./worktree-B4Nj3EGS.mjs";
21
- import { i as readGcReport, n as executeGc, o as withGcMaintenanceClaim } from "./gc-BW8E1uSC.mjs";
22
- import { r as readWorkspaceLogs, t as followWorkspaceLogs } from "./logs-pNvA2hHK.mjs";
23
- import { t as readProjectStats } from "./stats-report-BzaPrRm6.mjs";
24
- import { n as buildAndroidOperation, t as buildIosOperation } from "./build-Dv9s8Fz-.mjs";
25
- import { a as readAndroidBuildPlan, i as runAndroidOperation } from "./android-DtfRGLcc.mjs";
26
- import { i as readIosBuildPlan, r as runIosOperation } from "./ios-CWjqfSm_.mjs";
27
- import { a as buildMacosBundle, i as planMacos, n as runMacos } from "./macos-C67FZ2ft.mjs";
28
- import { t as runWeb } from "./web-DRF_oFXk.mjs";
29
- import { i as SettingsRefusal, o as readSettingsContext, s as readSettingsPayload, t as mutateSetting } from "./settings-write-Chuy7Cte.mjs";
11
+ import { B as recordFinishedBuild, H as startBuildProgress, U as tapBuildLog } from "./budget-dPGuhNai.mjs";
12
+ import { d as runCancellationSignal, f as withNativeBuildRun } from "./native-run-BmH7U8pr.mjs";
13
+ import { c as resolveBuildPlacement } from "./selection-BLtvaqxc.mjs";
14
+ import { c as stopWorkspaceNow } from "./stop-CL1kDHds.mjs";
15
+ import { r as runReload } from "./reload-C1TTVesC.mjs";
16
+ import { c as startDevServer } from "./start-BKGrEhzG.mjs";
17
+ import { s as recordDoctorCheck } from "./doctor-watchman-B453A231.mjs";
18
+ import { a as readDoctorReport } from "./doctor-DZgpqR6J.mjs";
19
+ import { h as warmWorktreeTarget, m as removeWorktreeTarget } from "./worktree-Dw8kfacb.mjs";
20
+ import { i as readGcReport, n as executeGc, o as withGcMaintenanceClaim } from "./gc-yVKpAOKM.mjs";
21
+ import { r as readWorkspaceLogs, t as followWorkspaceLogs } from "./logs-DXE32kyb.mjs";
22
+ import { t as readProjectStats } from "./stats-report-n2U5plhk.mjs";
23
+ import { n as buildAndroidOperation, t as buildIosOperation } from "./build-CaF574eS.mjs";
24
+ import { a as readAndroidBuildPlan, i as runAndroidOperation } from "./android-BZppyPe_.mjs";
25
+ import { i as readIosBuildPlan, r as runIosOperation } from "./ios-B1FXRCMX.mjs";
26
+ import { a as buildMacosBundle, i as planMacos, n as runMacos } from "./macos-CCfhb-jT.mjs";
27
+ import { t as runWeb } from "./web-BH7peScT.mjs";
28
+ import { i as SettingsRefusal, o as readSettingsContext, s as readSettingsPayload, t as mutateSetting } from "./settings-write--gj6MACV.mjs";
30
29
  import { randomBytes } from "node:crypto";
31
30
  import { mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync } from "node:fs";
32
31
  import { stripVTControlCharacters } from "node:util";
@@ -54,13 +53,15 @@ async function buildMacosOperation(context, root, options) {
54
53
  const placement = resolveBuildPlacement(options.remoteBuild);
55
54
  if (placement.failure) throw Object.assign(new Error(placement.failure.message), placement.failure);
56
55
  const recipe = await (await selected.load()).prepare(context, settings);
57
- ensureWorkspaceStorage(root);
56
+ await ensureWorkspaceStorageAsync(root, context.signal);
58
57
  return withNativeBuildRun(context, root, {
59
58
  command: "build",
60
59
  platform: "macos"
61
60
  }, async (claim) => {
62
- if (!getProject(root)) upsertProject(root, {});
63
- recordWorkspaceUse(root, /* @__PURE__ */ new Date(), context.env, context.cwd);
61
+ await withConfigLockAsync$1(() => {
62
+ if (!getProject(root)) upsertProject(root, {});
63
+ });
64
+ await recordWorkspaceUseAsync(root, /* @__PURE__ */ new Date(), context.env, context.cwd, context.signal);
64
65
  const started = Date.now();
65
66
  const progress = startBuildProgress({
66
67
  root,
@@ -1,18 +1,17 @@
1
- import { h as withDrainingCancellation, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
1
+ import { D as ownership_claim_exports, c as throwIfCancelled, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
3
- import { _ as stepTimer, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-YKGWivpG.mjs";
4
- import { f as throwIfCancelled } from "./operation-exec-BW0em61G.mjs";
5
- import { Hn as isEasAuthFailureText, Ln as RESOLVE_TIMEOUT_MS, Vn as easAuthNote } from "./budget-3ivAK99e.mjs";
6
- import { d as runCancellationSignal, r as cancelledFailure } from "./native-run-Dv88i0aU.mjs";
7
- import { d as prepareProviderDownloadDir, f as providerDownloadPath } from "./build-cache-Dv7RN200.mjs";
8
- import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine, t as CCACHE_NOT_RUN } from "./ccache-CH2EWGPB.mjs";
9
- import { c as offloadPlacement, i as closeOffload, l as placementLoad, n as buildPlacementCandidates, o as offloadBuild, r as chooseBuildMachine, u as remotePhaseText } from "./client-B4MMzfo_.mjs";
10
- import { a as requireLocalBuild, r as namedBuildMachine, t as OffloadRefusal } from "./selection-DSMbWEX2.mjs";
11
- import { f as formatDiagnostic } from "./react-native-build-CelbTO_y.mjs";
12
- import { l as skippedMissReason } from "./prebuild-BligW0QS.mjs";
13
- import { t as buildPlacementRecord } from "./placement-log-BnGgJRRZ.mjs";
14
- import { n as settleArtifactUploads, t as acquireArtifact } from "./acquire-artifact-BzYRDgaP.mjs";
15
- import { a as PLATFORM, h as displayPath } from "./support-CbXPbUMJ.mjs";
3
+ import { _ as stepTimer, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DxC0k2rk.mjs";
4
+ import { Un as easAuthNote, Wn as isEasAuthFailureText, zn as RESOLVE_TIMEOUT_MS } from "./budget-dPGuhNai.mjs";
5
+ import { d as runCancellationSignal, r as cancelledFailure } from "./native-run-BmH7U8pr.mjs";
6
+ import { g as providerDownloadPath, h as prepareProviderDownloadDir } from "./build-cache-HFUQ9eLz.mjs";
7
+ import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine, t as CCACHE_NOT_RUN } from "./ccache-CCn1S6qG.mjs";
8
+ import { c as offloadPlacement, i as closeOffload, l as placementLoad, n as buildPlacementCandidates, o as offloadBuild, r as chooseBuildMachine, u as remotePhaseText } from "./client-18-ZowoT.mjs";
9
+ import { i as namedBuildMachine, o as requireLocalBuild, r as fingerprintMismatchRemedy, t as OffloadRefusal } from "./selection-BLtvaqxc.mjs";
10
+ import { f as formatDiagnostic } from "./react-native-build-AuCu-aAP.mjs";
11
+ import { u as skippedMissReason } from "./prebuild-DmVCf5xb.mjs";
12
+ import { t as buildPlacementRecord } from "./placement-log-DUvqqsB-.mjs";
13
+ import { n as settleArtifactUploads, t as acquireArtifact } from "./acquire-artifact-CEs02U2o.mjs";
14
+ import { a as PLATFORM, h as displayPath } from "./support-B3tzVhKn.mjs";
16
15
  import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
17
16
  import { rmSync } from "node:fs";
18
17
  import { join } from "node:path";
@@ -47,7 +46,7 @@ async function acquireAndroidArtifact({ context, root, buildLog, writer, recipe,
47
46
  machine: info.machine
48
47
  }
49
48
  }));
50
- if (namedBuildMachine(buildMachine)) throw new OffloadRefusal(buildMachine, reason);
49
+ if (namedBuildMachine(buildMachine)) throw new OffloadRefusal(buildMachine, reason, info.remedy);
51
50
  requireLocalBuild(buildMachine);
52
51
  record.offloadFallback = reason;
53
52
  phase("build", `${line} -> building here`);
@@ -445,6 +444,7 @@ async function acquireAndroidArtifact({ context, root, buildLog, writer, recipe,
445
444
  choice,
446
445
  expectedFingerprint: uncached ? null : storeHash,
447
446
  request: recipe.offload.request,
447
+ fingerprintInputs: recipe.offload.fingerprintInputs,
448
448
  stagingDir,
449
449
  onPhase: (name, msg) => phase(name, remotePhaseText(name, msg, choice.machine)),
450
450
  onEnter: (name) => {
@@ -505,7 +505,8 @@ async function acquireAndroidArtifact({ context, root, buildLog, writer, recipe,
505
505
  fallbackMachine = choice.machine;
506
506
  fallBack(`${choice.machine}: ${why}`, `offload failed: ${why}`, {
507
507
  code: "offload-failed",
508
- machine: choice.machine
508
+ machine: choice.machine,
509
+ remedy: outcome.ok ? void 0 : fingerprintMismatchRemedy(outcome.reason)
509
510
  });
510
511
  writer.write({
511
512
  src: "build",
@@ -1,18 +1,17 @@
1
- import { h as withDrainingCancellation, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
1
+ import { D as ownership_claim_exports, c as throwIfCancelled, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
3
- import { _ as stepTimer, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-YKGWivpG.mjs";
4
- import { f as throwIfCancelled } from "./operation-exec-BW0em61G.mjs";
5
- import { Hn as isEasAuthFailureText, Ln as RESOLVE_TIMEOUT_MS, Vn as easAuthNote } from "./budget-3ivAK99e.mjs";
6
- import { d as runCancellationSignal, r as cancelledFailure } from "./native-run-Dv88i0aU.mjs";
7
- import { d as prepareProviderDownloadDir, f as providerDownloadPath, p as providerUploadOutcome } from "./build-cache-Dv7RN200.mjs";
8
- import { o as compilationCacheActivityLine, t as COMPILATION_CACHE_NOT_RUN } from "./xcode-Rq744mBF.mjs";
9
- import { _ as clearCorruptCompilationCache, c as offloadPlacement, g as COMPILATION_CACHE_CORRUPT, i as closeOffload, l as placementLoad, n as buildPlacementCandidates, o as offloadBuild, r as chooseBuildMachine, u as remotePhaseText } from "./client-B4MMzfo_.mjs";
10
- import { a as requireLocalBuild, r as namedBuildMachine, t as OffloadRefusal } from "./selection-DSMbWEX2.mjs";
11
- import { S as xcodeFailureReport, p as printDiagnostics } from "./support-TWuQlHQo.mjs";
12
- import { l as skippedMissReason } from "./prebuild-BligW0QS.mjs";
13
- import { t as buildPlacementRecord } from "./placement-log-BnGgJRRZ.mjs";
14
- import { n as settleArtifactUploads, t as acquireArtifact } from "./acquire-artifact-BzYRDgaP.mjs";
15
- import { r as finishIosUpload, t as IosRecipeRefusal } from "./ios-project-CSZYI1iu.mjs";
3
+ import { _ as stepTimer, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DxC0k2rk.mjs";
4
+ import { Un as easAuthNote, Wn as isEasAuthFailureText, zn as RESOLVE_TIMEOUT_MS } from "./budget-dPGuhNai.mjs";
5
+ import { d as runCancellationSignal, r as cancelledFailure } from "./native-run-BmH7U8pr.mjs";
6
+ import { _ as providerUploadOutcome, g as providerDownloadPath, h as prepareProviderDownloadDir } from "./build-cache-HFUQ9eLz.mjs";
7
+ import { o as compilationCacheActivityLine, t as COMPILATION_CACHE_NOT_RUN } from "./xcode-DHu41qQ4.mjs";
8
+ import { C as COMPILATION_CACHE_CORRUPT, c as offloadPlacement, i as closeOffload, l as placementLoad, n as buildPlacementCandidates, o as offloadBuild, r as chooseBuildMachine, u as remotePhaseText, w as clearCorruptCompilationCache } from "./client-18-ZowoT.mjs";
9
+ import { i as namedBuildMachine, o as requireLocalBuild, r as fingerprintMismatchRemedy, t as OffloadRefusal } from "./selection-BLtvaqxc.mjs";
10
+ import { S as xcodeFailureReport, p as printDiagnostics } from "./support-B1W-hmC2.mjs";
11
+ import { u as skippedMissReason } from "./prebuild-DmVCf5xb.mjs";
12
+ import { t as buildPlacementRecord } from "./placement-log-DUvqqsB-.mjs";
13
+ import { n as settleArtifactUploads, t as acquireArtifact } from "./acquire-artifact-CEs02U2o.mjs";
14
+ import { r as finishIosUpload, t as IosRecipeRefusal } from "./ios-project-KYqeJURj.mjs";
16
15
  import { rmSync } from "node:fs";
17
16
  import { join } from "node:path";
18
17
  import { machineCapacity } from "@stim-cli/core/state";
@@ -64,7 +63,7 @@ async function acquireIosArtifact({ context, root, logFile, recipe, physical, co
64
63
  machine: info.machine
65
64
  }
66
65
  }));
67
- if (namedBuildMachine(buildMachine)) throw new OffloadRefusal(buildMachine, reason);
66
+ if (namedBuildMachine(buildMachine)) throw new OffloadRefusal(buildMachine, reason, info.remedy);
68
67
  requireLocalBuild(buildMachine);
69
68
  offloadFallback = reason;
70
69
  buildFailure = {
@@ -424,6 +423,7 @@ async function acquireIosArtifact({ context, root, logFile, recipe, physical, co
424
423
  choice,
425
424
  expectedFingerprint: storeHash,
426
425
  request: recipe.offload.request(runtime),
426
+ fingerprintInputs: recipe.offload.fingerprintInputs,
427
427
  stagingDir,
428
428
  onPhase: (name, msg) => phase(name, remotePhaseText(name, msg, choice.machine)),
429
429
  onEnter: (name) => {
@@ -483,7 +483,8 @@ async function acquireIosArtifact({ context, root, logFile, recipe, physical, co
483
483
  });
484
484
  fallBack(`${choice.machine}: ${why}`, `offload failed: ${why}`, {
485
485
  code: corrupt === void 0 ? "offload-failed" : COMPILATION_CACHE_CORRUPT,
486
- machine: choice.machine
486
+ machine: choice.machine,
487
+ remedy: outcome.ok ? void 0 : fingerprintMismatchRemedy(outcome.reason)
487
488
  });
488
489
  logWriter().write({
489
490
  src: "build",
@@ -1,14 +1,14 @@
1
- import { t as getExecutor } from "./exec-DEoAhcze.mjs";
1
+ import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { join } from "node:path";
3
3
  //#region src/macos/artifact-platform.ts
4
- async function validateMacosArtifactPlatform(context, bundle, product, signal) {
4
+ async function validateMacosArtifactPlatform(context, bundle, product, signal, nodeArch = process.arch) {
5
5
  const binary = join(bundle, "Contents", "MacOS", product);
6
6
  const options = {
7
7
  timeoutMs: 3e4,
8
8
  signal,
9
9
  declareFor: context
10
10
  };
11
- const architecture = process.arch === "x64" ? "x86_64" : process.arch;
11
+ const architecture = nodeArch === "x64" ? "x86_64" : nodeArch;
12
12
  const archs = await getExecutor().runFileAsync("xcrun", [
13
13
  "lipo",
14
14
  "-archs",