stim 1.3.0 → 1.3.1

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 (34) hide show
  1. package/README.md +4 -3
  2. package/dist/{android-CqcW1hrP.mjs → android-CT-PkXUh.mjs} +22 -19
  3. package/dist/{android-cas-BR5YJBYv.mjs → android-cas-DXorPCi_.mjs} +2 -2
  4. package/dist/{android-BqVIJoG7.mjs → android-hMj83VpN.mjs} +12 -6
  5. package/dist/{build-slots-C3-R4XQr.mjs → build-slots-C4AouyNz.mjs} +1 -1
  6. package/dist/cli.mjs +12 -12
  7. package/dist/{deps-Spz8ozgo.mjs → deps-0Yt0Inly.mjs} +1 -1
  8. package/dist/{dev-client-BjisHDB5.mjs → dev-client-VfSZNLT4.mjs} +4 -4
  9. package/dist/{device-BkiW-gkk.mjs → device-Bbv45Z9Z.mjs} +3 -3
  10. package/dist/{device-lease-BJYybF-2.mjs → device-lease-CJwK7OZr.mjs} +1 -1
  11. package/dist/{device-pool-CPbLGfrB.mjs → device-pool-CcBNTvM7.mjs} +1 -1
  12. package/dist/{device-remote-AkYCKS8U.mjs → device-remote-DAA0Zm6Z.mjs} +1 -1
  13. package/dist/{doctor-Bmv86UUW.mjs → doctor-B4EITgQB.mjs} +5 -5
  14. package/dist/{doctor-fAMXC4vl.mjs → doctor-BueDfLYG.mjs} +2 -2
  15. package/dist/{error-diagnostics-DHC31rXA.mjs → error-diagnostics-DwhNBFDU.mjs} +3 -3
  16. package/dist/{gc-GGu-8ULN.mjs → gc-BRu62v4o.mjs} +7 -7
  17. package/dist/{guide-92CPA21s.mjs → guide-D95E0u3i.mjs} +111 -61
  18. package/dist/{ios-BSXFeO5H.mjs → ios-DAju3TVy.mjs} +12 -12
  19. package/dist/{logs-DPNF4C9s.mjs → logs-CAdwW6c2.mjs} +29 -4
  20. package/dist/{logs-query-R-Cqc6Qv.mjs → logs-query-Cdp5aaCH.mjs} +1 -1
  21. package/dist/{ownership-BpCKiRlQ.mjs → ownership-DXcol4oU.mjs} +1 -1
  22. package/dist/{ownership-claim-Bf2CAfw3.mjs → ownership-claim-BtPtJVmq.mjs} +35 -21
  23. package/dist/{reclaim-iW9Cad7k.mjs → reclaim-CUmwucWG.mjs} +4 -4
  24. package/dist/{reload-DazHDSFA.mjs → reload-CWpXoOgN.mjs} +2 -2
  25. package/dist/{slot-launch-cci0xvmC.mjs → slot-launch-CZklomj6.mjs} +1 -1
  26. package/dist/{start-mObjQH2W.mjs → start-B5G4NjiA.mjs} +3 -3
  27. package/dist/{status-BxQNqu9t.mjs → status-CI9clRSb.mjs} +6 -6
  28. package/dist/{stop-CrHGcjrV.mjs → stop-CQhffpmX.mjs} +2 -2
  29. package/dist/{stop-DimGXEKY.mjs → stop-CjlgDk0a.mjs} +5 -5
  30. package/dist/{teardown-ClFp1Aax.mjs → teardown--gESs9ck.mjs} +103 -4
  31. package/dist/{workspace-process-lock-3NcQnZ0X.mjs → workspace-process-lock-IBj1Towr.mjs} +1 -1
  32. package/dist/{worktree-DxTgN1CJ.mjs → worktree-DtQGO9-s.mjs} +116 -106
  33. package/dist/{xcode-D7sAp-Zy.mjs → xcode-xnxyvJkD.mjs} +81 -44
  34. package/package.json +5 -5
package/README.md CHANGED
@@ -44,8 +44,9 @@ stim stop
44
44
 
45
45
  For `stim logs --errors`, a clean check requires exit code 0 and no matching
46
46
  errors in the captured logs. Exit code 0 alone means the query succeeded, even
47
- when it prints errors; an empty result does not prove launch or log capture
48
- succeeded.
47
+ when it prints errors. A workspace that has never produced a log timeline
48
+ refuses with `STIM_NO_PROJECT`; in a monorepo, the error names the nearest
49
+ registered descendant app with logs when one exists.
49
50
 
50
51
  Use `stim start --reset-cache` to recover from stale Metro transforms or file-map
51
52
  state. It restarts only this app's verified owned Metro, keeping its port and
@@ -128,7 +129,7 @@ eligible `.env` and local configuration files. Existing entries are preserved;
128
129
  existing ignored directories such as `node_modules` are skipped whole.
129
130
 
130
131
  `stim worktree warm --refresh` brings the source checkout up to date first: it
131
- fetches, fast-forwards whatever branch is checked out there, and installs what
132
+ checks the upstream, fetches changes when needed, fast-forwards whatever branch is checked out there, and installs what
132
133
  the new commits moved before copying. It refuses a source checkout it cannot
133
134
  move (uncommitted tracked changes, a rebase or merge in progress, a detached
134
135
  HEAD, a diverged branch) and never switches branches. One lock per repository
