stim 1.24.0 → 1.25.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 (143) hide show
  1. package/dist/{acquire-artifact-CEs02U2o.mjs → acquire-artifact-zA4S7RHE.mjs} +1 -1
  2. package/dist/{act-Cyvm8xYc.mjs → act-BbHS3oV8.mjs} +12 -12
  3. package/dist/{activity-Dq3ZcdD8.mjs → activity-BpjwrQXU.mjs} +3 -3
  4. package/dist/{agent-device-usage-output-CccomeE0.mjs → agent-device-usage-output-Bnkerfod.mjs} +3 -3
  5. package/dist/{android-BZppyPe_.mjs → android-BGwuK3Mc.mjs} +41 -36
  6. package/dist/{android-DcztblCT.mjs → android-CNZgRC-4.mjs} +5 -5
  7. package/dist/{android-882m4hxX.mjs → android-Cjcj8MCw.mjs} +2 -2
  8. package/dist/{android-cas-BtCOrNqb.mjs → android-cas-BVqh2Zep.mjs} +1 -1
  9. package/dist/{android-project-DVWyCbWU.d.mts → android-project-CTYaETc0.d.mts} +6 -2
  10. package/dist/{android-CX5IcRuf.mjs → android-saBeB4lr.mjs} +1 -1
  11. package/dist/api.d.mts +1 -1
  12. package/dist/api.mjs +22 -22
  13. package/dist/{artifact-BR5VNArK.mjs → artifact-Co8zixVx.mjs} +14 -13
  14. package/dist/{artifact-Bdt_n9Jc.mjs → artifact-DN8JNwqS.mjs} +13 -13
  15. package/dist/{browser-web-ycg9qWB8.mjs → browser-web-CCgZsHmI.mjs} +10 -10
  16. package/dist/{budget-dPGuhNai.mjs → budget-HyShrIpL.mjs} +62 -21
  17. package/dist/{build-CaF574eS.mjs → build-CAiw8Ezm.mjs} +22 -21
  18. package/dist/{build-cache-HFUQ9eLz.mjs → build-cache-CKCzxzxA.mjs} +22 -4
  19. package/dist/{build-plan-JsDUq4w1.mjs → build-plan-zCuHGlA8.mjs} +5 -5
  20. package/dist/{ccache-CCn1S6qG.mjs → ccache-h1FKhZeg.mjs} +3 -3
  21. package/dist/{cli-xqAidP7O.mjs → cli-C4w607Pz.mjs} +17 -17
  22. package/dist/cli.mjs +1 -1
  23. package/dist/{client-18-ZowoT.mjs → client-BQsmyp_-.mjs} +26 -17
  24. package/dist/collector-run.mjs +2 -2
  25. package/dist/{command-output-DxC0k2rk.mjs → command-output-BBvS1H6v.mjs} +1 -1
  26. package/dist/{dependency-state-C56ll9hY.mjs → dependency-state-BwNCYG5Q.mjs} +1 -1
  27. package/dist/{dev-client-w_fok0Ek.mjs → dev-client-CHoXXZeg.mjs} +2 -2
  28. package/dist/{device-BktRGdjS.mjs → device-B9FqTBYW.mjs} +64 -33
  29. package/dist/{device-4RUugw5X.mjs → device-F5-4z9ef.mjs} +13 -13
  30. package/dist/{device-capacity-Ic-kdmEV.mjs → device-capacity-ZYaRALv5.mjs} +7 -7
  31. package/dist/device-host-worker.mjs +10 -10
  32. package/dist/{device-ios-DzpSlZyd.mjs → device-ios-DkHBrmvH.mjs} +27 -16
  33. package/dist/{device-lease-run-DUtkbqBQ.mjs → device-lease-run-ogEeJ62K.mjs} +4 -4
  34. package/dist/{device-pool-CgBHk401.mjs → device-pool-BIg8MU8l.mjs} +2 -2
  35. package/dist/{doctor-BZ6oxNum.mjs → doctor-A_Nr_fDe.mjs} +1 -1
  36. package/dist/{doctor-C33AzVfR.mjs → doctor-Bm8TVpGn.mjs} +27 -21
  37. package/dist/doctor-fingerprint.mjs +1 -1
  38. package/dist/{doctor-DZgpqR6J.mjs → doctor-k3P3PizH.mjs} +12 -12
  39. package/dist/{doctor-watchman-B453A231.mjs → doctor-watchman-BovI1y3-.mjs} +3 -3
  40. package/dist/{eas-build-CxKUNHsb.mjs → eas-build-CyDKNTBP.mjs} +2 -2
  41. package/dist/{eas-fallback-LMxk9Kw0.mjs → eas-fallback-gaZi-dJL.mjs} +12 -11
  42. package/dist/{eas-session-ledger-Ck6YXPAO.mjs → eas-session-ledger-BMCA1gdO.mjs} +3 -3
  43. package/dist/{error-diagnostics-BkKCZq4P.mjs → error-diagnostics-B1Mj_-7h.mjs} +7 -7
  44. package/dist/{errors-ccaPc4ox.mjs → errors-DHm_U5gv.mjs} +2 -1
  45. package/dist/{gc-yVKpAOKM.mjs → gc-B9jcnmIk.mjs} +15 -15
  46. package/dist/{gc-DDWEAj0w.mjs → gc-eaz403W6.mjs} +2 -2
  47. package/dist/{guide-Bggftwc5.mjs → guide-DR0K0xW9.mjs} +113 -37
  48. package/dist/{hosted-android-D4dweBof.mjs → hosted-android-Bvb2-ZxD.mjs} +3 -3
  49. package/dist/{hosted-client-BBTVe3X6.mjs → hosted-client-rsRqysJc.mjs} +2 -2
  50. package/dist/{hosted-ios-Sn0djzg8.mjs → hosted-ios-RtVcJH3u.mjs} +1 -1
  51. package/dist/{hosted-logs-CYIZ5ubJ.mjs → hosted-logs-CWKGYWNX.mjs} +4 -4
  52. package/dist/{hosted-macos-CXjsUNBR.mjs → hosted-macos-d0pv9Tth.mjs} +5 -5
  53. package/dist/{hosted-native-Doxbfzem.mjs → hosted-native-BxTizGU2.mjs} +6 -6
  54. package/dist/{idle-shutdown-BInjLKqm.mjs → idle-shutdown-BIyfl0Zj.mjs} +6 -6
  55. package/dist/{ios-CVUFFZ6C.mjs → ios-BQzvJlzw.mjs} +59 -11
  56. package/dist/{ios-B1FXRCMX.mjs → ios-BRVM8b0P.mjs} +37 -32
  57. package/dist/{ios-BItP6lkn.mjs → ios-Dvt97HgQ.mjs} +8 -8
  58. package/dist/{ios-device-BI38NFFH.mjs → ios-device-CKSvk0bu.mjs} +1 -1
  59. package/dist/{ios-project-KYqeJURj.mjs → ios-project-DCUDo06I.mjs} +4 -4
  60. package/dist/{ios-state-DlElquYD.mjs → ios-state-CT9nV5SP.mjs} +1 -1
  61. package/dist/{js-swap-BvrQvXHY.mjs → js-swap-Z9HbC4cj.mjs} +4 -4
  62. package/dist/{launch-SfzGH_s9.mjs → launch-D0lPvFFu.mjs} +16 -16
  63. package/dist/{launch-BVlyQw3T.mjs → launch-DscF1QfM.mjs} +35 -35
  64. package/dist/{logs-DXE32kyb.mjs → logs-BsIRre8x.mjs} +7 -7
  65. package/dist/{logs-ovlU7m7N.mjs → logs-Crs9y34Z.mjs} +5 -5
  66. package/dist/{macos-B3BveDrU.mjs → macos-CcUlJPMu.mjs} +1 -1
  67. package/dist/{macos-CCfhb-jT.mjs → macos-D477nfzH.mjs} +17 -17
  68. package/dist/macos-run.mjs +1 -1
  69. package/dist/maintenance-run.mjs +5 -5
  70. package/dist/{metro-Bu8LBfzS.mjs → metro-1pJgCX4U.mjs} +1 -1
  71. package/dist/{metro-gateway-DtsOy-0P.mjs → metro-gateway-Bp9gJQAN.mjs} +1 -1
  72. package/dist/{named-ports-BWDuU5oQ.mjs → named-ports-BVbn8SvC.mjs} +1 -1
  73. package/dist/{native-android-96BBizbq.mjs → native-android-BvMizJn1.mjs} +14 -14
  74. package/dist/{native-gradle-artifact-inputs-BcLYBZil.mjs → native-gradle-artifact-inputs-BJscK4vN.mjs} +3 -3
  75. package/dist/{native-run-BmH7U8pr.mjs → native-run-D5OJsGwA.mjs} +2 -2
  76. package/dist/{native-runtime-DgtJkzIa.mjs → native-runtime-B9w_Qyz3.mjs} +6 -6
  77. package/dist/{native-xcode-inputs-irplbQb0.mjs → native-xcode-inputs-Cv4l-obn.mjs} +1 -1
  78. package/dist/{native-xcode-ios-BY-6hh6M.mjs → native-xcode-ios-DGrg90hE.mjs} +17 -16
  79. package/dist/offload-worker.d.mts +5 -2
  80. package/dist/offload-worker.mjs +21 -20
  81. package/dist/{ownership-DxlZGDcV.mjs → ownership-jxxz-19m.mjs} +2 -2
  82. package/dist/{phone-reverses-BdsdesVF.mjs → phone-reverses-CYb7RRAx.mjs} +2 -2
  83. package/dist/{placement-log-DUvqqsB-.mjs → placement-log-DjOXJRIH.mjs} +1 -1
  84. package/dist/{plan-placement-4axc0Hs7.mjs → plan-placement-BqKgKHCi.mjs} +3 -3
  85. package/dist/{ports-D-E_OiAO.mjs → ports-DtS1Amb0.mjs} +2 -2
  86. package/dist/{prebuild-DmVCf5xb.mjs → prebuild-JUaqOLpc.mjs} +6 -6
  87. package/dist/{project-Dz-hWkb-.mjs → project-BiC68mIp.mjs} +14 -14
  88. package/dist/{react-native-android-DOinxgwB.mjs → react-native-android-DRYqoJc4.mjs} +23 -22
  89. package/dist/{react-native-build-AuCu-aAP.mjs → react-native-build-CwZB-agu.mjs} +6 -6
  90. package/dist/{react-native-doctor-2ivJUmwZ.mjs → react-native-doctor-BCrytK7h.mjs} +6 -6
  91. package/dist/{react-native-ios-D5zTIuH8.mjs → react-native-ios-Cr1buNFo.mjs} +18 -17
  92. package/dist/{recordings-CdPwYwvs.mjs → recordings-BaoQ0t-J.mjs} +1 -1
  93. package/dist/{reload-Ck9RJeSq.mjs → reload-Beftw2X3.mjs} +1 -1
  94. package/dist/{reload-C1TTVesC.mjs → reload-FbSgMF8x.mjs} +13 -13
  95. package/dist/{remote-DEZ7AOVq.mjs → remote-BuZj6AyU.mjs} +15 -6
  96. package/dist/{result-DqBrb12U.mjs → result-CR2vk2cj.mjs} +14 -14
  97. package/dist/{run-BIwoU44q.mjs → run-BtzE09Dl.mjs} +1 -1
  98. package/dist/{selection-BLtvaqxc.mjs → selection-D5cxEl3t.mjs} +2 -2
  99. package/dist/{server-bare-Z1ToVLPn.mjs → server-bare-CH9X0RLn.mjs} +55 -3
  100. package/dist/{server-command-C0pmjNdG.mjs → server-command-CaBbDNU2.mjs} +4 -4
  101. package/dist/server-expo-C16Zf2k7.mjs +2 -0
  102. package/dist/{server-expo-Tt_hLRpy.mjs → server-expo-Ck8EIidM.mjs} +8 -6
  103. package/dist/{settings-RKwY33wv.mjs → settings-B5tCoq9N.mjs} +58 -60
  104. package/dist/{settings-kkt0vP4w.mjs → settings-DzH9mGQZ.mjs} +1 -1
  105. package/dist/{settings-write--gj6MACV.mjs → settings-write-n0zwfohx.mjs} +3 -3
  106. package/dist/settings.schema.json +38 -0
  107. package/dist/{simslim-CdWKT3vA.mjs → simslim-BjxszUAb.mjs} +20 -5
  108. package/dist/{slot-launch-A1BgotaM.mjs → slot-launch-QeuJMlnJ.mjs} +5 -5
  109. package/dist/{stage-ERTMh88n.mjs → stage-D8xlRU2D.mjs} +1 -1
  110. package/dist/{start-Bmg_qmHi.mjs → start-C1JLjkNw.mjs} +1 -1
  111. package/dist/{start-BKGrEhzG.mjs → start-YMpNwLhh.mjs} +7 -7
  112. package/dist/{state-B1ig0Kqy.mjs → state-DMRNP7-4.mjs} +2 -2
  113. package/dist/{state-BfAltYJP.mjs → state-DPaM3u5K.mjs} +1 -1
  114. package/dist/{stats-B-ckuiUg.mjs → stats-CP7STzZw.mjs} +3 -3
  115. package/dist/{status-DfFp6a76.mjs → status-CRLiJ-O_.mjs} +19 -19
  116. package/dist/{status-Pw-807f0.mjs → status-cNw6i0_t.mjs} +1 -1
  117. package/dist/{status-watch-XC7F-AMf.mjs → status-watch-Bc2J4TZn.mjs} +4 -4
  118. package/dist/status-worker.mjs +1 -1
  119. package/dist/{stop-BFu7X_Do.mjs → stop-Br7LKxBE.mjs} +2 -2
  120. package/dist/{stop-DhclRwOO.mjs → stop-COP6PQqw.mjs} +4 -4
  121. package/dist/{stop-CL1kDHds.mjs → stop-Db9Kh-UA.mjs} +69 -50
  122. package/dist/supervisor-run.mjs +13 -13
  123. package/dist/{support-B3tzVhKn.mjs → support-Cxj9CmII.mjs} +4 -4
  124. package/dist/{support-B1W-hmC2.mjs → support-qKcbgmI5.mjs} +14 -11
  125. package/dist/{swiftpm-artifact-inputs-BWYPj9Sn.mjs → swiftpm-artifact-inputs-iY9fsmOc.mjs} +1 -1
  126. package/dist/{swiftpm-macos-BVCP5mO4.mjs → swiftpm-macos-Bp_sn9P4.mjs} +8 -8
  127. package/dist/{toolchain-BjgKdoEf.mjs → toolchain-DB1aeqxO.mjs} +1 -1
  128. package/dist/{toolchain-D3bmRMia.mjs → toolchain-VzLJzZ7O.mjs} +14 -3
  129. package/dist/{warm-progress-ol0ZypEu.mjs → warm-progress-BV3ZPmcY.mjs} +3 -3
  130. package/dist/{web-BH7peScT.mjs → web-B4Yjyt1G.mjs} +6 -6
  131. package/dist/web-DS4UDWvf.mjs +2 -0
  132. package/dist/web-run.mjs +3 -3
  133. package/dist/{workspace-state-CeBpIZgr.mjs → workspace-state-CPSp3mav.mjs} +1 -1
  134. package/dist/{workspaces-CSV2Orf4.mjs → workspaces-C9w4aeXF.mjs} +10 -10
  135. package/dist/{worktree-Dw8kfacb.mjs → worktree-CclFIe1Z.mjs} +25 -25
  136. package/dist/{worktree-DEDUzO_L.mjs → worktree-Ct9Gk3KL.mjs} +1 -1
  137. package/dist/{xcode-DHu41qQ4.mjs → xcode-CiIIDnuD.mjs} +4 -4
  138. package/package.json +7 -7
  139. package/shim/bundle-response.cjs +53 -1
  140. package/shim/bundle-response.d.cts +1 -1
  141. package/shim/expo-metro-config.cjs +23 -1
  142. package/dist/server-expo-CEntXzRw.mjs +0 -2
  143. package/dist/web-BdOFlTJr.mjs +0 -2
