stim 1.24.0 → 1.26.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 (162) hide show
  1. package/README.md +1 -1
  2. package/dist/{acquire-artifact-CEs02U2o.mjs → acquire-artifact-DVsvSwf7.mjs} +1 -1
  3. package/dist/{act-Cyvm8xYc.mjs → act-C-BqJEpu.mjs} +158 -36
  4. package/dist/{activity-Dq3ZcdD8.mjs → activity-Lnb_EoRY.mjs} +4 -5
  5. package/dist/{agent-device-usage-output-CccomeE0.mjs → agent-device-usage-output-DbXy5tg8.mjs} +4 -4
  6. package/dist/{android-CX5IcRuf.mjs → android-B5P81yI-.mjs} +1 -1
  7. package/dist/{android-DcztblCT.mjs → android-CSbLRD53.mjs} +5 -5
  8. package/dist/{android-BZppyPe_.mjs → android-CiNQw3kq.mjs} +81 -52
  9. package/dist/{android-882m4hxX.mjs → android-DTAcRwBC.mjs} +81 -34
  10. package/dist/{android-cas-BtCOrNqb.mjs → android-cas-BTVhZ0Qs.mjs} +4 -4
  11. package/dist/{android-project-DVWyCbWU.d.mts → android-project-DUGMbq28.d.mts} +61 -3
  12. package/dist/api.d.mts +8 -5
  13. package/dist/api.mjs +27 -27
  14. package/dist/apk-signed-tail-B46U9hXc.mjs +142 -0
  15. package/dist/{artifact-BR5VNArK.mjs → artifact-BxREhAaV.mjs} +25 -19
  16. package/dist/{artifact-Bdt_n9Jc.mjs → artifact-CsAP6AGK.mjs} +36 -21
  17. package/dist/{attempt-DW-mQqM7.mjs → attempt-ClyJlZPT.mjs} +4 -2
  18. package/dist/{browser-web-ycg9qWB8.mjs → browser-web-rYPyqhTf.mjs} +11 -12
  19. package/dist/{budget-dPGuhNai.mjs → budget-k2mZGvvk.mjs} +242 -38
  20. package/dist/{build-CaF574eS.mjs → build-DPhApsjV.mjs} +28 -24
  21. package/dist/{build-cache-HFUQ9eLz.mjs → build-cache-DrXNCy3T.mjs} +123 -23
  22. package/dist/{build-plan-JsDUq4w1.mjs → build-plan-DrMMdayj.mjs} +5 -5
  23. package/dist/{cache-manifest-BPXRONJz.mjs → cache-manifest-BEZ9Bpl1.mjs} +1 -1
  24. package/dist/cache-manifest.mjs +1 -1
  25. package/dist/{ccache-CCn1S6qG.mjs → ccache-Bx5TbxwG.mjs} +6 -6
  26. package/dist/{cli-xqAidP7O.mjs → cli-BBKFGOFl.mjs} +19 -19
  27. package/dist/cli.mjs +1 -1
  28. package/dist/{client-18-ZowoT.mjs → client-D9CaRks-.mjs} +55 -71
  29. package/dist/collector-run.mjs +4 -4
  30. package/dist/{command-output-DxC0k2rk.mjs → command-output-BF5AR2dL.mjs} +1 -1
  31. package/dist/{config-BZhXY15H.mjs → config-BktkY_zC.mjs} +321 -15
  32. package/dist/{launch-BVlyQw3T.mjs → dependencies-Dw6wfQdv.mjs} +259 -256
  33. package/dist/{dependency-state-C56ll9hY.mjs → dependency-state-DFB41vfr.mjs} +1 -1
  34. package/dist/{dev-client-w_fok0Ek.mjs → dev-client-DXR_tPVY.mjs} +2 -2
  35. package/dist/{device-BktRGdjS.mjs → device-BK-zwyd_.mjs} +64 -33
  36. package/dist/{device-4RUugw5X.mjs → device-BcYeHSFu.mjs} +14 -14
  37. package/dist/{device-capacity-Ic-kdmEV.mjs → device-capacity-DCSvUF0l.mjs} +10 -17
  38. package/dist/device-host-worker.mjs +11 -13
  39. package/dist/{device-ios-DzpSlZyd.mjs → device-ios-BLGfXQeK.mjs} +68 -25
  40. package/dist/{device-lease-run-DUtkbqBQ.mjs → device-lease-run-BmvIl7bI.mjs} +5 -5
  41. package/dist/{device-pool-CgBHk401.mjs → device-pool-Dluix4H3.mjs} +3 -3
  42. package/dist/{doctor-DZgpqR6J.mjs → doctor-Bhg1ii70.mjs} +14 -14
  43. package/dist/{doctor-BZ6oxNum.mjs → doctor-Cp-BhzTS.mjs} +1 -1
  44. package/dist/{doctor-C33AzVfR.mjs → doctor-OnwP94ne.mjs} +81 -26
  45. package/dist/{doctor-fingerprint-zlujA1Gs.mjs → doctor-fingerprint-D3a04Mhu.mjs} +8 -2
  46. package/dist/doctor-fingerprint.mjs +1 -1
  47. package/dist/{doctor-watchman-B453A231.mjs → doctor-watchman-BStK05nt.mjs} +4 -4
  48. package/dist/{eas-build-CxKUNHsb.mjs → eas-build-Dsj93iM9.mjs} +2 -2
  49. package/dist/{eas-fallback-LMxk9Kw0.mjs → eas-fallback-FwkeqqGi.mjs} +13 -12
  50. package/dist/{eas-session-ledger-Ck6YXPAO.mjs → eas-session-ledger-B5vygTiD.mjs} +5 -5
  51. package/dist/{error-diagnostics-BkKCZq4P.mjs → error-diagnostics-BOOm9Db7.mjs} +8 -8
  52. package/dist/{errors-ccaPc4ox.mjs → errors-DHm_U5gv.mjs} +2 -1
  53. package/dist/{gc-DDWEAj0w.mjs → gc-C_79zvz4.mjs} +2 -2
  54. package/dist/{gc-yVKpAOKM.mjs → gc-ldgr-hXU.mjs} +74 -43
  55. package/dist/{guide-Bggftwc5.mjs → guide-D7K0X6KG.mjs} +374 -78
  56. package/dist/{hosted-android-D4dweBof.mjs → hosted-android-Bk54ej6n.mjs} +3 -3
  57. package/dist/{hosted-client-BBTVe3X6.mjs → hosted-client-fHO8yqzc.mjs} +5 -5
  58. package/dist/{hosted-ios-Sn0djzg8.mjs → hosted-ios-D55QhYaD.mjs} +1 -1
  59. package/dist/{hosted-logs-CYIZ5ubJ.mjs → hosted-logs-BfbmDM4M.mjs} +17 -11
  60. package/dist/hosted-logs-sync-B0pvmOk-.mjs +195 -0
  61. package/dist/{hosted-macos-CXjsUNBR.mjs → hosted-macos-CPl0OZ9h.mjs} +5 -5
  62. package/dist/{hosted-native-Doxbfzem.mjs → hosted-native-CpDB3-PO.mjs} +6 -7
  63. package/dist/{idle-shutdown-BInjLKqm.mjs → idle-shutdown-FfxL1KdG.mjs} +22 -9
  64. package/dist/{ios-BItP6lkn.mjs → ios-B7-lToDu.mjs} +8 -8
  65. package/dist/{ios-CVUFFZ6C.mjs → ios-WxpDJ5T1.mjs} +129 -14
  66. package/dist/{ios-device-BI38NFFH.mjs → ios-device-CsyryvpT.mjs} +1 -1
  67. package/dist/{ios-B1FXRCMX.mjs → ios-ftxdQbJS.mjs} +84 -51
  68. package/dist/{ios-project-KYqeJURj.mjs → ios-project-Ty5pHl9O.mjs} +6 -6
  69. package/dist/{ios-state-DlElquYD.mjs → ios-state-Cw7-WQf2.mjs} +1 -1
  70. package/dist/{js-swap-BvrQvXHY.mjs → js-swap-BMhXYVDS.mjs} +4 -4
  71. package/dist/{launch-SfzGH_s9.mjs → launch-DOp8RjDz.mjs} +32 -27
  72. package/dist/{logs-DXE32kyb.mjs → logs-dQDki6Tt.mjs} +9 -173
  73. package/dist/{logs-ovlU7m7N.mjs → logs-s1dRIG1E.mjs} +85 -36
  74. package/dist/{macos-B3BveDrU.mjs → macos-B0VEV3Gf.mjs} +1 -1
  75. package/dist/{macos-CCfhb-jT.mjs → macos-DBBPNnIA.mjs} +18 -19
  76. package/dist/macos-run.mjs +1 -1
  77. package/dist/maintenance-run.mjs +28 -11
  78. package/dist/{metro-Bu8LBfzS.mjs → metro-CjC10t6E.mjs} +2 -2
  79. package/dist/{metro-gateway-DtsOy-0P.mjs → metro-gateway-B6_PgD0L.mjs} +2 -3
  80. package/dist/{named-ports-BWDuU5oQ.mjs → named-ports-BG0j1X4g.mjs} +2 -2
  81. package/dist/{native-android-96BBizbq.mjs → native-android-CL2NGiik.mjs} +17 -17
  82. package/dist/{native-gradle-artifact-inputs-BcLYBZil.mjs → native-gradle-artifact-inputs-btSUulme.mjs} +3 -3
  83. package/dist/{native-run-BmH7U8pr.mjs → native-run-BfIDFKLH.mjs} +2 -3
  84. package/dist/{native-runtime-DgtJkzIa.mjs → native-runtime-Dq3RBcON.mjs} +6 -7
  85. package/dist/{native-xcode-inputs-irplbQb0.mjs → native-xcode-inputs-BW7H8JGu.mjs} +2 -2
  86. package/dist/{native-xcode-ios-BY-6hh6M.mjs → native-xcode-ios-CBXJAxfC.mjs} +18 -18
  87. package/dist/offload-worker.d.mts +7 -2
  88. package/dist/offload-worker.mjs +34 -23
  89. package/dist/{ownership-DxlZGDcV.mjs → ownership-BjYvMNX_.mjs} +2 -2
  90. package/dist/{phone-reverses-BdsdesVF.mjs → phone-reverses-lmj6kcPm.mjs} +3 -3
  91. package/dist/{placement-log-DUvqqsB-.mjs → placement-log-DIFPQAXp.mjs} +1 -1
  92. package/dist/{plan-placement-4axc0Hs7.mjs → plan-placement-IiiSQhtz.mjs} +3 -3
  93. package/dist/{ports-D-E_OiAO.mjs → ports-C2_w1Z0Z.mjs} +3 -3
  94. package/dist/prebuild-gmouvmJZ.mjs +1247 -0
  95. package/dist/{project-Dz-hWkb-.mjs → project-BUu6Is4k.mjs} +15 -16
  96. package/dist/{react-native-android-DOinxgwB.mjs → react-native-android-Cgg99REN.mjs} +48 -33
  97. package/dist/{react-native-build-AuCu-aAP.mjs → react-native-build-oNwqF5Wb.mjs} +8 -8
  98. package/dist/{react-native-doctor-2ivJUmwZ.mjs → react-native-doctor-BhA3KUte.mjs} +49 -8
  99. package/dist/{react-native-ios-D5zTIuH8.mjs → react-native-ios-B-nf4rjN.mjs} +40 -25
  100. package/dist/{recordings-CdPwYwvs.mjs → recordings-BldzVKq0.mjs} +1 -1
  101. package/dist/{reload-Ck9RJeSq.mjs → reload-C9OduiNc.mjs} +1 -1
  102. package/dist/{reload-C1TTVesC.mjs → reload-CCR7KC_l.mjs} +14 -14
  103. package/dist/{remote-DEZ7AOVq.mjs → remote-C8S7FlPF.mjs} +16 -7
  104. package/dist/{result-DqBrb12U.mjs → result-7F5hEwQJ.mjs} +17 -17
  105. package/dist/{run-BIwoU44q.mjs → run-BqB0v3pt.mjs} +1 -1
  106. package/dist/{selection-BLtvaqxc.mjs → selection-BNPBZ6T5.mjs} +157 -44
  107. package/dist/{server-bare-Z1ToVLPn.mjs → server-bare-A75rDIdD.mjs} +55 -3
  108. package/dist/{server-command-C0pmjNdG.mjs → server-command-CssKFOD7.mjs} +4 -4
  109. package/dist/{server-expo-Tt_hLRpy.mjs → server-expo-eQfOdydb.mjs} +8 -6
  110. package/dist/server-expo-wvcj5tiZ.mjs +2 -0
  111. package/dist/{settings-RKwY33wv.mjs → settings-CosW5X-S.mjs} +59 -61
  112. package/dist/{settings-kkt0vP4w.mjs → settings-OaGQF-ri.mjs} +1 -1
  113. package/dist/{settings-write--gj6MACV.mjs → settings-write-QjYfSrjF.mjs} +5 -5
  114. package/dist/settings.schema.json +71 -6
  115. package/dist/{simslim-CdWKT3vA.mjs → simslim-Bax1qcxu.mjs} +22 -6
  116. package/dist/{slot-launch-A1BgotaM.mjs → slot-launch-CYCEhfBY.mjs} +6 -6
  117. package/dist/{stage-ERTMh88n.mjs → stage-jKQ7CP_B.mjs} +1 -1
  118. package/dist/{start-Bmg_qmHi.mjs → start-C_wefNKB.mjs} +1 -1
  119. package/dist/{start-BKGrEhzG.mjs → start-_BdJ32cZ.mjs} +9 -10
  120. package/dist/{state-B1ig0Kqy.mjs → state-C1i2nMOP.mjs} +2 -3
  121. package/dist/{state-BfAltYJP.mjs → state-C4OdpOTF.mjs} +1 -2
  122. package/dist/{stats-B-ckuiUg.mjs → stats-tEpEEH-u.mjs} +4 -4
  123. package/dist/{status-Pw-807f0.mjs → status-B9M7x4CZ.mjs} +1 -1
  124. package/dist/{status-Fect2w9R.mjs → status-CRXz-Gtj.mjs} +1 -1
  125. package/dist/{status-DfFp6a76.mjs → status-DQrqodLj.mjs} +22 -23
  126. package/dist/{status-watch-XC7F-AMf.mjs → status-watch-B5wDIH_o.mjs} +4 -4
  127. package/dist/status-worker.mjs +1 -1
  128. package/dist/{stim-desktop-DS0mzR8U.mjs → stim-desktop-6Dqp-gjX.mjs} +1 -1
  129. package/dist/{stop-BFu7X_Do.mjs → stop-CmdNhGlC.mjs} +2 -2
  130. package/dist/{stop-CL1kDHds.mjs → stop-DRqQVqDJ.mjs} +74 -53
  131. package/dist/{stop-DhclRwOO.mjs → stop-ySNQHXMG.mjs} +4 -5
  132. package/dist/supervisor-run.d.mts +1 -0
  133. package/dist/supervisor-run.mjs +15 -16
  134. package/dist/{support-B3tzVhKn.mjs → support-BGSCBoib.mjs} +4 -4
  135. package/dist/{support-B1W-hmC2.mjs → support-CVOCp0Ft.mjs} +15 -12
  136. package/dist/{swiftpm-artifact-inputs-BWYPj9Sn.mjs → swiftpm-artifact-inputs-CfUzt_0Z.mjs} +1 -1
  137. package/dist/{swiftpm-macos-BVCP5mO4.mjs → swiftpm-macos-x6HPpl_2.mjs} +10 -10
  138. package/dist/toolchain-DoavrvIA.mjs +2 -0
  139. package/dist/toolchain-J4J8MrAr.mjs +2107 -0
  140. package/dist/trigger-DzJu208Q.mjs +2 -0
  141. package/dist/{trigger-CBMe2YLH.mjs → trigger-KVaWWNyn.mjs} +1 -1
  142. package/dist/{warm-progress-ol0ZypEu.mjs → warm-progress-DvhTX_eu.mjs} +3 -4
  143. package/dist/web-BFLueSh-.mjs +2 -0
  144. package/dist/{web-BH7peScT.mjs → web-Bihbf7-u.mjs} +8 -9
  145. package/dist/web-run.mjs +4 -4
  146. package/dist/{workspace-state-CeBpIZgr.mjs → workspace-state-pUg3_RRA.mjs} +45 -7
  147. package/dist/{workspaces-CSV2Orf4.mjs → workspaces-g2lhdBXF.mjs} +17 -17
  148. package/dist/{worktree-Dw8kfacb.mjs → worktree-BKuklFh_.mjs} +34 -31
  149. package/dist/{worktree-DEDUzO_L.mjs → worktree-Bm4cb-nU.mjs} +1 -1
  150. package/package.json +8 -8
  151. package/shim/bundle-response.cjs +53 -1
  152. package/shim/bundle-response.d.cts +1 -1
  153. package/shim/expo-metro-config.cjs +23 -1
  154. package/dist/created-devices-D2Aca-xu.mjs +0 -52
  155. package/dist/paths-DQtTgsBf.mjs +0 -42
  156. package/dist/prebuild-DmVCf5xb.mjs +0 -501
  157. package/dist/server-expo-CEntXzRw.mjs +0 -2
  158. package/dist/toolchain-BjgKdoEf.mjs +0 -2
  159. package/dist/toolchain-D3bmRMia.mjs +0 -897
  160. package/dist/trigger-BLsHgAGR.mjs +0 -2
  161. package/dist/web-BdOFlTJr.mjs +0 -2
  162. package/dist/xcode-DHu41qQ4.mjs +0 -910
