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,18 +1,16 @@
1
1
  import { D as ownership_claim_exports, d as workspaceProcessLockError, u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
2
- import { m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
- import { G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, d as getConfigDir, u as getConcurrencyLimits } from "./config-BZhXY15H.mjs";
4
- import { a as formatElapsed, l as phaseLine } from "./command-output-BBvS1H6v.mjs";
5
- import { g as deviceReclaimIdleMinutesSetting } from "./settings-B5tCoq9N.mjs";
6
- import { A as listAdbDevices, j as listAdbDevicesAsync } from "./android-Cjcj8MCw.mjs";
7
- import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
8
- import { J as recordCapacityRefusal, Y as recordCapacityWait } from "./budget-HyShrIpL.mjs";
2
+ import { G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, d as getConfigDir, u as getConcurrencyLimits } from "./config-BktkY_zC.mjs";
3
+ import { a as formatElapsed, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
4
+ import { g as deviceReclaimIdleMinutesSetting } from "./settings-CosW5X-S.mjs";
5
+ import { A as listAdbDevices, j as listAdbDevicesAsync } from "./android-DTAcRwBC.mjs";
6
+ import { $ as recordCapacityWait, Q as recordCapacityRefusal } from "./budget-k2mZGvvk.mjs";
9
7
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
10
- import { p as withIdleWorkspace } from "./workspaces-C9w4aeXF.mjs";
11
- import { d as listAllIosSims, f as listAllIosSimsAsync, l as iosRuntimeMatches, y as parseRuntimeVersion } from "./ios-BQzvJlzw.mjs";
12
- import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-BIyfl0Zj.mjs";
8
+ import { p as withIdleWorkspace } from "./workspaces-g2lhdBXF.mjs";
9
+ import { d as listAllIosSims, f as listAllIosSimsAsync, l as iosRuntimeMatches, y as parseRuntimeVersion } from "./ios-WxpDJ5T1.mjs";
10
+ import { i as writeIdleShutdownEvent, n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-FfxL1KdG.mjs";
13
11
  import { realpathSync } from "node:fs";
14
12
  import { basename, join } from "node:path";
15
- import { LOG_ROTATE_BYTES, workspaceId } from "@stim-cli/core";
13
+ import { workspaceId } from "@stim-cli/core";
16
14
  import { DEVICE_RECLAIM_REASON, automaticMachineEnabled } from "@stim-cli/core/state";
17
15
  import { setTimeout } from "node:timers/promises";
18
16
  //#region src/devices/queue-reclaim.ts
@@ -30,12 +28,7 @@ async function reclaimIdleDevice(root, idleMs, out, now, skipped) {
30
28
  const { device, idleForMs } = candidate;
31
29
  const label = loadConfig$1()?.projects[device.project]?.label || basename(device.project);
32
30
  const log = (event) => {
33
- const writer = createNdjsonWriter(join(workspaceLogsDir$1(device.project), "metro.ndjson"), { maxBytes: LOG_ROTATE_BYTES });
34
- writer.write({
35
- src: "metro",
36
- ...event
37
- });
38
- writer.close();
31
+ writeIdleShutdownEvent(device.project, event);
39
32
  if (event.level === "warn") out(`${"device".padEnd(11)} ${event.msg}`);
40
33
  };
41
34
  skipped.add(`${device.kind}:${device.id}`);
@@ -1,19 +1,17 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { n as ensureWorkspaceStorage } from "./paths-DQtTgsBf.mjs";
3
- import { O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig } from "./config-BZhXY15H.mjs";
4
- import { d as writeWorkspaceState } from "./workspace-state-CPSp3mav.mjs";
5
- import { i as macosProcess, o as requiredMacosRecord } from "./state-DPaM3u5K.mjs";
6
- import { A as listAdbDevices, D as getAvdNameForSerial, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, M as listAvdDeviceProfiles, O as getAvdNameForSerialAsync, U as ownedAvdName, X as pickDefaultSystemImage, a as androidDeviceAbi, ct as waitForBoot, d as androidToolPath, f as assertOwnedAvdStopped, g as avdPathExists, k as hostSystemImageArch, nt as resolveOwnedAvdSerialAsync, t as DEFAULT_AVD_DEVICE_PROFILE, tt as resetAdoptedAvd, v as avdStorageRoots, x as createOwnedAvd, y as bootAndroidEmulator } from "./android-Cjcj8MCw.mjs";
7
- import { n as forgetCreatedDeviceAsync } from "./created-devices-D2Aca-xu.mjs";
8
- import { a as parsePidof, i as parseLogcatLine, t as androidClockOffset } from "./android-saBeB4lr.mjs";
2
+ import { _ as ensureWorkspaceStorage, d as writeWorkspaceState } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig } from "./config-BktkY_zC.mjs";
4
+ import { i as macosProcess, o as requiredMacosRecord } from "./state-C4OdpOTF.mjs";
5
+ import { A as listAdbDevices, Ct as forgetCreatedDeviceAsync, D as getAvdNameForSerial, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, M as listAvdDeviceProfiles, O as getAvdNameForSerialAsync, U as ownedAvdName, X as pickDefaultSystemImage, a as androidDeviceAbi, ct as waitForBoot, d as androidToolPath, f as assertOwnedAvdStopped, g as avdPathExists, k as hostSystemImageArch, nt as resolveOwnedAvdSerialAsync, t as DEFAULT_AVD_DEVICE_PROFILE, tt as resetAdoptedAvd, v as avdStorageRoots, x as createOwnedAvd, y as bootAndroidEmulator } from "./android-DTAcRwBC.mjs";
6
+ import { a as parsePidof, i as parseLogcatLine, t as androidClockOffset } from "./android-B5P81yI-.mjs";
9
7
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
10
- import { An as reverseMetroPorts, Dn as launchAndroidReleaseApp, En as launchAndroidApp, On as launchIosApp, Sn as installAndroidApp, Tn as iosAppProcess, jn as writeDebugHttpHost, mn as androidAppProcess, wn as installIosApp } from "./budget-HyShrIpL.mjs";
11
- import { A as teardownOwnedIosSim, O as teardownOwnedAvd } from "./workspaces-C9w4aeXF.mjs";
12
- import { C as resetIosKeychain, I as readHostMemoryPressure, T as resolveIosCreation, a as createOwnedIosSim, d as listAllIosSims, g as listUserApps, k as uninstallIosApp, n as bootIosSim, w as resetIosPrivacy } from "./ios-BQzvJlzw.mjs";
13
- import { r as stopMacosAppHeld } from "./stop-COP6PQqw.mjs";
8
+ import { An as launchAndroidApp, En as installAndroidApp, Fn as writeDebugHttpHost, Mn as launchIosApp, On as installIosApp, Pn as reverseMetroPorts, jn as launchAndroidReleaseApp, kn as iosAppProcess, vn as androidAppProcess } from "./budget-k2mZGvvk.mjs";
9
+ import { A as teardownOwnedIosSim, O as teardownOwnedAvd } from "./workspaces-g2lhdBXF.mjs";
10
+ import { A as uninstallIosApp, E as resolveIosCreation, L as readHostMemoryPressure, T as resetIosPrivacy, a as createOwnedIosSim, d as listAllIosSims, g as listUserApps, n as bootIosSim, w as resetIosKeychain } from "./ios-WxpDJ5T1.mjs";
11
+ import { r as stopMacosAppHeld } from "./stop-ySNQHXMG.mjs";
14
12
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
15
- import { i as countLiveOwnedDevices } from "./device-capacity-ZYaRALv5.mjs";
16
- import { _ as findAapt } from "./support-Cxj9CmII.mjs";
13
+ import { i as countLiveOwnedDevices } from "./device-capacity-DCSvUF0l.mjs";
14
+ import { _ as findAapt } from "./support-BGSCBoib.mjs";
17
15
  import { t as waitForMacosRegistration } from "./registration-CN6nlhcD.mjs";
18
16
  import { n as parseLogStreamLine } from "./ios-ENC4sRPA.mjs";
19
17
  import { createHash, randomUUID } from "node:crypto";
@@ -1,12 +1,14 @@
1
1
  import { D as ownership_claim_exports, o as cancellableSleep, t as getExecutor, u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
2
- import { f as workspaceId$1 } from "./paths-DQtTgsBf.mjs";
3
- import { C as saveConfig, G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, a as clearDevice, d as getConfigDir, w as setDevice } from "./config-BZhXY15H.mjs";
4
- import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
5
- import { E as iosSimSlimProfileSetting, T as iosSimSlimDefaultSetting } from "./settings-B5tCoq9N.mjs";
6
- import { mt as dropParked, pt as adoptParked, vt as parkedMaxSetting, xt as selectParked, yt as readParked } from "./android-Cjcj8MCw.mjs";
7
- import { M as teardownParkedIosSim } from "./workspaces-C9w4aeXF.mjs";
8
- import { A as waitForSpringBoard, C as resetIosKeychain, E as resolveOwnedIosSim, I as readHostMemoryPressure, N as hostMemoryPressureAdvice, R as reportMemoryCulprits, S as renameIosSim, T as resolveIosCreation, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, j as configuredIosSimulatorViewer, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosPrivacy, y as parseRuntimeVersion } from "./ios-BQzvJlzw.mjs";
9
- import { l as runtimeMismatch, m as withDeviceBootAdmission, n as DeviceAdmissionRefusal, o as deviceTypeMismatch } from "./device-capacity-ZYaRALv5.mjs";
2
+ import { D as workspaceId$1 } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { C as saveConfig, G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, a as clearDevice, d as getConfigDir, w as setDevice } from "./config-BktkY_zC.mjs";
4
+ import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
+ import { E as iosSimSlimProfileSetting, T as iosSimSlimDefaultSetting } from "./settings-CosW5X-S.mjs";
6
+ import { mt as dropParked, pt as adoptParked, vt as parkedMaxSetting, xt as selectParked, yt as readParked } from "./android-DTAcRwBC.mjs";
7
+ import { M as teardownParkedIosSim } from "./workspaces-g2lhdBXF.mjs";
8
+ import { C as renameIosSim, D as resolveOwnedIosSim, E as resolveIosCreation, L as readHostMemoryPressure, M as configuredIosSimulatorViewer, P as hostMemoryPressureAdvice, S as readSpringBoardPid, T as resetIosPrivacy, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, j as waitForSpringBoard, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosKeychain, y as parseRuntimeVersion, z as reportMemoryCulprits } from "./ios-WxpDJ5T1.mjs";
9
+ import { l as runtimeMismatch, m as withDeviceBootAdmission, n as DeviceAdmissionRefusal, o as deviceTypeMismatch } from "./device-capacity-DCSvUF0l.mjs";
10
+ import { createHash } from "node:crypto";
11
+ import { readFileSync } from "node:fs";
10
12
  import { ambientContext } from "@stim-cli/core";
11
13
  import { isJsonObject } from "@stim-cli/core/state";
12
14
  import chalk from "chalk";
@@ -93,12 +95,13 @@ async function ensureOwnedIosDevice({ record, projectPath, slot, settingsRoot, l
93
95
  owned: true,
94
96
  deviceName: name,
95
97
  ...record.simslimManaged ? { simslimManaged: true } : {},
98
+ ...record.simslimApplied ? { simslimApplied: record.simslimApplied } : {},
96
99
  ...record.adopted ? { adopted: true } : {},
97
100
  ...record.adoptionPending ? { adoptionPending: true } : {},
98
101
  ...record.parkedCacheKey ? { parkedCacheKey: record.parkedCacheKey } : {},
99
102
  ...record.schemeApprovals ? { schemeApprovals: record.schemeApprovals } : {}
100
103
  };
101
- const configure = async () => {
104
+ const configure = async (freshBoot) => {
102
105
  if (record.adoptionPending) await resetAdoptedSim(sim.udid, out);
103
106
  return configureOwnedIosSim({
104
107
  record: updated,
@@ -106,6 +109,7 @@ async function ensureOwnedIosDevice({ record, projectPath, slot, settingsRoot, l
106
109
  slot,
107
110
  profile: simslimProfile,
108
111
  slimByDefault: simslimDefault,
112
+ freshBoot,
109
113
  out,
110
114
  reconcileIosSimulator
111
115
  });
@@ -116,11 +120,13 @@ async function ensureOwnedIosDevice({ record, projectPath, slot, settingsRoot, l
116
120
  };
117
121
  if (sim.state !== "Booted") return {
118
122
  ...updated,
119
- booting: startIosBoot(sim.udid, configure, name, out, flags.simulatorApp, projectPath, flags.deviceSlotWait),
123
+ booting: startIosBoot(sim.udid, () => configure(true), name, out, flags.simulatorApp, projectPath, flags.deviceSlotWait),
120
124
  ...facts
121
125
  };
126
+ const { record: configured, rebooted } = await configure(false);
127
+ if (rebooted) await muteBootedSimulator(sim.udid, out);
122
128
  return {
123
- ...await configure(),
129
+ ...configured,
124
130
  ...facts,
125
131
  booted: sim.udid
126
132
  };
@@ -162,6 +168,7 @@ async function ensureOwnedIosDevice({ record, projectPath, slot, settingsRoot, l
162
168
  slot,
163
169
  profile: simslimProfile,
164
170
  slimByDefault: simslimDefault,
171
+ freshBoot: true,
165
172
  out,
166
173
  reconcileIosSimulator
167
174
  });
@@ -197,6 +204,7 @@ async function ensureOwnedIosDevice({ record, projectPath, slot, settingsRoot, l
197
204
  slot,
198
205
  profile: simslimProfile,
199
206
  slimByDefault: simslimDefault,
207
+ freshBoot: true,
200
208
  out,
201
209
  reconcileIosSimulator
202
210
  }), created.name, out, flags.simulatorApp, projectPath, flags.deviceSlotWait);
@@ -302,16 +310,32 @@ function clearIosAdoptionPending(projectPath, slot = "default") {
302
310
  saveConfig(cfg);
303
311
  });
304
312
  }
305
- async function configureOwnedIosSim({ record, projectPath, slot, profile, slimByDefault, out, reconcileIosSimulator }) {
313
+ function simslimProfileIdentity(profile, slimByDefault) {
314
+ if (profile) return `profile:${createHash("sha256").update(readFileSync(profile)).digest("hex")}`;
315
+ return slimByDefault ? "default" : null;
316
+ }
317
+ async function configureOwnedIosSim({ record, projectPath, slot, profile, slimByDefault, freshBoot, out, reconcileIosSimulator }) {
318
+ const identity = simslimProfileIdentity(profile, slimByDefault);
319
+ const slimConfigured = identity !== null || Boolean(record.simslimManaged);
320
+ const applied = record.simslimApplied;
321
+ const springBoardBefore = slimConfigured && !freshBoot ? await readSpringBoardPid(record.deviceUdid) : null;
322
+ if (identity !== null && record.simslimManaged && !freshBoot && applied?.profile === identity && springBoardBefore !== null && springBoardBefore === applied.springBoardPid) {
323
+ await withConfigLockAsync$1(() => setDevice(projectPath, "ios", { ...record }, slot));
324
+ return {
325
+ record,
326
+ rebooted: false
327
+ };
328
+ }
306
329
  if (profile) out(chalk.dim(phaseLine("device", `applying the SimSlim profile to ${record.deviceUdid}`)));
307
330
  else if (slimByDefault) out(chalk.dim(phaseLine("device", `applying SimSlim's default services to ${record.deviceUdid}`)));
308
331
  else if (record.simslimManaged) out(chalk.dim(phaseLine("device", `restoring stock simulator services on ${record.deviceUdid}`)));
309
332
  const previouslyManaged = Boolean(record.simslimManaged);
310
- if ((profile || slimByDefault) && !record.simslimManaged) {
311
- const pending = {
312
- ...record,
333
+ if (identity !== null && !record.simslimManaged || applied) {
334
+ const { simslimApplied: _applied, ...rest } = record;
335
+ const pending = identity !== null ? {
336
+ ...rest,
313
337
  simslimManaged: true
314
- };
338
+ } : rest;
315
339
  await withConfigLockAsync$1(() => setDevice(projectPath, "ios", pending, slot));
316
340
  record = pending;
317
341
  }
@@ -326,8 +350,16 @@ async function configureOwnedIosSim({ record, projectPath, slot, profile, slimBy
326
350
  const updated = { ...record };
327
351
  if (result.managed) updated.simslimManaged = true;
328
352
  else delete updated.simslimManaged;
353
+ const springBoardAfter = slimConfigured ? await readSpringBoardPid(record.deviceUdid) : null;
354
+ if (result.managed && !result.notInstalled && identity !== null && springBoardAfter !== null) updated.simslimApplied = {
355
+ profile: identity,
356
+ springBoardPid: springBoardAfter
357
+ };
329
358
  await withConfigLockAsync$1(() => setDevice(projectPath, "ios", updated, slot));
330
- return updated;
359
+ return {
360
+ record: updated,
361
+ rebooted: slimConfigured && springBoardAfter !== springBoardBefore
362
+ };
331
363
  }
332
364
  async function ensureIosBooted({ device, projectPath, deviceSlotWait, simulatorApp, timeoutMs, pollMs, out }) {
333
365
  const udid = device?.deviceUdid;
@@ -1,8 +1,8 @@
1
1
  import { b as operationState } from "./exec-VFRpu1iA.mjs";
2
- import { V as deviceSlotKey } from "./config-BZhXY15H.mjs";
3
- import { a as formatElapsed, r as clockTime } from "./command-output-BBvS1H6v.mjs";
4
- import { Qt as MANIFEST_VERIFY_TIMEOUT_MS, ln as APP_READINESS_TIMEOUT_MS } from "./budget-HyShrIpL.mjs";
5
- import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BpjwrQXU.mjs";
2
+ import { V as deviceSlotKey } from "./config-BktkY_zC.mjs";
3
+ import { a as formatElapsed, r as clockTime } from "./command-output-BF5AR2dL.mjs";
4
+ import { nn as MANIFEST_VERIFY_TIMEOUT_MS, pn as APP_READINESS_TIMEOUT_MS } from "./budget-k2mZGvvk.mjs";
5
+ import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Lnb_EoRY.mjs";
6
6
  //#region src/engine/device-lease-run.ts
7
7
  const LEASE_STEP_FLOOR_MS = 6e4;
8
8
  const DEBUG_VERIFY_STEP_MS = MANIFEST_VERIFY_TIMEOUT_MS + APP_READINESS_TIMEOUT_MS;
@@ -1,6 +1,6 @@
1
- import { V as deviceSlotKey } from "./config-BZhXY15H.mjs";
2
- import { A as selectPoolDevice, S as parseLease, b as leaseIsExpired, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BpjwrQXU.mjs";
3
- import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-ogEeJ62K.mjs";
1
+ import { V as deviceSlotKey } from "./config-BktkY_zC.mjs";
2
+ import { A as selectPoolDevice, S as parseLease, b as leaseIsExpired, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Lnb_EoRY.mjs";
3
+ import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-BmvIl7bI.mjs";
4
4
  //#region src/engine/device-pool.ts
5
5
  function heldPoolId(root, platform, now, io = fileLeaseIo, slot = "default") {
6
6
  const record = io.readHolder(root)[deviceSlotKey(platform, slot)];
@@ -1,17 +1,17 @@
1
- import { Y as doctorIo, _ as loadConfig$1, p as getProject } from "./config-BZhXY15H.mjs";
2
- import { f as refuseNoProject, l as phaseLine } from "./command-output-BBvS1H6v.mjs";
3
- import { Nt as repoRoot, R as projectSettingsContextAsync } from "./settings-B5tCoq9N.mjs";
4
- import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-BiC68mIp.mjs";
5
- import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-BMCA1gdO.mjs";
6
- import { a as inspectBudget, dr as inspectWatchmanMemory, hr as memorySweepIsScoped, n as budgetLine } from "./budget-HyShrIpL.mjs";
7
- import { B as memoryCulpritFindings, V as readMemoryCulpritsAsync, f as listAllIosSimsAsync, h as listIosRuntimesAsync, l as iosRuntimeMatches, x as pickDefaultIosCreation } from "./ios-BQzvJlzw.mjs";
8
- import { c as detectXcodeMajorAsync } from "./xcode-CiIIDnuD.mjs";
9
- import { s as offloadCheck } from "./client-BQsmyp_-.mjs";
10
- import { l as inspectBuildMachines, p as inspectDeviceHostMachines } from "./selection-D5cxEl3t.mjs";
11
- import { r as maintenanceStatus, t as maintenanceLine } from "./status-Fect2w9R.mjs";
12
- import { a as writeIgnoreDirs, c as recordDoctorRun, i as watchedCheckouts, n as inspectNestedWorktrees, r as nestedWorktreeFinding } from "./doctor-watchman-BovI1y3-.mjs";
13
- import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-Bm8TVpGn.mjs";
14
- import { h as resolveDeviceType, v as resolveRuntime } from "./support-qKcbgmI5.mjs";
1
+ import { Z as doctorIo, _ as loadConfig$1, p as getProject } from "./config-BktkY_zC.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
3
+ import { Nt as repoRoot, R as projectSettingsContextAsync } from "./settings-CosW5X-S.mjs";
4
+ import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-BUu6Is4k.mjs";
5
+ import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-B5vygTiD.mjs";
6
+ import { a as inspectBudget, hr as inspectWatchmanMemory, n as budgetLine, yr as memorySweepIsScoped } from "./budget-k2mZGvvk.mjs";
7
+ import { H as readMemoryCulpritsAsync, V as memoryCulpritFindings, f as listAllIosSimsAsync, h as listIosRuntimesAsync, l as iosRuntimeMatches, x as pickDefaultIosCreation } from "./ios-WxpDJ5T1.mjs";
8
+ import { I as detectXcodeMajorAsync } from "./toolchain-J4J8MrAr.mjs";
9
+ import { s as offloadCheck } from "./client-D9CaRks-.mjs";
10
+ import { d as inspectBuildMachines, g as inspectDeviceHostMachines } from "./selection-BNPBZ6T5.mjs";
11
+ import { r as maintenanceStatus, t as maintenanceLine } from "./status-CRXz-Gtj.mjs";
12
+ import { a as writeIgnoreDirs, c as recordDoctorRun, i as watchedCheckouts, n as inspectNestedWorktrees, r as nestedWorktreeFinding } from "./doctor-watchman-BStK05nt.mjs";
13
+ import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-OnwP94ne.mjs";
14
+ import { h as resolveDeviceType, v as resolveRuntime } from "./support-CVOCp0Ft.mjs";
15
15
  import { isJsonObject, maintenanceNdjsonFile, readHostedAppMetadata, readHostedSessions } from "@stim-cli/core/state";
16
16
  import { dirname, join, sep } from "path";
17
17
  import chalk from "chalk";
@@ -1,2 +1,2 @@
1
- import { a as readDoctorReport, i as parseDoctorPlatform, n as doctorCommand, o as shadowedStimFinding, r as doctorSuccessLines, s as toolchainReport, t as applySandboxFix } from "./doctor-k3P3PizH.mjs";
1
+ import { a as readDoctorReport, i as parseDoctorPlatform, n as doctorCommand, o as shadowedStimFinding, r as doctorSuccessLines, s as toolchainReport, t as applySandboxFix } from "./doctor-Bhg1ii70.mjs";
2
2
  export { applySandboxFix, doctorCommand as default, doctorSuccessLines, parseDoctorPlatform, readDoctorReport, shadowedStimFinding, toolchainReport };
@@ -1,29 +1,28 @@
1
1
  import { C as reportSignal, T as trackReportResource, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { i as sharedBuildCache, u as workspaceDerivedData } from "./paths-DQtTgsBf.mjs";
3
- import { _ as loadConfig$1, nt as realIo, s as configCorruptRepair, u as getConcurrencyLimits } from "./config-BZhXY15H.mjs";
4
- import { d as quotedPath, u as plural } from "./command-output-BBvS1H6v.mjs";
2
+ import { T as workspaceDerivedData, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { _ as loadConfig$1, it as realIo, s as configCorruptRepair, u as getConcurrencyLimits } from "./config-BktkY_zC.mjs";
4
+ import { d as quotedPath, u as plural } from "./command-output-BF5AR2dL.mjs";
5
5
  import { l as gitQuietAsync, o as git } from "./operation-exec-CUZifp6Z.mjs";
6
- import { r as readWorkspaceState$1 } from "./workspace-state-CPSp3mav.mjs";
7
- import { $ as settingOrigin, Dt as listWorktreesAsync, E as iosSimSlimProfileSetting, G as resolveAndroidLayout, H as remoteAndroidSetting, Ht as filesystemDevice, Kt as temporaryRoot, L as projectSettingsContext, Lt as resolveSourceCheckoutAsync, Nt as repoRoot, O as mergeSettingsLayers, Pt as repoRootAsync, T as iosSimSlimDefaultSetting, Ut as makeTemporaryDirectory, W as remoteIosSetting, X as resolveSettings, a as SETTING_SHAPE_REMEDY, at as unknownSettingKeys, gt as dirtyFingerprintFiles, i as SETTINGS_WITH_RESOLVE_TIME_FALLBACK, kt as locallyKnownUpstreamAsync, m as defaultAndroidLayout, nt as settingValueAt, ot as webSettings, q as resolveIosProjectDir, r as PATH_SETTINGS, rt as settingsLayers, tt as settingShapeErrors, yt as gitCommonDirAsync } from "./settings-B5tCoq9N.mjs";
8
- import { C as resolvePackageJson, _ as appProjectProblem, b as isPackageResolvable, v as detectIsExpo } from "./project-BiC68mIp.mjs";
9
- import { ft as POOL_SETTING_REMEDY, k as hostSystemImageArch, o as androidHome, vt as parkedMaxSetting } from "./android-Cjcj8MCw.mjs";
10
- import { Jn as providerFromConfig, Un as checkEasAuth$1, Wt as readInstalledEasCliVersionAsync, Xn as resolveEasCliBin, ar as easCliUpgradeRemedy, ir as easCliSupport, qn as ownerFromConfig, rr as MIN_EAS_CLI_SIMULATOR_VERSION } from "./budget-HyShrIpL.mjs";
11
- import { R as listBuildSlots } from "./workspaces-C9w4aeXF.mjs";
12
- import { N as listBuildLocks } from "./activity-BpjwrQXU.mjs";
13
- import { d as fingerprintProject, o as diffFingerprintSources } from "./build-cache-CKCzxzxA.mjs";
14
- import { L as readHostMemoryPressureAsync, N as hostMemoryPressureAdvice } from "./ios-BQzvJlzw.mjs";
6
+ import { $ as settingOrigin, Dt as listWorktreesAsync, E as iosSimSlimProfileSetting, G as resolveAndroidLayout, H as remoteAndroidSetting, Ht as filesystemDevice, Kt as temporaryRoot, L as projectSettingsContext, Lt as resolveSourceCheckoutAsync, Nt as repoRoot, O as mergeSettingsLayers, Pt as repoRootAsync, T as iosSimSlimDefaultSetting, Ut as makeTemporaryDirectory, W as remoteIosSetting, X as resolveSettings, a as SETTING_SHAPE_REMEDY, at as unknownSettingKeys, gt as dirtyFingerprintFiles, i as SETTINGS_WITH_RESOLVE_TIME_FALLBACK, kt as locallyKnownUpstreamAsync, m as defaultAndroidLayout, nt as settingValueAt, ot as webSettings, q as resolveIosProjectDir, r as PATH_SETTINGS, rt as settingsLayers, tt as settingShapeErrors, yt as gitCommonDirAsync } from "./settings-CosW5X-S.mjs";
7
+ import { C as resolvePackageJson, _ as appProjectProblem, b as isPackageResolvable, v as detectIsExpo } from "./project-BUu6Is4k.mjs";
8
+ import { ft as POOL_SETTING_REMEDY, k as hostSystemImageArch, o as androidHome, vt as parkedMaxSetting } from "./android-DTAcRwBC.mjs";
9
+ import { Jt as readInstalledEasCliVersionAsync, Qn as providerFromConfig, Zn as ownerFromConfig, cr as easCliSupport, er as resolveEasCliBin, lr as easCliUpgradeRemedy, qn as checkEasAuth$1, sr as MIN_EAS_CLI_SIMULATOR_VERSION } from "./budget-k2mZGvvk.mjs";
10
+ import { R as listBuildSlots } from "./workspaces-g2lhdBXF.mjs";
11
+ import { N as listBuildLocks } from "./activity-Lnb_EoRY.mjs";
12
+ import { o as diffFingerprintSources, p as fingerprintProject } from "./build-cache-DrXNCy3T.mjs";
13
+ import { P as hostMemoryPressureAdvice, R as readHostMemoryPressureAsync } from "./ios-WxpDJ5T1.mjs";
15
14
  import { p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-DHm_U5gv.mjs";
16
- import { i as projectCmakeLauncher } from "./ccache-h1FKhZeg.mjs";
17
- import { x as podInstallCommand } from "./xcode-CiIIDnuD.mjs";
18
- import { g as androidPathRoomRemedy, i as ccacheEnabled, l as androidSdkRefusal, m as androidPathRoomMessage, p as androidPathRoom, t as apkOutputsDir } from "./react-native-build-CwZB-agu.mjs";
19
- import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-ZYaRALv5.mjs";
20
- import { t as readDoctorFingerprint } from "./doctor-fingerprint-zlujA1Gs.mjs";
15
+ import { i as projectCmakeLauncher } from "./ccache-Bx5TbxwG.mjs";
16
+ import { Y as podInstallCommand } from "./toolchain-J4J8MrAr.mjs";
17
+ import { g as androidPathRoomRemedy, i as ccacheEnabled, l as androidSdkRefusal, m as androidPathRoomMessage, p as androidPathRoom, t as apkOutputsDir } from "./react-native-build-oNwqF5Wb.mjs";
18
+ import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-DCSvUF0l.mjs";
19
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-D3a04Mhu.mjs";
21
20
  import { i as probeSigningIdentities } from "./ios-signing-4c_qXvQm.mjs";
22
21
  import { a as findChrome, t as CHROME_INSTALL_REMEDY } from "./chrome-BvV8ssI3.mjs";
23
- import { i as installedNpmTreeIsValidAsync, n as hasInstalledDependencies, t as dependencyState } from "./dependency-state-BwNCYG5Q.mjs";
24
- import { n as simslimIsOnPath } from "./simslim-BjxszUAb.mjs";
25
- import { t as MIN_EAS_CLI_BUILD_DOWNLOAD_VERSION } from "./eas-build-CyDKNTBP.mjs";
26
- import { r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-BVqh2Zep.mjs";
22
+ import { i as installedNpmTreeIsValidAsync, n as hasInstalledDependencies, t as dependencyState } from "./dependency-state-DFB41vfr.mjs";
23
+ import { n as simslimIsOnPath } from "./simslim-Bax1qcxu.mjs";
24
+ import { t as MIN_EAS_CLI_BUILD_DOWNLOAD_VERSION } from "./eas-build-Dsj93iM9.mjs";
25
+ import { r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-BTVhZ0Qs.mjs";
27
26
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync } from "node:fs";
28
27
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
29
28
  import { LAST_BUILD_KEYS, isJsonObject, readBuildHistory, readJsonObject, readStats, settingDefinition } from "@stim-cli/core/state";
@@ -874,8 +873,9 @@ async function reactNativeDoctorFindings({ root: projectRoot, settings: projectS
874
873
  readEasCliVersion: () => remoteVersion
875
874
  })).filter((remoteFinding) => remoteFinding !== null);
876
875
  const easBuildDownloadFinding = await projectEasBuildDownloadFinding(projectRoot, remoteBackends, lookupEasCli, options.operation);
876
+ const appProjectFinding = checkAppProject(projectRoot);
877
877
  return [
878
- checkAppProject(projectRoot),
878
+ appProjectFinding,
879
879
  checkIosHost(platform, host),
880
880
  checkXcodeEnvLineEndings(projectRoot, platform, host),
881
881
  ...checkStorageLayout(projectRoot, {
@@ -899,7 +899,8 @@ async function reactNativeDoctorFindings({ root: projectRoot, settings: projectS
899
899
  easFinding,
900
900
  easBuildDownloadFinding,
901
901
  await readOffloadCandidate(tailnetStatus, now(), host),
902
- ...remoteFindings
902
+ ...remoteFindings,
903
+ appProjectFinding ? null : checkReadinessMarkers(projectRoot)
903
904
  ].filter((value) => Boolean(value));
904
905
  }
905
906
  function checkAndroidPathRoom(projectRoot, platform, host, hostArch = process.arch) {
@@ -954,6 +955,54 @@ function checkAppProject(projectRoot) {
954
955
  if (problem.kind === "not-an-app") result.code = "not-an-app";
955
956
  return result;
956
957
  }
958
+ const READINESS_MARKER = "[stim:readiness]";
959
+ const READINESS_SCAN_LIMIT = 5e3;
960
+ const READINESS_SKIPPED_DIRS = /* @__PURE__ */ new Set([
961
+ "node_modules",
962
+ "ios",
963
+ "android",
964
+ "macos",
965
+ "windows",
966
+ "Pods",
967
+ "build",
968
+ "dist",
969
+ "web-build",
970
+ "coverage"
971
+ ]);
972
+ const JS_SOURCE = /\.[cm]?[jt]sx?$/;
973
+ function hasReadinessMarker(projectRoot) {
974
+ const dirs = [projectRoot];
975
+ let scanned = 0;
976
+ for (let dir = dirs.pop(); dir !== void 0; dir = dirs.pop()) {
977
+ let entries;
978
+ try {
979
+ entries = readdirSync$1(dir, { withFileTypes: true });
980
+ } catch {
981
+ continue;
982
+ }
983
+ for (const entry of entries) {
984
+ if (entry.name.startsWith(".")) continue;
985
+ const path = join$1(dir, entry.name);
986
+ if (entry.isDirectory()) {
987
+ if (!READINESS_SKIPPED_DIRS.has(entry.name)) dirs.push(path);
988
+ continue;
989
+ }
990
+ if (!entry.isFile() || !JS_SOURCE.test(entry.name)) continue;
991
+ if (++scanned > READINESS_SCAN_LIMIT) return null;
992
+ try {
993
+ if (readFileSync$1(path, "utf-8").includes(READINESS_MARKER)) return true;
994
+ } catch {}
995
+ }
996
+ }
997
+ return false;
998
+ }
999
+ function checkReadinessMarkers(projectRoot) {
1000
+ if (hasReadinessMarker(projectRoot) !== false) return null;
1001
+ return {
1002
+ code: "readiness-markers-missing",
1003
+ ...finding("note", "The app does not report readiness to Stim", `No \`${READINESS_MARKER}\` marker appears in this app's JavaScript or TypeScript sources outside node_modules. A debug \`stim ios\` or \`stim android\` launch then ends shortly after the app's JavaScript starts running, before the app is usable, and a later startup error shows only in \`stim logs --errors\`.`, "In debug builds, log `[stim:readiness] pending` from the first module the app's entry loads, before the root component, and `[stim:readiness] ready` once the app is usable. `stim guide lifecycle readiness` has the code.")
1004
+ };
1005
+ }
957
1006
  function agentDeviceIsOnPath() {
958
1007
  try {
959
1008
  return Boolean(getExecutor().findExecutable("agent-device"));
@@ -1,14 +1,20 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
+ import { setPriority } from "node:os";
2
3
  import { fileURLToPath } from "node:url";
3
4
  //#region src/doctor-fingerprint.ts
4
- async function readDoctorFingerprint(operation, request) {
5
+ async function readDoctorFingerprint(operation, request, { lowPriority = false } = {}) {
5
6
  const output = await getExecutor().runFileAsync(process.execPath, [fileURLToPath(new URL("../dist/doctor-fingerprint.mjs", import.meta.url))], {
6
7
  cwd: operation.cwd,
7
8
  env: Object.fromEntries(Object.entries(operation.env).filter((entry) => entry[1] !== void 0)),
8
9
  input: JSON.stringify(request),
9
10
  timeoutMs: 6e4,
10
11
  killSignal: "SIGKILL",
11
- signal: operation.signal
12
+ signal: operation.signal,
13
+ ...lowPriority ? { onSpawn: (child) => {
14
+ try {
15
+ if (child.pid) setPriority(child.pid, 10);
16
+ } catch {}
17
+ } } : {}
12
18
  });
13
19
  return JSON.parse(output);
14
20
  }
@@ -1,4 +1,4 @@
1
- import { d as fingerprintProject } from "./build-cache-CKCzxzxA.mjs";
1
+ import { p as fingerprintProject } from "./build-cache-DrXNCy3T.mjs";
2
2
  import * as fingerprint from "@expo/fingerprint";
3
3
  //#region bin/doctor-fingerprint.ts
4
4
  let input = "";
@@ -1,8 +1,8 @@
1
- import { E as upsertProject, O as withConfigLockAsync$1, d as getConfigDir, p as getProject } from "./config-BZhXY15H.mjs";
1
+ import { E as upsertProject, O as withConfigLockAsync$1, d as getConfigDir, p as getProject } from "./config-BktkY_zC.mjs";
2
2
  import { l as gitQuietAsync } from "./operation-exec-CUZifp6Z.mjs";
3
- import { Dt as listWorktreesAsync, Pt as repoRootAsync } from "./settings-B5tCoq9N.mjs";
4
- import { f as projectRegistry } from "./project-BiC68mIp.mjs";
5
- import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-BMCA1gdO.mjs";
3
+ import { Dt as listWorktreesAsync, Pt as repoRootAsync } from "./settings-CosW5X-S.mjs";
4
+ import { f as projectRegistry } from "./project-BUu6Is4k.mjs";
5
+ import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-B5vygTiD.mjs";
6
6
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
7
7
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
8
8
  import { isJsonObject } from "@stim-cli/core/state";
@@ -1,7 +1,7 @@
1
1
  import { D as ownership_claim_exports, c as throwIfCancelled, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { a as killOnAbort, r as childEnvironment } from "./operation-exec-CUZifp6Z.mjs";
3
- import { Xn as resolveEasCliBin, ar as easCliUpgradeRemedy, er as remoteCliInvocation, ir as easCliSupport } from "./budget-HyShrIpL.mjs";
4
- import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-BpjwrQXU.mjs";
3
+ import { cr as easCliSupport, er as resolveEasCliBin, ir as remoteCliInvocation, lr as easCliUpgradeRemedy } from "./budget-k2mZGvvk.mjs";
4
+ import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-Lnb_EoRY.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { existsSync, realpathSync, statSync } from "node:fs";
7
7
  //#region src/engine/eas-build.ts
@@ -1,15 +1,15 @@
1
1
  import { c as throwIfCancelled, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { _ as loadConfig$1, p as getProject } from "./config-BZhXY15H.mjs";
2
+ import { _ as loadConfig$1, p as getProject } from "./config-BktkY_zC.mjs";
3
3
  import { r as childEnvironment } from "./operation-exec-CUZifp6Z.mjs";
4
- import { lt as detectProviders, ut as planMetroReach } from "./settings-B5tCoq9N.mjs";
5
- import { M as readMetroTunnel, P as readRemoteSession } from "./project-BiC68mIp.mjs";
6
- import { Gn as isEasAuthFailureText, Wt as readInstalledEasCliVersionAsync, Xn as resolveEasCliBin, ir as easCliSupport, nr as MIN_EAS_CLI_DEVICE_VERSION, rr as MIN_EAS_CLI_SIMULATOR_VERSION, s as peekBudget, tr as remoteCommand } from "./budget-HyShrIpL.mjs";
7
- import { L as readHostMemoryPressureAsync } from "./ios-BQzvJlzw.mjs";
8
- import { f as hostingMachines, i as namedBuildMachine, s as resolveBuildMachine } from "./selection-D5cxEl3t.mjs";
9
- import { c as call, l as connectHost, p as requireHostedAppMode } from "./hosted-client-rsRqysJc.mjs";
10
- import { c as writeHostedNativeAsync, r as readHostedNative } from "./ios-state-CT9nV5SP.mjs";
11
- import { i as prepareHostedNative } from "./hosted-native-BxTizGU2.mjs";
12
- import { c as peekDeviceSlots } from "./device-capacity-ZYaRALv5.mjs";
4
+ import { lt as detectProviders, ut as planMetroReach } from "./settings-CosW5X-S.mjs";
5
+ import { M as readMetroTunnel, P as readRemoteSession } from "./project-BUu6Is4k.mjs";
6
+ import { Jt as readInstalledEasCliVersionAsync, Yn as isEasAuthFailureText, ar as remoteCommand, cr as easCliSupport, er as resolveEasCliBin, or as MIN_EAS_CLI_DEVICE_VERSION, s as peekBudget, sr as MIN_EAS_CLI_SIMULATOR_VERSION } from "./budget-k2mZGvvk.mjs";
7
+ import { R as readHostMemoryPressureAsync } from "./ios-WxpDJ5T1.mjs";
8
+ import { c as resolveBuildMachine, h as hostingMachines, i as namedBuildMachine } from "./selection-BNPBZ6T5.mjs";
9
+ import { c as call, l as connectHost, p as requireHostedAppMode } from "./hosted-client-fHO8yqzc.mjs";
10
+ import { c as writeHostedNativeAsync, r as readHostedNative } from "./ios-state-Cw7-WQf2.mjs";
11
+ import { i as prepareHostedNative } from "./hosted-native-CpDB3-PO.mjs";
12
+ import { c as peekDeviceSlots } from "./device-capacity-DCSvUF0l.mjs";
13
13
  import { ambientEnv } from "@stim-cli/core";
14
14
  import { automaticMachineEnabled, isJsonObject, machineCapacity, parseHostedChoice, parseHostedNativeOffer } from "@stim-cli/core/state";
15
15
  //#region src/device-host/placement.ts
@@ -1,9 +1,9 @@
1
1
  import { C as reportSignal, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { l as workspaceAgentDeviceDir, v as withDirLock$1, y as withDirLockAsync$1 } from "./paths-DQtTgsBf.mjs";
3
- import { G as projectDeviceSlots, V as deviceSlotKey } from "./config-BZhXY15H.mjs";
4
- import { a as formatElapsed, o as formatLongDuration, r as clockTime, u as plural } from "./command-output-BBvS1H6v.mjs";
5
- import { n as isInsideProject } from "./metro-1pJgCX4U.mjs";
6
- import { r as cdpEndpoint } from "./state-DMRNP7-4.mjs";
2
+ import { M as withDirLock$1, N as withDirLockAsync$1, w as workspaceAgentDeviceDir } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { G as projectDeviceSlots, V as deviceSlotKey } from "./config-BktkY_zC.mjs";
4
+ import { a as formatElapsed, o as formatLongDuration, r as clockTime, u as plural } from "./command-output-BF5AR2dL.mjs";
5
+ import { n as isInsideProject } from "./metro-CjC10t6E.mjs";
6
+ import { r as cdpEndpoint } from "./state-C1i2nMOP.mjs";
7
7
  import { accessSync, constants, existsSync, mkdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
8
8
  import { delimiter, dirname, join, resolve } from "node:path";
9
9
  import { workspaceId } from "@stim-cli/core";
@@ -1,12 +1,12 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { H as deviceSlotPlatforms, V as deviceSlotKey, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { v as launchErrorPreview } from "./command-output-BBvS1H6v.mjs";
4
- import { r as readWorkspaceState$1 } from "./workspace-state-CPSp3mav.mjs";
5
- import { I as readWorkspaceLaunches } from "./project-BiC68mIp.mjs";
6
- import { o as androidHome, u as androidToolCwd } from "./android-Cjcj8MCw.mjs";
7
- import { d as resolveProjectMetro } from "./metro-1pJgCX4U.mjs";
8
- import { i as parseLogcatLine, n as androidLogGroups, r as isAndroidCrashText } from "./android-saBeB4lr.mjs";
9
- import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BpjwrQXU.mjs";
2
+ import { r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { H as deviceSlotPlatforms, V as deviceSlotKey, p as getProject } from "./config-BktkY_zC.mjs";
4
+ import { v as launchErrorPreview } from "./command-output-BF5AR2dL.mjs";
5
+ import { I as readWorkspaceLaunches } from "./project-BUu6Is4k.mjs";
6
+ import { o as androidHome, u as androidToolCwd } from "./android-DTAcRwBC.mjs";
7
+ import { d as resolveProjectMetro } from "./metro-CjC10t6E.mjs";
8
+ import { i as parseLogcatLine, n as androidLogGroups, r as isAndroidCrashText } from "./android-B5P81yI-.mjs";
9
+ import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Lnb_EoRY.mjs";
10
10
  import { r as deviceConsoleLevel } from "./ios-device-B6HK951C.mjs";
11
11
  import { createHash, randomUUID } from "node:crypto";
12
12
  import { existsSync, readFileSync, renameSync } from "node:fs";
@@ -1,3 +1,3 @@
1
- import { At as findStaleDeviceRecords, Ct as deleteParkedSims, Et as describeUnverifiableDevices, Tt as describeParkedSims, jt as findStaleProjectDevices, kt as findOrphanedDevices, ot as selectCaches } from "./budget-HyShrIpL.mjs";
2
- import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-B9jcnmIk.mjs";
1
+ import { At as describeUnverifiableDevices, Dt as deleteParkedSims, Ft as findStaleProjectDevices, Nt as findOrphanedDevices, Pt as findStaleDeviceRecords, kt as describeParkedSims, ut as selectCaches } from "./budget-k2mZGvvk.mjs";
2
+ import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-ldgr-hXU.mjs";
3
3
  export { collectGcReport, gcCommand as default, deleteParkedSims, describeParkedSims, describeUnverifiableDevices, executeGc, findOrphanedDevices, findStaleDeviceRecords, findStaleProjectDevices, formatGcReport, readGcReport, runGc, selectCaches, withGcMaintenanceClaim };