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,21 +1,21 @@
1
1
  import { C as reportSignal } from "./exec-VFRpu1iA.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DxC0k2rk.mjs";
3
- import { H as remoteEasFallbackSetting, K as resolveIosProjectDir, R as publicUrlSetting, U as remoteIosSetting, a as SETTING_SHAPE_REMEDY, et as settingShapeErrors, p as cacheProviderSettingError, rt as tunnelModeSetting } from "./settings-RKwY33wv.mjs";
4
- import { Ln as processContext, Z as statsProjectKey } from "./budget-dPGuhNai.mjs";
5
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
6
- import { C as trackedFingerprintPaths, a as configInputsChanged, f as gitignoredFingerprintInputs, l as filesystemBuildCapability, m as inputsChangedDuringBuild, n as buildCacheKey, p as ignoredFingerprintPaths, r as changedDuringBuildLine, u as fingerprintDiffRecord, v as refingerprintAfterMutation, w as untrackedMissLine } from "./build-cache-HFUQ9eLz.mjs";
7
- import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
8
- import { b as bundlerPin } from "./xcode-DHu41qQ4.mjs";
9
- import { a as iosToolchainAsync } from "./toolchain-D3bmRMia.mjs";
10
- import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-B1W-hmC2.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BBvS1H6v.mjs";
3
+ import { U as remoteEasFallbackSetting, W as remoteIosSetting, a as SETTING_SHAPE_REMEDY, it as tunnelModeSetting, p as cacheProviderSettingError, q as resolveIosProjectDir, tt as settingShapeErrors, z as publicUrlSetting } from "./settings-B5tCoq9N.mjs";
4
+ import { Rn as processContext, Z as statsProjectKey } from "./budget-HyShrIpL.mjs";
5
+ import { d as runCancellationSignal } from "./native-run-D5OJsGwA.mjs";
6
+ import { T as untrackedMissLine, a as configInputsChanged, f as gitignoredFingerprintInputs, l as filesystemBuildCapability, m as inputsChangedDuringBuild, n as buildCacheKey, p as ignoredFingerprintPaths, r as changedDuringBuildLine, u as fingerprintDiffRecord, v as refingerprintAfterMutation, w as trackedFingerprintPaths } from "./build-cache-CKCzxzxA.mjs";
7
+ import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
8
+ import { b as bundlerPin } from "./xcode-CiIIDnuD.mjs";
9
+ import { a as iosToolchainAsync } from "./toolchain-VzLJzZ7O.mjs";
10
+ import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-qKcbgmI5.mjs";
11
11
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-zlujA1Gs.mjs";
12
- import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-CxKUNHsb.mjs";
13
- import { c as fingerprintErrorMissReason, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-DmVCf5xb.mjs";
14
- import { r as planPayload, t as planCachedBuild } from "./build-plan-JsDUq4w1.mjs";
15
- import { t as IosRecipeRefusal } from "./ios-project-KYqeJURj.mjs";
16
- import { a as hostedIosSelectors } from "./remote-DEZ7AOVq.mjs";
17
- import { c as copyAppAside, i as DEFAULT_DEPS, n as iosMetroRuntime, r as iosProcessRuntime, u as writeIpTxt } from "./launch-BVlyQw3T.mjs";
18
- import { t as planHostedDevice } from "./plan-placement-4axc0Hs7.mjs";
12
+ import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-CyDKNTBP.mjs";
13
+ import { c as fingerprintErrorMissReason, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-JUaqOLpc.mjs";
14
+ import { r as planPayload, t as planCachedBuild } from "./build-plan-zCuHGlA8.mjs";
15
+ import { t as IosRecipeRefusal } from "./ios-project-DCUDo06I.mjs";
16
+ import { a as hostedIosSelectors } from "./remote-BuZj6AyU.mjs";
17
+ import { c as copyAppAside, i as DEFAULT_DEPS, n as iosMetroRuntime, r as iosProcessRuntime, u as writeIpTxt } from "./launch-DscF1QfM.mjs";
18
+ import { t as planHostedDevice } from "./plan-placement-BqKgKHCi.mjs";
19
19
  import { rmSync } from "node:fs";
20
20
  import chalk from "chalk";
21
21
  //#region src/integrations/react-native-ios-plan.ts
@@ -398,7 +398,8 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
398
398
  context: operation,
399
399
  resolve: d.resolveBuild,
400
400
  store: d.storeBuild,
401
- sources: storeSources
401
+ sources: storeSources,
402
+ readAppId: (path) => d.readBundleId(path)
402
403
  }),
