stim 1.37.0 → 1.38.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 (140) hide show
  1. package/dist/{acquire-artifact-zBUbPuDP.mjs → acquire-artifact-QKPDkesw.mjs} +1 -1
  2. package/dist/{act-BGAFjY8f.mjs → act-Bh3t-NuH.mjs} +23 -29
  3. package/dist/{activity-CdpXXSq2.mjs → activity-CANftndU.mjs} +3 -3
  4. package/dist/{agent-device-usage-output-D0582GHy.mjs → agent-device-usage-output-CuROXefb.mjs} +3 -3
  5. package/dist/{android-CGctfYpv.mjs → android-27_JgJ1T.mjs} +3 -3
  6. package/dist/{android-CaSsewbu.mjs → android-Biwc4Dck.mjs} +5 -5
  7. package/dist/{android-BPBARZMR.mjs → android-DGLG_VQ3.mjs} +1 -1
  8. package/dist/{android-BBwLpxRh.mjs → android-Z6Eev9rL.mjs} +44 -38
  9. package/dist/{android-cas-p8gna03x.mjs → android-cas-BDAwwL82.mjs} +2 -2
  10. package/dist/{android-image-DY8KxK2m.mjs → android-image-BcUD6bPi.mjs} +2 -2
  11. package/dist/api.d.mts +2 -2
  12. package/dist/api.mjs +25 -25
  13. package/dist/{apk-signed-tail-BMv-KLcB.mjs → apk-signed-tail-DHMkXs4s.mjs} +2 -2
  14. package/dist/{artifact-BsimBWxG.mjs → artifact-Dc1GsK7o.mjs} +28 -14
  15. package/dist/{artifact-BrNZTZtA.mjs → artifact-sGoFVK1q.mjs} +11 -11
  16. package/dist/{auto-placement-CFKNrWLU.mjs → auto-placement-RNh4kx2T.mjs} +6 -6
  17. package/dist/{browser-web-YFsgCP_a.mjs → browser-web-7Oj57Roa.mjs} +10 -10
  18. package/dist/{build-DIhuoozz.mjs → build-DkE5vjp1.mjs} +22 -22
  19. package/dist/{build-cache-Dt-dhCJF.mjs → build-cache-CJ65Efv7.mjs} +7 -4
  20. package/dist/{build-plan-CgnLDof9.mjs → build-plan-DWajg5l_.mjs} +7 -6
  21. package/dist/{cli-BGUrlSH3.mjs → cli-BSlwv9hI.mjs} +18 -18
  22. package/dist/cli.mjs +1 -1
  23. package/dist/{client-DU6dnGX1.mjs → client-qwmHFSga.mjs} +12 -8
  24. package/dist/collector-run.mjs +3 -3
  25. package/dist/{command-output-ByEmIwur.mjs → command-output-DsjhOzJ3.mjs} +1 -1
  26. package/dist/{dependencies-BozoTBqa.mjs → dependencies-oku1ZLep.mjs} +76 -41
  27. package/dist/{dependency-state-BQeC4FVn.mjs → dependency-state-CBhPJAs_.mjs} +1 -1
  28. package/dist/{dev-client-3SQzMRXZ.mjs → dev-client-DL5UtVdx.mjs} +2 -2
  29. package/dist/{device-DGMvzoZZ.mjs → device-CxMwX0VO.mjs} +15 -14
  30. package/dist/{device-android-CBat355q.mjs → device-android-CSlBXuh_.mjs} +7 -7
  31. package/dist/{device-capacity-DWUOvY13.mjs → device-capacity-D_IlxZRL.mjs} +78 -31
  32. package/dist/device-host-worker.mjs +24 -12
  33. package/dist/{device-pool-B8IqZKqm.mjs → device-pool-BEaTdtss.mjs} +2 -2
  34. package/dist/{device-provision-DWAoSKEw.mjs → device-provision-C9NPdCne.mjs} +8 -8
  35. package/dist/{device-BIg1iExg.mjs → device-yfuJ-v4s.mjs} +9 -9
  36. package/dist/{doctor-CxgR5vPi.mjs → doctor-BAA3zN5U.mjs} +1 -1
  37. package/dist/{doctor-CPzwqcXY.mjs → doctor-BQ1Kl44s.mjs} +13 -19
  38. package/dist/{doctor-Bknt0121.mjs → doctor-QNzDE4aW.mjs} +18 -18
  39. package/dist/doctor-fingerprint.mjs +1 -1
  40. package/dist/{doctor-watchman-CPE4C8KV.mjs → doctor-watchman-B8e3s9ko.mjs} +3 -3
  41. package/dist/{eas-build-CwOXKJwa.mjs → eas-build-4rg9WpEg.mjs} +2 -2
  42. package/dist/{eas-fallback-Cnb12a50.mjs → eas-fallback-UGo0SG7T.mjs} +3 -3
  43. package/dist/{eas-session-ledger-TE1miVz5.mjs → eas-session-ledger-BDpSdFDM.mjs} +4 -4
  44. package/dist/{error-diagnostics-CXTT3bYC.mjs → error-diagnostics-CW9xl6ot.mjs} +7 -7
  45. package/dist/{gc-0jdcnDHs.mjs → gc-3DHVCn-k.mjs} +49 -33
  46. package/dist/{gc-1ZLq1djg.mjs → gc-BQ5dXnC7.mjs} +2 -2
  47. package/dist/{guide-COxIANZu.mjs → guide-DqJCc4vW.mjs} +138 -43
  48. package/dist/{hosted-android-D8JbIzgC.mjs → hosted-android-gwLspaz6.mjs} +3 -3
  49. package/dist/{hosted-client-BLwuXEZS.mjs → hosted-client-B_h_bTlz.mjs} +2 -2
  50. package/dist/{hosted-logs-BWEQNJx_.mjs → hosted-logs-BpQSRDRU.mjs} +15 -8
  51. package/dist/{hosted-logs-sync-uWSrH2mf.mjs → hosted-logs-sync-D3L1hDpM.mjs} +5 -5
  52. package/dist/{hosted-macos-BnCYAv1y.mjs → hosted-macos-GK4O1s7x.mjs} +5 -5
  53. package/dist/{hosted-native-OBT2sJxn.mjs → hosted-native-B6ur_0OJ.mjs} +7 -7
  54. package/dist/{ios-Bjz7aPLy.mjs → ios-Bi0bQiZ_.mjs} +8 -8
  55. package/dist/{ios-BveW7qK1.mjs → ios-DQEzde6f.mjs} +9 -6
  56. package/dist/{ios-CGyx4PA7.mjs → ios-M7nRVb33.mjs} +94 -32
  57. package/dist/{ios-device-ByrDWSpC.mjs → ios-device-BLm1BZB4.mjs} +1 -1
  58. package/dist/{ios-project-XHg87vyQ.mjs → ios-project-Bsm-eqwv.mjs} +6 -6
  59. package/dist/ios-runtime-DLiKoOkd.mjs +150 -0
  60. package/dist/{ios-signing-CRYQ1W42.mjs → ios-signing-rWR_Mu5Z.mjs} +1 -1
  61. package/dist/{ios-state-enWc5P6U.mjs → ios-state-tzD0s7pt.mjs} +1 -1
  62. package/dist/{js-swap-C6vl3vEd.mjs → js-swap-Cuky0ZAQ.mjs} +5 -5
  63. package/dist/{launch-f3RnbFW5.mjs → launch-B-pkNlqg.mjs} +17 -17
  64. package/dist/{lightened-Cdfmo8MO.mjs → lightened-KHWHmzGs.mjs} +4 -4
  65. package/dist/{logs-x3em2-oI.mjs → logs-B0etn-BD.mjs} +6 -6
  66. package/dist/{logs-DAjxBF3c.mjs → logs-HomiqPhV.mjs} +4 -4
  67. package/dist/{macos-ZfpWlzBO.mjs → macos-C5liDnbP.mjs} +1 -1
  68. package/dist/macos-run.mjs +1 -1
  69. package/dist/{macos-D_LAseN9.mjs → macos-zMxSibx5.mjs} +18 -19
  70. package/dist/maintenance-run.mjs +4 -4
  71. package/dist/{metro-TIQ1Wft-.mjs → metro-Cj6W4qOO.mjs} +1 -1
  72. package/dist/{metro-request-DcUxyaq8.mjs → metro-request-BWCl3Zco.mjs} +1 -1
  73. package/dist/{prebuild-BKkj3OyL.mjs → miss-reason-CeHvzeVm.mjs} +10 -270
  74. package/dist/{named-ports-BfEMi9bK.mjs → named-ports-DZ8DrkH1.mjs} +1 -1
  75. package/dist/{native-android-COOrNDk2.mjs → native-android-DtWLzg6g.mjs} +15 -15
  76. package/dist/{native-gradle-artifact-inputs-B4Mwydmf.mjs → native-gradle-artifact-inputs-D4w20_6d.mjs} +3 -3
  77. package/dist/{native-runtime-UxUBU8up.mjs → native-runtime-BfvvAJLd.mjs} +6 -6
  78. package/dist/{native-xcode-inputs-DUv7Q3ok.mjs → native-xcode-inputs-BHvnAq4o.mjs} +2 -2
  79. package/dist/{native-xcode-ios-DXcteLVi.mjs → native-xcode-ios-CYxrg_kK.mjs} +15 -15
  80. package/dist/offload-worker.mjs +19 -18
  81. package/dist/{ownership-CQTg6v1d.mjs → ownership-BLgOimfp.mjs} +2 -2
  82. package/dist/{phone-reverses-CHtco460.mjs → phone-reverses-vRveZKSG.mjs} +3 -3
  83. package/dist/{placement-log-oQnELAvQ.mjs → placement-log-CM0DSELs.mjs} +1 -1
  84. package/dist/{plan-placement-45EOlIG1.mjs → plan-placement-CIrvKq8y.mjs} +5 -5
  85. package/dist/{ports-DKO7EUNt.mjs → ports-CKORWlC0.mjs} +2 -2
  86. package/dist/{project-BCtQz48d.mjs → project-DIo71tGq.mjs} +14 -14
  87. package/dist/{react-native-android-MI4ktuhL.mjs → react-native-android-B7VYSlKj.mjs} +36 -27
  88. package/dist/{react-native-build-dixAL2G8.mjs → react-native-build-CFYTYmG4.mjs} +10 -7
  89. package/dist/{react-native-doctor-CvkWincj.mjs → react-native-doctor-CnpVfE0k.mjs} +5 -5
  90. package/dist/{react-native-ios-DF5otoBR.mjs → react-native-ios-ByeXo_NP.mjs} +15 -14
  91. package/dist/{recorded-build-CGHGCO8m.mjs → recorded-build-B4prJjSD.mjs} +1 -1
  92. package/dist/{recordings-BcOzqFD1.mjs → recordings-Byu5SzlI.mjs} +1 -1
  93. package/dist/{reload-DWxmO9dY.mjs → reload-DANrKhQR.mjs} +1 -1
  94. package/dist/{reload-DGWfNFwQ.mjs → reload-DTd9g1EG.mjs} +13 -13
  95. package/dist/{remote-DWYGW2f5.mjs → remote-BWuq9qHV.mjs} +3 -3
  96. package/dist/{remote-CV2jBcLv.mjs → remote-NOM82XE0.mjs} +8 -8
  97. package/dist/{result-CWyxwPvZ.mjs → result-C-ISEJ5F.mjs} +15 -15
  98. package/dist/{run-FZtMQgrx.mjs → run-DQwx6djG.mjs} +1 -1
  99. package/dist/{server-bare-Ksh1NKeI.mjs → server-bare-B_wRfchQ.mjs} +1 -1
  100. package/dist/{server-command-BO2DIsJV.mjs → server-command-DgXYowQf.mjs} +5 -5
  101. package/dist/{server-expo-ZS9_WaNG.mjs → server-expo-ByBM8DVv.mjs} +9 -7
  102. package/dist/server-expo-D7rwjAFp.mjs +2 -0
  103. package/dist/{settings-TYrzDh8T.mjs → settings-BthPoY3t.mjs} +2 -2
  104. package/dist/{settings-Ag4pbs0z.mjs → settings-Cz8kQJzr.mjs} +44 -8
  105. package/dist/{settings-payload-CUM0DYwz.mjs → settings-payload-BOcxsZ6k.mjs} +2 -2
  106. package/dist/{settings-write-D_9_IEx7.mjs → settings-write-BuMPL1rd.mjs} +3 -3
  107. package/dist/settings.schema.json +32 -2
  108. package/dist/{slot-launch-DW_29Bmu.mjs → slot-launch-BIm9w8kH.mjs} +5 -5
  109. package/dist/{stage-_8k8p7uq.mjs → stage-CX1Byp3n.mjs} +5 -4
  110. package/dist/{start-CdgtOksb.mjs → start-BZWr85b2.mjs} +1 -1
  111. package/dist/{start-CzBB5R7N.mjs → start-DI0ofPO-.mjs} +8 -8
  112. package/dist/{state-DsrFh3yv.mjs → state-45P8Kd6Z.mjs} +1 -1
  113. package/dist/{state-CfP-ccP8.mjs → state-C2vELPyr.mjs} +2 -2
  114. package/dist/{stats-BgTyuzib.mjs → stats-BDljWVWU.mjs} +3 -3
  115. package/dist/{status-C7Zzb-Eh.mjs → status-BG2S-a1d.mjs} +1 -1
  116. package/dist/{status-Bcdy5eHt.mjs → status-DEZjHP4q.mjs} +27 -29
  117. package/dist/{status-watch-DY0EZcmg.mjs → status-watch-Cs18eFkQ.mjs} +4 -4
  118. package/dist/status-worker.mjs +1 -1
  119. package/dist/{stop-iGkvEvDn.mjs → stop-B2zDplJa.mjs} +2 -2
  120. package/dist/{stop-CkmBkNyg.mjs → stop-BPrTEOaz.mjs} +14 -14
  121. package/dist/{stop-CbxsTKyZ.mjs → stop-DrxHVVX9.mjs} +4 -4
  122. package/dist/supervisor-run.mjs +11 -11
  123. package/dist/{support-CfYmOdQs.mjs → support-BeVRaMWT.mjs} +9 -9
  124. package/dist/{support-JZ4KRW0C.mjs → support-DBKG3Yyb.mjs} +5 -5
  125. package/dist/{swiftpm-artifact-inputs-C1rZDRDs.mjs → swiftpm-artifact-inputs-CfNAb6Vm.mjs} +1 -1
  126. package/dist/{swiftpm-macos-DRTjC7Ff.mjs → swiftpm-macos-xdHjJHIj.mjs} +7 -7
  127. package/dist/toolchain-CTsPS5tL.mjs +2 -0
  128. package/dist/{toolchain-BeD7tbBW.mjs → toolchain-CZvtCZ-m.mjs} +9 -6
  129. package/dist/{warm-progress-CJQ8tk5O.mjs → warm-progress-D3a0KviW.mjs} +17 -13
  130. package/dist/{web-BXbmysa1.mjs → web-BvAweypa.mjs} +6 -6
  131. package/dist/web-DDL3usMb.mjs +2 -0
  132. package/dist/web-run.mjs +4 -4
  133. package/dist/{workspace-state-DOPXG2Gp.mjs → workspace-state-CHEN_xzy.mjs} +1 -1
  134. package/dist/{workspaces-DCzDzydB.mjs → workspaces-BgAYIccE.mjs} +213 -50
  135. package/dist/{worktree-6ngObKkw.mjs → worktree-C0YZ6mnk.mjs} +1 -1
  136. package/dist/{worktree-BAC43Kio.mjs → worktree-kGPE9Pcw.mjs} +335 -33
  137. package/package.json +7 -7
  138. package/dist/server-expo-9hQwyLze.mjs +0 -2
  139. package/dist/toolchain-CNlKc9pH.mjs +0 -2
  140. package/dist/web-BcaySU05.mjs +0 -2
