stim 1.5.0 → 1.6.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 (34) hide show
  1. package/dist/{android-DJWiTBkz.mjs → android-BkYmndPp.mjs} +1 -1
  2. package/dist/{android-sobvO9ia.mjs → android-DLJB8ljN.mjs} +12 -12
  3. package/dist/{android-cas-CSS8gjR7.mjs → android-cas-CrzI_Zha.mjs} +2 -2
  4. package/dist/cli.mjs +12 -12
  5. package/dist/{deps-BAGOnrc7.mjs → deps-C1zGnr61.mjs} +1 -1
  6. package/dist/{dev-client-BoifdqkU.mjs → dev-client-BaTXAAnC.mjs} +4 -4
  7. package/dist/{device-DvKJ454A.mjs → device-XY_5eGdN.mjs} +3 -3
  8. package/dist/{device-lease-r7yEQ1R8.mjs → device-lease-DBW-IL4p.mjs} +1 -1
  9. package/dist/{device-pool-DU4FQKp5.mjs → device-pool-C0s_83Og.mjs} +1 -1
  10. package/dist/{device-remote-BTUqbl0i.mjs → device-remote-D9wN3CdE.mjs} +1 -1
  11. package/dist/{device-BUw4JBuH.mjs → device-xoQxw8hR.mjs} +3 -3
  12. package/dist/{doctor-Di_B26uh.mjs → doctor-BRO8UKlK.mjs} +6 -6
  13. package/dist/{error-diagnostics-CTePWAzW.mjs → error-diagnostics-B5STzxqN.mjs} +2 -2
  14. package/dist/{gc-C20dWw_8.mjs → gc-C-6grAQI.mjs} +6 -6
  15. package/dist/{guide-sAnoty2y.mjs → guide-CYtd7xbA.mjs} +24 -8
  16. package/dist/{ios-BdpkncL6.mjs → ios-Ccm6c8Hj.mjs} +11 -11
  17. package/dist/{logs-BfQdIhiF.mjs → logs-D4Poojxy.mjs} +1 -1
  18. package/dist/{reclaim-C_rB25f4.mjs → reclaim-WXTbXPX4.mjs} +3 -3
  19. package/dist/{reload-CYBJbJfI.mjs → reload-xlQvHKfN.mjs} +2 -2
  20. package/dist/{server-bare-H3pAhbMs.mjs → server-bare-CCLb90FS.mjs} +1 -1
  21. package/dist/{server-expo-Ds8_mfng.mjs → server-expo-CX-zkgWl.mjs} +1 -1
  22. package/dist/server-expo-CjeTJ273.mjs +2 -0
  23. package/dist/{settings-kO2ZqIKy.mjs → settings-CGHTt5vb.mjs} +5 -2
  24. package/dist/{slot-launch-BpHiHH6A.mjs → slot-launch-BYjnljAs.mjs} +1 -1
  25. package/dist/{start-DiEfqEWk.mjs → start-DHYAyGzm.mjs} +1 -1
  26. package/dist/{status-J5LAXpag.mjs → status-QeLZb8SM.mjs} +4 -4
  27. package/dist/{stop-CM1fejKW.mjs → stop-CHTaw65F.mjs} +1 -1
  28. package/dist/{stop-0jJNahwN.mjs → stop-DsdOx9Hj.mjs} +3 -3
  29. package/dist/supervisor-run.mjs +1 -1
  30. package/dist/{teardown-CAVcWeRD.mjs → teardown-sm1FwF6V.mjs} +2 -2
  31. package/dist/{worktree-CeUKDAQw.mjs → worktree-CCNPg_f0.mjs} +5 -5
  32. package/dist/{xcode-BqDeRkpT.mjs → xcode-DUF7jrXj.mjs} +87 -12
  33. package/package.json +5 -5
  34. package/dist/server-expo-CSwUVYOa.mjs +0 -2
@@ -4,7 +4,7 @@ import { r as register } from "./cache-manifest-uoOKhgUD.mjs";
4
4
  import { l as sharedBuildCache } from "./workspace-state-WVwWw_hB.mjs";
5
5
  import { r as pidExists } from "./metro-ato6ef3J.mjs";
6
6
  import { a as formatElapsed } from "./command-output-BuIb_ZOI.mjs";
7
- import { c as androidDataPartitionSizeBytes } from "./settings-kO2ZqIKy.mjs";
7
+ import { c as androidDataPartitionSizeBytes } from "./settings-CGHTt5vb.mjs";
8
8
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
9
9
  import { createHash } from "node:crypto";
10
10
  import { join } from "node:path";
@@ -9,23 +9,23 @@ import { r as waitForChild, t as createLineReader } from "./process-output-C7IlI
9
9
  import { i as resolveProjectMetro, r as pidExists } from "./metro-ato6ef3J.mjs";
10
10
  import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-CD_XnpDu.mjs";
11
11
  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-BuIb_ZOI.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-DJWiTBkz.mjs";
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-kO2ZqIKy.mjs";
14
- import { t as cleanLine } from "./server-expo-Ds8_mfng.mjs";
15
- import { C as resolveRemote, S as resolveEasCliBin, _ as exitAfterFlush, f as RESOLVE_TIMEOUT_MS, g as easAuthNote, h as checkEasAuth, l as parkedMaxSetting, m as cacheLevel, p as UPLOAD_TIMEOUT_MS, v as isEasAuthFailureText, w as uploadRemote, y as loadProjectProvider } from "./teardown-CAVcWeRD.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-BoifdqkU.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-BkYmndPp.mjs";
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-CGHTt5vb.mjs";
14
+ import { t as cleanLine } from "./server-expo-CX-zkgWl.mjs";
15
+ import { C as resolveRemote, S as resolveEasCliBin, _ as exitAfterFlush, f as RESOLVE_TIMEOUT_MS, g as easAuthNote, h as checkEasAuth, l as parkedMaxSetting, m as cacheLevel, p as UPLOAD_TIMEOUT_MS, v as isEasAuthFailureText, w as uploadRemote, y as loadProjectProvider } from "./teardown-sm1FwF6V.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-BaTXAAnC.mjs";
17
17
  import { t as withWorkspaceProcessLock } from "./workspace-process-lock-Bz19_R9R.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--PAocWvq.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-DU4FQKp5.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-C0s_83Og.mjs";
20
20
  import { r as releaseBuildSlot, t as acquireBuildSlot } from "./build-slots-CuPszJDu.mjs";
21
21
  import { a as statsProjectKey, i as recordRunStats, n as readRunEstimates, t as createRunRecorder } from "./stats-Fo9ACIv7.mjs";
22
- import { i as ensureOwnedDevice, l as AvdBootError, o as unknownAndroidSystemImageRefusal, r as ensureBooted, t as checkDeviceCapacity, u as AvdRecoveryError } from "./device-DvKJ454A.mjs";
23
- import { a as ensureMetroReachable, b as ownedSessionName, l as resolveRemoteContext, n as binOnPath, o as ensureRemoteBootOwned, s as remoteAndroidDeps } from "./device-remote-BTUqbl0i.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-CSS8gjR7.mjs";
25
- import { d as startBuildHeartbeat, f as tailLines, n as HEARTBEAT_INTERVAL_MS } from "./xcode-BqDeRkpT.mjs";
26
- import { n as nativeRunCommand, t as launchSlotScope } from "./slot-launch-BpHiHH6A.mjs";
22
+ import { i as ensureOwnedDevice, l as AvdBootError, o as unknownAndroidSystemImageRefusal, r as ensureBooted, t as checkDeviceCapacity, u as AvdRecoveryError } from "./device-XY_5eGdN.mjs";
23
+ import { a as ensureMetroReachable, b as ownedSessionName, l as resolveRemoteContext, n as binOnPath, o as ensureRemoteBootOwned, s as remoteAndroidDeps } from "./device-remote-D9wN3CdE.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-CrzI_Zha.mjs";
25
+ import { d as startBuildHeartbeat, f as tailLines, n as HEARTBEAT_INTERVAL_MS } from "./xcode-DUF7jrXj.mjs";
26
+ import { n as nativeRunCommand, t as launchSlotScope } from "./slot-launch-BYjnljAs.mjs";
27
27
  import { t as spawnEntry } from "./spawn-entry-nCE6m770.mjs";
28
- import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-CTePWAzW.mjs";
28
+ import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-B5STzxqN.mjs";
29
29
  import { existsSync, mkdirSync, openSync, readFileSync, readdirSync, rmSync } from "node:fs";
30
30
  import { InvalidArgumentError } from "commander";
31
31
  import { basename, dirname, join, relative } from "node:path";
@@ -4,8 +4,8 @@ import { r as register } from "./cache-manifest-uoOKhgUD.mjs";
4
4
  import { _ as workspaceLogsDir, c as ensureWorkspaceStorage, u as sharedCcache } from "./workspace-state-WVwWw_hB.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-BuIb_ZOI.mjs";