403
404
  async validateExternal(path) {
404
405
  if (device) {
@@ -1,4 +1,4 @@
1
- import { yt as gitCommonDirOnDisk } from "./settings-RKwY33wv.mjs";
1
+ import { bt as gitCommonDirOnDisk } from "./settings-B5tCoq9N.mjs";
2
2
  import { existsSync } from "node:fs";
3
3
  import { loadConfig, recordingEnabled, workspaceRecordingsDir } from "@stim-cli/core/state";
4
4
  import { rm } from "node:fs/promises";
@@ -1,2 +1,2 @@
1
- import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-C1TTVesC.mjs";
1
+ import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-FbSgMF8x.mjs";
2
2
  export { reloadCommand as default, registerReload, runReload };
@@ -1,18 +1,18 @@
1
1
  import { c as throwIfCancelled, i as loadScaledBudgetMs, o as cancellableSleep, s as cancelledError } from "./exec-VFRpu1iA.mjs";
2
2
  import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { f as refuseNoProject, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
- import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
5
- import { Nt as repoRootAsync } from "./settings-RKwY33wv.mjs";
6
- import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-Dz-hWkb-.mjs";
7
- import { nt as resolveOwnedAvdSerialAsync } from "./android-882m4hxX.mjs";
8
- import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-Bu8LBfzS.mjs";
9
- import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-B1ig0Kqy.mjs";
10
- import { pn as androidAppProcess, wn as iosAppProcess, yn as ensureMetroReverse } from "./budget-dPGuhNai.mjs";
11
- import { E as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-CVUFFZ6C.mjs";
12
- import { f as probeHostedSession } from "./hosted-client-BBTVe3X6.mjs";
13
- import { r as readHostedNative } from "./ios-state-DlElquYD.mjs";
14
- import { r as reopenHostedAndroidMetro } from "./hosted-android-D4dweBof.mjs";
15
- import { n as nativeRunCommand } from "./slot-launch-A1BgotaM.mjs";
3
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-BBvS1H6v.mjs";
4
+ import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-CPSp3mav.mjs";
5
+ import { Pt as repoRootAsync } from "./settings-B5tCoq9N.mjs";
6
+ import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-BiC68mIp.mjs";
7
+ import { nt as resolveOwnedAvdSerialAsync } from "./android-Cjcj8MCw.mjs";
8
+ import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-1pJgCX4U.mjs";
9
+ import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-DMRNP7-4.mjs";
10
+ import { Tn as iosAppProcess, bn as ensureMetroReverse, mn as androidAppProcess } from "./budget-HyShrIpL.mjs";
11
+ import { E as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-BQzvJlzw.mjs";
12
+ import { f as probeHostedSession } from "./hosted-client-rsRqysJc.mjs";
13
+ import { r as readHostedNative } from "./ios-state-CT9nV5SP.mjs";
14
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-Bvb2-ZxD.mjs";
15
+ import { n as nativeRunCommand } from "./slot-launch-QeuJMlnJ.mjs";
16
16
  import { n as sendToOwnedPage, t as liveWebRecord } from "./page-CzEA_-5_.mjs";
17
17
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
18
18
  import { WebSocket } from "ws";
@@ -1,10 +1,11 @@
1
+ import { l as WorkspaceProcessCleanupError } from "./exec-VFRpu1iA.mjs";
1
2
  import { H as deviceSlotPlatforms } from "./config-BZhXY15H.mjs";
2
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
3
- import { F as parseIosRemote, H as remoteEasFallbackSetting, R as publicUrlSetting, U as remoteIosSetting, rt as tunnelModeSetting } from "./settings-RKwY33wv.mjs";
4
- import "./budget-dPGuhNai.mjs";
5
- import { b as resolveSimulatorAppFlag } from "./support-B1W-hmC2.mjs";
6
- import { n as devicePlacementRecord } from "./placement-log-DUvqqsB-.mjs";
7
- import { r as devicePlacementLine } from "./eas-fallback-LMxk9Kw0.mjs";
3
+ import { l as phaseLine } from "./command-output-BBvS1H6v.mjs";
4
+ import { I as parseIosRemote, U as remoteEasFallbackSetting, W as remoteIosSetting, it as tunnelModeSetting, z as publicUrlSetting } from "./settings-B5tCoq9N.mjs";
5
+ import "./budget-HyShrIpL.mjs";
6
+ import { b as resolveSimulatorAppFlag } from "./support-qKcbgmI5.mjs";
7
+ import { n as devicePlacementRecord } from "./placement-log-DjOXJRIH.mjs";
8
+ import { r as devicePlacementLine } from "./eas-fallback-gaZi-dJL.mjs";
8
9
  import chalk from "chalk";
9
10
  //#region src/commands/ios/remote.ts
10
11
  function deviceRemoteConflict(remote, physical) {
@@ -73,11 +74,19 @@ async function selectIosPlacement(args) {
73
74
  const refusal = await args.validateSelectors();
74
75
  if (refusal) return { failure: refusal };
75
76
  const easFallback = args.supportsRemote && remoteEasFallbackSetting(args.settings);
77
+ const localSims = await args.simSnapshot.readAsync?.({
78
+ signal: args.operation?.signal,
79
+ operation: args.operation
80
+ }).then((sims) => sims.filter((sim) => sim.available)).catch((error) => {
81
+ if (error instanceof WorkspaceProcessCleanupError || error instanceof Error && "reportCleanup" in error) throw error;
82
+ args.operation?.signal.throwIfAborted();
83
+ });
76
84
  try {
77
85
  const placed = await d.automaticDevicePlacement({
78
86
  root,
79
87
  slot,
80
88
  platform: "ios",
89
+ ...localSims ? { localSims } : {},
81
90
  selectors: hostedIosSelectors(deviceType, runtime),
82
91
  appMode,
83
92
  buildMachine: opts.remoteBuild,
@@ -1,20 +1,20 @@
1
1
  import { l as workspaceAgentDeviceDir } from "./paths-DQtTgsBf.mjs";
2
2
  import { H as deviceSlotPlatforms, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { i as formatDuration, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
- import { $ as settingOriginScope, F as parseIosRemote, G as resolveCacheProviderConfig, V as remoteAndroidSetting, W as resolveAndroidLayout, Z as settingFile, a as SETTING_SHAPE_REMEDY, d as androidLayoutSetting, et as settingShapeErrors, f as androidLayoutSettingError, it as unknownSettingKeys, nt as settingsLayers, p as cacheProviderSettingError, s as androidAvdConfigSettingError, u as androidDataPartitionSizeGbSettingError } from "./settings-RKwY33wv.mjs";
5
- import { v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
3
+ import { i as formatDuration, l as phaseLine } from "./command-output-BBvS1H6v.mjs";
4
+ import { G as resolveAndroidLayout, H as remoteAndroidSetting, I as parseIosRemote, K as resolveCacheProviderConfig, Q as settingFile, a as SETTING_SHAPE_REMEDY, at as unknownSettingKeys, d as androidLayoutSetting, et as settingOriginScope, f as androidLayoutSettingError, p as cacheProviderSettingError, rt as settingsLayers, s as androidAvdConfigSettingError, tt as settingShapeErrors, u as androidDataPartitionSizeGbSettingError } from "./settings-B5tCoq9N.mjs";
5
+ import { v as detectIsExpo } from "./project-BiC68mIp.mjs";
6
6
  import { a as workspaceLinkLine } from "./stim-desktop-DS0mzR8U.mjs";
7
- import { B as ownedAvdDeviceProfile, I as listInstalledSystemImages, K as ownedAvdSystemImage, N as listAvdDeviceProfilesAsync, Q as profileNeedsFoldFeature, X as pickDefaultSystemImage, at as systemImageSupportsFold, k as hostSystemImageArch, l as androidSystemImageAbi, t as DEFAULT_AVD_DEVICE_PROFILE, vt as parkedMaxSetting } from "./android-882m4hxX.mjs";
8
- import { B as recordFinishedBuild, Bn as UPLOAD_TIMEOUT_MS, Un as easAuthNote, Vn as cacheLevel, Wn as isEasAuthFailureText } from "./budget-dPGuhNai.mjs";
9
- import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-ccaPc4ox.mjs";
10
- import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine } from "./ccache-CCn1S6qG.mjs";
11
- import { n as buildPlacementCandidates } from "./client-18-ZowoT.mjs";
12
- import { c as readProductFlavors, s as productFlavorRefusal } from "./react-native-build-AuCu-aAP.mjs";
13
- import { l as parseDeviceWait } from "./device-lease-run-DUtkbqBQ.mjs";
14
- import { t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-Ic-kdmEV.mjs";
15
- import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-BtCOrNqb.mjs";
16
- import { r as isPhysicalDeviceRequest } from "./native-runtime-DgtJkzIa.mjs";
17
- import { C as remoteAvdFlagRefusal, D as systemImageRefusal, E as resolveVariant, T as resolveSystemImage, a as PLATFORM, m as deviceProfileRefusal, v as foldableImageRefusal, w as resolveDeviceProfile, y as isReleaseVariant } from "./support-B3tzVhKn.mjs";
7
+ import { B as ownedAvdDeviceProfile, I as listInstalledSystemImages, K as ownedAvdSystemImage, N as listAvdDeviceProfilesAsync, Q as profileNeedsFoldFeature, X as pickDefaultSystemImage, at as systemImageSupportsFold, k as hostSystemImageArch, l as androidSystemImageAbi, t as DEFAULT_AVD_DEVICE_PROFILE, vt as parkedMaxSetting } from "./android-Cjcj8MCw.mjs";
8
+ import { B as recordFinishedBuild, Gn as isEasAuthFailureText, Hn as cacheLevel, Vn as UPLOAD_TIMEOUT_MS, Wn as easAuthNote } from "./budget-HyShrIpL.mjs";
9
+ import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-DHm_U5gv.mjs";
10
+ import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine } from "./ccache-h1FKhZeg.mjs";
11
+ import { n as buildPlacementCandidates } from "./client-BQsmyp_-.mjs";
12
+ import { c as readProductFlavors, s as productFlavorRefusal } from "./react-native-build-CwZB-agu.mjs";
13
+ import { l as parseDeviceWait } from "./device-lease-run-ogEeJ62K.mjs";
14
+ import { t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-ZYaRALv5.mjs";
15
+ import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-BVqh2Zep.mjs";
16
+ import { r as isPhysicalDeviceRequest } from "./native-runtime-B9w_Qyz3.mjs";
17
+ import { C as remoteAvdFlagRefusal, D as systemImageRefusal, E as resolveVariant, T as resolveSystemImage, a as PLATFORM, m as deviceProfileRefusal, v as foldableImageRefusal, w as resolveDeviceProfile, y as isReleaseVariant } from "./support-Cxj9CmII.mjs";
18
18
  import { buildDiagnostics } from "@stim-cli/core/state";
19
19
  import chalk from "chalk";
20
20
  //#region src/commands/android/plan.ts
@@ -1,5 +1,5 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { a as macosRuntimeClaim, i as macosProcess, r as macosLogFile, s as updateMacosRecord } from "./state-BfAltYJP.mjs";
2
+ import { a as macosRuntimeClaim, i as macosProcess, r as macosLogFile, s as updateMacosRecord } from "./state-DPaM3u5K.mjs";
3
3
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
4
4
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
5
5
  import { readMacosRecord } from "@stim-cli/core/state";
@@ -312,7 +312,7 @@ function note(title, detail, fix = null) {
312
312
  const PROBLEM_TITLES = {
313
313
  unreachable: "does not answer a build offer",
314
314
  checkout: "cannot build an app outside a git checkout",
315
- "stim-build": "runs another Stim build",
315
+ "stim-build": "runs an incompatible Stim build",
316
316
  arch: "has another CPU architecture",
317
317
  xcode: "has another Xcode",
318
318
  "macos-sdk": "has another macOS SDK",
@@ -333,7 +333,7 @@ function problemFix(code, entry) {
333
333
  switch (code) {
334
334
  case "unreachable": return `Check that stim-server runs on ${entry} and that its tailscale serve route answers, then run \`stim doctor\` again. To keep it running there, run \`stim-server service install --serve\` on ${entry}.`;
335
335
  case "checkout": return "Offload syncs the files git lists; run Stim from a git checkout of the app.";
336
- case "stim-build": return `Update stim-server on ${entry} to the same Stim build as this machine: there, run \`stim-server service update --release <version>\` for this machine's release, or \`--from <dir>\` with the packed packages of this machine's checkout.`;
336
+ case "stim-build": return `Update stim-server on ${entry} to a Stim release with the same build compatibility version as this machine (an older stim-server needs the same Stim build): there, run \`stim-server service update --release <version>\` for this machine's release, or \`--from <dir>\` with the packed packages of this machine's checkout.`;
337
337
  case "arch": return "Use a remote machine with the same CPU architecture as this machine.";
338
338
  case "xcode":
339
339
  case "simulator-sdk":
@@ -1,6 +1,6 @@
1
1
  import { O as __commonJSMin, k as __require, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { q as resolveProjectSettings } from "./settings-RKwY33wv.mjs";
3
- import { c as registerMetroStore, f as resolveMetroSharedCache, n as supervisorError, r as appendCacheStore, s as metroStoreRoot } from "./errors-ccaPc4ox.mjs";
2
+ import { J as resolveProjectSettings } from "./settings-B5tCoq9N.mjs";
3
+ import { c as registerMetroStore, f as resolveMetroSharedCache, n as supervisorError, r as appendCacheStore, s as metroStoreRoot } from "./errors-DHm_U5gv.mjs";
4
4
  import { createRequire } from "node:module";
5
5
  import { isAbsolute, join, relative, sep } from "node:path";
6
6
  //#endregion
@@ -14,6 +14,12 @@ var import_bundle_response = (/* @__PURE__ */ __commonJSMin(((exports, module) =
14
14
  ]);
15
15
  const PROGRESS_PART = /^\{"done":(\d+),"total":(\d+),"percent":(\d+)\}$/;
16
16
  const PROGRESS_INTERVAL_MS = 1e3;
17
+ const MANIFEST_PATHS = /* @__PURE__ */ new Set([
18
+ "/",
19
+ "/manifest",
20
+ "/index.exp"
21
+ ]);
22
+ const observedServers = /* @__PURE__ */ new WeakSet();
17
23
  function clientPidFromLsof(output, clientPort, serverPort) {
18
24
  const connection = new RegExp(`:${clientPort}->\\S*:${serverPort}$`);
19
25
  let pid = null;
@@ -30,9 +36,54 @@ var import_bundle_response = (/* @__PURE__ */ __commonJSMin(((exports, module) =
30
36
  "-Fpn"
31
37
  ])).then((output) => clientPidFromLsof(output, remotePort, localPort)).catch(() => null);
32
38
  }
33
- function bundleResponseMiddleware(write, { runLsof } = {}) {
39
+ function manifestPlatform(req) {
40
+ if (req.method !== "GET") return null;
41
+ let url;
42
+ try {
43
+ url = new URL(req.url, "http://localhost");
44
+ } catch {
45
+ return null;
46
+ }
47
+ if (!MANIFEST_PATHS.has(url.pathname)) return null;
48
+ const platform = url.searchParams.get("platform") || req.headers["expo-platform"] || req.headers["exponent-platform"];
49
+ return platform === "ios" || platform === "android" ? platform : null;
50
+ }
51
+ function observeManifestRequests(server, write) {
52
+ if (!server || observedServers.has(server)) return;
53
+ observedServers.add(server);
54
+ server.prependListener("request", (req, res) => {
55
+ const platform = manifestPlatform(req);
56
+ if (!platform || req.headers["x-stim-metro-warmup"] === "1") return;
57
+ const requestId = randomUUID();
58
+ const emit = (stage, statusCode) => {
59
+ try {
60
+ write({
61
+ ts: Date.now(),
62
+ src: "metro",
63
+ level: "debug",
64
+ event: `manifest_request_${stage}`,
65
+ platform,
66
+ requestId,
67
+ ...statusCode ? { statusCode } : {},
68
+ msg: `${platform} manifest request ${stage}`
69
+ });
70
+ } catch {}
71
+ };
72
+ emit("started");
73
+ let ended = false;
74
+ const finish = (complete) => {
75
+ if (ended) return;
76
+ ended = true;
77
+ emit(complete && res.statusCode === 200 ? "finished" : "failed", res.statusCode);
78
+ };
79
+ res.once("finish", () => finish(true));
80
+ res.once("close", () => finish(false));
81
+ });
82
+ }
83
+ function bundleResponseMiddleware(write, { runLsof, manifests = false } = {}) {
34
84
  return (req, res, next) => {
35
85
  if (req.method === "GET" && req.url === "/_stim/metro-warmup") {
86
+ if (manifests) observeManifestRequests(req.socket.server, write);
36
87
  res.end("ready");
37
88
  return;
38
89
  }
@@ -59,6 +110,7 @@ var import_bundle_response = (/* @__PURE__ */ __commonJSMin(((exports, module) =
59
110
  requestId,
60
111
  ...progress ?? { statusCode },
61
112
  msg: progress ? `${platform} bundle ${progress.percent}%` : `${platform} bundle ${kind} ${stage}`,
113
+ ...stage === "started" && !prefetch ? { url: `${url.pathname}${url.search}` } : {},
62
114
  ...pid ? { clientPid: pid } : {}
63
115
  });
64
116
  } catch {}
@@ -1,9 +1,9 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { n as METRO_COMMAND_PORT } from "./settings-RKwY33wv.mjs";
3
- import { T as MODE_COMMAND } from "./project-Dz-hWkb-.mjs";
4
- import { f as signalProcessTree } from "./metro-Bu8LBfzS.mjs";
2
+ import { n as METRO_COMMAND_PORT } from "./settings-B5tCoq9N.mjs";
3
+ import { T as MODE_COMMAND } from "./project-BiC68mIp.mjs";
4
+ import { f as signalProcessTree } from "./metro-1pJgCX4U.mjs";
5
5
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
6
- import { g as projectNodeLine, p as recordFromLine, v as withProjectNode, y as superviseChildServer } from "./server-expo-Tt_hLRpy.mjs";
6
+ import { g as projectNodeLine, p as recordFromLine, v as withProjectNode, y as superviseChildServer } from "./server-expo-Ck8EIidM.mjs";
7
7
  import { join } from "node:path";
8
8
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
9
9
  //#region src/supervisor/server-command.ts
@@ -0,0 +1,2 @@
1
+ import { m as startExpoServer } from "./server-expo-Ck8EIidM.mjs";
2
+ export { startExpoServer };
@@ -1,9 +1,9 @@
1
1
  import { o as cancellableSleep, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { n as stripAnsi, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
3
- import { q as resolveProjectSettings } from "./settings-RKwY33wv.mjs";
4
- import { C as resolvePackageJson } from "./project-Dz-hWkb-.mjs";
3
+ import { J as resolveProjectSettings } from "./settings-B5tCoq9N.mjs";
4
+ import { C as resolvePackageJson } from "./project-BiC68mIp.mjs";
5
5
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
6
- import { a as expoMetroStoreEnv, c as registerMetroStore, f as resolveMetroSharedCache, i as expoMetroConfigPath, n as supervisorError, o as metroStoreConfirmedRoot, s as metroStoreRoot } from "./errors-ccaPc4ox.mjs";
6
+ import { a as expoMetroStoreEnv, c as registerMetroStore, f as resolveMetroSharedCache, i as expoMetroConfigPath, n as supervisorError, o as metroStoreConfirmedRoot, s as metroStoreRoot } from "./errors-DHm_U5gv.mjs";
7
7
  import { accessSync, constants, existsSync, readFileSync } from "node:fs";
8
8
  import { delimiter, dirname, join } from "node:path";
9
9
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
@@ -249,7 +249,7 @@ function recordFromLine(line, { stream = "stdout", source = "expo" } = {}) {
249
249
  if (!msg.trim()) return null;
250
250
  if (stream === "stderr" && msg.startsWith("stim-bundle-response: ")) try {
251
251
  const record = JSON.parse(msg.slice(22));
252
- if (record.src === "metro" && /^bundle_(response|prefetch)_(started|progress|finished|failed)$/.test(record.event) && ["ios", "android"].includes(record.platform) && typeof record.requestId === "string" && Number.isFinite(record.ts)) return record;
252
+ if (record.src === "metro" && /^(?:bundle_(?:response|prefetch)_(?:started|progress|finished|failed)|manifest_request_(?:started|finished|failed))$/.test(record.event) && ["ios", "android"].includes(record.platform) && typeof record.requestId === "string" && Number.isFinite(record.ts)) return record;
253
253
  } catch {}
254
254
  const confirmed = metroStoreConfirmedRoot(msg);
255
255
  if (confirmed) return {
@@ -286,7 +286,7 @@ function parseExpoWaitingOnUrl(line) {
286
286
  if (HTTP_SCHEME_RE.test(url)) return url;
287
287
  return URL_SCHEME_RE.test(url) ? url.replace(/^[^:]+:/, "https:") : url;
288
288
  }
289
- function resolveMetroStoreInjection(root, { log, env, settings }) {
289
+ function resolveMetroStoreInjection(root, { log, env, settings, port }) {
290
290
  const sharedCache = resolveMetroSharedCache(settings);
291
291
  if (!sharedCache) log.write({
292
292
  src: "metro",
@@ -317,6 +317,7 @@ function resolveMetroStoreInjection(root, { log, env, settings }) {
317
317
  const storeRoot = sharedCache ? metroStoreRoot(root) : "";
318
318
  const additions = expoMetroStoreEnv({
319
319
  root,
320
+ port,
320
321
  storeRoot,
321
322
  adapterPath,
322
323
  existingOverride: env.EXPO_OVERRIDE_METRO_CONFIG
@@ -350,7 +351,8 @@ async function startExpoServer({ root, port, logsDir, writer = null, spawnFn = n
350
351
  const storeEnv = resolveMetroStoreInjection(root, {
351
352
  log,
352
353
  env: process.env,
353
- settings: settings ?? resolveProjectSettings(root).settings
354
+ settings: settings ?? resolveProjectSettings(root).settings,
355
+ port
354
356
  });
355
357
  const [command, commandArgs] = platform === "win32" && resolved.source === "package" ? [process.execPath, [bin, ...args]] : [bin, args];
356
358
  const node = withProjectNode(root, process.env);
@@ -6,10 +6,10 @@ import { tmpdir } from "node:os";
6
6
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
7
7
  import { ambientEnv, buildCacheRoot, compiledHelper, configDir } from "@stim-cli/core";
8
8
  import { REMOTE_DEVICE_BACKENDS, SETTINGS, SETTING_GROUPS, TUNNEL_MODES, WEB_VIEWPORTS, acceptsShape, coerceSettingText, expectedShape, isLayeredSetting, settingDefinition, settingValueError } from "@stim-cli/core/state";
9
- import { dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, normalize, relative as relative$1, resolve as resolve$1, sep as sep$1 } from "path";
9
+ import { basename as basename$1, dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, normalize, relative as relative$1, resolve as resolve$1, sep as sep$1 } from "path";
10
10
  import { fileURLToPath } from "node:url";
11
11
  import { existsSync as existsSync$1, lstatSync as lstatSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, realpathSync as realpathSync$1, statSync as statSync$1 } from "fs";
12
- import { chmod, lstat, mkdir, readdir, rm, utimes } from "node:fs/promises";
12
+ import { chmod, lstat, mkdir, readdir, realpath, rm, utimes } from "node:fs/promises";
13
13
  //#region src/temporary.ts
14
14
  function existingPath(path) {
15
15
  const missing = [];
@@ -381,66 +381,61 @@ function missingDestinationReason(target, rel) {
381
381
  }
382
382
  return lstatSync$1(join$1(target, rel), { throwIfNoEntry: false }) ? "exists" : null;
383
383
  }
384
- const SWEEP_CONCURRENCY = 32;
385
- async function removeExclusionsIn({ path, rel }, signal) {
384
+ const AUTOLINKING_PATH = [
385
+ "android",
386
+ "build",
387
+ "generated",
388
+ "autolinking"
389
+ ];
390
+ function knownCopiedPaths(rel) {
391
+ const segments = rel.split("/");
392
+ const paths = [];
393
+ if (segments.at(-1) === "node_modules") paths.push(".pnpm-store", "expo-modules-jsi/apple/.DerivedData");
394
+ for (let covered = 1; covered < AUTOLINKING_PATH.length; covered++) if (AUTOLINKING_PATH.slice(0, covered).every((segment, i) => segments.at(i - covered) === segment)) paths.push(AUTOLINKING_PATH.slice(covered).join("/"));
395
+ return paths;
396
+ }
397
+ function isMissingError(error) {
398
+ return error instanceof Error && "code" in error && (error.code === "ENOENT" || error.code === "ENOTDIR");
399
+ }
400
+ async function removeCopiedPath(root, rel, signal) {
386
401
  signal.throwIfAborted();
387
- const entries = await readdir(path, { withFileTypes: true });
388
- const excluded = entries.filter((entry) => isCarrySkipped(`${rel}/${entry.name}`));
389
- if (excluded.length) {
390
- const stat = await lstat(path);
391
- await chmod(path, stat.mode | 448);
392
- try {
393
- for (const entry of excluded) {
394
- signal.throwIfAborted();
395
- await removeTemporaryEntryAsync(join$1(path, entry.name), signal);
396
- }
397
- } finally {
398
- await utimes(path, stat.atime, stat.mtime);
399
- await chmod(path, stat.mode);
400
- }
402
+ const path = join$1(root, rel);
403
+ let parent;
404
+ try {
405
+ parent = await realpath(dirname$1(path));
406
+ } catch (error) {
407
+ if (isMissingError(error)) return;
408
+ throw error;
401
409
  }
402
- const children = [];
403
- for (const entry of entries) {
404
- const child = `${rel}/${entry.name}`;
405
- if (entry.isDirectory() && !isCarrySkipped(child)) children.push({
406
- path: join$1(path, entry.name),
407
- rel: child
410
+ const inside = relative$1(root, parent);
411
+ if (inside === ".." || inside.startsWith(`..${sep$1}`) || isAbsolute$1(inside)) return;
412
+ const stat = await lstat(parent);
413
+ const target = join$1(parent, basename$1(path));
414
+ try {
415
+ await lstat(target);
416
+ } catch (error) {
417
+ if (isMissingError(error)) return;
418
+ throw error;
419
+ }
420
+ await chmod(parent, stat.mode | 448);
421
+ try {
422
+ await removeTemporaryEntryAsync(target, signal);
423
+ } finally {
424
+ await utimes(parent, stat.atime, stat.mtime);
425
+ await chmod(parent, stat.mode);
426
+ }
427
+ }
428
+ async function removeKnownCopiedPaths(path, rel, signal) {
429
+ const paths = knownCopiedPaths(rel);
430
+ if (basename$1(rel) === "node_modules") {
431
+ const virtualStore = await readdir(join$1(path, ".pnpm")).catch((error) => {
432
+ if (isMissingError(error)) return [];
433
+ throw error;
408
434
  });
435
+ for (const name of virtualStore) if (name.startsWith("expo-modules-jsi@")) paths.push(`.pnpm/${name}/node_modules/expo-modules-jsi/apple/.DerivedData`);
409
436
  }
410
- return children;
411
- }
412
- async function removeCopiedExclusionsAsync(path, rel, signal) {
413
- let active = 0;
414
- const waiting = [];
415
- const acquire = async () => {
416
- if (active < SWEEP_CONCURRENCY) active += 1;
417
- else await new Promise((wake) => waiting.push(wake));
418
- };
419
- const release = () => {
420
- const next = waiting.shift();
421
- if (next) next();
422
- else active -= 1;
423
- };
424
- let failure;
425
- const visit = async (directory) => {
426
- await acquire();
427
- let children;
428
- try {
429
- if (failure) return;
430
- children = await removeExclusionsIn(directory, signal);
431
- } catch (error) {
432
- failure ??= { error };
433
- return;
434
- } finally {
435
- release();
436
- }
437
- await Promise.all(children.map(visit));
438
- };
439
- await visit({
440
- path,
441
- rel
442
- });
443
- if (failure) throw failure.error;
437
+ const root = await realpath(path);
438
+ for (const known of paths) await removeCopiedPath(root, known, signal);
444
439
  }
445
440
  async function cloneIgnoredEntries({ root, target, patterns, operation }) {
446
441
  const options = {
@@ -505,7 +500,7 @@ async function cloneIgnoredEntries({ root, target, patterns, operation }) {
505
500
  ], options);
506
501
  cloned = false;
507
502
  }
508
- if ((await lstat(to)).isDirectory()) await removeCopiedExclusionsAsync(to, rel, operation.signal);
503
+ if ((await lstat(to)).isDirectory()) await removeKnownCopiedPaths(to, rel, operation.signal);
509
504
  copied.push(rel);
510
505
  } catch (cause) {
511
506
  if (cause instanceof WorkspaceProcessCleanupError || cause instanceof Error && "reportCleanup" in cause) throw cause;
@@ -1391,6 +1386,9 @@ function iosSimSlimProfileSetting(settings, settingsRoot) {
1391
1386
  throw new Error(`Could not read ios.simslimProfile ${value}: ${String(error?.message || error)}`, { cause: error });
1392
1387
  }
1393
1388
  }
1389
+ function iosSimSlimDefaultSetting(settings) {
1390
+ return isPlainObject(settings) && isPlainObject(settings.ios) && settings.ios.simslim === "on";
1391
+ }
1394
1392
  function iosString(settings, key) {
1395
1393
  if (!isPlainObject(settings) || !isPlainObject(settings.ios)) return void 0;
1396
1394
  return settings.ios[key];
@@ -1744,4 +1742,4 @@ function webSettings(settings) {
1744
1742
  };
1745
1743
  }
1746
1744
  //#endregion
1747
- export { settingOriginScope as $, metroIdleStopMinutesSetting as A, readWorktreeExclude as At, realpathInside as B, warmWorktreePaths as Bt, iosSigningIdentitySha1Setting as C, isPodInstallChurn as Ct, mergeSettingsLayers as D, locallyKnownUpstream as Dt, maintenanceKeepSetting as E, listWorktreesAsync as Et, parseIosRemote as F, resolveFullRefAsync as Ft, resolveCacheProviderConfig as G, temporaryRoot as Gt, remoteEasFallbackSetting as H, makeTemporaryDirectory as Ht, projectSettingsContext as I, resolveSourceCheckoutAsync as It, resolveProjectSettingsAsync as J, resolveIosProjectDir as K, projectSettingsContextAsync as L, restoreFileAsync as Lt, metroTunnelSettingError as M, repoRoot as Mt, metroWarmupUrlSetting as N, repoRootAsync as Nt, metroCommandSetting as O, locallyKnownUpstreamAsync as Ot, ngrokUrlSetting as P, resolveFullRef as Pt, settingOrigin as Q, publicUrlSetting as R, sourceCheckoutOf as Rt, iosSigningIdentitySettingError as S, hasUncommittedWorkAsync as St, iosSimSlimProfileSetting as T, listWorktrees as Tt, remoteIosSetting as U, removeTemporaryEntry as Ut, remoteAndroidSetting as V, filesystemDevice as Vt, resolveAndroidLayout as W, removeTemporaryEntryAsync as Wt, runnableMetroCommand as X, resolveSettings as Y, settingFile as Z, iosLanHostSetting as _, gitCommonDir as _t, SETTING_SHAPE_REMEDY as a, webSettings as at, iosProjectDirSettingError as b, hasPopulatedSubmodulesAsync as bt, androidDataPartitionSizeBytes as c, detectProviders as ct, androidLayoutSetting as d, branchExistsAsync as dt, settingShapeErrors as et, androidLayoutSettingError as f, cloneIgnoredEntries as ft, deviceReclaimIdleMinutesSetting as g, dirtyPathsAsync as gt, deviceIdleShutdownMinutesSetting as h, dirtyFingerprintFiles as ht, SETTINGS_WITH_RESOLVE_TIME_FALLBACK as i, unknownSettingKeys as it, metroPortSetting as j, removeWorktreeAsync as jt, metroCommandSettingError as k, podsOutOfSync as kt, androidDataPartitionSizeGbSetting as l, planMetroReach as lt, defaultAndroidLayout as m, depsOutOfSync as mt, METRO_COMMAND_PORT as n, settingsLayers as nt, androidAvdConfigSetting as o, workspaceHiddenSetting as ot, cacheProviderSettingError as p, deleteBranchAsync as pt, resolveProjectSettings as q, PATH_SETTINGS as r, tunnelModeSetting as rt, androidAvdConfigSettingError as s, PUBLIC_METRO_ENV as st, ANDROID_AVD_CONFIG_HELP as t, settingValueAt as tt, androidDataPartitionSizeGbSettingError as u, resolveTailscaleBinary as ut, iosLanHostSettingError as v, gitCommonDirAsync as vt, iosSigningIdentitySha1SettingError as w, linkedWorktreesOnDisk as wt, iosSigningIdentitySetting as x, hasRemoteAsync as xt, iosProjectDirSetting as y, gitCommonDirOnDisk as yt, readCommittedSettings as z, unpushedCommitsAsync as zt };
1745
+ export { settingOrigin as $, metroCommandSettingError as A, podsOutOfSync as At, readCommittedSettings as B, unpushedCommitsAsync as Bt, iosSigningIdentitySha1Setting as C, hasUncommittedWorkAsync as Ct, maintenanceKeepSetting as D, listWorktreesAsync as Dt, iosSimSlimProfileSetting as E, listWorktrees as Et, ngrokUrlSetting as F, resolveFullRef as Ft, resolveAndroidLayout as G, removeTemporaryEntryAsync as Gt, remoteAndroidSetting as H, filesystemDevice as Ht, parseIosRemote as I, resolveFullRefAsync as It, resolveProjectSettings as J, resolveCacheProviderConfig as K, temporaryRoot as Kt, projectSettingsContext as L, resolveSourceCheckoutAsync as Lt, metroPortSetting as M, removeWorktreeAsync as Mt, metroTunnelSettingError as N, repoRoot as Nt, mergeSettingsLayers as O, locallyKnownUpstream as Ot, metroWarmupUrlSetting as P, repoRootAsync as Pt, settingFile as Q, projectSettingsContextAsync as R, restoreFileAsync as Rt, iosSigningIdentitySettingError as S, hasRemoteAsync as St, iosSimSlimDefaultSetting as T, linkedWorktreesOnDisk as Tt, remoteEasFallbackSetting as U, makeTemporaryDirectory as Ut, realpathInside as V, warmWorktreePaths as Vt, remoteIosSetting as W, removeTemporaryEntry as Wt, resolveSettings as X, resolveProjectSettingsAsync as Y, runnableMetroCommand as Z, iosLanHostSetting as _, dirtyPathsAsync as _t, SETTING_SHAPE_REMEDY as a, unknownSettingKeys as at, iosProjectDirSettingError as b, gitCommonDirOnDisk as bt, androidDataPartitionSizeBytes as c, PUBLIC_METRO_ENV as ct, androidLayoutSetting as d, resolveTailscaleBinary as dt, settingOriginScope as et, androidLayoutSettingError as f, branchExistsAsync as ft, deviceReclaimIdleMinutesSetting as g, dirtyFingerprintFiles as gt, deviceIdleShutdownMinutesSetting as h, depsOutOfSync as ht, SETTINGS_WITH_RESOLVE_TIME_FALLBACK as i, tunnelModeSetting as it, metroIdleStopMinutesSetting as j, readWorktreeExclude as jt, metroCommandSetting as k, locallyKnownUpstreamAsync as kt, androidDataPartitionSizeGbSetting as l, detectProviders as lt, defaultAndroidLayout as m, deleteBranchAsync as mt, METRO_COMMAND_PORT as n, settingValueAt as nt, androidAvdConfigSetting as o, webSettings as ot, cacheProviderSettingError as p, cloneIgnoredEntries as pt, resolveIosProjectDir as q, PATH_SETTINGS as r, settingsLayers as rt, androidAvdConfigSettingError as s, workspaceHiddenSetting as st, ANDROID_AVD_CONFIG_HELP as t, settingShapeErrors as tt, androidDataPartitionSizeGbSettingError as u, planMetroReach as ut, iosLanHostSettingError as v, gitCommonDir as vt, iosSigningIdentitySha1SettingError as w, isPodInstallChurn as wt, iosSigningIdentitySetting as x, hasPopulatedSubmodulesAsync as xt, iosProjectDirSetting as y, gitCommonDirAsync as yt, publicUrlSetting as z, sourceCheckoutOf as zt };
@@ -1,4 +1,4 @@
1
- import { a as layerFile, c as settingEntry, i as SettingsRefusal, n as readScope, o as readSettingsContext, r as requireSetting, s as readSettingsPayload, t as mutateSetting } from "./settings-write--gj6MACV.mjs";
1
+ import { a as layerFile, c as settingEntry, i as SettingsRefusal, n as readScope, o as readSettingsContext, r as requireSetting, s as readSettingsPayload, t as mutateSetting } from "./settings-write-n0zwfohx.mjs";
2
2
  import { SETTING_SCOPES } from "@stim-cli/core/state";
3
3
  import chalk from "chalk";
4
4
  //#region src/commands/settings.ts
@@ -1,10 +1,10 @@
1
1
  import { u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
2
2
  import { A as writeConfigSettingAsync, O as withConfigLockAsync$1, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-BZhXY15H.mjs";
3
3
  import { a as killOnAbort, i as gitPath } from "./operation-exec-CUZifp6Z.mjs";
4
- import { it as unknownSettingKeys, z as readCommittedSettings } from "./settings-RKwY33wv.mjs";
5
- import { r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-Dz-hWkb-.mjs";
4
+ import { B as readCommittedSettings, at as unknownSettingKeys } from "./settings-B5tCoq9N.mjs";
5
+ import { r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-BiC68mIp.mjs";
6
6
  import { i as stimDesktopInstalledAsync, n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-DS0mzR8U.mjs";
7
- import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-CdPwYwvs.mjs";
7
+ import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-BaoQ0t-J.mjs";
8
8
  import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
9
9
  import { join } from "node:path";
10
10
  import { configDir } from "@stim-cli/core";
@@ -315,6 +315,25 @@
315
315
  "relative": true
316
316
  }
317
317
  },
318
+ "simslim": {
319
+ "description": "Slim every Stim-owned iOS simulator with SimSlim's default categories when no ios.simslimProfile is set; off in a project opts that app out",
320
+ "type": "string",
321
+ "enum": [
322
+ "on",
323
+ "off"
324
+ ],
325
+ "default": "off",
326
+ "x-stim": {
327
+ "key": "ios.simslim",
328
+ "kind": "choice",
329
+ "scopes": [
330
+ "machine",
331
+ "workspace",
332
+ "repo",
333
+ "committed"
334
+ ]
335
+ }
336
+ },
318
337
  "simslimProfile": {
319
338
  "description": "SimSlim JSON profile under the app",
320
339
  "type": "string",
@@ -1283,6 +1302,25 @@
1283
1302
  ]
1284
1303
  }
1285
1304
  },
1305
+ "simslim": {
1306
+ "description": "Slim every Stim-owned iOS simulator with SimSlim's default categories when no ios.simslimProfile is set; off in a project opts that app out",
1307
+ "type": "string",
1308
+ "enum": [
1309
+ "on",
1310
+ "off"
1311
+ ],
1312
+ "default": "off",
1313
+ "x-stim": {
1314
+ "key": "ios.simslim",
1315
+ "kind": "choice",
1316
+ "scopes": [
1317
+ "machine",
1318
+ "workspace",
1319
+ "repo",
1320
+ "committed"
1321
+ ]
1322
+ }
1323
+ },
1286
1324
  "appStoreConnectKeyPath": {
1287
1325
  "description": "App Store Connect API key (.p8) that `stim device provision ios` authenticates with",
1288
1326
  "type": "string",