stim 1.23.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +3 -2
  2. package/dist/{acquire-artifact-ybouwJSR.mjs → acquire-artifact-CEs02U2o.mjs} +2 -2
  3. package/dist/{act-DG54PWtJ.mjs → act-Cyvm8xYc.mjs} +40 -25
  4. package/dist/{activity-B5RtpFda.mjs → activity-Dq3ZcdD8.mjs} +6 -6
  5. package/dist/{agent-device-usage-output-UJ5gC80l.mjs → agent-device-usage-output-CccomeE0.mjs} +5 -5
  6. package/dist/{android-C7sVmyI9.mjs → android-882m4hxX.mjs} +140 -46
  7. package/dist/{android-BoUJKbfz.mjs → android-BZppyPe_.mjs} +66 -46
  8. package/dist/{android-DR5lZ2Az.mjs → android-CX5IcRuf.mjs} +13 -3
  9. package/dist/{android-CHH4KLOR.mjs → android-DcztblCT.mjs} +5 -5
  10. package/dist/{android-cas-ngferVq2.mjs → android-cas-BtCOrNqb.mjs} +3 -3
  11. package/dist/android-cas-compiler.mjs +1 -1
  12. package/dist/api.d.mts +22 -4
  13. package/dist/api.mjs +32 -31
  14. package/dist/{artifact-5RteZem7.mjs → artifact-BR5VNArK.mjs} +17 -16
  15. package/dist/{artifact-Dwdo7k1E.mjs → artifact-Bdt_n9Jc.mjs} +17 -16
  16. package/dist/{artifact-platform-CXcmX_j3.mjs → artifact-platform-CMRc0M_r.mjs} +3 -3
  17. package/dist/{browser-web-CeEVlGug.mjs → browser-web-ycg9qWB8.mjs} +16 -17
  18. package/dist/{budget-DnPX3DXj.mjs → budget-dPGuhNai.mjs} +101 -40
  19. package/dist/{build-CqufZFqy.mjs → build-CaF574eS.mjs} +31 -28
  20. package/dist/{build-cache-Dv7RN200.mjs → build-cache-HFUQ9eLz.mjs} +152 -19
  21. package/dist/{build-plan-C8CIvRyi.mjs → build-plan-JsDUq4w1.mjs} +8 -7
  22. package/dist/{cache-manifest-DSeQjt-Q.mjs → cache-manifest-BPXRONJz.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{ccache-RcAy92gH.mjs → ccache-CCn1S6qG.mjs} +6 -6
  25. package/dist/{cdp-3fwICjzi.mjs → cdp-BG3FJCCx.mjs} +1 -1
  26. package/dist/{chrome-Bbw689-6.mjs → chrome-BvV8ssI3.mjs} +1 -1
  27. package/dist/{cli-D-J9fWGV.mjs → cli-xqAidP7O.mjs} +20 -20
  28. package/dist/cli.mjs +1 -1
  29. package/dist/{client-yyso1bwi.mjs → client-18-ZowoT.mjs} +254 -28
  30. package/dist/collector-run.mjs +6 -6
  31. package/dist/{command-output-Db8BqzxH.mjs → command-output-DxC0k2rk.mjs} +3 -2
  32. package/dist/{config-DlrsduwG.mjs → config-BZhXY15H.mjs} +3 -3
  33. package/dist/{created-devices-x9rN6bhs.mjs → created-devices-D2Aca-xu.mjs} +6 -2
  34. package/dist/{dependency-state-1I9KZT1Y.mjs → dependency-state-C56ll9hY.mjs} +2 -2
  35. package/dist/{detached-entry-BwNEtIrP.mjs → detached-entry-KmieOKgN.mjs} +1 -1
  36. package/dist/{dev-client-BnYSDiKa.mjs → dev-client-w_fok0Ek.mjs} +3 -3
  37. package/dist/{device-BvzPUBs3.mjs → device-4RUugw5X.mjs} +16 -16
  38. package/dist/{device-CCkWmkAA.mjs → device-BktRGdjS.mjs} +40 -44
  39. package/dist/{device-capacity-CjaSdrhg.mjs → device-capacity-Ic-kdmEV.mjs} +20 -16
  40. package/dist/device-host-worker.mjs +17 -17
  41. package/dist/{device-ios-uOiEETX2.mjs → device-ios-DzpSlZyd.mjs} +23 -24
  42. package/dist/{device-lease-run-BgwPHc6u.mjs → device-lease-run-DUtkbqBQ.mjs} +5 -5
  43. package/dist/{device-pool-C-ptmZTa.mjs → device-pool-CgBHk401.mjs} +3 -3
  44. package/dist/{doctor-pxxvipYC.mjs → doctor-BZ6oxNum.mjs} +1 -1
  45. package/dist/{doctor-8sr2tFOL.mjs → doctor-C33AzVfR.mjs} +28 -28
  46. package/dist/{doctor-D2SN3Ltx.mjs → doctor-DZgpqR6J.mjs} +17 -16
  47. package/dist/{doctor-fingerprint-DZLoYFVb.mjs → doctor-fingerprint-zlujA1Gs.mjs} +1 -1
  48. package/dist/doctor-fingerprint.mjs +1 -1
  49. package/dist/{doctor-watchman-sy_RNhFt.mjs → doctor-watchman-B453A231.mjs} +5 -5
  50. package/dist/{eas-build-CyjU5K7E.mjs → eas-build-CxKUNHsb.mjs} +4 -4
  51. package/dist/{eas-fallback-DV3Wytf1.mjs → eas-fallback-LMxk9Kw0.mjs} +14 -14
  52. package/dist/{eas-session-ledger-BzzsX97d.mjs → eas-session-ledger-Ck6YXPAO.mjs} +12 -8
  53. package/dist/{error-diagnostics-C6sVoeqO.mjs → error-diagnostics-BkKCZq4P.mjs} +17 -42
  54. package/dist/{exec-DEoAhcze.mjs → exec-VFRpu1iA.mjs} +116 -28
  55. package/dist/{gc-DLbzvTP2.mjs → gc-DDWEAj0w.mjs} +2 -2
  56. package/dist/{gc-CDoogxAI.mjs → gc-yVKpAOKM.mjs} +205 -28
  57. package/dist/{guide-BC37GcDG.mjs → guide-Bggftwc5.mjs} +252 -73
  58. package/dist/{hosted-android-CkclQig_.mjs → hosted-android-D4dweBof.mjs} +4 -4
  59. package/dist/{hosted-client-ByuMMO5s.mjs → hosted-client-BBTVe3X6.mjs} +4 -4
  60. package/dist/{hosted-ios-DtYHeuYR.mjs → hosted-ios-Sn0djzg8.mjs} +1 -1
  61. package/dist/{hosted-logs-Br84qWy1.mjs → hosted-logs-CYIZ5ubJ.mjs} +11 -6
  62. package/dist/{hosted-macos-DdtYajZt.mjs → hosted-macos-CXjsUNBR.mjs} +7 -7
  63. package/dist/{hosted-native-UPI9zdZ4.mjs → hosted-native-Doxbfzem.mjs} +58 -11
  64. package/dist/{idle-shutdown-DO7oIRlc.mjs → idle-shutdown-BInjLKqm.mjs} +10 -10
  65. package/dist/{ios-DZZbNYlY.mjs → ios-B1FXRCMX.mjs} +71 -44
  66. package/dist/{ios-vbUOqGXu.mjs → ios-BItP6lkn.mjs} +8 -8
  67. package/dist/{ios-hcBpnEGk.mjs → ios-CVUFFZ6C.mjs} +70 -13
  68. package/dist/{ios-xtlRHaeB.mjs → ios-ENC4sRPA.mjs} +1 -1
  69. package/dist/{ios-device-BXZ0c7Kb.mjs → ios-device-B6HK951C.mjs} +1 -1
  70. package/dist/{ios-device-JC3uWM4K.mjs → ios-device-BI38NFFH.mjs} +3 -3
  71. package/dist/{ios-project-CVyNwjAF.mjs → ios-project-KYqeJURj.mjs} +5 -5
  72. package/dist/{ios-signing-BtAffm0A.mjs → ios-signing-4c_qXvQm.mjs} +2 -2
  73. package/dist/{ios-state-Dtw5K2aI.mjs → ios-state-DlElquYD.mjs} +15 -7
  74. package/dist/{js-swap-C3QxUFJR.mjs → js-swap-BvrQvXHY.mjs} +7 -6
  75. package/dist/{launch-CHY3p-yz.mjs → launch-BVlyQw3T.mjs} +51 -49
  76. package/dist/{launch-Bz7JtaC4.mjs → launch-SfzGH_s9.mjs} +48 -29
  77. package/dist/{logs-mxqsWpJs.mjs → logs-DXE32kyb.mjs} +16 -9
  78. package/dist/{logs-CtNeNDuq.mjs → logs-ovlU7m7N.mjs} +8 -6
  79. package/dist/{macos-inNFbBWc.mjs → macos-B3BveDrU.mjs} +1 -1
  80. package/dist/{macos-u0BoHKnO.mjs → macos-CCfhb-jT.mjs} +49 -42
  81. package/dist/macos-run.mjs +1 -1
  82. package/dist/maintenance-run.mjs +7 -7
  83. package/dist/{metro-DiXtA3Ty.mjs → metro-Bu8LBfzS.mjs} +4 -4
  84. package/dist/{metro-gateway-CKZqKqx7.mjs → metro-gateway-DtsOy-0P.mjs} +3 -4
  85. package/dist/{named-ports-DkEzOfzO.mjs → named-ports-BWDuU5oQ.mjs} +3 -3
  86. package/dist/{native-android-CdCSylTn.mjs → native-android-96BBizbq.mjs} +17 -17
  87. package/dist/{native-gradle-artifact-inputs-DHFnmrVf.mjs → native-gradle-artifact-inputs-BcLYBZil.mjs} +5 -5
  88. package/dist/{native-run-BUTu8T7A.mjs → native-run-BmH7U8pr.mjs} +6 -6
  89. package/dist/{native-runtime-CRSOZxKY.mjs → native-runtime-DgtJkzIa.mjs} +10 -9
  90. package/dist/{native-source-Y0yLhFyQ.mjs → native-source-D-4Dh4JU.mjs} +7 -4
  91. package/dist/{native-xcode-inputs-G6rkkhxu.mjs → native-xcode-inputs-irplbQb0.mjs} +2 -2
  92. package/dist/{native-xcode-ios-_os2PlCD.mjs → native-xcode-ios-BY-6hh6M.mjs} +18 -18
  93. package/dist/offload-worker.d.mts +7 -2
  94. package/dist/offload-worker.mjs +104 -43
  95. package/dist/{operation-exec-BW0em61G.mjs → operation-exec-CUZifp6Z.mjs} +2 -25
  96. package/dist/{ownership-C5fo5Edb.mjs → ownership-DxlZGDcV.mjs} +3 -3
  97. package/dist/{page-DBL2PiUU.mjs → page-CzEA_-5_.mjs} +2 -3
  98. package/dist/phone-reverses-BdsdesVF.mjs +57 -0
  99. package/dist/{placement-log-BnGgJRRZ.mjs → placement-log-DUvqqsB-.mjs} +1 -1
  100. package/dist/{plan-placement-BU42oOyT.mjs → plan-placement-4axc0Hs7.mjs} +3 -3
  101. package/dist/{ports-BSmQKzW7.mjs → ports-D-E_OiAO.mjs} +3 -3
  102. package/dist/{prebuild-BFm63bQ0.mjs → prebuild-DmVCf5xb.mjs} +14 -9
  103. package/dist/{project-CTLNHCfE.mjs → project-Dz-hWkb-.mjs} +21 -17
  104. package/dist/{pull-request-W1IuLXDt.mjs → pull-request-CbNlkFok.mjs} +2 -2
  105. package/dist/pull-requests.mjs +1 -1
  106. package/dist/{react-native-android-CFgUroxW.mjs → react-native-android-DOinxgwB.mjs} +75 -32
  107. package/dist/{react-native-build-CmJkTljQ.mjs → react-native-build-AuCu-aAP.mjs} +22 -19
  108. package/dist/{react-native-doctor-LTF-Xt8l.mjs → react-native-doctor-2ivJUmwZ.mjs} +10 -9
  109. package/dist/{react-native-ios-ChBF1MkB.mjs → react-native-ios-D5zTIuH8.mjs} +38 -22
  110. package/dist/{recordings-CQmfzAh7.mjs → recordings-CdPwYwvs.mjs} +1 -1
  111. package/dist/{registration-BcRgF6Ox.mjs → registration-CN6nlhcD.mjs} +1 -1
  112. package/dist/{reload-DF9hqUUB.mjs → reload-C1TTVesC.mjs} +144 -42
  113. package/dist/{reload-RBi1nj6Z.mjs → reload-Ck9RJeSq.mjs} +1 -1
  114. package/dist/{remote-BmvMCcJw.mjs → remote-DEZ7AOVq.mjs} +7 -7
  115. package/dist/{result-Cx5CRLvS.mjs → result-DqBrb12U.mjs} +40 -17
  116. package/dist/{run-DidHghD1.mjs → run-BIwoU44q.mjs} +2 -2
  117. package/dist/{selection-DSMbWEX2.mjs → selection-BLtvaqxc.mjs} +11 -5
  118. package/dist/{server-bare-CafzuyFB.mjs → server-bare-Z1ToVLPn.mjs} +2 -2
  119. package/dist/{server-command-BTiGPEjS.mjs → server-command-C0pmjNdG.mjs} +6 -6
  120. package/dist/server-expo-CEntXzRw.mjs +2 -0
  121. package/dist/{server-expo-D9lEz4aq.mjs → server-expo-Tt_hLRpy.mjs} +37 -13
  122. package/dist/{settings-C7O8A6ZI.mjs → settings-RKwY33wv.mjs} +114 -19
  123. package/dist/{settings-eKF_vJJs.mjs → settings-kkt0vP4w.mjs} +1 -1
  124. package/dist/{settings-write-79mQRr9C.mjs → settings-write--gj6MACV.mjs} +7 -7
  125. package/dist/settings.schema.json +13 -0
  126. package/dist/{simslim-BNckWpXi.mjs → simslim-CdWKT3vA.mjs} +2 -2
  127. package/dist/{slot-launch-D7M2nE4b.mjs → slot-launch-A1BgotaM.mjs} +6 -6
  128. package/dist/{stage-DKNM4ZPd.mjs → stage-ERTMh88n.mjs} +2 -3
  129. package/dist/{start-bjfiScgz.mjs → start-BKGrEhzG.mjs} +75 -35
  130. package/dist/{start-CRfN1kWV.mjs → start-Bmg_qmHi.mjs} +1 -1
  131. package/dist/{state--smjFSTL.mjs → state-B1ig0Kqy.mjs} +4 -4
  132. package/dist/{state-08I3hw3_.mjs → state-BfAltYJP.mjs} +2 -2
  133. package/dist/{stats-DioA6cBU.mjs → stats-B-ckuiUg.mjs} +5 -5
  134. package/dist/{stats-report-BzaPrRm6.mjs → stats-report-n2U5plhk.mjs} +1 -1
  135. package/dist/{status-kzbeWk4x.mjs → status-DfFp6a76.mjs} +24 -24
  136. package/dist/{status-BRROykC8.mjs → status-Fect2w9R.mjs} +1 -1
  137. package/dist/{status-Eqx_20WC.mjs → status-Pw-807f0.mjs} +1 -1
  138. package/dist/{status-watch-BIqqbJ6q.mjs → status-watch-XC7F-AMf.mjs} +5 -5
  139. package/dist/status-worker.mjs +1 -1
  140. package/dist/stim-clonefile.c +18 -0
  141. package/dist/{stim-desktop-D5OGpYZM.mjs → stim-desktop-DS0mzR8U.mjs} +2 -2
  142. package/dist/{stop-B18d8KDw.mjs → stop-BFu7X_Do.mjs} +2 -2
  143. package/dist/{stop-B2uLQfoM.mjs → stop-CL1kDHds.mjs} +55 -21
  144. package/dist/{stop-DzLJc7Ei.mjs → stop-DhclRwOO.mjs} +5 -5
  145. package/dist/supervisor-run.mjs +16 -16
  146. package/dist/{support-BTpZ6RAJ.mjs → support-B1W-hmC2.mjs} +8 -8
  147. package/dist/{support-DTBV56gy.mjs → support-B3tzVhKn.mjs} +6 -6
  148. package/dist/{swiftpm-artifact-inputs-DFcGsXDP.mjs → swiftpm-artifact-inputs-BWYPj9Sn.mjs} +4 -4
  149. package/dist/{swiftpm-macos-r_WSKlXr.mjs → swiftpm-macos-BVCP5mO4.mjs} +14 -13
  150. package/dist/{toolchain-GVgnf8d1.mjs → toolchain-BjgKdoEf.mjs} +1 -1
  151. package/dist/{toolchain-CWeGJgCc.mjs → toolchain-D3bmRMia.mjs} +57 -36
  152. package/dist/trigger-BLsHgAGR.mjs +2 -0
  153. package/dist/{trigger-Cbyc41d_.mjs → trigger-CBMe2YLH.mjs} +2 -2
  154. package/dist/{warm-progress-CA3TgT3-.mjs → warm-progress-ol0ZypEu.mjs} +6 -6
  155. package/dist/{web-CwREhjD-.mjs → web-BH7peScT.mjs} +12 -10
  156. package/dist/web-BdOFlTJr.mjs +2 -0
  157. package/dist/web-run.mjs +8 -9
  158. package/dist/windows-report.mjs +12 -1
  159. package/dist/windows-report.ps1 +1 -1
  160. package/dist/{workspace-state-U08dEzhG.mjs → workspace-state-CeBpIZgr.mjs} +11 -4
  161. package/dist/{workspaces-BxzYlo3P.mjs → workspaces-CSV2Orf4.mjs} +36 -32
  162. package/dist/{worktree-BxfVxG_b.mjs → worktree-DEDUzO_L.mjs} +1 -1
  163. package/dist/{worktree-8lqn_lBp.mjs → worktree-Dw8kfacb.mjs} +324 -99
  164. package/dist/{xcode-iQnROM5o.mjs → xcode-DHu41qQ4.mjs} +41 -27
  165. package/package.json +7 -7
  166. package/dist/native-gradle-inputs-Dnh84Zbd.mjs +0 -211
  167. package/dist/server-expo-C-Buqvn_.mjs +0 -2
  168. package/dist/trigger-yb_nFzPF.mjs +0 -2
  169. package/dist/web-Cduk0NSE.mjs +0 -2
@@ -1,34 +1,34 @@
1
- import { t as getExecutor } from "./exec-DEoAhcze.mjs";
1
+ import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { d as workspaceDir, m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
- import { k as writeConfigSetting } from "./config-DlrsduwG.mjs";
3
+ import { k as writeConfigSetting } from "./config-BZhXY15H.mjs";
4
4
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
5
- import { o as git, s as gitAsync } from "./operation-exec-BW0em61G.mjs";
6
- import { d as androidLayoutSetting, y as iosProjectDirSetting } from "./settings-C7O8A6ZI.mjs";
7
- import { f as projectRegistry, g as selectNativeXcodeProject } from "./project-CTLNHCfE.mjs";
5
+ import { o as git, s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
6
+ import { d as androidLayoutSetting, y as iosProjectDirSetting } from "./settings-RKwY33wv.mjs";
7
+ import { f as projectRegistry, g as selectNativeXcodeProject } from "./project-Dz-hWkb-.mjs";
8
8
  import { o as parseNdjsonText } from "./ndjson-CgE_o3Dl.mjs";
9
- import { Fn as processContext } from "./budget-DnPX3DXj.mjs";
10
- import { l as fingerprintProject, m as refingerprintAfterMutation } from "./build-cache-Dv7RN200.mjs";
11
- import { n as CCACHE_UNAVAILABLE, o as resolveCcache } from "./ccache-RcAy92gH.mjs";
12
- import { _ as clearCorruptCompilationCache, f as reactNativeArtifactReceipt, g as COMPILATION_CACHE_CORRUPT, m as reactNativeBuildQuery, p as reactNativeArtifactToolchain } from "./client-yyso1bwi.mjs";
13
- import { f as workerToolchain, h as readPodState, i as availableIphone, m as podsAreStale, v as runPodInstall } from "./toolchain-CWeGJgCc.mjs";
9
+ import { Ln as processContext } from "./budget-dPGuhNai.mjs";
10
+ import { d as fingerprintProject, i as compareSourceLists, v as refingerprintAfterMutation } from "./build-cache-HFUQ9eLz.mjs";
11
+ import { _ as unmetNodePin, g as projectNodeLine, h as pathNodeVersion, v as withProjectNode } from "./server-expo-Tt_hLRpy.mjs";
12
+ import { n as CCACHE_UNAVAILABLE, o as resolveCcache } from "./ccache-CCn1S6qG.mjs";
13
+ import { C as COMPILATION_CACHE_CORRUPT, b as validateGradleManifest, f as reactNativeArtifactReceipt, g as gradleStateDirectories, h as gradleOffloadInputs, m as reactNativeBuildQuery, p as reactNativeArtifactToolchain, v as nativeGradleOutputs, w as clearCorruptCompilationCache, x as verifyGradleTransfer } from "./client-18-ZowoT.mjs";
14
+ import { f as workerToolchain, h as readPodState, i as availableIphone, m as podsAreStale, v as runPodInstall } from "./toolchain-D3bmRMia.mjs";
14
15
  import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
15
- import { a as sourceManifest, o as verifyNativeTransfer } from "./native-source-Y0yLhFyQ.mjs";
16
- import { i as nativeGradleOutputs, n as gradleStateDirectories, o as validateGradleManifest, s as verifyGradleTransfer, t as gradleOffloadInputs } from "./native-gradle-inputs-Dnh84Zbd.mjs";
17
- import { n as buildAndroid, o as gradlewPath, r as buildIos, u as assembleTaskFor } from "./react-native-build-CmJkTljQ.mjs";
18
- import { f as podAction } from "./support-BTpZ6RAJ.mjs";
19
- import { i as runPrebuild, r as recordPrebuild, t as planPrebuild } from "./prebuild-BFm63bQ0.mjs";
20
- import { g as dumpApkManifest, p as apkPackage } from "./support-DTBV56gy.mjs";
21
- import { n as buildAndroidOperation, t as buildIosOperation } from "./build-CqufZFqy.mjs";
22
- import { i as stageBundle, n as resolveBundleExtras } from "./stage-DKNM4ZPd.mjs";
23
- import { t as logLines } from "./run-DidHghD1.mjs";
24
- import { r as nativeXcodeMetadataDirectories } from "./native-xcode-inputs-G6rkkhxu.mjs";
25
- import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-DFcGsXDP.mjs";
26
- import { a as nativeGradleWorkerArtifactIdentity, i as nativeGradleArtifactSnapshotFromReceipt, o as nativeGradleWorkerScope } from "./native-gradle-artifact-inputs-DHFnmrVf.mjs";
16
+ import { a as sourceManifest, o as verifyNativeTransfer } from "./native-source-D-4Dh4JU.mjs";
17
+ import { n as buildAndroid, o as gradlewPath, r as buildIos, u as assembleTaskFor } from "./react-native-build-AuCu-aAP.mjs";
18
+ import { f as podAction } from "./support-B1W-hmC2.mjs";
19
+ import { a as runPrebuild, r as recordPrebuild, t as planPrebuild } from "./prebuild-DmVCf5xb.mjs";
20
+ import { g as dumpApkManifest, p as apkPackage } from "./support-B3tzVhKn.mjs";
21
+ import { n as buildAndroidOperation, t as buildIosOperation } from "./build-CaF574eS.mjs";
22
+ import { i as stageBundle, n as resolveBundleExtras } from "./stage-ERTMh88n.mjs";
23
+ import { t as logLines } from "./run-BIwoU44q.mjs";
24
+ import { r as nativeXcodeMetadataDirectories } from "./native-xcode-inputs-irplbQb0.mjs";
25
+ import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-BWYPj9Sn.mjs";
26
+ import { a as nativeGradleWorkerArtifactIdentity, i as nativeGradleArtifactSnapshotFromReceipt, o as nativeGradleWorkerScope } from "./native-gradle-artifact-inputs-BcLYBZil.mjs";
27
27
  import { createHash } from "node:crypto";
28
28
  import { chmodSync, constants, copyFileSync, cpSync, createReadStream, createWriteStream, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync } from "node:fs";
29
29
  import { isDeepStrictEqual } from "node:util";
30
- import { basename, dirname, join, relative, resolve, sep } from "node:path";
31
- import { dependencyInstall, withAmbientContext } from "@stim-cli/core";
30
+ import { basename, delimiter, dirname, join, relative, resolve, sep } from "node:path";
31
+ import { dependencyInstall, reusableDependencies, withAmbientContext } from "@stim-cli/core";
32
32
  import { isJsonObject, windowsShortDir, windowsShortDirKey } from "@stim-cli/core/state";
33
33
  import { realpath } from "node:fs/promises";
34
34
  import { pipeline } from "node:stream/promises";
@@ -481,22 +481,69 @@ async function materialize(job, src) {
481
481
  renameSync(tmp, recordFile);
482
482
  return {
483
483
  written,
484
- removed
484
+ removed,
485
+ record: next
485
486
  };
486
487
  }
488
+ /** The synced files whose content no longer matches the manifest, such as a lockfile pod install rewrote. */
489
+ function rewrittenFiles(src, manifest, record) {
490
+ return manifest.flatMap((entry) => {
491
+ if (entry.kind === "directory") return [];
492
+ const target = join(src, entry.path);
493
+ const stat = lstatSync(target, { throwIfNoEntry: false });
494
+ const known = record[entry.path];
495
+ if (stat && known && stat.mtimeMs === known.mtimeMs && stat.size === known.size) return [];
496
+ if (!stat) return [entry.path];
497
+ const content = stat.isSymbolicLink() ? readlinkSync(target) : stat.isFile() ? readFileSync(target) : null;
498
+ return content !== null && createHash("sha256").update(content).digest("hex") === entry.sha256 ? [] : [entry.path];
499
+ });
500
+ }
501
+ function namedList(names) {
502
+ const shown = names.slice(0, 3).join(", ");
503
+ return names.length > 3 ? `${shown} and ${names.length - 3} more` : shown;
504
+ }
505
+ function fingerprintMismatch(job, there, sources, mutated) {
506
+ const differing = job.expectedSources ? compareSourceLists(job.expectedSources, [...sources]).map((change) => change.name) : [];
507
+ return [
508
+ `the checkout there fingerprints ${there.slice(0, 12)}, here ${job.expectedFingerprint?.slice(0, 12)}`,
509
+ ...mutated.files.length ? [`${mutated.steps.join(" and ")} there rewrote ${namedList(mutated.files)}`] : [],
510
+ ...differing.length ? [`differing sources: ${namedList(differing)}`] : []
511
+ ].join("; ");
512
+ }
513
+ /**
514
+ * Puts the Node that `root`, or the nearest directory above it in `src`, pins first on this worker's `PATH`, and
515
+ * reports which Node the build runs on.
516
+ */
517
+ function useProjectNode(root, src) {
518
+ const node = withProjectNode(root, process.env, { top: src });
519
+ if (node.pinned) process.env.PATH = node.env.PATH;
520
+ note("deps", node.pinned ? projectNodeLine(node.pinned) : `Node ${pathNodeVersion(process.env) ?? "unknown"} on PATH`);
521
+ }
522
+ /**
523
+ * Names the `node` first on this worker's `PATH` in `<iosDir>/.xcode.env.local`. React Native's `with-environment.sh`
524
+ * runs Xcode's script phases on that file's `NODE_BINARY`, and its CocoaPods setup writes the file only when it is
525
+ * missing, so a file left from an earlier job, or one recording a Homebrew Cellar path, would otherwise win.
526
+ */
527
+ function useXcodeNode(iosDir) {
528
+ const node = (process.env.PATH ?? "").split(delimiter).filter(Boolean).map((dir) => join(dir, "node")).find((path) => statSync(path, { throwIfNoEntry: false })?.isFile());
529
+ if (!node || !existsSync(iosDir)) return;
530
+ const file = join(iosDir, ".xcode.env.local");
531
+ const line = `export NODE_BINARY='${node.replaceAll("'", "'\\''")}'`;
532
+ const text = existsSync(file) ? readFileSync(file, "utf8") : "";
533
+ const next = /^export NODE_BINARY=.*$/m.test(text) ? text.replace(/^export NODE_BINARY=.*$/gm, () => line) : `${text}${text && !text.endsWith("\n") ? "\n" : ""}${line}\n`;
534
+ if (next !== text) writeFileSync(file, next);
535
+ }
487
536
  /** Installs JavaScript dependencies when the lockfile, or the install command, changed since the last install. */
488
537
  async function ensureDependencies(job, src) {
489
- const install = dependencyInstall(src, job.packageName);
538
+ const install = dependencyInstall(src, relative(src, realpathSync(join(src, job.project))));
490
539
  if (!install) return;
491
540
  const { command, args, digest, lockfile } = install;
492
- const marker = join(job.area, "dependencies");
541
+ const marker = join(job.area, install.marker);
493
542
  const installed = () => writeFileSync(join(job.area, "lockfile"), lockfile);
494
- if (existsSync(join(src, job.project, "node_modules")) && existsSync(marker)) {
495
- if (readFileSync(marker, "utf8") === digest) return installed();
496
- }
497
- note("deps", `${command} ${args.join(" ")}`);
543
+ if (reusableDependencies(job.area, job.project, lockfile)) return installed();
544
+ note("deps", `${command} ${args.join(" ")}${install.dir === "." ? "" : ` in ${install.dir}`}`);
498
545
  const child = getExecutor().spawn(command, args, {
499
- cwd: src,
546
+ cwd: join(src, install.dir),
500
547
  env: {
501
548
  ...process.env,
502
549
  CI: "1"
@@ -672,10 +719,12 @@ async function build(job) {
672
719
  compiled = await workerOperation(root, (context) => compileMacos(context, job, root, log, time));
673
720
  if (!compiled.ok) return failed(compiled.code, compiled.message);
674
721
  } else {
722
+ useProjectNode(realRoot, realSrc);
723
+ const nodeFailed = (code, message) => failed(code, [message, unmetNodePin(realRoot, process.env, { top: realSrc })].filter(Boolean).join(" "));
675
724
  try {
676
725
  await time("depsMs", () => ensureDependencies(job, src));
677
726
  } catch (error) {
678
- return failed("deps-failed", error.message);
727
+ return nodeFailed("deps-failed", error.message);
679
728
  }
680
729
  const platform = job.platform;
681
730
  let iosProject;
@@ -696,7 +745,9 @@ async function build(job) {
696
745
  const initial = await time("fingerprintMs", () => fingerprintProject(realRoot, {
697
746
  platform,
698
747
  iosProjectPath: iosProject.relative,
699
- androidLayout
748
+ androidLayout,
749
+ ignoredPaths: job.expectedIgnored,
750
+ trackedPaths: job.expectedTracked
700
751
  }));
701
752
  if (!initial) return failed("no-fingerprint", "The remote machine could not fingerprint the project.");
702
753
  const plan = planPrebuild(realRoot, platform, {
@@ -710,10 +761,11 @@ async function build(job) {
710
761
  note("prebuild", plan === "generate" ? `generating ${platform}/` : `regenerating ${platform}/ with --clean`);
711
762
  recordPrebuild(realRoot, platform, null);
712
763
  const result = await time("prebuildMs", () => runPrebuild(realRoot, platform, log, { clean: plan === "regenerate" }));
713
- if (result?.failed) return failed("prebuild-failed", result.reason ?? "expo prebuild failed.");
714
- mutations.push("prebuild");
764
+ if (result?.failed) return nodeFailed("prebuild-failed", result.reason ?? "expo prebuild failed.");
765
+ mutations.push("expo prebuild");
715
766
  }
716
767
  if (platform === "ios") {
768
+ useXcodeNode(iosProject.dir);
717
769
  const podState = readPodState(realRoot, iosProject.dir);
718
770
  const pods = podAction(podState, podsAreStale(podState.lockText, podState.manifestText, podState.dir));
719
771
  if (pods.install) {
@@ -723,24 +775,31 @@ async function build(job) {
723
775
  onHeartbeat: (line) => note("pods", line)
724
776
  }));
725
777
  if (result?.failed) return failed("pods-failed", result.reason ?? "pod install failed.");
726
- mutations.push("pods");
778
+ mutations.push("pod install");
727
779
  }
728
780
  }
729
781
  fingerprint = initial.hash;
782
+ let sources = initial.sources;
730
783
  if (mutations.length) {
731
784
  const after = await time("fingerprintMs", () => refingerprintAfterMutation({
732
785
  projectRoot: realRoot,
733
786
  platform,
734
787
  previousHash: initial.hash,
735
788
  iosProjectPath: iosProject.relative,
736
- androidLayout
789
+ androidLayout,
790
+ ignoredPaths: job.expectedIgnored,
791
+ trackedPaths: job.expectedTracked
737
792
  }));
738
793
  if (!after) return failed("no-fingerprint", `No fingerprint after ${mutations.join(", ")}.`);
739
794
  fingerprint = after.hash;
740
- if (mutations.includes("prebuild")) recordPrebuild(realRoot, platform, after.hash);
795
+ sources = after.sources;
796
+ if (mutations.includes("expo prebuild")) recordPrebuild(realRoot, platform, after.hash);
741
797
  }
742
- if (fingerprint !== job.expectedFingerprint) return failed("fingerprint-mismatch", `the checkout there fingerprints ${fingerprint.slice(0, 12)}, here ${job.expectedFingerprint?.slice(0, 12)}`);
743
- const tools = job.cacheArtifact ? await reactNativeArtifactToolchain(platform, realRoot) : null;
798
+ if (fingerprint !== job.expectedFingerprint) return failed("fingerprint-mismatch", fingerprintMismatch(job, fingerprint, sources, {
799
+ steps: mutations,
800
+ files: mutations.length ? rewrittenFiles(src, job.manifest, mirrored.record) : []
801
+ }));
802
+ const tools = job.cacheArtifact ? await reactNativeArtifactToolchain(platform, realRoot, iosProject.dir) : null;
744
803
  const query = tools ? reactNativeBuildQuery(job, fingerprint, job.project, tools) : null;
745
804
  const receipt = query ? reactNativeArtifactReceipt(query, tools) : null;
746
805
  compiled = platform === "android" ? await compileAndroid(job, realRoot, log, time, androidLayout) : await compileIos(job, realRoot, log, time);
@@ -751,10 +810,12 @@ async function build(job) {
751
810
  platform,
752
811
  previousHash: builtFingerprint,
753
812
  iosProjectPath: iosProject.relative,
754
- androidLayout
813
+ androidLayout,
814
+ ignoredPaths: job.expectedIgnored,
815
+ trackedPaths: job.expectedTracked
755
816
  }));
756
817
  if (!settled || settled.moved) return failed("fingerprint-moved", "The inputs changed during the build there.");
757
- const after = query && receipt ? reactNativeArtifactReceipt(query, await reactNativeArtifactToolchain(platform, realRoot)) : null;
818
+ const after = query && receipt ? reactNativeArtifactReceipt(query, await reactNativeArtifactToolchain(platform, realRoot, iosProject.dir)) : null;
758
819
  if (receipt && after && isDeepStrictEqual(receipt, after)) compiled.reactNativeArtifact = receipt;
759
820
  }
760
821
  try {
@@ -1,28 +1,5 @@
1
- import { m as operationState, r as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-DEoAhcze.mjs";
1
+ import { b as operationState, c as throwIfCancelled, l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { sep } from "node:path";
3
- //#region src/cancellation.ts
4
- function cancelledError(what, cause) {
5
- return Object.assign(new Error(`The ${what} was cancelled.`, cause === void 0 ? void 0 : { cause }), { code: "STIM_CANCELLED" });
6
- }
7
- function throwIfCancelled(signal, what) {
8
- if (signal?.aborted) throw cancelledError(what);
9
- }
10
- function cancellableSleep(ms, { signal, what = "wait", ref = true } = {}) {
11
- return new Promise((resolve, reject) => {
12
- if (signal?.aborted) return reject(cancelledError(what));
13
- const onAbort = () => {
14
- clearTimeout(timer);
15
- reject(cancelledError(what));
16
- };
17
- const timer = setTimeout(() => {
18
- signal?.removeEventListener("abort", onAbort);
19
- resolve();
20
- }, ms);
21
- if (!ref) timer.unref();
22
- signal?.addEventListener("abort", onAbort, { once: true });
23
- });
24
- }
25
- //#endregion
26
3
  //#region src/workspace/git.ts
27
4
  const GIT_TIMEOUT_MS = 1e4;
28
5
  const GIT_CONCURRENCY = 6;
@@ -168,4 +145,4 @@ async function runOperationFileQuiet(context, executor, file, args, options) {
168
145
  }
169
146
  }
170
147
  //#endregion
171
- export { killOnAbort as a, gitQuiet as c, cancelledError as d, throwIfCancelled as f, gitPath as i, gitQuietAsync as l, runOperationFileQuiet as n, git as o, childEnvironment as r, gitAsync as s, runOperationFile as t, cancellableSleep as u };
148
+ export { killOnAbort as a, gitQuiet as c, gitPath as i, gitQuietAsync as l, runOperationFileQuiet as n, git as o, childEnvironment as r, gitAsync as s, runOperationFile as t };
@@ -1,6 +1,6 @@
1
- import { g as process_identity_exports } from "./exec-DEoAhcze.mjs";
2
- import { c as withWorkspaceStateLock, d as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-U08dEzhG.mjs";
3
- import { c as pidExists } from "./metro-DiXtA3Ty.mjs";
1
+ import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
2
+ import { c as withWorkspaceStateLock, d as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-CeBpIZgr.mjs";
3
+ import { c as pidExists } from "./metro-Bu8LBfzS.mjs";
4
4
  import { realpathSync } from "node:fs";
5
5
  //#region src/collector/state.ts
6
6
  function collectorRoot(root) {
@@ -1,6 +1,5 @@
1
- import { g as process_identity_exports } from "./exec-DEoAhcze.mjs";
2
- import { f as throwIfCancelled } from "./operation-exec-BW0em61G.mjs";
3
- import { t as connectOwnedBrowser } from "./cdp-3fwICjzi.mjs";
1
+ import { S as process_identity_exports, c as throwIfCancelled } from "./exec-VFRpu1iA.mjs";
2
+ import { t as connectOwnedBrowser } from "./cdp-BG3FJCCx.mjs";
4
3
  //#region src/web/page.ts
5
4
  /** The record of a verified live browser: its supervisor and Chrome are the processes the record names. */
6
5
  function liveWebRecord(record) {
@@ -0,0 +1,57 @@
1
+ import { U as parseDeviceSlotKey, V as deviceSlotKey } from "./config-BZhXY15H.mjs";
2
+ import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-CeBpIZgr.mjs";
3
+ import { $ as removeMetroReverses } from "./android-882m4hxX.mjs";
4
+ import { isJsonObject } from "@stim-cli/core/state";
5
+ //#region src/devices/phone-reverses.ts
6
+ const KEY = "phoneReverses";
7
+ function readRecords(state) {
8
+ const raw = state?.[KEY];
9
+ const records = {};
10
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return records;
11
+ for (const [key, value] of Object.entries(raw)) {
12
+ if (!isJsonObject(value)) continue;
13
+ const entry = value;
14
+ if (typeof entry.serial !== "string" || !Array.isArray(entry.ports) || !parseDeviceSlotKey(key)) continue;
15
+ records[key] = {
16
+ serial: entry.serial,
17
+ ports: entry.ports.filter((port) => Number.isSafeInteger(port) && port > 0)
18
+ };
19
+ }
20
+ return records;
21
+ }
22
+ async function recordPhoneReverse(root, slot, serial, port) {
23
+ const key = deviceSlotKey("android", slot);
24
+ await updateWorkspaceStateAsync(root, (state) => {
25
+ const records = readRecords(state);
26
+ const previous = records[key]?.serial === serial ? records[key].ports : [];
27
+ records[key] = {
28
+ serial,
29
+ ports: [.../* @__PURE__ */ new Set([...previous, port])]
30
+ };
31
+ return {
32
+ ...state,
33
+ [KEY]: records
34
+ };
35
+ });
36
+ }
37
+ async function removePhoneReverses(root, { slot, operation } = {}) {
38
+ const records = Object.entries(readRecords(readWorkspaceState$1(root))).filter(([key]) => slot === void 0 || parseDeviceSlotKey(key)?.slot === slot);
39
+ for (const [, { serial, ports }] of records) await removeMetroReverses(serial, ports, operation);
40
+ if (records.length === 0) return;
41
+ await updateWorkspaceStateAsync(root, (state) => {
42
+ const remaining = readRecords(state);
43
+ for (const [key, done] of records) {
44
+ const current = remaining[key];
45
+ if (current?.serial !== done.serial) continue;
46
+ current.ports = current.ports.filter((port) => !done.ports.includes(port));
47
+ if (current.ports.length === 0) delete remaining[key];
48
+ }
49
+ const { [KEY]: _, ...rest } = state;
50
+ return Object.keys(remaining).length ? {
51
+ ...rest,
52
+ [KEY]: remaining
53
+ } : rest;
54
+ });
55
+ }
56
+ //#endregion
57
+ export { removePhoneReverses as n, recordPhoneReverse as t };
@@ -1,4 +1,4 @@
1
- import { n as buildPlacementSettings } from "./selection-DSMbWEX2.mjs";
1
+ import { n as buildPlacementSettings } from "./selection-BLtvaqxc.mjs";
2
2
  //#region src/placement-log.ts
3
3
  /** `machine` is `local` when the run stays on this machine. */
4
4
  function placementRecord(input) {
@@ -1,6 +1,6 @@
1
- import { d as hostingMachines } from "./selection-DSMbWEX2.mjs";
2
- import { r as readHostedNative } from "./ios-state-Dtw5K2aI.mjs";
3
- import { i as probeHost, n as automaticDevicePlacement } from "./eas-fallback-DV3Wytf1.mjs";
1
+ import { f as hostingMachines } from "./selection-BLtvaqxc.mjs";
2
+ import { r as readHostedNative } from "./ios-state-DlElquYD.mjs";
3
+ import { i as probeHost, n as automaticDevicePlacement } from "./eas-fallback-LMxk9Kw0.mjs";
4
4
  import { automaticMachineEnabled } from "@stim-cli/core/state";
5
5
  //#region src/device-host/plan-placement.ts
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { p as getProject } from "./config-DlrsduwG.mjs";
2
- import { n as findCommandWorkspace } from "./project-CTLNHCfE.mjs";
3
- import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-DkEzOfzO.mjs";
1
+ import { p as getProject } from "./config-BZhXY15H.mjs";
2
+ import { n as findCommandWorkspace } from "./project-Dz-hWkb-.mjs";
3
+ import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-BWDuU5oQ.mjs";
4
4
  //#region src/commands/ports.ts
5
5
  async function inProject(action) {
6
6
  try {
@@ -1,13 +1,13 @@
1
- import { d as spawnDeclared, t as getExecutor } from "./exec-DEoAhcze.mjs";
1
+ import { _ as spawnDeclared, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { i as sharedBuildCache } from "./paths-DQtTgsBf.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { o as git, s as gitAsync } from "./operation-exec-BW0em61G.mjs";
5
- import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
6
- import { yt as gitCommonDirOnDisk } from "./settings-C7O8A6ZI.mjs";
7
- import { v as detectIsExpo } from "./project-CTLNHCfE.mjs";
8
- import { Zn as remoteCliInvocation } from "./budget-DnPX3DXj.mjs";
9
- import { a as diffFingerprintSources, v as storedSources } from "./build-cache-Dv7RN200.mjs";
10
- import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath } from "./server-expo-D9lEz4aq.mjs";
4
+ import { o as git, s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
5
+ import { l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
6
+ import { yt as gitCommonDirOnDisk } from "./settings-RKwY33wv.mjs";
7
+ import { v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
8
+ import { $n as remoteCliInvocation } from "./budget-dPGuhNai.mjs";
9
+ import { S as storedSources, o as diffFingerprintSources } from "./build-cache-HFUQ9eLz.mjs";
10
+ import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-Tt_hLRpy.mjs";
11
11
  import { existsSync, realpathSync } from "node:fs";
12
12
  import { dirname, join, relative } from "node:path";
13
13
  import { ambientContext } from "@stim-cli/core";
@@ -342,6 +342,10 @@ function recordPrebuild(root, platform, fingerprint) {
342
342
  }
343
343
  }));
344
344
  }
345
+ /** Records the prebuild fingerprint after waiting for the workspace state lock without blocking the event loop. */
346
+ function recordPrebuildAsync(root, platform, fingerprint) {
347
+ return withWorkspaceStateLockAsync(root, () => recordPrebuild(root, platform, fingerprint));
348
+ }
345
349
  /**
346
350
  * @expo/cli 57 made `expo prebuild` delete existing native folders by default and added `--no-clean`
347
351
  * to keep them (expo/expo#47209); earlier CLIs keep them by default and reject `--no-clean`.
@@ -439,6 +443,7 @@ async function runPrebuild(root, platform, logWriter, { spawnFn = null, now = Da
439
443
  ],
440
444
  env: {
441
445
  ...ambientContext()?.env ?? process.env,
446
+ ...expoTelemetryEnv(ambientContext()?.env ?? process.env),
442
447
  FORCE_COLOR: "0",
443
448
  CI: "1"
444
449
  }
@@ -493,4 +498,4 @@ async function runPrebuild(root, platform, logWriter, { spawnFn = null, now = Da
493
498
  };
494
499
  }
495
500
  //#endregion
496
- export { staleNativeDirRefusal as a, predictBuildMiss as c, runPrebuild as i, skippedMissReason as l, planPrebuildAsync as n, explainBuildMiss as o, recordPrebuild as r, fingerprintErrorMissReason as s, planPrebuild as t };
501
+ export { runPrebuild as a, fingerprintErrorMissReason as c, recordPrebuildAsync as i, predictBuildMiss as l, planPrebuildAsync as n, staleNativeDirRefusal as o, recordPrebuild as r, explainBuildMiss as s, planPrebuild as t, skippedMissReason as u };
@@ -1,8 +1,8 @@
1
- import { g as process_identity_exports } from "./exec-DEoAhcze.mjs";
1
+ import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
2
2
  import { c as supervisorPidFile, g as workspaceStateFile$1 } from "./paths-DQtTgsBf.mjs";
3
- import { U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-DlrsduwG.mjs";
4
- import { c as withWorkspaceStateLock, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-U08dEzhG.mjs";
5
- import { K as resolveIosProjectDir, Mt as repoRoot, W as resolveAndroidLayout, at as webSettings, tt as settingValueAt } from "./settings-C7O8A6ZI.mjs";
3
+ import { U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-BZhXY15H.mjs";
4
+ import { c as withWorkspaceStateLock, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-CeBpIZgr.mjs";
5
+ import { K as resolveIosProjectDir, Mt as repoRoot, W as resolveAndroidLayout, at as webSettings, tt as settingValueAt } from "./settings-RKwY33wv.mjs";
6
6
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
7
7
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
8
8
  import { projectRootDirectories } from "@stim-cli/core/state";
@@ -81,6 +81,10 @@ function writeWorkspaceLaunch(root, platform, record, slot = "default") {
81
81
  };
82
82
  });
83
83
  }
84
+ /** Records a launch after asynchronously acquiring the workspace state lock. */
85
+ function writeWorkspaceLaunchAsync(root, platform, record, slot = "default") {
86
+ return withWorkspaceStateLockAsync(root, () => writeWorkspaceLaunch(root, platform, record, slot));
87
+ }
84
88
  function clearWorkspaceLaunches(root, slot) {
85
89
  updateWorkspaceState(root, (state) => {
86
90
  if (!state.launches || typeof state.launches !== "object") return state;
@@ -308,8 +312,8 @@ const nativeAndroidIntegration = {
308
312
  application: true,
309
313
  platforms: () => ["android"],
310
314
  validate: (operation) => operation === "android" ? null : void 0,
311
- android: async () => (await import("./native-android-CdCSylTn.mjs")).nativeAndroidProject(root),
312
- doctor: async () => (await import("./native-android-CdCSylTn.mjs")).nativeAndroidDoctor(root)
315
+ android: async () => (await import("./native-android-96BBizbq.mjs")).nativeAndroidProject(root),
316
+ doctor: async () => (await import("./native-android-96BBizbq.mjs")).nativeAndroidDoctor(root)
313
317
  };
314
318
  }
315
319
  };
@@ -737,8 +741,8 @@ const nativeXcodeProjectIntegration = {
737
741
  application: problem === null,
738
742
  platforms: () => problem ? [] : ["ios"],
739
743
  validate: (operation) => operation === "ios" ? problem : void 0,
740
- ios: async () => (await import("./native-xcode-ios-_os2PlCD.mjs")).nativeXcodeIosProject(root),
741
- doctor: async () => (await import("./native-xcode-ios-_os2PlCD.mjs")).nativeXcodeDoctor(root)
744
+ ios: async () => (await import("./native-xcode-ios-BY-6hh6M.mjs")).nativeXcodeIosProject(root),
745
+ doctor: async () => (await import("./native-xcode-ios-BY-6hh6M.mjs")).nativeXcodeDoctor(root)
742
746
  };
743
747
  }
744
748
  };
@@ -943,7 +947,7 @@ function createProjectRegistry(integrations) {
943
947
  //#region src/integrations/projects.ts
944
948
  const expo = {
945
949
  mode: MODE_EXPO,
946
- loadDevServer: async () => (await import("./server-expo-C-Buqvn_.mjs")).startExpoServer,
950
+ loadDevServer: async () => (await import("./server-expo-CEntXzRw.mjs")).startExpoServer,
947
951
  platforms(root) {
948
952
  const appJson = readAppJson(root);
949
953
  const config = appJson?.expo ?? appJson;
@@ -963,7 +967,7 @@ const expo = {
963
967
  };
964
968
  const reactNative = {
965
969
  mode: MODE_BARE,
966
- loadDevServer: async () => (await import("./server-bare-CafzuyFB.mjs")).startBareServer,
970
+ loadDevServer: async () => (await import("./server-bare-Z1ToVLPn.mjs")).startBareServer,
967
971
  platforms(root, { context, settings }) {
968
972
  if (!declaresAppDependency(readPackageJson(root))) return [];
969
973
  const platforms = [];
@@ -993,9 +997,9 @@ const projectRegistry = createProjectRegistry([
993
997
  ownedRoots: problem === null ? [join(root, "ios"), join(root, "android")] : [],
994
998
  platforms: (resolved) => nativeProjectIntegration(root).platforms(root, resolved),
995
999
  validate: (operation) => operation === "ios" || operation === "android" || operation === "dev-server" ? problem : void 0,
996
- ios: async (settings) => (await import("./react-native-ios-ChBF1MkB.mjs")).reactNativeIosProject(root, settings),
997
- android: async (resolved) => (await import("./react-native-android-CFgUroxW.mjs")).reactNativeAndroidProject(root, resolved),
998
- doctor: async () => (await import("./react-native-doctor-LTF-Xt8l.mjs")).reactNativeProjectDoctor(root)
1000
+ ios: async (settings) => (await import("./react-native-ios-D5zTIuH8.mjs")).reactNativeIosProject(root, settings),
1001
+ android: async (resolved) => (await import("./react-native-android-DOinxgwB.mjs")).reactNativeAndroidProject(root, resolved),
1002
+ doctor: async () => (await import("./react-native-doctor-2ivJUmwZ.mjs")).reactNativeProjectDoctor(root)
999
1003
  };
1000
1004
  }
1001
1005
  },
@@ -1009,9 +1013,9 @@ const projectRegistry = createProjectRegistry([
1009
1013
  application: true,
1010
1014
  platforms: ({ settings }) => settingValueAt(settings, "macos.product") && settingValueAt(settings, "macos.infoPlist") ? ["macos"] : [],
1011
1015
  validate: (operation) => operation === "macos" ? null : void 0,
1012
- macos: async () => (await import("./swiftpm-macos-r_WSKlXr.mjs")).swiftpmMacosProject(root),
1016
+ macos: async () => (await import("./swiftpm-macos-BVCP5mO4.mjs")).swiftpmMacosProject(root),
1013
1017
  doctor: async () => {
1014
- const { macosToolchain, macosToolchainAsync } = await import("./toolchain-GVgnf8d1.mjs");
1018
+ const { macosToolchain, macosToolchainAsync } = await import("./toolchain-BjgKdoEf.mjs");
1015
1019
  return {
1016
1020
  inspect: () => [],
1017
1021
  offloadTargets: ({ options: { host = process.platform, platform, operation } }) => host === "darwin" && platform === void 0 ? async () => [{
@@ -1031,7 +1035,7 @@ const projectRegistry = createProjectRegistry([
1031
1035
  application: false,
1032
1036
  platforms: ({ settings }) => webSettings(settings).url !== null ? ["web"] : [],
1033
1037
  validate: (operation) => operation === "web" ? null : void 0,
1034
- web: async () => (await import("./browser-web-CeEVlGug.mjs")).browserWebProject(root)
1038
+ web: async () => (await import("./browser-web-ycg9qWB8.mjs")).browserWebProject(root)
1035
1039
  };
1036
1040
  }
1037
1041
  },
@@ -1155,4 +1159,4 @@ function expandedRealpath(path) {
1155
1159
  }
1156
1160
  }
1157
1161
  //#endregion
1158
- export { clearWorkspaceLaunches as A, resolvePackageJson as C, clearExpoMetroTunnel as D, MODE_EXPO as E, readRemoteSessionId as F, readWorkspaceLaunches as I, workspaceDevServerMode as L, readMetroTunnel as M, readPidFile as N, clearManagedMetroTunnel as O, readRemoteSession as P, writePidFile as R, readAppJson as S, MODE_COMMAND as T, appProjectProblem as _, findServerWorkspace as a, isPackageResolvable as b, projectProblem as c, nativeProjectIntegration as d, projectRegistry as f, selectNativeXcodeProject as g, pbxString as h, findProjectRoot$1 as i, clearWorkspaceSupervisor as j, clearRemoteSession as k, projectShortcut as l, pbxReferences as m, findCommandWorkspace as n, isMobileProject as o, NativeXcodeError as p, findCommandWorkspaceAsync as r, ownedDeviceLabel as s, NO_PROJECT_REFUSAL as t, detectPlatforms as u, detectIsExpo as v, MODE_BARE as w, readAppConfigText as x, detectTutorial as y, writeWorkspaceLaunch as z };
1162
+ export { clearWorkspaceLaunches as A, resolvePackageJson as C, clearExpoMetroTunnel as D, MODE_EXPO as E, readRemoteSessionId as F, readWorkspaceLaunches as I, workspaceDevServerMode as L, readMetroTunnel as M, readPidFile as N, clearManagedMetroTunnel as O, readRemoteSession as P, writePidFile as R, readAppJson as S, MODE_COMMAND as T, appProjectProblem as _, findServerWorkspace as a, isPackageResolvable as b, projectProblem as c, nativeProjectIntegration as d, projectRegistry as f, selectNativeXcodeProject as g, pbxString as h, findProjectRoot$1 as i, clearWorkspaceSupervisor as j, clearRemoteSession as k, projectShortcut as l, pbxReferences as m, findCommandWorkspace as n, isMobileProject as o, NativeXcodeError as p, findCommandWorkspaceAsync as r, ownedDeviceLabel as s, NO_PROJECT_REFUSAL as t, detectPlatforms as u, detectIsExpo as v, MODE_BARE as w, readAppConfigText as x, detectTutorial as y, writeWorkspaceLaunchAsync as z };
@@ -1,5 +1,5 @@
1
- import { r as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
- import { c as gitQuiet, l as gitQuietAsync, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-BW0em61G.mjs";
1
+ import { l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
+ import { c as gitQuiet, l as gitQuietAsync, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
3
3
  //#region src/workspace/pull-request.ts
4
4
  const GH_TIMEOUT_MS = 2e4;
5
5
  const GH_ENV = {
@@ -1,2 +1,2 @@
1
- import { a as pullRequestLookup, c as selectPullRequest, i as parseRemoteRepo, l as worktreePullRequests, n as describePullRequest, o as pullRequestLookupAsync, r as endedPullRequest, s as pullRequestLookups, t as checkCounts } from "./pull-request-W1IuLXDt.mjs";
1
+ import { a as pullRequestLookup, c as selectPullRequest, i as parseRemoteRepo, l as worktreePullRequests, n as describePullRequest, o as pullRequestLookupAsync, r as endedPullRequest, s as pullRequestLookups, t as checkCounts } from "./pull-request-CbNlkFok.mjs";
2
2
  export { checkCounts, describePullRequest, endedPullRequest, parseRemoteRepo, pullRequestLookup, pullRequestLookupAsync, pullRequestLookups, selectPullRequest, worktreePullRequests };