stim 1.37.0 → 1.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/{acquire-artifact-zBUbPuDP.mjs → acquire-artifact-QKPDkesw.mjs} +1 -1
  2. package/dist/{act-BGAFjY8f.mjs → act-Bh3t-NuH.mjs} +23 -29
  3. package/dist/{activity-CdpXXSq2.mjs → activity-CANftndU.mjs} +3 -3
  4. package/dist/{agent-device-usage-output-D0582GHy.mjs → agent-device-usage-output-CuROXefb.mjs} +3 -3
  5. package/dist/{android-CGctfYpv.mjs → android-27_JgJ1T.mjs} +3 -3
  6. package/dist/{android-CaSsewbu.mjs → android-Biwc4Dck.mjs} +5 -5
  7. package/dist/{android-BPBARZMR.mjs → android-DGLG_VQ3.mjs} +1 -1
  8. package/dist/{android-BBwLpxRh.mjs → android-Z6Eev9rL.mjs} +44 -38
  9. package/dist/{android-cas-p8gna03x.mjs → android-cas-BDAwwL82.mjs} +2 -2
  10. package/dist/{android-image-DY8KxK2m.mjs → android-image-BcUD6bPi.mjs} +2 -2
  11. package/dist/api.d.mts +2 -2
  12. package/dist/api.mjs +25 -25
  13. package/dist/{apk-signed-tail-BMv-KLcB.mjs → apk-signed-tail-DHMkXs4s.mjs} +2 -2
  14. package/dist/{artifact-BsimBWxG.mjs → artifact-Dc1GsK7o.mjs} +28 -14
  15. package/dist/{artifact-BrNZTZtA.mjs → artifact-sGoFVK1q.mjs} +11 -11
  16. package/dist/{auto-placement-CFKNrWLU.mjs → auto-placement-RNh4kx2T.mjs} +6 -6
  17. package/dist/{browser-web-YFsgCP_a.mjs → browser-web-7Oj57Roa.mjs} +10 -10
  18. package/dist/{build-DIhuoozz.mjs → build-DkE5vjp1.mjs} +22 -22
  19. package/dist/{build-cache-Dt-dhCJF.mjs → build-cache-CJ65Efv7.mjs} +7 -4
  20. package/dist/{build-plan-CgnLDof9.mjs → build-plan-DWajg5l_.mjs} +7 -6
  21. package/dist/{cli-BGUrlSH3.mjs → cli-BSlwv9hI.mjs} +18 -18
  22. package/dist/cli.mjs +1 -1
  23. package/dist/{client-DU6dnGX1.mjs → client-qwmHFSga.mjs} +12 -8
  24. package/dist/collector-run.mjs +3 -3
  25. package/dist/{command-output-ByEmIwur.mjs → command-output-DsjhOzJ3.mjs} +1 -1
  26. package/dist/{dependencies-BozoTBqa.mjs → dependencies-oku1ZLep.mjs} +76 -41
  27. package/dist/{dependency-state-BQeC4FVn.mjs → dependency-state-CBhPJAs_.mjs} +1 -1
  28. package/dist/{dev-client-3SQzMRXZ.mjs → dev-client-DL5UtVdx.mjs} +2 -2
  29. package/dist/{device-DGMvzoZZ.mjs → device-CxMwX0VO.mjs} +15 -14
  30. package/dist/{device-android-CBat355q.mjs → device-android-CSlBXuh_.mjs} +7 -7
  31. package/dist/{device-capacity-DWUOvY13.mjs → device-capacity-D_IlxZRL.mjs} +78 -31
  32. package/dist/device-host-worker.mjs +24 -12
  33. package/dist/{device-pool-B8IqZKqm.mjs → device-pool-BEaTdtss.mjs} +2 -2
  34. package/dist/{device-provision-DWAoSKEw.mjs → device-provision-C9NPdCne.mjs} +8 -8
  35. package/dist/{device-BIg1iExg.mjs → device-yfuJ-v4s.mjs} +9 -9
  36. package/dist/{doctor-CxgR5vPi.mjs → doctor-BAA3zN5U.mjs} +1 -1
  37. package/dist/{doctor-CPzwqcXY.mjs → doctor-BQ1Kl44s.mjs} +13 -19
  38. package/dist/{doctor-Bknt0121.mjs → doctor-QNzDE4aW.mjs} +18 -18
  39. package/dist/doctor-fingerprint.mjs +1 -1
  40. package/dist/{doctor-watchman-CPE4C8KV.mjs → doctor-watchman-B8e3s9ko.mjs} +3 -3
  41. package/dist/{eas-build-CwOXKJwa.mjs → eas-build-4rg9WpEg.mjs} +2 -2
  42. package/dist/{eas-fallback-Cnb12a50.mjs → eas-fallback-UGo0SG7T.mjs} +3 -3
  43. package/dist/{eas-session-ledger-TE1miVz5.mjs → eas-session-ledger-BDpSdFDM.mjs} +4 -4
  44. package/dist/{error-diagnostics-CXTT3bYC.mjs → error-diagnostics-CW9xl6ot.mjs} +7 -7
  45. package/dist/{gc-0jdcnDHs.mjs → gc-3DHVCn-k.mjs} +49 -33
  46. package/dist/{gc-1ZLq1djg.mjs → gc-BQ5dXnC7.mjs} +2 -2
  47. package/dist/{guide-COxIANZu.mjs → guide-DqJCc4vW.mjs} +138 -43
  48. package/dist/{hosted-android-D8JbIzgC.mjs → hosted-android-gwLspaz6.mjs} +3 -3
  49. package/dist/{hosted-client-BLwuXEZS.mjs → hosted-client-B_h_bTlz.mjs} +2 -2
  50. package/dist/{hosted-logs-BWEQNJx_.mjs → hosted-logs-BpQSRDRU.mjs} +15 -8
  51. package/dist/{hosted-logs-sync-uWSrH2mf.mjs → hosted-logs-sync-D3L1hDpM.mjs} +5 -5
  52. package/dist/{hosted-macos-BnCYAv1y.mjs → hosted-macos-GK4O1s7x.mjs} +5 -5
  53. package/dist/{hosted-native-OBT2sJxn.mjs → hosted-native-B6ur_0OJ.mjs} +7 -7
  54. package/dist/{ios-Bjz7aPLy.mjs → ios-Bi0bQiZ_.mjs} +8 -8
  55. package/dist/{ios-BveW7qK1.mjs → ios-DQEzde6f.mjs} +9 -6
  56. package/dist/{ios-CGyx4PA7.mjs → ios-M7nRVb33.mjs} +94 -32
  57. package/dist/{ios-device-ByrDWSpC.mjs → ios-device-BLm1BZB4.mjs} +1 -1
  58. package/dist/{ios-project-XHg87vyQ.mjs → ios-project-Bsm-eqwv.mjs} +6 -6
  59. package/dist/ios-runtime-DLiKoOkd.mjs +150 -0
  60. package/dist/{ios-signing-CRYQ1W42.mjs → ios-signing-rWR_Mu5Z.mjs} +1 -1
  61. package/dist/{ios-state-enWc5P6U.mjs → ios-state-tzD0s7pt.mjs} +1 -1
  62. package/dist/{js-swap-C6vl3vEd.mjs → js-swap-Cuky0ZAQ.mjs} +5 -5
  63. package/dist/{launch-f3RnbFW5.mjs → launch-B-pkNlqg.mjs} +17 -17
  64. package/dist/{lightened-Cdfmo8MO.mjs → lightened-KHWHmzGs.mjs} +4 -4
  65. package/dist/{logs-x3em2-oI.mjs → logs-B0etn-BD.mjs} +6 -6
  66. package/dist/{logs-DAjxBF3c.mjs → logs-HomiqPhV.mjs} +4 -4
  67. package/dist/{macos-ZfpWlzBO.mjs → macos-C5liDnbP.mjs} +1 -1
  68. package/dist/macos-run.mjs +1 -1
  69. package/dist/{macos-D_LAseN9.mjs → macos-zMxSibx5.mjs} +18 -19
  70. package/dist/maintenance-run.mjs +4 -4
  71. package/dist/{metro-TIQ1Wft-.mjs → metro-Cj6W4qOO.mjs} +1 -1
  72. package/dist/{metro-request-DcUxyaq8.mjs → metro-request-BWCl3Zco.mjs} +1 -1
  73. package/dist/{prebuild-BKkj3OyL.mjs → miss-reason-CeHvzeVm.mjs} +10 -270
  74. package/dist/{named-ports-BfEMi9bK.mjs → named-ports-DZ8DrkH1.mjs} +1 -1
  75. package/dist/{native-android-COOrNDk2.mjs → native-android-DtWLzg6g.mjs} +15 -15
  76. package/dist/{native-gradle-artifact-inputs-B4Mwydmf.mjs → native-gradle-artifact-inputs-D4w20_6d.mjs} +3 -3
  77. package/dist/{native-runtime-UxUBU8up.mjs → native-runtime-BfvvAJLd.mjs} +6 -6
  78. package/dist/{native-xcode-inputs-DUv7Q3ok.mjs → native-xcode-inputs-BHvnAq4o.mjs} +2 -2
  79. package/dist/{native-xcode-ios-DXcteLVi.mjs → native-xcode-ios-CYxrg_kK.mjs} +15 -15
  80. package/dist/offload-worker.mjs +19 -18
  81. package/dist/{ownership-CQTg6v1d.mjs → ownership-BLgOimfp.mjs} +2 -2
  82. package/dist/{phone-reverses-CHtco460.mjs → phone-reverses-vRveZKSG.mjs} +3 -3
  83. package/dist/{placement-log-oQnELAvQ.mjs → placement-log-CM0DSELs.mjs} +1 -1
  84. package/dist/{plan-placement-45EOlIG1.mjs → plan-placement-CIrvKq8y.mjs} +5 -5
  85. package/dist/{ports-DKO7EUNt.mjs → ports-CKORWlC0.mjs} +2 -2
  86. package/dist/{project-BCtQz48d.mjs → project-DIo71tGq.mjs} +14 -14
  87. package/dist/{react-native-android-MI4ktuhL.mjs → react-native-android-B7VYSlKj.mjs} +36 -27
  88. package/dist/{react-native-build-dixAL2G8.mjs → react-native-build-CFYTYmG4.mjs} +10 -7
  89. package/dist/{react-native-doctor-CvkWincj.mjs → react-native-doctor-CnpVfE0k.mjs} +5 -5
  90. package/dist/{react-native-ios-DF5otoBR.mjs → react-native-ios-ByeXo_NP.mjs} +15 -14
  91. package/dist/{recorded-build-CGHGCO8m.mjs → recorded-build-B4prJjSD.mjs} +1 -1
  92. package/dist/{recordings-BcOzqFD1.mjs → recordings-Byu5SzlI.mjs} +1 -1
  93. package/dist/{reload-DWxmO9dY.mjs → reload-DANrKhQR.mjs} +1 -1
  94. package/dist/{reload-DGWfNFwQ.mjs → reload-DTd9g1EG.mjs} +13 -13
  95. package/dist/{remote-DWYGW2f5.mjs → remote-BWuq9qHV.mjs} +3 -3
  96. package/dist/{remote-CV2jBcLv.mjs → remote-NOM82XE0.mjs} +8 -8
  97. package/dist/{result-CWyxwPvZ.mjs → result-C-ISEJ5F.mjs} +15 -15
  98. package/dist/{run-FZtMQgrx.mjs → run-DQwx6djG.mjs} +1 -1
  99. package/dist/{server-bare-Ksh1NKeI.mjs → server-bare-B_wRfchQ.mjs} +1 -1
  100. package/dist/{server-command-BO2DIsJV.mjs → server-command-DgXYowQf.mjs} +5 -5
  101. package/dist/{server-expo-ZS9_WaNG.mjs → server-expo-ByBM8DVv.mjs} +9 -7
  102. package/dist/server-expo-D7rwjAFp.mjs +2 -0
  103. package/dist/{settings-TYrzDh8T.mjs → settings-BthPoY3t.mjs} +2 -2
  104. package/dist/{settings-Ag4pbs0z.mjs → settings-Cz8kQJzr.mjs} +44 -8
  105. package/dist/{settings-payload-CUM0DYwz.mjs → settings-payload-BOcxsZ6k.mjs} +2 -2
  106. package/dist/{settings-write-D_9_IEx7.mjs → settings-write-BuMPL1rd.mjs} +3 -3
  107. package/dist/settings.schema.json +32 -2
  108. package/dist/{slot-launch-DW_29Bmu.mjs → slot-launch-BIm9w8kH.mjs} +5 -5
  109. package/dist/{stage-_8k8p7uq.mjs → stage-CX1Byp3n.mjs} +5 -4
  110. package/dist/{start-CdgtOksb.mjs → start-BZWr85b2.mjs} +1 -1
  111. package/dist/{start-CzBB5R7N.mjs → start-DI0ofPO-.mjs} +8 -8
  112. package/dist/{state-DsrFh3yv.mjs → state-45P8Kd6Z.mjs} +1 -1
  113. package/dist/{state-CfP-ccP8.mjs → state-C2vELPyr.mjs} +2 -2
  114. package/dist/{stats-BgTyuzib.mjs → stats-BDljWVWU.mjs} +3 -3
  115. package/dist/{status-C7Zzb-Eh.mjs → status-BG2S-a1d.mjs} +1 -1
  116. package/dist/{status-Bcdy5eHt.mjs → status-DEZjHP4q.mjs} +27 -29
  117. package/dist/{status-watch-DY0EZcmg.mjs → status-watch-Cs18eFkQ.mjs} +4 -4
  118. package/dist/status-worker.mjs +1 -1
  119. package/dist/{stop-iGkvEvDn.mjs → stop-B2zDplJa.mjs} +2 -2
  120. package/dist/{stop-CkmBkNyg.mjs → stop-BPrTEOaz.mjs} +14 -14
  121. package/dist/{stop-CbxsTKyZ.mjs → stop-DrxHVVX9.mjs} +4 -4
  122. package/dist/supervisor-run.mjs +11 -11
  123. package/dist/{support-CfYmOdQs.mjs → support-BeVRaMWT.mjs} +9 -9
  124. package/dist/{support-JZ4KRW0C.mjs → support-DBKG3Yyb.mjs} +5 -5
  125. package/dist/{swiftpm-artifact-inputs-C1rZDRDs.mjs → swiftpm-artifact-inputs-CfNAb6Vm.mjs} +1 -1
  126. package/dist/{swiftpm-macos-DRTjC7Ff.mjs → swiftpm-macos-xdHjJHIj.mjs} +7 -7
  127. package/dist/toolchain-CTsPS5tL.mjs +2 -0
  128. package/dist/{toolchain-BeD7tbBW.mjs → toolchain-CZvtCZ-m.mjs} +9 -6
  129. package/dist/{warm-progress-CJQ8tk5O.mjs → warm-progress-D3a0KviW.mjs} +17 -13
  130. package/dist/{web-BXbmysa1.mjs → web-BvAweypa.mjs} +6 -6
  131. package/dist/web-DDL3usMb.mjs +2 -0
  132. package/dist/web-run.mjs +4 -4
  133. package/dist/{workspace-state-DOPXG2Gp.mjs → workspace-state-CHEN_xzy.mjs} +1 -1
  134. package/dist/{workspaces-DCzDzydB.mjs → workspaces-BgAYIccE.mjs} +213 -50
  135. package/dist/{worktree-6ngObKkw.mjs → worktree-C0YZ6mnk.mjs} +1 -1
  136. package/dist/{worktree-BAC43Kio.mjs → worktree-kGPE9Pcw.mjs} +335 -33
  137. package/package.json +7 -7
  138. package/dist/server-expo-9hQwyLze.mjs +0 -2
  139. package/dist/toolchain-CNlKc9pH.mjs +0 -2
  140. package/dist/web-BcaySU05.mjs +0 -2
