stim 1.26.0 → 1.27.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 (171) hide show
  1. package/dist/{acquire-artifact-DVsvSwf7.mjs → acquire-artifact-BKN2Yuhg.mjs} +2 -2
  2. package/dist/{act-C-BqJEpu.mjs → act-ROviTF_t.mjs} +297 -122
  3. package/dist/{activity-Lnb_EoRY.mjs → activity-Cd-ysFes.mjs} +6 -6
  4. package/dist/{agent-device-usage-output-DbXy5tg8.mjs → agent-device-usage-output-C5nCKWp9.mjs} +5 -5
  5. package/dist/{android-CSbLRD53.mjs → android--HBgpvpW.mjs} +5 -5
  6. package/dist/{android-CiNQw3kq.mjs → android-Cd6w7_qw.mjs} +96 -43
  7. package/dist/{android-B5P81yI-.mjs → android-Deb9X3_Y.mjs} +37 -15
  8. package/dist/{android-DTAcRwBC.mjs → android-DriNoAVy.mjs} +23 -18
  9. package/dist/{android-cas-BTVhZ0Qs.mjs → android-cas-D5e6ecUg.mjs} +4 -4
  10. package/dist/android-cas-compiler.mjs +1 -1
  11. package/dist/api.d.mts +13 -3
  12. package/dist/api.mjs +39 -29
  13. package/dist/{apk-signed-tail-B46U9hXc.mjs → apk-signed-tail-BHQHx3Rm.mjs} +2 -2
  14. package/dist/{artifact-BxREhAaV.mjs → artifact-0AGJYB9O.mjs} +18 -23
  15. package/dist/{artifact-CsAP6AGK.mjs → artifact-faemIZv5.mjs} +19 -24
  16. package/dist/{artifact-platform-CMRc0M_r.mjs → artifact-platform-BO2Uvk_A.mjs} +1 -1
  17. package/dist/auto-placement-z-H5pJza.mjs +350 -0
  18. package/dist/{browser-web-rYPyqhTf.mjs → browser-web-slD8AvLp.mjs} +16 -16
  19. package/dist/{build-cache-DrXNCy3T.mjs → build-cache-gBJ-WKzA.mjs} +43 -21
  20. package/dist/{build-DPhApsjV.mjs → build-hS0QyFlQ.mjs} +35 -31
  21. package/dist/{build-plan-DrMMdayj.mjs → build-plan-CBqYbzYM.mjs} +7 -6
  22. package/dist/{cache-manifest-BEZ9Bpl1.mjs → cache-manifest-DEjqGGat.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{budget-k2mZGvvk.mjs → ccache-BWTze1Ls.mjs} +560 -1603
  25. package/dist/{cdp-BG3FJCCx.mjs → cdp-C3svvXiE.mjs} +1 -1
  26. package/dist/{chrome-BvV8ssI3.mjs → chrome-DyDWurWG.mjs} +1 -1
  27. package/dist/{cli-BBKFGOFl.mjs → cli-ftXDLto1.mjs} +24 -23
  28. package/dist/cli.mjs +1 -1
  29. package/dist/{client-D9CaRks-.mjs → client-xsdxrhWA.mjs} +48 -62
  30. package/dist/collector-run.d.mts +10 -9
  31. package/dist/collector-run.mjs +42 -27
  32. package/dist/{command-output-BF5AR2dL.mjs → command-output-Dj-WT4BP.mjs} +1 -1
  33. package/dist/{config-BktkY_zC.mjs → config-Cn94Jc0g.mjs} +23 -4
  34. package/dist/{dependencies-Dw6wfQdv.mjs → dependencies-BGokZ-Ng.mjs} +108 -60
  35. package/dist/{dependency-state-DFB41vfr.mjs → dependency-state-C3OtgG94.mjs} +14 -7
  36. package/dist/{detached-entry-KmieOKgN.mjs → detached-entry-BPlSaCwC.mjs} +1 -1
  37. package/dist/{dev-client-DXR_tPVY.mjs → dev-client-BMca82xo.mjs} +2 -2
  38. package/dist/{device-BcYeHSFu.mjs → device-BJm0irrq.mjs} +16 -16
  39. package/dist/{device-capacity-DCSvUF0l.mjs → device-capacity-6LP7QsaA.mjs} +101 -16
  40. package/dist/device-host-worker.mjs +19 -19
  41. package/dist/{device-ios-BLGfXQeK.mjs → device-ios-534c14fz.mjs} +251 -23
  42. package/dist/{device-lease-run-BmvIl7bI.mjs → device-lease-run-DwsGfjUN.mjs} +5 -5
  43. package/dist/{device-pool-Dluix4H3.mjs → device-pool-BnQqvs6o.mjs} +3 -3
  44. package/dist/{device-BK-zwyd_.mjs → device-tM41-TUq.mjs} +25 -24
  45. package/dist/{doctor-Cp-BhzTS.mjs → doctor-Dbx1ZpD2.mjs} +1 -1
  46. package/dist/{doctor-Bhg1ii70.mjs → doctor-DyqE9n1J.mjs} +28 -16
  47. package/dist/{doctor-OnwP94ne.mjs → doctor-F-3VUUyN.mjs} +76 -32
  48. package/dist/{doctor-fingerprint-D3a04Mhu.mjs → doctor-fingerprint-o7ZI9YLn.mjs} +1 -1
  49. package/dist/doctor-fingerprint.mjs +1 -1
  50. package/dist/{doctor-watchman-BStK05nt.mjs → doctor-watchman-CxDbyrrt.mjs} +5 -5
  51. package/dist/{eas-build-Dsj93iM9.mjs → eas-build-CjNSWmjo.mjs} +4 -4
  52. package/dist/eas-fallback-9fqb46kW.mjs +87 -0
  53. package/dist/{eas-session-ledger-B5vygTiD.mjs → eas-session-ledger-DrP4OuuM.mjs} +6 -6
  54. package/dist/{error-diagnostics-BOOm9Db7.mjs → error-diagnostics-snej9k4j.mjs} +51 -25
  55. package/dist/{exec-VFRpu1iA.mjs → exec-aULwtNly.mjs} +57 -6
  56. package/dist/{gc-C_79zvz4.mjs → gc-BRwAY3qT.mjs} +2 -2
  57. package/dist/{gc-ldgr-hXU.mjs → gc-CGZ1Yg88.mjs} +160 -45
  58. package/dist/{guide-D7K0X6KG.mjs → guide-_rfEh_zM.mjs} +580 -183
  59. package/dist/{hosted-android-Bk54ej6n.mjs → hosted-android-BMKzUNnY.mjs} +4 -4
  60. package/dist/{hosted-client-fHO8yqzc.mjs → hosted-client-D7Pk_Oo1.mjs} +12 -8
  61. package/dist/{hosted-logs-BfbmDM4M.mjs → hosted-logs-B1gqQuva.mjs} +8 -8
  62. package/dist/{hosted-logs-sync-B0pvmOk-.mjs → hosted-logs-sync-Dg3qrZmV.mjs} +5 -5
  63. package/dist/{hosted-macos-CPl0OZ9h.mjs → hosted-macos-B9w4H8hc.mjs} +6 -6
  64. package/dist/{hosted-native-CpDB3-PO.mjs → hosted-native-CdgaiuyP.mjs} +17 -16
  65. package/dist/{idle-shutdown-FfxL1KdG.mjs → idle-shutdown-Cbvo5KEh.mjs} +7 -8
  66. package/dist/{ios-ftxdQbJS.mjs → ios-B5HlVMhQ.mjs} +92 -37
  67. package/dist/{ios-B7-lToDu.mjs → ios-Bk4mWbtS.mjs} +8 -8
  68. package/dist/{ios-ENC4sRPA.mjs → ios-CsRVik64.mjs} +7 -1
  69. package/dist/{ios-WxpDJ5T1.mjs → ios-E26qSpkb.mjs} +27 -11
  70. package/dist/{ios-device-CsyryvpT.mjs → ios-device-C_QkIf1Z.mjs} +3 -3
  71. package/dist/{ios-device-B6HK951C.mjs → ios-device-CiBA-er9.mjs} +1 -1
  72. package/dist/{ios-project-Ty5pHl9O.mjs → ios-project-D8Jcy_br.mjs} +22 -9
  73. package/dist/{ios-signing-4c_qXvQm.mjs → ios-signing-BJzvDPfU.mjs} +2 -2
  74. package/dist/{ios-state-Cw7-WQf2.mjs → ios-state-BZ03NFgF.mjs} +1 -1
  75. package/dist/{js-swap-BMhXYVDS.mjs → js-swap-Dg2a945i.mjs} +8 -7
  76. package/dist/{launch-DOp8RjDz.mjs → launch-CRyBeNsA.mjs} +42 -38
  77. package/dist/lightened-BCsdAGj_.mjs +171 -0
  78. package/dist/{logs-dQDki6Tt.mjs → logs-CC_-ZzEE.mjs} +7 -7
  79. package/dist/{logs-s1dRIG1E.mjs → logs-aJQb-RDg.mjs} +46 -21
  80. package/dist/{macos-B0VEV3Gf.mjs → macos-BGmTpnv9.mjs} +1 -1
  81. package/dist/{macos-DBBPNnIA.mjs → macos-DlCBhMw5.mjs} +73 -38
  82. package/dist/macos-run.mjs +1 -1
  83. package/dist/maintenance-run.mjs +7 -7
  84. package/dist/{metro-CjC10t6E.mjs → metro-CvyD-xwe.mjs} +4 -4
  85. package/dist/{metro-gateway-B6_PgD0L.mjs → metro-gateway-BnHdqMO_.mjs} +3 -3
  86. package/dist/{named-ports-BG0j1X4g.mjs → named-ports-BCyMWA6b.mjs} +3 -3
  87. package/dist/{native-android-CL2NGiik.mjs → native-android-DlpxCyOP.mjs} +17 -18
  88. package/dist/{native-gradle-artifact-inputs-btSUulme.mjs → native-gradle-artifact-inputs-C13qT7R_.mjs} +5 -5
  89. package/dist/{native-runtime-Dq3RBcON.mjs → native-runtime-DqaIBO5w.mjs} +9 -8
  90. package/dist/{native-source-D-4Dh4JU.mjs → native-source-D1AzWiuP.mjs} +1 -1
  91. package/dist/{native-xcode-inputs-BW7H8JGu.mjs → native-xcode-inputs-B1W8SrxB.mjs} +3 -3
  92. package/dist/{native-xcode-ios-CBXJAxfC.mjs → native-xcode-ios-QPP0Rm68.mjs} +17 -17
  93. package/dist/{ndjson-CgE_o3Dl.mjs → ndjson-Dy2W4vRa.mjs} +2 -2
  94. package/dist/offload-worker.mjs +23 -24
  95. package/dist/{operation-exec-CUZifp6Z.mjs → operation-exec-Dp4FuIGR.mjs} +1 -1
  96. package/dist/{ownership-BjYvMNX_.mjs → ownership-Bx-0cku-.mjs} +3 -3
  97. package/dist/{page-CzEA_-5_.mjs → page-CQJlcj3x.mjs} +2 -2
  98. package/dist/{phone-reverses-lmj6kcPm.mjs → phone-reverses-C9yAaKEv.mjs} +18 -4
  99. package/dist/{placement-log-DIFPQAXp.mjs → placement-log-BXUbiZM6.mjs} +3 -3
  100. package/dist/{plan-placement-IiiSQhtz.mjs → plan-placement-UxnQjv5Z.mjs} +36 -10
  101. package/dist/{ports-C2_w1Z0Z.mjs → ports-uUrghqWN.mjs} +3 -3
  102. package/dist/{prebuild-gmouvmJZ.mjs → prebuild-BDpToDgR.mjs} +16 -17
  103. package/dist/{project-BUu6Is4k.mjs → project-DYj-HVx6.mjs} +17 -17
  104. package/dist/{pull-request-CbNlkFok.mjs → pull-request-BzLmzAIQ.mjs} +2 -2
  105. package/dist/pull-requests.mjs +1 -1
  106. package/dist/{react-native-android-Cgg99REN.mjs → react-native-android-DDBccgJw.mjs} +32 -26
  107. package/dist/{react-native-build-oNwqF5Wb.mjs → react-native-build-DaK2IFyP.mjs} +9 -9
  108. package/dist/{react-native-doctor-BhA3KUte.mjs → react-native-doctor-B-Mw6DcR.mjs} +6 -6
  109. package/dist/{react-native-ios-B-nf4rjN.mjs → react-native-ios-DjYwUF9U.mjs} +23 -17
  110. package/dist/{recordings-BldzVKq0.mjs → recordings-C20iUZfp.mjs} +1 -1
  111. package/dist/{registration-CN6nlhcD.mjs → registration-BwCe64PH.mjs} +1 -1
  112. package/dist/{reload-C9OduiNc.mjs → reload-DJBeF_rC.mjs} +1 -1
  113. package/dist/{reload-CCR7KC_l.mjs → reload-fUdkH2_p.mjs} +16 -16
  114. package/dist/{remote-C8S7FlPF.mjs → remote-y6n99WMW.mjs} +22 -9
  115. package/dist/{result-7F5hEwQJ.mjs → result-CTqBw2Te.mjs} +32 -21
  116. package/dist/{run-BqB0v3pt.mjs → run-DaCeNKRm.mjs} +3 -3
  117. package/dist/{selection-BNPBZ6T5.mjs → selection-Bs8phwhN.mjs} +37 -29
  118. package/dist/{server-bare-A75rDIdD.mjs → server-bare-BOh-iZEj.mjs} +2 -2
  119. package/dist/{server-command-CssKFOD7.mjs → server-command-8CuA51Cv.mjs} +6 -6
  120. package/dist/{server-expo-eQfOdydb.mjs → server-expo-ABQs2XFA.mjs} +4 -4
  121. package/dist/server-expo-Ba_Y21vB.mjs +2 -0
  122. package/dist/{settings-CosW5X-S.mjs → settings-BDVI8Ivc.mjs} +331 -62
  123. package/dist/{settings-OaGQF-ri.mjs → settings-CMHhQNwI.mjs} +24 -3
  124. package/dist/settings-payload-cm60Zhib.mjs +257 -0
  125. package/dist/settings-write-BdNRLlBn.mjs +185 -0
  126. package/dist/settings.schema.json +51 -33
  127. package/dist/{simslim-Bax1qcxu.mjs → simslim-DCQwzoPy.mjs} +2 -2
  128. package/dist/{slot-launch-CYCEhfBY.mjs → slot-launch-0l7RqSpr.mjs} +6 -6
  129. package/dist/{stage-jKQ7CP_B.mjs → stage-F4cAfJGi.mjs} +2 -2
  130. package/dist/{start-C_wefNKB.mjs → start-DcqnF9p8.mjs} +1 -1
  131. package/dist/{start-_BdJ32cZ.mjs → start-DrPwER_2.mjs} +27 -22
  132. package/dist/{state-C1i2nMOP.mjs → state-BX1y5syV.mjs} +4 -4
  133. package/dist/{state-C4OdpOTF.mjs → state-CZxLyetD.mjs} +2 -2
  134. package/dist/{stats-tEpEEH-u.mjs → stats-GxuCbles.mjs} +5 -5
  135. package/dist/{stats-report-n2U5plhk.mjs → stats-report-B86Cv7Uc.mjs} +1 -1
  136. package/dist/{status-CRXz-Gtj.mjs → status-7ULDEJ1e.mjs} +1 -1
  137. package/dist/{status-DQrqodLj.mjs → status-BfnK9pUd.mjs} +25 -25
  138. package/dist/{status-B9M7x4CZ.mjs → status-Bj7ZYvvc.mjs} +1 -1
  139. package/dist/{status-watch-B5wDIH_o.mjs → status-watch-BfabQn03.mjs} +5 -5
  140. package/dist/status-worker.mjs +1 -1
  141. package/dist/{stim-desktop-6Dqp-gjX.mjs → stim-desktop-CbWo21kb.mjs} +2 -2
  142. package/dist/{stop-ySNQHXMG.mjs → stop-CH79S3IZ.mjs} +5 -5
  143. package/dist/{stop-DRqQVqDJ.mjs → stop-D-EAr25B.mjs} +21 -20
  144. package/dist/{stop-CmdNhGlC.mjs → stop-x1Yu3He4.mjs} +2 -2
  145. package/dist/supervisor-run.mjs +17 -17
  146. package/dist/{support-CVOCp0Ft.mjs → support-Be0UeVZU.mjs} +10 -10
  147. package/dist/{support-BGSCBoib.mjs → support-CNg_YsOk.mjs} +6 -6
  148. package/dist/{swiftpm-artifact-inputs-CfUzt_0Z.mjs → swiftpm-artifact-inputs-uPqYvGBv.mjs} +4 -4
  149. package/dist/{swiftpm-macos-x6HPpl_2.mjs → swiftpm-macos-Ch4YjY_A.mjs} +11 -12
  150. package/dist/{toolchain-J4J8MrAr.mjs → toolchain-CbCG6C5Z.mjs} +321 -15
  151. package/dist/{toolchain-DoavrvIA.mjs → toolchain-JYAOquPg.mjs} +1 -1
  152. package/dist/{trigger-KVaWWNyn.mjs → trigger-DMou-X7j.mjs} +2 -2
  153. package/dist/trigger-qp2ji5wE.mjs +2 -0
  154. package/dist/{warm-progress-DvhTX_eu.mjs → warm-progress-C0RsbngN.mjs} +731 -727
  155. package/dist/{web-Bihbf7-u.mjs → web-Cq_AQ4DK.mjs} +9 -9
  156. package/dist/web-Je6abcpz.mjs +2 -0
  157. package/dist/web-run.mjs +9 -9
  158. package/dist/windows-report.mjs +1 -1
  159. package/dist/{workspace-state-pUg3_RRA.mjs → workspace-state-BjqdjnJR.mjs} +3 -3
  160. package/dist/{workspaces-g2lhdBXF.mjs → workspaces-DFbj07jp.mjs} +1795 -70
  161. package/dist/{worktree-BKuklFh_.mjs → worktree-COAJ3-OD.mjs} +934 -514
  162. package/dist/{worktree-Bm4cb-nU.mjs → worktree-JGUd_53L.mjs} +1 -1
  163. package/package.json +7 -7
  164. package/dist/ccache-Bx5TbxwG.mjs +0 -143
  165. package/dist/eas-fallback-FwkeqqGi.mjs +0 -381
  166. package/dist/hosted-ios-D55QhYaD.mjs +0 -15
  167. package/dist/native-run-BfIDFKLH.mjs +0 -275
  168. package/dist/server-expo-wvcj5tiZ.mjs +0 -2
  169. package/dist/settings-write-QjYfSrjF.mjs +0 -360
  170. package/dist/trigger-DzJu208Q.mjs +0 -2
  171. package/dist/web-BFLueSh-.mjs +0 -2
@@ -1,15 +1,22 @@
1
- import { h as hostingMachines } from "./selection-BNPBZ6T5.mjs";
2
- import { r as readHostedNative } from "./ios-state-Cw7-WQf2.mjs";
3
- import { i as probeHost, n as automaticDevicePlacement } from "./eas-fallback-FwkeqqGi.mjs";
1
+ import { _ as loadConfig$1 } from "./config-Cn94Jc0g.mjs";
2
+ import { Tn as processContext } from "./ccache-BWTze1Ls.mjs";
3
+ import { _ as hostingMachines } from "./selection-Bs8phwhN.mjs";
4
+ import { r as readHostedNative } from "./ios-state-BZ03NFgF.mjs";
5
+ import { n as buildPreferenceRefusal } from "./settings-payload-cm60Zhib.mjs";
6
+ import { r as probeHost, t as automaticDevicePlacement } from "./auto-placement-z-H5pJza.mjs";
4
7
  import { automaticMachineEnabled } from "@stim-cli/core/state";
5
8
  //#region src/device-host/plan-placement.ts
9
+ const DOCTOR_REMEDY = "Run `stim doctor` to check the hosts and settings placement uses.";
10
+ function planChoice(choice) {
11
+ return choice && ("runtime" in choice || "systemImage" in choice) ? choice : null;
12
+ }
6
13
  /**
7
14
  * Where `--plan` assumes the next run puts its simulator or emulator, with no session, reservation or state write.
8
15
  * A named Mac, or the Mac a recorded session already holds, answers with the device its `device-host.offer` would
9
16
  * give; `auto` repeats the placement decision a run makes now and, when that stays on this machine, notes any Mac
10
17
  * whose device would key differently. The result predicts the cache key only; a run reads its own device.
11
18
  */
12
- async function planHostedDevice({ root, slot, platform, machine, selectors, sameKey, eas, deps = {}, operation }) {
19
+ async function planHostedDevice({ root, slot, platform, machine, placement = "auto", selectors, sameKey, eas, deps = {}, operation }) {
13
20
  const { automatic = automaticDevicePlacement, probe = probeHost, machines = () => hostingMachines(void 0, operation?.signal) } = deps;
14
21
  const named = async (name) => {
15
22
  const result = await probe(name, platform, selectors, void 0, operation?.signal);
@@ -17,7 +24,8 @@ async function planHostedDevice({ root, slot, platform, machine, selectors, same
17
24
  kind: "unknown",
18
25
  reason: `${name} did not give a ${platform} device (${result.probe.failure})`
19
26
  };
20
- const { choice, declined } = result.probe.offer;
27
+ const { declined } = result.probe.offer;
28
+ const choice = planChoice(result.probe.offer.choice);
21
29
  if (!choice) return {
22
30
  kind: "unknown",
23
31
  reason: `${name} has no ${platform} device for this selection${declined ? ` (${declined})` : ""}`
@@ -32,12 +40,21 @@ async function planHostedDevice({ root, slot, platform, machine, selectors, same
32
40
  try {
33
41
  const recorded = readHostedNative(root, platform, slot)[slot];
34
42
  if (recorded) return await named(recorded.machine);
43
+ const invalid = buildPreferenceRefusal((operation ?? processContext(root)).env, loadConfig$1()?.remote?.build);
44
+ if (invalid) return {
45
+ kind: "refused",
46
+ code: invalid.code,
47
+ message: invalid.message,
48
+ remedy: invalid.remedy ?? DOCTOR_REMEDY
49
+ };
35
50
  const placed = await automatic({
36
51
  root,
37
52
  slot,
38
53
  platform,
54
+ placement,
39
55
  selectors,
40
56
  noWait: false,
57
+ waitMs: 0,
41
58
  signal: operation?.signal,
42
59
  ...eas ? { eas } : {}
43
60
  }, {
@@ -46,27 +63,36 @@ async function planHostedDevice({ root, slot, platform, machine, selectors, same
46
63
  });
47
64
  if (placed.placement.decision === "eas") return {
48
65
  kind: "unknown",
49
- reason: `auto would run on an EAS Simulator now (${placed.placement.reason}), which --plan cannot read without a session`
66
+ reason: `${placement} would run on an EAS Simulator now (${placed.placement.reason}), which --plan cannot read without a session`
50
67
  };
51
68
  if (placed.target) return {
52
69
  kind: "hosted",
53
70
  choice: placed.target.choice,
54
- placement: `on ${placed.target.host.machine}, as auto would now`
71
+ placement: `on ${placed.target.host.machine}, as ${placement} would now`
55
72
  };
56
73
  const names = (await machines() ?? []).filter((name) => automaticMachineEnabled("device", name));
57
74
  operation?.signal.throwIfAborted();
58
75
  const offers = await Promise.all(names.map((name) => probe(name, platform, selectors, void 0, operation?.signal)));
59
- const differs = (await Promise.all(offers.map(async ({ probe: each }) => "offer" in each && each.offer.choice && await sameKey(each.offer.choice) === false ? [each.machine] : []))).flat();
76
+ const differs = (await Promise.all(offers.map(async ({ probe: each }) => {
77
+ const choice = "offer" in each ? planChoice(each.offer.choice) : null;
78
+ return choice && await sameKey(choice) === false ? [each.machine] : [];
79
+ }))).flat();
60
80
  if (differs.length) return {
61
81
  kind: "local",
62
- placement: `this machine; auto may use ${differs.join(", ")}, which builds for another architecture, so its key differs`
82
+ placement: `this machine; ${placement} may use ${differs.join(", ")}, which builds for another architecture, so its key differs`
63
83
  };
64
84
  return {
65
85
  kind: "local",
66
- placement: names.length ? `this machine; auto may use ${names.join(", ")}` : "this machine"
86
+ placement: names.length ? `this machine; ${placement} may use ${names.join(", ")}` : "this machine"
67
87
  };
68
88
  } catch (error) {
69
89
  operation?.signal.throwIfAborted();
90
+ if (error instanceof Error && "code" in error && error.code === "STIM_HOSTING_REFUSED") return {
91
+ kind: "refused",
92
+ code: error.code,
93
+ message: error.message,
94
+ remedy: "remedy" in error && typeof error.remedy === "string" ? error.remedy : DOCTOR_REMEDY
95
+ };
70
96
  return {
71
97
  kind: "unknown",
72
98
  reason: error.message
@@ -1,6 +1,6 @@
1
- import { p as getProject } from "./config-BktkY_zC.mjs";
2
- import { n as findCommandWorkspace } from "./project-BUu6Is4k.mjs";
3
- import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-BG0j1X4g.mjs";
1
+ import { p as getProject } from "./config-Cn94Jc0g.mjs";
2
+ import { n as findCommandWorkspace } from "./project-DYj-HVx6.mjs";
3
+ import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-BCyMWA6b.mjs";
4
4
  //#region src/commands/ports.ts
5
5
  async function inProject(action) {
6
6
  try {
@@ -1,28 +1,26 @@
1
- import { E as debugLog, _ as spawnDeclared, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { M as withDirLock$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-pUg3_RRA.mjs";
1
+ import { E as debugLog, _ as spawnDeclared, t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { M as withDirLock$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-BjqdjnJR.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-BF5AR2dL.mjs";
5
- import { o as git, s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
6
- import { bt as gitCommonDirOnDisk } from "./settings-CosW5X-S.mjs";
7
- import { v as detectIsExpo } from "./project-BUu6Is4k.mjs";
8
- import { r as register } from "./cache-manifest-BEZ9Bpl1.mjs";
9
- import { ir as remoteCliInvocation } from "./budget-k2mZGvvk.mjs";
10
- import { E as storedSources, _ as packageIn, f as fingerprintOptions, l as expoEnvFiles, o as diffFingerprintSources, p as fingerprintProject } from "./build-cache-DrXNCy3T.mjs";
11
- import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-eQfOdydb.mjs";
12
- import { t as readDoctorFingerprint } from "./doctor-fingerprint-D3a04Mhu.mjs";
4
+ import { m as shortHash } from "./command-output-Dj-WT4BP.mjs";
5
+ import { o as git, s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
6
+ import { St as gitCommonDirOnDisk } from "./settings-BDVI8Ivc.mjs";
7
+ import { v as detectIsExpo } from "./project-DYj-HVx6.mjs";
8
+ import { Vn as remoteCliInvocation } from "./ccache-BWTze1Ls.mjs";
9
+ import { r as register } from "./cache-manifest-DEjqGGat.mjs";
10
+ import { $ as STIM_VERSION } from "./workspaces-DFbj07jp.mjs";
11
+ import { D as storedSources, m as fingerprintProject, o as diffFingerprintSources, p as fingerprintOptions, u as expoEnvFiles, v as packageIn } from "./build-cache-gBJ-WKzA.mjs";
12
+ import { i as expoBinRefusal, o as expoSdkMajor, r as expoBinPath, s as expoTelemetryEnv } from "./server-expo-ABQs2XFA.mjs";
13
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-o7ZI9YLn.mjs";
13
14
  import { createRequire } from "node:module";
14
15
  import { createHash } from "node:crypto";
15
16
  import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
16
17
  import { dirname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
17
18
  import { ambientContext } from "@stim-cli/core";
18
- import { FINGERPRINT_MEMO_SCHEMA, LAST_BUILD_KEYS, fingerprintMemoDir, fingerprintMemoFile, fingerprintMemoLock, loadConfig, readFingerprintMemo, readWorkspaceState } from "@stim-cli/core/state";
19
+ import { FINGERPRINT_MEMO_SCHEMA, LAST_BUILD_KEYS, fingerprintMemoDir, fingerprintMemoFile, fingerprintMemoLock, loadConfig, readFingerprintMemo, readWorkspaceState, trace } from "@stim-cli/core/state";
19
20
  import { readFile } from "node:fs/promises";
20
21
  import * as expoFingerprint from "@expo/fingerprint";
21
22
  import { normalizeOptionsAsync } from "@expo/fingerprint/build/Options.js";
22
23
  import { isIgnoredPathWithMatchObjects } from "@expo/fingerprint/build/utils/Path.js";
23
- //#region src/stim-version.ts
24
- const STIM_VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
25
- //#endregion
26
24
  //#region src/cache/static-fingerprint.ts
27
25
  const STATIC_SCHEMA = 1;
28
26
  /** More files than this outside git, or ignored by git, means the static check reads too much to be worth it. */
@@ -365,7 +363,7 @@ function contentId(path) {
365
363
  async function staticFingerprint(projectRoot, target, { env, signal }) {
366
364
  try {
367
365
  return {
368
- ...await computeDigest(realpathSync(projectRoot), target, env, signal),
366
+ ...await computeDigest(realpathSync.native(projectRoot), target, env, signal),
369
367
  uncertain: null
370
368
  };
371
369
  } catch (error) {
@@ -383,7 +381,7 @@ async function computeDigest(root, target, env, signal) {
383
381
  if (normalized.nativeModuleSourceType !== "package" || normalized.configPluginSourceType !== "package") throw new Uncertain("the fingerprint preset hashes package files");
384
382
  let top;
385
383
  try {
386
- top = realpathSync(await gitAsync(root, ["rev-parse", "--show-toplevel"], { signal }));
384
+ top = realpathSync.native(await gitAsync(root, ["rev-parse", "--show-toplevel"], { signal }));
387
385
  } catch {
388
386
  throw new Uncertain("the project is not in a git work tree");
389
387
  }
@@ -705,6 +703,7 @@ async function memoizedFingerprint(projectRoot, target, { consult, record, opera
705
703
  else {
706
704
  if (record) dropRecord(target.platform, before.digest);
707
705
  debugLog.log("fingerprint_memo_hit", { platform: target.platform });
706
+ trace.mark("fingerprint memo hit", { platform: target.platform });
708
707
  return {
709
708
  fingerprint: {
710
709
  hash: stored.hash,
@@ -1,7 +1,7 @@
1
- import { S as process_identity_exports } from "./exec-VFRpu1iA.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-pUg3_RRA.mjs";
3
- import { U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-BktkY_zC.mjs";
4
- import { G as resolveAndroidLayout, Nt as repoRoot, nt as settingValueAt, ot as webSettings, q as resolveIosProjectDir } from "./settings-CosW5X-S.mjs";
1
+ import { S as process_identity_exports } from "./exec-aULwtNly.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-BjqdjnJR.mjs";
3
+ import { U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, g as isPathPrefix$1, l as findEnclosingWorktreeRoot, p as getProject } from "./config-Cn94Jc0g.mjs";
4
+ import { It as repoRoot, Y as resolveIosProjectDir, ct as webSettings, it as settingValueAt, q as resolveAndroidLayout } from "./settings-BDVI8Ivc.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-CL2NGiik.mjs")).nativeAndroidProject(root),
315
- doctor: async () => (await import("./native-android-CL2NGiik.mjs")).nativeAndroidDoctor(root)
314
+ android: async () => (await import("./native-android-DlpxCyOP.mjs")).nativeAndroidProject(root),
315
+ doctor: async () => (await import("./native-android-DlpxCyOP.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-CBXJAxfC.mjs")).nativeXcodeIosProject(root),
744
- doctor: async () => (await import("./native-xcode-ios-CBXJAxfC.mjs")).nativeXcodeDoctor(root)
743
+ ios: async () => (await import("./native-xcode-ios-QPP0Rm68.mjs")).nativeXcodeIosProject(root),
744
+ doctor: async () => (await import("./native-xcode-ios-QPP0Rm68.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-wvcj5tiZ.mjs")).startExpoServer,
949
+ loadDevServer: async () => (await import("./server-expo-Ba_Y21vB.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-A75rDIdD.mjs")).startBareServer,
969
+ loadDevServer: async () => (await import("./server-bare-BOh-iZEj.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-B-nf4rjN.mjs")).reactNativeIosProject(root, settings),
1000
- android: async (resolved) => (await import("./react-native-android-Cgg99REN.mjs")).reactNativeAndroidProject(root, resolved),
1001
- doctor: async () => (await import("./react-native-doctor-BhA3KUte.mjs")).reactNativeProjectDoctor(root)
999
+ ios: async (settings) => (await import("./react-native-ios-DjYwUF9U.mjs")).reactNativeIosProject(root, settings),
1000
+ android: async (resolved) => (await import("./react-native-android-DDBccgJw.mjs")).reactNativeAndroidProject(root, resolved),
1001
+ doctor: async () => (await import("./react-native-doctor-B-Mw6DcR.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-x6HPpl_2.mjs")).swiftpmMacosProject(root),
1015
+ macos: async () => (await import("./swiftpm-macos-Ch4YjY_A.mjs")).swiftpmMacosProject(root),
1016
1016
  doctor: async () => {
1017
- const { macosToolchain, macosToolchainAsync } = await import("./toolchain-DoavrvIA.mjs");
1017
+ const { macosToolchain, macosToolchainAsync } = await import("./toolchain-JYAOquPg.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-rYPyqhTf.mjs")).browserWebProject(root)
1037
+ web: async () => (await import("./browser-web-slD8AvLp.mjs")).browserWebProject(root)
1038
1038
  };
1039
1039
  }
1040
1040
  },
@@ -1104,7 +1104,7 @@ function startServerWorkspace(startDir, registry) {
1104
1104
  }
1105
1105
  function sameRepositoryApps(nearest, top, registry) {
1106
1106
  const worktree = expandedRealpath(top);
1107
- return Object.keys(loadConfig$1()?.projects ?? {}).filter((path) => path !== nearest && isPathPrefix(worktree, expandedRealpath(path)) && registry.isMobileProject(path));
1107
+ return Object.keys(loadConfig$1()?.projects ?? {}).filter((path) => path !== nearest && isPathPrefix$1(worktree, expandedRealpath(path)) && registry.isMobileProject(path));
1108
1108
  }
1109
1109
  function chooseServerWorkspace(nearest, top, candidates, owners) {
1110
1110
  const worktree = expandedRealpath(top);
@@ -1,5 +1,5 @@
1
- import { l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { c as gitQuiet, l as gitQuietAsync, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
1
+ import { l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { c as gitQuiet, l as gitQuietAsync, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
3
3
  //#region src/workspace/pull-request.ts
4
4
  const GH_TIMEOUT_MS = 2e4;
5
5
  const GH_ENV = {
@@ -1,2 +1,2 @@
1
- import { a as pullRequestLookup, c as selectPullRequest, i as parseRemoteRepo, l as worktreePullRequests, n as describePullRequest, o as pullRequestLookupAsync, r as endedPullRequest, s as pullRequestLookups, t as checkCounts } from "./pull-request-CbNlkFok.mjs";
1
+ import { a as pullRequestLookup, c as selectPullRequest, i as parseRemoteRepo, l as worktreePullRequests, n as describePullRequest, o as pullRequestLookupAsync, r as endedPullRequest, s as pullRequestLookups, t as checkCounts } from "./pull-request-BzLmzAIQ.mjs";
2
2
  export { checkCounts, describePullRequest, endedPullRequest, parseRemoteRepo, pullRequestLookup, pullRequestLookupAsync, pullRequestLookups, selectPullRequest, worktreePullRequests };
@@ -1,30 +1,30 @@
1
- import { C as reportSignal, _ as spawnDeclared, b as operationState, c as throwIfCancelled, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { r as readWorkspaceState } from "./workspace-state-pUg3_RRA.mjs";
3
- import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-BktkY_zC.mjs";
1
+ import { C as reportSignal, _ as spawnDeclared, b as operationState, c as throwIfCancelled, t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { r as readWorkspaceState } from "./workspace-state-BjqdjnJR.mjs";
3
+ import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-Cn94Jc0g.mjs";
4
4
  import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
5
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BF5AR2dL.mjs";
6
- import { a as killOnAbort, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
7
- import { G as resolveAndroidLayout, U as remoteEasFallbackSetting, Ut as makeTemporaryDirectory, V as realpathInside, Wt as removeTemporaryEntry, et as settingOriginScope, it as tunnelModeSetting, m as defaultAndroidLayout, rt as settingsLayers, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
8
- import { v as detectIsExpo } from "./project-BUu6Is4k.mjs";
9
- import { E as findBuildTool, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, k as hostSystemImageArch, l as androidSystemImageAbi, r as androidBuildToolName } from "./android-DTAcRwBC.mjs";
10
- import { Hn as processContext, Xn as loadProjectProvider, qn as checkEasAuth, rr as bundleInvocation, tr as resolveRemote, tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
11
- import { A as assetDiffReason, C as storeBuild, M as compareAssetManifests, N as readAssetManifest, O as untrackedMissLine, S as resolveBuild, T as storedAssetManifest, a as configInputsChanged, d as fingerprintDiffRecord, g as inputsChangedDuringBuild, j as captureAssetManifest, k as untrackedNativeFiles, m as gitignoredFingerprintInputs, n as buildCacheKey, p as fingerprintProject, r as changedDuringBuildLine, u as filesystemBuildCapability, x as refingerprintAfterMutation } from "./build-cache-DrXNCy3T.mjs";
12
- import { s as expoTelemetryEnv, t as cleanLine } from "./server-expo-eQfOdydb.mjs";
13
- import { o as resolveCcache } from "./ccache-Bx5TbxwG.mjs";
14
- import { G as tailLines, U as startBuildHeartbeat, j as HEARTBEAT_INTERVAL_MS, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-J4J8MrAr.mjs";
15
- import { h as detectAppIds, m as detectAndroidPackage } from "./start-_BdJ32cZ.mjs";
16
- import { c as readProductFlavors, h as androidPathRoomRefusal, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-oNwqF5Wb.mjs";
17
- import { t as readDoctorFingerprint } from "./doctor-fingerprint-D3a04Mhu.mjs";
18
- import { i as planEasDevelopmentBuild } from "./eas-build-Dsj93iM9.mjs";
19
- 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-gmouvmJZ.mjs";
20
- 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-BGSCBoib.mjs";
5
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-Dj-WT4BP.mjs";
6
+ import { a as killOnAbort, t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
7
+ import { $t as makeTemporaryDirectory, B as publicUrlSetting, H as realpathInside, W as remoteEasFallbackSetting, at as settingsLayers, en as removeTemporaryEntry, m as defaultAndroidLayout, nt as settingOriginScope, ot as tunnelModeSetting, q as resolveAndroidLayout } from "./settings-BDVI8Ivc.mjs";
8
+ import { v as detectIsExpo } from "./project-DYj-HVx6.mjs";
9
+ import { E as findBuildTool, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, k as hostSystemImageArch, l as androidSystemImageAbi, r as androidBuildToolName } from "./android-DriNoAVy.mjs";
10
+ import { An as checkEasAuth, Bn as bundleInvocation, Nn as loadProjectProvider, Rn as resolveRemote, Tn as processContext, s as resolveCcache } from "./ccache-BWTze1Ls.mjs";
11
+ import { ot as statsProjectKey } from "./workspaces-DFbj07jp.mjs";
12
+ import { G as tailLines, U as startBuildHeartbeat, j as HEARTBEAT_INTERVAL_MS, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-CbCG6C5Z.mjs";
13
+ import { A as untrackedNativeFiles, C as resolveBuild, E as storedAssetManifest, M as captureAssetManifest, N as compareAssetManifests, P as readAssetManifest, S as refingerprintAfterMutation, _ as inputsChangedDuringBuild, a as configInputsChanged, d as filesystemBuildCapability, f as fingerprintDiffRecord, h as gitignoredFingerprintInputs, j as assetDiffReason, k as untrackedMissLine, m as fingerprintProject, n as buildCacheKey, r as changedDuringBuildLine, w as storeBuild } from "./build-cache-gBJ-WKzA.mjs";
14
+ import { s as expoTelemetryEnv, t as cleanLine } from "./server-expo-ABQs2XFA.mjs";
15
+ import { c as readProductFlavors, h as androidPathRoomRefusal, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-DaK2IFyP.mjs";
16
+ import { h as detectAppIds, m as detectAndroidPackage } from "./start-DrPwER_2.mjs";
17
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-o7ZI9YLn.mjs";
18
+ import { i as planEasDevelopmentBuild } from "./eas-build-CjNSWmjo.mjs";
19
+ 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-BDpToDgR.mjs";
20
+ 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-CNg_YsOk.mjs";
21
21
  import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
22
- import { u as resolveAndroidRunPlan } from "./result-7F5hEwQJ.mjs";
23
- import { t as checkEasFallback } from "./eas-fallback-FwkeqqGi.mjs";
24
- import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-DOp8RjDz.mjs";
25
- import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-DrMMdayj.mjs";
26
- import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-BMhXYVDS.mjs";
27
- import { t as planHostedDevice } from "./plan-placement-IiiSQhtz.mjs";
22
+ import { u as resolveAndroidRunPlan } from "./result-CTqBw2Te.mjs";
23
+ import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-CRyBeNsA.mjs";
24
+ import { t as checkEasFallback } from "./eas-fallback-9fqb46kW.mjs";
25
+ import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-CBqYbzYM.mjs";
26
+ import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-Dg2a945i.mjs";
27
+ import { t as planHostedDevice } from "./plan-placement-UxnQjv5Z.mjs";
28
28
  import { constants, existsSync, mkdirSync, readFileSync, renameSync } from "node:fs";
29
29
  import { basename, dirname, isAbsolute, join, relative } from "node:path";
30
30
  import chalk from "chalk";
@@ -614,6 +614,7 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
614
614
  slot,
615
615
  platform: "android",
616
616
  machine: target.machine,
617
+ ...target.placement ? { placement: target.placement } : {},
617
618
  selectors: {
618
619
  ...target.systemImage ? { systemImage: target.systemImage } : {},
619
620
  ...target.deviceProfile ? { deviceProfile: target.deviceProfile } : {}
@@ -638,9 +639,14 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
638
639
  localOnlyFlags: typeof opts.systemImage === "string" ? ["--system-image"] : []
639
640
  }) } : {}
640
641
  });
642
+ if (hostedPlan.kind === "refused") return refuse({
643
+ code: hostedPlan.code,
644
+ message: hostedPlan.message,
645
+ remedy: hostedPlan.remedy
646
+ });
641
647
  if (hostedPlan.kind === "unknown") return refuse({
642
648
  code: "STIM_BAD_ARG",
643
- message: `android.remote is ${target.machine}, and its emulator ABI is unknown here: ${hostedPlan.reason}.`,
649
+ message: `android.remote is ${target.placement ?? target.machine}, and its emulator ABI is unknown here: ${hostedPlan.reason}.`,
644
650
  remedy: "Run `stim android` to build for the remote device, or unset android.remote to plan the owned emulator."
645
651
  });
646
652
  if (hostedPlan.kind === "local" && replacement.refusal) return refuse(replacement.refusal);
@@ -1,14 +1,14 @@
1
- import { _ as spawnDeclared, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { x as sharedCompilationCache } from "./workspace-state-pUg3_RRA.mjs";
1
+ import { _ as spawnDeclared, t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { x as sharedCompilationCache } from "./workspace-state-BjqdjnJR.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-BF5AR2dL.mjs";
5
- import { a as killOnAbort } from "./operation-exec-CUZifp6Z.mjs";
6
- import { C as resolvePackageJson } from "./project-BUu6Is4k.mjs";
7
- import { o as androidHome } from "./android-DTAcRwBC.mjs";
8
- import { r as register } from "./cache-manifest-BEZ9Bpl1.mjs";
4
+ import { l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
5
+ import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
6
+ import { C as resolvePackageJson } from "./project-DYj-HVx6.mjs";
7
+ import { o as androidHome } from "./android-DriNoAVy.mjs";
8
+ import { n as CCACHE_UNAVAILABLE, o as readCcacheActivity } from "./ccache-BWTze1Ls.mjs";
9
+ import { r as register } from "./cache-manifest-DEjqGGat.mjs";
10
+ import { F as compilationCacheSettings, L as parseSwiftVersion, M as SWIFT_PREFIX_MAPPING_MIN_SWIFT, N as buildXcode, R as parseXcodeMajor, U as startBuildHeartbeat, W as swiftPrefixMappingSupported, j as HEARTBEAT_INTERVAL_MS, z as pickXcodeProject } from "./toolchain-CbCG6C5Z.mjs";
9
11
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
10
- import { a as readCcacheActivity, n as CCACHE_UNAVAILABLE } from "./ccache-Bx5TbxwG.mjs";
11
- import { F as compilationCacheSettings, L as parseSwiftVersion, M as SWIFT_PREFIX_MAPPING_MIN_SWIFT, N as buildXcode, R as parseXcodeMajor, U as startBuildHeartbeat, W as swiftPrefixMappingSupported, j as HEARTBEAT_INTERVAL_MS, z as pickXcodeProject } from "./toolchain-J4J8MrAr.mjs";
12
12
  import { createHash } from "node:crypto";
13
13
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync } from "node:fs";
14
14
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
@@ -1,9 +1,9 @@
1
- import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
3
- import { G as resolveAndroidLayout, q as resolveIosProjectDir } from "./settings-CosW5X-S.mjs";
4
- import { v as detectIsExpo } from "./project-BUu6Is4k.mjs";
5
- import { J as bundlerPin, n as androidToolchain, r as androidToolchainAsync, s as iosToolchainAsync, t as androidRequirements } from "./toolchain-J4J8MrAr.mjs";
6
- import { a as reactNativeDoctorFindings, i as mainCheckoutProjectRoot, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as repairCxxLauncherState, t as checkMainCheckout } from "./doctor-OnwP94ne.mjs";
1
+ import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
+ import { l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
3
+ import { Y as resolveIosProjectDir, q as resolveAndroidLayout } from "./settings-BDVI8Ivc.mjs";
4
+ import { v as detectIsExpo } from "./project-DYj-HVx6.mjs";
5
+ import { J as bundlerPin, n as androidToolchain, r as androidToolchainAsync, s as iosToolchainAsync, t as androidRequirements } from "./toolchain-CbCG6C5Z.mjs";
6
+ import { a as reactNativeDoctorFindings, i as mainCheckoutProjectRoot, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as repairCxxLauncherState, t as checkMainCheckout } from "./doctor-F-3VUUyN.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
- import { C as reportSignal } from "./exec-VFRpu1iA.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BF5AR2dL.mjs";
3
- import { U as remoteEasFallbackSetting, W as remoteIosSetting, a as SETTING_SHAPE_REMEDY, it as tunnelModeSetting, p as cacheProviderSettingError, q as resolveIosProjectDir, tt as settingShapeErrors, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
4
- import { Hn as processContext, tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
5
- import { d as runCancellationSignal } from "./native-run-BfIDFKLH.mjs";
6
- import { D as trackedFingerprintPaths, O as untrackedMissLine, a as configInputsChanged, d as fingerprintDiffRecord, g as inputsChangedDuringBuild, h as ignoredFingerprintPaths, m as gitignoredFingerprintInputs, n as buildCacheKey, r as changedDuringBuildLine, u as filesystemBuildCapability, x as refingerprintAfterMutation } from "./build-cache-DrXNCy3T.mjs";
1
+ import { C as reportSignal } from "./exec-aULwtNly.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-Dj-WT4BP.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-BDVI8Ivc.mjs";
4
+ import { Tn as processContext } from "./ccache-BWTze1Ls.mjs";
5
+ import { ot as statsProjectKey } from "./workspaces-DFbj07jp.mjs";
6
+ import { J as bundlerPin, ot as runCancellationSignal, s as iosToolchainAsync } from "./toolchain-CbCG6C5Z.mjs";
7
+ import { O as trackedFingerprintPaths, S as refingerprintAfterMutation, _ as inputsChangedDuringBuild, a as configInputsChanged, d as filesystemBuildCapability, f as fingerprintDiffRecord, g as ignoredFingerprintPaths, h as gitignoredFingerprintInputs, k as untrackedMissLine, n as buildCacheKey, r as changedDuringBuildLine } from "./build-cache-gBJ-WKzA.mjs";
7
8
  import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
8
- import { J as bundlerPin, s as iosToolchainAsync } from "./toolchain-J4J8MrAr.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-CVOCp0Ft.mjs";
10
- import { t as readDoctorFingerprint } from "./doctor-fingerprint-D3a04Mhu.mjs";
11
- import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-Dsj93iM9.mjs";
12
- import { c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-gmouvmJZ.mjs";
13
- import { r as planPayload, t as planCachedBuild } from "./build-plan-DrMMdayj.mjs";
14
- import { t as IosRecipeRefusal } from "./ios-project-Ty5pHl9O.mjs";
15
- import { a as hostedIosSelectors } from "./remote-C8S7FlPF.mjs";
16
- import { a as writeIpTxt, c as iosProcessRuntime, r as copyAppAside, s as iosMetroRuntime, t as DEFAULT_DEPS } from "./dependencies-Dw6wfQdv.mjs";
17
- import { t as planHostedDevice } from "./plan-placement-IiiSQhtz.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-Be0UeVZU.mjs";
10
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-o7ZI9YLn.mjs";
11
+ import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-CjNSWmjo.mjs";
12
+ import { c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-BDpToDgR.mjs";
13
+ import { r as planPayload, t as planCachedBuild } from "./build-plan-CBqYbzYM.mjs";
14
+ import { t as IosRecipeRefusal } from "./ios-project-D8Jcy_br.mjs";
15
+ import { a as hostedIosSelectors } from "./remote-y6n99WMW.mjs";
16
+ import { a as writeIpTxt, c as iosProcessRuntime, r as copyAppAside, s as iosMetroRuntime, t as DEFAULT_DEPS } from "./dependencies-BGokZ-Ng.mjs";
17
+ import { t as planHostedDevice } from "./plan-placement-UxnQjv5Z.mjs";
18
18
  import { rmSync } from "node:fs";
19
19
  import chalk from "chalk";
20
20
  //#region src/integrations/react-native-ios-plan.ts
@@ -158,6 +158,7 @@ async function planReactNativeIos(root, opts, d, schemeProblem, { context: setti
158
158
  slot,
159
159
  platform: "ios",
160
160
  machine: iosRemote.machine,
161
+ ...iosRemote.placement ? { placement: iosRemote.placement } : {},
161
162
  selectors: hostedIosSelectors(resolveDeviceType(opts.deviceType, settings), resolveRuntime(opts.runtime, settings)),
162
163
  sameKey: (choice) => keyArch("runtime" in choice ? choice.architecture : null) === arch,
163
164
  ...remoteEasFallbackSetting(settings) ? { eas: () => d.checkEasFallback({
@@ -174,9 +175,14 @@ async function planReactNativeIos(root, opts, d, schemeProblem, { context: setti
174
175
  localOnlyFlags: typeof opts.runtime === "string" ? ["--runtime"] : []
175
176
  }) } : {}
176
177
  });
178
+ if (planned.kind === "refused") return refuse({
179
+ code: planned.code,
180
+ message: planned.message,
181
+ remedy: planned.remedy
182
+ });
177
183
  if (planned.kind === "unknown") return refuse({
178
184
  code: "STIM_BAD_ARG",
179
- message: `ios.remote is ${iosRemote.machine}, and its simulator architecture is unknown here: ${planned.reason}.`,
185
+ message: `ios.remote is ${iosRemote.placement ?? iosRemote.machine}, and its simulator architecture is unknown here: ${planned.reason}.`,
180
186
  remedy: "Run `stim ios` to build for the remote device, or unset ios.remote to plan the owned simulator."
181
187
  });
182
188
  placement = planned.placement;
@@ -1,4 +1,4 @@
1
- import { bt as gitCommonDirOnDisk } from "./settings-CosW5X-S.mjs";
1
+ import { St as gitCommonDirOnDisk } from "./settings-BDVI8Ivc.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,4 +1,4 @@
1
- import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
1
+ import { S as process_identity_exports } from "./exec-aULwtNly.mjs";
2
2
  import { readMacosRecord } from "@stim-cli/core/state";
3
3
  //#region src/macos/registration.ts
4
4
  function waitForMacosRegistration(root, launchId, child, deadline) {
@@ -1,2 +1,2 @@
1
- import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-CCR7KC_l.mjs";
1
+ import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-fUdkH2_p.mjs";
2
2
  export { reloadCommand as default, registerReload, runReload };
@@ -1,19 +1,19 @@
1
- import { c as throwIfCancelled, i as loadScaledBudgetMs, o as cancellableSleep, s as cancelledError } from "./exec-VFRpu1iA.mjs";
2
- import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
3
- import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-BktkY_zC.mjs";
4
- import { f as refuseNoProject, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
- import { Pt as repoRootAsync } from "./settings-CosW5X-S.mjs";
6
- import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-BUu6Is4k.mjs";
7
- import { nt as resolveOwnedAvdSerialAsync } from "./android-DTAcRwBC.mjs";
8
- import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-CjC10t6E.mjs";
9
- import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-C1i2nMOP.mjs";
10
- import { kn as iosAppProcess, vn as androidAppProcess, wn as ensureMetroReverse } from "./budget-k2mZGvvk.mjs";
11
- import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-WxpDJ5T1.mjs";
12
- import { f as probeHostedSession } from "./hosted-client-fHO8yqzc.mjs";
13
- import { r as readHostedNative } from "./ios-state-Cw7-WQf2.mjs";
14
- import { r as reopenHostedAndroidMetro } from "./hosted-android-Bk54ej6n.mjs";
15
- import { n as nativeRunCommand } from "./slot-launch-CYCEhfBY.mjs";
16
- import { n as sendToOwnedPage, t as liveWebRecord } from "./page-CzEA_-5_.mjs";
1
+ import { c as throwIfCancelled, i as loadScaledBudgetMs, o as cancellableSleep, s as cancelledError } from "./exec-aULwtNly.mjs";
2
+ import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-BjqdjnJR.mjs";
3
+ import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-Cn94Jc0g.mjs";
4
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
5
+ import { Lt as repoRootAsync } from "./settings-BDVI8Ivc.mjs";
6
+ import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-DYj-HVx6.mjs";
7
+ import { nt as resolveOwnedAvdSerialAsync } from "./android-DriNoAVy.mjs";
8
+ import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-CvyD-xwe.mjs";
9
+ import { fn as iosAppProcess, sn as ensureMetroReverse, tn as androidAppProcess } from "./ccache-BWTze1Ls.mjs";
10
+ import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-BX1y5syV.mjs";
11
+ import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-E26qSpkb.mjs";
12
+ import { f as probeHostedSession } from "./hosted-client-D7Pk_Oo1.mjs";
13
+ import { r as readHostedNative } from "./ios-state-BZ03NFgF.mjs";
14
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-BMKzUNnY.mjs";
15
+ import { n as nativeRunCommand } from "./slot-launch-0l7RqSpr.mjs";
16
+ import { n as sendToOwnedPage, t as liveWebRecord } from "./page-CQJlcj3x.mjs";
17
17
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
18
18
  import { WebSocket } from "ws";
19
19
  import chalk from "chalk";