stim 1.27.0 → 1.28.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 (137) hide show
  1. package/dist/{acquire-artifact-BKN2Yuhg.mjs → acquire-artifact-CKByBnTD.mjs} +1 -1
  2. package/dist/{act-ROviTF_t.mjs → act-8iswyfRa.mjs} +36 -18
  3. package/dist/{activity-Cd-ysFes.mjs → activity-DRMg4_mD.mjs} +3 -3
  4. package/dist/{agent-device-usage-output-C5nCKWp9.mjs → agent-device-usage-output-tE90fDdo.mjs} +3 -3
  5. package/dist/{android-Cd6w7_qw.mjs → android-CHmSU4B4.mjs} +40 -37
  6. package/dist/{android-DriNoAVy.mjs → android-CsPs-7Mg.mjs} +3 -3
  7. package/dist/{android-Deb9X3_Y.mjs → android-D577ApKG.mjs} +1 -1
  8. package/dist/{android--HBgpvpW.mjs → android-YWCbmkVK.mjs} +5 -5
  9. package/dist/{android-cas-D5e6ecUg.mjs → android-cas-_aDifWW0.mjs} +2 -2
  10. package/dist/api.d.mts +1 -1
  11. package/dist/api.mjs +24 -24
  12. package/dist/{apk-signed-tail-BHQHx3Rm.mjs → apk-signed-tail-CQbwM0qO.mjs} +2 -2
  13. package/dist/{artifact-faemIZv5.mjs → artifact-DYtHjxsn.mjs} +12 -12
  14. package/dist/{artifact-0AGJYB9O.mjs → artifact-bFkfD3vf.mjs} +12 -12
  15. package/dist/{auto-placement-z-H5pJza.mjs → auto-placement-BVqs8AJi.mjs} +7 -7
  16. package/dist/{browser-web-slD8AvLp.mjs → browser-web-BUaLcafY.mjs} +10 -10
  17. package/dist/{build-hS0QyFlQ.mjs → build-cQURy_KW.mjs} +20 -20
  18. package/dist/{build-cache-gBJ-WKzA.mjs → build-cache-CZULpXVl.mjs} +3 -3
  19. package/dist/{build-plan-CBqYbzYM.mjs → build-plan-CxoYfxsc.mjs} +6 -6
  20. package/dist/{ccache-BWTze1Ls.mjs → ccache-Bm_A1xX9.mjs} +15 -14
  21. package/dist/{cli-ftXDLto1.mjs → cli-CpbaLDa7.mjs} +17 -17
  22. package/dist/cli.mjs +1 -1
  23. package/dist/{client-xsdxrhWA.mjs → client-YxCer6ab.mjs} +39 -6
  24. package/dist/collector-run.mjs +3 -3
  25. package/dist/{command-output-Dj-WT4BP.mjs → command-output-C8R1KIvi.mjs} +1 -1
  26. package/dist/{dependencies-BGokZ-Ng.mjs → dependencies-DKeMzwXY.mjs} +35 -35
  27. package/dist/{dependency-state-C3OtgG94.mjs → dependency-state-CojA2o0t.mjs} +1 -1
  28. package/dist/{dev-client-BMca82xo.mjs → dev-client-D-BW5uiq.mjs} +2 -2
  29. package/dist/{device-tM41-TUq.mjs → device-CgXfbcz5.mjs} +11 -11
  30. package/dist/{device-capacity-6LP7QsaA.mjs → device-capacity-Cd8lMSn3.mjs} +85 -17
  31. package/dist/{device-BJm0irrq.mjs → device-eeK95Lir.mjs} +13 -13
  32. package/dist/device-host-worker.mjs +13 -11
  33. package/dist/{device-ios-534c14fz.mjs → device-ios-Cc9ulihb.mjs} +7 -7
  34. package/dist/{device-lease-run-DwsGfjUN.mjs → device-lease-run-Mtzp4THX.mjs} +3 -3
  35. package/dist/{device-pool-BnQqvs6o.mjs → device-pool-eRz6DtCg.mjs} +2 -2
  36. package/dist/{doctor-DyqE9n1J.mjs → doctor-Bz_ouYAW.mjs} +12 -12
  37. package/dist/{doctor-Dbx1ZpD2.mjs → doctor-C2QyhejJ.mjs} +1 -1
  38. package/dist/doctor-fingerprint.mjs +1 -1
  39. package/dist/{doctor-watchman-CxDbyrrt.mjs → doctor-watchman-BTW82PDC.mjs} +3 -3
  40. package/dist/{doctor-F-3VUUyN.mjs → doctor-xf7ht-5n.mjs} +17 -17
  41. package/dist/{eas-build-CjNSWmjo.mjs → eas-build-Dm6q68QY.mjs} +2 -2
  42. package/dist/{eas-fallback-9fqb46kW.mjs → eas-fallback-DajNpxf-.mjs} +3 -3
  43. package/dist/{eas-session-ledger-DrP4OuuM.mjs → eas-session-ledger-CBFo_Uo1.mjs} +35 -6
  44. package/dist/{error-diagnostics-snej9k4j.mjs → error-diagnostics-D1QfyJzQ.mjs} +7 -7
  45. package/dist/{gc-CGZ1Yg88.mjs → gc-DM5oMm-J.mjs} +17 -16
  46. package/dist/{gc-BRwAY3qT.mjs → gc-PLFwb0k4.mjs} +2 -2
  47. package/dist/{guide-_rfEh_zM.mjs → guide-C4I46XAk.mjs} +106 -42
  48. package/dist/{hosted-android-BMKzUNnY.mjs → hosted-android-DlaKLbW0.mjs} +5 -6
  49. package/dist/{hosted-client-D7Pk_Oo1.mjs → hosted-client-DDRm9hPJ.mjs} +43 -16
  50. package/dist/{hosted-logs-B1gqQuva.mjs → hosted-logs-bSebOKbz.mjs} +5 -5
  51. package/dist/{hosted-logs-sync-Dg3qrZmV.mjs → hosted-logs-sync-B0c53W_c.mjs} +5 -5
  52. package/dist/{hosted-macos-B9w4H8hc.mjs → hosted-macos-B7-8Pv4H.mjs} +5 -5
  53. package/dist/{hosted-native-CdgaiuyP.mjs → hosted-native-CDe33CSr.mjs} +11 -8
  54. package/dist/{idle-shutdown-Cbvo5KEh.mjs → idle-shutdown-CQ0QwU9J.mjs} +5 -5
  55. package/dist/{ios-E26qSpkb.mjs → ios-B1DYuOjh.mjs} +2 -2
  56. package/dist/{ios-Bk4mWbtS.mjs → ios-B1HvafEG.mjs} +8 -8
  57. package/dist/{ios-device-C_QkIf1Z.mjs → ios-device-B4elVFKi.mjs} +1 -1
  58. package/dist/{ios-project-D8Jcy_br.mjs → ios-project-CR4mZ7CH.mjs} +6 -6
  59. package/dist/{ios-state-BZ03NFgF.mjs → ios-state-BPHqMDdZ.mjs} +1 -1
  60. package/dist/{ios-B5HlVMhQ.mjs → ios-tg4tp3q1.mjs} +30 -28
  61. package/dist/{js-swap-Dg2a945i.mjs → js-swap-CVpSW1fn.mjs} +4 -4
  62. package/dist/{launch-CRyBeNsA.mjs → launch-DoySmhjz.mjs} +17 -17
  63. package/dist/{lightened-BCsdAGj_.mjs → lightened-DFAJgfIk.mjs} +4 -4
  64. package/dist/{logs-aJQb-RDg.mjs → logs-BGsW7iPe.mjs} +6 -6
  65. package/dist/{logs-CC_-ZzEE.mjs → logs-DI5ILkYB.mjs} +4 -4
  66. package/dist/{macos-DlCBhMw5.mjs → macos-Bo9st9Di.mjs} +18 -18
  67. package/dist/{macos-BGmTpnv9.mjs → macos-C12RMJQF.mjs} +1 -1
  68. package/dist/macos-run.mjs +1 -1
  69. package/dist/maintenance-run.mjs +4 -4
  70. package/dist/{metro-CvyD-xwe.mjs → metro-BnhXV2Mj.mjs} +1 -1
  71. package/dist/{metro-gateway-BnHdqMO_.mjs → metro-request-DXyKjVDF.mjs} +25 -46
  72. package/dist/{named-ports-BCyMWA6b.mjs → named-ports-Phoi2POD.mjs} +1 -1
  73. package/dist/{native-android-DlpxCyOP.mjs → native-android-vxgtLD7w.mjs} +14 -14
  74. package/dist/{native-gradle-artifact-inputs-C13qT7R_.mjs → native-gradle-artifact-inputs-BN96IVw8.mjs} +3 -3
  75. package/dist/{native-runtime-DqaIBO5w.mjs → native-runtime-DG4Rodzj.mjs} +6 -6
  76. package/dist/{native-xcode-inputs-B1W8SrxB.mjs → native-xcode-inputs-BKarCoKg.mjs} +2 -2
  77. package/dist/{native-xcode-ios-QPP0Rm68.mjs → native-xcode-ios-8A-efGa5.mjs} +14 -14
  78. package/dist/offload-worker.mjs +18 -18
  79. package/dist/{ownership-Bx-0cku-.mjs → ownership-DJCq48IJ.mjs} +2 -2
  80. package/dist/{phone-reverses-C9yAaKEv.mjs → phone-reverses-BzTa8g1F.mjs} +3 -3
  81. package/dist/{placement-log-BXUbiZM6.mjs → placement-log-Cvhta5ib.mjs} +1 -1
  82. package/dist/{plan-placement-UxnQjv5Z.mjs → plan-placement-WkZdccuN.mjs} +5 -5
  83. package/dist/{ports-uUrghqWN.mjs → ports-UV4mJgyC.mjs} +2 -2
  84. package/dist/{prebuild-BDpToDgR.mjs → prebuild-k8d_tqOq.mjs} +8 -8
  85. package/dist/{project-DYj-HVx6.mjs → project-Sui52ywT.mjs} +14 -14
  86. package/dist/{react-native-android-DDBccgJw.mjs → react-native-android-DANlGGQf.mjs} +21 -21
  87. package/dist/{react-native-build-DaK2IFyP.mjs → react-native-build-jUHnIfZ9.mjs} +6 -6
  88. package/dist/{react-native-doctor-B-Mw6DcR.mjs → react-native-doctor-DCWRjS7K.mjs} +5 -5
  89. package/dist/{react-native-ios-DjYwUF9U.mjs → react-native-ios-BwMsFMXi.mjs} +14 -14
  90. package/dist/{recordings-C20iUZfp.mjs → recordings-iy0mkm7b.mjs} +1 -1
  91. package/dist/{reload-DJBeF_rC.mjs → reload-Bj7QyuDy.mjs} +1 -1
  92. package/dist/{reload-fUdkH2_p.mjs → reload-c_uEyc_X.mjs} +13 -13
  93. package/dist/{remote-y6n99WMW.mjs → remote-DFlpAqdV.mjs} +8 -8
  94. package/dist/{result-CTqBw2Te.mjs → result-BIcXREyC.mjs} +14 -14
  95. package/dist/{run-DaCeNKRm.mjs → run-y2HwyNvg.mjs} +1 -1
  96. package/dist/{selection-Bs8phwhN.mjs → selection-CXgM_VK_.mjs} +2 -2
  97. package/dist/{server-bare-BOh-iZEj.mjs → server-bare-2N4vSRZG.mjs} +1 -1
  98. package/dist/{server-command-8CuA51Cv.mjs → server-command-qneHPcRI.mjs} +4 -4
  99. package/dist/{server-expo-ABQs2XFA.mjs → server-expo-Ccm9zB0o.mjs} +2 -2
  100. package/dist/server-expo-WulkyAwT.mjs +2 -0
  101. package/dist/{settings-BDVI8Ivc.mjs → settings-CY5JZlNN.mjs} +46 -2
  102. package/dist/{settings-CMHhQNwI.mjs → settings-Cfd_Q6ys.mjs} +2 -2
  103. package/dist/{settings-payload-cm60Zhib.mjs → settings-payload-DwQiEMCn.mjs} +2 -2
  104. package/dist/{settings-write-BdNRLlBn.mjs → settings-write-CJpjkeAd.mjs} +3 -3
  105. package/dist/{slot-launch-0l7RqSpr.mjs → slot-launch-BpmanOnk.mjs} +5 -5
  106. package/dist/{stage-F4cAfJGi.mjs → stage-CmugrSG5.mjs} +1 -1
  107. package/dist/{start-DcqnF9p8.mjs → start-CHH3zgIU.mjs} +1 -1
  108. package/dist/{start-DrPwER_2.mjs → start-DYLk6GXn.mjs} +8 -8
  109. package/dist/{state-BX1y5syV.mjs → state-B2QJbDwz.mjs} +2 -2
  110. package/dist/{state-CZxLyetD.mjs → state-BXC1Lfxw.mjs} +1 -1
  111. package/dist/{stats-GxuCbles.mjs → stats-DxKqhcGp.mjs} +3 -3
  112. package/dist/{status-BfnK9pUd.mjs → status-BHCkOZga.mjs} +46 -23
  113. package/dist/{status-Bj7ZYvvc.mjs → status-D_Ljc89p.mjs} +1 -1
  114. package/dist/{status-watch-BfabQn03.mjs → status-watch-BmsPqYSU.mjs} +17 -6
  115. package/dist/status-worker.mjs +1 -1
  116. package/dist/{stop-D-EAr25B.mjs → stop-D-dGE9gh.mjs} +14 -14
  117. package/dist/{stop-CH79S3IZ.mjs → stop-DQvE-P76.mjs} +9 -5
  118. package/dist/{stop-x1Yu3He4.mjs → stop-b2pouxAO.mjs} +2 -2
  119. package/dist/supervisor-run.mjs +232 -58
  120. package/dist/{support-CNg_YsOk.mjs → support-04IhBUTT.mjs} +4 -4
  121. package/dist/{support-Be0UeVZU.mjs → support-BtlJKjyQ.mjs} +11 -10
  122. package/dist/{swiftpm-artifact-inputs-uPqYvGBv.mjs → swiftpm-artifact-inputs-Cj2UpmPN.mjs} +1 -1
  123. package/dist/{swiftpm-macos-Ch4YjY_A.mjs → swiftpm-macos-BhF2stxY.mjs} +7 -7
  124. package/dist/{toolchain-CbCG6C5Z.mjs → toolchain-mLA_km-b.mjs} +4 -4
  125. package/dist/{toolchain-JYAOquPg.mjs → toolchain-qktiV8xc.mjs} +1 -1
  126. package/dist/{warm-progress-C0RsbngN.mjs → warm-progress-B0Vpuvpl.mjs} +3 -3
  127. package/dist/{web-Cq_AQ4DK.mjs → web-BYmK0TjL.mjs} +6 -6
  128. package/dist/web-CrVLVQZY.mjs +2 -0
  129. package/dist/web-run.mjs +4 -4
  130. package/dist/{workspace-state-BjqdjnJR.mjs → workspace-state-kIZrdlSg.mjs} +1 -1
  131. package/dist/{workspaces-DFbj07jp.mjs → workspaces-CmOcceDN.mjs} +105 -25
  132. package/dist/{worktree-COAJ3-OD.mjs → worktree-2dk5edza.mjs} +23 -44
  133. package/dist/worktree-nliAoHxB.mjs +2 -0
  134. package/package.json +7 -7
  135. package/dist/server-expo-Ba_Y21vB.mjs +0 -2
  136. package/dist/web-Je6abcpz.mjs +0 -2
  137. package/dist/worktree-JGUd_53L.mjs +0 -2