@@ -1,17 +1,17 @@
1
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-DxC0k2rk.mjs";
3
- import { L as projectSettingsContextAsync, Mt as repoRoot } from "./settings-RKwY33wv.mjs";
4
- import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-Dz-hWkb-.mjs";
5
- import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-Ck6YXPAO.mjs";
6
- import { a as inspectBudget, mr as memorySweepIsScoped, n as budgetLine, ur as inspectWatchmanMemory } from "./budget-dPGuhNai.mjs";
7
- import { B as readMemoryCulpritsAsync, f as listAllIosSimsAsync, h as listIosRuntimesAsync, l as iosRuntimeMatches, x as pickDefaultIosCreation, z as memoryCulpritFindings } from "./ios-CVUFFZ6C.mjs";
8
- import { c as detectXcodeMajorAsync } from "./xcode-DHu41qQ4.mjs";
9
- import { s as offloadCheck } from "./client-18-ZowoT.mjs";
10
- import { l as inspectBuildMachines, p as inspectDeviceHostMachines } from "./selection-BLtvaqxc.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
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-B453A231.mjs";
13
- import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-C33AzVfR.mjs";
14
- import { h as resolveDeviceType, v as resolveRuntime } from "./support-B1W-hmC2.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";
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,8 +1,8 @@
1
1
  import { E as upsertProject, O as withConfigLockAsync$1, d as getConfigDir, p as getProject } from "./config-BZhXY15H.mjs";