@@ -1,30 +1,30 @@
1
1
  import { d as throwIfCancelled, u as cancelledError, w as withDrainingCancellation } from "./exec-L37dbiIb.mjs";
2
- import { E as workspaceDir, a as recordWorkspaceUseAsync, k as workspaceLogsDir } from "./workspace-state-DOPXG2Gp.mjs";
3
- import { l as phaseLine } from "./command-output-ByEmIwur.mjs";
2
+ import { E as workspaceDir, a as recordWorkspaceUseAsync, k as workspaceLogsDir } from "./workspace-state-CHEN_xzy.mjs";
3
+ import { l as phaseLine } from "./command-output-DsjhOzJ3.mjs";
4
4
  import { A as withConfigLockAsync, O as upsertProject, m as getProject, u as getConcurrencyLimits } from "./config-CNmN-ndb.mjs";
5
- import { J as resolveCacheProviderConfig, Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY } from "./settings-Ag4pbs0z.mjs";
6
- import { f as projectRegistry, v as detectIsExpo } from "./project-BCtQz48d.mjs";
5
+ import { J as resolveCacheProviderConfig, Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY } from "./settings-Cz8kQJzr.mjs";
6
+ import { f as projectRegistry, v as detectIsExpo } from "./project-DIo71tGq.mjs";
7
7
  import { s as workspaceShareURL } from "./stim-desktop-DWGAfaud.mjs";
