stim 1.35.0 → 1.36.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 (146) hide show
  1. package/dist/{acquire-artifact-0E_iw7Rf.mjs → acquire-artifact-DGTHCd0Q.mjs} +19 -3
  2. package/dist/{act-CyxFP8Vj.mjs → act-CvN9xyV6.mjs} +18 -18
  3. package/dist/{activity-BQpJpAjA.mjs → activity-BpdDvA8Q.mjs} +4 -4
  4. package/dist/{agent-device-usage-output-BoOC3ZF9.mjs → agent-device-usage-output-pbhaW7_k.mjs} +4 -4
  5. package/dist/{android-B2DSKg-A.mjs → android-5wkcMFDG.mjs} +1 -1
  6. package/dist/{android-CjcJE7uA.mjs → android-B0qTdwnt.mjs} +5 -5
  7. package/dist/{android-Iq0M2t2d.mjs → android-SJx1V3R3.mjs} +5 -5
  8. package/dist/{android-cas-Dhcjkys1.mjs → android-cas-BS9_55U5.mjs} +4 -4
  9. package/dist/{android-YRb1UzSy.mjs → android-e9WP10cE.mjs} +47 -39
  10. package/dist/{android-image-DFk26aY6.mjs → android-image-BZ57YL6R.mjs} +2 -2
  11. package/dist/{android-project-DhO6el8N.d.mts → android-project-v_1nej_x.d.mts} +3 -1
  12. package/dist/api.d.mts +20 -6
  13. package/dist/api.mjs +31 -26
  14. package/dist/{apk-signed-tail-CPpA-3vu.mjs → apk-signed-tail-eZyXIrnc.mjs} +2 -2
  15. package/dist/{artifact-BG4h_WTC.mjs → artifact-C3srrGVU.mjs} +36 -14
  16. package/dist/{artifact-2NIRz6SC.mjs → artifact-ubNdxo_K.mjs} +43 -14
  17. package/dist/{auto-placement-CBdWa87P.mjs → auto-placement-CKFpFCuq.mjs} +7 -7
  18. package/dist/{browser-web-CNlRugJv.mjs → browser-web-B63vLrj6.mjs} +11 -11
  19. package/dist/{build-CNE3Wo5-.mjs → build-B_Dx9SKJ.mjs} +72 -24
  20. package/dist/{build-cache-_fkewiwH.mjs → build-cache-BW8T4oD2.mjs} +4 -4
  21. package/dist/{build-plan-BSgR9yKo.mjs → build-plan-CeIooJqn.mjs} +6 -6
  22. package/dist/{cache-manifest-8JX9S1QJ.mjs → cache-manifest-CxWkZmUr.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{cli-DK24VzHi.mjs → cli-COdXswmc.mjs} +19 -18
  25. package/dist/cli.mjs +1 -1
  26. package/dist/{client-Dy0eJJtz.mjs → client-KSWIeQLA.mjs} +4 -4
  27. package/dist/collector-run.mjs +4 -4
  28. package/dist/{command-output-CGxrQ3Bd.mjs → command-output-T3cDctRE.mjs} +1 -1
  29. package/dist/{config-BW0fAtoK.mjs → config-BA3TgoIP.mjs} +59 -10
  30. package/dist/{dependencies-IVl2Ga2D.mjs → dependencies-LH-7k1Vr.mjs} +35 -35
  31. package/dist/{dependency-state-mL5g4H6K.mjs → dependency-state-Blfp3AkG.mjs} +1 -1
  32. package/dist/{dev-client-DDApoVvd.mjs → dev-client-MO_DjTZr.mjs} +2 -2
  33. package/dist/{device-p_cp8IzW.mjs → device-BZWt_aPJ.mjs} +11 -11
  34. package/dist/{device-mOFYiHiw.mjs → device-DNTWFFB1.mjs} +12 -12
  35. package/dist/{device-android-C-biM49_.mjs → device-android-BB9Lugr8.mjs} +8 -8
  36. package/dist/{device-capacity-C0PiTyRb.mjs → device-capacity-CpAVcKgq.mjs} +15 -15
  37. package/dist/device-host-worker.mjs +13 -13
  38. package/dist/{device-pool-nsMvt2X2.mjs → device-pool-BJToGG-q.mjs} +3 -3
  39. package/dist/{device-provision-BYYJuRKZ.mjs → device-provision-CxQDCtrc.mjs} +9 -9
  40. package/dist/{doctor-BBAb8NLe.mjs → doctor-C-46SkBe.mjs} +1 -1
  41. package/dist/{doctor-RosbBfTV.mjs → doctor-CYZ45LnX.mjs} +20 -20
  42. package/dist/{doctor-BptE4PaK.mjs → doctor-DV639Iw_.mjs} +15 -15
  43. package/dist/doctor-fingerprint.mjs +1 -1
  44. package/dist/{doctor-watchman-CKOnCINh.mjs → doctor-watchman-TZxYt_98.mjs} +4 -4
  45. package/dist/{eas-build-BxJdzQnF.mjs → eas-build-Xf5Jd6LR.mjs} +2 -2
  46. package/dist/{eas-fallback-DU2WDF8r.mjs → eas-fallback-DNYPNinw.mjs} +4 -4
  47. package/dist/{eas-session-ledger-DCUfh6m7.mjs → eas-session-ledger-CXZ4aix0.mjs} +5 -5
  48. package/dist/{error-diagnostics-D6wlK-yX.mjs → error-diagnostics-CvB5bpPU.mjs} +8 -8
  49. package/dist/{gc-CvMEytXz.mjs → gc-8Qm_K1iy.mjs} +2 -2
  50. package/dist/{gc-BUkonUfz.mjs → gc-DiUhrVFo.mjs} +17 -17
  51. package/dist/{guide-BWozWG7D.mjs → guide-CuvHRP53.mjs} +113 -56
  52. package/dist/{hosted-android-y6K3DKQT.mjs → hosted-android-D__HGVIO.mjs} +3 -3
  53. package/dist/{hosted-client-Bb89P6an.mjs → hosted-client-DMOOu8vD.mjs} +6 -6
  54. package/dist/{hosted-logs-DYPsnWMF.mjs → hosted-logs-CClIktQM.mjs} +6 -6
  55. package/dist/{hosted-logs-sync-DfUJ2GpF.mjs → hosted-logs-sync-B7XCeqVm.mjs} +5 -5
  56. package/dist/{hosted-macos-DsEzYVY_.mjs → hosted-macos-D4sDJIbB.mjs} +5 -5
  57. package/dist/{hosted-native-C9xQYYFb.mjs → hosted-native-BiiUG_Q6.mjs} +7 -7
  58. package/dist/{ios-BCKxjpRp.mjs → ios-BZuhvLGr.mjs} +8 -8
  59. package/dist/{ios-BdZdNsAj.mjs → ios-BhfpRfNf.mjs} +4 -4
  60. package/dist/{ios-FhMkDfNC.mjs → ios-BhpUWyN7.mjs} +39 -30
  61. package/dist/{ios-device-DMOnaH5n.mjs → ios-device-vhYL1N--.mjs} +1 -1
  62. package/dist/{ios-project-PXBDoaii.mjs → ios-project-Cz0S1Sz-.mjs} +7 -7
  63. package/dist/{ios-signing-CCFNjjWU.mjs → ios-signing-BcH88ecn.mjs} +1 -1
  64. package/dist/{ios-state-CWsBysyN.mjs → ios-state-Avwz2cbZ.mjs} +1 -1
  65. package/dist/{js-swap-07ikLRJJ.mjs → js-swap-Desu2iII.mjs} +4 -4
  66. package/dist/{launch-CTq5gBim.mjs → launch-6ckG9UrC.mjs} +19 -19
  67. package/dist/{lightened-DikgC3-S.mjs → lightened-B6TnpHMX.mjs} +4 -4
  68. package/dist/{logs-DwI3Rkpf.mjs → logs-B-DMy1K0.mjs} +7 -7
  69. package/dist/{logs-YDMfEohb.mjs → logs-CO0CJRiC.mjs} +5 -5
  70. package/dist/{macos-BoNM-l6f.mjs → macos-B1aCXhem.mjs} +19 -19
  71. package/dist/{macos-C_e9f5-5.mjs → macos-CduEmWAK.mjs} +1 -1
  72. package/dist/macos-run.mjs +1 -1
  73. package/dist/maintenance-run.mjs +5 -5
  74. package/dist/{metro-B5PVz0Wv.mjs → metro-DM3yJL1M.mjs} +2 -2
  75. package/dist/{metro-request-2LmFpC1z.mjs → metro-request-O8Q-JvBg.mjs} +1 -1
  76. package/dist/{named-ports-CA0nB9Yw.mjs → named-ports-BvB_CO9B.mjs} +2 -2
  77. package/dist/{native-android-Mv4YTrVN.mjs → native-android-28NOG2-y.mjs} +17 -17
  78. package/dist/{native-gradle-artifact-inputs-C_TU6wPq.mjs → native-gradle-artifact-inputs-DxVEtS6_.mjs} +3 -3
  79. package/dist/{native-runtime-oDqT4UES.mjs → native-runtime-C3_NkUlW.mjs} +6 -6
  80. package/dist/{native-xcode-inputs-DsozghTX.mjs → native-xcode-inputs-BWFTw5cJ.mjs} +2 -2
  81. package/dist/{native-xcode-ios-UXnH9NRY.mjs → native-xcode-ios-B4Qoc7-U.mjs} +16 -16
  82. package/dist/offload-worker.d.mts +1 -1
  83. package/dist/offload-worker.mjs +19 -19
  84. package/dist/{ownership-hC7xvvxF.mjs → ownership-C3y8wLSl.mjs} +2 -2
  85. package/dist/{phone-reverses-B9WyCBKQ.mjs → phone-reverses-BhSxbqom.mjs} +4 -4
  86. package/dist/{placement-log-D0DZLcJk.mjs → placement-log-B8RCSzOm.mjs} +1 -1
  87. package/dist/{plan-placement-DqmLrWoX.mjs → plan-placement-BI4r55aP.mjs} +6 -6
  88. package/dist/{ports-C1_1Qgdy.mjs → ports-DhOSyWm9.mjs} +3 -3
  89. package/dist/{prebuild-BptrXmh_.mjs → prebuild-Di2IhUue.mjs} +9 -9
  90. package/dist/{project-Dqqj3IkW.mjs → project-Clk1JAWL.mjs} +15 -15
  91. package/dist/{react-native-android-Bsm_o4A8.mjs → react-native-android-bdHBMrnf.mjs} +23 -23
  92. package/dist/{react-native-build-BTUcE926.mjs → react-native-build-CJega_NM.mjs} +7 -7
  93. package/dist/{react-native-doctor-CfsCTKZt.mjs → react-native-doctor-CY7BGITE.mjs} +5 -5
  94. package/dist/{react-native-ios-_cK2pjZn.mjs → react-native-ios-Bo5EDVel.mjs} +14 -14
  95. package/dist/recorded-build-BuGL_fnm.mjs +58 -0
  96. package/dist/{recordings-AKZfsW2W.mjs → recordings-6i2-x8LU.mjs} +1 -1
  97. package/dist/{reload-DsTMtMDU.mjs → reload-A_axEbeS.mjs} +14 -14
  98. package/dist/{reload-CXgce4Yo.mjs → reload-BvDuvygc.mjs} +1 -1
  99. package/dist/remote-PD6CM0xp.mjs +158 -0
  100. package/dist/{remote-BsmYHUxH.mjs → remote-WK_swZEw.mjs} +8 -8
  101. package/dist/{result-DK6nTO-M.mjs → result-BkDpN5Mz.mjs} +23 -17
  102. package/dist/{run-N-BbRxnC.mjs → run-CTFi4Nq2.mjs} +1 -1
  103. package/dist/{server-bare-BTlICuaX.mjs → server-bare-W0aPsRZE.mjs} +1 -1
  104. package/dist/{server-command-Cu2w-UjB.mjs → server-command-S00-ddjK.mjs} +4 -4
  105. package/dist/server-expo-BWJDa7Qb.mjs +2 -0
  106. package/dist/{server-expo-CjQwxvIi.mjs → server-expo-cc-cmfsl.mjs} +2 -2
  107. package/dist/{settings-B5IBDfTx.mjs → settings-Bap-qjnp.mjs} +1 -1
  108. package/dist/{settings-DcmVICCn.mjs → settings-C_Xu4RNZ.mjs} +2 -2
  109. package/dist/{settings-payload-BoiFMiFq.mjs → settings-payload-D5jjhmrw.mjs} +4 -4
  110. package/dist/{settings-write-B3LzEVwf.mjs → settings-write-C5huI-iS.mjs} +5 -5
  111. package/dist/settings.schema.json +1 -1
  112. package/dist/{simslim-DKdJx0LL.mjs → simslim-DlBvwgeF.mjs} +1 -1
  113. package/dist/{slot-launch-DsQmPdlg.mjs → slot-launch-qEQVTth7.mjs} +6 -6
  114. package/dist/{stage-Dqk0qvaI.mjs → stage-CxVI_MlP.mjs} +1 -1
  115. package/dist/{start-GkRBR1e3.mjs → start-CVzivp35.mjs} +1 -1
  116. package/dist/{start-DIFiT2P5.mjs → start-YpT_JpQQ.mjs} +10 -10
  117. package/dist/{state-DSOUqO-o.mjs → state-B4B5P4LU.mjs} +1 -1
  118. package/dist/{state-CtmYTRWm.mjs → state-B9VFI6r0.mjs} +2 -2
  119. package/dist/{stats-Dz08IopP.mjs → stats-COoePEri.mjs} +4 -4
  120. package/dist/{status-DhKv_e8a.mjs → status-CIg0k7Qb.mjs} +21 -21
  121. package/dist/{status-Dost__Vn.mjs → status-CIvU5-TF.mjs} +1 -1
  122. package/dist/{status-DTFhDnd1.mjs → status-CQWmNl1f.mjs} +1 -1
  123. package/dist/{status-watch-UecLnPQD.mjs → status-watch--rfZynD_.mjs} +4 -4
  124. package/dist/status-worker.mjs +1 -1
  125. package/dist/{stim-desktop-_WTria-r.mjs → stim-desktop-D0P_bzmd.mjs} +1 -1
  126. package/dist/{stop-CcZISot5.mjs → stop-BEBBruvD.mjs} +4 -4
  127. package/dist/{stop-QFOqgICJ.mjs → stop-BiI4_VFG.mjs} +2 -2
  128. package/dist/{stop-vRe6TQk5.mjs → stop-C3d5qG7C.mjs} +15 -15
  129. package/dist/supervisor-run.mjs +12 -12
  130. package/dist/{support-DW575Dnx.mjs → support-BJbXovoO.mjs} +73 -34
  131. package/dist/{support-CNqJDBrH.mjs → support-Vckdzrmk.mjs} +5 -5
  132. package/dist/{swiftpm-artifact-inputs-DQTJTczX.mjs → swiftpm-artifact-inputs-DbuF-Yrr.mjs} +1 -1
  133. package/dist/{swiftpm-macos-BKczZ0k9.mjs → swiftpm-macos-Bu8xeBfM.mjs} +8 -8
  134. package/dist/{toolchain-BDlugtoh.mjs → toolchain-CIRdNl-c.mjs} +1 -1
  135. package/dist/{toolchain-DRQyCvlp.mjs → toolchain-DCnWAxQL.mjs} +71 -7
  136. package/dist/{warm-progress-q11Vdvhh.mjs → warm-progress-DwsGBpph.mjs} +3 -3
  137. package/dist/{web-TDWjHUT3.mjs → web-D2En0Wa5.mjs} +8 -8
  138. package/dist/web-Dpj70t4p.mjs +2 -0
  139. package/dist/web-run.mjs +4 -4
  140. package/dist/{workspace-state-BdZ-QgmB.mjs → workspace-state-BhwAJBgA.mjs} +2 -2
  141. package/dist/{workspaces-CY3KSdC0.mjs → workspaces-Dh5N70qW.mjs} +11 -11
  142. package/dist/{worktree-D6myrQ2H.mjs → worktree-DLm4s2Ib.mjs} +1 -1
  143. package/dist/{worktree-fKKe8j5M.mjs → worktree-Yw3EW77B.mjs} +24 -24
  144. package/package.json +7 -7
  145. package/dist/server-expo-DbSypdNl.mjs +0 -2
  146. package/dist/web-D1m1LKEz.mjs +0 -2
@@ -1,7 +1,7 @@
1
- import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-BdZ-QgmB.mjs";
2
- import { dt as deviceSlotKey, pt as parseDeviceSlotKey } from "./config-BW0fAtoK.mjs";
3
- import { tt as removeMetroReverses } from "./android-Iq0M2t2d.mjs";
4
- import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-C9xQYYFb.mjs";
1
+ import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-BhwAJBgA.mjs";
2
+ import { ft as deviceSlotKey, mt as parseDeviceSlotKey } from "./config-BA3TgoIP.mjs";
3
+ import { tt as removeMetroReverses } from "./android-SJx1V3R3.mjs";
4
+ import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-BiiUG_Q6.mjs";
5
5
  import { isJsonObject } from "@stim-cli/core/state";
6
6
  //#region src/device-host/hosted-ios.ts
7
7
  async function prepareHostedIos(machine, selectors, recorded, mode) {
@@ -1,4 +1,4 @@
1
- import { k as buildPlacementSettings } from "./support-DW575Dnx.mjs";
1
+ import { k as buildPlacementSettings } from "./support-BJbXovoO.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,9 +1,9 @@
1
- import { v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
2
- import { Un as processContext } from "./device-capacity-C0PiTyRb.mjs";
3
- import { nt as hostingMachines } from "./support-DW575Dnx.mjs";
4
- import { r as readHostedNative } from "./ios-state-CWsBysyN.mjs";
5
- import { n as buildPreferenceRefusal } from "./settings-payload-BoiFMiFq.mjs";
6
- import { r as probeHost, t as automaticDevicePlacement } from "./auto-placement-CBdWa87P.mjs";
1
+ import { v as loadConfig$1 } from "./config-BA3TgoIP.mjs";
2
+ import { Un as processContext } from "./device-capacity-CpAVcKgq.mjs";
3
+ import { it as hostingMachines } from "./support-BJbXovoO.mjs";
4
+ import { r as readHostedNative } from "./ios-state-Avwz2cbZ.mjs";
5
+ import { n as buildPreferenceRefusal } from "./settings-payload-D5jjhmrw.mjs";
6
+ import { r as probeHost, t as automaticDevicePlacement } from "./auto-placement-CKFpFCuq.mjs";
7
7
  import { automaticMachineEnabled } from "@stim-cli/core/state";
8
8
  //#region src/device-host/plan-placement.ts
9
9
  const DOCTOR_REMEDY = "Run `stim doctor` to check the hosts and settings placement uses.";
@@ -1,6 +1,6 @@
1
- import { m as getProject } from "./config-BW0fAtoK.mjs";
2
- import { n as findCommandWorkspace } from "./project-Dqqj3IkW.mjs";
3
- import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-CA0nB9Yw.mjs";
1
+ import { m as getProject } from "./config-BA3TgoIP.mjs";
2
+ import { n as findCommandWorkspace } from "./project-Clk1JAWL.mjs";
3
+ import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-BvB_CO9B.mjs";
4
4
  //#region src/commands/ports.ts
5
5
  async function inProject(action) {
6
6
  try {
@@ -1,15 +1,15 @@
1
1
  import { E as debugLog, b as spawnDeclared, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { M as withDirLock$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-BdZ-QgmB.mjs";
2
+ import { M as withDirLock$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-BhwAJBgA.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { m as shortHash } from "./command-output-CGxrQ3Bd.mjs";
4
+ import { m as shortHash } from "./command-output-T3cDctRE.mjs";
5
5
  import { o as git, s as gitAsync } from "./operation-exec-DKlBcKAL.mjs";
6
- import { Ct as gitCommonDirOnDisk } from "./settings-B5IBDfTx.mjs";
7
- import { v as detectIsExpo } from "./project-Dqqj3IkW.mjs";
8
- import { ar as remoteCliInvocation } from "./device-capacity-C0PiTyRb.mjs";
9
- import { r as register } from "./cache-manifest-8JX9S1QJ.mjs";
10
- import { nt as STIM_VERSION } from "./workspaces-CY3KSdC0.mjs";
11
- import { b as packageIn, d as expoEnvFiles, g as fingerprintProject, h as fingerprintOptions, k as storedSources, s as diffFingerprintSources } from "./build-cache-_fkewiwH.mjs";
12
- import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-CjQwxvIi.mjs";
6
+ import { Ct as gitCommonDirOnDisk } from "./settings-Bap-qjnp.mjs";
7
+ import { v as detectIsExpo } from "./project-Clk1JAWL.mjs";
8
+ import { ar as remoteCliInvocation } from "./device-capacity-CpAVcKgq.mjs";
9
+ import { r as register } from "./cache-manifest-CxWkZmUr.mjs";
10
+ import { nt as STIM_VERSION } from "./workspaces-Dh5N70qW.mjs";
11
+ import { b as packageIn, d as expoEnvFiles, g as fingerprintProject, h as fingerprintOptions, k as storedSources, s as diffFingerprintSources } from "./build-cache-BW8T4oD2.mjs";
12
+ import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-cc-cmfsl.mjs";
13
13
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-DqWvIhMb.mjs";
14
14
  import { createRequire } from "node:module";
15
15
  import { createHash } from "node:crypto";
@@ -1,7 +1,7 @@
1
1
  import { T as process_identity_exports } from "./exec-CGuDzt40.mjs";
2
- import { C as supervisorPidFile, c as withWorkspaceStateLock, j as workspaceStateFile$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { _ as isPathPrefix$1, dt as deviceSlotKey, l as findEnclosingWorktreeRoot, m as getProject, pt as parseDeviceSlotKey, v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
4
- import { Bt as repoRoot, Y as resolveIosProjectDir, ct as webSettings, it as settingValueAt, q as resolveAndroidLayout } from "./settings-B5IBDfTx.mjs";
2
+ import { C as supervisorPidFile, c as withWorkspaceStateLock, j as workspaceStateFile$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { _ as isPathPrefix$1, ft as deviceSlotKey, l as findEnclosingWorktreeRoot, m as getProject, mt as parseDeviceSlotKey, v as loadConfig$1 } from "./config-BA3TgoIP.mjs";
4
+ import { Bt as repoRoot, Y as resolveIosProjectDir, ct as webSettings, it as settingValueAt, q as resolveAndroidLayout } from "./settings-Bap-qjnp.mjs";
5
5
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
6
6
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
7
7
  import { projectRootDirectories } from "@stim-cli/core/state";
@@ -311,8 +311,8 @@ const nativeAndroidIntegration = {
311
311
  application: true,
312
312
  platforms: () => ["android"],
313
313
  validate: (operation) => operation === "android" ? null : void 0,
314
- android: async () => (await import("./native-android-Mv4YTrVN.mjs")).nativeAndroidProject(root),
315
- doctor: async () => (await import("./native-android-Mv4YTrVN.mjs")).nativeAndroidDoctor(root)
314
+ android: async () => (await import("./native-android-28NOG2-y.mjs")).nativeAndroidProject(root),
315
+ doctor: async () => (await import("./native-android-28NOG2-y.mjs")).nativeAndroidDoctor(root)
316
316
  };
317
317
  }
318
318
  };
@@ -740,8 +740,8 @@ const nativeXcodeProjectIntegration = {
740
740
  application: problem === null,
741
741
  platforms: () => problem ? [] : ["ios"],
742
742
  validate: (operation) => operation === "ios" ? problem : void 0,
743
- ios: async () => (await import("./native-xcode-ios-UXnH9NRY.mjs")).nativeXcodeIosProject(root),
744
- doctor: async () => (await import("./native-xcode-ios-UXnH9NRY.mjs")).nativeXcodeDoctor(root)
743
+ ios: async () => (await import("./native-xcode-ios-B4Qoc7-U.mjs")).nativeXcodeIosProject(root),
744
+ doctor: async () => (await import("./native-xcode-ios-B4Qoc7-U.mjs")).nativeXcodeDoctor(root)
745
745
  };
746
746
  }
747
747
  };
@@ -946,7 +946,7 @@ function createProjectRegistry(integrations) {
946
946
  //#region src/integrations/projects.ts
947
947
  const expo = {
948
948
  mode: MODE_EXPO,
949
- loadDevServer: async () => (await import("./server-expo-DbSypdNl.mjs")).startExpoServer,
949
+ loadDevServer: async () => (await import("./server-expo-BWJDa7Qb.mjs")).startExpoServer,
950
950
  platforms(root) {
951
951
  const appJson = readAppJson(root);
952
952
  const config = appJson?.expo ?? appJson;
@@ -966,7 +966,7 @@ const expo = {
966
966
  };
967
967
  const reactNative = {
968
968
  mode: MODE_BARE,
969
- loadDevServer: async () => (await import("./server-bare-BTlICuaX.mjs")).startBareServer,
969
+ loadDevServer: async () => (await import("./server-bare-W0aPsRZE.mjs")).startBareServer,
970
970
  platforms(root, { context, settings }) {
971
971
  if (!declaresAppDependency(readPackageJson(root))) return [];
972
972
  const platforms = [];
@@ -996,9 +996,9 @@ const projectRegistry = createProjectRegistry([
996
996
  ownedRoots: problem === null ? [join(root, "ios"), join(root, "android")] : [],
997
997
  platforms: (resolved) => nativeProjectIntegration(root).platforms(root, resolved),
998
998
  validate: (operation) => operation === "ios" || operation === "android" || operation === "dev-server" ? problem : void 0,
999
- ios: async (settings) => (await import("./react-native-ios-_cK2pjZn.mjs")).reactNativeIosProject(root, settings),
1000
- android: async (resolved) => (await import("./react-native-android-Bsm_o4A8.mjs")).reactNativeAndroidProject(root, resolved),
1001
- doctor: async () => (await import("./react-native-doctor-CfsCTKZt.mjs")).reactNativeProjectDoctor(root)
999
+ ios: async (settings) => (await import("./react-native-ios-Bo5EDVel.mjs")).reactNativeIosProject(root, settings),
1000
+ android: async (resolved) => (await import("./react-native-android-bdHBMrnf.mjs")).reactNativeAndroidProject(root, resolved),
1001
+ doctor: async () => (await import("./react-native-doctor-CY7BGITE.mjs")).reactNativeProjectDoctor(root)
1002
1002
  };
1003
1003
  }
1004
1004
  },
@@ -1012,9 +1012,9 @@ const projectRegistry = createProjectRegistry([
1012
1012
  application: true,
1013
1013
  platforms: ({ settings }) => settingValueAt(settings, "macos.product") && settingValueAt(settings, "macos.infoPlist") ? ["macos"] : [],
1014
1014
  validate: (operation) => operation === "macos" ? null : void 0,
1015
- macos: async () => (await import("./swiftpm-macos-BKczZ0k9.mjs")).swiftpmMacosProject(root),
1015
+ macos: async () => (await import("./swiftpm-macos-Bu8xeBfM.mjs")).swiftpmMacosProject(root),
1016
1016
  doctor: async () => {
1017
- const { macosToolchain, macosToolchainAsync } = await import("./toolchain-BDlugtoh.mjs");
1017
+ const { macosToolchain, macosToolchainAsync } = await import("./toolchain-CIRdNl-c.mjs");
1018
1018
  return {
1019
1019
  inspect: () => [],
1020
1020
  offloadTargets: ({ options: { host = process.platform, platform, operation } }) => host === "darwin" && platform === void 0 ? async () => [{
@@ -1034,7 +1034,7 @@ const projectRegistry = createProjectRegistry([
1034
1034
  application: false,
1035
1035
  platforms: ({ settings }) => webSettings(settings).url !== null ? ["web"] : [],
1036
1036
  validate: (operation) => operation === "web" ? null : void 0,
1037
- web: async () => (await import("./browser-web-CNlRugJv.mjs")).browserWebProject(root)
1037
+ web: async () => (await import("./browser-web-B63vLrj6.mjs")).browserWebProject(root)
1038
1038
  };
1039
1039
  }
1040
1040
  },
@@ -1,31 +1,31 @@
1
1
  import { C as operationState, b as spawnDeclared, d as throwIfCancelled, r as reportSignal, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { r as readWorkspaceState } from "./workspace-state-BdZ-QgmB.mjs";
2
+ import { r as readWorkspaceState } from "./workspace-state-BhwAJBgA.mjs";
3
3
  import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-CGxrQ3Bd.mjs";
5
- import { _t as validateDeviceSlot, ft as deviceSlotPlatforms, m as getProject } from "./config-BW0fAtoK.mjs";
4
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-T3cDctRE.mjs";
5
+ import { m as getProject, pt as deviceSlotPlatforms, vt as validateDeviceSlot } from "./config-BA3TgoIP.mjs";
6
6
  import { a as killOnAbort, t as runOperationFile } from "./operation-exec-DKlBcKAL.mjs";
7
- import { B as publicUrlSetting, H as realpathInside, W as remoteEasFallbackSetting, an as makeTemporaryDirectory, at as settingsLayers, m as defaultAndroidLayout, nt as settingOriginScope, on as removeTemporaryEntry, ot as tunnelModeSetting, q as resolveAndroidLayout } from "./settings-B5IBDfTx.mjs";
8
- import { v as detectIsExpo } from "./project-Dqqj3IkW.mjs";
9
- import { J as ownedAvdSystemImage, O as findBuildTool, R as listAvdsAsync, U as ownedAvdDirectory, l as androidSystemImageAbi, r as androidBuildToolName, z as listInstalledSystemImages } from "./android-Iq0M2t2d.mjs";
10
- import { Jn as checkEasAuth, O as resolveCcache, Un as processContext, Zn as loadProjectProvider, ir as bundleInvocation, nr as resolveRemote } from "./device-capacity-C0PiTyRb.mjs";
11
- import { lt as statsProjectKey } from "./workspaces-CY3KSdC0.mjs";
12
- import { K as tailLines, M as HEARTBEAT_INTERVAL_MS, W as startBuildHeartbeat, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DRQyCvlp.mjs";
13
- import { E as storeBuild, F as compareAssetManifests, I as readAssetManifest, M as untrackedNativeFiles, N as assetDiffReason, O as storedAssetManifest, P as captureAssetManifest, T as resolveBuild, _ as gitignoredFingerprintInputs, g as fingerprintProject, j as untrackedMissLine, m as fingerprintDiffRecord, n as buildCacheKey, o as configInputsChanged, p as filesystemBuildCapability, r as changedDuringBuildLine, w as refingerprintAfterMutation, y as inputsChangedDuringBuild } from "./build-cache-_fkewiwH.mjs";
14
- import { s as expoTelemetryEnv, t as cleanLine } from "./server-expo-CjQwxvIi.mjs";
15
- import { c as readProductFlavors, h as androidPathRoomRefusal, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-BTUcE926.mjs";
16
- import { h as detectAppIds, m as detectAndroidPackage } from "./start-DIFiT2P5.mjs";
7
+ import { B as publicUrlSetting, H as realpathInside, W as remoteEasFallbackSetting, an as makeTemporaryDirectory, at as settingsLayers, m as defaultAndroidLayout, nt as settingOriginScope, on as removeTemporaryEntry, ot as tunnelModeSetting, q as resolveAndroidLayout } from "./settings-Bap-qjnp.mjs";
8
+ import { v as detectIsExpo } from "./project-Clk1JAWL.mjs";
9
+ import { J as ownedAvdSystemImage, O as findBuildTool, R as listAvdsAsync, U as ownedAvdDirectory, l as androidSystemImageAbi, r as androidBuildToolName, z as listInstalledSystemImages } from "./android-SJx1V3R3.mjs";
10
+ import { Jn as checkEasAuth, O as resolveCcache, Un as processContext, Zn as loadProjectProvider, ir as bundleInvocation, nr as resolveRemote } from "./device-capacity-CpAVcKgq.mjs";
11
+ import { lt as statsProjectKey } from "./workspaces-Dh5N70qW.mjs";
12
+ import { K as tailLines, M as HEARTBEAT_INTERVAL_MS, W as startBuildHeartbeat, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DCnWAxQL.mjs";
13
+ import { E as storeBuild, F as compareAssetManifests, I as readAssetManifest, M as untrackedNativeFiles, N as assetDiffReason, O as storedAssetManifest, P as captureAssetManifest, T as resolveBuild, _ as gitignoredFingerprintInputs, g as fingerprintProject, j as untrackedMissLine, m as fingerprintDiffRecord, n as buildCacheKey, o as configInputsChanged, p as filesystemBuildCapability, r as changedDuringBuildLine, w as refingerprintAfterMutation, y as inputsChangedDuringBuild } from "./build-cache-BW8T4oD2.mjs";
14
+ import { s as expoTelemetryEnv, t as cleanLine } from "./server-expo-cc-cmfsl.mjs";
15
+ import { c as readProductFlavors, h as androidPathRoomRefusal, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-CJega_NM.mjs";
16
+ import { h as detectAppIds, m as detectAndroidPackage } from "./start-YpT_JpQQ.mjs";
17
17
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-DqWvIhMb.mjs";
18
- import { n as decideSystemImage, t as androidImageInstallPolicy } from "./android-image-DFk26aY6.mjs";
19
- import { i as planEasDevelopmentBuild } from "./eas-build-BxJdzQnF.mjs";
20
- import { a as runPrebuild, c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, n as planPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss, t as planPrebuild } from "./prebuild-BptrXmh_.mjs";
21
- import { a as PLATFORM, c as androidGradleProject, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, l as androidJobLayout, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE } from "./support-CNqJDBrH.mjs";
18
+ import { n as decideSystemImage, t as androidImageInstallPolicy } from "./android-image-BZ57YL6R.mjs";
19
+ import { i as planEasDevelopmentBuild } from "./eas-build-Xf5Jd6LR.mjs";
20
+ import { a as runPrebuild, c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, n as planPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss, t as planPrebuild } from "./prebuild-Di2IhUue.mjs";
21
+ import { a as PLATFORM, c as androidGradleProject, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, l as androidJobLayout, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE } from "./support-Vckdzrmk.mjs";
22
22
  import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
23
- import { u as resolveAndroidRunPlan } from "./result-DK6nTO-M.mjs";
24
- import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-CTq5gBim.mjs";
25
- import { t as checkEasFallback } from "./eas-fallback-DU2WDF8r.mjs";
26
- import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-BSgR9yKo.mjs";
27
- import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-07ikLRJJ.mjs";
28
- import { t as planHostedDevice } from "./plan-placement-DqmLrWoX.mjs";
23
+ import { u as resolveAndroidRunPlan } from "./result-BkDpN5Mz.mjs";
24
+ import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-6ckG9UrC.mjs";
25
+ import { t as checkEasFallback } from "./eas-fallback-DNYPNinw.mjs";
26
+ import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-CeIooJqn.mjs";
27
+ import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-Desu2iII.mjs";
28
+ import { t as planHostedDevice } from "./plan-placement-BI4r55aP.mjs";
29
29
  import { constants, existsSync, mkdirSync, readFileSync, renameSync } from "node:fs";
30
30
  import { basename, dirname, isAbsolute, join, relative } from "node:path";
31
31
  import chalk from "chalk";
@@ -1,13 +1,13 @@
1
1
  import { b as spawnDeclared, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { x as sharedCompilationCache } from "./workspace-state-BdZ-QgmB.mjs";
2
+ import { x as sharedCompilationCache } from "./workspace-state-BhwAJBgA.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
4
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
5
5
  import { a as killOnAbort } from "./operation-exec-DKlBcKAL.mjs";
6
- import { C as resolvePackageJson } from "./project-Dqqj3IkW.mjs";
7
- import { o as androidHome } from "./android-Iq0M2t2d.mjs";
8
- import { C as CCACHE_UNAVAILABLE, D as readCcacheActivity } from "./device-capacity-C0PiTyRb.mjs";
9
- import { r as register } from "./cache-manifest-8JX9S1QJ.mjs";
10
- import { B as pickXcodeProject, G as swiftPrefixMappingSupported, I as compilationCacheSettings, M as HEARTBEAT_INTERVAL_MS, N as SWIFT_PREFIX_MAPPING_MIN_SWIFT, P as buildXcode, R as parseSwiftVersion, W as startBuildHeartbeat, z as parseXcodeMajor } from "./toolchain-DRQyCvlp.mjs";
6
+ import { C as resolvePackageJson } from "./project-Clk1JAWL.mjs";
7
+ import { o as androidHome } from "./android-SJx1V3R3.mjs";
8
+ import { C as CCACHE_UNAVAILABLE, D as readCcacheActivity } from "./device-capacity-CpAVcKgq.mjs";
9
+ import { r as register } from "./cache-manifest-CxWkZmUr.mjs";
10
+ import { B as pickXcodeProject, G as swiftPrefixMappingSupported, I as compilationCacheSettings, M as HEARTBEAT_INTERVAL_MS, N as SWIFT_PREFIX_MAPPING_MIN_SWIFT, P as buildXcode, R as parseSwiftVersion, W as startBuildHeartbeat, z as parseXcodeMajor } from "./toolchain-DCnWAxQL.mjs";
11
11
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
12
12
  import { createHash } from "node:crypto";
13
13
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync } from "node:fs";
@@ -1,9 +1,9 @@
1
1
  import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
3
- import { Y as resolveIosProjectDir, q as resolveAndroidLayout } from "./settings-B5IBDfTx.mjs";
4
- import { v as detectIsExpo } from "./project-Dqqj3IkW.mjs";
5
- import { Y as bundlerPin, a as buildsOnlyOnWorker, c as iosToolchainAsync, n as androidToolchain, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DRQyCvlp.mjs";
6
- import { a as mainCheckoutProjectRoot, c as repairCxxLauncherState, i as detectLinkedLibraryGitMetadata, n as checkMainCheckout, o as reactNativeDoctorFindings, r as detectFingerprintParity } from "./doctor-RosbBfTV.mjs";
2
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
3
+ import { Y as resolveIosProjectDir, q as resolveAndroidLayout } from "./settings-Bap-qjnp.mjs";
4
+ import { v as detectIsExpo } from "./project-Clk1JAWL.mjs";
5
+ import { Y as bundlerPin, a as buildsOnlyOnWorker, c as iosToolchainAsync, n as androidToolchain, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DCnWAxQL.mjs";
6
+ import { a as mainCheckoutProjectRoot, c as repairCxxLauncherState, i as detectLinkedLibraryGitMetadata, n as checkMainCheckout, o as reactNativeDoctorFindings, r as detectFingerprintParity } from "./doctor-CYZ45LnX.mjs";
7
7
  import { existsSync, readdirSync, statSync } from "node:fs";
8
8
  import { join, relative } from "node:path";
9
9
  //#region src/diagnostics/doctor-ios-architectures.ts
@@ -1,20 +1,20 @@
1
1
  import { r as reportSignal } from "./exec-CGuDzt40.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-CGxrQ3Bd.mjs";
3
- import { B as publicUrlSetting, G as remoteIosSetting, W as remoteEasFallbackSetting, Y as resolveIosProjectDir, a as SETTING_SHAPE_REMEDY, ot as tunnelModeSetting, p as cacheProviderSettingError, rt as settingShapeErrors } from "./settings-B5IBDfTx.mjs";
4
- import { Un as processContext } from "./device-capacity-C0PiTyRb.mjs";
5
- import { lt as statsProjectKey } from "./workspaces-CY3KSdC0.mjs";
6
- import { Y as bundlerPin, _t as runCancellationSignal, a as buildsOnlyOnWorker, c as iosToolchainAsync } from "./toolchain-DRQyCvlp.mjs";
7
- import { A as trackedFingerprintPaths, _ as gitignoredFingerprintInputs, f as expoProductionEnvFiles, j as untrackedMissLine, m as fingerprintDiffRecord, n as buildCacheKey, o as configInputsChanged, p as filesystemBuildCapability, r as changedDuringBuildLine, v as ignoredFingerprintPaths, w as refingerprintAfterMutation, y as inputsChangedDuringBuild } from "./build-cache-_fkewiwH.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-T3cDctRE.mjs";
3
+ import { B as publicUrlSetting, G as remoteIosSetting, W as remoteEasFallbackSetting, Y as resolveIosProjectDir, a as SETTING_SHAPE_REMEDY, ot as tunnelModeSetting, p as cacheProviderSettingError, rt as settingShapeErrors } from "./settings-Bap-qjnp.mjs";
4
+ import { Un as processContext } from "./device-capacity-CpAVcKgq.mjs";
5
+ import { lt as statsProjectKey } from "./workspaces-Dh5N70qW.mjs";
6
+ import { Y as bundlerPin, _t as runCancellationSignal, a as buildsOnlyOnWorker, c as iosToolchainAsync } from "./toolchain-DCnWAxQL.mjs";
7
+ import { A as trackedFingerprintPaths, _ as gitignoredFingerprintInputs, f as expoProductionEnvFiles, j as untrackedMissLine, m as fingerprintDiffRecord, n as buildCacheKey, o as configInputsChanged, p as filesystemBuildCapability, r as changedDuringBuildLine, v as ignoredFingerprintPaths, w as refingerprintAfterMutation, y as inputsChangedDuringBuild } from "./build-cache-BW8T4oD2.mjs";
8
8
  import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
9
- import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-DW575Dnx.mjs";
9
+ import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-BJbXovoO.mjs";
10
10
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-DqWvIhMb.mjs";
11
- import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-BxJdzQnF.mjs";
12
- import { c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-BptrXmh_.mjs";
13
- import { r as planPayload, t as planCachedBuild } from "./build-plan-BSgR9yKo.mjs";
14
- import { t as IosRecipeRefusal } from "./ios-project-PXBDoaii.mjs";
15
- import { a as hostedIosSelectors } from "./remote-BsmYHUxH.mjs";
16
- import { a as writeIpTxt, c as iosProcessRuntime, r as copyAppAside, s as iosMetroRuntime, t as DEFAULT_DEPS } from "./dependencies-IVl2Ga2D.mjs";
17
- import { t as planHostedDevice } from "./plan-placement-DqmLrWoX.mjs";
11
+ import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-Xf5Jd6LR.mjs";
12
+ import { c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-Di2IhUue.mjs";
13
+ import { r as planPayload, t as planCachedBuild } from "./build-plan-CeIooJqn.mjs";
14
+ import { t as IosRecipeRefusal } from "./ios-project-Cz0S1Sz-.mjs";
15
+ import { a as hostedIosSelectors } from "./remote-WK_swZEw.mjs";
16
+ import { a as writeIpTxt, c as iosProcessRuntime, r as copyAppAside, s as iosMetroRuntime, t as DEFAULT_DEPS } from "./dependencies-LH-7k1Vr.mjs";
17
+ import { t as planHostedDevice } from "./plan-placement-BI4r55aP.mjs";
18
18
  import { existsSync, rmSync } from "node:fs";
19
19
  import { join } from "node:path";
20
20
  import chalk from "chalk";
@@ -0,0 +1,58 @@
1
+ import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-BhwAJBgA.mjs";
2
+ import { existsSync } from "node:fs";
3
+ import { isJsonObject } from "@stim-cli/core/state";
4
+ //#region src/engine/recorded-build.ts
5
+ const RECORDED_BUILDS_KEY = "recordedBuilds";
6
+ function recordedBuildKey(selectors) {
7
+ const configuration = selectors.configuration ?? (selectors.platform === "ios" ? "Debug" : "debug");
8
+ return [
9
+ selectors.platform,
10
+ selectors.scheme ?? "",
11
+ configuration
12
+ ].join("|");
13
+ }
14
+ function recordBuild(root, key, build) {
15
+ updateWorkspaceState(root, (state) => ({
16
+ ...state,
17
+ [RECORDED_BUILDS_KEY]: {
18
+ ...isJsonObject(state[RECORDED_BUILDS_KEY]) ? state[RECORDED_BUILDS_KEY] : {},
19
+ [key]: {
20
+ ...build,
21
+ builtAt: (/* @__PURE__ */ new Date()).toISOString()
22
+ }
23
+ }
24
+ }));
25
+ }
26
+ function readRecordedBuild(root, key) {
27
+ const recorded = readWorkspaceState$1(root)?.[RECORDED_BUILDS_KEY];
28
+ const entry = isJsonObject(recorded) ? recorded[key] : null;
29
+ if (!isJsonObject(entry) || typeof entry.appPath !== "string" || !existsSync(entry.appPath)) return null;
30
+ return {
31
+ appPath: entry.appPath,
32
+ bundleId: typeof entry.bundleId === "string" ? entry.bundleId : null,
33
+ builtAt: typeof entry.builtAt === "string" ? entry.builtAt : ""
34
+ };
35
+ }
36
+ const NO_RECORDED_BUILD = "STIM_NO_RECORDED_BUILD";
37
+ function lookupRecordedBuild(requested, root, selectors) {
38
+ if (!requested) return {
39
+ build: null,
40
+ refusal: null
41
+ };
42
+ const build = readRecordedBuild(root, recordedBuildKey(selectors));
43
+ if (build) return {
44
+ build,
45
+ refusal: null
46
+ };
47
+ const described = [selectors.scheme && `scheme ${selectors.scheme}`, selectors.configuration].filter(Boolean).join(", ");
48
+ return {
49
+ build: null,
50
+ refusal: {
51
+ code: NO_RECORDED_BUILD,
52
+ message: `No recorded ${selectors.platform} build${described ? ` (${described})` : ""} exists for this checkout, so there is no app to install.`,
53
+ remedy: "Build the app first with the same selectors, then run again."
54
+ }
55
+ };
56
+ }
57
+ //#endregion
58
+ export { recordBuild as n, recordedBuildKey as r, lookupRecordedBuild as t };
@@ -1,4 +1,4 @@
1
- import { Ct as gitCommonDirOnDisk } from "./settings-B5IBDfTx.mjs";
1
+ import { Ct as gitCommonDirOnDisk } from "./settings-Bap-qjnp.mjs";
2
2
  import { existsSync } from "node:fs";
3
3
  import { loadConfig, recordingEnabled, workspaceRecordingsDir } from "@stim-cli/core/state";
4
4
  import { rm } from "node:fs/promises";
@@ -1,18 +1,18 @@
1
1
  import { d as throwIfCancelled, l as cancellableSleep, s as loadScaledBudgetMs, u as cancelledError } from "./exec-CGuDzt40.mjs";
2
- import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { f as refuseNoProject, l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
4
- import { ft as deviceSlotPlatforms, m as getProject, pt as parseDeviceSlotKey } from "./config-BW0fAtoK.mjs";
5
- import { Vt as repoRootAsync } from "./settings-B5IBDfTx.mjs";
6
- import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-Dqqj3IkW.mjs";
7
- import { it as resolveOwnedAvdSerialAsync } from "./android-Iq0M2t2d.mjs";
8
- import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-B5PVz0Wv.mjs";
9
- import { Nn as iosAppProcess, On as ensureMetroReverse, Sn as androidAppProcess } from "./device-capacity-C0PiTyRb.mjs";
10
- import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-CtmYTRWm.mjs";
11
- import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-BdZdNsAj.mjs";
12
- import { m as probeHostedSession } from "./hosted-client-Bb89P6an.mjs";
13
- import { r as readHostedNative } from "./ios-state-CWsBysyN.mjs";
14
- import { r as reopenHostedAndroidMetro } from "./hosted-android-y6K3DKQT.mjs";
15
- import { n as nativeRunCommand } from "./slot-launch-DsQmPdlg.mjs";
2
+ import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-T3cDctRE.mjs";
4
+ import { m as getProject, mt as parseDeviceSlotKey, pt as deviceSlotPlatforms } from "./config-BA3TgoIP.mjs";
5
+ import { Vt as repoRootAsync } from "./settings-Bap-qjnp.mjs";
6
+ import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-Clk1JAWL.mjs";
7
+ import { it as resolveOwnedAvdSerialAsync } from "./android-SJx1V3R3.mjs";
8
+ import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-DM3yJL1M.mjs";
9
+ import { Nn as iosAppProcess, On as ensureMetroReverse, Sn as androidAppProcess } from "./device-capacity-CpAVcKgq.mjs";
10
+ import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-B9VFI6r0.mjs";
11
+ import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-BhfpRfNf.mjs";
12
+ import { m as probeHostedSession } from "./hosted-client-DMOOu8vD.mjs";
13
+ import { r as readHostedNative } from "./ios-state-Avwz2cbZ.mjs";
14
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-D__HGVIO.mjs";
15
+ import { n as nativeRunCommand } from "./slot-launch-qEQVTth7.mjs";
16
16
  import { n as sendToOwnedPage, t as liveWebRecord } from "./page-Dj8IqvGM.mjs";
17
17
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
18
18
  import chalk from "chalk";
@@ -1,2 +1,2 @@
1
- import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-DsTMtMDU.mjs";
1
+ import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-A_axEbeS.mjs";
2
2
  export { reloadCommand as default, registerReload, runReload };
@@ -0,0 +1,158 @@
1
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
2
+ import { D as updateRemoteMachinesAsync, R as doctorIo, V as keyConfirmer, W as parseMachine$1 } from "./config-BA3TgoIP.mjs";
3
+ import { $ as inspectBuildMachines, Q as forgetBuildMachine, at as inspectDeviceHostMachines, nt as configuredMachines, rt as forgetDeviceHostMachine } from "./support-BJbXovoO.mjs";
4
+ import { t as confirmInTerminal } from "./device-provision-CxQDCtrc.mjs";
5
+ import { readBuildMachines, readDeviceHostMachines } from "@stim-cli/core/state";
6
+ import chalk from "chalk";
7
+ //#region src/commands/remote.ts
8
+ function refusal(code, message, remedy) {
9
+ return Object.assign(new Error(message), {
10
+ code,
11
+ message,
12
+ remedy
13
+ });
14
+ }
15
+ function invalidSetting() {
16
+ return refusal("STIM_BAD_ARG", "remote.machines is not a list of machine names.", "Run `stim guide settings` and correct remote.machines, then run the command again.");
17
+ }
18
+ function asRefusal(error) {
19
+ if (!(error instanceof Error) || !("code" in error)) return null;
20
+ if (typeof error.code !== "string" || !error.code.startsWith("STIM_")) return null;
21
+ const remedy = "remedy" in error && typeof error.remedy === "string" ? error.remedy : null;
22
+ return {
23
+ code: error.code,
24
+ message: error.message,
25
+ remedy
26
+ };
27
+ }
28
+ async function run(json, action) {
29
+ try {
30
+ await action();
31
+ } catch (error) {
32
+ const failure = asRefusal(error);
33
+ if (!failure) throw error;
34
+ console.error(chalk.red(phaseLine("error", `${failure.code}: ${failure.message}`)));
35
+ if (failure.remedy) console.error(phaseLine("remedy", failure.remedy));
36
+ if (json) console.log(JSON.stringify(failure));
37
+ process.exitCode = 1;
38
+ }
39
+ }
40
+ function requireMachine(machine) {
41
+ if (parseMachine$1(machine)) return;
42
+ throw refusal("STIM_BAD_ARG", `${JSON.stringify(machine)} is not a tailnet name or local: address.`, "Expected `name`, `name:port`, `local:<host>` or `local:<host>:port`.");
43
+ }
44
+ function printFindings(findings) {
45
+ const seen = /* @__PURE__ */ new Set();
46
+ for (const finding of findings) {
47
+ if (seen.has(finding.title)) continue;
48
+ seen.add(finding.title);
49
+ console.log(`\n${chalk.bold(finding.title)}`);
50
+ console.log(` ${finding.detail}`);
51
+ if (finding.fix) console.log(chalk.dim(` -> ${finding.fix}`));
52
+ }
53
+ }
54
+ function confirmer(json) {
55
+ const interactive = !json && process.stdin.isTTY === true && process.stderr.isTTY === true;
56
+ return keyConfirmer(interactive ? confirmInTerminal : null);
57
+ }
58
+ function stateLine(build, host) {
59
+ return `build ${build?.state ?? "unknown"}, device-host ${host?.state ?? "unknown"}`;
60
+ }
61
+ function remoteCommand(program, version, io = doctorIo()) {
62
+ const remote = program.command("remote").description("Manage remote.machines, the remote machines this machine builds on and hosts devices on. Works from any directory.");
63
+ remote.command("add <machine>").description("Append a remote machine to remote.machines, keeping the existing entries, and ask it for build and device-host approval. Prints the stim-server setup command a person runs there to approve this machine.").option("--json", "print the result as JSON").action((machine, opts) => run(Boolean(opts.json), async () => {
64
+ requireMachine(machine);
65
+ const { before, after } = await updateRemoteMachinesAsync((machines) => machines.includes(machine) ? machines : [...machines, machine], await io.status());
66
+ if (before === null) throw invalidSetting();
67
+ const added = !before.includes(machine);
68
+ const options = {
69
+ fix: true,
70
+ forget: false,
71
+ version,
72
+ tickets: /* @__PURE__ */ new Map(),
73
+ confirmKey: confirmer(Boolean(opts.json))
74
+ };
75
+ const build = await inspectBuildMachines(options, io, [machine]);
76
+ const host = await inspectDeviceHostMachines(options, io, [machine]);
77
+ const findings = [...build.findings, ...host.findings];
78
+ const buildReport = build.machines[0] ?? null;
79
+ const hostReport = host.machines[0] ?? null;
80
+ if (opts.json) {
81
+ console.log(JSON.stringify({
82
+ machine,
83
+ added,
84
+ machines: after,
85
+ build: buildReport,
86
+ deviceHost: hostReport,
87
+ findings
88
+ }));
89
+ return;
90
+ }
91
+ console.log(added ? `Added ${machine} to remote.machines (${after.length} machine${after.length === 1 ? "" : "s"}).` : `${machine} is already in remote.machines.`);
92
+ console.log(`${machine}: ${stateLine(buildReport, hostReport)}`);
93
+ printFindings(findings);
94
+ }));
95
+ remote.command("list").description("Contact each machine in remote.machines and report its build and device-host approval, in placement order. Completes the connection to a machine that approved since the last contact; asks nothing new.").option("--json", "print the machines as JSON").action((opts) => run(Boolean(opts.json), async () => {
96
+ const entries = configuredMachines();
97
+ if (entries === null) throw invalidSetting();
98
+ const options = {
99
+ fix: false,
100
+ version,
101
+ confirmKey: confirmer(Boolean(opts.json))
102
+ };
103
+ const build = await inspectBuildMachines(options, io, entries);
104
+ const host = await inspectDeviceHostMachines(options, io, entries);
105
+ const machines = entries.map((machine, at) => ({
106
+ machine,
107
+ priority: at + 1,
108
+ build: build.machines.find((each) => each.machine === machine) ?? null,
109
+ deviceHost: host.machines.find((each) => each.machine === machine) ?? null
110
+ }));
111
+ const findings = [...build.findings, ...host.findings];
112
+ if (opts.json) {
113
+ console.log(JSON.stringify({
114
+ machines,
115
+ findings
116
+ }));
117
+ return;
118
+ }
119
+ if (!entries.length) {
120
+ console.log("No remote machines. Add one with `stim remote add <machine>`.");
121
+ return;
122
+ }
123
+ for (const each of machines) console.log(`${each.priority} ${each.machine}: ${stateLine(each.build, each.deviceHost)}`);
124
+ printFindings(findings);
125
+ }));
126
+ remote.command("remove <machine>").description("Remove a machine from remote.machines and forget this machine's credentials for it. Approval on that machine stays until a person there revokes it; prints the command.").option("--json", "print the result as JSON").action((machine, opts) => run(Boolean(opts.json), async () => {
127
+ if (configuredMachines() === null) throw invalidSetting();
128
+ const credentials = [...readBuildMachines(), ...readDeviceHostMachines()].filter((each) => each.machine === machine);
129
+ const revoke = [...new Set(credentials.flatMap((each) => each.deviceId ? [each.deviceId] : []))].map((id) => `stim-server devices revoke ${id}`);
130
+ const pending = credentials.some((each) => !each.deviceId);
131
+ const { before, after } = await updateRemoteMachinesAsync((machines) => machines.filter((each) => each !== machine), await io.status());
132
+ if (before === null) throw invalidSetting();
133
+ const removed = before.includes(machine);
134
+ const busy = `another run holds the hosting credentials, so this machine's credentials for ${machine} were kept.`;
135
+ if (!await forgetDeviceHostMachine(machine)) throw refusal("STIM_CLAIM_REFUSED", removed ? `Removed ${machine} from remote.machines, but ${busy}` : `Nothing changed: ${busy}`, `Run \`stim remote remove ${machine}\` again after it finishes.`);
136
+ await forgetBuildMachine(machine);
137
+ if (opts.json) {
138
+ console.log(JSON.stringify({
139
+ machine,
140
+ removed,
141
+ forgot: credentials.length > 0,
142
+ machines: after,
143
+ revoke,
144
+ pending
145
+ }));
146
+ return;
147
+ }
148
+ if (!removed && !credentials.length) {
149
+ console.log(`${machine} is not in remote.machines.`);
150
+ return;
151
+ }
152
+ console.log(removed ? `Removed ${machine} from remote.machines and forgot its credentials.` : `${machine} was not in remote.machines; forgot its credentials.`);
153
+ if (revoke.length) console.log(chalk.dim(` -> ${machine} keeps this machine's approval until a person there runs: ${revoke.join("; ")}`));
154
+ if (pending) console.log(chalk.dim(` -> A request to ${machine} was still pending here. If a person there approved it, find this machine in \`stim-server devices\` there and revoke it.`));
155
+ }));
156
+ }
157
+ //#endregion
158
+ export { remoteCommand as default };
@@ -1,12 +1,12 @@
1
1
  import { f as WorkspaceProcessCleanupError } from "./exec-CGuDzt40.mjs";
2
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
3
- import { ft as deviceSlotPlatforms } from "./config-BW0fAtoK.mjs";
4
- import { B as publicUrlSetting, G as remoteIosSetting, L as parseIosRemote, W as remoteEasFallbackSetting, ot as tunnelModeSetting } from "./settings-B5IBDfTx.mjs";
5
- import "./device-capacity-C0PiTyRb.mjs";
6
- import { _t as runCancellationSignal } from "./toolchain-DRQyCvlp.mjs";
7
- import { b as resolveSimulatorAppFlag } from "./support-DW575Dnx.mjs";
8
- import { n as devicePlacementRecord } from "./placement-log-D0DZLcJk.mjs";
9
- import { n as devicePlacementLine } from "./auto-placement-CBdWa87P.mjs";
2
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
3
+ import { pt as deviceSlotPlatforms } from "./config-BA3TgoIP.mjs";
4
+ import { B as publicUrlSetting, G as remoteIosSetting, L as parseIosRemote, W as remoteEasFallbackSetting, ot as tunnelModeSetting } from "./settings-Bap-qjnp.mjs";
5
+ import "./device-capacity-CpAVcKgq.mjs";
6
+ import { _t as runCancellationSignal } from "./toolchain-DCnWAxQL.mjs";
7
+ import { b as resolveSimulatorAppFlag } from "./support-BJbXovoO.mjs";
8
+ import { n as devicePlacementRecord } from "./placement-log-B8RCSzOm.mjs";
9
+ import { n as devicePlacementLine } from "./auto-placement-CKFpFCuq.mjs";
10
10
  import chalk from "chalk";
11
11
  //#region src/commands/ios/remote.ts
12
12
  function deviceRemoteConflict(remote, physical) {