@@ -8,23 +8,23 @@ import { r as waitForChild, t as createLineReader } from "./process-output-C7IlI
8
8
  import { i as resolveProjectMetro, r as pidExists } from "./metro-CORqXyTL.mjs";
9
9
  import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-8O073GIC.mjs";
10
10
  import { _ as launchErrorPreview, c as launchErrorReport, g as stepTimer, h as stepClock, i as formatDuration, l as phaseLine, n as appReadinessMessage, p as shortHash } from "./command-output-8wHMEde0.mjs";
11
- import { r as claimFailure } from "./ownership-claim-Bf2CAfw3.mjs";
12
- import { $ as providerDownloadPath, C as memoizeEmulatorProbe, G as buildCacheKey, J as filesystemBuildCapability, K as describeFingerprintMiss, L as waitForBoot, M as resetAdoptedAvd, N as resolveOwnedAvdSerial, P as resolvePhysicalDevice, Q as prepareProviderDownloadDir, R as WAIT_CEILING_MS, U as takeoverLine, V as releaseBuildLock, W as waitForBuild, X as fingerprintDiffSuffix, Y as fingerprintDiffRecord, Z as fingerprintProject, _ as findBuildTool, a as androidSystemImageAbi, at as untrackedMissLine, ct as captureAssetManifest, et as providerUploadOutcome, g as extractEmulatorFailure, h as emulatorFailureRemedy, i as androidPoolNoCandidatesRefusal, it as storedAssetManifest, j as probeEmulatorSerial, k as physicalDeviceModel, lt as compareAssetManifests, m as emulatorDiskSpaceRemedy, n as androidHome, nt as resolveBuild, ot as untrackedNativeFiles, r as androidPoolCandidates, rt as storeBuild, st as assetDiffReason, t as androidDeviceAbi, tt as refingerprintAfterMutation, ut as readAssetManifest, x as listInstalledSystemImages, y as listAdbDevices, z as acquireBuildLock } from "./android-BqVIJoG7.mjs";
11
+ import { r as claimFailure } from "./ownership-claim-BtPtJVmq.mjs";
12
+ import { $ as providerDownloadPath, C as memoizeEmulatorProbe, G as buildCacheKey, J as filesystemBuildCapability, K as describeFingerprintMiss, L as waitForBoot, M as resetAdoptedAvd, N as resolveOwnedAvdSerial, P as resolvePhysicalDevice, Q as prepareProviderDownloadDir, R as WAIT_CEILING_MS, U as takeoverLine, V as releaseBuildLock, W as waitForBuild, X as fingerprintDiffSuffix, Y as fingerprintDiffRecord, Z as fingerprintProject, _ as findBuildTool, a as androidSystemImageAbi, at as untrackedMissLine, ct as captureAssetManifest, et as providerUploadOutcome, g as extractEmulatorFailure, h as emulatorFailureRemedy, i as androidPoolNoCandidatesRefusal, it as storedAssetManifest, j as probeEmulatorSerial, k as physicalDeviceModel, lt as compareAssetManifests, m as emulatorDiskSpaceRemedy, n as androidHome, nt as resolveBuild, ot as untrackedNativeFiles, r as androidPoolCandidates, rt as storeBuild, st as assetDiffReason, t as androidDeviceAbi, tt as refingerprintAfterMutation, ut as readAssetManifest, x as listInstalledSystemImages, y as listAdbDevices, z as acquireBuildLock } from "./android-hMj83VpN.mjs";
13
13
  import { A as resolveSettings, B as artifactCachePolicy, D as remoteDeviceSettingError, E as remoteAndroidSetting, F as tunnelModeSetting, H as optimizationBuildProfile, I as unknownSettingKeys, N as settingShapeErrors, R as detectProviders, T as publicUrlSetting, U as resolveOptimizations, V as compilerCacheFallbackMessage, a as SETTING_SHAPE_REMEDY, d as cacheProviderSettingError, j as settingFile, k as resolveCacheProviderConfig, r as REMOTE_DEVICE_BACKENDS, s as androidAvdConfigSettingError, u as androidDataPartitionSizeGbSettingError, x as metroWarmupUrlSetting } from "./settings-DEJf6_kJ.mjs";
14
14
  import { t as cleanLine } from "./server-expo-DizT4OMk.mjs";