@@ -1,12 +1,11 @@
1
- import { P as formatBytes } from "./config-BZhXY15H.mjs";
2
- import { Dt as deviceSweepIsScoped, u as resolveBudget } from "./budget-dPGuhNai.mjs";
3
- import { N as memoryCulpritsUnder, R as memoryCulpritAdvice } from "./ios-CVUFFZ6C.mjs";
4
- import { T as maintenanceLogger } from "./client-18-ZowoT.mjs";
1
+ import { P as formatBytes } from "./config-BktkY_zC.mjs";
2
+ import { E as maintenanceLogger, T as openGcLog, jt as deviceSweepIsScoped, u as resolveBudget, w as maintenanceItem } from "./budget-k2mZGvvk.mjs";
3
+ import { B as memoryCulpritAdvice, F as memoryCulpritsUnder } from "./ios-WxpDJ5T1.mjs";
5
4
  import { t as resolveMaintenanceSettings } from "./settings-Djl-mpjX.mjs";
6
5
  import { t as relaunchWithLogFile } from "./detached-entry-KmieOKgN.mjs";
7
- import { D as measureDisk, F as levelStillShort, I as lowestFree, M as sizeScanDeferred, N as diskPressureLevel, P as levelFloors, j as measureSizes, k as measurePressure } from "./worktree-Dw8kfacb.mjs";
8
- import { i as plannedMaintenance, m as measureOwnedDevices, n as diskRecovered, o as triggeringRoot, r as executeAction } from "./act-Cyvm8xYc.mjs";
9
- import { r as due, t as capChildLog } from "./attempt-DW-mQqM7.mjs";
6
+ import { D as measureDisk, F as levelStillShort, I as lowestFree, M as sizeScanDeferred, N as diskPressureLevel, P as levelFloors, j as measureSizes, k as measurePressure } from "./worktree-BKuklFh_.mjs";
7
+ import { i as plannedMaintenance, m as measureOwnedDevices, n as diskRecovered, o as triggeringRoot, r as executeAction } from "./act-C-BqJEpu.mjs";
8
+ import { r as due, t as capChildLog } from "./attempt-ClyJlZPT.mjs";
10
9
  import { releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
11
10
  import { randomBytes } from "node:crypto";
12
11
  import { appendFileSync, mkdirSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
@@ -82,6 +81,7 @@ const EXECUTION_ORDER = {
82
81
  "would-clear-build-dirs": 3,
83
82
  "would-empty-cache": 3,
84
83
  "would-remove-worktree": 4,
84
+ "would-shutdown-device": 5,
85
85
  "would-stop-workspace": 5,
86
86
  "would-delete-devices": 5,
87
87
  "would-delete-dependencies": 6,
@@ -118,6 +118,7 @@ function describeDone(action) {
118
118
  case "would-stop-gradle-daemons": return "Stopped idle Gradle and Kotlin daemons";
119
119
  case "would-delete-gradle-version": return `Deleted the unpinned Gradle ${action.target} caches and distributions`;
120
120
  case "would-stop-workspace": return `Stopped ${name} and deleted its owned devices`;
121
+ case "would-shutdown-device": return `Shut down the idle device ${action.target} of ${name}`;
121
122
  default: return `Unregistered the stale cache ${action.target}`;
122
123
  }
123
124
  }
@@ -135,6 +136,7 @@ async function runMaintenance(trigger) {
135
136
  }
136
137
  if (!claim) return;
137
138
  let logger;
139
+ let gcLog;
138
140
  try {
139
141
  const settings = resolveMaintenanceSettings();
140
142
  if (settings.mode === "off") return;
@@ -165,6 +167,11 @@ async function runMaintenance(trigger) {
165
167
  } catch (error) {
166
168
  noteWriteError(error);
167
169
  }
170
+ gcLog = openGcLog({
171
+ trigger: "maintenance",
172
+ runId: `p-${claim.claimId}`,
173
+ via: trigger
174
+ });
168
175
  const record = (event, level, msg, fields = {}) => {
169
176
  let entry = null;
170
177
  try {
@@ -196,7 +203,7 @@ async function runMaintenance(trigger) {
196
203
  delete state.deferredAt?.[check];
197
204
  keepState();
198
205
  try {
199
- if (check === "worktree" || check === "sweep") continue;
206
+ if (check === "worktree" || check === "sweep" || check === "idle") continue;
200
207
  if (check === "pressure") {
201
208
  state.pressure = measurePressure(settings, state.pressure, state.lastAt[check]);
202
209
  state.pressure.diskLevel = diskPressureLevel(lowestFree(state.pressure.disk), budget, settings);
@@ -245,11 +252,13 @@ async function runMaintenance(trigger) {
245
252
  });
246
253
  }
247
254
  }
255
+ const plannedWorktrees = ran.has("worktree") || ran.has("sweep") && settings.removeFinishedWorktrees && settings.removeIdleWorktrees;
248
256
  let result;
249
257
  try {
250
258
  result = await plannedMaintenance(state.pressure, state.sizes, settings, {
251
259
  sweep: ran.has("sweep"),
252
- worktrees: ran.has("worktree")
260
+ worktrees: plannedWorktrees,
261
+ idle: ran.has("idle")
253
262
  });
254
263
  } catch (error) {
255
264
  const message = error instanceof Error ? error.message : String(error);
@@ -299,6 +308,7 @@ async function runMaintenance(trigger) {
299
308
  action,
300
309
  outcome
301
310
  });
311
+ if (outcome.status !== "kept") gcLog?.record(maintenanceItem(action, outcome));
302
312
  const fields = {
303
313
  action: {
304
314
  kind: executedKind(action),
@@ -318,6 +328,7 @@ async function runMaintenance(trigger) {
318
328
  });
319
329
  } else if (!loggedSkips.has(action.target)) {
320
330
  loggedSkips.add(action.target);
331
+ gcLog?.record(maintenanceItem(action, outcome));
321
332
  record("maintenance_skip", "info", `Kept ${action.target}: ${outcome.detail}`, {
322
333
  target: action.target,
323
334
  reason: outcome.detail,
@@ -327,7 +338,7 @@ async function runMaintenance(trigger) {
327
338
  }
328
339
  return results;
329
340
  }
330
- const retained = state.plan.filter((action) => (action.check === "sweep" || action.check === "worktree") && !ran.has(action.check));
341
+ const retained = state.plan.filter((action) => action.check === "sweep" && !ran.has("sweep") || action.check === "worktree" && !plannedWorktrees || action.kind === "would-shutdown-device" && action.check === void 0 && !ran.has("idle"));
331
342
  const previousActions = new Set(state.plan.map(actionKey));
332
343
  const previousSkips = new Set(state.skipKeys ?? []);
333
344
  const nextSkips = new Set(result.skips.map((skip) => skip.target));
@@ -371,7 +382,13 @@ async function runMaintenance(trigger) {
371
382
  if (done.length || measuredSizes || blockedChanged || (state.pressure?.diskLevel ?? 0) > 0) record("maintenance_pass", state.lastPass.blocked.length ? "warn" : "info", `Pass: ${done.length} actions, ${formatBytes(freedBytes)} freed${state.lastPass.blocked.length ? `; ${state.lastPass.blocked.join("; ")}` : ""}`, { ...state.lastPass });
372
383
  } else {
373
384
  const blocked = [...result.blocked, ...failures];
374
- const planned = [...result.actions, ...retained];
385
+ const keys = /* @__PURE__ */ new Set();
386
+ const planned = [...result.actions, ...retained].filter((action) => {
387
+ const key = actionKey(action);
388
+ if (keys.has(key)) return false;
389
+ keys.add(key);
390
+ return true;
391
+ });
375
392
  const nextActions = new Set(planned.map(actionKey));
376
393
  const changed = !state.lastPass || !sameSet(previousActions, nextActions) || !sameSet(previousSkips, nextSkips) || !sameSet(new Set(state.lastPass.blocked.map(stableText)), new Set(blocked.map(stableText)));
377
394
  for (const action of result.actions) {
@@ -1,7 +1,7 @@
1
1
  import { S as process_identity_exports, l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { F as isOnMountedVolume, I as listMountedVolumes, O as withConfigLockAsync, _ as loadConfig, n as allMetroPorts, r as claimMetroPort, x as releaseMetroPort } from "./config-BZhXY15H.mjs";
2
+ import { r as readWorkspaceState } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { F as isOnMountedVolume, I as listMountedVolumes, O as withConfigLockAsync, _ as loadConfig, n as allMetroPorts, r as claimMetroPort, x as releaseMetroPort } from "./config-BktkY_zC.mjs";
3
4
  import { t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
4
- import { r as readWorkspaceState } from "./workspace-state-CeBpIZgr.mjs";
5
5
  import { sep } from "path";
6
6
  import { existsSync, readlinkSync, realpathSync } from "fs";
7
7
  import { readFile } from "node:fs/promises";
@@ -1,7 +1,6 @@
1
1
  import { S as process_identity_exports, c as throwIfCancelled, s as cancelledError } from "./exec-VFRpu1iA.mjs";
2
- import { g as workspaceStateFile$1 } from "./paths-DQtTgsBf.mjs";
3
- import { ot as tailscaleStatusAsync } from "./config-BZhXY15H.mjs";
4
- import { l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-CeBpIZgr.mjs";
2
+ import { j as workspaceStateFile$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { ct as tailscaleStatusAsync } from "./config-BktkY_zC.mjs";
5
4
  import { randomBytes, randomUUID } from "node:crypto";
6
5
  import { statSync, watch } from "node:fs";
7
6
  import { HOSTED_METRO_REQUESTS_KEY, findPeer, hostedMetroGateways, hostedMetroRequests, isJsonObject, parseMachine } from "@stim-cli/core/state";
@@ -1,6 +1,6 @@
1
1
  import { S as process_identity_exports, t as getExecutor, u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
2
- import { C as saveConfig, O as withConfigLockAsync, _ as loadConfig, c as ensureConfig, d as getConfigDir, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { f as signalProcessTree, m as createPortProbe, s as parseNetstatPids } from "./metro-Bu8LBfzS.mjs";
2
+ import { C as saveConfig, O as withConfigLockAsync, _ as loadConfig, c as ensureConfig, d as getConfigDir, p as getProject } from "./config-BktkY_zC.mjs";
3
+ import { f as signalProcessTree, m as createPortProbe, s as parseNetstatPids } from "./metro-CjC10t6E.mjs";
4
4
  import { realpathSync } from "node:fs";
5
5
  //#region src/named-ports.ts
6
6
  const FIRST_PORT = 8900;
@@ -1,21 +1,21 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { d as workspaceDir, i as sharedBuildCache } from "./paths-DQtTgsBf.mjs";
3
- import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-BZhXY15H.mjs";
4
- import { tt as settingValueAt } from "./settings-RKwY33wv.mjs";
5
- import { B as ownedAvdDeviceProfile, E as findBuildTool, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, l as androidSystemImageAbi, o as androidHome } from "./android-882m4hxX.mjs";
6
- import { r as register } from "./cache-manifest-BPXRONJz.mjs";
7
- import { Z as statsProjectKey } from "./budget-dPGuhNai.mjs";
8
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
9
- import { s as entryDir, t as artifactIn, y as resolveBuild } from "./build-cache-HFUQ9eLz.mjs";
10
- import { o as resolveCcache } from "./ccache-CCn1S6qG.mjs";
11
- import { h as gradleOffloadInputs, y as nativeGradleTransfer } from "./client-18-ZowoT.mjs";
12
- import { r as androidToolchainAsync } from "./toolchain-D3bmRMia.mjs";
13
- import { d as buildGradle, l as androidSdkRefusal } from "./react-native-build-AuCu-aAP.mjs";
14
- import { s as explainBuildMiss, u as skippedMissReason } from "./prebuild-DmVCf5xb.mjs";
15
- import { u as resolveAndroidRunPlan } from "./result-DqBrb12U.mjs";
16
- import { n as androidProcessRuntime } from "./launch-SfzGH_s9.mjs";
17
- import { n as planFlagRefusal, r as planPayload } from "./build-plan-JsDUq4w1.mjs";
18
- import { a as nativeGradleWorkerArtifactIdentity, n as gradleArtifactInputs, r as nativeGradleArtifactSnapshot, t as NATIVE_GRADLE_CACHE_LIMIT } from "./native-gradle-artifact-inputs-BcLYBZil.mjs";
2
+ import { E as workspaceDir, y as sharedBuildCache } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-BktkY_zC.mjs";
4
+ import { nt as settingValueAt } from "./settings-CosW5X-S.mjs";
5
+ import { B as ownedAvdDeviceProfile, E as findBuildTool, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, l as androidSystemImageAbi, o as androidHome } from "./android-DTAcRwBC.mjs";
6
+ import { r as register } from "./cache-manifest-BEZ9Bpl1.mjs";
7
+ import { tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
8
+ import { d as runCancellationSignal } from "./native-run-BfIDFKLH.mjs";
9
+ import { S as resolveBuild, s as entryDir, t as artifactIn } from "./build-cache-DrXNCy3T.mjs";
10
+ import { o as resolveCcache } from "./ccache-Bx5TbxwG.mjs";
11
+ import { r as androidToolchainAsync } from "./toolchain-J4J8MrAr.mjs";
12
+ import { h as gradleOffloadInputs, y as nativeGradleTransfer } from "./client-D9CaRks-.mjs";
13
+ import { d as buildGradle, l as androidSdkRefusal } from "./react-native-build-oNwqF5Wb.mjs";
14
+ import { s as explainBuildMiss, u as skippedMissReason } from "./prebuild-gmouvmJZ.mjs";
15
+ import { u as resolveAndroidRunPlan } from "./result-7F5hEwQJ.mjs";
16
+ import { n as androidProcessRuntime } from "./launch-DOp8RjDz.mjs";
17
+ import { n as planFlagRefusal, r as planPayload } from "./build-plan-DrMMdayj.mjs";
18
+ import { a as nativeGradleWorkerArtifactIdentity, n as gradleArtifactInputs, r as nativeGradleArtifactSnapshot, t as NATIVE_GRADLE_CACHE_LIMIT } from "./native-gradle-artifact-inputs-btSUulme.mjs";
19
19
  import { createHash } from "node:crypto";
20
20
  import { createReadStream, createWriteStream, existsSync, readFileSync, statSync } from "node:fs";
21
21
  import { tmpdir } from "node:os";
@@ -1,8 +1,8 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
2
  import { r as childEnvironment } from "./operation-exec-CUZifp6Z.mjs";
3
- import { o as androidHome } from "./android-882m4hxX.mjs";
4
- import { n as buildCacheKey } from "./build-cache-HFUQ9eLz.mjs";
5
- import { _ as nativeGradleLocalSourceDigest, h as gradleOffloadInputs } from "./client-18-ZowoT.mjs";
3
+ import { o as androidHome } from "./android-DTAcRwBC.mjs";
4
+ import { n as buildCacheKey } from "./build-cache-DrXNCy3T.mjs";
5
+ import { _ as nativeGradleLocalSourceDigest, h as gradleOffloadInputs } from "./client-D9CaRks-.mjs";
6
6
  import { n as fingerprintNativeInputs } from "./native-inputs-TRTTTRxt.mjs";
7
7
  import { createHash } from "node:crypto";
8
8
  import { homedir } from "node:os";
@@ -1,7 +1,6 @@
1
1
  import { D as ownership_claim_exports, b as operationState, g as signalDeclaredSpawns, h as refuseDeclaredSpawns, p as allowDeclaredSpawns, u as withWorkspaceProcessLock, y as isTermination } from "./exec-VFRpu1iA.mjs";
2
- import { d as workspaceDir } from "./paths-DQtTgsBf.mjs";
3
- import { a as formatElapsed, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
- import { l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState, t as clearWorkspaceStateKey } from "./workspace-state-CeBpIZgr.mjs";
2
+ import { E as workspaceDir, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState, t as clearWorkspaceStateKey } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { a as formatElapsed, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
4
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
6
5
  import { existsSync, mkdirSync } from "node:fs";
7
6
  import { basename, dirname, join } from "node:path";
@@ -1,10 +1,9 @@
1
- import { r as ensureWorkspaceStorageAsync } from "./paths-DQtTgsBf.mjs";
2
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
3
- import { r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
4
- import { j as metroPortSetting } from "./settings-RKwY33wv.mjs";
5
- import { d as resolveProjectMetro } from "./metro-Bu8LBfzS.mjs";
6
- import { Yt as LAUNCH_BUNDLING, Zt as LAUNCH_UNVERIFIED } from "./budget-dPGuhNai.mjs";
7
- import { c as startDevServer } from "./start-BKGrEhzG.mjs";
1
+ import { r as readWorkspaceState$1, v as ensureWorkspaceStorageAsync } from "./workspace-state-pUg3_RRA.mjs";
2
+ import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
3
+ import { M as metroPortSetting } from "./settings-CosW5X-S.mjs";
4
+ import { d as resolveProjectMetro } from "./metro-CjC10t6E.mjs";
5
+ import { $t as LAUNCH_BUNDLING, tn as LAUNCH_UNVERIFIED } from "./budget-k2mZGvvk.mjs";
6
+ import { c as startDevServer } from "./start-_BdJ32cZ.mjs";
8
7
  import { readIdleStop } from "@stim-cli/core/state";
9
8
  import chalk from "chalk";
10
9
  //#region src/commands/native-runtime.ts
@@ -1,6 +1,6 @@
1
- import { d as workspaceDir, u as workspaceDerivedData } from "./paths-DQtTgsBf.mjs";
1
+ import { E as workspaceDir, T as workspaceDerivedData } from "./workspace-state-pUg3_RRA.mjs";
2
2
  import { a as killOnAbort, l as gitQuietAsync, r as childEnvironment } from "./operation-exec-CUZifp6Z.mjs";
3
- import { h as pbxString, m as pbxReferences } from "./project-Dz-hWkb-.mjs";
3
+ import { h as pbxString, m as pbxReferences } from "./project-BUu6Is4k.mjs";
4
4
  import { n as fingerprintNativeInputs, t as NativeInputError } from "./native-inputs-TRTTTRxt.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { existsSync, readFileSync, realpathSync } from "node:fs";
@@ -1,22 +1,21 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { o as sharedCompilationCache } from "./paths-DQtTgsBf.mjs";
3
- import { G as resolveCacheProviderConfig, Nt as repoRootAsync, U as remoteIosSetting, et as settingShapeErrors } from "./settings-RKwY33wv.mjs";
4
- import { g as selectNativeXcodeProject, h as pbxString, p as NativeXcodeError } from "./project-Dz-hWkb-.mjs";
5
- import { r as register } from "./cache-manifest-BPXRONJz.mjs";
6
- import { Ln as processContext, Z as statsProjectKey } from "./budget-dPGuhNai.mjs";
7
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
8
- import { l as filesystemBuildCapability, n as buildCacheKey } from "./build-cache-HFUQ9eLz.mjs";
9
- import { l as artifactCachePolicy, p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
10
- import { a as buildXcode, l as parseSwiftVersion, r as HEARTBEAT_INTERVAL_MS, s as compilationCacheSettings, u as parseXcodeMajor } from "./xcode-DHu41qQ4.mjs";
11
- import { a as nativeTransferRefusal } from "./client-18-ZowoT.mjs";
12
- import { _ as runCaptured, a as iosToolchainAsync, h as readPodState, m as podsAreStale, v as runPodInstall } from "./toolchain-D3bmRMia.mjs";
13
- import { a as deviceModelRefusal, h as resolveDeviceType, m as resolveConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-B1W-hmC2.mjs";
2
+ import { x as sharedCompilationCache } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { K as resolveCacheProviderConfig, Pt as repoRootAsync, W as remoteIosSetting, tt as settingShapeErrors } from "./settings-CosW5X-S.mjs";
4
+ import { g as selectNativeXcodeProject, h as pbxString, p as NativeXcodeError } from "./project-BUu6Is4k.mjs";
5
+ import { r as register } from "./cache-manifest-BEZ9Bpl1.mjs";
6
+ import { Hn as processContext, tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
7
+ import { d as runCancellationSignal } from "./native-run-BfIDFKLH.mjs";
8
+ import { n as buildCacheKey, u as filesystemBuildCapability } from "./build-cache-DrXNCy3T.mjs";
9
+ import { l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
10
+ import { D as runCaptured, F as compilationCacheSettings, L as parseSwiftVersion, N as buildXcode, O as runPodInstall, R as parseXcodeMajor, T as readPodState, V as readBundleId, j as HEARTBEAT_INTERVAL_MS, s as iosToolchainAsync, w as podsAreStale } from "./toolchain-J4J8MrAr.mjs";
11
+ import { a as nativeTransferRefusal } from "./client-D9CaRks-.mjs";
12
+ import { a as deviceModelRefusal, h as resolveDeviceType, m as resolveConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-CVOCp0Ft.mjs";
14
13
  import { r as gateProfileForDevice } from "./ios-signing-4c_qXvQm.mjs";
15
- import { s as explainBuildMiss, u as skippedMissReason } from "./prebuild-DmVCf5xb.mjs";
16
- import { n as planFlagRefusal, t as planCachedBuild } from "./build-plan-JsDUq4w1.mjs";
17
- import { t as IosRecipeRefusal } from "./ios-project-KYqeJURj.mjs";
18
- import { i as DEFAULT_DEPS, r as iosProcessRuntime } from "./launch-BVlyQw3T.mjs";
19
- import { a as nativeXcodeSources, i as nativeXcodePackages, n as nativeXcodeInputSnapshot, t as nativeXcodeHasPackages } from "./native-xcode-inputs-irplbQb0.mjs";
14
+ import { s as explainBuildMiss, u as skippedMissReason } from "./prebuild-gmouvmJZ.mjs";
15
+ import { n as planFlagRefusal, t as planCachedBuild } from "./build-plan-DrMMdayj.mjs";
16
+ import { t as IosRecipeRefusal } from "./ios-project-Ty5pHl9O.mjs";
17
+ import { c as iosProcessRuntime, t as DEFAULT_DEPS } from "./dependencies-Dw6wfQdv.mjs";
18
+ import { a as nativeXcodeSources, i as nativeXcodePackages, n as nativeXcodeInputSnapshot, t as nativeXcodeHasPackages } from "./native-xcode-inputs-BW7H8JGu.mjs";
20
19
  import { existsSync } from "node:fs";
21
20
  import { join } from "node:path";
22
21
  //#region src/integrations/native-xcode-ios.ts
@@ -132,7 +131,8 @@ function nativeRecipe(root, context) {
132
131
  },
133
132
  cache: () => filesystemBuildCapability({
134
133
  context: context.operation,
135
- sources: snapshot ? nativeXcodeSources(snapshot) : null
134
+ sources: snapshot ? nativeXcodeSources(snapshot) : null,
135
+ readAppId: (path) => readBundleId(path)
136
136
  }),
137
137
  async prepare(beforePrepare) {
138
138
  const pods = readPodState(root, root);
@@ -1,10 +1,12 @@
1
- import { c as IosToolchain, g as CompilationCacheActivity, h as CcacheActivity, i as AndroidBuildOptions, l as WorkerToolchain, p as Optimizations, r as SwiftpmArtifactToolchain, t as NativeGradleArtifactReceipt } from "./android-project-DVWyCbWU.mjs";
1
+ import { c as IosToolchain, g as CompilationCacheActivity, h as CcacheActivity, i as AndroidBuildOptions, l as WorkerToolchain, p as Optimizations, r as SwiftpmArtifactToolchain, t as NativeGradleArtifactReceipt } from "./android-project-DUGMbq28.mjs";
2
2
  import { StimContext } from "@stim-cli/core";
3
3
  import { BuildFingerprintSource, BuildReactNativeArtifactQuery, BuildStartParams, BuildSwiftpmArtifactQuery } from "@stim-cli/core/protocol";
4
4
  //#region src/offload/react-native-artifact.d.ts
5
5
  type ArtifactTools = (IosToolchain & {
6
6
  os: string;
7
- }) | Pick<WorkerToolchain, "stimBuild" | "os" | "arch" | "jdk" | "androidSdk">;
7
+ }) | (Pick<WorkerToolchain, "stimBuild" | "os" | "arch" | "jdk" | "androidSdk"> & {
8
+ compat: number;
9
+ });
8
10
  interface ArtifactReceipt {
9
11
  identity: {
10
12
  hash: string;
@@ -91,6 +93,9 @@ interface WorkerJob {
91
93
  expectedTracked?: string[];
92
94
  cacheArtifact?: boolean;
93
95
  stimBuild?: string;
96
+ compat?: number;
97
+ /** The JDK major the client builds on; the build runs on an installed JDK of it when the default differs. */
98
+ jdk?: string;
94
99
  native?: BuildStartParams["native"];
95
100
  optimizations: Optimizations["ios"] | null;
96
101
  /** How long the client's Gradle daemon stays warm after an Android build; 0 or absent stops it when the build ends. */
@@ -1,29 +1,29 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { d as workspaceDir, m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
- import { k as writeConfigSetting } from "./config-BZhXY15H.mjs";
2
+ import { E as workspaceDir, k as workspaceLogsDir$1 } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { k as writeConfigSetting } from "./config-BktkY_zC.mjs";
4
4
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
5
5
  import { o as git, s as gitAsync } from "./operation-exec-CUZifp6Z.mjs";
6
- import { d as androidLayoutSetting, y as iosProjectDirSetting } from "./settings-RKwY33wv.mjs";
7
- import { f as projectRegistry, g as selectNativeXcodeProject } from "./project-Dz-hWkb-.mjs";
6
+ import { d as androidLayoutSetting, y as iosProjectDirSetting } from "./settings-CosW5X-S.mjs";
7
+ import { f as projectRegistry, g as selectNativeXcodeProject } from "./project-BUu6Is4k.mjs";
8
8
  import { o as parseNdjsonText } from "./ndjson-CgE_o3Dl.mjs";
9
- import { Ln as processContext } from "./budget-dPGuhNai.mjs";
10
- import { d as fingerprintProject, i as compareSourceLists, v as refingerprintAfterMutation } from "./build-cache-HFUQ9eLz.mjs";
11
- import { _ as unmetNodePin, g as projectNodeLine, h as pathNodeVersion, v as withProjectNode } from "./server-expo-Tt_hLRpy.mjs";
12
- import { n as CCACHE_UNAVAILABLE, o as resolveCcache } from "./ccache-CCn1S6qG.mjs";
13
- import { C as COMPILATION_CACHE_CORRUPT, b as validateGradleManifest, f as reactNativeArtifactReceipt, g as gradleStateDirectories, h as gradleOffloadInputs, m as reactNativeBuildQuery, p as reactNativeArtifactToolchain, v as nativeGradleOutputs, w as clearCorruptCompilationCache, x as verifyGradleTransfer } from "./client-18-ZowoT.mjs";
14
- import { f as workerToolchain, h as readPodState, i as availableIphone, m as podsAreStale, v as runPodInstall } from "./toolchain-D3bmRMia.mjs";
9
+ import { Hn as processContext } from "./budget-k2mZGvvk.mjs";
10
+ import { i as compareSourceLists, p as fingerprintProject, x as refingerprintAfterMutation } from "./build-cache-DrXNCy3T.mjs";
11
+ import { _ as unmetNodePin, g as projectNodeLine, h as pathNodeVersion, v as withProjectNode } from "./server-expo-eQfOdydb.mjs";
12
+ import { n as CCACHE_UNAVAILABLE, o as resolveCcache } from "./ccache-Bx5TbxwG.mjs";
13
+ import { O as runPodInstall, T as readPodState, b as useJdkMajor, i as availableIphone, w as podsAreStale, x as workerToolchain } from "./toolchain-J4J8MrAr.mjs";
14
+ import { C as COMPILATION_CACHE_CORRUPT, b as validateGradleManifest, f as reactNativeArtifactReceipt, g as gradleStateDirectories, h as gradleOffloadInputs, m as reactNativeBuildQuery, p as reactNativeArtifactToolchain, v as nativeGradleOutputs, w as clearCorruptCompilationCache, x as verifyGradleTransfer } from "./client-D9CaRks-.mjs";
15
15
  import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
16
16
  import { a as sourceManifest, o as verifyNativeTransfer } from "./native-source-D-4Dh4JU.mjs";
17
- import { n as buildAndroid, o as gradlewPath, r as buildIos, u as assembleTaskFor } from "./react-native-build-AuCu-aAP.mjs";
18
- import { f as podAction } from "./support-B1W-hmC2.mjs";
19
- import { a as runPrebuild, r as recordPrebuild, t as planPrebuild } from "./prebuild-DmVCf5xb.mjs";
20
- import { g as dumpApkManifest, p as apkPackage } from "./support-B3tzVhKn.mjs";
21
- import { n as buildAndroidOperation, t as buildIosOperation } from "./build-CaF574eS.mjs";
22
- import { i as stageBundle, n as resolveBundleExtras } from "./stage-ERTMh88n.mjs";
23
- import { t as logLines } from "./run-BIwoU44q.mjs";
24
- import { r as nativeXcodeMetadataDirectories } from "./native-xcode-inputs-irplbQb0.mjs";
25
- import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-BWYPj9Sn.mjs";
26
- import { a as nativeGradleWorkerArtifactIdentity, i as nativeGradleArtifactSnapshotFromReceipt, o as nativeGradleWorkerScope } from "./native-gradle-artifact-inputs-BcLYBZil.mjs";
17
+ import { n as buildAndroid, o as gradlewPath, r as buildIos, u as assembleTaskFor } from "./react-native-build-oNwqF5Wb.mjs";
18
+ import { f as podAction } from "./support-CVOCp0Ft.mjs";
19
+ import { a as runPrebuild, r as recordPrebuild, t as planPrebuild } from "./prebuild-gmouvmJZ.mjs";
20
+ import { g as dumpApkManifest, p as apkPackage } from "./support-BGSCBoib.mjs";
21
+ import { n as buildAndroidOperation, t as buildIosOperation } from "./build-DPhApsjV.mjs";
22
+ import { i as stageBundle, n as resolveBundleExtras } from "./stage-jKQ7CP_B.mjs";
23
+ import { t as logLines } from "./run-BqB0v3pt.mjs";
24
+ import { r as nativeXcodeMetadataDirectories } from "./native-xcode-inputs-BW7H8JGu.mjs";
25
+ import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-CfUzt_0Z.mjs";
26
+ import { a as nativeGradleWorkerArtifactIdentity, i as nativeGradleArtifactSnapshotFromReceipt, o as nativeGradleWorkerScope } from "./native-gradle-artifact-inputs-btSUulme.mjs";
27
27
  import { createHash } from "node:crypto";
28
28
  import { chmodSync, constants, copyFileSync, cpSync, createReadStream, createWriteStream, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync } from "node:fs";
29
29
  import { isDeepStrictEqual } from "node:util";
@@ -1120,10 +1120,11 @@ async function compileMacos(context, job, root, log, time) {
1120
1120
  };
1121
1121
  try {
1122
1122
  const extras = resolveBundleExtras(src, src, options.resources, options.assetCatalog);
1123
- const query = job.cacheArtifact && options.artifactInputs && job.expectedFingerprint && job.stimBuild ? {
1123
+ const stim = job.compat ? { compat: job.compat } : job.stimBuild ? { stimBuild: job.stimBuild } : null;
1124
+ const query = job.cacheArtifact && options.artifactInputs && job.expectedFingerprint && stim ? {
1124
1125
  project: job.project,
1125
1126
  sourceDigest: job.expectedFingerprint,
1126
- stimBuild: job.stimBuild,
1127
+ ...stim,
1127
1128
  inputs: options.artifactInputs,
1128
1129
  build: {
1129
1130
  product: options.product,
@@ -1341,9 +1342,19 @@ async function main() {
1341
1342
  if (mode === "build") {
1342
1343
  const chunks = [];
1343
1344
  for await (const chunk of process.stdin) chunks.push(chunk);
1345
+ const job = JSON.parse(Buffer.concat(chunks).toString("utf8"));
1346
+ if (job.platform === "android" && job.jdk) {
1347
+ const unavailable = useJdkMajor(job.jdk);
1348
+ if (unavailable) return emit({
1349
+ type: "result",
1350
+ ok: false,
1351
+ code: "build-refused",
1352
+ message: unavailable
1353
+ });
1354
+ }
1344
1355
  return emit({
1345
1356
  type: "result",
1346
- ...await build(JSON.parse(Buffer.concat(chunks).toString("utf8")))
1357
+ ...await build(job)
1347
1358
  });
1348
1359
  }
1349
1360
  process.stderr.write("usage: offload-worker offer | offer-native-xcode | offer-native-gradle | native-gradle-artifact | build < job.json\n");
@@ -1,6 +1,6 @@
1
1
  import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
2
- import { c as withWorkspaceStateLock, d as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-CeBpIZgr.mjs";
3
- import { c as pidExists } from "./metro-Bu8LBfzS.mjs";
2
+ import { c as withWorkspaceStateLock, d as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { c as pidExists } from "./metro-CjC10t6E.mjs";
4
4
  import { realpathSync } from "node:fs";
5
5
  //#region src/collector/state.ts
6
6
  function collectorRoot(root) {
@@ -1,6 +1,6 @@
1
- import { U as parseDeviceSlotKey, V as deviceSlotKey } from "./config-BZhXY15H.mjs";
2
- import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-CeBpIZgr.mjs";
3
- import { $ as removeMetroReverses } from "./android-882m4hxX.mjs";
1
+ import { r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-pUg3_RRA.mjs";
2
+ import { U as parseDeviceSlotKey, V as deviceSlotKey } from "./config-BktkY_zC.mjs";
3
+ import { $ as removeMetroReverses } from "./android-DTAcRwBC.mjs";
4
4
  import { isJsonObject } from "@stim-cli/core/state";
5
5
  //#region src/devices/phone-reverses.ts
6
6
  const KEY = "phoneReverses";
@@ -1,4 +1,4 @@
1
- import { n as buildPlacementSettings } from "./selection-BLtvaqxc.mjs";
1
+ import { n as buildPlacementSettings } from "./selection-BNPBZ6T5.mjs";
2
2
  //#region src/placement-log.ts
3
3
  /** `machine` is `local` when the run stays on this machine. */
4
4
  function placementRecord(input) {
@@ -1,6 +1,6 @@
1
- import { f as hostingMachines } from "./selection-BLtvaqxc.mjs";
2
- import { r as readHostedNative } from "./ios-state-DlElquYD.mjs";
3
- import { i as probeHost, n as automaticDevicePlacement } from "./eas-fallback-LMxk9Kw0.mjs";
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";
4
4
  import { automaticMachineEnabled } from "@stim-cli/core/state";
5
5
  //#region src/device-host/plan-placement.ts
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { p as getProject } from "./config-BZhXY15H.mjs";
2
- import { n as findCommandWorkspace } from "./project-Dz-hWkb-.mjs";
3
- import { n as getNamedPort, t as clearNamedPorts } from "./named-ports-BWDuU5oQ.mjs";
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";
4
4
  //#region src/commands/ports.ts
5
5
  async function inProject(action) {
6
6
  try {