stim 1.10.1 → 1.11.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 (58) hide show
  1. package/dist/{build-progress-BXx-ZBe4.mjs → activity-BtG4Va9l.mjs} +8 -182
  2. package/dist/{android-DPov-fv2.mjs → android-BA2i_KAV.mjs} +1 -1
  3. package/dist/{android-Bu4mbDzc.mjs → android-C1q4l523.mjs} +376 -99
  4. package/dist/{android-787HhP5w.mjs → android-C4zG2Tuc.mjs} +63 -18
  5. package/dist/{android-cas-CITmIeWY.mjs → android-cas-DfJkwCXW.mjs} +3 -3
  6. package/dist/{app-install-Cfmqr3TQ.mjs → app-install-DHut6JnV.mjs} +1 -1
  7. package/dist/{budget-nDCEwtJv.mjs → budget-De3P2rq_.mjs} +9 -9
  8. package/dist/{dev-client-DExzPiOa.mjs → build-plan-CeAYgKAx.mjs} +415 -24
  9. package/dist/build-progress-CDwogz6R.mjs +179 -0
  10. package/dist/cli.mjs +14 -14
  11. package/dist/collector-run.mjs +1 -1
  12. package/dist/{deps-DP4eWqea.mjs → deps-OF7CD5Dx.mjs} +2 -2
  13. package/dist/{device-Czh5kO8A.mjs → device-BwH2iI3O.mjs} +47 -9
  14. package/dist/{device-lease-CbEaIk7b.mjs → device-lease-D83nqeMX.mjs} +51 -51
  15. package/dist/{device-pool-BBWLAr55.mjs → device-pool-DHj7cdPy.mjs} +2 -2
  16. package/dist/{device-remote-powUHdbK.mjs → device-remote-BQZSnnmE.mjs} +7 -7
  17. package/dist/{doctor-CmqK1LcQ.mjs → doctor-D8QdMRMf.mjs} +12 -12
  18. package/dist/{error-diagnostics-xxWKNO3-.mjs → error-diagnostics-UYFSQwRy.mjs} +3 -3
  19. package/dist/{gc-zCDpmdHU.mjs → gc-COZteyiq.mjs} +27 -253
  20. package/dist/{guide-DwmaD_Wa.mjs → guide-NDvTmMi-.mjs} +336 -48
  21. package/dist/{idle--jn7pBNe.mjs → idle-NETbeNiQ.mjs} +4 -3
  22. package/dist/{in-use-CNIWU-r-.mjs → in-use-DVhlSoyn.mjs} +4 -4
  23. package/dist/{ios-CbdqTqOc.mjs → ios-CQLKpNfr.mjs} +294 -81
  24. package/dist/{ios-COGcGEcN.mjs → ios-DArbmwer.mjs} +2 -1
  25. package/dist/{ios-device-DNjPXBnb.mjs → ios-device-CwDZo0X4.mjs} +1 -1
  26. package/dist/{launch-verify-BhgkYAws.mjs → launch-verify-CuPDGXdr.mjs} +1 -1
  27. package/dist/logs-B44a1UeU.mjs +485 -0
  28. package/dist/merge-state-DDxS-XIZ.mjs +232 -0
  29. package/dist/{named-ports-DiTfSz6p.mjs → named-ports-Dc7neAlc.mjs} +1 -1
  30. package/dist/native-run-D7yB_AsB.mjs +143 -0
  31. package/dist/{ownership-BfPNRf3-.mjs → ownership-BiojdtAp.mjs} +3 -3
  32. package/dist/{ports-CLSSFOuz.mjs → ports-DwBaRFJs.mjs} +1 -1
  33. package/dist/{reload-CymyF6Kk.mjs → reload-By9Dwsrt.mjs} +4 -4
  34. package/dist/{server-bare-DVbb7kXH.mjs → server-bare-D_RK1RCj.mjs} +1 -1
  35. package/dist/server-expo-B-CCUJZj.mjs +2 -0
  36. package/dist/{server-expo-BvOCeakp.mjs → server-expo-o6H5gcBc.mjs} +1 -1
  37. package/dist/{settings-DOugPlPz.mjs → settings-B5oFZEri.mjs} +12 -3
  38. package/dist/{settings-EWYNwe72.mjs → settings-C0ugALSC.mjs} +1 -1
  39. package/dist/settings.schema.json +52 -0
  40. package/dist/{simslim-DZUxzsjq.mjs → simslim-CIR3IYJO.mjs} +150 -95
  41. package/dist/{slot-launch-Dk4oTREM.mjs → slot-launch-rggO1Esw.mjs} +2 -2
  42. package/dist/{spawn-claims-CUleC2cM.mjs → spawn-claims-BJwXTMPt.mjs} +24 -1
  43. package/dist/{start-RbmFPeZ7.mjs → start-BSsf2tUs.mjs} +4 -4
  44. package/dist/{start-qWapeB4W.mjs → start-i8zc9VmS.mjs} +1 -1
  45. package/dist/{status-Zp8kvexe.mjs → status-CitcBRsC.mjs} +227 -22
  46. package/dist/{status-Dr4fRkym.mjs → status-Q-WDEGCB.mjs} +20 -6
  47. package/dist/{stop-DcEv5sk-.mjs → stop-DIhrvu0B.mjs} +188 -27
  48. package/dist/stop-rst5mL14.mjs +3 -0
  49. package/dist/supervisor-run.mjs +7 -7
  50. package/dist/{workspace-process-lock-BXA96myD.mjs → workspace-process-lock-Cx74RSDZ.mjs} +9 -4
  51. package/dist/{workspaces-wrH6dXfu.mjs → workspaces-COD2xCz-.mjs} +15 -5
  52. package/dist/{worktree-DEG2o9F8.mjs → worktree-DhxDTK44.mjs} +1 -1
  53. package/dist/{worktree-Bd4dRvx7.mjs → worktree-KOjMX3zA.mjs} +8 -8
  54. package/dist/{xcode-B2tBkf0m.mjs → xcode-B5SPD--o.mjs} +3 -3
  55. package/package.json +5 -5
  56. package/dist/logs-MARIy6m9.mjs +0 -209
  57. package/dist/server-expo-DBVTdult.mjs +0 -2
  58. package/dist/stop-DI4BG4Os.mjs +0 -3