2
2
  import { l as gitQuietAsync } from "./operation-exec-CUZifp6Z.mjs";
3
- import { Et as listWorktreesAsync, Nt as repoRootAsync } from "./settings-RKwY33wv.mjs";
4
- import { f as projectRegistry } from "./project-Dz-hWkb-.mjs";
5
- import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-Ck6YXPAO.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";
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 { $n as remoteCliInvocation, Yn as resolveEasCliBin, ir as easCliUpgradeRemedy, rr as easCliSupport } from "./budget-dPGuhNai.mjs";
4
- import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-Dq3ZcdD8.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";
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
2
  import { _ as loadConfig$1, p as getProject } from "./config-BZhXY15H.mjs";
3
3
  import { r as childEnvironment } from "./operation-exec-CUZifp6Z.mjs";
4
- import { ct as detectProviders, lt as planMetroReach } from "./settings-RKwY33wv.mjs";
5
- import { M as readMetroTunnel, P as readRemoteSession } from "./project-Dz-hWkb-.mjs";
6
- import { Wn as isEasAuthFailureText, Wt as readInstalledEasCliVersionAsync, Yn as resolveEasCliBin, er as remoteCommand, nr as MIN_EAS_CLI_SIMULATOR_VERSION, rr as easCliSupport, s as peekBudget, tr as MIN_EAS_CLI_DEVICE_VERSION } from "./budget-dPGuhNai.mjs";
7
- import { I as readHostMemoryPressureAsync } from "./ios-CVUFFZ6C.mjs";
8
- import { f as hostingMachines, i as namedBuildMachine, s as resolveBuildMachine } from "./selection-BLtvaqxc.mjs";
9
- import { c as call, l as connectHost, p as requireHostedAppMode } from "./hosted-client-BBTVe3X6.mjs";
10
- import { c as writeHostedNativeAsync, r as readHostedNative } from "./ios-state-DlElquYD.mjs";
11
- import { i as prepareHostedNative } from "./hosted-native-Doxbfzem.mjs";
12
- import { c as peekDeviceSlots } from "./device-capacity-Ic-kdmEV.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";
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
@@ -219,10 +219,11 @@ function viaEas(code, reason, skipped) {
219
219
  skipped
220
220
  };
221
221
  }