@@ -1,18 +1,18 @@
1
1
  import { C as operationState, D as ownership_claim_exports, T as process_identity_exports, _ as declareSpawnsOn, d as throwIfCancelled, f as WorkspaceProcessCleanupError, h as workspaceProcessLockPath, l as cancellableSleep, m as workspaceProcessLockError, p as withWorkspaceProcessLock, t as getExecutor, x as stopDeclaringSpawnsOn } from "./exec-L37dbiIb.mjs";
2
- import { A as workspaceName$1, E as workspaceDir, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-DOPXG2Gp.mjs";
2
+ import { A as workspaceName$1, E as workspaceDir, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-CHEN_xzy.mjs";
3
3
  import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { a as formatElapsed, d as quotedPath$1, l as phaseLine, o as formatLongDuration, u as plural } from "./command-output-ByEmIwur.mjs";
4
+ import { a as formatElapsed, d as quotedPath$1, l as phaseLine, o as formatLongDuration, u as plural } from "./command-output-DsjhOzJ3.mjs";
5
5
  import { A as withConfigLockAsync$1, N as acquireAvdClaim, _ as isPathPrefix$1, ct as measuredDirectorySizeAsync, d as getConfigDir, gt as projectDeviceSlots, it as formatBytes, k as withConfigLock$1, m as getProject, ot as isOnMountedVolume, pt as deviceSlotPlatforms, st as listMountedVolumes, v as loadConfig$1 } from "./config-CNmN-ndb.mjs";
6
6
  import { c as gitQuiet, l as gitQuietAsync, t as runOperationFile } from "./operation-exec-DNynwpqO.mjs";
7
- import { Pt as lockReason, Vt as repoRootAsync, Xt as worktreeLockAsync, Yt as worktreeLock, pt as resolveTailscaleBinary } from "./settings-Ag4pbs0z.mjs";
8
- import { a as macosRuntimeClaim, n as macosDir } from "./state-DsrFh3yv.mjs";
9
- import { B as listOrphanedAvdDirectories, C as deleteAvd, Dt as recordCreatedDevice, Et as readCreatedDevices$1, J as ownedAvdSystemImage, K as ownedAvdSerialResolver, M as isEmulatorToolAbsent, P as listAdbDevicesAsync, St as removeParkedAfter, Tt as forgetCreatedDeviceAsync, U as ownedAvdDirectory, W as ownedAvdMatchesConfiguration, _t as eraseParkedAfter, dt as wipeAvdUserData, ft as isStimOwnedAvd, g as avdPathExists, it as resolveOwnedAvdSerialAsync, lt as waitForAndroidEmulatorShutdown, ot as shutdownAndroidEmulator, p as assertOwnedAvdStoppedAsync, q as ownedAvdSerialResolverAsync, v as avdStorageExists, wt as forgetCreatedDevice, xt as readParked, y as avdStorageRoots, yt as parkSim } from "./android-CGctfYpv.mjs";
10
- import { c as pidExists, f as signalProcessTree, p as signalProcessTreeAsync } from "./metro-TIQ1Wft-.mjs";
11
- import { _ as chromeProcessStateAsync, c as webClaimRoot, i as clearWebRecord, o as readWebRecord, p as webProfileDir, t as CDP_PORT_LABEL, u as webFacts, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CfP-ccP8.mjs";
7
+ import { Pt as lockReason, Vt as repoRootAsync, Xt as worktreeLockAsync, Yt as worktreeLock, pt as resolveTailscaleBinary } from "./settings-Cz8kQJzr.mjs";
8
+ import { a as macosRuntimeClaim, n as macosDir } from "./state-45P8Kd6Z.mjs";
9
+ import { B as listOrphanedAvdDirectories, C as deleteAvd, Dt as recordCreatedDevice, Et as readCreatedDevices$1, J as ownedAvdSystemImage, K as ownedAvdSerialResolver, M as isEmulatorToolAbsent, P as listAdbDevicesAsync, St as removeParkedAfter, Tt as forgetCreatedDeviceAsync, U as ownedAvdDirectory, W as ownedAvdMatchesConfiguration, _t as eraseParkedAfter, dt as wipeAvdUserData, ft as isStimOwnedAvd, g as avdPathExists, it as resolveOwnedAvdSerialAsync, lt as waitForAndroidEmulatorShutdown, ot as shutdownAndroidEmulator, p as assertOwnedAvdStoppedAsync, q as ownedAvdSerialResolverAsync, v as avdStorageExists, wt as forgetCreatedDevice, xt as readParked, y as avdStorageRoots, yt as parkSim } from "./android-27_JgJ1T.mjs";
10
+ import { c as pidExists, f as signalProcessTree, p as signalProcessTreeAsync } from "./metro-Cj6W4qOO.mjs";
11
+ import { _ as chromeProcessStateAsync, c as webClaimRoot, i as clearWebRecord, o as readWebRecord, p as webProfileDir, t as CDP_PORT_LABEL, u as webFacts, v as liveProfileHolder, y as removeSingletonFiles } from "./state-C2vELPyr.mjs";
12
12
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
13
- import { N as listBuildLocks, d as readAgentDeviceRecords, i as createActivityReaderAsync, r as createActivityReader, s as idleForMs, t as agentDeviceDaemon } from "./activity-CdpXXSq2.mjs";
14
- import { C as renameIosSim, D as resolveOwnedIosSim, c as eraseIosSim, f as listAllIosSimsAsync, k as shutdownIosSim, o as deleteIosSim, p as listIosDeviceTypesAsync, s as deleteParkedIosSim, v as parkedSimName, y as parseRuntimeVersion } from "./ios-BveW7qK1.mjs";
15
- import { r as releaseBrowserPort } from "./named-ports-BfEMi9bK.mjs";
13
+ import { N as listBuildLocks, d as readAgentDeviceRecords, i as createActivityReaderAsync, r as createActivityReader, s as idleForMs, t as agentDeviceDaemon } from "./activity-CANftndU.mjs";
14
+ import { C as renameIosSim, D as resolveOwnedIosSim, c as eraseIosSim, f as listAllIosSimsAsync, k as shutdownIosSim, o as deleteIosSim, p as listIosDeviceTypesAsync, s as deleteParkedIosSim, v as parkedSimName, y as parseRuntimeVersion } from "./ios-DQEzde6f.mjs";
15
+ import { r as releaseBrowserPort } from "./named-ports-DZ8DrkH1.mjs";
16
16
  import { createHash, randomUUID } from "node:crypto";
17
17
  import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, rmdirSync, statSync, unlinkSync, watch, writeFileSync } from "node:fs";
18
18
  import { isDeepStrictEqual } from "node:util";
@@ -22,7 +22,7 @@ import { ambientContext, ambientEnv, ambientWrite, withDirLock, workspaceName }
22
22
  import { BUILD_HISTORY_KEY, BUILD_HISTORY_LIMIT, BUILD_LEDGER_CAP, BUILD_PHASES, LAST_BUILD_KEYS, STATS_VERSION, buildLedgerFile, buildLedgerLock, buildSlotsDir, decodeStats, hostedAppAttempt, hostedNativeRecords, isJsonObject, lastNativeUseFrom, loadPerCore, macosAppState, parseHostedNativePlacement, parseMissReason, readJsonFile, readMacosRecord, readRunEstimates, readStats as readStats$1, requireAutomaticMachine, statsFile, statsProjectKey as statsProjectKey$1, trace, trimCapacityRefusals, trimCapacityWaits, trimSamples, tryAcquireBuildSlotClaim, unreadableHostedNative, wholePhases, workspaceBuildDetailFile } from "@stim-cli/core/state";
23
23
  import { basename as basename$1, dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, relative as relative$1 } from "path";
24
24
  import chalk from "chalk";
25
- import { existsSync as existsSync$1, lstatSync as lstatSync$1, readdirSync as readdirSync$1, statSync as statSync$1 } from "fs";
25
+ import { closeSync as closeSync$1, existsSync as existsSync$1, lstatSync as lstatSync$1, openSync as openSync$1, readSync as readSync$1, readdirSync as readdirSync$1, rmdirSync as rmdirSync$1, statSync as statSync$1 } from "fs";
26
26
  import { request } from "node:https";
27
27
  import { lstat, readFile, readdir, rm, stat, unlink } from "node:fs/promises";
28
28
  import { resolve4 } from "node:dns/promises";
@@ -1428,10 +1428,10 @@ function createRunRecorder({ platform, write, now, note, phases, deviceSetup })
1428
1428
  setPlacement(next) {
1429
1429
  placement = next;
1430
1430
  },
1431
- record({ failed, cacheHit = false, waited = null, durationMs, offloadedTo = null }) {
1431
+ record({ failed, cacheHit = false, waited = null, durationMs, offloadedTo = null, remoteDevice = false }) {
1432
1432
  if (!projectKey || !cacheKey || recorded) return;
1433
1433
  recorded = true;
1434
- const ran = failed ? {} : phases?.() ?? {};
1434
+ const ran = failed || remoteDevice ? {} : phases?.() ?? {};
1435
1435
  try {
1436
1436
  const outcome = write({
1437
1437
  platform,
@@ -1618,7 +1618,6 @@ function shortXcodeAction(action, args, target) {
1618
1618
  function swiftpmStep(text) {
1619
1619
  return /^Linking\b|-product$/.test(text) ? "link" : "compile";
1620
1620
  }
1621
- /** What one line of xcodebuild, Gradle or SwiftPM output says about the build's progress, or null for any other line. */
1622
1621
  function parseBuildToolLine(msg) {
1623
1622
  const counted = SWIFTPM_PROGRESS.exec(msg);
1624
1623
  if (counted) {
@@ -1840,10 +1839,6 @@ function lineId(line) {
1840
1839
  return;
1841
1840
  }
1842
1841
  }
1843
- /**
1844
- * The ledger file's text after appending `line`, keeping only the newest `cap` complete records. A run that records
1845
- * twice (an Android launch that fails after the build was recorded) replaces its earlier record.
1846
- */
1847
1842
  function appendCapped(existing, line, cap = BUILD_LEDGER_CAP) {
1848
1843
  const id = lineId(line);
1849
1844
  const lines = existing.split("\n").filter((each) => each.trim() !== "" && (id === void 0 || lineId(each) !== id));
@@ -2165,7 +2160,6 @@ function startBuildProgress({ root, platform, slot, claim, now = Date.now, load
2165
2160
  }
2166
2161
  };
2167
2162
  }
2168
- /** `offload` with the time `placement` has spent in its current phase as of `now` added to that phase. */
2169
2163
  function withOffloadPhase(offload, placement, now) {
2170
2164
  const phaseMs = { ...offload?.phaseMs };
2171
2165
  const ms = Math.max(0, now - Date.parse(placement.phaseStartedAt));
@@ -3001,30 +2995,50 @@ const REACHABLE_TIMEOUT_MS = 24e4;
3001
2995
  const REACHABLE_POLL_MS = 2e3;
3002
2996
  const defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
3003
2997
  async function withManagedTunnelLock(root, fn, options = {}) {
3004
- return withWorkspaceProcessLock(managedTunnelLockRoot(root), "metro-tunnel", fn, {
3005
- ...options,
3006
- rejectOwnerPurposes: ["workspace removal"]
3007
- });
2998
+ const lockRoot = managedTunnelLockRoot(root);
2999
+ try {
3000
+ return await withWorkspaceProcessLock(lockRoot, "metro-tunnel", fn, {
3001
+ ...options,
3002
+ rejectOwnerPurposes: ["workspace removal"]
3003
+ });
3004
+ } finally {
3005
+ removeEmptyDirs([join(lockRoot, ".stim"), lockRoot]);
3006
+ }
3008
3007
  }
3009
3008
  async function withManagedTunnelRemovalLock(root, fn, options = {}) {
3010
- return withWorkspaceProcessLock(managedTunnelLockRoot(root), "metro-tunnel", fn, {
3011
- ...options,
3012
- ownerPurpose: "workspace removal"
3013
- });
3009
+ const lockRoot = managedTunnelLockRoot(root);
3010
+ try {
3011
+ return await withWorkspaceProcessLock(lockRoot, "metro-tunnel", fn, {
3012
+ ...options,
3013
+ ownerPurpose: "workspace removal"
3014
+ });
3015
+ } finally {
3016
+ removeEmptyDirs([join(lockRoot, ".stim"), lockRoot]);
3017
+ }
3014
3018
  }
3015
3019
  async function withManagedRemoteWorktreeLock(worktreeRoot, fn, options = {}) {
3016
- return withWorkspaceProcessLock(managedRemoteWorktreeLockRoot(worktreeRoot), "managed-remote", fn, {
3017
- ...options,
3018
- external: true,
3019
- rejectOwnerPurposes: ["worktree removal"]
3020
- });
3020
+ const lockRoot = managedRemoteWorktreeLockRoot(worktreeRoot);
3021
+ try {
3022
+ return await withWorkspaceProcessLock(lockRoot, "managed-remote", fn, {
3023
+ ...options,
3024
+ external: true,
3025
+ rejectOwnerPurposes: ["worktree removal"]
3026
+ });
3027
+ } finally {
3028
+ removeEmptyDirs([lockRoot]);
3029
+ }
3021
3030
  }
3022
3031
  async function withManagedRemoteWorktreeRemovalLock(worktreeRoot, fn, options = {}) {
3023
- return withWorkspaceProcessLock(managedRemoteWorktreeLockRoot(worktreeRoot), "managed-remote", fn, {
3024
- ...options,
3025
- external: true,
3026
- ownerPurpose: "worktree removal"
3027
- });
3032
+ const lockRoot = managedRemoteWorktreeLockRoot(worktreeRoot);
3033
+ try {
3034
+ return await withWorkspaceProcessLock(lockRoot, "managed-remote", fn, {
3035
+ ...options,
3036
+ external: true,
3037
+ ownerPurpose: "worktree removal"
3038
+ });
3039
+ } finally {
3040
+ removeEmptyDirs([lockRoot]);
3041
+ }
3028
3042
  }
3029
3043
  function managedLockHolders(root) {
3030
3044
  const locks = [{
@@ -3045,6 +3059,30 @@ function managedLockHolders(root) {
3045
3059
  }
3046
3060
  return reasons;
3047
3061
  }
3062
+ function removeEmptyDirs(dirs) {
3063
+ for (const dir of dirs) try {
3064
+ rmdirSync(dir);
3065
+ } catch {}
3066
+ }
3067
+ function childDirs(dir) {
3068
+ try {
3069
+ return readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => join(dir, entry.name));
3070
+ } catch {
3071
+ return [];
3072
+ }
3073
+ }
3074
+ function pruneEmptyProcessLockDirs() {
3075
+ const base = join(getConfigDir(), "process-locks");
3076
+ let removed = 0;
3077
+ for (const top of childDirs(base)) {
3078
+ const entries = basename(top) === "worktrees" ? childDirs(top) : [top];
3079
+ for (const entry of entries) {
3080
+ removeEmptyDirs(entry === top ? [join(top, ".stim"), top] : [entry]);
3081
+ if (!existsSync(entry)) removed++;
3082
+ }
3083
+ }
3084
+ return removed;
3085
+ }
3048
3086
  function managedTunnelLockRoot(root) {
3049
3087
  const key = createHash("sha256").update(resolve(root)).digest("hex");
3050
3088
  return join(getConfigDir(), "process-locks", key);
@@ -3712,6 +3750,78 @@ async function regenerableDirProblem(root, path, signal) {
3712
3750
  }
3713
3751
  //#endregion
3714
3752
  //#region src/commands/gc/workspaces.ts
3753
+ const RESIDUE_FILES = ["log-error-index.json", "ended-agents.json"];
3754
+ const RESIDUE_LOCKS = ["metadata.lock", "ended-agents.lock"];
3755
+ const MAINTENANCE_LOGS = ["maintenance.ndjson", "maintenance.ndjson.1"];
3756
+ const FIRST_RECORD_BYTES = 65536;
3757
+ function firstWorkspaceField(file) {
3758
+ let fd = null;
3759
+ try {
3760
+ fd = openSync$1(file, "r");
3761
+ const buffer = Buffer.alloc(FIRST_RECORD_BYTES);
3762
+ const text = buffer.toString("utf8", 0, readSync$1(fd, buffer, 0, buffer.length, 0));
3763
+ const record = JSON.parse(text.split("\n")[0] ?? "");
3764
+ return isJsonObject(record) && typeof record.workspace === "string" ? record.workspace : null;
3765
+ } catch {
3766
+ return null;
3767
+ } finally {
3768
+ if (fd !== null) closeSync$1(fd);
3769
+ }
3770
+ }
3771
+ const blocked = (reason) => ({
3772
+ projectRoot: null,
3773
+ empty: false,
3774
+ blocked: reason
3775
+ });
3776
+ const lockOf = (entry) => entry.replace(/\.claims$/, "");
3777
+ /**
3778
+ * Reads the leftovers of a directory that has no `workspace.json`. `blocked` names the first thing that makes the
3779
+ * directory something other than residue; `projectRoot` is the root its maintenance log names, only when that root
3780
+ * maps to the directory name. `held` lists lock names the caller holds in the directory itself.
3781
+ */
3782
+ function inspectWorkspaceResidue(dir, held = []) {
3783
+ let entries;
3784
+ try {
3785
+ entries = readdirSync$1(dir).filter((entry) => !held.some((lock) => entry === lock || entry === `${lock}.claims`));
3786
+ } catch (error) {
3787
+ return blocked(`it cannot be listed: ${error instanceof Error ? error.message : String(error)}`);
3788
+ }
3789
+ const locks = new Set(entries.filter((entry) => RESIDUE_LOCKS.includes(lockOf(entry))).map(lockOf));
3790
+ for (const entry of entries) {
3791
+ if (RESIDUE_LOCKS.includes(lockOf(entry)) || RESIDUE_FILES.includes(entry)) continue;
3792
+ if (entry === "agent-device") {
3793
+ const daemon = agentDeviceDaemon(join$1(dir, entry));
3794
+ if (daemon !== "none" && daemon !== "dead") return blocked("its agent-device daemon may be running");
3795
+ continue;
3796
+ }
3797
+ if (entry === "logs") {
3798
+ let logs;
3799
+ try {
3800
+ logs = readdirSync$1(join$1(dir, entry));
3801
+ } catch {
3802
+ return blocked("its logs directory cannot be listed");
3803
+ }
3804
+ const other = logs.find((log) => !MAINTENANCE_LOGS.includes(log));
3805
+ if (other) return blocked(`its logs directory holds ${other}`);
3806
+ continue;
3807
+ }
3808
+ return blocked(`it holds ${entry}`);
3809
+ }
3810
+ for (const lock of locks) {
3811
+ const survey = (0, ownership_claim_exports.readClaimSet)(join$1(dir, lock));
3812
+ if (survey.live.length) return blocked(`${lock} is held`);
3813
+ if (survey.unresolved[0]) return blocked(`${lock} cannot be resolved: ${survey.unresolved[0].reason}`);
3814
+ }
3815
+ const named = new Set(MAINTENANCE_LOGS.map((log) => firstWorkspaceField(join$1(dir, "logs", log))).filter((root) => root !== null));
3816
+ if (named.size > 1) return blocked("its maintenance logs name different project roots");
3817
+ const [root] = named;
3818
+ if (root !== void 0 && (!isAbsolute$1(root) || workspaceName$1(root) !== basename$1(dir))) return blocked(`its maintenance log names ${root}, whose workspace directory has another name`);
3819
+ return {
3820
+ projectRoot: root ?? null,
3821
+ empty: entries.length === 0,
3822
+ blocked: null
3823
+ };
3824
+ }
3715
3825
  function workspacesRoot() {
3716
3826
  return join$1(getConfigDir(), "workspaces");
3717
3827
  }
@@ -3724,14 +3834,16 @@ function readRecordedRoot(dir, name) {
3724
3834
  try {
3725
3835
  parsed = readJsonFile(join$1(dir, "workspace.json"));
3726
3836
  } catch (error) {
3727
- return unreadableRecordedRoot(error);
3837
+ return unreadableRecordedRoot(error, dir);
3728
3838
  }
3729
3839
  return recordedRoot(parsed, name);
3730
3840
  }
3731
- function unreadableRecordedRoot(error) {
3841
+ function unreadableRecordedRoot(error, dir) {
3842
+ const missing = error?.code === "ENOENT";
3732
3843
  return {
3733
3844
  projectRoot: null,
3734
- problem: error?.code === "ENOENT" ? "it has no workspace.json" : "its workspace.json does not parse"
3845
+ problem: missing ? "it has no workspace.json" : "its workspace.json does not parse",
3846
+ ...missing ? { residue: inspectWorkspaceResidue(dir) } : {}
3735
3847
  };
3736
3848
  }
3737
3849
  function recordedRoot(parsed, name) {
@@ -3798,7 +3910,7 @@ async function listWorkspaceDirsAsync(signal) {
3798
3910
  recorded = recordedRoot(JSON.parse(await readFile(join$1(dir, "workspace.json"), "utf8")), name);
3799
3911
  } catch (error) {
3800
3912
  signal?.throwIfAborted();
3801
- recorded = unreadableRecordedRoot(error);
3913
+ recorded = unreadableRecordedRoot(error, dir);
3802
3914
  }
3803
3915
  signal?.throwIfAborted();
3804
3916
  entries.push({
@@ -3811,11 +3923,26 @@ async function listWorkspaceDirsAsync(signal) {
3811
3923
  function classifyWorkspaceDirs(entries, { registryKeys, exists, isMounted, inUse }) {
3812
3924
  const orphaned = [];
3813
3925
  const skipped = [];
3814
- for (const { dir, projectRoot, problem } of entries) {
3815
- if (projectRoot === null) {
3926
+ for (const { dir, projectRoot: recorded, problem, residue } of entries) {
3927
+ const leftover = recorded === null ? residue : void 0;
3928
+ if (recorded === null && (!leftover || leftover.blocked !== null)) {
3929
+ const why = leftover?.blocked ? `${problem}; ${leftover.blocked}` : problem ?? "unknown project root";
3816
3930
  skipped.push({
3817
3931
  dir,
3818
- reason: `workspace directory not resolved: ${problem ?? "unknown project root"}`
3932
+ reason: `workspace directory not resolved: ${why}`
3933
+ });
3934
+ continue;
3935
+ }
3936
+ const projectRoot = recorded ?? leftover?.projectRoot ?? null;
3937
+ if (projectRoot === null) {
3938
+ if (leftover?.empty) orphaned.push({
3939
+ dir,
3940
+ projectRoot: null,
3941
+ residue: true
3942
+ });
3943
+ else skipped.push({
3944
+ dir,
3945
+ reason: "workspace directory not resolved: its leftovers name no project root"
3819
3946
  });
3820
3947
  continue;
3821
3948
  }
@@ -3846,7 +3973,8 @@ function classifyWorkspaceDirs(entries, { registryKeys, exists, isMounted, inUse
3846
3973
  }
3847
3974
  orphaned.push({
3848
3975
  dir,
3849
- projectRoot
3976
+ projectRoot,
3977
+ ...leftover ? { residue: true } : {}
3850
3978
  });
3851
3979
  }
3852
3980
  return {
@@ -3881,6 +4009,10 @@ async function collectOrphanedWorkspaces(registryKeys, mountedVolumes, { measure
3881
4009
  });
3882
4010
  classified.skipped.push(...current.skipped);
3883
4011
  for (const orphan of current.orphaned) {
4012
+ if (orphan.projectRoot === null) {
4013
+ classified.orphaned.push(orphan);
4014
+ continue;
4015
+ }
3884
4016
  const reasons = operation ? await workspaceInUseAsync(orphan.projectRoot, {}, operation.signal, operation) : workspaceInUse(orphan.projectRoot);
3885
4017
  if (reasons.length) classified.skipped.push({
3886
4018
  dir: orphan.dir,
@@ -4130,8 +4262,25 @@ async function clearWorkspaceOutputs(report, { olderThan, now = Date.now(), oper
4130
4262
  cleared: clearedRoots
4131
4263
  };
4132
4264
  }
4133
- function stillOrphaned({ dir, projectRoot }) {
4134
- if (readRecordedRoot(dir, basename$1(dir)).projectRoot !== projectRoot || rootPresence(projectRoot) !== false || !isOnMountedVolume(projectRoot)) return false;
4265
+ function residueRoot(dir) {
4266
+ if (existsSync$1(join$1(dir, "workspace.json"))) return null;
4267
+ const residue = inspectWorkspaceResidue(dir, ["native-run.lock"]);
4268
+ return residue.blocked === null ? residue.projectRoot : null;
4269
+ }
4270
+ function removeEmptyResidue(dir) {
4271
+ if (existsSync$1(join$1(dir, "workspace.json"))) return false;
4272
+ const residue = inspectWorkspaceResidue(dir);
4273
+ if (residue.blocked !== null || !residue.empty) return false;
4274
+ try {
4275
+ rmdirSync$1(dir);
4276
+ return true;
4277
+ } catch {
4278
+ return false;
4279
+ }
4280
+ }
4281
+ function stillOrphaned({ dir, projectRoot, residue }) {
4282
+ if (projectRoot === null) return false;
4283
+ if ({ projectRoot: residue ? residueRoot(dir) : readRecordedRoot(dir, basename$1(dir)).projectRoot }.projectRoot !== projectRoot || rootPresence(projectRoot) !== false || !isOnMountedVolume(projectRoot)) return false;
4135
4284
  return !Object.keys(loadConfig$1()?.projects ?? {}).some((key) => isPathPrefix$1(projectRoot, key));
4136
4285
  }
4137
4286
  async function deleteOrphanedWorkspaces(orphaned, output = GC_OUTPUT, operation) {
@@ -4139,11 +4288,25 @@ async function deleteOrphanedWorkspaces(orphaned, output = GC_OUTPUT, operation)
4139
4288
  for (const entry of orphaned) {
4140
4289
  operation?.signal.throwIfAborted();
4141
4290
  if (!existsSync$1(entry.dir)) continue;
4291
+ const root = entry.projectRoot;
4292
+ if (root === null) {
4293
+ if (removeEmptyResidue(entry.dir)) {
4294
+ output.log(chalk.green(`Removed the empty workspace directory ${entry.dir}`));
4295
+ output.record("workspaceDirectory", "done", entry.dir, { bytes: entry.bytes ?? null });
4296
+ } else {
4297
+ output.log(chalk.yellow(`Kept ${entry.dir}: it can no longer be confirmed orphaned.`));
4298
+ output.record("workspaceDirectory", "kept", entry.dir, {
4299
+ bytes: entry.bytes ?? null,
4300
+ detail: "it can no longer be confirmed orphaned"
4301
+ });
4302
+ }
4303
+ continue;
4304
+ }
4142
4305
  let run;
4143
4306
  try {
4144
- run = await withIdleWorkspace(entry.projectRoot, async () => {
4307
+ run = await withIdleWorkspace(root, async () => {
4145
4308
  if (!stillOrphaned(entry)) return false;
4146
- const browser = await teardownOwnedBrowser(entry.projectRoot, {
4309
+ const browser = await teardownOwnedBrowser(root, {
4147
4310
  deleteProfile: true,
4148
4311
  ...operation ? { operation } : {}
4149
4312
  });
@@ -4191,4 +4354,4 @@ function sizeText(bytes) {
4191
4354
  return bytes === null ? "size unknown" : formatBytes(bytes);
4192
4355
  }
4193
4356
  //#endregion
4194
- export { tapBuildLog as $, runningBundleInstancesAsync as A, mapLimited as At, workspaceBuildInProgress as B, stopTunnel as C, buildSlotUsage as Ct, withManagedTunnelLock as D, createGcResults as Dt, withManagedRemoteWorktreeRemovalLock as E, GC_OUTPUT as Et, collectOwnedDeviceActivityAsync as F, buildStatusLine as G, NO_BUILD_PROGRESS as H, idleDeviceLines as I, parseActiveBuild as J, bundlingActivity as K, idleShutdownCandidates as L, collectIdleDevices as M, sizeConcurrency as Mt, collectIdleDevicesAsync as N, withManagedTunnelRemovalLock as O, takeGcResults as Ot, collectOwnedDeviceActivity as P, startBuildProgress as Q, parseIdleDuration as R, startTunnelSequence as S, acquireBuildSlot as St, withManagedRemoteWorktreeLock as T, releaseBuildSlot as Tt, activeBuildState as U, ACTIVE_BUILD_KEY as V, buildReport as W, recordFinishedBuild as X, recordBuildPhase as Y, runFailureRecord as Z, emptyWorkspaceDir as _, teardownParkedIosSim as _t, collectOrphanedWorkspaces as a, readStats$1 as at, workspaceInUseAsync as b, measureDu as bt, isInsideWorkspaces as c, recordRunStats as ct, recentNativeUseReason as d, eraseParkedIosSim as dt, thrownRunFailureRecord as et, rootPresence as f, teardownBrowserHeld as ft, ARTIFACT_DIRS as g, teardownParkedAvd as gt, workspaceDirRemoved as h, teardownOwnedIosSim as ht, clearWorkspaceOutputs as i, readRunEstimates as it, runningInstancesInAsync as j, readConcurrency as jt, hostedBundleDirs as k, eachLimited as kt, keptByLock as l, statsProjectKey$1 as lt, workspaceBuildReasons as m, teardownOwnedBrowser as mt, REBUILD_COST as n, STIM_VERSION as nt, collectWorkspaceOutputs as o, recordCapacityRefusal as ot, sizeText as p, teardownOwnedAvd as pt, estimateBuild as q, WORKSPACE_OUTPUT_DIRS as r, createRunRecorder as rt, deleteOrphanedWorkspaces as s, recordCapacityWait as st, LIGHTEN_AFTER_MS as t, errorRemedy as tt, listWorkspaceDirs as u, eraseParkedAvd as ut, withIdleWorkspace as v, probePublicHttp as vt, terminateChild as w, listBuildSlots as wt, resolveSupervisorTarget as x, writeUsageCache as xt, workspaceInUse as y, canonical$1 as yt, shutDownIdleDevices as z };
4357
+ export { startBuildProgress as $, hostedBundleDirs as A, eachLimited as At, shutDownIdleDevices as B, startTunnelSequence as C, acquireBuildSlot as Ct, withManagedRemoteWorktreeRemovalLock as D, GC_OUTPUT as Dt, withManagedRemoteWorktreeLock as E, releaseBuildSlot as Et, collectOwnedDeviceActivity as F, buildReport as G, ACTIVE_BUILD_KEY as H, collectOwnedDeviceActivityAsync as I, estimateBuild as J, buildStatusLine as K, idleDeviceLines as L, runningInstancesInAsync as M, readConcurrency as Mt, collectIdleDevices as N, sizeConcurrency as Nt, withManagedTunnelLock as O, createGcResults as Ot, collectIdleDevicesAsync as P, runFailureRecord as Q, idleShutdownCandidates as R, pruneEmptyProcessLockDirs as S, writeUsageCache as St, terminateChild as T, listBuildSlots as Tt, NO_BUILD_PROGRESS as U, workspaceBuildInProgress as V, activeBuildState as W, recordBuildPhase as X, parseActiveBuild as Y, recordFinishedBuild as Z, emptyWorkspaceDir as _, teardownParkedAvd as _t, collectOrphanedWorkspaces as a, readRunEstimates as at, workspaceInUseAsync as b, canonical$1 as bt, isInsideWorkspaces as c, recordCapacityWait as ct, recentNativeUseReason as d, eraseParkedAvd as dt, tapBuildLog as et, rootPresence as f, eraseParkedIosSim as ft, ARTIFACT_DIRS as g, teardownOwnedIosSim as gt, workspaceDirRemoved as h, teardownOwnedBrowser as ht, clearWorkspaceOutputs as i, createRunRecorder as it, runningBundleInstancesAsync as j, mapLimited as jt, withManagedTunnelRemovalLock as k, takeGcResults as kt, keptByLock as l, recordRunStats as lt, workspaceBuildReasons as m, teardownOwnedAvd as mt, REBUILD_COST as n, errorRemedy as nt, collectWorkspaceOutputs as o, readStats$1 as ot, sizeText as p, teardownBrowserHeld as pt, bundlingActivity as q, WORKSPACE_OUTPUT_DIRS as r, STIM_VERSION as rt, deleteOrphanedWorkspaces as s, recordCapacityRefusal as st, LIGHTEN_AFTER_MS as t, thrownRunFailureRecord as tt, listWorkspaceDirs as u, statsProjectKey$1 as ut, withIdleWorkspace as v, teardownParkedIosSim as vt, stopTunnel as w, buildSlotUsage as wt, resolveSupervisorTarget as x, measureDu as xt, workspaceInUse as y, probePublicHttp as yt, parseIdleDuration as z };
@@ -1,2 +1,2 @@
1
- import { a as nestedWorktrees, c as registerRemove, d as removalPath, f as removalRemedy, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerWarm, m as warmWorktreeTarget, n as dependencyInstallCommand, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, t as customIosDirs, u as removalBlockers } from "./worktree-BAC43Kio.mjs";
1
+ import { a as nestedWorktrees, c as registerRemove, d as removalPath, f as removalRemedy, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerWarm, m as warmWorktreeTarget, n as dependencyInstallCommand, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, t as customIosDirs, u as removalBlockers } from "./worktree-kGPE9Pcw.mjs";
2
2
  export { customIosDirs, worktreeCommand as default, dependencyInstallCommand, excludePodChurn, excludeWatchmanCookies, nestedWorktrees, porcelainPath, reclaimKeys, registerRemove, registerWarm, removalBlockers, removalPath, removalRemedy, removeWorktreeTarget, warmWorktreeTarget, warmedWorkspace };