15
- import { C as uploadRemote, S as resolveRemote, _ as isEasAuthFailureText, c as parkedMaxSetting, d as RESOLVE_TIMEOUT_MS, f as UPLOAD_TIMEOUT_MS, g as exitAfterFlush, h as easAuthNote, m as checkEasAuth, p as cacheLevel, v as loadProjectProvider, x as resolveEasCliBin } from "./teardown-ClFp1Aax.mjs";
16
- import { c as ensureWorkspaceStorageSafely, d as launchOutcomeRecord, f as noMetroMessage, g as warmMetro, i as detectEntryFile, m as resolveMetroWithRetry, n as pickDevClientScheme, o as needsPrebuild, p as noMetroRemedy, s as runPrebuild, t as devClientScheme, u as isPhysicalDeviceRequest, v as isEasBuildFailure, y as resolveEasDevelopmentBuild } from "./dev-client-BjisHDB5.mjs";
17
- import { t as withWorkspaceProcessLock } from "./workspace-process-lock-3NcQnZ0X.mjs";
15
+ import { C as uploadRemote, S as resolveRemote, _ as isEasAuthFailureText, c as parkedMaxSetting, d as RESOLVE_TIMEOUT_MS, f as UPLOAD_TIMEOUT_MS, g as exitAfterFlush, h as easAuthNote, m as checkEasAuth, p as cacheLevel, v as loadProjectProvider, x as resolveEasCliBin } from "./teardown--gESs9ck.mjs";
16
+ import { c as ensureWorkspaceStorageSafely, d as launchOutcomeRecord, f as noMetroMessage, g as warmMetro, i as detectEntryFile, m as resolveMetroWithRetry, n as pickDevClientScheme, o as needsPrebuild, p as noMetroRemedy, s as runPrebuild, t as devClientScheme, u as isPhysicalDeviceRequest, v as isEasBuildFailure, y as resolveEasDevelopmentBuild } from "./dev-client-VfSZNLT4.mjs";
17
+ import { t as withWorkspaceProcessLock } from "./workspace-process-lock-IBj1Towr.mjs";
18
18
  import { D as verifyAndroidReleaseLaunch, E as unverifiedLaunchLines, O as verifyLaunch, S as launchAndroidReleaseApp, _ as installConflictKind, c as RELEASE_VERIFY_WAIT_MS, d as androidDevClientUrl, g as installAndroidApp, h as deviceShellArg, i as LAUNCH_BUNDLING, l as VERIFY_TIMEOUT_MS, n as DEFAULT_METRO_PORT, o as LAUNCH_FATAL, s as LAUNCH_UNVERIFIED, t as ADB_INSTALL_TIMEOUT_MS, u as androidAppProcess, x as launchAndroidApp } from "./app-install-DIp9riNx.mjs";
19
- import { a as lostLine, c as releaseLeaseOnSignal, i as leaseExpiryText, l as runLease, n as DEBUG_VERIFY_STEP_MS, o as lostRefusal, r as acquireRunLease, s as parseDeviceWait, t as selectFromPool, u as waitFlagConflict } from "./device-pool-CPbLGfrB.mjs";
20
- import { r as releaseBuildSlot, t as acquireBuildSlot } from "./build-slots-C3-R4XQr.mjs";
19
+ import { a as lostLine, c as releaseLeaseOnSignal, i as leaseExpiryText, l as runLease, n as DEBUG_VERIFY_STEP_MS, o as lostRefusal, r as acquireRunLease, s as parseDeviceWait, t as selectFromPool, u as waitFlagConflict } from "./device-pool-CcBNTvM7.mjs";
20
+ import { r as releaseBuildSlot, t as acquireBuildSlot } from "./build-slots-C4AouyNz.mjs";
21
21
  import { a as statsProjectKey, i as recordRunStats, n as readRunEstimates, t as createRunRecorder } from "./stats-BR-kwj0B.mjs";
22
- import { C as unknownAndroidSystemImageRefusal, _ as AvdRecoveryError, b as ensureBooted, f as startBuildHeartbeat, p as tailLines, r as HEARTBEAT_INTERVAL_MS, v as checkDeviceCapacity, x as ensureOwnedDevice } from "./xcode-D7sAp-Zy.mjs";
23
- import { a as ensureMetroReachable, b as ownedSessionName, l as resolveRemoteContext, n as binOnPath, o as ensureRemoteBootOwned, s as remoteAndroidDeps } from "./device-remote-AkYCKS8U.mjs";
24
- import { a as buildAndroid, c as CCACHE_NOT_RUN, f as resolveCcache, l as CCACHE_UNAVAILABLE, n as resolveAndroidCas, o as productFlavorRefusal, p as formatDiagnostic, r as resolveAndroidCompilerCache, s as readProductFlavors, u as ccacheActivityLine } from "./android-cas-BR5YJBYv.mjs";
25
- import { n as nativeRunCommand, t as launchSlotScope } from "./slot-launch-cci0xvmC.mjs";
22
+ import { S as ensureOwnedDevice, _ as AvdBootError, f as startBuildHeartbeat, p as tailLines, r as HEARTBEAT_INTERVAL_MS, v as AvdRecoveryError, w as unknownAndroidSystemImageRefusal, x as ensureBooted, y as checkDeviceCapacity } from "./xcode-xnxyvJkD.mjs";
23
+ import { a as ensureMetroReachable, b as ownedSessionName, l as resolveRemoteContext, n as binOnPath, o as ensureRemoteBootOwned, s as remoteAndroidDeps } from "./device-remote-DAA0Zm6Z.mjs";
24
+ import { a as buildAndroid, c as CCACHE_NOT_RUN, f as resolveCcache, l as CCACHE_UNAVAILABLE, n as resolveAndroidCas, o as productFlavorRefusal, p as formatDiagnostic, r as resolveAndroidCompilerCache, s as readProductFlavors, u as ccacheActivityLine } from "./android-cas-DXorPCi_.mjs";
25
+ import { n as nativeRunCommand, t as launchSlotScope } from "./slot-launch-CZklomj6.mjs";
26
26
  import { t as spawnEntry } from "./spawn-entry-nCE6m770.mjs";
27
- import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-DHC31rXA.mjs";
27
+ import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-DwhNBFDU.mjs";
28
28
  import { existsSync, mkdirSync, openSync, readFileSync, readdirSync, rmSync } from "node:fs";