222
- async function automaticDevicePlacement({ root, slot, platform, selectors, appMode, buildMachine, noWait, eas, signal }, { machines = () => hostingMachines(void 0, signal), read = readHostedNative, write = writeHostedNativeAsync, resume = prepareHostedNative, peek = () => peekDeviceSlots({
222
+ async function automaticDevicePlacement({ root, slot, platform, selectors, appMode, buildMachine, noWait, eas, signal, localSims }, { machines = () => hostingMachines(void 0, signal), read = readHostedNative, write = writeHostedNativeAsync, resume = prepareHostedNative, peek = () => peekDeviceSlots({
223
223
  platform,
224
224
  project: getProject(root),
225
- slot
225
+ slot,
226
+ ...localSims ? { sources: { sims: localSims } } : {}
226
227
  }), capacity = machineCapacity, memory = () => readHostMemoryPressureAsync(void 0, void 0, signal), probe = probeHost, budget = (projectRoot) => peekBudget(projectRoot, {}, ambientEnv(), signal) } = {}) {
227
228
  const recorded = read(root, platform, slot)[slot];
228
229
  if (recorded) {
@@ -1,9 +1,9 @@
1
1
  import { C as reportSignal, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { l as workspaceAgentDeviceDir, v as withDirLock$1, y as withDirLockAsync$1 } from "./paths-DQtTgsBf.mjs";
3
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-DxC0k2rk.mjs";
5
- import { n as isInsideProject } from "./metro-Bu8LBfzS.mjs";
6
- import { r as cdpEndpoint } from "./state-B1ig0Kqy.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";
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
2
  import { H as deviceSlotPlatforms, V as deviceSlotKey, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { v as launchErrorPreview } from "./command-output-DxC0k2rk.mjs";
4
- import { r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
5
- import { I as readWorkspaceLaunches } from "./project-Dz-hWkb-.mjs";
6
- import { o as androidHome, u as androidToolCwd } from "./android-882m4hxX.mjs";
7
- import { d as resolveProjectMetro } from "./metro-Bu8LBfzS.mjs";
8
- import { i as parseLogcatLine, n as androidLogGroups, r as isAndroidCrashText } from "./android-CX5IcRuf.mjs";
9
- import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Dq3ZcdD8.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";
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";
@@ -179,11 +179,12 @@ function metroStoreConfirmedRoot(line) {
179
179
  const root = line.slice(51).trim();
180
180
  return root === "" ? null : root;
181
181
  }
182
- function expoMetroStoreEnv({ root, storeRoot, adapterPath, existingOverride }) {
182
+ function expoMetroStoreEnv({ root, port, storeRoot, adapterPath, existingOverride }) {
183
183
  return {
184
184
  EXPO_OVERRIDE_METRO_CONFIG: adapterPath,
185
185
  STIM_METRO_STORE: storeRoot,
186
186
  STIM_PROJECT_ROOT: root,
187
+ STIM_METRO_PORT: String(port),
187
188
  ...existingOverride ? { STIM_EXPO_METRO_CONFIG: existingOverride } : {}
188
189
  };
189
190
  }
@@ -1,24 +1,24 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, c as throwIfCancelled, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, t as getExecutor, v as stopDeclaringSpawnsOn, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
3
3
  import { F as isOnMountedVolume, G as projectDeviceSlots, I as listMountedVolumes, L as measuredDirectorySizeAsync, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, S as removeProject, _ as loadConfig$1, d as getConfigDir, j as acquireAvdClaim } from "./config-BZhXY15H.mjs";
4
- import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-DxC0k2rk.mjs";
4
+ import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-BBvS1H6v.mjs";
5
5
  import { t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
6
- import { u as workspaceLastUsed } from "./workspace-state-CeBpIZgr.mjs";
7
- import { Et as listWorktreesAsync, It as resolveSourceCheckoutAsync } from "./settings-RKwY33wv.mjs";
8
- import { i as findProjectRoot$1, v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
9
- import { F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, ft as POOL_SETTING_REMEDY, h as avdNameAbsent, vt as parkedMaxSetting } from "./android-882m4hxX.mjs";
6
+ import { u as workspaceLastUsed } from "./workspace-state-CPSp3mav.mjs";
7
+ import { Dt as listWorktreesAsync, Lt as resolveSourceCheckoutAsync } from "./settings-B5tCoq9N.mjs";
8
+ import { i as findProjectRoot$1, v as detectIsExpo } from "./project-BiC68mIp.mjs";
9
+ import { F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, ft as POOL_SETTING_REMEDY, h as avdNameAbsent, vt as parkedMaxSetting } from "./android-Cjcj8MCw.mjs";
10
10
  import { n as forgetCreatedDeviceAsync, r as readCreatedDevices$1 } from "./created-devices-D2Aca-xu.mjs";
11
- import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-Ck6YXPAO.mjs";
12
- import { $ as includesArchives, At as findStaleDeviceRecords, C as collectIdleDevices, Ct as deleteParkedSims, D as idleDeviceLines, Dt as deviceSweepIsScoped, Et as describeUnverifiableDevices, Ft as deleteEasSessions, It as describeError, Jt as withEasProjectLock, Lt as withRemoteSessionGcLocks, Mt as unverifiedDeviceCommand, Nt as withAndroidAvdSizes, O as parseIdleDuration, Ot as eraseParkedDevices, Pt as collectEasSessionSweep, Q as emptyCaches, Rn as runProcessOperation, Sr as discoverCaches, St as deleteParkedAvds, _r as scopedMemoryReport, _t as collectInventory, at as previewScopedEmptying, bt as collectParkedAvds, ct as trimCaches, dr as memoryCacheKind, dt as deleteGradleVersions, et as includesParkedDevices, fr as memoryLines, ft as gradleVersionLines, gr as reclaimMemory, gt as getMachineCacheReport, hr as memoryWorkPending, it as planCacheEmptying, jt as findStaleProjectDevices, k as shutDownIdleDevices, kt as findOrphanedDevices, lr as collectMemoryReport, lt as collectGradleVersions, mr as memorySweepIsScoped, mt as includesGradleVersions, nt as includesWorkspaceOutputs, or as parseArchiveSelector, ot as selectCaches, pr as memoryScope, pt as gradleVersionsPending, rt as isWorkspacesScope, st as selectsBeyondCaches, tt as includesRecordings, vt as DEVICE_LIST_TIMEOUT_MS, w as collectIdleDevicesAsync, wr as sizeCaches, wt as deleteProjectDevices, xt as collectParkedSims, yr as phase, yt as collectDeviceLeases } from "./budget-dPGuhNai.mjs";
11
+ import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-BMCA1gdO.mjs";
12
+ import { $ as includesArchives, At as findStaleDeviceRecords, C as collectIdleDevices, Cr as discoverCaches, Ct as deleteParkedSims, D as idleDeviceLines, Dt as deviceSweepIsScoped, Et as describeUnverifiableDevices, Ft as deleteEasSessions, It as describeError, Jt as withEasProjectLock, Lt as withRemoteSessionGcLocks, Mt as unverifiedDeviceCommand, Nt as withAndroidAvdSizes, O as parseIdleDuration, Ot as eraseParkedDevices, Pt as collectEasSessionSweep, Q as emptyCaches, St as deleteParkedAvds, Tr as sizeCaches, _r as reclaimMemory, _t as collectInventory, at as previewScopedEmptying, br as phase, bt as collectParkedAvds, ct as trimCaches, dt as deleteGradleVersions, et as includesParkedDevices, fr as memoryCacheKind, ft as gradleVersionLines, gr as memoryWorkPending, gt as getMachineCacheReport, hr as memorySweepIsScoped, it as planCacheEmptying, jt as findStaleProjectDevices, k as shutDownIdleDevices, kt as findOrphanedDevices, lt as collectGradleVersions, mr as memoryScope, mt as includesGradleVersions, nt as includesWorkspaceOutputs, ot as selectCaches, pr as memoryLines, pt as gradleVersionsPending, rt as isWorkspacesScope, sr as parseArchiveSelector, st as selectsBeyondCaches, tt as includesRecordings, ur as collectMemoryReport, vr as scopedMemoryReport, vt as DEVICE_LIST_TIMEOUT_MS, w as collectIdleDevicesAsync, wt as deleteProjectDevices, xt as collectParkedSims, yt as collectDeviceLeases, zn as runProcessOperation } from "./budget-HyShrIpL.mjs";
13
13
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
14
- import { B as GC_OUTPUT, R as listBuildSlots, V as createGcResults, a as collectWorkspaceOutputs, c as listWorkspaceDirs, h as workspaceInUseAsync, i as collectOrphanedWorkspaces, l as rootPresence, n as WORKSPACE_OUTPUT_DIRS, o as deleteOrphanedWorkspaces, p as withIdleWorkspace, r as clearWorkspaceOutputs, s as isInsideWorkspaces, t as REBUILD_COST, u as sizeText } from "./workspaces-CSV2Orf4.mjs";
15
- import { N as listBuildLocks, k as removeExpiredLease } from "./activity-Dq3ZcdD8.mjs";
16
- import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-CVUFFZ6C.mjs";
17
- import { r as readCollectors } from "./ownership-DxlZGDcV.mjs";
18
- import { C as reclaimProject, S as describeDereferenced, T as sweepArchiveStaging, a as matchWorktreeEntry, b as TRASH_MANIFEST, v as TRASH_CLAIMS, w as deleteSelectedArchives, x as deleteTrashEntry } from "./worktree-Dw8kfacb.mjs";
19
- import { s as writeCacheFile } from "./warm-progress-ol0ZypEu.mjs";
20
- import { _ as collectWorktreeSweep, a as previewMaintenance, b as worktreeRemovalReason, c as deleteTempLeftovers, d as ARTIFACT_DIRS, f as appRoots, g as candidateRootsAsync, h as ownedDeviceUsage, l as tempLeftoverLines, o as triggeringRoot, p as finishedWorkspaces, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as removeWorktrees, y as worktreePullRequestNote } from "./act-Cyvm8xYc.mjs";
21
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-CccomeE0.mjs";
14
+ import { B as GC_OUTPUT, R as listBuildSlots, V as createGcResults, a as collectWorkspaceOutputs, c as listWorkspaceDirs, h as workspaceInUseAsync, i as collectOrphanedWorkspaces, l as rootPresence, n as WORKSPACE_OUTPUT_DIRS, o as deleteOrphanedWorkspaces, p as withIdleWorkspace, r as clearWorkspaceOutputs, s as isInsideWorkspaces, t as REBUILD_COST, u as sizeText } from "./workspaces-C9w4aeXF.mjs";
15
+ import { N as listBuildLocks, k as removeExpiredLease } from "./activity-BpjwrQXU.mjs";
16
+ import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-BQzvJlzw.mjs";
17
+ import { r as readCollectors } from "./ownership-jxxz-19m.mjs";
18
+ import { C as reclaimProject, S as describeDereferenced, T as sweepArchiveStaging, a as matchWorktreeEntry, b as TRASH_MANIFEST, v as TRASH_CLAIMS, w as deleteSelectedArchives, x as deleteTrashEntry } from "./worktree-CclFIe1Z.mjs";
19
+ import { s as writeCacheFile } from "./warm-progress-BV3ZPmcY.mjs";
20
+ import { _ as collectWorktreeSweep, a as previewMaintenance, b as worktreeRemovalReason, c as deleteTempLeftovers, d as ARTIFACT_DIRS, f as appRoots, g as candidateRootsAsync, h as ownedDeviceUsage, l as tempLeftoverLines, o as triggeringRoot, p as finishedWorkspaces, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as removeWorktrees, y as worktreePullRequestNote } from "./act-BbHS3oV8.mjs";
21
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-Bnkerfod.mjs";
22
22
  import { claimRemoveCommand, isClaimRefusal, isClaimUnavailable, readClaimSet, releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
23
23
  import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
24
24
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -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-dPGuhNai.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-yVKpAOKM.mjs";
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";
3
3
  export { collectGcReport, gcCommand as default, deleteParkedSims, describeParkedSims, describeUnverifiableDevices, executeGc, findOrphanedDevices, findStaleDeviceRecords, findStaleProjectDevices, formatGcReport, readGcReport, runGc, selectCaches, withGcMaintenanceClaim };
@@ -1,8 +1,8 @@
1
- import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-RKwY33wv.mjs";
2
- import { i as findProjectRoot$1 } from "./project-Dz-hWkb-.mjs";
3
- import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-Ck6YXPAO.mjs";
4
- import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-B453A231.mjs";
5
- import "./status-watch-XC7F-AMf.mjs";
1
+ import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-B5tCoq9N.mjs";
2
+ import { i as findProjectRoot$1 } from "./project-BiC68mIp.mjs";
3
+ import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-BMCA1gdO.mjs";
4
+ import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-BovI1y3-.mjs";
5
+ import "./status-watch-Bc2J4TZn.mjs";
6
6
  import { SETTINGS, SETTINGS_SCHEMA_URL, TUTORIAL_VERSION } from "@stim-cli/core/state";
7
7
  import chalk from "chalk";
8
8
  //#region src/guide/agent.ts
@@ -990,8 +990,10 @@ leased until <time>" for each one.`,
990
990
  true Metro finished the bundle response, or an app
991
991
  without Metro (a release build, or a native
992
992
  Xcode or Gradle app) has a live process; then
993
- the app stayed alive through a three-second
994
- stability window.
993
+ the app stayed alive until its JavaScript
994
+ reported \`Running "<name>"\` (plus half a
995
+ second), or through a three-second stability
996
+ window when it did not.
995
997
  The command checks process liveness when the
996
998
  platform exposes it. Errors from that window
997
999
  are printed even when the app stays alive,
@@ -1003,12 +1005,14 @@ leased until <time>" for each one.`,
1003
1005
  bundle and the process, never a frame, and a
1004
1006
  cold app can keep rendering for a minute or
1005
1007
  more after this, which is why the stderr line
1006
- reads \`bundle loaded, process alive, stable
1007
- for 3s -- the first screen may still be
1008
- rendering\`. Poll the UI before you trust a
1009
- screenshot. Optional app-declared readiness
1010
- adds a separate stderr readiness phase; it
1011
- does not change this field. See
1008
+ reads \`bundle loaded, process alive, app
1009
+ JavaScript running -- the first screen may
1010
+ still be rendering\` (\`stable for 3s\` when
1011
+ no \`Running\` log arrived). Poll the UI
1012
+ before you trust a screenshot. Optional
1013
+ app-declared readiness adds a separate
1014
+ stderr readiness phase; it does not change
1015
+ this field. See
1012
1016
  \`guide lifecycle readiness\`
1013
1017
  "bundling" the request DID arrive and Metro was still
1014
1018
  building or delivering when the bundle timeout closed.
@@ -1020,6 +1024,15 @@ leased until <time>" for each one.`,
1020
1024
  finishing
1021
1025
  "unverified" nothing was observed at all: usually a
1022
1026
  dev-client server picker awaiting a tap
1027
+ The wait for the app's bundle request is 20 seconds. On
1028
+ Expo, the dev client's manifest request (recorded in the
1029
+ metro log as manifest_request_started, _finished or _failed)
1030
+ counts as progress: the wait stays open while one is in
1031
+ flight and for 15 seconds after one was served, up to 60
1032
+ seconds after the launch, on any target (a new or adopted
1033
+ emulator already waits 60). A manifest is never launch
1034
+ evidence, so a launch that makes no bundle request is still
1035
+ "unverified". Bare React Native makes no manifest request.
1023
1036
  Neither "bundling" nor "unverified" is reported for an app
1024
1037
  whose process is gone when the bundle timeout closes: the
1025
1038
  run fails as FATAL, "the app process exited", with the
@@ -2753,9 +2766,16 @@ TAILNET-ONLY METRO
2753
2766
 
2754
2767
  BUNDLE WARMUP
2755
2768
  After verifying Metro, \`stim ios\` and \`stim android\` prefetch the
2756
- platform's development bundle while native work continues. Expo supplies the
2757
- entry point and bundle options through its manifest; bare React Native uses
2758
- the standard index entry and development bundle options, including lazy loading.
2769
+ platform's development bundle while native work continues. The prefetch
2770
+ requests the URL of the app's most recent bundle request on that platform,
2771
+ read from this workspace's metro log, so it matches the app's entry point
2772
+ and options and does not ask Expo for its manifest. A recorded URL whose
2773
+ entry file no longer exists under the project root or its ancestors is
2774
+ skipped. Expo computes the
2775
+ runtime version fingerprint for every manifest request. Without a recorded
2776
+ request, Expo supplies the entry point and bundle options through its
2777
+ manifest, and bare React Native uses the standard index entry and
2778
+ development bundle options, including lazy loading.
2759
2779
  Warmup is enabled by default. Set optimizations.metroWarmup=false to disable
2760
2780
  it on the next ios/android command, using the machine or project settings.
2761
2781
  For custom entry points or bundle options, set metro.warmupUrl.ios and/or
@@ -3383,7 +3403,15 @@ they stay in the local logs. These records carry no tokens.
3383
3403
 
3384
3404
  WHAT WRITES WHAT
3385
3405
  maintenance.ndjson workspace maintenance actions, failures and explaining skips
3386
- metro.ndjson the bundler, in every supervisor mode
3406
+ metro.ndjson the bundler, in every supervisor mode. Stim's
3407
+ middleware adds one record per bundle request
3408
+ (bundle_response_started, _progress, _finished,
3409
+ _failed; _started carries the request's path and
3410
+ query as url, which the next warmup prefetches)
3411
+ and, on Expo, one per dev-client manifest
3412
+ request (manifest_request_started, _finished,
3413
+ _failed: debug level, with platform and requestId;
3414
+ launch verification reads them as progress)
3387
3415
  client.ndjson in-app console logs and redboxes -- BARE PROJECTS ONLY.
3388
3416
  In expo-child and command-child mode everything the
3389
3417
  dev server prints lands in metro.ndjson with raw: true,
@@ -5410,10 +5438,12 @@ hosting Mac keeps Metro local through a private bridge; see hosted-ios. Step 2 r
5410
5438
  Metro while other work happens.
5411
5439
 
5412
5440
  Each time Stim boots an owned local simulator or emulator, it mutes it: iOS
5413
- simulators to volume zero through Xcode's devicectl once SpringBoard has
5414
- finished starting, because SpringBoard resets the volume while it starts, and
5415
- Android 15 and later emulators to media volume zero. A device that is already
5416
- running keeps its volume. Turn sound on for one device with Sound (iOS) or
5441
+ simulators to volume zero through Xcode's devicectl, and Android 15 and later
5442
+ emulators to media volume zero. The iOS mute runs after SimSlim has applied its
5443
+ profile and once SpringBoard has finished starting, because both a SimSlim
5444
+ reboot and SpringBoard's startup reset the volume. A device that is already
5445
+ running keeps its volume, except that SimSlim reboots a running simulator whose
5446
+ profile changed. Turn sound on for one device with Sound (iOS) or
5417
5447
  Media sound (Android) in its Stim Desktop options; the choice lasts until that
5418
5448
  device next boots. Android 14 and older images have no shell command that can
5419
5449
  set media volume, so startup warns, as it does whenever a mute is not
@@ -5503,8 +5533,9 @@ does not restart initialization. Confirm the bundle request and expected UI.
5503
5533
 
5504
5534
  Debug Android launches on an owned emulator that the run creates, or whose
5505
5535
  adoption from the pool it finishes, get up to 60 seconds for bundle loading;
5506
- the verify phase names that budget. Existing emulators, remote targets, and physical devices keep the
5507
- 20-second budget.
5536
+ the verify phase names that budget. Existing emulators, remote targets, and physical devices get 20 seconds,
5537
+ extended up to 60 while an Expo dev client's manifest request is pending or was
5538
+ just served.
5508
5539
  Bundle delivery still requires the usual stability or app readiness check;
5509
5540
  an observed fatal error ends verification without waiting for the deadline.
5510
5541
 
@@ -6330,12 +6361,18 @@ Metro verification enabled, not release builds or --no-metro-check.
6330
6361
  a missing ready message, and a startup error. Retain the relevant output.
6331
6362
 
6332
6363
  Without an observed pending, Stim keeps its default 3-second stability window
6333
- after bundle delivery. Managed Metro servers report the native bundle response
6364
+ after bundle delivery. The window ends early, half a second after the app's
6365
+ React Native runtime logs \`Running "<name>"\` for this launch on either
6366
+ platform. A fatal record or an exited process before the window ends still
6367
+ fails the launch. An error after it, such as a first render that takes longer
6368
+ than that half second to throw, appears in \`stim logs --errors\`.
6369
+ Managed Metro servers report the native bundle response
6334
6370
  finishing; build-complete output alone does not close an observed request.
6335
6371
  Without response capture, Stim falls back to the build-complete marker.
6336
6372
  When Android reports queued JavaScript loading, Stim waits for a device
6337
6373
  JavaScript log before starting stability, bounded by the bundle timeout.
6338
- Pending must be observed before the stability window closes. It opts into
6374
+ Pending must be observed before the stability window closes, early end
6375
+ included, so log it before the root component renders. It opts into
6339
6376
  waiting for ready until 30 seconds after the same completion signal.
6340
6377
  Repeated pending messages never extend the deadline. Ready can end the wait
6341
6378
  early; an app error or process exit interrupts it. No ready means readiness
@@ -6838,9 +6875,10 @@ AN ARTIFACT THE DEVICE ALREADY HOLDS IS NOT INSTALLED AGAIN
6838
6875
  A RUNNING APP IS RESTARTED, LIKE XCODE'S RUN
6839
6876
  Before it launches, \`ios\` and \`android\` read the device's process list.
6840
6877
  When the app is already running, from an earlier run or after an install
6841
- that was skipped, Stim stops it and launches it fresh: \`simctl terminate\`
6842
- on a simulator, \`am force-stop\` on an emulator or an \`android --device\`
6843
- phone. The new process requests its bundle, so launch verification has real
6878
+ that was skipped, Stim stops it and launches it fresh: \`simctl launch
6879
+ --terminate-running-process\` on a simulator (a separate \`simctl
6880
+ terminate\` when the app opens through a URL), \`am force-stop\` on an
6881
+ emulator or an \`android --device\` phone. The new process requests its bundle, so launch verification has real
6844
6882
  evidence instead of an old process that fetched nothing. In-app state from
6845
6883
  the previous session does not survive. The launch line says so:
6846
6884
 
@@ -7575,11 +7613,18 @@ OPT-IN CONCURRENCY LIMITS (UNLIMITED BY DEFAULT)
7575
7613
  paths eligible under the source checkout's Git ignore rules, including .env
7576
7614
  and local configuration. The source's nonempty
7577
7615
  .worktreeexclude replaces its resolved worktree.exclude setting. Nested
7578
- registered worktrees, .DS_Store, .DerivedData, .idea, .jj, a project-local
7579
- .pnpm-store, and android/build/generated/autolinking caches are excluded,
7580
- including inside newly copied directories; pnpm refills its store from the
7581
- network or its global store. Gradle regenerates autolinking
7582
- for the destination checkout on its next build. Warm also skips paths
7616
+ registered worktrees and ignored entries named .DS_Store, .DerivedData,
7617
+ .idea, .jj or .pnpm-store are not copied, and neither is
7618
+ android/build/generated/autolinking. Warm never walks a copied directory, so
7619
+ a .DS_Store or .idea inside a copied directory stays. Warm deletes only
7620
+ these paths from the copy: .pnpm-store in a copied node_modules (pnpm
7621
+ refills it from the network or its global store), the autolinking directory
7622
+ under a copied android, android/build or android/build/generated (Gradle
7623
+ regenerates it for the destination checkout on its next build), and the
7624
+ expo-modules-jsi/apple/.DerivedData Xcode build state, directly under
7625
+ node_modules or in the pnpm virtual store. An ignored directory that Git
7626
+ reports above those names (for example an app directory with no tracked
7627
+ files) is copied as is. Warm also skips paths
7583
7628
  overlapping a nested destination worktree or below a symlink ancestor.
7584
7629
  Tracked .idea settings come from Git and stay untouched by warm.
7585
7630
 
@@ -8104,6 +8149,24 @@ THE POOL: WHICH DEVICE AN ID-LESS \`--device\` PICKS
8104
8149
 
8105
8150
  { "ios": { "simslimProfile": ".simslim/dev.json" } }
8106
8151
 
8152
+ To slim every Stim-owned iOS simulator on a Mac without a profile per app,
8153
+ set it on the machine layer:
8154
+
8155
+ stim settings set ios.simslim on --scope machine
8156
+
8157
+ With \`ios.simslim\` on and no \`ios.simslimProfile\`, Stim runs
8158
+ \`simslim on <udid>\` with SimSlim's default categories. A project profile
8159
+ always applies in place of the defaults. A workspace, repo or committed
8160
+ \`ios.simslim off\` opts that app out and restores stock services on its
8161
+ simulator. The defaults disable push, StoreKit, iCloud, Safari sync, Mail,
8162
+ Calendar and Contacts services, among others; move an app that needs them
8163
+ to a profile that keeps those categories, or to \`off\`. A running or
8164
+ parked simulator is slimmed the next time Stim boots or adopts it, and an
8165
+ already slim simulator is left alone, so only the first slim reboots it.
8166
+ Without the \`simslim\` command, doctor reports it and \`stim ios\` boots
8167
+ the simulator unslimmed with a one-line note. Hosted simulators on a named
8168
+ Mac are never slimmed, whatever either Mac's setting says.
8169
+
8107
8170
  SimSlim 0.8 requires iOS 18.5 or newer. On each local \`stim ios\`,
8108
8171
  Stim reconciles that profile on the owned simulator before the app build.
8109
8172
  The first change can update services and reboot the simulator. A matching
@@ -9417,6 +9480,13 @@ KEYS STIM READS
9417
9480
  with STIM_BAD_ARG a path that escapes the app or
9418
9481
  holds no .xcworkspace or .xcodeproj, and any value
9419
9482
  on an Expo app, whose prebuild writes ios/.
9483
+ ios.simslim "on" or "off"; default "off", machine or project
9484
+ layers. "on" slims every Stim-owned iOS simulator
9485
+ with SimSlim's default categories when no
9486
+ ios.simslimProfile is set; a profile always wins. A
9487
+ workspace, repo or committed "off" opts that app out
9488
+ of a machine "on" and restores stock services. See
9489
+ \`stim guide lifecycle simslim\`.
9420
9490
  ios.simslimProfile a SimSlim JSON profile under the app directory,
9421
9491
  at most 64 KiB. Install the
9422
9492
  external tool once with
@@ -9707,7 +9777,9 @@ ${ANDROID_AVD_CONFIG_HELP.map((line) => ` ${line}`).joi
9707
9777
  metro.warmupUrl.android
9708
9778
  an HTTP(S) URL or a /path ending in .bundle, with the
9709
9779
  full query the app uses, including a matching platform.
9710
- Unset uses Expo's manifest or bare React Native defaults.
9780
+ Unset uses the app's most recent bundle request from
9781
+ the workspace's metro log, then Expo's manifest or the
9782
+ bare React Native defaults.
9711
9783
  Stim preserves the path and query but always requests
9712
9784
  this workspace's verified local Metro port; a supplied
9713
9785
  host and port are ignored. No defaults are added to an
@@ -10161,10 +10233,14 @@ Stim connects to a named machine only while its name still belongs to the pinned
10161
10233
  node and never sends the token to another node. \`doctor\` reports each
10162
10234
  remote machine's build pairing state and, for an approved one, asks it for one build
10163
10235
  offer and lists every reason it would not take this app's iOS build: no
10164
- answer, another Stim build, CPU, Xcode, simulator SDK or CocoaPods, no
10236
+ answer, an incompatible Stim build, CPU, Xcode, simulator SDK or CocoaPods, no
10165
10237
  Bundler for an app whose Gemfile.lock pins CocoaPods, no iPhone simulator on
10166
10238
  the runtime \`stim ios\` builds for here, low disk, or busy. With Package.swift
10167
10239
  and no platform selection on a Mac, it also checks the macOS Xcode and SDK.
10240
+ Two machines build for each other when their Stim releases share a build
10241
+ compatibility version, which changes only when what a worker builds, how it
10242
+ builds, or the build messages change; their Stim builds can differ. A
10243
+ stim-server too old to report one needs the same Stim build as this machine.
10168
10244
 
10169
10245
  \`remote.build\` (machine scope, default auto) selects placement for
10170
10246
  \`ios\`, \`android\` and \`macos\`. \`--remote-build <auto|local|name>\`
@@ -11053,8 +11129,8 @@ to the repository root; the worker resolves them inside its checkout.
11053
11129
 
11054
11130
  With --remote <machine> and --remote-build naming the same machine (the same
11055
11131
  paired node), the app is built and run there, so this Mac's Xcode, macOS SDK and
11056
- CPU architecture do not have to match: the worker needs the same Stim build and
11057
- its own Xcode and macOS SDK. This Mac's cache is skipped and the worker's cache
11132
+ CPU architecture do not have to match: the worker needs the same Stim build
11133
+ compatibility version and its own Xcode and macOS SDK. This Mac's cache is skipped and the worker's cache
11058
11134
  identity comes from the worker's toolchain. Any other combination keeps the match.
11059
11135
 
11060
11136
  The client validates the development plist and resource entries before asking a machine. It verifies
@@ -1,7 +1,7 @@
1
1
  import { c as throwIfCancelled } from "./exec-VFRpu1iA.mjs";
2
- import { c as call, l as connectHost } from "./hosted-client-BBTVe3X6.mjs";
3
- import { i as requestHostedMetro } from "./metro-gateway-DtsOy-0P.mjs";
4
- import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-Doxbfzem.mjs";
2
+ import { c as call, l as connectHost } from "./hosted-client-rsRqysJc.mjs";
3
+ import { i as requestHostedMetro } from "./metro-gateway-Bp9gJQAN.mjs";
4
+ import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-BxTizGU2.mjs";
5
5
  //#region src/device-host/hosted-android.ts
6
6
  async function prepareHostedAndroid(machine, selectors, recorded, mode) {
7
7
  return await prepareHostedNative(machine, selectors, recorded, "android", false, mode);
@@ -1,7 +1,7 @@
1
1
  import { c as throwIfCancelled, o as cancellableSleep } from "./exec-VFRpu1iA.mjs";
2
2
  import { rt as resolveEndpoint } from "./config-BZhXY15H.mjs";
3
- import { t as BuildConnection } from "./client-18-ZowoT.mjs";
4
- import { d as configuredMachines } from "./selection-BLtvaqxc.mjs";
3
+ import { t as BuildConnection } from "./client-BQsmyp_-.mjs";
4
+ import { d as configuredMachines } from "./selection-D5cxEl3t.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { lstatSync, readFileSync, readdirSync, readlinkSync } from "node:fs";
7
7
  import { join } from "node:path";
@@ -1,4 +1,4 @@
1
- import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-Doxbfzem.mjs";
1
+ import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-BxTizGU2.mjs";
2
2
  //#region src/device-host/hosted-ios.ts
3
3
  async function prepareHostedIos(machine, selectors, recorded, mode) {
4
4
  return await prepareHostedNative(machine, selectors, recorded, "ios", false, mode);
@@ -1,11 +1,11 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir, m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
3
  import { B as deviceSlotFileKey, et as parseMachine$1, q as validateDeviceSlot } from "./config-BZhXY15H.mjs";
4
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
5
- import { n as macosDir } from "./state-BfAltYJP.mjs";
6
- import { n as androidLogGroups, r as isAndroidCrashText } from "./android-CX5IcRuf.mjs";
4
+ import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
5
+ import { n as macosDir } from "./state-DPaM3u5K.mjs";
6
+ import { n as androidLogGroups, r as isAndroidCrashText } from "./android-saBeB4lr.mjs";
7
7
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
8
- import { c as call } from "./hosted-client-BBTVe3X6.mjs";
8
+ import { c as call } from "./hosted-client-rsRqysJc.mjs";
9
9
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
10
10
  import { dirname, join } from "node:path";
11
11
  import { LOG_ROTATE_BYTES, ambientWrite, withDirLockAsync } from "@stim-cli/core";
@@ -1,9 +1,9 @@
1
1
  import { o as cancellableSleep } from "./exec-VFRpu1iA.mjs";
2
- import { a as removeAgentAccess, i as agentAccess, r as closeAgentConnection, t as pullHostedMacosLogs } from "./hosted-logs-CYIZ5ubJ.mjs";
3
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
- import { n as macosDir } from "./state-BfAltYJP.mjs";
5
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
6
- import { _ as unknownSession, a as SESSION_TIMEOUT_MS, c as call, d as hostedSession, g as stoppedSession, h as sha256, i as RESERVE_TIMEOUT_MS, l as connectHost, m as settle, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-BBTVe3X6.mjs";
2
+ import { a as removeAgentAccess, i as agentAccess, r as closeAgentConnection, t as pullHostedMacosLogs } from "./hosted-logs-CWKGYWNX.mjs";
3
+ import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
4
+ import { n as macosDir } from "./state-DPaM3u5K.mjs";
5
+ import { d as runCancellationSignal } from "./native-run-D5OJsGwA.mjs";
6
+ import { _ as unknownSession, a as SESSION_TIMEOUT_MS, c as call, d as hostedSession, g as stoppedSession, h as sha256, i as RESERVE_TIMEOUT_MS, l as connectHost, m as settle, o as attach, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-rsRqysJc.mjs";
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { join } from "node:path";
9
9
  import { ambientContext, ambientWrite } from "@stim-cli/core";
@@ -1,11 +1,11 @@
1
1
  import { o as cancellableSleep } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
3
- import { a as removeAgentAccess, i as agentAccess, n as pullHostedNativeLogs, r as closeAgentConnection } from "./hosted-logs-CYIZ5ubJ.mjs";
4
- import { l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
5
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
6
- import { _ as unknownSession, a as SESSION_TIMEOUT_MS, c as call, d as hostedSession, g as stoppedSession, h as sha256, i as RESERVE_TIMEOUT_MS, l as connectHost, m as settle, n as OFFER_TIMEOUT_MS, o as attach, p as requireHostedAppMode, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-BBTVe3X6.mjs";
7
- import { a as requireHostedMetro, i as requestHostedMetro, n as closeHostedMetro } from "./metro-gateway-DtsOy-0P.mjs";
8
- import { s as writeHostedNative } from "./ios-state-DlElquYD.mjs";
3
+ import { a as removeAgentAccess, i as agentAccess, n as pullHostedNativeLogs, r as closeAgentConnection } from "./hosted-logs-CWKGYWNX.mjs";
4
+ import { l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-CPSp3mav.mjs";
5
+ import { d as runCancellationSignal } from "./native-run-D5OJsGwA.mjs";
6
+ import { _ as unknownSession, a as SESSION_TIMEOUT_MS, c as call, d as hostedSession, g as stoppedSession, h as sha256, i as RESERVE_TIMEOUT_MS, l as connectHost, m as settle, n as OFFER_TIMEOUT_MS, o as attach, p as requireHostedAppMode, r as PREPARE_TIMEOUT_MS, s as bundleManifest, t as INSTALL_TIMEOUT_MS, u as heldNoLonger, v as upload } from "./hosted-client-rsRqysJc.mjs";
7
+ import { a as requireHostedMetro, i as requestHostedMetro, n as closeHostedMetro } from "./metro-gateway-Bp9gJQAN.mjs";
8
+ import { s as writeHostedNative } from "./ios-state-CT9nV5SP.mjs";
9
9
  import { randomUUID } from "node:crypto";
10
10
  import { readFileSync } from "node:fs";
11
11
  import { join } from "node:path";
@@ -1,11 +1,11 @@
1
1
  import { V as deviceSlotKey, _ as loadConfig$1 } from "./config-BZhXY15H.mjs";
2
- import { o as formatLongDuration } from "./command-output-DxC0k2rk.mjs";
3
- import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-CeBpIZgr.mjs";
4
- import { A as workspaceBuildInProgress, T as collectOwnedDeviceActivity } from "./budget-dPGuhNai.mjs";
2
+ import { o as formatLongDuration } from "./command-output-BBvS1H6v.mjs";
3
+ import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-CPSp3mav.mjs";
4
+ import { A as workspaceBuildInProgress, T as collectOwnedDeviceActivity } from "./budget-HyShrIpL.mjs";
5
5
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
6
- import { A as teardownOwnedIosSim, O as teardownOwnedAvd } from "./workspaces-CSV2Orf4.mjs";
7
- import { _ as workspaceDeviceLastUseAt } from "./activity-Dq3ZcdD8.mjs";
8
- import { d as listAllIosSims } from "./ios-CVUFFZ6C.mjs";
6
+ import { A as teardownOwnedIosSim, O as teardownOwnedAvd } from "./workspaces-C9w4aeXF.mjs";
7
+ import { _ as workspaceDeviceLastUseAt } from "./activity-BpjwrQXU.mjs";
8
+ import { d as listAllIosSims } from "./ios-BQzvJlzw.mjs";
9
9
  import { DEVICE_IDLE_SHUTDOWN_KEY, DEVICE_RECLAIM_REASON, readDeviceIdleShutdowns } from "@stim-cli/core/state";
10
10
  //#region src/devices/idle-shutdown.ts
11
11
  const SIM_LIST_TIMEOUT_MS = 1e4;