@@ -1,12 +1,12 @@
1
1
  import { D as ownership_claim_exports, d as workspaceProcessLockError, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
2
  import { G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, d as getConfigDir, u as getConcurrencyLimits } from "./config-Cn94Jc0g.mjs";
3
- import { a as formatElapsed, l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
4
- import { g as deviceReclaimIdleMinutesSetting } from "./settings-BDVI8Ivc.mjs";
5
- import { A as listAdbDevices, j as listAdbDevicesAsync } from "./android-DriNoAVy.mjs";
6
- import { _ as withIdleWorkspace, it as recordCapacityWait, rt as recordCapacityRefusal } from "./workspaces-DFbj07jp.mjs";
3
+ import { a as formatElapsed, l as phaseLine } from "./command-output-C8R1KIvi.mjs";
4
+ import { g as deviceReclaimIdleMinutesSetting } from "./settings-CY5JZlNN.mjs";
5
+ import { A as listAdbDevices, j as listAdbDevicesAsync } from "./android-CsPs-7Mg.mjs";
6
+ import { ot as recordCapacityRefusal, st as recordCapacityWait, v as withIdleWorkspace } from "./workspaces-CmOcceDN.mjs";
7
7
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
8
- import { d as listAllIosSims, f as listAllIosSimsAsync, l as iosRuntimeMatches, y as parseRuntimeVersion } from "./ios-E26qSpkb.mjs";
9
- import { i as writeIdleShutdownEvent, n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-Cbvo5KEh.mjs";
8
+ import { d as listAllIosSims, f as listAllIosSimsAsync, l as iosRuntimeMatches, y as parseRuntimeVersion } from "./ios-B1DYuOjh.mjs";
9
+ import { i as writeIdleShutdownEvent, n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-CQ0QwU9J.mjs";
10
10
  import { realpathSync } from "node:fs";
11
11
  import { basename, join } from "node:path";
12
12
  import { workspaceId } from "@stim-cli/core";
@@ -385,8 +385,15 @@ const DEFAULT_DEVICE_SLOT_WAIT_MS = 6e5;
385
385
  function deviceSlotWaitingLine({ count, max, holders, elapsedMs, queue }) {
386
386
  return `${"device".padEnd(11)} waiting for a device slot (${count}/${max} in use${holders.length ? `: ${holders.join(", ")}` : ""}), ${formatElapsed(elapsedMs)} elapsed -- stim guide lifecycle concurrency${queue ? `; ${queue}` : ""}`;
387
387
  }
388
- function deviceHolders(inventory, keys) {
389
- const names = /* @__PURE__ */ new Map();
388
+ function unrecordedHolder(label) {
389
+ return {
390
+ label,
391
+ workspace: null,
392
+ slot: null
393
+ };
394
+ }
395
+ function slotHolders(inventory, keys) {
396
+ const owners = /* @__PURE__ */ new Map();
390
397
  const projects = Object.entries(inventory.config?.projects ?? {});
391
398
  const labels = workspaceLabels(projects.map(([root, project]) => ({
392
399
  root,
@@ -394,20 +401,77 @@ function deviceHolders(inventory, keys) {
394
401
  })));
395
402
  for (const [root, project] of projects) {
396
403
  const label = labels.get(root) ?? basename(root);
397
- for (const { platforms } of projectDeviceSlots(project)) {
398
- if (platforms.ios?.deviceUdid) names.set(deviceKey("ios", platforms.ios.deviceUdid), label);
399
- if (platforms.android?.avdName) names.set(deviceKey("android", platforms.android.avdName), label);
404
+ for (const { slot, platforms } of projectDeviceSlots(project)) {
405
+ if (platforms.ios?.deviceUdid) owners.set(deviceKey("ios", platforms.ios.deviceUdid), {
406
+ label,
407
+ workspace: root,
408
+ slot
409
+ });
410
+ if (platforms.android?.avdName) owners.set(deviceKey("android", platforms.android.avdName), {
411
+ label,
412
+ workspace: root,
413
+ slot
414
+ });
400
415
  }
401
416
  }
402
417
  for (const sim of inventory.sims) {
403
418
  const key = deviceKey("ios", sim.udid);
404
- if (!names.has(key)) names.set(key, sim.name);
419
+ if (!owners.has(key)) owners.set(key, unrecordedHolder(sim.name));
405
420
  }
421
+ const booting = /* @__PURE__ */ new Set();
406
422
  for (const device of inventory.booting) {
407
423
  const key = deviceKey(device.platform, device.key);
408
- if (!names.has(key)) names.set(key, device.displayName ?? device.key);
424
+ booting.add(key);
425
+ if (!owners.has(key)) owners.set(key, unrecordedHolder(device.displayName ?? device.key));
426
+ }
427
+ return [...keys].map((key) => {
428
+ const { label, workspace, slot } = owners.get(key) ?? unrecordedHolder(key.slice(key.indexOf(":") + 1));
429
+ const platform = key.startsWith("android:") ? "android" : "ios";
430
+ return booting.has(key) ? {
431
+ platform,
432
+ label,
433
+ workspace,
434
+ slot,
435
+ booting: true
436
+ } : {
437
+ platform,
438
+ label,
439
+ workspace,
440
+ slot
441
+ };
442
+ }).toSorted((a, b) => a.label.localeCompare(b.label) || a.platform.localeCompare(b.platform));
443
+ }
444
+ function deviceHolders(inventory, keys) {
445
+ return [...new Set(slotHolders(inventory, keys).map((holder) => holder.label))].toSorted();
446
+ }
447
+ /**
448
+ * `concurrency.maxDevices` usage for status: the owned devices the cap counts and who holds each. `sims` is the
449
+ * listing status already read; an unknown count reports why instead of failing.
450
+ */
451
+ async function deviceSlotUsage(max, sources = {}) {
452
+ try {
453
+ const inventory = await readInventoryAsync(sources);
454
+ if ("code" in inventory) return {
455
+ max,
456
+ inUse: null,
457
+ unknown: inventory.message,
458
+ holders: []
459
+ };
460
+ const keys = inventoryKeys(inventory);
461
+ return {
462
+ max,
463
+ inUse: keys.size,
464
+ holders: slotHolders(inventory, keys)
465
+ };
466
+ } catch (error) {
467
+ if ((0, ownership_claim_exports.isClaimRefusal)(error)) return {
468
+ max,
469
+ inUse: null,
470
+ unknown: error.message,
471
+ holders: []
472
+ };
473
+ throw error;
409
474
  }
410
- return [...new Set([...keys].map((key) => names.get(key) ?? key.slice(key.indexOf(":") + 1)))].toSorted();
411
475
  }
412
476
  function liveWaiters() {
413
477
  const root = join(getConfigDir(), "device-waits");
@@ -479,7 +543,7 @@ async function admissionTransaction(action, lockWaitMs, out, signal) {
479
543
  }
480
544
  }
481
545
  /** Boots an owned device under the Stim home's cap, reserving capacity before releasing admission. */
482
- async function withDeviceBootAdmission(device, boot, { root, max = getConcurrencyLimits().maxDevices, sources = {}, lockWaitMs = ADMISSION_LOCK_WAIT_MS, out = () => {}, waitMs = DEFAULT_DEVICE_SLOT_WAIT_MS, noWait = false, automatic = false, displayName = workspaceDisplayLabel(root, loadConfig$1()), reclaimIdleMinutes = deviceReclaimIdleMinutesSetting({}), now = Date.now, signal, sleep = (ms) => setTimeout(ms, void 0, { signal }), waitingFor = () => {}, onWait = () => {} }) {
546
+ async function withDeviceBootAdmission(device, boot, { root, max = getConcurrencyLimits().maxDevices, sources = {}, lockWaitMs = ADMISSION_LOCK_WAIT_MS, out = () => {}, waitMs = DEFAULT_DEVICE_SLOT_WAIT_MS, noWait = false, automatic = false, displayName = workspaceDisplayLabel(root, loadConfig$1()), reclaimIdleMinutes = deviceReclaimIdleMinutesSetting({}), now = Date.now, signal, sleep = (ms) => setTimeout(ms, void 0, { signal }), waitingFor = () => {}, onWait = () => {}, onBootStart = () => {} }) {
483
547
  const requireMembership = () => {
484
548
  if (automatic && !automaticMachineEnabled("device", "local")) throw new DeviceAdmissionRefusal({
485
549
  code: "STIM_HOSTING_REFUSED",
@@ -489,7 +553,10 @@ async function withDeviceBootAdmission(device, boot, { root, max = getConcurrenc
489
553
  };
490
554
  signal?.throwIfAborted();
491
555
  requireMembership();
492
- if (!max || max <= 0) return boot();
556
+ if (!max || max <= 0) {
557
+ onBootStart();
558
+ return boot();
559
+ }
493
560
  const workspace = workspaceId(root);
494
561
  device = {
495
562
  ...device,
@@ -628,6 +695,7 @@ async function withDeviceBootAdmission(device, boot, { root, max = getConcurrenc
628
695
  }
629
696
  }
630
697
  requireMembership();
698
+ onBootStart();
631
699
  return await boot();
632
700
  } finally {
633
701
  (0, ownership_claim_exports.releaseClaim)(marker);
@@ -697,4 +765,4 @@ function unknownAndroidDeviceProfileRefusal(requested, profiles) {
697
765
  };
698
766
  }
699
767
  //#endregion
700
- export { countLiveOwnedDevicesAsync as a, layerNote as c, unknownAndroidDeviceProfileRefusal as d, unknownAndroidSystemImageRefusal as f, withDeviceBootAdmission as h, countLiveOwnedDevices as i, peekDeviceSlots as l, unknownIosRuntimeRefusal as m, DeviceAdmissionRefusal as n, countLiveOwnedDevicesFrom as o, unknownIosDeviceTypeRefusal as p, checkDeviceCapacity as r, deviceTypeMismatch as s, DEFAULT_DEVICE_SLOT_WAIT_MS as t, runtimeMismatch as u };
768
+ export { countLiveOwnedDevicesAsync as a, deviceTypeMismatch as c, runtimeMismatch as d, unknownAndroidDeviceProfileRefusal as f, withDeviceBootAdmission as g, unknownIosRuntimeRefusal as h, countLiveOwnedDevices as i, layerNote as l, unknownIosDeviceTypeRefusal as m, DeviceAdmissionRefusal as n, countLiveOwnedDevicesFrom as o, unknownAndroidSystemImageRefusal as p, checkDeviceCapacity as r, deviceSlotUsage as s, DEFAULT_DEVICE_SLOT_WAIT_MS as t, peekDeviceSlots as u };
@@ -1,20 +1,20 @@
1
1
  import { b as operationState, t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { G as projectDeviceSlots, V as deviceSlotKey, W as parseDeviceSlotOption, _ as loadConfig$1, p as getProject } from "./config-Cn94Jc0g.mjs";
3
3
  import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { r as clockTime } from "./command-output-Dj-WT4BP.mjs";
5
- import { $t as makeTemporaryDirectory, X as resolveProjectSettings, Y as resolveIosProjectDir, en as removeTemporaryEntry, it as settingValueAt } from "./settings-BDVI8Ivc.mjs";
6
- import { f as projectRegistry, g as selectNativeXcodeProject, i as findProjectRoot$1, p as NativeXcodeError, t as NO_PROJECT_REFUSAL } from "./project-DYj-HVx6.mjs";
7
- import { A as listAdbDevices, O as getAvdNameForSerialAsync, R as memoizeEmulatorProbe, Y as physicalDeviceModel, Z as probeEmulatorSerial, c as androidPoolNoCandidatesRefusal, rt as resolvePhysicalDevice, s as androidPoolCandidates } from "./android-DriNoAVy.mjs";
8
- import { En as runProcessOperation } from "./ccache-BWTze1Ls.mjs";
9
- import { H as resolveScheme, K as xcodebuildArgs } from "./toolchain-CbCG6C5Z.mjs";
10
- import { C as parseLeaseDuration, D as releaseWorkspaceLeases, j as takeLease, y as fileLeaseIo } from "./activity-Cd-ysFes.mjs";
11
- import { a as discoverXcodeProject } from "./react-native-build-DaK2IFyP.mjs";
12
- import { l as parseDeviceWait, p as waitForDevice } from "./device-lease-run-DwsGfjUN.mjs";
13
- import { m as resolveConfiguration, y as resolveSchemeSelection } from "./support-Be0UeVZU.mjs";
4
+ import { r as clockTime } from "./command-output-C8R1KIvi.mjs";
5
+ import { X as resolveProjectSettings, Y as resolveIosProjectDir, an as makeTemporaryDirectory, it as settingValueAt, on as removeTemporaryEntry } from "./settings-CY5JZlNN.mjs";
6
+ import { f as projectRegistry, g as selectNativeXcodeProject, i as findProjectRoot$1, p as NativeXcodeError, t as NO_PROJECT_REFUSAL } from "./project-Sui52ywT.mjs";
7
+ import { A as listAdbDevices, O as getAvdNameForSerialAsync, R as memoizeEmulatorProbe, Y as physicalDeviceModel, Z as probeEmulatorSerial, c as androidPoolNoCandidatesRefusal, rt as resolvePhysicalDevice, s as androidPoolCandidates } from "./android-CsPs-7Mg.mjs";
8
+ import { En as runProcessOperation } from "./ccache-Bm_A1xX9.mjs";
9
+ import { H as resolveScheme, K as xcodebuildArgs } from "./toolchain-mLA_km-b.mjs";
10
+ import { C as parseLeaseDuration, D as releaseWorkspaceLeases, j as takeLease, y as fileLeaseIo } from "./activity-DRMg4_mD.mjs";
11
+ import { a as discoverXcodeProject } from "./react-native-build-jUHnIfZ9.mjs";
12
+ import { l as parseDeviceWait, p as waitForDevice } from "./device-lease-run-Mtzp4THX.mjs";
13
+ import { m as resolveConfiguration, y as resolveSchemeSelection } from "./support-BtlJKjyQ.mjs";
14
14
  import { n as findSigningIdentities, o as parsePlist, s as parseProvisioningProfilePlist, t as decodeProvisioningProfile } from "./ios-signing-BJzvDPfU.mjs";
15
- import { t as selectFromPool } from "./device-pool-BnQqvs6o.mjs";
16
- import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, l as listIosDevices, o as iosPoolNoCandidatesRefusal } from "./ios-device-C_QkIf1Z.mjs";
17
- import { i as nativeXcodePackages, t as nativeXcodeHasPackages } from "./native-xcode-inputs-B1W8SrxB.mjs";
15
+ import { t as selectFromPool } from "./device-pool-eRz6DtCg.mjs";
16
+ import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, l as listIosDevices, o as iosPoolNoCandidatesRefusal } from "./ios-device-B4elVFKi.mjs";
17
+ import { i as nativeXcodePackages, t as nativeXcodeHasPackages } from "./native-xcode-inputs-BKarCoKg.mjs";
18
18
  import { existsSync, readdirSync, realpathSync, statSync } from "node:fs";
19
19
  import { homedir } from "node:os";
20
20
  import { join } from "node:path";
@@ -1,17 +1,17 @@
1
1
  import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { _ as ensureWorkspaceStorage, d as writeWorkspaceState } from "./workspace-state-BjqdjnJR.mjs";
2
+ import { _ as ensureWorkspaceStorage, d as writeWorkspaceState } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig } from "./config-Cn94Jc0g.mjs";
4
- import { i as macosProcess, o as requiredMacosRecord } from "./state-CZxLyetD.mjs";
5
- import { A as listAdbDevices, Ct as forgetCreatedDeviceAsync, D as getAvdNameForSerial, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, M as listAvdDeviceProfiles, O as getAvdNameForSerialAsync, U as ownedAvdName, X as pickDefaultSystemImage, a as androidDeviceAbi, ct as waitForBoot, d as androidToolPath, f as assertOwnedAvdStopped, g as avdPathExists, k as hostSystemImageArch, nt as resolveOwnedAvdSerialAsync, t as DEFAULT_AVD_DEVICE_PROFILE, tt as resetAdoptedAvd, v as avdStorageRoots, x as createOwnedAvd, y as bootAndroidEmulator } from "./android-DriNoAVy.mjs";
6
- import { a as parsePidof, i as parseLogcatLine, t as androidClockOffset } from "./android-Deb9X3_Y.mjs";
4
+ import { i as macosProcess, o as requiredMacosRecord } from "./state-BXC1Lfxw.mjs";
5
+ import { A as listAdbDevices, Ct as forgetCreatedDeviceAsync, D as getAvdNameForSerial, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, M as listAvdDeviceProfiles, O as getAvdNameForSerialAsync, U as ownedAvdName, X as pickDefaultSystemImage, a as androidDeviceAbi, ct as waitForBoot, d as androidToolPath, f as assertOwnedAvdStopped, g as avdPathExists, k as hostSystemImageArch, nt as resolveOwnedAvdSerialAsync, t as DEFAULT_AVD_DEVICE_PROFILE, tt as resetAdoptedAvd, v as avdStorageRoots, x as createOwnedAvd, y as bootAndroidEmulator } from "./android-CsPs-7Mg.mjs";
6
+ import { a as parsePidof, i as parseLogcatLine, t as androidClockOffset } from "./android-D577ApKG.mjs";
7
7
  import { i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.mjs";
8
- import { _n as reverseMetroPorts, dn as installIosApp, fn as iosAppProcess, hn as launchIosApp, ln as installAndroidApp, mn as launchAndroidReleaseApp, pn as launchAndroidApp, tn as androidAppProcess, vn as writeDebugHttpHost } from "./ccache-BWTze1Ls.mjs";
9
- import { ft as teardownOwnedIosSim, ut as teardownOwnedAvd } from "./workspaces-DFbj07jp.mjs";
10
- import { E as resolveIosCreation, R as readHostMemoryPressure, T as resetIosPrivacy, a as createOwnedIosSim, d as listAllIosSims, g as listUserApps, j as uninstallIosApp, n as bootIosSim, w as resetIosKeychain } from "./ios-E26qSpkb.mjs";
11
- import { r as stopMacosAppHeld } from "./stop-CH79S3IZ.mjs";
8
+ import { _n as reverseMetroPorts, dn as installIosApp, fn as iosAppProcess, hn as launchIosApp, ln as installAndroidApp, mn as launchAndroidReleaseApp, pn as launchAndroidApp, tn as androidAppProcess, vn as writeDebugHttpHost } from "./ccache-Bm_A1xX9.mjs";
9
+ import { ht as teardownOwnedIosSim, pt as teardownOwnedAvd } from "./workspaces-CmOcceDN.mjs";
10
+ import { E as resolveIosCreation, R as readHostMemoryPressure, T as resetIosPrivacy, a as createOwnedIosSim, d as listAllIosSims, g as listUserApps, j as uninstallIosApp, n as bootIosSim, w as resetIosKeychain } from "./ios-B1DYuOjh.mjs";
11
+ import { i as stopMacosAppHeld, n as stopHostedBundleInstances } from "./stop-DQvE-P76.mjs";
12
12
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
13
- import { i as countLiveOwnedDevices } from "./device-capacity-6LP7QsaA.mjs";
14
- import { _ as findAapt } from "./support-CNg_YsOk.mjs";
13
+ import { i as countLiveOwnedDevices } from "./device-capacity-Cd8lMSn3.mjs";
14
+ import { _ as findAapt } from "./support-04IhBUTT.mjs";
15
15
  import { t as waitForMacosRegistration } from "./registration-BwCe64PH.mjs";
16
16
  import { n as parseLogStreamLine } from "./ios-CsRVik64.mjs";
17
17
  import { createHash, randomUUID } from "node:crypto";
@@ -953,11 +953,12 @@ async function runHostedMacosApp(mode, request, app) {
953
953
  if (device.appSlot !== request.appSlot) throw new Error("The hosted macOS app slot changed.");
954
954
  assertHostedDeviceLedger(home, `macos-${device.appSlot}`, "macos");
955
955
  const runRoot = join(realpathSync(home), "macos-app");
956
+ const area = realpathSync(join(home, ".."));
956
957
  if (mode === "stop") {
957
958
  if (requiredMacosRecord(runRoot)) await stopMacosAppHeld(runRoot);
959
+ await stopHostedBundleInstances(area);
958
960
  const bundleId = preferenceIdentity(home, device.appSlot);
959
961
  if (bundleId) removePreferences(bundleId);
960
- const area = realpathSync(join(home, ".."));
961
962
  assertInside(area, home);
962
963
  removeAppData(realpathSync(home), join(home, "app-home"));
963
964
  const apps = join(home, "..", "apps");
@@ -1035,6 +1036,7 @@ async function runHostedMacosApp(mode, request, app) {
1035
1036
  bundle
1036
1037
  ], options);
1037
1038
  if (requiredMacosRecord(runRoot)) await stopMacosAppHeld(runRoot);
1039
+ await stopHostedBundleInstances(area);
1038
1040
  const previousId = preferenceIdentity(home, device.appSlot);
1039
1041
  if (previousId && previousId !== bundleId) removePreferences(previousId);
1040
1042
  mkdirSync(runRoot, {
@@ -1,13 +1,13 @@
1
1
  import { D as ownership_claim_exports, o as cancellableSleep, t as getExecutor, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
- import { D as workspaceId$1, k as workspaceLogsDir$1 } from "./workspace-state-BjqdjnJR.mjs";
2
+ import { D as workspaceId$1, k as workspaceLogsDir$1 } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { C as saveConfig, G as projectDeviceSlots, H as deviceSlotPlatforms, O as withConfigLockAsync$1, _ as loadConfig$1, a as clearDevice, d as getConfigDir, w as setDevice } from "./config-Cn94Jc0g.mjs";
4
- import { l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
5
- import { D as iosSimSlimProfileSetting, E as iosSimSlimDefaultSetting } from "./settings-BDVI8Ivc.mjs";
6
- import { mt as dropParked, pt as adoptParked, vt as parkedMaxSetting, xt as selectParked, yt as readParked } from "./android-DriNoAVy.mjs";
4
+ import { l as phaseLine } from "./command-output-C8R1KIvi.mjs";
5
+ import { D as iosSimSlimProfileSetting, E as iosSimSlimDefaultSetting } from "./settings-CY5JZlNN.mjs";
6
+ import { mt as dropParked, pt as adoptParked, vt as parkedMaxSetting, xt as selectParked, yt as readParked } from "./android-CsPs-7Mg.mjs";
7
7
  import { i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.mjs";
8
- import { ft as teardownOwnedIosSim, mt as teardownParkedIosSim } from "./workspaces-DFbj07jp.mjs";
9
- import { A as springBoardRunning, B as reportMemoryCulprits, C as renameIosSim, D as resolveOwnedIosSim, E as resolveIosCreation, F as hostMemoryPressureAdvice, M as waitForSpringBoard, N as configuredIosSimulatorViewer, R as readHostMemoryPressure, S as readSpringBoardPid, T as resetIosPrivacy, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosKeychain, y as parseRuntimeVersion } from "./ios-E26qSpkb.mjs";
10
- import { h as withDeviceBootAdmission, n as DeviceAdmissionRefusal, s as deviceTypeMismatch, u as runtimeMismatch } from "./device-capacity-6LP7QsaA.mjs";
8
+ import { _t as teardownParkedIosSim, ht as teardownOwnedIosSim } from "./workspaces-CmOcceDN.mjs";
9
+ import { A as springBoardRunning, B as reportMemoryCulprits, C as renameIosSim, D as resolveOwnedIosSim, E as resolveIosCreation, F as hostMemoryPressureAdvice, M as waitForSpringBoard, N as configuredIosSimulatorViewer, R as readHostMemoryPressure, S as readSpringBoardPid, T as resetIosPrivacy, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosKeychain, y as parseRuntimeVersion } from "./ios-B1DYuOjh.mjs";
10
+ import { c as deviceTypeMismatch, d as runtimeMismatch, g as withDeviceBootAdmission, n as DeviceAdmissionRefusal } from "./device-capacity-Cd8lMSn3.mjs";
11
11
  import { createHash } from "node:crypto";
12
12
  import { readFileSync } from "node:fs";
13
13
  import { homedir } from "node:os";
@@ -1,8 +1,8 @@
1
1
  import { b as operationState } from "./exec-aULwtNly.mjs";
2
2
  import { V as deviceSlotKey } from "./config-Cn94Jc0g.mjs";
3
- import { a as formatElapsed, r as clockTime } from "./command-output-Dj-WT4BP.mjs";
4
- import { Xt as APP_READINESS_TIMEOUT_MS, zt as MANIFEST_VERIFY_TIMEOUT_MS } from "./ccache-BWTze1Ls.mjs";
5
- import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Cd-ysFes.mjs";
3
+ import { a as formatElapsed, r as clockTime } from "./command-output-C8R1KIvi.mjs";
4
+ import { Xt as APP_READINESS_TIMEOUT_MS, zt as MANIFEST_VERIFY_TIMEOUT_MS } from "./ccache-Bm_A1xX9.mjs";
5
+ import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-DRMg4_mD.mjs";
6
6
  //#region src/engine/device-lease-run.ts
7
7
  const LEASE_STEP_FLOOR_MS = 6e4;
8
8
  const DEBUG_VERIFY_STEP_MS = MANIFEST_VERIFY_TIMEOUT_MS + APP_READINESS_TIMEOUT_MS;
@@ -1,6 +1,6 @@
1
1
  import { V as deviceSlotKey } from "./config-Cn94Jc0g.mjs";
2
- import { A as selectPoolDevice, S as parseLease, b as leaseIsExpired, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Cd-ysFes.mjs";
3
- import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-DwsGfjUN.mjs";
2
+ import { A as selectPoolDevice, S as parseLease, b as leaseIsExpired, v as deviceLeasePath, y as fileLeaseIo } from "./activity-DRMg4_mD.mjs";
3
+ import { i as DEVICE_WAIT_POLL_MS, n as DEVICE_BUSY, o as leaseExpiryText } from "./device-lease-run-Mtzp4THX.mjs";
4
4
  //#region src/engine/device-pool.ts
5
5
  function heldPoolId(root, platform, now, io = fileLeaseIo, slot = "default") {
6
6
  const record = io.readHolder(root)[deviceSlotKey(platform, slot)];
@@ -1,17 +1,17 @@
1
1
  import { Q as doctorIo, _ as loadConfig$1, p as getProject } from "./config-Cn94Jc0g.mjs";
2
- import { f as refuseNoProject, l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
3
- import { It as repoRoot, z as projectSettingsContextAsync } from "./settings-BDVI8Ivc.mjs";
4
- import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-DYj-HVx6.mjs";
5
- import { Qn as inspectWatchmanMemory, f as inspectBudget, l as budgetLine, nr as memorySweepIsScoped } from "./ccache-BWTze1Ls.mjs";
6
- import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-DrP4OuuM.mjs";
7
- import { I as detectXcodeMajorAsync } from "./toolchain-CbCG6C5Z.mjs";
8
- import { H as memoryCulpritFindings, U as readMemoryCulpritsAsync, f as listAllIosSimsAsync, h as listIosRuntimesAsync, l as iosRuntimeMatches, x as pickDefaultIosCreation } from "./ios-E26qSpkb.mjs";
9
- import { s as offloadCheck } from "./client-xsdxrhWA.mjs";
10
- import { g as configuredMachines, p as inspectBuildMachines, v as inspectDeviceHostMachines } from "./selection-Bs8phwhN.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-C8R1KIvi.mjs";
3
+ import { Bt as repoRoot, z as projectSettingsContextAsync } from "./settings-CY5JZlNN.mjs";
4
+ import { f as projectRegistry, t as NO_PROJECT_REFUSAL } from "./project-Sui52ywT.mjs";
5
+ import { Qn as inspectWatchmanMemory, f as inspectBudget, l as budgetLine, nr as memorySweepIsScoped } from "./ccache-Bm_A1xX9.mjs";
6
+ import { c as inspectStimVersions, s as compareStimVersions } from "./eas-session-ledger-CBFo_Uo1.mjs";
7
+ import { I as detectXcodeMajorAsync } from "./toolchain-mLA_km-b.mjs";
8
+ import { H as memoryCulpritFindings, U as readMemoryCulpritsAsync, f as listAllIosSimsAsync, h as listIosRuntimesAsync, l as iosRuntimeMatches, x as pickDefaultIosCreation } from "./ios-B1DYuOjh.mjs";
9
+ import { s as offloadCheck } from "./client-YxCer6ab.mjs";
10
+ import { g as configuredMachines, p as inspectBuildMachines, v as inspectDeviceHostMachines } from "./selection-CXgM_VK_.mjs";
11
11
  import { r as maintenanceStatus, t as maintenanceLine } from "./status-7ULDEJ1e.mjs";
12
- import { a as writeIgnoreDirs, c as recordDoctorRun, i as watchedCheckouts, n as inspectNestedWorktrees, r as nestedWorktreeFinding } from "./doctor-watchman-CxDbyrrt.mjs";
13
- import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-F-3VUUyN.mjs";
14
- import { h as resolveDeviceType, v as resolveRuntime } from "./support-Be0UeVZU.mjs";
12
+ import { a as writeIgnoreDirs, c as recordDoctorRun, i as watchedCheckouts, n as inspectNestedWorktrees, r as nestedWorktreeFinding } from "./doctor-watchman-BTW82PDC.mjs";
13
+ import { c as checkWorktreeStorageLayout, l as readMachineSettings, o as runDoctor } from "./doctor-xf7ht-5n.mjs";
14
+ import { h as resolveDeviceType, v as resolveRuntime } from "./support-BtlJKjyQ.mjs";
15
15
  import { isJsonObject, maintenanceNdjsonFile, readHostedAppMetadata, readHostedSessions } from "@stim-cli/core/state";
16
16
  import { dirname, join, sep } from "path";
17
17
  import chalk from "chalk";
@@ -1,2 +1,2 @@
1
- import { a as readDoctorReport, i as parseDoctorPlatform, n as doctorCommand, o as shadowedStimFinding, r as doctorSuccessLines, s as toolchainReport, t as applySandboxFix } from "./doctor-DyqE9n1J.mjs";
1
+ import { a as readDoctorReport, i as parseDoctorPlatform, n as doctorCommand, o as shadowedStimFinding, r as doctorSuccessLines, s as toolchainReport, t as applySandboxFix } from "./doctor-Bz_ouYAW.mjs";
2
2
  export { applySandboxFix, doctorCommand as default, doctorSuccessLines, parseDoctorPlatform, readDoctorReport, shadowedStimFinding, toolchainReport };
@@ -1,4 +1,4 @@
1
- import { m as fingerprintProject } from "./build-cache-gBJ-WKzA.mjs";
1
+ import { m as fingerprintProject } from "./build-cache-CZULpXVl.mjs";
2
2
  import * as fingerprint from "@expo/fingerprint";
3
3
  //#region bin/doctor-fingerprint.ts
4
4
  let input = "";
@@ -1,8 +1,8 @@
1
1
  import { E as upsertProject, O as withConfigLockAsync$1, d as getConfigDir, p as getProject } from "./config-Cn94Jc0g.mjs";
2
2
  import { l as gitQuietAsync } from "./operation-exec-Dp4FuIGR.mjs";
3
- import { At as listWorktreesAsync, Lt as repoRootAsync } from "./settings-BDVI8Ivc.mjs";
4
- import { f as projectRegistry } from "./project-DYj-HVx6.mjs";
5
- import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-DrP4OuuM.mjs";
3
+ import { Vt as repoRootAsync, jt as listWorktreesAsync } from "./settings-CY5JZlNN.mjs";
4
+ import { f as projectRegistry } from "./project-Sui52ywT.mjs";
5
+ import { d as parseWatchRoots, m as runWatchman, s as compareStimVersions } from "./eas-session-ledger-CBFo_Uo1.mjs";
6
6
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
7
7
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
8
8
  import { isJsonObject } from "@stim-cli/core/state";
@@ -1,28 +1,28 @@
1
1
  import { C as reportSignal, T as trackReportResource, t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { T as workspaceDerivedData, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-BjqdjnJR.mjs";
2
+ import { T as workspaceDerivedData, r as readWorkspaceState$1, y as sharedBuildCache } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { _ as loadConfig$1, at as realIo, s as configCorruptRepair, u as getConcurrencyLimits } from "./config-Cn94Jc0g.mjs";
4
- import { d as quotedPath, u as plural } from "./command-output-Dj-WT4BP.mjs";
4
+ import { d as quotedPath, u as plural } from "./command-output-C8R1KIvi.mjs";
5
5
  import { l as gitQuietAsync, o as git } from "./operation-exec-Dp4FuIGR.mjs";
6
- import { $t as makeTemporaryDirectory, At as listWorktreesAsync, Bt as resolveSourceCheckoutAsync, D as iosSimSlimProfileSetting, E as iosSimSlimDefaultSetting, G as remoteIosSetting, It as repoRoot, Lt as repoRootAsync, Mt as locallyKnownUpstreamAsync, Q as resolveSettings, Qt as filesystemDevice, R as projectSettingsContext, U as remoteAndroidSetting, V as readCommittedSettings, Y as resolveIosProjectDir, a as SETTING_SHAPE_REMEDY, at as settingsLayers, ct as webSettings, i as SETTINGS_WITH_RESOLVE_TIME_FALLBACK, it as settingValueAt, k as mergeSettingsLayers, m as defaultAndroidLayout, nn as temporaryRoot, q as resolveAndroidLayout, r as PATH_SETTINGS, rt as settingShapeErrors, st as unknownSettingKeys, tt as settingOrigin, vt as dirtyFingerprintFiles, xt as gitCommonDirAsync } from "./settings-BDVI8Ivc.mjs";
7
- import { C as resolvePackageJson, _ as appProjectProblem, b as isPackageResolvable, v as detectIsExpo } from "./project-DYj-HVx6.mjs";
8
- import { ft as POOL_SETTING_REMEDY, k as hostSystemImageArch, o as androidHome, vt as parkedMaxSetting } from "./android-DriNoAVy.mjs";
9
- import { An as checkEasAuth$1, Fn as providerFromConfig, Gn as easCliSupport, Kn as easCliUpgradeRemedy, Ln as resolveEasCliBin, Pn as ownerFromConfig, Wn as MIN_EAS_CLI_SIMULATOR_VERSION, a as projectCmakeLauncher, i as ccacheInstallCommand, jt as readInstalledEasCliVersionAsync } from "./ccache-BWTze1Ls.mjs";
10
- import { bt as listBuildSlots } from "./workspaces-DFbj07jp.mjs";
11
- import { Y as podInstallCommand } from "./toolchain-CbCG6C5Z.mjs";
12
- import { N as listBuildLocks } from "./activity-Cd-ysFes.mjs";
13
- import { m as fingerprintProject, o as diffFingerprintSources } from "./build-cache-gBJ-WKzA.mjs";
14
- import { F as hostMemoryPressureAdvice, z as readHostMemoryPressureAsync } from "./ios-E26qSpkb.mjs";
6
+ import { Bt as repoRoot, D as iosSimSlimProfileSetting, E as iosSimSlimDefaultSetting, G as remoteIosSetting, Nt as locallyKnownUpstreamAsync, Q as resolveSettings, R as projectSettingsContext, St as gitCommonDirAsync, U as remoteAndroidSetting, V as readCommittedSettings, Vt as repoRootAsync, Wt as resolveSourceCheckoutAsync, Y as resolveIosProjectDir, a as SETTING_SHAPE_REMEDY, an as makeTemporaryDirectory, at as settingsLayers, cn as temporaryRoot, ct as webSettings, i as SETTINGS_WITH_RESOLVE_TIME_FALLBACK, in as filesystemDevice, it as settingValueAt, jt as listWorktreesAsync, k as mergeSettingsLayers, m as defaultAndroidLayout, q as resolveAndroidLayout, r as PATH_SETTINGS, rt as settingShapeErrors, st as unknownSettingKeys, tt as settingOrigin, yt as dirtyFingerprintFiles } from "./settings-CY5JZlNN.mjs";
7
+ import { C as resolvePackageJson, _ as appProjectProblem, b as isPackageResolvable, v as detectIsExpo } from "./project-Sui52ywT.mjs";
8
+ import { ft as POOL_SETTING_REMEDY, k as hostSystemImageArch, o as androidHome, vt as parkedMaxSetting } from "./android-CsPs-7Mg.mjs";
9
+ import { An as checkEasAuth$1, Fn as providerFromConfig, Gn as easCliSupport, Kn as easCliUpgradeRemedy, Ln as resolveEasCliBin, Pn as ownerFromConfig, Wn as MIN_EAS_CLI_SIMULATOR_VERSION, a as projectCmakeLauncher, i as ccacheInstallCommand, jt as readInstalledEasCliVersionAsync } from "./ccache-Bm_A1xX9.mjs";
10
+ import { wt as listBuildSlots } from "./workspaces-CmOcceDN.mjs";
11
+ import { Y as podInstallCommand } from "./toolchain-mLA_km-b.mjs";
12
+ import { N as listBuildLocks } from "./activity-DRMg4_mD.mjs";
13
+ import { m as fingerprintProject, o as diffFingerprintSources } from "./build-cache-CZULpXVl.mjs";
14
+ import { F as hostMemoryPressureAdvice, z as readHostMemoryPressureAsync } from "./ios-B1DYuOjh.mjs";
15
15
  import { p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-DHm_U5gv.mjs";
16
- import { n as hasInstalledDependencies, r as installedNpmTreeIsValidAsync, t as dependencyState } from "./dependency-state-C3OtgG94.mjs";
17
- import { g as androidPathRoomRemedy, i as ccacheEnabled, l as androidSdkRefusal, m as androidPathRoomMessage, p as androidPathRoom, t as apkOutputsDir } from "./react-native-build-DaK2IFyP.mjs";
18
- import { a as envSettingRefusal, i as configSettingRefusal } from "./settings-payload-cm60Zhib.mjs";
19
- import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-6LP7QsaA.mjs";
16
+ import { n as hasInstalledDependencies, r as installedNpmTreeIsValidAsync, t as dependencyState } from "./dependency-state-CojA2o0t.mjs";
17
+ import { g as androidPathRoomRemedy, i as ccacheEnabled, l as androidSdkRefusal, m as androidPathRoomMessage, p as androidPathRoom, t as apkOutputsDir } from "./react-native-build-jUHnIfZ9.mjs";
18
+ import { a as envSettingRefusal, i as configSettingRefusal } from "./settings-payload-DwQiEMCn.mjs";
19
+ import { a as countLiveOwnedDevicesAsync, i as countLiveOwnedDevices } from "./device-capacity-Cd8lMSn3.mjs";
20
20
  import { t as readDoctorFingerprint } from "./doctor-fingerprint-o7ZI9YLn.mjs";
21
21
  import { i as probeSigningIdentities } from "./ios-signing-BJzvDPfU.mjs";
22
22
  import { a as findChrome, t as CHROME_INSTALL_REMEDY } from "./chrome-DyDWurWG.mjs";
23
23
  import { n as simslimIsOnPath } from "./simslim-DCQwzoPy.mjs";
24
- import { t as MIN_EAS_CLI_BUILD_DOWNLOAD_VERSION } from "./eas-build-CjNSWmjo.mjs";
25
- import { r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-D5e6ecUg.mjs";
24
+ import { t as MIN_EAS_CLI_BUILD_DOWNLOAD_VERSION } from "./eas-build-Dm6q68QY.mjs";
25
+ import { r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-_aDifWW0.mjs";
26
26
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync } from "node:fs";
27
27
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
28
28
  import { LAST_BUILD_KEYS, REPLACED_SETTINGS, isJsonObject, readBuildHistory, readJsonObject, readStats, replacementAdvice, settingDefinition } from "@stim-cli/core/state";
@@ -1,7 +1,7 @@
1
1
  import { D as ownership_claim_exports, c as throwIfCancelled, t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { a as killOnAbort, r as childEnvironment } from "./operation-exec-Dp4FuIGR.mjs";
3
- import { Gn as easCliSupport, Kn as easCliUpgradeRemedy, Ln as resolveEasCliBin, Vn as remoteCliInvocation } from "./ccache-BWTze1Ls.mjs";
4
- import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-Cd-ysFes.mjs";
3
+ import { Gn as easCliSupport, Kn as easCliUpgradeRemedy, Ln as resolveEasCliBin, Vn as remoteCliInvocation } from "./ccache-Bm_A1xX9.mjs";
4
+ import { M as acquireBuildLock, P as releaseBuildLock } from "./activity-DRMg4_mD.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { existsSync, realpathSync, statSync } from "node:fs";
7
7
  //#region src/engine/eas-build.ts
@@ -1,9 +1,9 @@
1
1
  import { c as throwIfCancelled, t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { p as getProject } from "./config-Cn94Jc0g.mjs";
3
3
  import { r as childEnvironment } from "./operation-exec-Dp4FuIGR.mjs";
4
- import { dt as detectProviders, ft as planMetroReach } from "./settings-BDVI8Ivc.mjs";
5
- import { M as readMetroTunnel, P as readRemoteSession } from "./project-DYj-HVx6.mjs";
6
- import { Gn as easCliSupport, Hn as remoteCommand, Ln as resolveEasCliBin, Mn as isEasAuthFailureText, Un as MIN_EAS_CLI_DEVICE_VERSION, Wn as MIN_EAS_CLI_SIMULATOR_VERSION, jt as readInstalledEasCliVersionAsync } from "./ccache-BWTze1Ls.mjs";
4
+ import { dt as detectProviders, ft as planMetroReach } from "./settings-CY5JZlNN.mjs";
5
+ import { M as readMetroTunnel, P as readRemoteSession } from "./project-Sui52ywT.mjs";
6
+ import { Gn as easCliSupport, Hn as remoteCommand, Ln as resolveEasCliBin, Mn as isEasAuthFailureText, Un as MIN_EAS_CLI_DEVICE_VERSION, Wn as MIN_EAS_CLI_SIMULATOR_VERSION, jt as readInstalledEasCliVersionAsync } from "./ccache-Bm_A1xX9.mjs";
7
7
  //#region src/engine/eas-fallback.ts
8
8
  const AVAILABILITY_TIMEOUT_MS = 3e4;
9
9
  function unusable(code, reason) {
@@ -1,13 +1,13 @@
1
1
  import { C as reportSignal, t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { M as withDirLock$1, N as withDirLockAsync$1, w as workspaceAgentDeviceDir } from "./workspace-state-BjqdjnJR.mjs";
2
+ import { M as withDirLock$1, N as withDirLockAsync$1, w as workspaceAgentDeviceDir } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { G as projectDeviceSlots, V as deviceSlotKey } from "./config-Cn94Jc0g.mjs";
4
- import { a as formatElapsed, o as formatLongDuration, r as clockTime, u as plural } from "./command-output-Dj-WT4BP.mjs";
5
- import { n as isInsideProject } from "./metro-CvyD-xwe.mjs";
6
- import { r as cdpEndpoint } from "./state-BX1y5syV.mjs";
4
+ import { a as formatElapsed, o as formatLongDuration, r as clockTime, u as plural } from "./command-output-C8R1KIvi.mjs";
5
+ import { n as isInsideProject } from "./metro-BnhXV2Mj.mjs";
6
+ import { r as cdpEndpoint } from "./state-B2QJbDwz.mjs";
7
7
  import { accessSync, constants, existsSync, mkdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
8
8
  import { delimiter, dirname, join, resolve } from "node:path";
9
9
  import { workspaceId } from "@stim-cli/core";
10
- import { ACTIVITY_RECENCY_BASES, easMachineStateRoot, easMachineStateRoot as easMachineStateRoot$1, easSessionLedgerFile, easSessionLedgerLock, readEasSessionLedger, readEasSessionLedger as readEasSessionLedger$1, validEasSessionClaim } from "@stim-cli/core/state";
10
+ import { ACTIVITY_RECENCY_BASES, easMachineStateRoot, easMachineStateRoot as easMachineStateRoot$1, easSessionLedgerFile, easSessionLedgerLock, loadState, readEasSessionLedger, readEasSessionLedger as readEasSessionLedger$1, validEasSessionClaim } from "@stim-cli/core/state";
11
11
  import { basename as basename$1, sep as sep$1 } from "path";
12
12
  //#region src/status.ts
13
13
  const IOS_SIM_MB = 1500;
@@ -348,6 +348,35 @@ function capacity(states, totalMemoryMb) {
348
348
  overCapacity: Boolean(totalMemoryMb && committedMb > totalMemoryMb * .6)
349
349
  };
350
350
  }
351
+ /** `capacity.load` from a load reading, the `server.maxLoadPerCore` it is busy at, and the configured limit. */
352
+ function capacityLoad({ cpus, loadPerCore }, busyAt, limit) {
353
+ return {
354
+ cpus,
355
+ loadPerCore,
356
+ busyAt,
357
+ limit,
358
+ state: loadState(loadPerCore, busyAt, limit)
359
+ };
360
+ }
361
+ function loadLine({ loadPerCore, busyAt, limit }) {
362
+ return `load ${loadPerCore}/core (busy at ${busyAt}${limit === null ? "" : `, holding at ${limit}`})`;
363
+ }
364
+ /** The plain status lines for the `concurrency.maxBuilds` and `concurrency.maxDevices` caps that are set. */
365
+ function slotUsageLines({ builds, devices }) {
366
+ const lines = [];
367
+ if (builds) {
368
+ const holders = builds.holders.map((holder) => holder.unresolved ? `slot ${holder.slot} unresolved` : holder.client ? `offloaded for ${holder.client}` : holder.workspace ? basename$1(holder.workspace) : `slot ${holder.slot}`);
369
+ lines.push(`builds ${builds.inUse}/${builds.max} (concurrency.maxBuilds)${holders.length ? `: ${holders.join(", ")}` : ""}`);
370
+ }
371
+ if (devices) {
372
+ if (devices.inUse === null) lines.push(`devices ?/${devices.max} (concurrency.maxDevices): ${devices.unknown ?? "not counted"}`);
373
+ else {
374
+ const holders = devices.holders.map((holder) => `${holder.label} ${holder.platform}${holder.slot && holder.slot !== "default" ? ` [${holder.slot}]` : ""}${holder.booting ? " (booting)" : ""}`);
375
+ lines.push(`devices ${devices.inUse}/${devices.max} (concurrency.maxDevices)${holders.length ? `: ${holders.join(", ")}` : ""}`);
376
+ }
377
+ }
378
+ return lines;
379
+ }
351
380
  function parseDfFree(output) {
352
381
  const lines = String(output || "").trim().split("\n");
353
382
  if (lines.length < 2) return null;
@@ -724,4 +753,4 @@ async function removeEasSessionClaimAsync(sessionId, root = easMachineStateRoot(
724
753
  return withDirLockAsync$1(easSessionLedgerLock(root), () => removeEasSessionClaim(sessionId, root, when), { signal });
725
754
  }
726
755
  //#endregion
727
- export { remoteDeviceState as A, environmentState as C, parseDfFree as D, metroReverseTargets as E, tightVolumes as M, unprovisionedWorktrees as N, poolLine as O, withWebFacts as P, diskLine as S, gitSummaryText as T, addReverseMissingIssue as _, removeEasSessionClaim as a, deviceLeaseLines as b, inspectStimVersions as c, parseWatchRoots as d, parseWatchmanClients as f, activityLabel as g, RECENT_LAUNCH_MS as h, recordEasSessionClaim as i, statusActivity as j, remoteDeviceLine as k, parseSubscriberNames as l, runWatchman as m, easMachineStateRoot$1 as n, removeEasSessionClaimAsync as o, parseWatchmanPid as p, readEasSessionLedger$1 as r, compareStimVersions as s, assertEasMachineRootWritable as t, parseTriggerCount as u, applyMachineMemory as v, formatSpace as w, deviceLeaseStates as x, capacity as y };
756
+ export { poolLine as A, diskLine as C, loadLine as D, gitSummaryText as E, tightVolumes as F, unprovisionedWorktrees as I, withWebFacts as L, remoteDeviceState as M, slotUsageLines as N, metroReverseTargets as O, statusActivity as P, deviceLeaseStates as S, formatSpace as T, addReverseMissingIssue as _, removeEasSessionClaim as a, capacityLoad as b, inspectStimVersions as c, parseWatchRoots as d, parseWatchmanClients as f, activityLabel as g, RECENT_LAUNCH_MS as h, recordEasSessionClaim as i, remoteDeviceLine as j, parseDfFree as k, parseSubscriberNames as l, runWatchman as m, easMachineStateRoot$1 as n, removeEasSessionClaimAsync as o, parseWatchmanPid as p, readEasSessionLedger$1 as r, compareStimVersions as s, assertEasMachineRootWritable as t, parseTriggerCount as u, applyMachineMemory as v, environmentState as w, deviceLeaseLines as x, capacity as y };
@@ -1,12 +1,12 @@
1
1
  import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { r as readWorkspaceState$1 } from "./workspace-state-BjqdjnJR.mjs";
2
+ import { r as readWorkspaceState$1 } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { H as deviceSlotPlatforms, V as deviceSlotKey, p as getProject } from "./config-Cn94Jc0g.mjs";
4
- import { v as launchErrorPreview } from "./command-output-Dj-WT4BP.mjs";
5
- import { I as readWorkspaceLaunches } from "./project-DYj-HVx6.mjs";
6
- import { o as androidHome, u as androidToolCwd } from "./android-DriNoAVy.mjs";
7
- import { d as resolveProjectMetro } from "./metro-CvyD-xwe.mjs";
8
- import { i as parseLogcatLine, n as androidLogGroups, r as isAndroidCrashText } from "./android-Deb9X3_Y.mjs";
9
- import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-Cd-ysFes.mjs";
4
+ import { v as launchErrorPreview } from "./command-output-C8R1KIvi.mjs";
5
+ import { I as readWorkspaceLaunches } from "./project-Sui52ywT.mjs";
6
+ import { o as androidHome, u as androidToolCwd } from "./android-CsPs-7Mg.mjs";
7
+ import { d as resolveProjectMetro } from "./metro-BnhXV2Mj.mjs";
8
+ import { i as parseLogcatLine, n as androidLogGroups, r as isAndroidCrashText } from "./android-D577ApKG.mjs";
9
+ import { S as parseLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-DRMg4_mD.mjs";
10
10
  import { r as deviceConsoleLevel } from "./ios-device-CiBA-er9.mjs";
11
11
  import { createHash, randomUUID } from "node:crypto";
12
12
  import { existsSync, readFileSync, renameSync } from "node:fs";
@@ -1,23 +1,23 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, c as throwIfCancelled, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, t as getExecutor, v as stopDeclaringSpawnsOn, x as withDrainingCancellation } from "./exec-aULwtNly.mjs";
2
- import { E as workspaceDir, u as workspaceLastUsed } from "./workspace-state-BjqdjnJR.mjs";
2
+ import { E as workspaceDir, u as workspaceLastUsed } from "./workspace-state-kIZrdlSg.mjs";
3
3
  import { F as isOnMountedVolume, G as projectDeviceSlots, I as listMountedVolumes, L as measuredDirectorySizeAsync, N as directorySizeAsync, O as withConfigLockAsync$1, P as formatBytes, R as volumeRootFor, S as removeProject, _ as loadConfig$1, d as getConfigDir, j as acquireAvdClaim } from "./config-Cn94Jc0g.mjs";
4
- import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-Dj-WT4BP.mjs";
4
+ import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-C8R1KIvi.mjs";
5
5
  import { t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
6
- import { At as listWorktreesAsync, Bt as resolveSourceCheckoutAsync, Gt as TRASH_CLAIMS, Jt as deleteTrashEntry, qt as TRASH_MANIFEST } from "./settings-BDVI8Ivc.mjs";
7
- import { i as findProjectRoot$1, v as detectIsExpo } from "./project-DYj-HVx6.mjs";
8
- import { Ct as forgetCreatedDeviceAsync, F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, ft as POOL_SETTING_REMEDY, h as avdNameAbsent, vt as parkedMaxSetting, wt as readCreatedDevices$1 } from "./android-DriNoAVy.mjs";
9
- import { $ as gradleVersionLines, $n as memoryCacheKind, B as includesArchives, Ct as describeError, En as runProcessOperation, F as gcOptionsOf, Ft as withEasProjectLock, G as planCacheEmptying, H as includesRecordings, J as selectsBeyondCaches, Jn as parseArchiveSelector, K as previewScopedEmptying, L as openGcLog, Q as deleteGradleVersions, St as deleteEasSessions, U as includesWorkspaceOutputs, V as includesParkedDevices, W as isWorkspacesScope, X as collectGradleVersions, Y as trimCaches, Zn as collectMemoryReport, _t as findStaleDeviceRecords, ar as scopedMemoryReport, at as DEVICE_LIST_TIMEOUT_MS, bt as withAndroidAvdSizes, ct as collectParkedSims, dt as deleteProjectDevices, er as memoryLines, et as gradleVersionsPending, fr as sizeCaches, gt as findOrphanedDevices, ht as eraseParkedDevices, ir as reclaimMemory, it as collectInventory, lt as deleteParkedAvds, mt as deviceSweepIsScoped, nr as memorySweepIsScoped, ot as collectDeviceLeases, pt as describeUnverifiableDevices, q as selectCaches, rr as memoryWorkPending, rt as getMachineCacheReport, sr as phase, st as collectParkedAvds, tr as memoryScope, tt as includesGradleVersions, ur as discoverCaches, ut as deleteParkedSims, vt as findStaleProjectDevices, wt as withRemoteSessionGcLocks, xt as collectEasSessionSweep, yt as unverifiedDeviceCommand, z as emptyCaches } from "./ccache-BWTze1Ls.mjs";
10
- import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-DrP4OuuM.mjs";
11
- import { A as collectIdleDevicesAsync, Ct as createGcResults, Dt as readConcurrency, Et as mapLimited, F as parseIdleDuration, I as shutDownIdleDevices, N as idleDeviceLines, Ot as sizeConcurrency, St as GC_OUTPUT, Tt as eachLimited, _ as withIdleWorkspace, a as collectOrphanedWorkspaces, bt as listBuildSlots, c as isInsideWorkspaces, d as rootPresence, f as sizeText, h as ARTIFACT_DIRS, i as clearWorkspaceOutputs, k as collectIdleDevices, l as listWorkspaceDirs, n as REBUILD_COST, o as collectWorkspaceOutputs, r as WORKSPACE_OUTPUT_DIRS, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, y as workspaceInUseAsync } from "./workspaces-DFbj07jp.mjs";
6
+ import { $t as TRASH_MANIFEST, Ft as matchWorktreeEntry, Wt as resolveSourceCheckoutAsync, Zt as TRASH_CLAIMS, en as deleteTrashEntry, jt as listWorktreesAsync } from "./settings-CY5JZlNN.mjs";
7
+ import { i as findProjectRoot$1, v as detectIsExpo } from "./project-Sui52ywT.mjs";
8
+ import { Ct as forgetCreatedDeviceAsync, F as listAvdsAsync, L as listOrphanedAvdDirectories, V as ownedAvdDirectory, ft as POOL_SETTING_REMEDY, h as avdNameAbsent, vt as parkedMaxSetting, wt as readCreatedDevices$1 } from "./android-CsPs-7Mg.mjs";
9
+ import { $ as gradleVersionLines, $n as memoryCacheKind, B as includesArchives, Ct as describeError, En as runProcessOperation, F as gcOptionsOf, Ft as withEasProjectLock, G as planCacheEmptying, H as includesRecordings, J as selectsBeyondCaches, Jn as parseArchiveSelector, K as previewScopedEmptying, L as openGcLog, Q as deleteGradleVersions, St as deleteEasSessions, U as includesWorkspaceOutputs, V as includesParkedDevices, W as isWorkspacesScope, X as collectGradleVersions, Y as trimCaches, Zn as collectMemoryReport, _t as findStaleDeviceRecords, ar as scopedMemoryReport, at as DEVICE_LIST_TIMEOUT_MS, bt as withAndroidAvdSizes, ct as collectParkedSims, dt as deleteProjectDevices, er as memoryLines, et as gradleVersionsPending, fr as sizeCaches, gt as findOrphanedDevices, ht as eraseParkedDevices, ir as reclaimMemory, it as collectInventory, lt as deleteParkedAvds, mt as deviceSweepIsScoped, nr as memorySweepIsScoped, ot as collectDeviceLeases, pt as describeUnverifiableDevices, q as selectCaches, rr as memoryWorkPending, rt as getMachineCacheReport, sr as phase, st as collectParkedAvds, tr as memoryScope, tt as includesGradleVersions, ur as discoverCaches, ut as deleteParkedSims, vt as findStaleProjectDevices, wt as withRemoteSessionGcLocks, xt as collectEasSessionSweep, yt as unverifiedDeviceCommand, z as emptyCaches } from "./ccache-Bm_A1xX9.mjs";
10
+ import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-CBFo_Uo1.mjs";
11
+ import { At as mapLimited, Dt as createGcResults, Et as GC_OUTPUT, I as idleDeviceLines, M as collectIdleDevices, Mt as sizeConcurrency, N as collectIdleDevicesAsync, R as parseIdleDuration, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, f as rootPresence, g as ARTIFACT_DIRS, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, n as REBUILD_COST, o as collectWorkspaceOutputs, p as sizeText, r as WORKSPACE_OUTPUT_DIRS, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, wt as listBuildSlots, z as shutDownIdleDevices } from "./workspaces-CmOcceDN.mjs";
12
12
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
13
- import { N as listBuildLocks, k as removeExpiredLease } from "./activity-Cd-ysFes.mjs";
14
- import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-E26qSpkb.mjs";
15
- import { r as readCollectors } from "./ownership-Bx-0cku-.mjs";
16
- import { A as reclaimProject, M as sweepArchiveStaging, a as matchWorktreeEntry, j as deleteSelectedArchives, k as describeDereferenced } from "./worktree-COAJ3-OD.mjs";
17
- import { p as writeCacheFile } from "./warm-progress-C0RsbngN.mjs";
18
- import { a as restoreProblem, o as workspaceKeys } from "./lightened-BCsdAGj_.mjs";
19
- import { C as worktreeRemovalReason, S as worktreePullRequestNote, _ as ownedDeviceUsage, a as previewMaintenance, b as collectWorktreeSweep, c as deleteTempLeftovers, d as appRoots, f as artifactWorktrees, h as finishedWorkspaces, l as tempLeftoverLines, m as collectArtifactsAsync, o as triggeringRoot, p as clearArtifact, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as maintenancePinned, x as removeWorktrees, y as candidateRootsAsync } from "./act-ROviTF_t.mjs";
20
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-C5nCKWp9.mjs";
13
+ import { N as listBuildLocks, k as removeExpiredLease } from "./activity-DRMg4_mD.mjs";
14
+ import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-B1DYuOjh.mjs";
15
+ import { r as readCollectors } from "./ownership-DJCq48IJ.mjs";
16
+ import { A as deleteSelectedArchives, O as describeDereferenced, j as sweepArchiveStaging, k as reclaimProject } from "./worktree-2dk5edza.mjs";
17
+ import { p as writeCacheFile } from "./warm-progress-B0Vpuvpl.mjs";
18
+ import { a as restoreProblem, o as workspaceKeys } from "./lightened-DFAJgfIk.mjs";
19
+ import { C as worktreeRemovalReason, S as worktreePullRequestNote, _ as ownedDeviceUsage, a as previewMaintenance, b as collectWorktreeSweep, c as deleteTempLeftovers, d as appRoots, f as artifactWorktrees, h as finishedWorkspaces, l as tempLeftoverLines, m as collectArtifactsAsync, o as triggeringRoot, p as clearArtifact, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, v as maintenancePinned, x as removeWorktrees, y as candidateRootsAsync } from "./act-8iswyfRa.mjs";
20
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-tE90fDdo.mjs";
21
21
  import { claimRemoveCommand, isClaimRefusal, isClaimUnavailable, readClaimSet, releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
22
22
  import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
23
23
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -1453,6 +1453,7 @@ async function buildStateDirs(path, keys, operation) {
1453
1453
  const worktree = {
1454
1454
  path,
1455
1455
  linked: true,
1456
+ locked: Boolean(matchWorktreeEntry(entries, path)?.locked),
1456
1457
  keys: own
1457
1458
  };
1458
1459
  const dirs = /* @__PURE__ */ new Map();
@@ -1,3 +1,3 @@
1
- import { _t as findStaleDeviceRecords, ft as describeParkedSims, gt as findOrphanedDevices, pt as describeUnverifiableDevices, q as selectCaches, ut as deleteParkedSims, vt as findStaleProjectDevices } from "./ccache-BWTze1Ls.mjs";
2
- import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-CGZ1Yg88.mjs";
1
+ import { _t as findStaleDeviceRecords, ft as describeParkedSims, gt as findOrphanedDevices, pt as describeUnverifiableDevices, q as selectCaches, ut as deleteParkedSims, vt as findStaleProjectDevices } from "./ccache-Bm_A1xX9.mjs";
2
+ import { a as runGc, i as readGcReport, n as executeGc, o as withGcMaintenanceClaim, r as gcCommand, s as formatGcReport, t as collectGcReport } from "./gc-DM5oMm-J.mjs";
3
3
  export { collectGcReport, gcCommand as default, deleteParkedSims, describeParkedSims, describeUnverifiableDevices, executeGc, findOrphanedDevices, findStaleDeviceRecords, findStaleProjectDevices, formatGcReport, readGcReport, runGc, selectCaches, withGcMaintenanceClaim };