7
- import { n as androidHome } from "./android-DJWiTBkz.mjs";
8
- import { d as startBuildHeartbeat, n as HEARTBEAT_INTERVAL_MS } from "./xcode-BqDeRkpT.mjs";
7
+ import { n as androidHome } from "./android-BkYmndPp.mjs";
8
+ import { d as startBuildHeartbeat, n as HEARTBEAT_INTERVAL_MS } from "./xcode-DUF7jrXj.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";
package/dist/cli.mjs CHANGED
@@ -3,20 +3,20 @@ 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-Di_B26uh.mjs")],
7
- ["worktree", () => import("./worktree-CeUKDAQw.mjs")],
8
- ["start", () => import("./start-DiEfqEWk.mjs")],
6
+ ["doctor", () => import("./doctor-BRO8UKlK.mjs")],
7
+ ["worktree", () => import("./worktree-CCNPg_f0.mjs")],
8
+ ["start", () => import("./start-DHYAyGzm.mjs")],
9
9
  ["ports", () => import("./ports-A6uTJSPj.mjs")],
10
- ["stop", () => import("./stop-CM1fejKW.mjs")],
11
- ["ios", () => import("./ios-BdpkncL6.mjs")],
12
- ["android", () => import("./android-sobvO9ia.mjs")],
13
- ["reload", () => import("./reload-CYBJbJfI.mjs")],
14
- ["device", () => import("./device-BUw4JBuH.mjs")],
15
- ["logs", () => import("./logs-BfQdIhiF.mjs")],
16
- ["status", () => import("./status-J5LAXpag.mjs")],
10
+ ["stop", () => import("./stop-CHTaw65F.mjs")],
11
+ ["ios", () => import("./ios-Ccm6c8Hj.mjs")],
12
+ ["android", () => import("./android-DLJB8ljN.mjs")],
13
+ ["reload", () => import("./reload-xlQvHKfN.mjs")],
14
+ ["device", () => import("./device-xoQxw8hR.mjs")],
15
+ ["logs", () => import("./logs-D4Poojxy.mjs")],
16
+ ["status", () => import("./status-QeLZb8SM.mjs")],
17
17
  ["stats", () => import("./stats-DHrO0frH.mjs")],
18
- ["gc", () => import("./gc-C20dWw_8.mjs")],
19
- ["guide", () => import("./guide-sAnoty2y.mjs")]
18
+ ["gc", () => import("./gc-C-6grAQI.mjs")],
19
+ ["guide", () => import("./guide-CYtd7xbA.mjs")]
20
20
  ]);
21
21
  const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
22
22
  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 { d as startBuildHeartbeat, m as bundlerPin, n as HEARTBEAT_INTERVAL_MS } from "./xcode-BqDeRkpT.mjs";
3
+ import { d as startBuildHeartbeat, m as bundlerPin, n as HEARTBEAT_INTERVAL_MS } from "./xcode-DUF7jrXj.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";
@@ -5,11 +5,11 @@ import { T as removeTemporaryEntry, w as makeTemporaryDirectory } from "./worktr
5
5
  import { i as detectIsExpo, o as isPackageResolvable } from "./project-B_SDt4ip.mjs";
6
6
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-C7IlIzd7.mjs";
7
7
  import { t as NOT_OURS_FOREIGN_CWD } from "./metro-ato6ef3J.mjs";
8
- import { V as releaseBuildLock, z as acquireBuildLock } from "./android-DJWiTBkz.mjs";
9
- import { i as expoBinRefusal, r as expoBinPath, t as cleanLine } from "./server-expo-Ds8_mfng.mjs";
10
- import { S as resolveEasCliBin } from "./teardown-CAVcWeRD.mjs";
8
+ import { V as releaseBuildLock, z as acquireBuildLock } from "./android-BkYmndPp.mjs";
9
+ import { i as expoBinRefusal, r as expoBinPath, t as cleanLine } from "./server-expo-CX-zkgWl.mjs";
10
+ import { S as resolveEasCliBin } from "./teardown-sm1FwF6V.mjs";
11
11
  import { i as LAUNCH_BUNDLING, s as LAUNCH_UNVERIFIED } from "./app-install--PAocWvq.mjs";
12
- import { d as startBuildHeartbeat, f as tailLines, n as HEARTBEAT_INTERVAL_MS } from "./xcode-BqDeRkpT.mjs";
12
+ import { d as startBuildHeartbeat, f as tailLines, n as HEARTBEAT_INTERVAL_MS } from "./xcode-DUF7jrXj.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";
@@ -5,9 +5,9 @@ import { s as ownedDeviceLabel } from "./project-B_SDt4ip.mjs";
5
5
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-C7IlIzd7.mjs";
6
6
  import { r as pidExists } from "./metro-ato6ef3J.mjs";
7
7
  import { l as phaseLine } from "./command-output-BuIb_ZOI.mjs";
8
- import { A as pickDefaultSystemImage, D as ownedAvdName, E as ownedAvdMatchesConfiguration, L as waitForBoot, N as resolveOwnedAvdSerial, O as ownedAvdSystemImage, b as listAvds, c as avdPoolConfiguration, d as configureNewOwnedAvd, f as createOwnedAvd, o as assertOwnedAvdStopped, u as bootAndroidEmulator, v as getAvdNameForSerial, w as nextConsolePort, x as listInstalledSystemImages, y as listAdbDevices } from "./android-DJWiTBkz.mjs";
9
- import { l as androidDataPartitionSizeGbSetting, o as androidAvdConfigSetting, v as iosSimSlimProfileSetting } from "./settings-kO2ZqIKy.mjs";
10
- import { c as isLegacyDeletionClaim, d as selectParked, i as teardownParkedIosSim, l as parkedMaxSetting, o as adoptParked, r as teardownParkedAvd, s as dropParked, t as teardownOwnedAvd, u as readParked } from "./teardown-CAVcWeRD.mjs";
8
+ import { A as pickDefaultSystemImage, D as ownedAvdName, E as ownedAvdMatchesConfiguration, L as waitForBoot, N as resolveOwnedAvdSerial, O as ownedAvdSystemImage, b as listAvds, c as avdPoolConfiguration, d as configureNewOwnedAvd, f as createOwnedAvd, o as assertOwnedAvdStopped, u as bootAndroidEmulator, v as getAvdNameForSerial, w as nextConsolePort, x as listInstalledSystemImages, y as listAdbDevices } from "./android-BkYmndPp.mjs";
9
+ import { l as androidDataPartitionSizeGbSetting, o as androidAvdConfigSetting, v as iosSimSlimProfileSetting } from "./settings-CGHTt5vb.mjs";
10
+ import { c as isLegacyDeletionClaim, d as selectParked, i as teardownParkedIosSim, l as parkedMaxSetting, o as adoptParked, r as teardownParkedAvd, s as dropParked, t as teardownOwnedAvd, u as readParked } from "./teardown-sm1FwF6V.mjs";
11
11
  import { t as withWorkspaceProcessLock } from "./workspace-process-lock-Bz19_R9R.mjs";
12
12
  import { E as readHostMemoryPressure, T as hostMemoryPressureAdvice, _ as renameIosSim, b as resolveIosCreation, c as iosRuntimeMatches, d as listIosDeviceTypes, g as parseRuntimeVersion, i as createOwnedIosSim, l as iosSimulatorFailureAdvice, m as ownedSimName, n as bootIosSim, u as listAllIosSims, v as resetIosKeychain, x as resolveOwnedIosSim, y as resetIosPrivacy } from "./ios-Deh5js5V.mjs";
13
13
  import { randomUUID } from "node:crypto";
@@ -1,6 +1,6 @@
1
1
  import { D as withDirLock, I as parseDeviceSlotKey, P as deviceSlotKey, u as getConfigDir, z as validateDeviceSlot } from "./config-DMP7L7H6.mjs";