@@ -1,12 +1,33 @@
1
- import { u as getConfigDir } from "./config-BEq0Qw_a.mjs";
1
+ import { g as loadConfig$1, u as getConfigDir } from "./config-BEq0Qw_a.mjs";
2
2
  import { t as getExecutor } from "./exec-DK8KaVHK.mjs";
3
3
  import { P as withDirLock, c as signalProcessTree, i as pidExists } from "./metro-BWLOJ_Wr.mjs";
4
- import { c as androidDataPartitionSizeBytes } from "./settings-DOugPlPz.mjs";
4
+ import { c as androidDataPartitionSizeBytes } from "./settings-B5oFZEri.mjs";
5
5
  import { mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
6
6
  import { existsSync as existsSync$1, lstatSync as lstatSync$1, mkdirSync as mkdirSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, realpathSync as realpathSync$1, renameSync as renameSync$1, rmSync as rmSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "fs";
7
7
  import { dirname, isAbsolute, join, resolve } from "path";
8
- import { createdDevicesFile, createdDevicesLock, readCreatedDevices, readCreatedDevices as readCreatedDevices$1 } from "@stim-cli/core/state";
8
+ import { ANDROID_EMULATOR_APPS, createdDevicesFile, createdDevicesLock, readCreatedDevices, readCreatedDevices as readCreatedDevices$1, settingDefinition } from "@stim-cli/core/state";
9
9
  import { homedir, tmpdir } from "os";
10
+ //#region src/devices/android-emulator-viewer.ts
11
+ function configuredAndroidEmulatorApp() {
12
+ const value = loadConfig$1()?.androidEmulatorApp;
13
+ if (value === void 0) return "emulator";
14
+ if (ANDROID_EMULATOR_APPS.includes(value)) return value;
15
+ const error = /* @__PURE__ */ new Error("Invalid androidEmulatorApp in machine config. Use \"emulator\" or \"stim-desktop\".");
16
+ Object.assign(error, { code: "STIM_BAD_ARG" });
17
+ throw error;
18
+ }
19
+ function openEmulatorInStimDesktop(serial) {
20
+ getExecutor().runFileQuiet("open", [
21
+ "-g",
22
+ "-a",
23
+ "Stim",
24
+ `stim-desktop://open?serial=${serial}`
25
+ ], {
26
+ timeoutMs: 5e3,
27
+ killSignal: "SIGKILL"
28
+ });
29
+ }
30
+ //#endregion
10
31
  //#region src/devices/created-devices.ts
11
32
  function update(platform, change) {
12
33
  const dir = getConfigDir();
@@ -70,7 +91,7 @@ const ANDROID_ABIS = /* @__PURE__ */ new Set([
70
91
  "x86",
71
92
  "x86_64"
72
93
  ]);
73
- const DEFAULT_AVD_DEVICE = "pixel_6";
94
+ const DEFAULT_AVD_DEVICE_PROFILE = String(settingDefinition("android.deviceProfile")?.default);
74
95
  function androidHome() {
75
96
  const configured = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
76
97
  if (configured) return configured;
@@ -184,7 +205,7 @@ function pickDefaultSystemImage(images, { systemImage, hostArch } = {}) {
184
205
  if (matching.length === 0) return null;
185
206
  return matching.toSorted((a, b) => pageSizeRank(a) - pageSizeRank(b) || b.api - a.api || (b.tag === "google_apis" ? 1 : 0) - (a.tag === "google_apis" ? 1 : 0))[0] ?? null;
186
207
  }
187
- async function createOwnedAvd(label, { systemImage, spawn = (...args) => getExecutor().spawn(...args) } = {}) {
208
+ async function createOwnedAvd(label, { systemImage, deviceProfile = DEFAULT_AVD_DEVICE_PROFILE, spawn = (...args) => getExecutor().spawn(...args) } = {}) {
188
209
  const pick = pickDefaultSystemImage(listInstalledSystemImages(), { systemImage });
189
210
  if (!pick) {
190
211
  const arch = hostSystemImageArch();
@@ -201,7 +222,7 @@ async function createOwnedAvd(label, { systemImage, spawn = (...args) => getExec
201
222
  "-k",
202
223
  pick.pkg,
203
224
  "--device",
204
- DEFAULT_AVD_DEVICE
225
+ deviceProfile
205
226
  ];
206
227
  const child = spawn(tool, args, {
207
228
  detached: true,
@@ -229,17 +250,24 @@ async function createOwnedAvd(label, { systemImage, spawn = (...args) => getExec
229
250
  if (result.code !== 0) throw new Error(`Command failed: ${tool} ${args.join(" ")} (${result.signal ?? result.code})\n${stderr.trim()}`);
230
251
  return {
231
252
  avdName,
232
- systemImage: pick.pkg
253
+ systemImage: pick.pkg,
254
+ deviceProfile
233
255
  };
234
256
  }
235
257
  function parseAvdSystemImage(configIni) {
258
+ const dir = avdIniValue(configIni, "image.sysdir.1")?.replace(/[\\/]+$/, "");
259
+ if (!dir) return null;
260
+ return dir.split(/[\\/]/).join(";");
261
+ }
262
+ function parseAvdDeviceProfile(configIni) {
263
+ return avdIniValue(configIni, "hw.device.name") || null;
264
+ }
265
+ function avdIniValue(configIni, key) {
236
266
  for (const line of String(configIni).split(/\r?\n/)) {
237
267
  const separator = line.indexOf("=");
238
268
  if (separator < 0) continue;
239
- if (line.slice(0, separator).trim() !== "image.sysdir.1") continue;
240
- const dir = line.slice(separator + 1).trim().replace(/[\\/]+$/, "");
241
- if (!dir) return null;
242
- return dir.split(/[\\/]/).join(";");
269
+ if (line.slice(0, separator).trim() !== key) continue;
270
+ return line.slice(separator + 1).trim();
243
271
  }
244
272
  return null;
245
273
  }
@@ -252,6 +280,18 @@ function ownedAvdSystemImage(avdName, { avdDirectory = ownedAvdDirectory, readFi
252
280
  return null;
253
281
  }
254
282
  }
283
+ function ownedAvdDeviceProfile(avdName) {
284
+ const configIni = avdConfigIni(avdName);
285
+ return configIni === null ? null : parseAvdDeviceProfile(configIni);
286
+ }
287
+ const AVDMANAGER_LIST_TIMEOUT_MS = 6e4;
288
+ function listAvdDeviceProfiles() {
289
+ return parseAvdList(getExecutor().runFile(androidToolPath("avdmanager"), [
290
+ "list",
291
+ "device",
292
+ "-c"
293
+ ], { timeoutMs: AVDMANAGER_LIST_TIMEOUT_MS }));
294
+ }
255
295
  function sanitizeAvdLabel(label) {
256
296
  return String(label).replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
257
297
  }
@@ -454,8 +494,9 @@ function nextConsolePort(claimedPorts) {
454
494
  if (claimedPorts.length === 0) return 5554;
455
495
  return Math.max(...claimedPorts) + 2;
456
496
  }
457
- function headlessEmulatorArgs(env = process.env, platform = process.platform) {
497
+ function headlessEmulatorArgs(env = process.env, platform = process.platform, app = "emulator") {
458
498
  const args = [];
499
+ if (platform === "darwin" && app === "stim-desktop") args.push("-no-window", "-gpu", "host");
459
500
  if (platform === "linux" && !env.DISPLAY && !env.WAYLAND_DISPLAY) args.push("-no-window", "-noaudio", "-no-boot-anim", "-gpu", "swiftshader_indirect", "-no-snapshot-save", "-no-snapshot-load");
460
501
  return args;
461
502
  }
@@ -631,10 +672,10 @@ function configureNewOwnedAvd(avdName, { dataPartitionSizeGb, avdConfig = {} },
631
672
  for (const [key, value] of Object.entries(expected)) if (!verified.split(/\r?\n/).includes(`${key}=${value}`)) throw new Error(`Could not verify ${key} in ${configPath}.`);
632
673
  return configPath;
633
674
  }
634
- function avdPoolConfiguration(dataPartitionSizeGb, avdConfig) {
675
+ function avdPoolConfiguration(dataPartitionSizeGb, avdConfig, deviceProfile = DEFAULT_AVD_DEVICE_PROFILE) {
635
676
  return JSON.stringify(Object.entries({
636
677
  ...avdConfig,
637
- "hw.device.name": DEFAULT_AVD_DEVICE,
678
+ "hw.device.name": deviceProfile,
638
679
  "disk.dataPartition.size": String(androidDataPartitionSizeBytes(dataPartitionSizeGb))
639
680
  }).toSorted(([a], [b]) => a.localeCompare(b)));
640
681
  }
@@ -751,7 +792,9 @@ function suppressEmulatorCrashConsent({ platform = process.platform, version = e
751
792
  return [];
752
793
  }
753
794
  function bootAndroidEmulator(avdName, consolePort, { logFile, platform = process.platform } = {}) {
754
- const child = getExecutor().spawn(androidToolPath("emulator"), [
795
+ const exec = getExecutor();
796
+ const app = configuredAndroidEmulatorApp();
797
+ const child = exec.spawn(androidToolPath("emulator"), [
755
798
  "-avd",
756
799
  avdName,
757
800
  "-port",
@@ -759,7 +802,7 @@ function bootAndroidEmulator(avdName, consolePort, { logFile, platform = process
759
802
  "-grpc",
760
803
  String(consolePort + 3e3),
761
804
  "-grpc-use-token",
762
- ...headlessEmulatorArgs(),
805
+ ...headlessEmulatorArgs(process.env, platform, app),
763
806
  ...suppressEmulatorCrashConsent({ platform })
764
807
  ], {
765
808
  cwd: androidToolCwd(platform),
@@ -767,7 +810,9 @@ function bootAndroidEmulator(avdName, consolePort, { logFile, platform = process
767
810
  stdio: emulatorStdio(logFile)
768
811
  });
769
812
  child?.unref?.();
770
- return child?.pid ?? null;
813
+ const pid = child?.pid ?? null;
814
+ if (pid !== null && platform === "darwin" && app === "stim-desktop") openEmulatorInStimDesktop(`emulator-${consolePort}`);
815
+ return pid;
771
816
  }
772
817
  function emulatorStdio(logFile) {
773
818
  if (!logFile) return "ignore";
@@ -997,4 +1042,4 @@ function ownedAvdSerialResolver({ timeoutMs } = {}) {
997
1042
  };
998
1043
  }
999
1044
  //#endregion
1000
- export { ownedAvdDirectory as A, resolvePhysicalDevice as B, isStimOwnedAvdName as C, listOrphanedAvdDirectories as D, listInstalledSystemImages as E, physicalDeviceModel as F, wipeAvdUserData as G, sleepSync as H, pickDefaultSystemImage as I, recordCreatedDevice as J, isStimOwnedSim as K, probeEmulatorSerial as L, ownedAvdName as M, ownedAvdSerialResolver as N, memoizeEmulatorProbe as O, ownedAvdSystemImage as P, resetAdoptedAvd as R, hostSystemImageArch as S, listAvds as T, waitForAndroidEmulatorShutdown as U, shutdownAndroidEmulator as V, waitForBoot as W, emulatorDiskSpaceRemedy as _, androidPoolNoCandidatesRefusal as a, findBuildTool as b, androidToolPath as c, avdPoolConfiguration as d, avdStorageRoots as f, deleteAvd as g, createOwnedAvd as h, androidPoolCandidates as i, ownedAvdMatchesConfiguration as j, nextConsolePort as k, assertOwnedAvdStopped as l, configureNewOwnedAvd as m, androidDeviceAbi as n, androidSystemImageAbi as o, bootAndroidEmulator as p, forgetCreatedDevice as q, androidHome as r, androidToolCwd as s, androidBuildToolName as t, avdPathExists as u, emulatorFailureRemedy as v, listAdbDevices as w, getAvdNameForSerial as x, extractEmulatorFailure as y, resolveOwnedAvdSerial as z };
1045
+ export { memoizeEmulatorProbe as A, probeEmulatorSerial as B, hostSystemImageArch as C, listAvds as D, listAvdDeviceProfiles as E, ownedAvdName as F, sleepSync as G, resolveOwnedAvdSerial as H, ownedAvdSerialResolver as I, wipeAvdUserData as J, waitForAndroidEmulatorShutdown as K, ownedAvdSystemImage as L, ownedAvdDeviceProfile as M, ownedAvdDirectory as N, listInstalledSystemImages as O, ownedAvdMatchesConfiguration as P, configuredAndroidEmulatorApp as Q, physicalDeviceModel as R, getAvdNameForSerial as S, listAdbDevices as T, resolvePhysicalDevice as U, resetAdoptedAvd as V, shutdownAndroidEmulator as W, forgetCreatedDevice as X, isStimOwnedSim as Y, recordCreatedDevice as Z, deleteAvd as _, androidPoolCandidates as a, extractEmulatorFailure as b, androidToolCwd as c, avdPathExists as d, avdPoolConfiguration as f, createOwnedAvd as g, configureNewOwnedAvd as h, androidHome as i, nextConsolePort as j, listOrphanedAvdDirectories as k, androidToolPath as l, bootAndroidEmulator as m, androidBuildToolName as n, androidPoolNoCandidatesRefusal as o, avdStorageRoots as p, waitForBoot as q, androidDeviceAbi as r, androidSystemImageAbi as s, DEFAULT_AVD_DEVICE_PROFILE as t, assertOwnedAvdStopped as u, emulatorDiskSpaceRemedy as v, isStimOwnedAvdName as w, findBuildTool as x, emulatorFailureRemedy as y, pickDefaultSystemImage as z };
@@ -2,11 +2,11 @@ import { u as getConfigDir } from "./config-BEq0Qw_a.mjs";
2
2
  import { t as getExecutor } from "./exec-DK8KaVHK.mjs";
3
3
  import { r as register } from "./cache-manifest-Pubfp8wV.mjs";
4
4
  import { C as sharedCcache, P as withDirLock, j as workspaceLogsDir, x as ensureWorkspaceStorage } from "./metro-BWLOJ_Wr.mjs";
5
- import { n as spawnDeclared } from "./spawn-claims-CUleC2cM.mjs";
5
+ import { a as spawnDeclared } from "./spawn-claims-BJwXTMPt.mjs";
6
6
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
7
7
  import { l as phaseLine } from "./command-output-D5z2_bcF.mjs";
8
- import { r as androidHome } from "./android-787HhP5w.mjs";
9
- import { d as startBuildHeartbeat, n as HEARTBEAT_INTERVAL_MS } from "./xcode-B2tBkf0m.mjs";
8
+ import { i as androidHome } from "./android-C4zG2Tuc.mjs";
9
+ import { d as startBuildHeartbeat, n as HEARTBEAT_INTERVAL_MS } from "./xcode-B5SPD--o.mjs";
10
10
  import { accessSync, constants, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync } from "node:fs";
11
11
  import { isJsonObject, readJsonFile } from "@stim-cli/core/state";
12
12
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { t as getExecutor } from "./exec-DK8KaVHK.mjs";
2
- import { T as uninstallIosApp, c as iosSimulatorFailureAdvice, p as listUserApps } from "./ios-COGcGEcN.mjs";
2
+ import { T as uninstallIosApp, c as iosSimulatorFailureAdvice, p as listUserApps } from "./ios-DArbmwer.mjs";
3
3
  import { closeSync, lstatSync, openSync, readSync, readdirSync } from "node:fs";
4
4
  import { isAbsolute, join } from "node:path";
5
5
  import { createHash } from "node:crypto";
@@ -2,16 +2,16 @@ import { D as process_identity_exports, F as volumeRootFor, H as projectDeviceSl
2
2
  import { O as workspaceDir, S as sharedBuildCache, m as readWorkspaceState$1, s as resolveProjectMetro, t as killMetroTree } from "./metro-BWLOJ_Wr.mjs";
3
3
  import { n as supervisorError } from "./errors-B6W7FkxQ.mjs";
4
4
  import { o as clearWorkspaceSupervisor } from "./state-WGdIbi_d.mjs";
5
- import { n as workspaceProcessLockError, t as withWorkspaceProcessLock } from "./workspace-process-lock-BXA96myD.mjs";
5
+ import { n as workspaceProcessLockError, t as withWorkspaceProcessLock } from "./workspace-process-lock-Cx74RSDZ.mjs";
6
6
  import { l as phaseLine } from "./command-output-D5z2_bcF.mjs";
7
- import { u as workspaceActivity } from "./build-progress-BXx-ZBe4.mjs";
8
- import { N as ownedAvdSerialResolver } from "./android-787HhP5w.mjs";
9
- import { t as resolveSupervisorTarget } from "./ownership-BfPNRf3-.mjs";
10
- import { l as listAllIosSims } from "./ios-COGcGEcN.mjs";
11
- import { i as idleShutdownCandidates, n as collectOwnedDeviceActivity, o as shutDownIdleDevices, s as workspaceBuildInProgress, t as collectIdleDevices } from "./idle--jn7pBNe.mjs";
12
- import { i as canonicalPath, n as withIdleWorkspace } from "./in-use-CNIWU-r-.mjs";
13
- import { n as capacity, o as environmentState, s as formatSpace } from "./status-Dr4fRkym.mjs";
14
- import { A as discoverCaches, D as planCacheEmptying, a as collectWorkspaceOutputs, k as trimCaches, r as clearWorkspaceOutputs, y as deviceSweepIsScoped } from "./workspaces-wrH6dXfu.mjs";
7
+ import { a as workspaceActivity } from "./activity-BtG4Va9l.mjs";
8
+ import { I as ownedAvdSerialResolver } from "./android-C4zG2Tuc.mjs";
9
+ import { t as resolveSupervisorTarget } from "./ownership-BiojdtAp.mjs";
10
+ import { l as listAllIosSims } from "./ios-DArbmwer.mjs";
11
+ import { i as idleShutdownCandidates, n as collectOwnedDeviceActivity, o as shutDownIdleDevices, s as workspaceBuildInProgress, t as collectIdleDevices } from "./idle-NETbeNiQ.mjs";
12
+ import { i as canonicalPath, n as withIdleWorkspace } from "./in-use-DVhlSoyn.mjs";
13
+ import { n as capacity, o as environmentState, s as formatSpace } from "./status-Q-WDEGCB.mjs";
14
+ import { A as discoverCaches, D as planCacheEmptying, a as collectWorkspaceOutputs, k as trimCaches, r as clearWorkspaceOutputs, y as deviceSweepIsScoped } from "./workspaces-COD2xCz-.mjs";
15
15
  import { existsSync, statSync, statfsSync } from "node:fs";
16
16
  import { settingDefinition, settingValueError } from "@stim-cli/core/state";
17
17
  import { dirname, join, sep } from "node:path";