8
- import { j as hostSystemImageArch } from "./android-CGctfYpv.mjs";
8
+ import { j as hostSystemImageArch } from "./android-27_JgJ1T.mjs";
9
9
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
10
- import { Jn as checkEasAuth, nr as resolveRemote, rr as uploadRemote } from "./device-capacity-DWUOvY13.mjs";
11
- import { $ as tapBuildLog, Q as startBuildProgress, St as acquireBuildSlot, Tt as releaseBuildSlot, X as recordFinishedBuild, ct as recordRunStats, it as readRunEstimates, lt as statsProjectKey, rt as createRunRecorder } from "./workspaces-DCzDzydB.mjs";
12
- import { H as readBundleId, _t as runCancellationSignal, vt as withNativeBuildRun } from "./toolchain-BeD7tbBW.mjs";
13
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-CdpXXSq2.mjs";
14
- import { C as providerUploadOutcome, D as storedAppId } from "./build-cache-Dt-dhCJF.mjs";
15
- import { m as listIosRuntimes } from "./ios-BveW7qK1.mjs";
10
+ import { Zn as checkEasAuth, ar as resolveRemote, or as uploadRemote } from "./device-capacity-D_IlxZRL.mjs";
11
+ import { $ as startBuildProgress, Ct as acquireBuildSlot, Et as releaseBuildSlot, Z as recordFinishedBuild, at as readRunEstimates, et as tapBuildLog, it as createRunRecorder, lt as recordRunStats, ut as statsProjectKey } from "./workspaces-BgAYIccE.mjs";
12
+ import { ht as withNativeBuildRun, mt as runCancellationSignal, z as readBundleId } from "./toolchain-CZvtCZ-m.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-CANftndU.mjs";
14
+ import { C as providerUploadOutcome, D as storedAppId } from "./build-cache-CJ65Efv7.mjs";
15
+ import { m as listIosRuntimes } from "./ios-DQEzde6f.mjs";
16
16
  import { d as optimizationBuildProfile, l as artifactCachePolicy } from "./errors-DHm_U5gv.mjs";