29
29
  import { InvalidArgumentError } from "commander";
30
30
  import { basename, dirname, join, relative } from "node:path";
@@ -1012,12 +1012,7 @@ async function finishAndroidRun({ lease, releaseLease, root, slot, json, metroCh
1012
1012
  deviceId: booted.serial
1013
1013
  });
1014
1014
  if (booted.failed) {
1015
- const diag = noDeviceDiagnostic({
1016
- reason: booted.reason ?? "The emulator did not boot.",
1017
- logFile: emuLog,
1018
- remedy: `Run \`stim status\` to see what Stim thinks it owns; re-running \`${runCommand}\` creates a fresh owned AVD.`,
1019
- localEmulator: !physical
1020
- });
1015
+ const diag = diagnoseBootFailure(booted, emuLog, runCommand, physical);
1021
1016
  return fail(NO_DEVICE, diag.message, diag.remedy, {
1022
1017
  lines: diag.lines,
1023
1018
  logPath: diag.logPath ? displayPath(root, diag.logPath) : null
@@ -1275,6 +1270,14 @@ async function finishAndroidRun({ lease, releaseLease, root, slot, json, metroCh
1275
1270
  facts
1276
1271
  };
1277
1272
  }
1273
+ function diagnoseBootFailure(booted, logFile, runCommand, physical) {
1274
+ return noDeviceDiagnostic({
1275
+ reason: booted.reason ?? "The emulator did not boot.",
1276
+ logFile,
1277
+ remedy: booted.remedy ?? `Run \`stim status\` to see what Stim thinks it owns; re-running \`${runCommand}\` creates a fresh owned AVD.`,
1278
+ localEmulator: !physical
1279
+ });
1280
+ }
1278
1281
  //#endregion
1279
1282
  //#region src/commands/android.ts
1280
1283
  const FALLBACK_LINES = 5;
@@ -1796,7 +1799,7 @@ async function runAndroid(options = {}) {
1796
1799
  reason: `Could not ensure an owned Android emulator: ${err?.message || err}`,
1797
1800
  logFile: emuLog,
1798
1801
  localEmulator: !(err instanceof AvdRecoveryError),
1799
- remedy: err instanceof AvdRecoveryError ? err.remedy : "Check that JAVA_HOME and ANDROID_HOME are set correctly, and that an arm64 system image is installed (`sdkmanager \"system-images;android-36;google_apis;arm64-v8a\"`)."
1802
+ remedy: err instanceof AvdBootError ? err.remedy : "Check that JAVA_HOME and ANDROID_HOME are set correctly, and that an arm64 system image is installed (`sdkmanager \"system-images;android-36;google_apis;arm64-v8a\"`)."
1800
1803
  });
1801
1804
  return fail(NO_DEVICE, diag.message, diag.remedy, {
1802
1805
  lines: diag.lines,
@@ -4,8 +4,8 @@ import { r as register } from "./cache-manifest-CXR-Y8pH.mjs";
4
4
  import { D as workspaceLogsDir, x as sharedCcache, y as ensureWorkspaceStorage } from "./state-B3XA2wp2.mjs";
5
5
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-C7IlIzd7.mjs";
6
6
  import { l as phaseLine } from "./command-output-8wHMEde0.mjs";
7
- import { n as androidHome } from "./android-BqVIJoG7.mjs";
8
- import { f as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-D7sAp-Zy.mjs";
7
+ import { n as androidHome } from "./android-hMj83VpN.mjs";
8
+ import { f as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-xnxyvJkD.mjs";
9
9
  import { accessSync, constants, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync } from "node:fs";
10
10
  import { createHash, randomUUID } from "node:crypto";
11
11
  import { dirname, isAbsolute, join, relative } from "node:path";
@@ -4,7 +4,7 @@ import { r as register } from "./cache-manifest-CXR-Y8pH.mjs";
4
4
  import { b as sharedBuildCache } from "./state-B3XA2wp2.mjs";
5
5
  import { r as pidExists } from "./metro-CORqXyTL.mjs";
6
6
  import { a as formatElapsed } from "./command-output-8wHMEde0.mjs";
7
- import { d as readClaimSet, f as releaseClaim, h as tryAcquireClaim, i as claimRemoveCommand, n as ClaimRefusedError } from "./ownership-claim-Bf2CAfw3.mjs";
7
+ import { d as releaseClaim, i as claimRemoveCommand, m as tryAcquireClaim, t as ClaimRefusedError, u as readClaimSet } from "./ownership-claim-BtPtJVmq.mjs";
8
8
  import { c as androidDataPartitionSizeBytes } from "./settings-DEJf6_kJ.mjs";
9
9
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
10
10
  import { createHash } from "node:crypto";
@@ -1275,15 +1275,21 @@ async function waitForBoot(serial, timeoutMs = 6e4, { aborted = () => false, pol
1275
1275
  }
1276
1276
  await new Promise((r) => setTimeout(r, commandTimeoutMs === void 0 ? pollMs : Math.min(pollMs, Math.max(0, timeoutMs - (Date.now() - start)))));
1277
1277
  }
1278
- const devicesOut = exec.runQuiet(`${androidTool("adb")} devices`, { timeoutMs: probeTimeout() });
1278
+ const diagnosticDeadline = Date.now() + Math.min(commandTimeoutMs ?? 5e3, 5e3);
1279
+ const diagnosticQuery = (args) => {
1280
+ const remaining = diagnosticDeadline - Date.now();
1281
+ if (remaining <= 0) return "";
1282
+ const value = exec.runQuiet(`${androidTool("adb")} ${args}`, { timeoutMs: remaining });
1283
+ return typeof value === "string" ? value.trim() : "";
1284
+ };
1279
1285
  return {
1280
1286
  ok: false,
1281
1287
  ...exited ? { exited: true } : {},
1282
1288
  diagnostic: {
1283
- devices: typeof devicesOut === "string" ? devicesOut.trim() : "",
1284
- sysBoot: getprop(exec, serial, "sys.boot_completed", probeTimeout()),
1285
- devBoot: getprop(exec, serial, "dev.bootcomplete", probeTimeout()),
1286
- bootAnim: getprop(exec, serial, "init.svc.bootanim", probeTimeout())
1289
+ devices: diagnosticQuery("devices"),
1290
+ sysBoot: diagnosticQuery(`-s ${serial} shell getprop sys.boot_completed`),
1291
+ devBoot: diagnosticQuery(`-s ${serial} shell getprop dev.bootcomplete`),
1292
+ bootAnim: diagnosticQuery(`-s ${serial} shell getprop init.svc.bootanim`)
1287
1293
  }
1288
1294
  };
1289
1295
  }
@@ -1,6 +1,6 @@
1
1
  import { u as getConfigDir } from "./config-CcefMY2Q.mjs";
2
2
  import { a as formatElapsed } from "./command-output-8wHMEde0.mjs";
3
- import { d as readClaimSet, f as releaseClaim, h as tryAcquireClaim, s as isClaimRefusal } from "./ownership-claim-Bf2CAfw3.mjs";
3
+ import { d as releaseClaim, m as tryAcquireClaim, s as isClaimRefusal, u as readClaimSet } from "./ownership-claim-BtPtJVmq.mjs";
4
4
  import { readdirSync, statSync } from "node:fs";
5
5
  import { join } from "node:path";
6
6
  //#region src/engine/build-slots.ts
package/dist/cli.mjs CHANGED
@@ -3,19 +3,19 @@ import { readFileSync } from "node:fs";
3
3
  import { Command } from "commander";
4
4
  //#region bin/cli.ts
5
5
  const commands = /* @__PURE__ */ new Map([
6
- ["doctor", () => import("./doctor-fAMXC4vl.mjs")],
7
- ["worktree", () => import("./worktree-DxTgN1CJ.mjs")],
8
- ["start", () => import("./start-mObjQH2W.mjs")],
9
- ["stop", () => import("./stop-CrHGcjrV.mjs")],
10
- ["ios", () => import("./ios-BSXFeO5H.mjs")],
11
- ["android", () => import("./android-CqcW1hrP.mjs")],
12
- ["reload", () => import("./reload-DazHDSFA.mjs")],
13
- ["device", () => import("./device-BkiW-gkk.mjs")],
14
- ["logs", () => import("./logs-DPNF4C9s.mjs")],
15
- ["status", () => import("./status-BxQNqu9t.mjs")],
6
+ ["doctor", () => import("./doctor-BueDfLYG.mjs")],
7
+ ["worktree", () => import("./worktree-DtQGO9-s.mjs")],
8
+ ["start", () => import("./start-B5G4NjiA.mjs")],
9
+ ["stop", () => import("./stop-CQhffpmX.mjs")],
10
+ ["ios", () => import("./ios-DAju3TVy.mjs")],
11
+ ["android", () => import("./android-CT-PkXUh.mjs")],
12
+ ["reload", () => import("./reload-CWpXoOgN.mjs")],
13
+ ["device", () => import("./device-Bbv45Z9Z.mjs")],
14
+ ["logs", () => import("./logs-CAdwW6c2.mjs")],
15
+ ["status", () => import("./status-CI9clRSb.mjs")],
16
16
  ["stats", () => import("./stats-CaaQr4yN.mjs")],
17
- ["gc", () => import("./gc-GGu-8ULN.mjs")],
18
- ["guide", () => import("./guide-92CPA21s.mjs")]
17
+ ["gc", () => import("./gc-BRu62v4o.mjs")],
18
+ ["guide", () => import("./guide-D95E0u3i.mjs")]
19
19
  ]);
20
20
  const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
21
21
  const program = new Command();
@@ -1,6 +1,6 @@
1
1
  import { t as getExecutor } from "./exec-CyylIdq9.mjs";
2
2
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-C7IlIzd7.mjs";
3
- import { f as startBuildHeartbeat, h as bundlerPin, r as HEARTBEAT_INTERVAL_MS } from "./xcode-D7sAp-Zy.mjs";
3
+ import { f as startBuildHeartbeat, h as bundlerPin, r as HEARTBEAT_INTERVAL_MS } from "./xcode-xnxyvJkD.mjs";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { dirname, join, relative, resolve, sep } from "node:path";
6
6
  import { homedir } from "node:os";
@@ -4,12 +4,12 @@ import { C as removeTemporaryEntry, S as makeTemporaryDirectory } from "./worktr
4
4
  import { i as detectIsExpo, o as isPackageResolvable } from "./project-fKmuIaMI.mjs";
5
5
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-C7IlIzd7.mjs";
6
6
  import { t as NOT_OURS_FOREIGN_CWD } from "./metro-CORqXyTL.mjs";
7
- import { r as claimFailure } from "./ownership-claim-Bf2CAfw3.mjs";
8
- import { V as releaseBuildLock, z as acquireBuildLock } from "./android-BqVIJoG7.mjs";
7
+ import { r as claimFailure } from "./ownership-claim-BtPtJVmq.mjs";
8
+ import { V as releaseBuildLock, z as acquireBuildLock } from "./android-hMj83VpN.mjs";
9
9
  import { i as expoBinRefusal, r as expoBinPath, t as cleanLine } from "./server-expo-DizT4OMk.mjs";
10
- import { x as resolveEasCliBin } from "./teardown-ClFp1Aax.mjs";
10
+ import { x as resolveEasCliBin } from "./teardown--gESs9ck.mjs";
11
11
  import { i as LAUNCH_BUNDLING, s as LAUNCH_UNVERIFIED } from "./app-install-DIp9riNx.mjs";
12
- import { f as startBuildHeartbeat, p as tailLines, r as HEARTBEAT_INTERVAL_MS } from "./xcode-D7sAp-Zy.mjs";
12
+ import { f as startBuildHeartbeat, p as tailLines, r as HEARTBEAT_INTERVAL_MS } from "./xcode-xnxyvJkD.mjs";
13
13
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
14
14
  import { createHash } from "node:crypto";
15
15
  import { basename, join } from "node:path";
@@ -1,9 +1,9 @@
1
1
  import { V as validateDeviceSlot } from "./config-CcefMY2Q.mjs";
2
2
  import { a as findProjectRoot } from "./project-fKmuIaMI.mjs";
3
3
  import { r as clockTime } from "./command-output-8wHMEde0.mjs";
4
- import { C as memoizeEmulatorProbe, P as resolvePhysicalDevice, i as androidPoolNoCandidatesRefusal, j as probeEmulatorSerial, k as physicalDeviceModel, r as androidPoolCandidates, y as listAdbDevices } from "./android-BqVIJoG7.mjs";
5
- import { f as takeLease, l as releaseWorkspaceLeases, n as fileLeaseIo, o as parseLeaseDuration } from "./device-lease-BJYybF-2.mjs";
6
- import { d as waitForDevice, s as parseDeviceWait, t as selectFromPool } from "./device-pool-CPbLGfrB.mjs";
4
+ import { C as memoizeEmulatorProbe, P as resolvePhysicalDevice, i as androidPoolNoCandidatesRefusal, j as probeEmulatorSerial, k as physicalDeviceModel, r as androidPoolCandidates, y as listAdbDevices } from "./android-hMj83VpN.mjs";
5
+ import { f as takeLease, l as releaseWorkspaceLeases, n as fileLeaseIo, o as parseLeaseDuration } from "./device-lease-CJwK7OZr.mjs";
6
+ import { d as waitForDevice, s as parseDeviceWait, t as selectFromPool } from "./device-pool-CcBNTvM7.mjs";
7
7
  import { c as listIosDevices, o as iosPoolCandidates, s as iosPoolNoCandidatesRefusal, u as resolveIosPhysicalDevice } from "./ios-device-CWOM_S44.mjs";
8
8
  import chalk from "chalk";
9
9
  //#region src/commands/device.ts
@@ -1,6 +1,6 @@
1
1
  import { I as deviceSlotKey, R as parseDeviceSlotKey, V as validateDeviceSlot, k as withDirLock, u as getConfigDir } from "./config-CcefMY2Q.mjs";
2
2
  import { _ as writeWorkspaceState, m as withWorkspaceStateLock, o as clearWorkspaceStateKeys, p as readWorkspaceState } from "./state-B3XA2wp2.mjs";
3
- import { H as segment } from "./android-BqVIJoG7.mjs";
3
+ import { H as segment } from "./android-hMj83VpN.mjs";
4
4
  import { mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { randomBytes } from "node:crypto";
6
6
  import { join } from "node:path";
@@ -1,7 +1,7 @@
1
1
  import { I as deviceSlotKey } from "./config-CcefMY2Q.mjs";
2
2
  import { a as formatElapsed, r as clockTime } from "./command-output-8wHMEde0.mjs";
3
3
  import { A as APP_READINESS_TIMEOUT_MS, l as VERIFY_TIMEOUT_MS } from "./app-install-DIp9riNx.mjs";
4
- import { a as parseLease, c as releaseRunLease, d as selectPoolDevice, f as takeLease, n as fileLeaseIo, r as leaseIsExpired, s as raiseLease, t as deviceLeasePath } from "./device-lease-BJYybF-2.mjs";
4
+ import { a as parseLease, c as releaseRunLease, d as selectPoolDevice, f as takeLease, n as fileLeaseIo, r as leaseIsExpired, s as raiseLease, t as deviceLeasePath } from "./device-lease-CJwK7OZr.mjs";
5
5
  //#region src/engine/device-lease-run.ts
6
6
  const LEASE_STEP_FLOOR_MS = 6e4;
7
7
  const DEBUG_VERIFY_STEP_MS = VERIFY_TIMEOUT_MS + APP_READINESS_TIMEOUT_MS;
@@ -3,7 +3,7 @@ import { k as withDirLock, u as getConfigDir } from "./config-CcefMY2Q.mjs";
3
3
  import { D as workspaceLogsDir, O as workspaceName, T as workspaceDir, a as clearRemoteSession, c as readMetroTunnel, k as workspaceStateFile, u as readRemoteSession } from "./state-B3XA2wp2.mjs";
4
4
  import { r as pidExists } from "./metro-CORqXyTL.mjs";
5
5
  import { z as planMetroReach } from "./settings-DEJf6_kJ.mjs";
6
- import { t as withWorkspaceProcessLock } from "./workspace-process-lock-3NcQnZ0X.mjs";
6
+ import { t as withWorkspaceProcessLock } from "./workspace-process-lock-IBj1Towr.mjs";
7
7
  import { T as readMetroRecords, a as LAUNCH_ERROR, b as isBundleProof, p as devClientDeepLink, r as INSTALL_ERROR } from "./app-install-DIp9riNx.mjs";
8
8
  import { S as sanitizeDeviceLabel } from "./ios-Deh5js5V.mjs";
9
9
  import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
@@ -4,13 +4,13 @@ import { b as sharedBuildCache, w as workspaceDerivedData } from "./state-B3XA2w
4
4
  import { S as makeTemporaryDirectory, a as dirtyFingerprintFiles, f as listWorktrees, g as repoRoot, s as gitCommonDir, w as temporaryRoot, x as filesystemDevice } from "./worktree-Eq6TLH8N.mjs";
5
5
  import { i as detectIsExpo, t as appProjectProblem } from "./project-fKmuIaMI.mjs";
6
6
  import { d as quotedPath, u as plural } from "./command-output-8wHMEde0.mjs";
7
- import { B as listBuildLocks, Z as fingerprintProject, q as diffFingerprintSources, y as listAdbDevices } from "./android-BqVIJoG7.mjs";
7
+ import { B as listBuildLocks, Z as fingerprintProject, q as diffFingerprintSources, y as listAdbDevices } from "./android-hMj83VpN.mjs";
8
8
  import { A as resolveSettings, E as remoteAndroidSetting, I as unknownSettingKeys, M as settingOrigin, N as settingShapeErrors, O as remoteIosSetting, P as settingsLayers, U as resolveOptimizations, V as compilerCacheFallbackMessage, a as SETTING_SHAPE_REMEDY, i as SETTINGS_WITH_RESOLVE_TIME_FALLBACK, n as PATH_SETTINGS, v as iosSimSlimProfileSetting, w as projectOptimizations, y as mergeSettingsLayers } from "./settings-DEJf6_kJ.mjs";
9
- import { a as POOL_SETTING_REMEDY, b as providerFromConfig, c as parkedMaxSetting, m as checkEasAuth$1, x as resolveEasCliBin, y as ownerFromConfig } from "./teardown-ClFp1Aax.mjs";
9
+ import { a as POOL_SETTING_REMEDY, b as providerFromConfig, c as parkedMaxSetting, m as checkEasAuth$1, x as resolveEasCliBin, y as ownerFromConfig } from "./teardown--gESs9ck.mjs";
10
10
  import { E as readHostMemoryPressure, T as hostMemoryPressureAdvice, u as listAllIosSims } from "./ios-Deh5js5V.mjs";
11
- import { n as listBuildSlots } from "./build-slots-C3-R4XQr.mjs";
12
- import { E as simslimIsOnPath, S as liveOwnedDeviceCount, a as ccacheEnabled, g as podInstallCommand } from "./xcode-D7sAp-Zy.mjs";
13
- import { d as projectCmakeLauncher, i as apkOutputsDir, r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-BR5YJBYv.mjs";
11
+ import { n as listBuildSlots } from "./build-slots-C4AouyNz.mjs";
12
+ import { C as liveOwnedDeviceCount, D as simslimIsOnPath, a as ccacheEnabled, g as podInstallCommand } from "./xcode-xnxyvJkD.mjs";
13
+ import { d as projectCmakeLauncher, i as apkOutputsDir, r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-DXorPCi_.mjs";
14
14
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync } from "node:fs";
15
15
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
16
16
  import { existsSync as existsSync$1, lstatSync as lstatSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, realpathSync as realpathSync$1, rmSync as rmSync$1 } from "fs";
@@ -2,8 +2,8 @@ import { t as getExecutor } from "./exec-CyylIdq9.mjs";
2
2
  import { g as repoRoot } from "./worktree-Eq6TLH8N.mjs";
3
3
  import { a as findProjectRoot } from "./project-fKmuIaMI.mjs";
4
4
  import { l as phaseLine } from "./command-output-8wHMEde0.mjs";
5
- import { s as detectXcodeMajor } from "./xcode-D7sAp-Zy.mjs";
6
- import { c as repairCxxLauncherState, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as runDoctor } from "./doctor-Bmv86UUW.mjs";
5
+ import { s as detectXcodeMajor } from "./xcode-xnxyvJkD.mjs";
6
+ import { c as repairCxxLauncherState, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as runDoctor } from "./doctor-B4EITgQB.mjs";
7
7
  import { accessSync, constants, realpathSync, statSync } from "node:fs";
8
8
  import { InvalidArgumentError } from "commander";
9
9
  import { delimiter, join, resolve } from "node:path";
@@ -5,9 +5,9 @@ import { n as deviceConsoleLevel } from "./ios-device-D3pzTKQE.mjs";
5
5
  import { i as resolveProjectMetro } from "./metro-CORqXyTL.mjs";
6
6
  import { n as parseLogcatLine, t as androidClockOffset } from "./android-BW8i_YxU.mjs";
7
7
  import { _ as launchErrorPreview } from "./command-output-8wHMEde0.mjs";
8
- import { n as androidHome } from "./android-BqVIJoG7.mjs";
9
- import { a as parseLease, n as fileLeaseIo, t as deviceLeasePath } from "./device-lease-BJYybF-2.mjs";
10
- import { c as readLogRecords, t as attachExpoErrorContext } from "./logs-query-R-Cqc6Qv.mjs";
8
+ import { n as androidHome } from "./android-hMj83VpN.mjs";
9
+ import { a as parseLease, n as fileLeaseIo, t as deviceLeasePath } from "./device-lease-CJwK7OZr.mjs";
10
+ import { l as readLogRecords, t as attachExpoErrorContext } from "./logs-query-Cdp5aaCH.mjs";
11
11
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
12
12
  import { createHash, randomUUID } from "node:crypto";
13
13
  import { basename, dirname, join, resolve, sep } from "node:path";
@@ -5,15 +5,15 @@ import { T as workspaceDir, k as workspaceStateFile } from "./state-B3XA2wp2.mjs
5
5
  import { g as repoRoot, s as gitCommonDir } from "./worktree-Eq6TLH8N.mjs";
6
6
  import { a as findProjectRoot, i as detectIsExpo } from "./project-fKmuIaMI.mjs";
7
7
  import { m as shortUdid, o as formatLongDuration, u as plural } from "./command-output-8wHMEde0.mjs";
8
- import { d as readClaimSet, o as clearFreeClaimSet } from "./ownership-claim-Bf2CAfw3.mjs";
9
- import { B as listBuildLocks, S as listOrphanedAvdDirectories, T as ownedAvdDirectory, b as listAvds } from "./android-BqVIJoG7.mjs";
8
+ import { o as clearFreeClaimSet, u as readClaimSet } from "./ownership-claim-BtPtJVmq.mjs";
9
+ import { B as listBuildLocks, S as listOrphanedAvdDirectories, T as ownedAvdDirectory, b as listAvds } from "./android-hMj83VpN.mjs";
10
10
  import { A as resolveSettings, N as settingShapeErrors, a as SETTING_SHAPE_REMEDY } from "./settings-DEJf6_kJ.mjs";
11
- import { a as POOL_SETTING_REMEDY, c as parkedMaxSetting, i as teardownParkedIosSim, l as readParked, n as teardownOwnedIosSim, r as teardownParkedAvd, s as dropParked, t as teardownOwnedAvd, x as resolveEasCliBin } from "./teardown-ClFp1Aax.mjs";
11
+ import { a as POOL_SETTING_REMEDY, c as parkedMaxSetting, i as teardownParkedIosSim, l as readParked, n as teardownOwnedIosSim, r as teardownParkedAvd, s as dropParked, t as teardownOwnedAvd, x as resolveEasCliBin } from "./teardown--gESs9ck.mjs";
12
12
  import { d as listIosDeviceTypes, g as parseRuntimeVersion, u as listAllIosSims } from "./ios-Deh5js5V.mjs";
13
- import { i as listLeaseFiles, r as leaseIsExpired, u as removeExpiredLease } from "./device-lease-BJYybF-2.mjs";
14
- import { n as listBuildSlots } from "./build-slots-C3-R4XQr.mjs";
15
- import { C as verifyStoppedSession, S as stopSessionArgs, _ as inspectSessionForTeardown, d as withEasProjectLock, f as easMachineStateRoot, g as getSessionArgs, h as findOrphanedOwnedSessions, m as removeEasSessionClaim, p as readEasSessionLedger, u as withRemoteSessionLock, v as isDefinitiveMissingSessionError, x as parseSessionListPage, y as listOwnedSessionsArgs } from "./device-remote-AkYCKS8U.mjs";
16
- import { n as reclaimProject, t as describeDereferenced } from "./reclaim-iW9Cad7k.mjs";
13
+ import { i as listLeaseFiles, r as leaseIsExpired, u as removeExpiredLease } from "./device-lease-CJwK7OZr.mjs";
14
+ import { n as listBuildSlots } from "./build-slots-C4AouyNz.mjs";
15
+ import { C as verifyStoppedSession, S as stopSessionArgs, _ as inspectSessionForTeardown, d as withEasProjectLock, f as easMachineStateRoot, g as getSessionArgs, h as findOrphanedOwnedSessions, m as removeEasSessionClaim, p as readEasSessionLedger, u as withRemoteSessionLock, v as isDefinitiveMissingSessionError, x as parseSessionListPage, y as listOwnedSessionsArgs } from "./device-remote-DAA0Zm6Z.mjs";
16
+ import { n as reclaimProject, t as describeDereferenced } from "./reclaim-CUmwucWG.mjs";
17
17
  import { InvalidArgumentError } from "commander";
18
18
  import { existsSync, readFileSync, readdirSync, realpathSync, rmSync, statSync } from "fs";
19
19
  import { homedir, tmpdir } from "os";