2
2
  import { a as withWorkspaceStateLock, n as clearWorkspaceStateKeys, o as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-WVwWw_hB.mjs";
3
- import { H as segment } from "./android-DJWiTBkz.mjs";
3
+ import { H as segment } from "./android-BkYmndPp.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 { P as deviceSlotKey } from "./config-DMP7L7H6.mjs";
2
2
  import { a as formatElapsed, r as clockTime } from "./command-output-BuIb_ZOI.mjs";
3
3
  import { A as APP_READINESS_TIMEOUT_MS, l as VERIFY_TIMEOUT_MS } from "./app-install--PAocWvq.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-r7yEQ1R8.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-DBW-IL4p.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 { D as withDirLock, u as getConfigDir } from "./config-DMP7L7H6.mjs";
3
3
  import { _ as workspaceLogsDir, h as workspaceDir, v as workspaceName, y as workspaceStateFile } from "./workspace-state-WVwWw_hB.mjs";
4
4
  import { a as clearRemoteSession, l as readRemoteSession, s as readMetroTunnel } from "./state-CnWzvCWP.mjs";
5
5
  import { r as pidExists } from "./metro-ato6ef3J.mjs";
6
- import { z as planMetroReach } from "./settings-kO2ZqIKy.mjs";
6
+ import { z as planMetroReach } from "./settings-CGHTt5vb.mjs";
7
7
  import { t as withWorkspaceProcessLock } from "./workspace-process-lock-Bz19_R9R.mjs";
8
8
  import { T as readMetroRecords, a as LAUNCH_ERROR, b as isBundleProof, p as devClientDeepLink, r as INSTALL_ERROR } from "./app-install--PAocWvq.mjs";
9
9
  import { S as sanitizeDeviceLabel } from "./ios-Deh5js5V.mjs";
@@ -1,9 +1,9 @@
1
1
  import { z as validateDeviceSlot } from "./config-DMP7L7H6.mjs";
2
2
  import { a as findProjectRoot } from "./project-B_SDt4ip.mjs";
3
3
  import { r as clockTime } from "./command-output-BuIb_ZOI.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-DJWiTBkz.mjs";
5
- import { f as takeLease, l as releaseWorkspaceLeases, n as fileLeaseIo, o as parseLeaseDuration } from "./device-lease-r7yEQ1R8.mjs";
6
- import { d as waitForDevice, s as parseDeviceWait, t as selectFromPool } from "./device-pool-DU4FQKp5.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-BkYmndPp.mjs";
5
+ import { f as takeLease, l as releaseWorkspaceLeases, n as fileLeaseIo, o as parseLeaseDuration } from "./device-lease-DBW-IL4p.mjs";
6
+ import { d as waitForDevice, s as parseDeviceWait, t as selectFromPool } from "./device-pool-C0s_83Og.mjs";
7
7
  import { c as listIosDevices, o as iosPoolCandidates, s as iosPoolNoCandidatesRefusal, u as resolveIosPhysicalDevice } from "./ios-device-DJOi9FR5.mjs";
8
8
  import chalk from "chalk";
9
9
  //#region src/commands/device.ts
@@ -4,14 +4,14 @@ import { l as sharedBuildCache, m as workspaceDerivedData } from "./workspace-st
4
4
  import { C as filesystemDevice, E as temporaryRoot, a as dirtyFingerprintFiles, d as listWorktrees, f as locallyKnownUpstream, g as repoRoot, s as gitCommonDir, v as resolveSourceCheckout, w as makeTemporaryDirectory } from "./worktree-DJnBbQZ9.mjs";
5
5
  import { a as findProjectRoot, i as detectIsExpo, t as appProjectProblem } from "./project-B_SDt4ip.mjs";
6
6
  import { d as quotedPath, l as phaseLine, u as plural } from "./command-output-BuIb_ZOI.mjs";
7
- import { B as listBuildLocks, Z as fingerprintProject, q as diffFingerprintSources, y as listAdbDevices } from "./android-DJWiTBkz.mjs";
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-kO2ZqIKy.mjs";
9
- import { S as resolveEasCliBin, a as POOL_SETTING_REMEDY, b as ownerFromConfig, h as checkEasAuth$1, l as parkedMaxSetting, x as providerFromConfig } from "./teardown-CAVcWeRD.mjs";
7
+ import { B as listBuildLocks, Z as fingerprintProject, q as diffFingerprintSources, y as listAdbDevices } from "./android-BkYmndPp.mjs";
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-CGHTt5vb.mjs";
9
+ import { S as resolveEasCliBin, a as POOL_SETTING_REMEDY, b as ownerFromConfig, h as checkEasAuth$1, l as parkedMaxSetting, x as providerFromConfig } from "./teardown-sm1FwF6V.mjs";
10
10
  import { E as readHostMemoryPressure, T as hostMemoryPressureAdvice, u as listAllIosSims } from "./ios-Deh5js5V.mjs";
11
11
  import { n as listBuildSlots } from "./build-slots-CuPszJDu.mjs";
12
- import { a as liveOwnedDeviceCount, d as simslimIsOnPath } from "./device-DvKJ454A.mjs";
13
- import { d as projectCmakeLauncher, i as apkOutputsDir, r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-CSS8gjR7.mjs";
14
- import { h as podInstallCommand, i as ccacheEnabled, o as detectXcodeMajor } from "./xcode-BqDeRkpT.mjs";
12
+ import { a as liveOwnedDeviceCount, d as simslimIsOnPath } from "./device-XY_5eGdN.mjs";
13
+ import { d as projectCmakeLauncher, i as apkOutputsDir, r as resolveAndroidCompilerCache, t as readAndroidCasToolchain } from "./android-cas-CrzI_Zha.mjs";
14
+ import { h as podInstallCommand, i as ccacheEnabled, o as detectXcodeMajor } from "./xcode-DUF7jrXj.mjs";
15
15
  import { i as inspectStimVersions, n as recordDoctorRun, r as compareStimVersions } from "./guide-status-BF6RsJJp.mjs";
16
16
  import { n as hasInstalledDependencies, r as installedNpmTreeIsValid, t as dependencyState } from "./dependency-state-CTL8A9p3.mjs";
17
17
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, rmSync } from "node:fs";
@@ -6,8 +6,8 @@ import { n as deviceConsoleLevel } from "./ios-device-D3pzTKQE.mjs";
6
6
  import { i as resolveProjectMetro } from "./metro-ato6ef3J.mjs";
7
7
  import { n as parseLogcatLine, t as androidClockOffset } from "./android-BW8i_YxU.mjs";
8
8
  import { _ as launchErrorPreview } from "./command-output-BuIb_ZOI.mjs";
9
- import { n as androidHome } from "./android-DJWiTBkz.mjs";
10
- import { a as parseLease, n as fileLeaseIo, t as deviceLeasePath } from "./device-lease-r7yEQ1R8.mjs";
9
+ import { n as androidHome } from "./android-BkYmndPp.mjs";
10
+ import { a as parseLease, n as fileLeaseIo, t as deviceLeasePath } from "./device-lease-DBW-IL4p.mjs";
11
11
  import { l as readLogRecords, t as attachExpoErrorContext } from "./logs-query-Cdp5aaCH.mjs";
12
12
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
13
13
  import { createHash, randomUUID } from "node:crypto";
@@ -5,14 +5,14 @@ import { h as workspaceDir, y as workspaceStateFile } from "./workspace-state-WV
5
5
  import { g as repoRoot, s as gitCommonDir } from "./worktree-DJnBbQZ9.mjs";
6
6
  import { a as findProjectRoot, i as detectIsExpo } from "./project-B_SDt4ip.mjs";
7
7
  import { m as shortUdid, o as formatLongDuration, u as plural } from "./command-output-BuIb_ZOI.mjs";
8
- import { B as listBuildLocks, S as listOrphanedAvdDirectories, T as ownedAvdDirectory, b as listAvds } from "./android-DJWiTBkz.mjs";
9
- import { A as resolveSettings, N as settingShapeErrors, a as SETTING_SHAPE_REMEDY } from "./settings-kO2ZqIKy.mjs";
10
- import { S as resolveEasCliBin, a as POOL_SETTING_REMEDY, i as teardownParkedIosSim, l as parkedMaxSetting, n as teardownOwnedIosSim, r as teardownParkedAvd, s as dropParked, t as teardownOwnedAvd, u as readParked } from "./teardown-CAVcWeRD.mjs";
8
+ import { B as listBuildLocks, S as listOrphanedAvdDirectories, T as ownedAvdDirectory, b as listAvds } from "./android-BkYmndPp.mjs";
9
+ import { A as resolveSettings, N as settingShapeErrors, a as SETTING_SHAPE_REMEDY } from "./settings-CGHTt5vb.mjs";
10
+ import { S as resolveEasCliBin, a as POOL_SETTING_REMEDY, i as teardownParkedIosSim, l as parkedMaxSetting, n as teardownOwnedIosSim, r as teardownParkedAvd, s as dropParked, t as teardownOwnedAvd, u as readParked } from "./teardown-sm1FwF6V.mjs";
11
11
  import { d as listIosDeviceTypes, g as parseRuntimeVersion, u as listAllIosSims } from "./ios-Deh5js5V.mjs";
12
- import { i as listLeaseFiles, r as leaseIsExpired, u as removeExpiredLease } from "./device-lease-r7yEQ1R8.mjs";
12
+ import { i as listLeaseFiles, r as leaseIsExpired, u as removeExpiredLease } from "./device-lease-DBW-IL4p.mjs";
13
13
  import { n as listBuildSlots } from "./build-slots-CuPszJDu.mjs";
14
- 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-BTUqbl0i.mjs";
15
- import { n as reclaimProject, t as describeDereferenced } from "./reclaim-C_rB25f4.mjs";
14
+ 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-D9wN3CdE.mjs";
15
+ import { n as reclaimProject, t as describeDereferenced } from "./reclaim-WXTbXPX4.mjs";
16
16
  import { InvalidArgumentError } from "commander";
17
17
  import { existsSync, readFileSync, readdirSync, realpathSync, rmSync, statSync } from "fs";
18
18
  import { homedir, tmpdir } from "os";
@@ -1,5 +1,5 @@
1
1
  import { a as findProjectRoot } from "./project-B_SDt4ip.mjs";
2
- import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-kO2ZqIKy.mjs";
2
+ import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-CGHTt5vb.mjs";
3
3
  import { t as guideStatus } from "./guide-status-BF6RsJJp.mjs";
4
4
  import chalk from "chalk";
5
5
  //#endregion
@@ -3077,8 +3077,13 @@ with machine or project optimization settings; see \`guide settings\`:
3077
3077
  ios xcodebuild carries COMPILATION_CACHE_ENABLE_CACHING, a shared
3078
3078
  COMPILATION_CACHE_CAS_PATH and a clang prefix mapping of this
3079
3079
  workspace's root, so compiled output crosses worktrees with no
3080
- Podfile post_install block. Xcode 26+ only, and skipped entirely
3081
- when the project configured ccache (the two defeat each other).
3080
+ Podfile post_install block. Swift joins in, with its own prefix
3081
+ mapping, once xcrun swift reports 6.4 or newer (Xcode 27) and
3082
+ react-native is 0.87 or newer; the cache line names Swift on or
3083
+ off and why. Xcode still excludes Swift targets built without
3084
+ explicit modules; the post-build cache line counts those.
3085
+ Xcode 26+ only, and skipped entirely when the project
3086
+ configured ccache (the two defeat each other).
3082
3087
  android gradlew carries --build-cache, so task outputs cross worktrees with
3083
3088
  no org.gradle.caching=true in gradle.properties. Debug builds also
3084
3089
  carry -PreactNativeArchitectures=<target ABI>, using the owned
@@ -4542,9 +4547,10 @@ be setup steps are supplied by Stim on the command lines it composes itself:
4542
4547
 
4543
4548
  xcodebuild COMPILATION_CACHE_ENABLE_CACHING / COMPILATION_CACHE_CAS_PATH /
4544
4549
  SWIFT_ENABLE_COMPILE_CACHE / CLANG_ENABLE_PREFIX_MAPPING /
4545
- CLANG_OTHER_PREFIX_MAPPINGS -- so no Podfile post_install block
4546
- (Xcode 26+ only, and skipped when the project configured ccache,
4547
- which defeats it)
4550
+ CLANG_OTHER_PREFIX_MAPPINGS, plus SWIFT_ENABLE_PREFIX_MAPPING /
4551
+ SWIFT_OTHER_PREFIX_MAPPINGS on a Swift 6.4+ toolchain -- so no
4552
+ Podfile post_install block (Xcode 26+ only, and skipped when the
4553
+ project configured ccache, which defeats it)
4548
4554
  gradlew --build-cache -- so no org.gradle.caching=true in a committed
4549
4555
  gradle.properties. Debug builds add
4550
4556
  -PreactNativeArchitectures=<target ABI> when the owned
@@ -4582,7 +4588,6 @@ key inherits the next layer. Changes apply on the next build or Metro restart.
4582
4588
  "metroWarmup": true,
4583
4589
  "ios": {
4584
4590
  "compilationCache": true,
4585
- "swiftCompilationCache": false,
4586
4591
  "prefixMapping": true
4587
4592
  },
4588
4593
  "android": {
@@ -4619,7 +4624,18 @@ The example shows the defaults. Full setting names and behavior:
4619
4624
  optimizations.ios.compilationCache
4620
4625
  controls Xcode compilation caching (Xcode 26+).
4621
4626
  optimizations.ios.swiftCompilationCache
4622
- opts into experimental Swift caching, requiring compilationCache=true.
4627
+ unset by default: Swift caching turns on, with Swift prefix mapping, when
4628
+ xcrun swift reports Swift 6.4 or newer (Xcode 27), where swift-frontend no
4629
+ longer crashes on prefix-mapped batches, and the project's react-native is
4630
+ 0.87 or newer. Older toolchains leave it off. React Native before 0.87
4631
+ sets SWIFT_ENABLE_EXPLICIT_MODULES=NO on every target for its prebuilt
4632
+ core, and Xcode refuses Swift caching without explicit modules, so those
4633
+ projects stay off too; the cache line names which gate applied.
4634
+ true forces it on any toolchain and React Native version, unmapped below
4635
+ Swift 6.4, so entries only hit within one checkout. false keeps it off.
4636
+ Requires compilationCache=true. A project that still disables explicit
4637
+ modules itself sees the excluded target count on the post-build cache
4638
+ line. Stim does not override that project setting.
4623
4639
  optimizations.ios.prefixMapping
4624
4640
  controls Clang source/DerivedData prefix mapping. false clears Stim's
4625
4641
  mappings. The existing Xcode version and project-ccache guards still apply.
@@ -8,24 +8,24 @@ import { n as MODE_EXPO, p as writeWorkspaceLaunch, t as MODE_BARE } from "./sta
8
8
  import { i as resolveProjectMetro, r as pidExists } from "./metro-ato6ef3J.mjs";
9
9
  import { n as verifyCollectorOwnership } from "./ownership-CD_XnpDu.mjs";
10
10
  import { _ as launchErrorPreview, c as launchErrorReport, g as stepTimer, h as stepClock, i as formatDuration, l as phaseLine, m as shortUdid, n as appReadinessMessage, p as shortHash } from "./command-output-BuIb_ZOI.mjs";
11
- import { $ as providerDownloadPath, G as buildCacheKey, J as filesystemBuildCapability, K as describeFingerprintMiss, 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, at as untrackedMissLine, et as providerUploadOutcome, nt as resolveBuild, ot as untrackedNativeFiles, rt as storeBuild, tt as refingerprintAfterMutation, z as acquireBuildLock } from "./android-DJWiTBkz.mjs";
12
- import { A as resolveSettings, B as artifactCachePolicy, D as remoteDeviceSettingError, F as tunnelModeSetting, H as optimizationBuildProfile, I as unknownSettingKeys, N as settingShapeErrors, O as remoteIosSetting, R as detectProviders, T as publicUrlSetting, U as resolveOptimizations, _ as iosSigningIdentitySha1SettingError, a as SETTING_SHAPE_REMEDY, d as cacheProviderSettingError, f as iosLanHostSetting, g as iosSigningIdentitySha1Setting, h as iosSigningIdentitySettingError, k as resolveCacheProviderConfig, m as iosSigningIdentitySetting, p as iosLanHostSettingError, r as REMOTE_DEVICE_BACKENDS, x as metroWarmupUrlSetting } from "./settings-kO2ZqIKy.mjs";
13
- import { C as resolveRemote, S as resolveEasCliBin, _ as exitAfterFlush, a as POOL_SETTING_REMEDY, f as RESOLVE_TIMEOUT_MS, g as easAuthNote, h as checkEasAuth, l as parkedMaxSetting, m as cacheLevel, p as UPLOAD_TIMEOUT_MS, v as isEasAuthFailureText, w as uploadRemote, y as loadProjectProvider } from "./teardown-CAVcWeRD.mjs";
14
- import { _ as easDeviceBuildRemedy, a as swapJsBundle, c as ensureWorkspaceStorageSafely, d as launchOutcomeRecord, f as noMetroMessage, g as warmMetro, h as sleep, l as gateShouldRetry, m as resolveMetroWithRetry, n as pickDevClientScheme, o as needsPrebuild, p as noMetroRemedy, r as schemesFromInfoPlist, s as runPrebuild, t as devClientScheme, u as isPhysicalDeviceRequest, v as isEasBuildFailure, y as resolveEasDevelopmentBuild } from "./dev-client-BoifdqkU.mjs";
11
+ import { $ as providerDownloadPath, G as buildCacheKey, J as filesystemBuildCapability, K as describeFingerprintMiss, 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, at as untrackedMissLine, et as providerUploadOutcome, nt as resolveBuild, ot as untrackedNativeFiles, rt as storeBuild, tt as refingerprintAfterMutation, z as acquireBuildLock } from "./android-BkYmndPp.mjs";
12
+ import { A as resolveSettings, B as artifactCachePolicy, D as remoteDeviceSettingError, F as tunnelModeSetting, H as optimizationBuildProfile, I as unknownSettingKeys, N as settingShapeErrors, O as remoteIosSetting, R as detectProviders, T as publicUrlSetting, U as resolveOptimizations, _ as iosSigningIdentitySha1SettingError, a as SETTING_SHAPE_REMEDY, d as cacheProviderSettingError, f as iosLanHostSetting, g as iosSigningIdentitySha1Setting, h as iosSigningIdentitySettingError, k as resolveCacheProviderConfig, m as iosSigningIdentitySetting, p as iosLanHostSettingError, r as REMOTE_DEVICE_BACKENDS, x as metroWarmupUrlSetting } from "./settings-CGHTt5vb.mjs";
13
+ import { C as resolveRemote, S as resolveEasCliBin, _ as exitAfterFlush, a as POOL_SETTING_REMEDY, f as RESOLVE_TIMEOUT_MS, g as easAuthNote, h as checkEasAuth, l as parkedMaxSetting, m as cacheLevel, p as UPLOAD_TIMEOUT_MS, v as isEasAuthFailureText, w as uploadRemote, y as loadProjectProvider } from "./teardown-sm1FwF6V.mjs";
14
+ import { _ as easDeviceBuildRemedy, a as swapJsBundle, c as ensureWorkspaceStorageSafely, d as launchOutcomeRecord, f as noMetroMessage, g as warmMetro, h as sleep, l as gateShouldRetry, m as resolveMetroWithRetry, n as pickDevClientScheme, o as needsPrebuild, p as noMetroRemedy, r as schemesFromInfoPlist, s as runPrebuild, t as devClientScheme, u as isPhysicalDeviceRequest, v as isEasBuildFailure, y as resolveEasDevelopmentBuild } from "./dev-client-BaTXAAnC.mjs";
15
15
  import { t as withWorkspaceProcessLock } from "./workspace-process-lock-Bz19_R9R.mjs";
16
16
  import { C as launchIosApp, E as unverifiedLaunchLines, O as verifyLaunch, T as readMetroRecords, b as isBundleProof, c as RELEASE_VERIFY_WAIT_MS, f as clearOtherUserApps, i as LAUNCH_BUNDLING, k as verifyReleaseLaunch, m as devClientUrl, n as DEFAULT_METRO_PORT, o as LAUNCH_FATAL, s as LAUNCH_UNVERIFIED, v as installIosApp, w as readCollectorRecords, y as iosAppProcess } from "./app-install--PAocWvq.mjs";
17
17
  import { f as listIosRuntimes } from "./ios-Deh5js5V.mjs";
18
- 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-DU4FQKp5.mjs";
18
+ 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-C0s_83Og.mjs";
19
19
  import { r as releaseBuildSlot, t as acquireBuildSlot } from "./build-slots-CuPszJDu.mjs";
20
20
  import { a as statsProjectKey, i as recordRunStats, n as readRunEstimates, t as createRunRecorder } from "./stats-Fo9ACIv7.mjs";
21
- import { c as unknownIosRuntimeRefusal, i as ensureOwnedDevice, n as clearIosAdoptionPending, r as ensureBooted, s as unknownIosDeviceTypeRefusal, t as checkDeviceCapacity } from "./device-DvKJ454A.mjs";
22
- import { a as ensureMetroReachable, b as ownedSessionName, c as remoteIosDeps, l as resolveRemoteContext, n as binOnPath, o as ensureRemoteBootOwned, r as bundleEntryPoint, w as gateMetroOrigin } from "./device-remote-BTUqbl0i.mjs";
23
- import { a as compilationCacheActivityLine, c as readBundleExecutable, l as readBundleId, p as describeDiagnostic, r as buildIos, s as discoverXcodeProject, t as COMPILATION_CACHE_NOT_RUN, u as resolveScheme } from "./xcode-BqDeRkpT.mjs";
24
- import { n as nativeRunCommand, t as launchSlotScope } from "./slot-launch-BpHiHH6A.mjs";
21
+ import { c as unknownIosRuntimeRefusal, i as ensureOwnedDevice, n as clearIosAdoptionPending, r as ensureBooted, s as unknownIosDeviceTypeRefusal, t as checkDeviceCapacity } from "./device-XY_5eGdN.mjs";
22
+ import { a as ensureMetroReachable, b as ownedSessionName, c as remoteIosDeps, l as resolveRemoteContext, n as binOnPath, o as ensureRemoteBootOwned, r as bundleEntryPoint, w as gateMetroOrigin } from "./device-remote-D9wN3CdE.mjs";
23
+ import { a as compilationCacheActivityLine, c as readBundleExecutable, l as readBundleId, p as describeDiagnostic, r as buildIos, s as discoverXcodeProject, t as COMPILATION_CACHE_NOT_RUN, u as resolveScheme } from "./xcode-DUF7jrXj.mjs";
24
+ import { n as nativeRunCommand, t as launchSlotScope } from "./slot-launch-BYjnljAs.mjs";
25
25
  import { t as spawnEntry } from "./spawn-entry-nCE6m770.mjs";
26
- import { a as printNativeCrashReport, n as IOS_CRASH_REPORT_RETRY, o as simulatorConsolePaths, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-CTePWAzW.mjs";
26
+ import { a as printNativeCrashReport, n as IOS_CRASH_REPORT_RETRY, o as simulatorConsolePaths, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-B5STzxqN.mjs";
27
27
  import { a as iosDeviceProcess, c as listIosDevices, d as verifyIosDeviceReleaseLaunch, i as installIosDeviceApp, l as localNetworkPending, n as LAUNCH_PROBE_TIMEOUT_MS, o as iosPoolCandidates, r as awaitIosDeviceLaunch, s as iosPoolNoCandidatesRefusal, t as DEVICECTL_INSTALL_TIMEOUT_MS, u as resolveIosPhysicalDevice } from "./ios-device-DJOi9FR5.mjs";
28
- import { a as runPodInstall, n as podsAreStale, r as readPodState } from "./deps-BAGOnrc7.mjs";
28
+ import { a as runPodInstall, n as podsAreStale, r as readPodState } from "./deps-C1zGnr61.mjs";
29
29
  import { existsSync, mkdirSync, mkdtempSync, openSync, rmSync, writeFileSync } from "node:fs";
30
30
  import { InvalidArgumentError } from "commander";
31
31
  import { X509Certificate } from "node:crypto";
@@ -3,7 +3,7 @@ import { n as SOURCES, t as LEVELS } from "./ndjson-BZwI1NBv.mjs";
3
3
  import { _ as workspaceLogsDir, r as readWorkspaceState } from "./workspace-state-WVwWw_hB.mjs";
4
4
  import { a as findProjectRoot } from "./project-B_SDt4ip.mjs";
5
5
  import { _ as launchErrorPreview } from "./command-output-BuIb_ZOI.mjs";
6
- import { i as captureWorkspaceCrashes, t as errorDiagnostics } from "./error-diagnostics-CTePWAzW.mjs";
6
+ import { i as captureWorkspaceCrashes, t as errorDiagnostics } from "./error-diagnostics-B5STzxqN.mjs";
7
7
  import { a as followLogs, c as queryLogs, i as fileSizes, n as buildCriteria, o as logFiles, r as compileGrep, s as parseSince } from "./logs-query-Cdp5aaCH.mjs";
8
8
  import { realpathSync } from "node:fs";
9
9
  import { relative, sep } from "node:path";
@@ -3,9 +3,9 @@ import { h as workspaceDir, r as readWorkspaceState } from "./workspace-state-WV
3
3
  import { a as clearRemoteSession, i as clearManagedMetroTunnel, s as readMetroTunnel, u as readRemoteSessionId } from "./state-CnWzvCWP.mjs";
4
4
  import { i as resolveProjectMetro, n as killMetroTree, r as pidExists } from "./metro-ato6ef3J.mjs";
5
5
  import { n as verifyCollectorOwnership } from "./ownership-CD_XnpDu.mjs";
6
- import { S as resolveEasCliBin, l as parkedMaxSetting, n as teardownOwnedIosSim, t as teardownOwnedAvd } from "./teardown-CAVcWeRD.mjs";
7
- import { l as releaseWorkspaceLeases } from "./device-lease-r7yEQ1R8.mjs";
8
- import { i as endRecordedSession } from "./device-remote-BTUqbl0i.mjs";
6
+ import { S as resolveEasCliBin, l as parkedMaxSetting, n as teardownOwnedIosSim, t as teardownOwnedAvd } from "./teardown-sm1FwF6V.mjs";
7
+ import { l as releaseWorkspaceLeases } from "./device-lease-DBW-IL4p.mjs";
8
+ import { i as endRecordedSession } from "./device-remote-D9wN3CdE.mjs";
9
9
  import { t as clearNamedPorts } from "./named-ports-DH9SXd0f.mjs";
10
10
  import { r as stopTunnel, t as resolveSupervisorTarget } from "./ownership-CVY9cqCr.mjs";
11
11
  import { existsSync, rmSync } from "node:fs";
@@ -3,10 +3,10 @@ import { a as findProjectRoot } from "./project-B_SDt4ip.mjs";
3
3
  import { d as readWorkspaceLaunches } from "./state-CnWzvCWP.mjs";
4
4
  import { i as resolveProjectMetro } from "./metro-ato6ef3J.mjs";
5
5
  import { l as phaseLine } from "./command-output-BuIb_ZOI.mjs";
6
- import { N as resolveOwnedAvdSerial } from "./android-DJWiTBkz.mjs";
6
+ import { N as resolveOwnedAvdSerial } from "./android-BkYmndPp.mjs";
7
7
  import { u as androidAppProcess, y as iosAppProcess } from "./app-install--PAocWvq.mjs";
8
8
  import { x as resolveOwnedIosSim } from "./ios-Deh5js5V.mjs";
9
- import { n as nativeRunCommand } from "./slot-launch-BpHiHH6A.mjs";
9
+ import { n as nativeRunCommand } from "./slot-launch-BYjnljAs.mjs";
10
10
  import chalk from "chalk";
11
11
  import { WebSocket } from "ws";
12
12
  //#region src/engine/reload.ts
@@ -1,6 +1,6 @@
1
1
  import { i as __require, t as __commonJSMin } from "./rolldown-runtime-BsOwBuO_.mjs";
2
2
  import { n as supervisorError } from "./errors-B6W7FkxQ.mjs";
3
- import { C as projectMetroSharedCache } from "./settings-kO2ZqIKy.mjs";
3
+ import { C as projectMetroSharedCache } from "./settings-CGHTt5vb.mjs";
4
4
  import { a as metroStoreRoot, o as registerMetroStore, t as appendCacheStore } from "./metro-store-CDDZHtPl.mjs";
5
5
  import { createRequire } from "node:module";
6
6
  import { isAbsolute, join, relative, sep } from "node:path";
@@ -3,7 +3,7 @@ import { r as createNdjsonWriter } from "./ndjson-BZwI1NBv.mjs";
3
3
  import { l as resolvePackageJson } from "./project-B_SDt4ip.mjs";
4
4
  import { n as supervisorError } from "./errors-B6W7FkxQ.mjs";
5
5
  import { n as stripAnsi, t as createLineReader } from "./process-output-C7IlIzd7.mjs";
6
- import { C as projectMetroSharedCache } from "./settings-kO2ZqIKy.mjs";
6
+ import { C as projectMetroSharedCache } from "./settings-CGHTt5vb.mjs";
7
7
  import { a as metroStoreRoot, i as metroStoreConfirmedRoot, n as expoMetroConfigPath, o as registerMetroStore, r as expoMetroStoreEnv } from "./metro-store-CDDZHtPl.mjs";
8
8
  import { accessSync, constants, existsSync, readFileSync } from "node:fs";
9
9
  import { dirname, join, parse } from "node:path";
@@ -0,0 +1,2 @@
1
+ import { p as startExpoServer } from "./server-expo-CX-zkgWl.mjs";
2
+ export { startExpoServer };
@@ -29,7 +29,10 @@ function compilerCacheFallbackMessage({ fallback, compilerCache, file = null })
29
29
  return `${fallback.key}${origin ? ` in ${origin}` : ""} ${fallback.reason}. ${backend}`;
30
30
  }
31
31
  function optimizationBuildProfile(platform, options) {
32
- const selected = platform === "ios" ? options.ios : { pch: options.android.pch };
32
+ const selected = platform === "ios" ? {
33
+ ...options.ios,
34
+ swiftCompilationCache: options.ios.swiftCompilationCache ?? false
35
+ } : { pch: options.android.pch };
33
36
  const defaults = platform === "ios" ? {
34
37
  compilationCache: true,
35
38
  swiftCompilationCache: false,
@@ -82,7 +85,7 @@ function resolveOptimizations(settings = {}, env = process.env) {
82
85
  metroWarmup: optimizationBoolean(settings, "metroWarmup"),
83
86
  ios: {
84
87
  compilationCache: optimizationBoolean(settings, "ios.compilationCache"),
85
- swiftCompilationCache: optimizationBoolean(settings, "ios.swiftCompilationCache", false),
88
+ swiftCompilationCache: optimizationValue(settings, "ios.swiftCompilationCache") === void 0 ? null : optimizationBoolean(settings, "ios.swiftCompilationCache"),
86
89
  prefixMapping: optimizationBoolean(settings, "ios.prefixMapping")
87
90
  },
88
91
  android: {
@@ -1,7 +1,7 @@
1
1
  import { f as getProject } from "./config-DMP7L7H6.mjs";
2
2
  import { r as readWorkspaceState } from "./workspace-state-WVwWw_hB.mjs";
3
3
  import { h as deviceShellArg } from "./app-install--PAocWvq.mjs";
4
- import { n as fileLeaseIo } from "./device-lease-r7yEQ1R8.mjs";
4
+ import { n as fileLeaseIo } from "./device-lease-DBW-IL4p.mjs";
5
5
  //#region src/engine/slot-launch.ts
6
6
  function launchSlotScope(root, slot = "default") {
7
7
  if (slot !== "default") return slot;
@@ -8,7 +8,7 @@ import { i as clearManagedMetroTunnel, o as clearWorkspaceSupervisor, s as readM
8
8
  import { r as reserveMetroPort } from "./ports-BZprTJRa.mjs";
9
9
  import { i as resolveProjectMetro, n as killMetroTree, r as pidExists } from "./metro-ato6ef3J.mjs";
10
10
  import { g as stepTimer, l as phaseLine } from "./command-output-BuIb_ZOI.mjs";
11
- import { A as resolveSettings, D as remoteDeviceSettingError, E as remoteAndroidSetting, F as tunnelModeSetting, I as unknownSettingKeys, L as PUBLIC_METRO_ENV, N as settingShapeErrors, O as remoteIosSetting, R as detectProviders, S as ngrokUrlSetting, T as publicUrlSetting, a as SETTING_SHAPE_REMEDY, b as metroTunnelSettingError, d as cacheProviderSettingError, k as resolveCacheProviderConfig, z as planMetroReach } from "./settings-kO2ZqIKy.mjs";
11
+ import { A as resolveSettings, D as remoteDeviceSettingError, E as remoteAndroidSetting, F as tunnelModeSetting, I as unknownSettingKeys, L as PUBLIC_METRO_ENV, N as settingShapeErrors, O as remoteIosSetting, R as detectProviders, S as ngrokUrlSetting, T as publicUrlSetting, a as SETTING_SHAPE_REMEDY, b as metroTunnelSettingError, d as cacheProviderSettingError, k as resolveCacheProviderConfig, z as planMetroReach } from "./settings-CGHTt5vb.mjs";
12
12
  import { n as workspaceProcessLockError, t as withWorkspaceProcessLock } from "./workspace-process-lock-Bz19_R9R.mjs";
13
13
  import { t as spawnEntry } from "./spawn-entry-nCE6m770.mjs";
14
14
  import { c as queryLogs } from "./logs-query-Cdp5aaCH.mjs";
@@ -6,13 +6,13 @@ import { a as findProjectRoot, c as projectShortcut } from "./project-B_SDt4ip.m
6
6
  import { t as isMetroRunning } from "./ports-BZprTJRa.mjs";
7
7
  import { i as resolveProjectMetro } from "./metro-ato6ef3J.mjs";
8
8
  import { a as formatElapsed, r as clockTime, u as plural } from "./command-output-BuIb_ZOI.mjs";
9
- import { N as resolveOwnedAvdSerial } from "./android-DJWiTBkz.mjs";
10
- import { a as POOL_SETTING_REMEDY, l as parkedMaxSetting, u as readParked } from "./teardown-CAVcWeRD.mjs";
9
+ import { N as resolveOwnedAvdSerial } from "./android-BkYmndPp.mjs";
10
+ import { a as POOL_SETTING_REMEDY, l as parkedMaxSetting, u as readParked } from "./teardown-sm1FwF6V.mjs";
11
11
  import { u as listAllIosSims } from "./ios-Deh5js5V.mjs";
12
- import { i as listLeaseFiles } from "./device-lease-r7yEQ1R8.mjs";
12
+ import { i as listLeaseFiles } from "./device-lease-DBW-IL4p.mjs";
13
13
  import { c as queryLogs } from "./logs-query-Cdp5aaCH.mjs";
14
14
  import { t as resolveSupervisorTarget } from "./ownership-CVY9cqCr.mjs";
15
- import { i as readSupervisorState } from "./stop-0jJNahwN.mjs";
15
+ import { i as readSupervisorState } from "./stop-DsdOx9Hj.mjs";
16
16
  import { existsSync } from "fs";
17
17
  import { totalmem } from "os";
18
18
  import chalk from "chalk";
@@ -1,3 +1,3 @@
1
1
  import { t as resolveSupervisorTarget } from "./ownership-CVY9cqCr.mjs";
2
- import { a as resolveCollectorTargets, i as readSupervisorState, n as clearSupervisorState, o as runStop, r as readCollectorState, s as stopCommand, t as clearCollectorState } from "./stop-0jJNahwN.mjs";
2
+ import { a as resolveCollectorTargets, i as readSupervisorState, n as clearSupervisorState, o as runStop, r as readCollectorState, s as stopCommand, t as clearCollectorState } from "./stop-DsdOx9Hj.mjs";
3
3
  export { clearCollectorState, clearSupervisorState, stopCommand as default, readCollectorState, readSupervisorState, resolveCollectorTargets, resolveSupervisorTarget, runStop };
@@ -5,10 +5,10 @@ import { a as clearRemoteSession, i as clearManagedMetroTunnel, l as readRemoteS
5
5
  import { i as resolveProjectMetro, n as killMetroTree, r as pidExists } from "./metro-ato6ef3J.mjs";
6
6
  import { n as verifyCollectorOwnership } from "./ownership-CD_XnpDu.mjs";
7
7
  import { f as releasedLeaseFact, l as phaseLine, u as plural } from "./command-output-BuIb_ZOI.mjs";
8
- import { S as resolveEasCliBin, n as teardownOwnedIosSim, t as teardownOwnedAvd } from "./teardown-CAVcWeRD.mjs";
8
+ import { S as resolveEasCliBin, n as teardownOwnedIosSim, t as teardownOwnedAvd } from "./teardown-sm1FwF6V.mjs";
9
9
  import { t as withWorkspaceProcessLock } from "./workspace-process-lock-Bz19_R9R.mjs";
10
- import { l as releaseWorkspaceLeases } from "./device-lease-r7yEQ1R8.mjs";
11
- import { i as endRecordedSession } from "./device-remote-BTUqbl0i.mjs";
10
+ import { l as releaseWorkspaceLeases } from "./device-lease-DBW-IL4p.mjs";
11
+ import { i as endRecordedSession } from "./device-remote-D9wN3CdE.mjs";
12
12
  import { r as stopTunnel, t as resolveSupervisorTarget } from "./ownership-CVY9cqCr.mjs";
13
13
  import chalk from "chalk";
14
14
  //#region src/commands/stop.ts
@@ -104,7 +104,7 @@ async function runSupervisor({ root, port, tunnel = false, resetCache = false, i
104
104
  };
105
105
  let server;
106
106
  try {
107
- server = await (mode === "expo-child" ? startExpo || (await import("./server-expo-CSwUVYOa.mjs")).startExpoServer : startBare || (await import("./server-bare-H3pAhbMs.mjs")).startBareServer)({
107
+ server = await (mode === "expo-child" ? startExpo || (await import("./server-expo-CjeTJ273.mjs")).startExpoServer : startBare || (await import("./server-bare-CCLb90FS.mjs")).startBareServer)({
108
108
  root,
109
109
  port,
110
110
  logsDir,
@@ -5,8 +5,8 @@ import { _ as workspaceLogsDir } from "./workspace-state-WVwWw_hB.mjs";
5
5
  import { l as resolvePackageJson } from "./project-B_SDt4ip.mjs";
6
6
  import { n as stripAnsi } from "./process-output-C7IlIzd7.mjs";
7
7
  import { l as phaseLine } from "./command-output-BuIb_ZOI.mjs";
8
- import { E as ownedAvdMatchesConfiguration, F as shutdownAndroidEmulator, I as waitForAndroidEmulatorShutdown, N as resolveOwnedAvdSerial, O as ownedAvdSystemImage, S as listOrphanedAvdDirectories, T as ownedAvdDirectory, l as avdStorageRoots, o as assertOwnedAvdStopped, p as deleteAvd, s as avdPathExists } from "./android-DJWiTBkz.mjs";
9
- import { n as expoBinFromPackage, r as expoBinPath, s as findBinUpward } from "./server-expo-Ds8_mfng.mjs";
8
+ import { E as ownedAvdMatchesConfiguration, F as shutdownAndroidEmulator, I as waitForAndroidEmulatorShutdown, N as resolveOwnedAvdSerial, O as ownedAvdSystemImage, S as listOrphanedAvdDirectories, T as ownedAvdDirectory, l as avdStorageRoots, o as assertOwnedAvdStopped, p as deleteAvd, s as avdPathExists } from "./android-BkYmndPp.mjs";
9
+ import { n as expoBinFromPackage, r as expoBinPath, s as findBinUpward } from "./server-expo-CX-zkgWl.mjs";
10
10
  import { C as shutdownIosSim, _ as renameIosSim, a as deleteIosSim, d as listIosDeviceTypes, g as parseRuntimeVersion, h as parkedSimName, o as deleteParkedIosSim, r as clearAppDataContainer, s as findAppDataContainer, x as resolveOwnedIosSim } from "./ios-Deh5js5V.mjs";
11
11
  import { createRequire } from "node:module";
12
12
  import { existsSync, lstatSync, readFileSync, renameSync, rmSync } from "node:fs";
@@ -4,13 +4,13 @@ import { S as warmWorktreePaths, _ as resolveFullRef, b as sourceCheckoutOf, c a
4
4
  import { a as findProjectRoot } from "./project-B_SDt4ip.mjs";
5
5
  import { l as readRemoteSession, s as readMetroTunnel } from "./state-CnWzvCWP.mjs";
6
6
  import { a as formatElapsed, f as releasedLeaseFact, i as formatDuration, l as phaseLine, m as shortUdid, u as plural } from "./command-output-BuIb_ZOI.mjs";
7
- import { A as resolveSettings, I as unknownSettingKeys, N as settingShapeErrors, a as SETTING_SHAPE_REMEDY } from "./settings-kO2ZqIKy.mjs";
8
- import { a as POOL_SETTING_REMEDY, l as parkedMaxSetting } from "./teardown-CAVcWeRD.mjs";
9
- import { h as podInstallCommand, n as HEARTBEAT_INTERVAL_MS } from "./xcode-BqDeRkpT.mjs";
7
+ import { A as resolveSettings, I as unknownSettingKeys, N as settingShapeErrors, a as SETTING_SHAPE_REMEDY } from "./settings-CGHTt5vb.mjs";
8
+ import { a as POOL_SETTING_REMEDY, l as parkedMaxSetting } from "./teardown-sm1FwF6V.mjs";
9
+ import { h as podInstallCommand, n as HEARTBEAT_INTERVAL_MS } from "./xcode-DUF7jrXj.mjs";
10
10
  import { n as hasInstalledDependencies, r as installedNpmTreeIsValid, t as dependencyState } from "./dependency-state-CTL8A9p3.mjs";
11
11
  import { c as withManagedTunnelRemovalLock, o as withManagedRemoteWorktreeRemovalLock } from "./ownership-CVY9cqCr.mjs";
12
- import { n as reclaimProject } from "./reclaim-C_rB25f4.mjs";
13
- import { a as runPodInstall, i as runCaptured, n as podsAreStale, r as readPodState, t as DEPS_ERROR } from "./deps-BAGOnrc7.mjs";
12
+ import { n as reclaimProject } from "./reclaim-WXTbXPX4.mjs";
13
+ import { a as runPodInstall, i as runCaptured, n as podsAreStale, r as readPodState, t as DEPS_ERROR } from "./deps-C1zGnr61.mjs";
14
14
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
15
15
  import { createHash, randomUUID } from "node:crypto";
16
16
  import { join, relative } from "node:path";
@@ -1,10 +1,11 @@
1
1
  import { t as getExecutor } from "./exec-CyylIdq9.mjs";
2
2
  import { r as register } from "./cache-manifest-uoOKhgUD.mjs";
3
3
  import { d as sharedCompilationCache, m as workspaceDerivedData } from "./workspace-state-WVwWw_hB.mjs";
4
+ import { l as resolvePackageJson } from "./project-B_SDt4ip.mjs";
4
5
  import { t as createLineReader } from "./process-output-C7IlIzd7.mjs";
5
6
  import { a as formatElapsed, l as phaseLine } from "./command-output-BuIb_ZOI.mjs";
6
- import { U as resolveOptimizations } from "./settings-kO2ZqIKy.mjs";
7
- import { t as cleanLine } from "./server-expo-Ds8_mfng.mjs";
7
+ import { U as resolveOptimizations } from "./settings-CGHTt5vb.mjs";
8
+ import { t as cleanLine } from "./server-expo-CX-zkgWl.mjs";
8
9
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
9
10
  import { createHash } from "node:crypto";
10
11
  import { basename, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -332,18 +333,73 @@ function readPodfileProperties(root) {
332
333
  return null;
333
334
  }
334
335
  }
335
- function compilationCacheSettings({ workspaceRoot, derivedDataPath, casPath, xcodeMajor, ccache = false, optimizations = resolveOptimizations({}, {}).ios }) {
336
+ const SWIFT_PREFIX_MAPPING_MIN_SWIFT = {
337
+ major: 6,
338
+ minor: 4
339
+ };
340
+ function swiftPrefixMappingSupported(version) {
341
+ if (!version) return false;
342
+ const min = SWIFT_PREFIX_MAPPING_MIN_SWIFT;
343
+ return version.major > min.major || version.major === min.major && version.minor >= min.minor;
344
+ }
345
+ const SWIFT_CACHE_MIN_REACT_NATIVE = {
346
+ major: 0,
347
+ minor: 87
348
+ };
349
+ function reactNativeSupportsSwiftCache(version) {
350
+ if (!version) return false;
351
+ const min = SWIFT_CACHE_MIN_REACT_NATIVE;
352
+ return version.major > min.major || version.major === min.major && version.minor >= min.minor;
353
+ }
354
+ function parseReactNativeVersion(packageJson) {
355
+ if (!packageJson || typeof packageJson !== "object") return null;
356
+ const raw = packageJson.version;
357
+ const m = typeof raw === "string" ? /^(\d+)\.(\d+)\./.exec(raw) : null;
358
+ if (!m || m[1] === void 0 || m[2] === void 0) return null;
359
+ return {
360
+ major: parseInt(m[1], 10),
361
+ minor: parseInt(m[2], 10)
362
+ };
363
+ }
364
+ function detectReactNativeVersion(root) {
365
+ const file = resolvePackageJson(root, "react-native");
366
+ if (!file) return null;
367
+ try {
368
+ return parseReactNativeVersion(JSON.parse(readFileSync(file, "utf-8")));
369
+ } catch {
370
+ return null;
371
+ }
372
+ }
373
+ function compilationCacheSettings({ workspaceRoot, derivedDataPath, casPath, xcodeMajor, swiftVersion = null, reactNativeVersion = null, ccache = false, optimizations = resolveOptimizations({}, {}).ios }) {
336
374
  if (xcodeMajor === null || xcodeMajor === void 0) return [];
337
375
  if (xcodeMajor < 26) return [];
338
376
  if (ccache) return [];
377
+ const swiftMappable = swiftPrefixMappingSupported(swiftVersion);
378
+ const auto = swiftMappable && reactNativeSupportsSwiftCache(reactNativeVersion);
379
+ const swift = optimizations.compilationCache && (optimizations.swiftCompilationCache ?? auto);
380
+ const mappings = optimizations.prefixMapping ? compilationPrefixMappings(workspaceRoot, derivedDataPath) : "";
339
381
  return [
340
382
  `COMPILATION_CACHE_ENABLE_CACHING=${optimizations.compilationCache ? "YES" : "NO"}`,
341
383
  `COMPILATION_CACHE_CAS_PATH=${casPath}`,
342
- `SWIFT_ENABLE_COMPILE_CACHE=${optimizations.compilationCache && optimizations.swiftCompilationCache ? "YES" : "NO"}`,
384
+ `SWIFT_ENABLE_COMPILE_CACHE=${swift ? "YES" : "NO"}`,
343
385
  `CLANG_ENABLE_PREFIX_MAPPING=${optimizations.prefixMapping ? "YES" : "NO"}`,
344
- `CLANG_OTHER_PREFIX_MAPPINGS=${optimizations.prefixMapping ? compilationPrefixMappings(workspaceRoot, derivedDataPath) : ""}`
386
+ `CLANG_OTHER_PREFIX_MAPPINGS=${mappings}`,
387
+ ...swift && swiftMappable && optimizations.prefixMapping ? ["SWIFT_ENABLE_PREFIX_MAPPING=YES", `SWIFT_OTHER_PREFIX_MAPPINGS=${mappings}`] : ["SWIFT_ENABLE_PREFIX_MAPPING=NO"]
345
388
  ];
346
389
  }
390
+ function parseSwiftVersion(output) {
391
+ const m = /\bSwift version (\d+)\.(\d+)/.exec(String(output || ""));
392
+ if (!m || m[1] === void 0 || m[2] === void 0) return null;
393
+ const major = parseInt(m[1], 10);
394
+ const minor = parseInt(m[2], 10);
395
+ return Number.isFinite(major) && Number.isFinite(minor) ? {
396
+ major,
397
+ minor
398
+ } : null;
399
+ }
400
+ function detectSwiftVersion(exec = null) {
401
+ return parseSwiftVersion((exec || getExecutor()).runQuiet("xcrun swift --version", { timeoutMs: 1e4 }));
402
+ }
347
403
  function parseXcodeMajor(output) {
348
404
  const m = /^Xcode\s+(\d+)/m.exec(String(output || ""));
349
405
  if (!m) return null;
@@ -356,12 +412,19 @@ function detectXcodeMajor(exec = null) {
356
412
  return parseXcodeMajor((exec || getExecutor()).runQuiet("xcodebuild -version", { timeoutMs: 1e4 }));
357
413
  }
358
414
  function resolveCompilationCacheSettings({ root, derivedDataPath, exec = null, casPath = sharedCompilationCache(), optimizations = resolveOptimizations({}, {}).ios, onNote = (line) => console.error(line) }) {
415
+ const xcodeMajor = detectXcodeMajor(exec);
416
+ const ccache = ccacheEnabled(readPodfileProperties(root));
417
+ const probe = xcodeMajor !== null && xcodeMajor >= 26 && !ccache && optimizations.compilationCache && optimizations.swiftCompilationCache !== false;
418
+ const swiftVersion = probe ? detectSwiftVersion(exec) : null;
419
+ const reactNativeVersion = probe ? detectReactNativeVersion(root) : null;
359
420
  const settings = compilationCacheSettings({
360
421
  workspaceRoot: root,
361
422
  derivedDataPath,
362
423
  casPath,
363
- xcodeMajor: detectXcodeMajor(exec),
364
- ccache: ccacheEnabled(readPodfileProperties(root)),
424
+ xcodeMajor,
425
+ swiftVersion,
426
+ reactNativeVersion,
427
+ ccache,
365
428
  optimizations
366
429
  });
367
430
  if (settings.length > 0 && optimizations.compilationCache) {
@@ -371,7 +434,8 @@ function resolveCompilationCacheSettings({ root, derivedDataPath, exec = null, c
371
434
  prune: "atomic",
372
435
  note: "shared Xcode compilation cache"
373
436
  });
374
- onNote(chalk.dim(phaseLine("cache", `compilation cache on (CAS at ${casPath})`)));
437
+ const swift = settings.includes("SWIFT_ENABLE_COMPILE_CACHE=YES") ? settings.includes("SWIFT_ENABLE_PREFIX_MAPPING=YES") ? "Swift on" : "Swift on, unmapped" : swiftVersion && !swiftPrefixMappingSupported(swiftVersion) ? `Swift off, ${swiftVersion.major}.${swiftVersion.minor} < ${SWIFT_PREFIX_MAPPING_MIN_SWIFT.major}.${SWIFT_PREFIX_MAPPING_MIN_SWIFT.minor}` : swiftVersion && reactNativeVersion && !reactNativeSupportsSwiftCache(reactNativeVersion) ? `Swift off, react-native ${reactNativeVersion.major}.${reactNativeVersion.minor} < ${SWIFT_CACHE_MIN_REACT_NATIVE.major}.${SWIFT_CACHE_MIN_REACT_NATIVE.minor}` : "Swift off";
438
+ onNote(chalk.dim(phaseLine("cache", `compilation cache on (CAS at ${casPath}, ${swift})`)));
375
439
  }
376
440
  return settings;
377
441
  }
@@ -567,8 +631,12 @@ function parseCompilationCacheActivity(line) {
567
631
  hitRatePercent: Number(match[3])
568
632
  };
569
633
  }
634
+ const SWIFT_CACHING_NEEDS_EXPLICIT_MODULES = /warning: swift compiler caching requires explicit module build/;
570
635
  function compilationCacheActivityLine(activity) {
571
- if (activity.status === "reported") return `${activity.hits}/${activity.cacheableTasks} hits (${activity.hitRatePercent}%)`;
636
+ if (activity.status === "reported") {
637
+ const swift = activity.swiftTargetsWithoutExplicitModules ? `; Swift excluded: ${activity.swiftTargetsWithoutExplicitModules} targets build without explicit modules (SWIFT_ENABLE_EXPLICIT_MODULES=NO)` : "";
638
+ return `${activity.hits}/${activity.cacheableTasks} hits (${activity.hitRatePercent}%)${swift}`;
639
+ }
572
640
  if (activity.status === "not-run") return "not run; artifact cache supplied the app";
573
641
  return "unavailable; Xcode did not report reliable statistics";
574
642
  }
@@ -648,6 +716,7 @@ async function buildIos({ root, udid = null, logWriter, project = null, scheme =
648
716
  });
649
717
  const transcript = [];
650
718
  let compilationCacheActivity = COMPILATION_CACHE_UNAVAILABLE;
719
+ let swiftTargetsWithoutExplicitModules = 0;
651
720
  const onLine = (line) => {
652
721
  const msg = cleanLine(line);
653
722
  transcript.push(msg);
@@ -657,8 +726,13 @@ async function buildIos({ root, udid = null, logWriter, project = null, scheme =
657
726
  level: "debug",
658
727
  msg
659
728
  });
660
- const activity = parseCompilationCacheActivity(msg);
661
- if (activity) {
729
+ if (SWIFT_CACHING_NEEDS_EXPLICIT_MODULES.test(msg)) swiftTargetsWithoutExplicitModules += 1;
730
+ const parsed = parseCompilationCacheActivity(msg);
731
+ if (parsed) {
732
+ const activity = swiftTargetsWithoutExplicitModules ? {
733
+ ...parsed,
734
+ swiftTargetsWithoutExplicitModules
735
+ } : parsed;
662
736
  compilationCacheActivity = activity;
663
737
  logWriter.write({
664
738
  src: "build",
@@ -667,7 +741,8 @@ async function buildIos({ root, udid = null, logWriter, project = null, scheme =
667
741
  event: "compilation_cache",
668
742
  hits: activity.hits,
669
743
  cacheableTasks: activity.cacheableTasks,
670
- hitRatePercent: activity.hitRatePercent
744
+ hitRatePercent: activity.hitRatePercent,
745
+ ...swiftTargetsWithoutExplicitModules ? { swiftTargetsWithoutExplicitModules } : {}
671
746
  });
672
747
  }
673
748
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stim",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Stim: fast, isolated React Native environments for coding agents",
5
5
  "keywords": [
6
6
  "agent",
@@ -42,15 +42,15 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@expo/fingerprint": "^0.20.10",
45
- "@stim-cli/cache": "^1.5.0",
46
- "@stim-cli/core": "^1.5.0",
47
- "@stim-cli/metro": "^1.5.0",
45
+ "@stim-cli/cache": "^1.6.0",
46
+ "@stim-cli/core": "^1.6.0",
47
+ "@stim-cli/metro": "^1.6.0",
48
48
  "chalk": "^5.4.1",
49
49
  "commander": "^13.1.0",
50
50
  "ws": "^8.21.3"
51
51
  },
52
52
  "devDependencies": {
53
- "@stim-cli/expo-build-cache": "1.5.0",
53
+ "@stim-cli/expo-build-cache": "1.6.0",
54
54
  "@types/ws": "^8.18.1",
55
55
  "unique-pid": "0.1.1"
56
56
  },
@@ -1,2 +0,0 @@
1
- import { p as startExpoServer } from "./server-expo-Ds8_mfng.mjs";
2
- export { startExpoServer };