17
- import { C as setRemoteLogSink } from "./client-DU6dnGX1.mjs";
18
- import { L as resolveBuildPlacement, c as iosProjectPathError, g as resolveIosBuildSetup, m as resolveConfiguration, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-CfYmOdQs.mjs";
19
- import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-CwOXKJwa.mjs";
20
- import { f as settleFingerprintCheck } from "./prebuild-BKkj3OyL.mjs";
21
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-UxUBU8up.mjs";
22
- import { i as recordedBuildKey, n as pruneArtifactCopies, r as recordBuild } from "./recorded-build-CGHGCO8m.mjs";
23
- import { E as resolveVariant } from "./support-JZ4KRW0C.mjs";
24
- import { t as acquireAndroidArtifact } from "./artifact-BsimBWxG.mjs";
25
- import { a as persistLastBuild, l as resolveAndroidBuildPlan, n as finishAndroidUpload } from "./result-CWyxwPvZ.mjs";
26
- import { o as lastBuildRecord } from "./ios-project-XHg87vyQ.mjs";
27
- import { t as acquireIosArtifact } from "./artifact-BrNZTZtA.mjs";
17
+ import { C as setRemoteLogSink } from "./client-qwmHFSga.mjs";
18
+ import { L as resolveBuildPlacement, c as iosProjectPathError, g as resolveIosBuildSetup, m as resolveConfiguration, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-BeVRaMWT.mjs";
19
+ import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-4rg9WpEg.mjs";
20
+ import { o as settleFingerprintCheck } from "./miss-reason-CeHvzeVm.mjs";
21
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-BfvvAJLd.mjs";
22
+ import { i as recordedBuildKey, n as pruneArtifactCopies, r as recordBuild } from "./recorded-build-B4prJjSD.mjs";
23
+ import { E as resolveVariant } from "./support-DBKG3Yyb.mjs";
24
+ import { t as acquireAndroidArtifact } from "./artifact-Dc1GsK7o.mjs";
25
+ import { a as persistLastBuild, l as resolveAndroidBuildPlan, n as finishAndroidUpload } from "./result-C-ISEJ5F.mjs";
26
+ import { o as lastBuildRecord } from "./ios-project-Bsm-eqwv.mjs";
27
+ import { t as acquireIosArtifact } from "./artifact-sGoFVK1q.mjs";
28
28
  import { constants, promises } from "node:fs";
29
29
  import { basename, dirname, join } from "node:path";
30
30
  import { hostSimulatorArch } from "@stim-cli/core";
@@ -1,9 +1,9 @@
1
1
  import { d as throwIfCancelled, t as getExecutor, w as withDrainingCancellation } from "./exec-L37dbiIb.mjs";
2
- import { y as sharedBuildCache } from "./workspace-state-DOPXG2Gp.mjs";
2
+ import { y as sharedBuildCache } from "./workspace-state-CHEN_xzy.mjs";
3
3
  import { a as killOnAbort, c as gitQuiet, o as git, r as childEnvironment, s as gitAsync } from "./operation-exec-DNynwpqO.mjs";
4
- import { m as defaultAndroidLayout } from "./settings-Ag4pbs0z.mjs";
4
+ import { m as defaultAndroidLayout } from "./settings-Cz8kQJzr.mjs";
5
5
  import { r as register } from "./cache-manifest-BO0TIcPV.mjs";
6
- import { r as writeSignedTail, t as computeSignedTail } from "./apk-signed-tail-BMv-KLcB.mjs";
6
+ import { r as writeSignedTail, t as computeSignedTail } from "./apk-signed-tail-DHMkXs4s.mjs";
7
7
  import { createHash } from "node:crypto";
8
8
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
9
9
  import { join } from "node:path";
@@ -181,7 +181,10 @@ const FINGERPRINT_PLATFORMS = /* @__PURE__ */ new Set(["ios", "android"]);
181
181
  const DEFAULT_FINGERPRINT_IGNORES = [
182
182
  "**/android/local.properties",
183
183
  "**/android/.idea/**",
184
- "**/*.xcodeproj/xcuserdata/**/*"
184
+ "**/*.xcodeproj/xcuserdata/**/*",
185
+ "**/.git",
186
+ "**/.git/**",
187
+ "**/.expo/**"
185
188
  ];
186
189
  /**
187
190
  * `react-native bundle` output, ignored only while an ignore pattern matches it: a committed copy can be a native
@@ -1,10 +1,11 @@
1
1
  import { a as trackReportResource } from "./exec-L37dbiIb.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash, u as plural } from "./command-output-ByEmIwur.mjs";
3
- import { an as makeTemporaryDirectory, sn as removeTemporaryEntryAsync } from "./settings-Ag4pbs0z.mjs";
4
- import { Yn as easAuthNote } from "./device-capacity-DWUOvY13.mjs";
5
- import { at as readStats, q as estimateBuild } from "./workspaces-DCzDzydB.mjs";
6
- import { c as entryDir, t as artifactIn } from "./build-cache-Dt-dhCJF.mjs";
7
- import { l as predictBuildMiss, o as staleNativeDirRefusal } from "./prebuild-BKkj3OyL.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash, u as plural } from "./command-output-DsjhOzJ3.mjs";
3
+ import { an as makeTemporaryDirectory, sn as removeTemporaryEntryAsync } from "./settings-Cz8kQJzr.mjs";
4
+ import { Qn as easAuthNote } from "./device-capacity-D_IlxZRL.mjs";
5
+ import { J as estimateBuild, ot as readStats } from "./workspaces-BgAYIccE.mjs";
6
+ import { c as entryDir, t as artifactIn } from "./build-cache-CJ65Efv7.mjs";
7
+ import { R as staleNativeDirRefusal } from "./worktree-kGPE9Pcw.mjs";
8
+ import { r as predictBuildMiss } from "./miss-reason-CeHvzeVm.mjs";
8
9
  import chalk from "chalk";
9
10
  import { PROVIDER_LOAD_TIMEOUT_ENV, PROVIDER_LOAD_TIMEOUT_MS, buildResolveTimeoutMs, resolveTieredBuild, timeoutFromEnv } from "@stim-cli/cache";
10
11
  //#region src/commands/build-plan.ts
@@ -5,24 +5,24 @@ import { runId, trace } from "@stim-cli/core/state";
5
5
  import { Command } from "commander";
6
6
  //#region bin/cli.ts
7
7
  const commands = /* @__PURE__ */ new Map([
8
- ["doctor", () => import("./doctor-CxgR5vPi.mjs")],
9
- ["worktree", () => import("./worktree-6ngObKkw.mjs")],
10
- ["start", () => import("./start-CdgtOksb.mjs")],
11
- ["ports", () => import("./ports-DKO7EUNt.mjs")],
12
- ["stop", () => import("./stop-iGkvEvDn.mjs")],
13
- ["ios", () => import("./ios-Bjz7aPLy.mjs")],
14
- ["android", () => import("./android-CaSsewbu.mjs")],
15
- ["web", () => import("./web-BcaySU05.mjs")],
16
- ["macos", () => import("./macos-ZfpWlzBO.mjs")],
17
- ["reload", () => import("./reload-DWxmO9dY.mjs")],
18
- ["device", () => import("./device-DGMvzoZZ.mjs")],
19
- ["logs", () => import("./logs-x3em2-oI.mjs")],
20
- ["remote", () => import("./remote-DWYGW2f5.mjs")],
21
- ["settings", () => import("./settings-TYrzDh8T.mjs")],
22
- ["status", () => import("./status-C7Zzb-Eh.mjs")],
23
- ["stats", () => import("./stats-BgTyuzib.mjs")],
24
- ["gc", () => import("./gc-1ZLq1djg.mjs")],
25
- ["guide", () => import("./guide-COxIANZu.mjs")]
8
+ ["doctor", () => import("./doctor-BAA3zN5U.mjs")],
9
+ ["worktree", () => import("./worktree-C0YZ6mnk.mjs")],
10
+ ["start", () => import("./start-BZWr85b2.mjs")],
11
+ ["ports", () => import("./ports-CKORWlC0.mjs")],
12
+ ["stop", () => import("./stop-B2zDplJa.mjs")],
13
+ ["ios", () => import("./ios-Bi0bQiZ_.mjs")],
14
+ ["android", () => import("./android-Biwc4Dck.mjs")],
15
+ ["web", () => import("./web-DDL3usMb.mjs")],
16
+ ["macos", () => import("./macos-C5liDnbP.mjs")],
17
+ ["reload", () => import("./reload-DANrKhQR.mjs")],
18
+ ["device", () => import("./device-CxMwX0VO.mjs")],
19
+ ["logs", () => import("./logs-B0etn-BD.mjs")],
20
+ ["remote", () => import("./remote-BWuq9qHV.mjs")],
21
+ ["settings", () => import("./settings-BthPoY3t.mjs")],
22
+ ["status", () => import("./status-BG2S-a1d.mjs")],
23
+ ["stats", () => import("./stats-BDljWVWU.mjs")],
24
+ ["gc", () => import("./gc-BQ5dXnC7.mjs")],
25
+ ["guide", () => import("./guide-DqJCc4vW.mjs")]
26
26
  ]);
27
27
  const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
28
28
  const program = new Command();
package/dist/cli.mjs CHANGED
@@ -4,6 +4,6 @@ const encode = (version) => version.split(".", 3).reduce((sum, part) => sum * 1e
4
4
  if (encode(process.versions.node) < encode("22.12.0")) {
5
5
  process.stderr.write(`STIM_NODE_UNSUPPORTED: Stim needs Node 22.12.0 or later; this is Node ${process.versions.node} at ${process.execPath}. To run Stim where a project pins an older Node, see https://stim.appandflow.com/docs/requirements#older-node-pins\n`);
6
6
  process.exitCode = 1;
7
- } else import("./cli-BGUrlSH3.mjs");
7
+ } else import("./cli-BSlwv9hI.mjs");
8
8
  //#endregion
9
9
  export {};
@@ -1,11 +1,11 @@
1
1
  import { C as operationState, E as debugLog, d as throwIfCancelled, r as reportSignal, t as getExecutor } from "./exec-L37dbiIb.mjs";
2
2
  import { H as openAuthenticated, J as sayHello, q as resolveEndpoint, v as loadConfig$1 } from "./config-CNmN-ndb.mjs";
3
3
  import { o as git, s as gitAsync } from "./operation-exec-DNynwpqO.mjs";
4
- import { C as CCACHE_UNAVAILABLE, Or as discoverCaches, S as CCACHE_NOT_RUN, at as maintenanceLogger, ft as planCacheEmptying, ot as emptyCaches } from "./device-capacity-DWUOvY13.mjs";
5
- import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
6
- import { A as COMPILATION_CACHE_NOT_RUN, D as readRubyVersion, S as workerToolchain, _t as runCancellationSignal, a as buildsOnlyOnWorker, b as toolchainNotes, c as iosToolchainAsync, j as COMPILATION_CACHE_UNAVAILABLE, o as cocoapodsDifference, y as toolchainMismatches } from "./toolchain-BeD7tbBW.mjs";
4
+ import { C as CCACHE_UNAVAILABLE, S as CCACHE_NOT_RUN, at as maintenanceLogger, jr as discoverCaches, ot as emptyCaches, pt as planCacheEmptying } from "./device-capacity-D_IlxZRL.mjs";
7
5
  import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
8
- import { D as OffloadRefusal, M as namedBuildMachine, R as workerFailureReason, et as pairedMachines, u as isReleaseConfiguration } from "./support-CfYmOdQs.mjs";
6
+ import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
7
+ import { D as COMPILATION_CACHE_NOT_RUN, O as COMPILATION_CACHE_UNAVAILABLE, _ as toolchainNotes, a as buildsOnlyOnWorker, c as iosToolchainAsync, g as toolchainMismatches, mt as runCancellationSignal, o as cocoapodsDifference, w as readRubyVersion, y as workerToolchain } from "./toolchain-CZvtCZ-m.mjs";
8
+ import { D as OffloadRefusal, M as namedBuildMachine, R as workerFailureReason, et as pairedMachines, u as isReleaseConfiguration } from "./support-BeVRaMWT.mjs";
9
9
  import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
10
10
  import { a as sourceManifest, i as nativeTransferManifest, n as gitVisiblePaths, r as nativeFileDigest, t as checkNativeTransferMembership } from "./native-source-D2ZfiQ6U.mjs";
11
11
  import { t as BuildArtifactCache } from "./build-artifact-cache-D7B6seMj.mjs";
@@ -988,7 +988,7 @@ async function probeMachine(credential, identity, { connectMs = CONNECT_TIMEOUT_
988
988
  ...native === "xcode" && identity.artifact && connection.supports("build-artifact-cache") ? { artifact: identity.artifact } : {},
989
989
  ...identity.swiftpmArtifact && queriesPeerCache(connection, "swiftpm-peer-cache") ? { swiftpmArtifact: identity.swiftpmArtifact } : {},
990
990
  ...identity.reactNativeArtifact && queriesPeerCache(connection, "react-native-peer-cache") ? { reactNativeArtifact: identity.reactNativeArtifact } : {},
991
- ...native === "gradle" && identity.gradleArtifact && connection.supports("native-gradle-peer-cache") ? { gradleArtifact: identity.gradleArtifact } : {}
991
+ ...native === "gradle" && identity.gradleArtifact && queriesGradlePeerCache(connection, identity.gradleArtifact) ? { gradleArtifact: identity.gradleArtifact } : {}
992
992
  }, offerMs);
993
993
  const failure = replyError(reply);
994
994
  if (failure || !("result" in reply)) {
@@ -1009,7 +1009,7 @@ async function probeMachine(credential, identity, { connectMs = CONNECT_TIMEOUT_
1009
1009
  return {
1010
1010
  credential,
1011
1011
  connection,
1012
- offer: identity.swiftpmArtifact && !queriesPeerCache(connection, "swiftpm-peer-cache") || identity.reactNativeArtifact && !queriesPeerCache(connection, "react-native-peer-cache") || native === "gradle" && (!identity.gradleArtifact || !connection.supports("native-gradle-peer-cache")) ? {
1012
+ offer: identity.swiftpmArtifact && !queriesPeerCache(connection, "swiftpm-peer-cache") || identity.reactNativeArtifact && !queriesPeerCache(connection, "react-native-peer-cache") || native === "gradle" && (!identity.gradleArtifact || !queriesGradlePeerCache(connection, identity.gradleArtifact)) ? {
1013
1013
  ...offer,
1014
1014
  artifact: null
1015
1015
  } : offer
@@ -1032,7 +1032,8 @@ async function chooseBuildMachine({ projectRoot, target, here, note, machines =
1032
1032
  const rubyVersion = readRubyVersion(projectRoot) ?? void 0;
1033
1033
  const gradleQuery = gradleArtifact ? {
1034
1034
  ...gradleArtifact,
1035
- project: identity.project
1035
+ project: identity.project,
1036
+ ...target.platform === "android" && target.local.jdk ? { jdk: target.local.jdk } : {}
1036
1037
  } : void 0;
1037
1038
  const reactNativeQuery = reactNativeArtifact ? reactNativeBuildQuery(reactNativeArtifact.request, reactNativeArtifact.fingerprint, identity.project, target.local) : null;
1038
1039
  const swiftpmQuery = swiftpmArtifact?.artifactInputs ? swiftpmArtifactQuery({
@@ -1129,6 +1130,9 @@ function rebuiltFingerprint(choice, request, fingerprint, expected) {
1129
1130
  function queriesPeerCache(connection, feature) {
1130
1131
  return connection.supports(feature) && connection.supports("build-compat");
1131
1132
  }
1133
+ function queriesGradlePeerCache(connection, query) {
1134
+ return connection.supports("native-gradle-peer-cache") && (!query.jdk || connection.supports("native-gradle-peer-jdk"));
1135
+ }
1132
1136
  function macosBuildParameters(request, peerCache) {
1133
1137
  return {
1134
1138
  ...request.cacheArtifact === true && peerCache ? { cacheArtifact: true } : {},
@@ -1175,7 +1179,7 @@ async function peerArtifact(choice, request, fingerprint) {
1175
1179
  const query = choice.gradleArtifact;
1176
1180
  if (query) {
1177
1181
  if (request.platform !== "android" || request.native?.provider !== "gradle" || !request.native.cache?.read || !request.native.cache.remote || query.project !== choice.identity.project || query.sourceDigest !== request.native.transfer.digest || !isDeepStrictEqual(query.inputs, request.native.transfer.declaration) || !isDeepStrictEqual(query.android, request.android)) throw new Error("The Gradle artifact query does not match the build request.");
1178
- return choice.connection.supports("native-gradle-peer-cache") ? matchingArtifact(choice.offer, "native-gradle") : null;
1182
+ return queriesGradlePeerCache(choice.connection, query) ? matchingArtifact(choice.offer, "native-gradle") : null;
1179
1183
  }
1180
1184
  if (request.platform === "ios" && request.native && typeof fingerprint === "string" && choice.connection.supports("build-artifact-cache")) return matchingArtifact(choice.offer, {
1181
1185
  fingerprint,
@@ -1,11 +1,11 @@
1
1
  import { T as process_identity_exports } from "./exec-L37dbiIb.mjs";
2
- import { k as workspaceLogsDir } from "./workspace-state-DOPXG2Gp.mjs";
2
+ import { k as workspaceLogsDir } from "./workspace-state-CHEN_xzy.mjs";
3
3
  import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
4
  import { ft as deviceSlotKey, vt as validateDeviceSlot } from "./config-CNmN-ndb.mjs";
5
- import { c as watchAppPid, i as parseLogcatLine, o as startAndroidLogcat, s as waitForAppPid, t as androidClockOffset } from "./android-BPBARZMR.mjs";
5
+ import { c as watchAppPid, i as parseLogcatLine, o as startAndroidLogcat, s as waitForAppPid, t as androidClockOffset } from "./android-DGLG_VQ3.mjs";
6
6
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
7
7
  import { a as startIosDeviceConsole, i as parseDeviceConsoleLine } from "./ios-device-ygijU78G.mjs";
8
- import { a as unregisterCollector, i as registerCollector, r as readCollectors, t as collectorProcessTitle } from "./ownership-CQTg6v1d.mjs";
8
+ import { a as unregisterCollector, i as registerCollector, r as readCollectors, t as collectorProcessTitle } from "./ownership-BLgOimfp.mjs";
9
9
  import { n as parseLogStreamLine, r as startIosLogStream, t as appNameFromBundleId } from "./ios-2Qr4_Zu2.mjs";
10
10
  import { existsSync } from "node:fs";
11
11
  import { isAbsolute, join, resolve } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
2
- import { t as NO_PROJECT_REFUSAL } from "./project-BCtQz48d.mjs";
2
+ import { t as NO_PROJECT_REFUSAL } from "./project-DIo71tGq.mjs";
3
3
  import { quotedPath as quotedPath$1 } from "@stim-cli/core";
4
4
  import chalk from "chalk";
5
5
  //#region src/diagnostics/launch-error-preview.ts
@@ -1,57 +1,61 @@
1
1
  import { l as cancellableSleep, t as getExecutor, w as withDrainingCancellation } from "./exec-L37dbiIb.mjs";
2
- import { f as writeWorkspaceStateAsync, k as workspaceLogsDir, r as readWorkspaceState } from "./workspace-state-DOPXG2Gp.mjs";
3
- import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-ByEmIwur.mjs";
4
- import { A as withConfigLockAsync, O as upsertProject, dt as deviceSlotFileKey, ft as deviceSlotKey, m as getProject, u as getConcurrencyLimits, y as recordIosSchemeApprovals } from "./config-CNmN-ndb.mjs";
5
- import { J as resolveCacheProviderConfig, Q as resolveSettings, St as gitCommonDirAsync, Vt as repoRootAsync, an as makeTemporaryDirectory, at as settingsLayers, dt as detectProviders, nt as settingOriginScope, on as removeTemporaryEntry } from "./settings-Ag4pbs0z.mjs";
6
- import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot, v as detectIsExpo, z as writeWorkspaceLaunchAsync } from "./project-BCtQz48d.mjs";
2
+ import { f as writeWorkspaceStateAsync, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-CHEN_xzy.mjs";
3
+ import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-DsjhOzJ3.mjs";
4
+ import { A as withConfigLockAsync$1, O as upsertProject, dt as deviceSlotFileKey, ft as deviceSlotKey, m as getProject, u as getConcurrencyLimits, y as recordIosSchemeApprovals } from "./config-CNmN-ndb.mjs";
5
+ import { J as resolveCacheProviderConfig, Q as resolveSettings, St as gitCommonDirAsync, Vt as repoRootAsync, an as makeTemporaryDirectory, at as settingsLayers, dt as detectProviders, nt as settingOriginScope, on as removeTemporaryEntry } from "./settings-Cz8kQJzr.mjs";
6
+ import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot$1, v as detectIsExpo, z as writeWorkspaceLaunchAsync } from "./project-DIo71tGq.mjs";
7
7
  import { o as workspaceLinks } from "./stim-desktop-DWGAfaud.mjs";
8
- import { c as pidExists, d as resolveProjectMetro, f as signalProcessTree } from "./metro-TIQ1Wft-.mjs";
8
+ import { c as pidExists, d as resolveProjectMetro, f as signalProcessTree } from "./metro-Cj6W4qOO.mjs";
9
9
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
10
- import { Bn as readRemoteSimulatorArch, En as devClientUrl, In as launchIosApp, Jn as checkEasAuth, Jt as bundleEntryPoint, Ln as restartedAppNote, Mn as installIosApp, Nn as iosAppProcess, Tn as clearOtherUserApps, Vn as gateMetroOrigin, Xt as ensureMetroReachable, Zn as loadProjectProvider, Zt as ensureRemoteBootOwned, an as LAUNCH_UNVERIFIED, dn as readMetroRecords, en as remoteIosDeps, fn as unattributedLaunchLines, gn as verifyReleaseLaunch, hn as verifyLaunch, in as LAUNCH_FATAL, k as budgetGate, ln as isBundleProof, nr as resolveRemote, pn as unverifiedLaunchLines, r as checkDeviceCapacity, rn as LAUNCH_BUNDLING, rr as uploadRemote, sn as RELEASE_VERIFY_WAIT_MS, tn as resolveRemoteContext, tr as resolveEasCliBin, un as readCollectorRecords, xn as IOS_DEV_MENU_OFF_DEFAULTS_PLIST } from "./device-capacity-DWUOvY13.mjs";
11
- import { St as acquireBuildSlot, Tt as releaseBuildSlot, ct as recordRunStats, it as readRunEstimates, ot as recordCapacityRefusal } from "./workspaces-DCzDzydB.mjs";
12
- import { E as readPodState, H as readBundleId, T as podsAreStale, U as resolveScheme, V as readBundleExecutable, c as iosToolchainAsync, k as runPodInstall } from "./toolchain-BeD7tbBW.mjs";
13
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-CdpXXSq2.mjs";
14
- import { E as storeBuild, M as untrackedNativeFiles, T as resolveBuild, g as fingerprintProject, l as evictBuild } from "./build-cache-Dt-dhCJF.mjs";
15
- import { d as listAllIosSims, h as listIosRuntimesAsync, r as clearIosAppData, w as resetIosKeychain } from "./ios-BveW7qK1.mjs";
16
- import { C as clearIosAdoptionPending, G as lostLine, J as releaseLeaseOnAbort, K as lostRefusal, U as acquireRunLease, Y as runLease, i as deviceLabel, o as deviceShortName, t as appNameFromPath, z as DEBUG_VERIFY_STEP_MS } from "./support-CfYmOdQs.mjs";
17
- import { n as readHostedIos, o as writeHostedIosAsync } from "./ios-state-enWc5P6U.mjs";
18
- import { n as hostedMetroPortProbe } from "./hosted-native-OBT2sJxn.mjs";
19
- import { i as prepareHostedIos, r as placeHostedIos } from "./phone-reverses-CHtco460.mjs";
20
- import { n as verifyCollectorOwnership } from "./ownership-CQTg6v1d.mjs";
21
- import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DW_29Bmu.mjs";
22
- import { a as discoverXcodeProject, r as buildIos } from "./react-native-build-dixAL2G8.mjs";
23
- import { c as startDevServer, g as detectBundleId } from "./start-CzBB5R7N.mjs";
10
+ import { $t as ensureMetroReachable, Bn as restartedAppNote, Fn as installIosApp, In as iosAppProcess, On as clearOtherUserApps, Un as readRemoteSimulatorArch, Wn as gateMetroOrigin, Zn as checkEasAuth, Zt as bundleEntryPoint, ar as resolveRemote, cn as LAUNCH_UNVERIFIED, en as ensureRemoteBootOwned, er as loadProjectProvider, fn as isBundleProof, gn as unverifiedLaunchLines, hn as unattributedLaunchLines, in as resolveRemoteContext, ir as resolveEasCliBin, k as budgetGate, kn as devClientUrl, mn as readMetroRecords, on as LAUNCH_BUNDLING, or as uploadRemote, pn as readCollectorRecords, r as checkDeviceCapacity, rn as remoteIosDeps, sn as LAUNCH_FATAL, un as RELEASE_VERIFY_WAIT_MS, vn as verifyLaunch, wn as IOS_DEV_MENU_OFF_DEFAULTS_PLIST, yn as verifyReleaseLaunch, zn as launchIosApp } from "./device-capacity-D_IlxZRL.mjs";
11
+ import { Ct as acquireBuildSlot, Et as releaseBuildSlot, at as readRunEstimates, lt as recordRunStats, st as recordCapacityRefusal } from "./workspaces-BgAYIccE.mjs";
12
+ import { B as resolveScheme, C as readPodState, E as runPodInstall, R as readBundleExecutable, S as podsAreStale, c as iosToolchainAsync, z as readBundleId } from "./toolchain-CZvtCZ-m.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-CANftndU.mjs";
14
+ import { E as storeBuild, M as untrackedNativeFiles, T as resolveBuild, g as fingerprintProject, l as evictBuild } from "./build-cache-CJ65Efv7.mjs";
15
+ import { d as listAllIosSims, h as listIosRuntimesAsync, r as clearIosAppData, w as resetIosKeychain } from "./ios-DQEzde6f.mjs";
16
+ import { C as clearIosAdoptionPending, G as lostLine, J as releaseLeaseOnAbort, K as lostRefusal, U as acquireRunLease, Y as runLease, i as deviceLabel, o as deviceShortName, t as appNameFromPath, z as DEBUG_VERIFY_STEP_MS } from "./support-BeVRaMWT.mjs";
17
+ import { l as call, u as connectHost } from "./hosted-client-B_h_bTlz.mjs";
18
+ import { n as readHostedIos, o as writeHostedIosAsync } from "./ios-state-tzD0s7pt.mjs";
19
+ import { n as hostedMetroPortProbe } from "./hosted-native-B6ur_0OJ.mjs";
20
+ import { i as prepareHostedIos, r as placeHostedIos } from "./phone-reverses-vRveZKSG.mjs";
21
+ import { n as verifyCollectorOwnership } from "./ownership-BLgOimfp.mjs";
22
+ import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-BIm9w8kH.mjs";
23
+ import { L as runPrebuild, P as planPrebuildAsync } from "./worktree-kGPE9Pcw.mjs";
24
+ import { a as discoverXcodeProject, r as buildIos } from "./react-native-build-CFYTYmG4.mjs";
25
+ import { c as startDevServer, g as detectBundleId } from "./start-DI0ofPO-.mjs";
24
26
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
25
- import { a as sealAppForDevice, r as gateProfileForDevice } from "./ios-signing-CRYQ1W42.mjs";
26
- import { a as resolveEasDevelopmentBuild } from "./eas-build-CwOXKJwa.mjs";
27
- import { c as isWirelessIosDevice, i as iosDeviceProcess, l as listIosDevices, n as installIosDeviceApp, p as verifyIosDeviceReleaseLaunch, r as iosDeviceBounds, t as awaitIosDeviceLaunch, u as localNetworkPending } from "./ios-device-ByrDWSpC.mjs";
28
- import { a as captureNativeCrashes, c as simulatorConsolePaths, i as bundleBindFailure, n as IOS_CRASH_REPORT_RETRY, s as printNativeCrashReport, t as errorDiagnostics } from "./error-diagnostics-CXTT3bYC.mjs";
29
- import { t as followHostedLaunchLogs } from "./hosted-logs-sync-uWSrH2mf.mjs";
30
- import { a as runPrebuild, d as memoizedFingerprint, n as planPrebuildAsync } from "./prebuild-BKkj3OyL.mjs";
31
- import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely } from "./native-runtime-UxUBU8up.mjs";
32
- import { n as devClientTakesDevMenuParams, r as hasDevClient, t as devClientScheme } from "./dev-client-3SQzMRXZ.mjs";
33
- import { t as automaticDevicePlacement } from "./auto-placement-CFKNrWLU.mjs";
34
- import { t as checkEasFallback } from "./eas-fallback-Cnb12a50.mjs";
35
- import { i as warmMetro, n as ensureBooted, r as ensureOwnedDevice } from "./device-BIg1iExg.mjs";
36
- import { t as selectFromPool } from "./device-pool-B8IqZKqm.mjs";
37
- import { s as reportIosResult } from "./ios-project-XHg87vyQ.mjs";
38
- import { a as swapJsBundle } from "./js-swap-C6vl3vEd.mjs";
27
+ import { a as sealAppForDevice, r as gateProfileForDevice } from "./ios-signing-rWR_Mu5Z.mjs";
28
+ import { a as resolveEasDevelopmentBuild } from "./eas-build-4rg9WpEg.mjs";
29
+ import { c as isWirelessIosDevice, i as iosDeviceProcess, l as listIosDevices, n as installIosDeviceApp, p as verifyIosDeviceReleaseLaunch, r as iosDeviceBounds, t as awaitIosDeviceLaunch, u as localNetworkPending } from "./ios-device-BLm1BZB4.mjs";
30
+ import { a as captureNativeCrashes, c as simulatorConsolePaths, i as bundleBindFailure, n as IOS_CRASH_REPORT_RETRY, s as printNativeCrashReport, t as errorDiagnostics } from "./error-diagnostics-CW9xl6ot.mjs";
31
+ import { t as followHostedLaunchLogs } from "./hosted-logs-sync-D3L1hDpM.mjs";
32
+ import { a as memoizedFingerprint } from "./miss-reason-CeHvzeVm.mjs";
33
+ import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely } from "./native-runtime-BfvvAJLd.mjs";
34
+ import { n as devClientTakesDevMenuParams, r as hasDevClient, t as devClientScheme } from "./dev-client-DL5UtVdx.mjs";
35
+ import { t as automaticDevicePlacement } from "./auto-placement-RNh4kx2T.mjs";
36
+ import { t as checkEasFallback } from "./eas-fallback-UGo0SG7T.mjs";
37
+ import { i as warmMetro, n as ensureBooted, r as ensureOwnedDevice } from "./device-yfuJ-v4s.mjs";
38
+ import { t as selectFromPool } from "./device-pool-BEaTdtss.mjs";
39
+ import { s as reportIosResult } from "./ios-project-Bsm-eqwv.mjs";
40
+ import { t as ensureIosRuntime } from "./ios-runtime-DLiKoOkd.mjs";
41
+ import { a as swapJsBundle } from "./js-swap-Cuky0ZAQ.mjs";
39
42
  import { mkdirSync, openSync, writeFileSync } from "node:fs";
40
43
  import { networkInterfaces } from "node:os";
41
44
  import { basename, join } from "node:path";
42
45
  import { ambientEnv, hostSimulatorArch } from "@stim-cli/core";
46
+ import { DEVICE_HOST_LIMITS } from "@stim-cli/core/state";
43
47
  import chalk from "chalk";
44
48
  import { loadCacheProvider } from "@stim-cli/cache";
45
49
  //#region src/commands/ios/collector.ts
46
50
  function collectorLogFile(root, slot) {
47
- return join(workspaceLogsDir(root), `collector-${deviceSlotFileKey("ios", slot)}.log`);
51
+ return join(workspaceLogsDir$1(root), `collector-${deviceSlotFileKey("ios", slot)}.log`);
48
52
  }
49
53
  function collectorEntry() {
50
54
  return spawnEntry("collector-run");
51
55
  }
52
56
  const COLLECTOR_EXIT_WAIT_MS = 2e3;
53
57
  const COLLECTOR_POLL_MS = 25;
54
- async function stopPreviousCollector({ root, slot = "default", kill = (pid, signal) => signalProcessTree(pid, signal), alive = pidExists, readState = readWorkspaceState, verify = verifyCollectorOwnership, waitMs = COLLECTOR_EXIT_WAIT_MS, note = (_line) => {} }) {
58
+ async function stopPreviousCollector({ root, slot = "default", kill = (pid, signal) => signalProcessTree(pid, signal), alive = pidExists, readState = readWorkspaceState$1, verify = verifyCollectorOwnership, waitMs = COLLECTOR_EXIT_WAIT_MS, note = (_line) => {} }) {
55
59
  const previous = (readState(root)?.collectors)?.[deviceSlotKey("ios", slot)] || null;
56
60
  const previousPid = Number(previous?.pid) || null;
57
61
  let killed = null;
@@ -76,7 +80,7 @@ async function stopPreviousCollector({ root, slot = "default", kill = (pid, sign
76
80
  }
77
81
  return { killed };
78
82
  }
79
- async function replaceCollector({ root, slot = "default", udid, bundleId, appName, appExecutable, physical = false, payloadUrl = null, spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), alive = pidExists, readState = readWorkspaceState, verify = verifyCollectorOwnership, waitMs = COLLECTOR_EXIT_WAIT_MS, note = (_line) => {} }) {
83
+ async function replaceCollector({ root, slot = "default", udid, bundleId, appName, appExecutable, physical = false, payloadUrl = null, spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), alive = pidExists, readState = readWorkspaceState$1, verify = verifyCollectorOwnership, waitMs = COLLECTOR_EXIT_WAIT_MS, note = (_line) => {} }) {
80
84
  const { killed } = await stopPreviousCollector({
81
85
  root,
82
86
  slot,
@@ -105,7 +109,7 @@ async function replaceCollector({ root, slot = "default", udid, bundleId, appNam
105
109
  if (payloadUrl) args.push("--payload-url", payloadUrl);
106
110
  let stdio = "ignore";
107
111
  try {
108
- mkdirSync(workspaceLogsDir(root), { recursive: true });
112
+ mkdirSync(workspaceLogsDir$1(root), { recursive: true });
109
113
  const fd = openSync(collectorLogFile(root, slot), "a");
110
114
  stdio = [
111
115
  "ignore",
@@ -939,6 +943,35 @@ async function finishIosRun({ operation, output, projectBundleId, runtime, runti
939
943
  };
940
944
  }
941
945
  //#endregion
946
+ //#region src/device-host/ios-runtime.ts
947
+ async function installHostedIosRuntime(machine, runtime, note, signal) {
948
+ const host = await connectHost(machine, void 0, true, signal);
949
+ note(`Installing missing iOS ${runtime.replace(/^iOS /, "")} on ${machine} with Xcode (typically 8-10 GB; shared by its workspaces).`);
950
+ const heartbeat = setInterval(() => note(`Waiting for Xcode runtime installation on ${machine}; downloads can take several minutes.`), 3e4);
951
+ heartbeat.unref();
952
+ const close = () => host.connection.close();
953
+ signal?.addEventListener("abort", close, { once: true });
954
+ try {
955
+ signal?.throwIfAborted();
956
+ const result = await call(host, "device-host.runtime.install", { runtime }, DEVICE_HOST_LIMITS.imageInstallMs + 15e3);
957
+ signal?.throwIfAborted();
958
+ if (result.ok !== true) throw new Error(`${machine} did not confirm runtime installation.`);
959
+ return { ok: true };
960
+ } catch (error) {
961
+ signal?.throwIfAborted();
962
+ return {
963
+ ok: false,
964
+ code: "STIM_HOSTING_REFUSED",
965
+ message: error instanceof Error ? error.message : String(error),
966
+ remedy: `Check Xcode and free disk space on ${machine}; update stim-server there if it does not support runtime installation.`
967
+ };
968
+ } finally {
969
+ clearInterval(heartbeat);
970
+ signal?.removeEventListener("abort", close);
971
+ close();
972
+ }
973
+ }
974
+ //#endregion
942
975
  //#region src/engine/ios-lan.ts
943
976
  const IP_TXT = "ip.txt";
944
977
  function chooseLanAddress({ pinned = null, candidates }) {
@@ -1053,6 +1086,8 @@ function hostLanCandidates(interfaces = networkInterfaces) {
1053
1086
  //#endregion
1054
1087
  //#region src/commands/ios/dependencies.ts
1055
1088
  const DEFAULT_DEPS = {
1089
+ ensureIosRuntime,
1090
+ installHostedIosRuntime,
1056
1091
  projectRegistry,
1057
1092
  automaticDevicePlacement,
1058
1093
  checkEasFallback,
@@ -1062,7 +1097,7 @@ const DEFAULT_DEPS = {
1062
1097
  readHostedIos,
1063
1098
  writeHostedIos: writeHostedIosAsync,
1064
1099
  resolveEasDevelopmentBuild,
1065
- findProjectRoot,
1100
+ findProjectRoot: findProjectRoot$1,
1066
1101
  resolveSettings,
1067
1102
  settingsLayers,
1068
1103
  settingOriginScope,
@@ -1074,7 +1109,7 @@ const DEFAULT_DEPS = {
1074
1109
  hasDevClient,
1075
1110
  devClientTakesDevMenuParams,
1076
1111
  getProject,
1077
- upsertProject: (...args) => withConfigLockAsync(() => upsertProject(...args)),
1112
+ upsertProject: (...args) => withConfigLockAsync$1(() => upsertProject(...args)),
1078
1113
  recordIosSchemeApprovals,
1079
1114
  checkDeviceCapacity,
1080
1115
  budgetGate,
@@ -1092,7 +1127,7 @@ const DEFAULT_DEPS = {
1092
1127
  resolveProjectMetro,
1093
1128
  startDevServer,
1094
1129
  warmMetro,
1095
- readWorkspaceState,
1130
+ readWorkspaceState: readWorkspaceState$1,
1096
1131
  pidExists,
1097
1132
  getConcurrencyLimits,
1098
1133
  fingerprintProject,
@@ -1,5 +1,5 @@
1
1
  import { t as getExecutor } from "./exec-L37dbiIb.mjs";
2
- import { Bt as repoRoot } from "./settings-Ag4pbs0z.mjs";
2
+ import { Bt as repoRoot } from "./settings-Cz8kQJzr.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import { existsSync } from "node:fs";
5
5
  import { dirname, join, relative } from "node:path";
@@ -1,5 +1,5 @@
1
- import { C as resolvePackageJson, b as isPackageResolvable } from "./project-BCtQz48d.mjs";
2
- import { $ as readBundleSchemes, Q as pickDevClientScheme } from "./toolchain-BeD7tbBW.mjs";
1
+ import { C as resolvePackageJson, b as isPackageResolvable } from "./project-DIo71tGq.mjs";
2
+ import { X as readBundleSchemes, Y as pickDevClientScheme } from "./toolchain-CZvtCZ-m.mjs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { isJsonObject, readJsonObject } from "@stim-cli/core/state";
5
5
  //#region src/commands/dev-client.ts
@@ -1,16 +1,16 @@
1
1
  import { t as getExecutor } from "./exec-L37dbiIb.mjs";
2
- import { r as readWorkspaceState$1 } from "./workspace-state-DOPXG2Gp.mjs";
3
- import { r as clockTime } from "./command-output-ByEmIwur.mjs";
2
+ import { r as readWorkspaceState$1 } from "./workspace-state-CHEN_xzy.mjs";
3
+ import { r as clockTime } from "./command-output-DsjhOzJ3.mjs";
4
4
  import { ft as deviceSlotKey, gt as projectDeviceSlots, ht as parseDeviceSlotOption, m as getProject, pt as deviceSlotPlatforms } from "./config-CNmN-ndb.mjs";
5
- import { I as readWorkspaceLaunches, P as readRemoteSession, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL } from "./project-BCtQz48d.mjs";
6
- import { $ as probeEmulatorSerial, A as getAvdNameForSerialAsync, E as emulatorProbeSession, P as listAdbDevicesAsync, Z as physicalDeviceModel, at as resolvePhysicalDevice, c as androidPoolNoCandidatesRefusal, d as androidToolPath, it as resolveOwnedAvdSerialAsync, s as androidPoolCandidates, u as androidToolCwd } from "./android-CGctfYpv.mjs";
7
- import { Wn as runProcessOperation } from "./device-capacity-DWUOvY13.mjs";
8
- import { C as parseLeaseDuration, D as releaseWorkspaceLeases, j as takeLease, y as fileLeaseIo } from "./activity-CdpXXSq2.mjs";
9
- import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-BveW7qK1.mjs";
10
- import { Z as waitForDevice, q as parseDeviceWait } from "./support-CfYmOdQs.mjs";
11
- import { n as runProvision } from "./device-provision-DWAoSKEw.mjs";
12
- import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, l as listIosDevices, o as iosPoolNoCandidatesRefusal } from "./ios-device-ByrDWSpC.mjs";
13
- import { t as selectFromPool } from "./device-pool-B8IqZKqm.mjs";
5
+ import { I as readWorkspaceLaunches, P as readRemoteSession, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL } from "./project-DIo71tGq.mjs";
6
+ import { $ as probeEmulatorSerial, A as getAvdNameForSerialAsync, E as emulatorProbeSession, P as listAdbDevicesAsync, Z as physicalDeviceModel, at as resolvePhysicalDevice, c as androidPoolNoCandidatesRefusal, d as androidToolPath, it as resolveOwnedAvdSerialAsync, s as androidPoolCandidates, u as androidToolCwd } from "./android-27_JgJ1T.mjs";
7
+ import { qn as runProcessOperation } from "./device-capacity-D_IlxZRL.mjs";
8
+ import { C as parseLeaseDuration, D as releaseWorkspaceLeases, j as takeLease, y as fileLeaseIo } from "./activity-CANftndU.mjs";
9
+ import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-DQEzde6f.mjs";
10
+ import { Z as waitForDevice, q as parseDeviceWait } from "./support-BeVRaMWT.mjs";
11
+ import { n as runProvision } from "./device-provision-C9NPdCne.mjs";
12
+ import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, l as listIosDevices, o as iosPoolNoCandidatesRefusal } from "./ios-device-BLm1BZB4.mjs";
13
+ import { t as selectFromPool } from "./device-pool-BEaTdtss.mjs";
14
14
  import { hostedNativeRecords } from "@stim-cli/core/state";
15
15
  import chalk from "chalk";
16
16
  //#region src/commands/device-tools.ts
@@ -53,6 +53,7 @@ const TARGET = "STIM_DEVICE_TOOL_TARGET";
53
53
  const UNSUPPORTED = "STIM_DEVICE_TOOL_UNSUPPORTED";
54
54
  const FAILED = "STIM_DEVICE_TOOL_FAILED";
55
55
  const DEFAULT_DEPS$1 = {
56
+ hostPlatform: process.platform,
56
57
  findProjectRoot: findProjectRoot$1,
57
58
  getProject,
58
59
  hostedSlots: (root, platform) => Object.keys(hostedNativeRecords(readWorkspaceState$1(root), platform)),
@@ -162,11 +163,12 @@ function describeError(error) {
162
163
  async function resolveToolTarget(platform, slot, root, d) {
163
164
  const slotText = slot === "default" ? "" : ` --slot ${slot}`;
164
165
  const runCommand = `stim ${platform}${slotText}`;
166
+ const localRemedy = platform === "ios" && d.hostPlatform !== "darwin" ? "Run device tools on a Mac with a local Stim-owned iOS simulator." : `Run \`${runCommand} --remote local\` to use a local device.`;
165
167
  const project = d.getProject(root);
166
168
  if (!project) return failure("STIM_NO_PROJECT", `No Stim environment is registered for ${root}.`, "Run `stim start` first.");
167
- if (d.hostedSlots(root, platform).includes(slot)) return failure(TARGET, `This workspace's ${platform} device${slotText ? ` in slot ${slot}` : ""} is hosted on another Mac, and device tools act only on the workspace's own local simulator or emulator.`, `Run \`${runCommand} --remote local\` to use a local device.`);
169
+ if (d.hostedSlots(root, platform).includes(slot)) return failure(TARGET, `This workspace's ${platform} device${slotText ? ` in slot ${slot}` : ""} is hosted on another Mac, and device tools act only on the workspace's own local simulator or emulator.`, localRemedy);
168
170
  const remote = d.readRemotePlatform(root);
169
- if (remote && (remote.platform === null || remote.platform === platform)) return failure(TARGET, `This workspace's remote device is EAS Simulator session ${remote.sessionId}, and device tools act only on the workspace's own local simulator or emulator.`, `Run \`${runCommand} --remote local\` to use a local device.`);
171
+ if (remote && (remote.platform === null || remote.platform === platform)) return failure(TARGET, `This workspace's remote device is EAS Simulator session ${remote.sessionId}, and device tools act only on the workspace's own local simulator or emulator.`, localRemedy);
170
172
  const records = deviceSlotPlatforms(project, slot);
171
173
  const launch = d.readLaunch(root, platform, slot);
172
174
  if (platform === "ios") {
@@ -199,7 +201,6 @@ async function resolveToolTarget(platform, slot, root, d) {
199
201
  function noOwnedDevice(platform, slot, runCommand) {
200
202
  return failure(TARGET, `This workspace has no owned ${platform} ${platform === "ios" ? "simulator" : "emulator"}${slot === "default" ? "" : ` in slot ${slot}`}. Device tools do not act on physical devices or devices Stim does not own.`, `Run \`${runCommand}\` to create and boot one.`);
201
203
  }
202
- /** Reads each permission's grant state out of `dumpsys package <id>`; a permission the dump does not list is omitted. */
203
204
  function parsePackagePermissions(dump, names) {
204
205
  const states = [];
205
206
  for (const name of names) {
@@ -1,12 +1,12 @@
1
1
  import { D as ownership_claim_exports, t as getExecutor } from "./exec-L37dbiIb.mjs";
2
- import { l as phaseLine } from "./command-output-ByEmIwur.mjs";
2
+ import { l as phaseLine } from "./command-output-DsjhOzJ3.mjs";
3
3
  import { A as withConfigLockAsync, N as acquireAvdClaim, T as setDevice, a as clearDevice, gt as projectDeviceSlots, i as clearAndroidBootPending, k as withConfigLock, pt as deviceSlotPlatforms, t as allConsolePortsAndSerials, v as loadConfig, x as releaseAndroidConsolePort } from "./config-CNmN-ndb.mjs";
4
- import { l as androidDataPartitionSizeGbSetting, o as androidAvdConfigSetting } from "./settings-Ag4pbs0z.mjs";
5
- import { A as getAvdNameForSerialAsync, G as ownedAvdName, H as ownedAvdDeviceProfile, J as ownedAvdSystemImage, P as listAdbDevicesAsync, Q as pickDefaultSystemImage, R as listAvdsAsync, S as createOwnedAvd, V as nextConsolePort, W as ownedAvdMatchesConfiguration, _ as avdPoolConfiguration, b as bootAndroidEmulator, bt as parkedMaxSetting, ht as adoptParked, it as resolveOwnedAvdSerialAsync, n as OWNED_AVD_CONFIG_DEFAULTS, p as assertOwnedAvdStoppedAsync, t as DEFAULT_AVD_DEVICE_PROFILE, ut as waitForBoot, vt as isLegacyDeletionClaim, xt as readParked, z as listInstalledSystemImages } from "./android-CGctfYpv.mjs";
6
- import { c as pidExists } from "./metro-TIQ1Wft-.mjs";
7
- import { _ as withDeviceBootAdmission, n as DeviceAdmissionRefusal, s as countLiveOwnedDevicesFrom } from "./device-capacity-DWUOvY13.mjs";
8
- import { gt as teardownParkedAvd, pt as teardownOwnedAvd } from "./workspaces-DCzDzydB.mjs";
9
- import { B as reportMemoryCulprits, L as memoryCulpritsUnderAsync, R as readHostMemoryPressure, V as memoryCulpritAdvice, f as listAllIosSimsAsync } from "./ios-BveW7qK1.mjs";
4
+ import { l as androidDataPartitionSizeGbSetting, o as androidAvdConfigSetting } from "./settings-Cz8kQJzr.mjs";
5
+ import { A as getAvdNameForSerialAsync, G as ownedAvdName, H as ownedAvdDeviceProfile, J as ownedAvdSystemImage, P as listAdbDevicesAsync, Q as pickDefaultSystemImage, R as listAvdsAsync, S as createOwnedAvd, V as nextConsolePort, W as ownedAvdMatchesConfiguration, _ as avdPoolConfiguration, b as bootAndroidEmulator, bt as parkedMaxSetting, ht as adoptParked, it as resolveOwnedAvdSerialAsync, n as OWNED_AVD_CONFIG_DEFAULTS, p as assertOwnedAvdStoppedAsync, t as DEFAULT_AVD_DEVICE_PROFILE, ut as waitForBoot, vt as isLegacyDeletionClaim, xt as readParked, z as listInstalledSystemImages } from "./android-27_JgJ1T.mjs";
6
+ import { c as pidExists } from "./metro-Cj6W4qOO.mjs";
7
+ import { _ as withDeviceBootAdmission, n as DeviceAdmissionRefusal, s as countLiveOwnedDevicesFrom } from "./device-capacity-D_IlxZRL.mjs";
8
+ import { _t as teardownParkedAvd, mt as teardownOwnedAvd } from "./workspaces-BgAYIccE.mjs";
9
+ import { B as reportMemoryCulprits, L as memoryCulpritsUnderAsync, R as readHostMemoryPressure, V as memoryCulpritAdvice, f as listAllIosSimsAsync } from "./ios-DQEzde6f.mjs";
10
10
  import { claimRemoveCommand, clearClaimChild, markClaimChildPending, processGroupAlive, releaseClaim, setClaimChild } from "@stim-cli/core/ownership-claim";
11
11
  import { randomUUID } from "node:crypto";
12
12
  import { existsSync } from "node:fs";