stim 1.34.0 → 1.36.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 (152) hide show
  1. package/dist/{acquire-artifact-B0SWoVNt.mjs → acquire-artifact-DGTHCd0Q.mjs} +19 -3
  2. package/dist/{act-7f7wIvCQ.mjs → act-CvN9xyV6.mjs} +18 -19
  3. package/dist/{activity-DkS-Ir6V.mjs → activity-BpdDvA8Q.mjs} +4 -4
  4. package/dist/{agent-device-usage-output-BVdgKbfz.mjs → agent-device-usage-output-pbhaW7_k.mjs} +4 -4
  5. package/dist/{android-B2DSKg-A.mjs → android-5wkcMFDG.mjs} +1 -1
  6. package/dist/{android-BU4uBX8I.mjs → android-B0qTdwnt.mjs} +5 -5
  7. package/dist/{android-Iq0M2t2d.mjs → android-SJx1V3R3.mjs} +5 -5
  8. package/dist/{android-cas-Dhcjkys1.mjs → android-cas-BS9_55U5.mjs} +4 -4
  9. package/dist/{android-D7qjT2fq.mjs → android-e9WP10cE.mjs} +47 -41
  10. package/dist/{android-image-DFk26aY6.mjs → android-image-BZ57YL6R.mjs} +2 -2
  11. package/dist/{android-project-DhO6el8N.d.mts → android-project-v_1nej_x.d.mts} +3 -1
  12. package/dist/api.d.mts +20 -6
  13. package/dist/api.mjs +31 -26
  14. package/dist/{apk-signed-tail-CPpA-3vu.mjs → apk-signed-tail-eZyXIrnc.mjs} +2 -2
  15. package/dist/{artifact-DmRtKFXW.mjs → artifact-C3srrGVU.mjs} +36 -14
  16. package/dist/{artifact-CNnTZs3R.mjs → artifact-ubNdxo_K.mjs} +52 -19
  17. package/dist/{auto-placement-DA65VQH7.mjs → auto-placement-CKFpFCuq.mjs} +7 -8
  18. package/dist/{browser-web-Dn_hgKZC.mjs → browser-web-B63vLrj6.mjs} +11 -11
  19. package/dist/{build-D7SuVoRX.mjs → build-B_Dx9SKJ.mjs} +72 -25
  20. package/dist/{build-cache-Cqj4FGnX.mjs → build-cache-BW8T4oD2.mjs} +10 -5
  21. package/dist/{build-plan-Ct1FiA3E.mjs → build-plan-CeIooJqn.mjs} +6 -6
  22. package/dist/{cache-manifest-8JX9S1QJ.mjs → cache-manifest-CxWkZmUr.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{cli-DjdvQG5U.mjs → cli-COdXswmc.mjs} +19 -18
  25. package/dist/cli.mjs +1 -1
  26. package/dist/{client-kU37gURU.mjs → client-KSWIeQLA.mjs} +9 -8
  27. package/dist/collector-run.mjs +4 -4
  28. package/dist/{command-output-DjExb_tZ.mjs → command-output-T3cDctRE.mjs} +1 -1
  29. package/dist/{config-BW0fAtoK.mjs → config-BA3TgoIP.mjs} +59 -10
  30. package/dist/{dependencies-CZ7c8XX_.mjs → dependencies-LH-7k1Vr.mjs} +35 -38
  31. package/dist/{dependency-state-mL5g4H6K.mjs → dependency-state-Blfp3AkG.mjs} +1 -1
  32. package/dist/{dev-client-D3wOllNd.mjs → dev-client-MO_DjTZr.mjs} +2 -2
  33. package/dist/{device-DH5yf6TU.mjs → device-BZWt_aPJ.mjs} +11 -11
  34. package/dist/{device-CWPFAqs0.mjs → device-DNTWFFB1.mjs} +12 -12
  35. package/dist/{device-android-ChfF5I9A.mjs → device-android-BB9Lugr8.mjs} +8 -8
  36. package/dist/{ccache-ChBMXlBq.mjs → device-capacity-CpAVcKgq.mjs} +1006 -23
  37. package/dist/device-host-worker.mjs +13 -14
  38. package/dist/{device-pool-EZziQ0uS.mjs → device-pool-BJToGG-q.mjs} +3 -3
  39. package/dist/{device-provision-CfpEy-Vm.mjs → device-provision-CxQDCtrc.mjs} +9 -9
  40. package/dist/{doctor-CGBsS_68.mjs → doctor-C-46SkBe.mjs} +1 -1
  41. package/dist/{doctor-dwRboaXx.mjs → doctor-CYZ45LnX.mjs} +20 -21
  42. package/dist/{doctor-B5uEZiKp.mjs → doctor-DV639Iw_.mjs} +15 -16
  43. package/dist/doctor-fingerprint.mjs +1 -1
  44. package/dist/{doctor-watchman-r7M9UPi0.mjs → doctor-watchman-TZxYt_98.mjs} +4 -4
  45. package/dist/{eas-build-BpHIt_M3.mjs → eas-build-Xf5Jd6LR.mjs} +2 -2
  46. package/dist/{eas-fallback-CNPcjq3K.mjs → eas-fallback-DNYPNinw.mjs} +4 -4
  47. package/dist/{eas-session-ledger-CXwagcQ7.mjs → eas-session-ledger-CXZ4aix0.mjs} +5 -5
  48. package/dist/{error-diagnostics-Ym2mjmJ0.mjs → error-diagnostics-CvB5bpPU.mjs} +8 -8
  49. package/dist/{gc-B464w_a5.mjs → gc-8Qm_K1iy.mjs} +2 -2
  50. package/dist/{gc-C7YxKNci.mjs → gc-DiUhrVFo.mjs} +17 -17
  51. package/dist/{guide-BFW-cB7R.mjs → guide-CuvHRP53.mjs} +130 -65
  52. package/dist/{hosted-android-B7yfqXEy.mjs → hosted-android-D__HGVIO.mjs} +3 -3
  53. package/dist/{hosted-client-CQuzZwAu.mjs → hosted-client-DMOOu8vD.mjs} +6 -6
  54. package/dist/{hosted-logs-DfYCqrrR.mjs → hosted-logs-CClIktQM.mjs} +6 -6
  55. package/dist/{hosted-logs-sync-Dlpa2mQF.mjs → hosted-logs-sync-B7XCeqVm.mjs} +5 -5
  56. package/dist/{hosted-macos-JKefapEm.mjs → hosted-macos-D4sDJIbB.mjs} +5 -5
  57. package/dist/{hosted-native-B7OFt5gB.mjs → hosted-native-BiiUG_Q6.mjs} +7 -7
  58. package/dist/{ios-sUPbWqEh.mjs → ios-BZuhvLGr.mjs} +8 -8
  59. package/dist/{ios-BdZdNsAj.mjs → ios-BhfpRfNf.mjs} +4 -4
  60. package/dist/{ios-DSBs9c6d.mjs → ios-BhpUWyN7.mjs} +39 -32
  61. package/dist/{ios-device-Drplrgzo.mjs → ios-device-vhYL1N--.mjs} +1 -1
  62. package/dist/{ios-project-DoTQYghg.mjs → ios-project-Cz0S1Sz-.mjs} +7 -7
  63. package/dist/{ios-signing-R34vbrNU.mjs → ios-signing-BcH88ecn.mjs} +1 -1
  64. package/dist/{ios-state-CWsBysyN.mjs → ios-state-Avwz2cbZ.mjs} +1 -1
  65. package/dist/{js-swap-DrokhOfo.mjs → js-swap-Desu2iII.mjs} +4 -4
  66. package/dist/{launch-Cy-MWEZc.mjs → launch-6ckG9UrC.mjs} +19 -19
  67. package/dist/{lightened-ALwQcQtV.mjs → lightened-B6TnpHMX.mjs} +4 -4
  68. package/dist/{logs-DuED-01Z.mjs → logs-B-DMy1K0.mjs} +7 -7
  69. package/dist/{logs-DWT7jGpF.mjs → logs-CO0CJRiC.mjs} +5 -5
  70. package/dist/{macos-CtBtA_hW.mjs → macos-B1aCXhem.mjs} +19 -19
  71. package/dist/{macos-kWGcfLzx.mjs → macos-CduEmWAK.mjs} +1 -1
  72. package/dist/macos-run.mjs +1 -1
  73. package/dist/maintenance-run.mjs +5 -5
  74. package/dist/{metro-B5PVz0Wv.mjs → metro-DM3yJL1M.mjs} +2 -2
  75. package/dist/{metro-request-2LmFpC1z.mjs → metro-request-O8Q-JvBg.mjs} +1 -1
  76. package/dist/{named-ports-CA0nB9Yw.mjs → named-ports-BvB_CO9B.mjs} +2 -2
  77. package/dist/{native-android-tISP2EVp.mjs → native-android-28NOG2-y.mjs} +17 -17
  78. package/dist/{native-gradle-artifact-inputs-DVoeZkrw.mjs → native-gradle-artifact-inputs-DxVEtS6_.mjs} +3 -3
  79. package/dist/{native-runtime-CNgxeOCG.mjs → native-runtime-C3_NkUlW.mjs} +6 -6
  80. package/dist/{native-xcode-inputs-DGzkhpu4.mjs → native-xcode-inputs-BWFTw5cJ.mjs} +2 -2
  81. package/dist/{native-xcode-ios-B9nsfId2.mjs → native-xcode-ios-B4Qoc7-U.mjs} +16 -16
  82. package/dist/offload-worker.d.mts +1 -1
  83. package/dist/offload-worker.mjs +19 -19
  84. package/dist/{ownership-hC7xvvxF.mjs → ownership-C3y8wLSl.mjs} +2 -2
  85. package/dist/{phone-reverses-Bo0EzJ-P.mjs → phone-reverses-BhSxbqom.mjs} +4 -4
  86. package/dist/{placement-log-BsGvKLtU.mjs → placement-log-B8RCSzOm.mjs} +1 -1
  87. package/dist/{plan-placement-Am0IjuxB.mjs → plan-placement-BI4r55aP.mjs} +6 -6
  88. package/dist/{ports-CNzg1LYD.mjs → ports-DhOSyWm9.mjs} +3 -3
  89. package/dist/{prebuild-BfJII57G.mjs → prebuild-Di2IhUue.mjs} +9 -9
  90. package/dist/{project-DU3jjnBE.mjs → project-Clk1JAWL.mjs} +15 -15
  91. package/dist/{react-native-android-3dZiJv-4.mjs → react-native-android-bdHBMrnf.mjs} +23 -23
  92. package/dist/{react-native-build-CuvNPt-q.mjs → react-native-build-CJega_NM.mjs} +7 -7
  93. package/dist/{react-native-doctor-a35BwMUO.mjs → react-native-doctor-CY7BGITE.mjs} +5 -5
  94. package/dist/{react-native-ios-CqnReM1t.mjs → react-native-ios-Bo5EDVel.mjs} +25 -20
  95. package/dist/recorded-build-BuGL_fnm.mjs +58 -0
  96. package/dist/{recordings-AKZfsW2W.mjs → recordings-6i2-x8LU.mjs} +1 -1
  97. package/dist/{reload-CC3sNo10.mjs → reload-A_axEbeS.mjs} +14 -14
  98. package/dist/{reload-YPnvXGlB.mjs → reload-BvDuvygc.mjs} +1 -1
  99. package/dist/remote-PD6CM0xp.mjs +158 -0
  100. package/dist/{remote-BfaIHnhM.mjs → remote-WK_swZEw.mjs} +8 -8
  101. package/dist/{result-H-AxY7Ud.mjs → result-BkDpN5Mz.mjs} +23 -18
  102. package/dist/{run-N-BbRxnC.mjs → run-CTFi4Nq2.mjs} +1 -1
  103. package/dist/{server-bare-BTlICuaX.mjs → server-bare-W0aPsRZE.mjs} +1 -1
  104. package/dist/{server-command-Bn_gOObU.mjs → server-command-S00-ddjK.mjs} +4 -4
  105. package/dist/server-expo-BWJDa7Qb.mjs +2 -0
  106. package/dist/{server-expo-CUJ2fuv1.mjs → server-expo-cc-cmfsl.mjs} +2 -2
  107. package/dist/{settings-B5IBDfTx.mjs → settings-Bap-qjnp.mjs} +1 -1
  108. package/dist/{settings-DoWHJopy.mjs → settings-C_Xu4RNZ.mjs} +2 -2
  109. package/dist/{settings-payload-Bxw3hid5.mjs → settings-payload-D5jjhmrw.mjs} +4 -4
  110. package/dist/{settings-write-C6d7EC54.mjs → settings-write-C5huI-iS.mjs} +5 -5
  111. package/dist/settings.schema.json +1 -1
  112. package/dist/{simslim-DKdJx0LL.mjs → simslim-DlBvwgeF.mjs} +1 -1
  113. package/dist/{slot-launch-kq0-7w9C.mjs → slot-launch-qEQVTth7.mjs} +6 -6
  114. package/dist/{stage-CBfMTUK3.mjs → stage-CxVI_MlP.mjs} +1 -1
  115. package/dist/{start-Diu8q6_U.mjs → start-CVzivp35.mjs} +1 -1
  116. package/dist/{start-WTMumMHi.mjs → start-YpT_JpQQ.mjs} +10 -10
  117. package/dist/{state-DSOUqO-o.mjs → state-B4B5P4LU.mjs} +1 -1
  118. package/dist/{state-CtmYTRWm.mjs → state-B9VFI6r0.mjs} +2 -2
  119. package/dist/{stats-D4cW247z.mjs → stats-COoePEri.mjs} +4 -4
  120. package/dist/{status-CEwxo-PS.mjs → status-CIg0k7Qb.mjs} +21 -22
  121. package/dist/{status-B-oeWS0Z.mjs → status-CIvU5-TF.mjs} +1 -1
  122. package/dist/{status-DTFhDnd1.mjs → status-CQWmNl1f.mjs} +1 -1
  123. package/dist/{status-watch-D63R5nSI.mjs → status-watch--rfZynD_.mjs} +4 -4
  124. package/dist/status-worker.mjs +1 -1
  125. package/dist/{stim-desktop-_WTria-r.mjs → stim-desktop-D0P_bzmd.mjs} +1 -1
  126. package/dist/{stop-HL2RvhrE.mjs → stop-BEBBruvD.mjs} +4 -4
  127. package/dist/{stop-Dm9ON6Os.mjs → stop-BiI4_VFG.mjs} +2 -2
  128. package/dist/{stop-vX4w3_8V.mjs → stop-C3d5qG7C.mjs} +15 -15
  129. package/dist/supervisor-run.mjs +12 -13
  130. package/dist/support-BJbXovoO.mjs +2089 -0
  131. package/dist/{support-BNe1_Hg7.mjs → support-Vckdzrmk.mjs} +5 -5
  132. package/dist/{swiftpm-artifact-inputs-uq5oV7xR.mjs → swiftpm-artifact-inputs-DbuF-Yrr.mjs} +1 -1
  133. package/dist/{swiftpm-macos-ClF203_2.mjs → swiftpm-macos-Bu8xeBfM.mjs} +8 -8
  134. package/dist/{toolchain-CECahBDa.mjs → toolchain-CIRdNl-c.mjs} +1 -1
  135. package/dist/{toolchain-CYonNjd_.mjs → toolchain-DCnWAxQL.mjs} +71 -7
  136. package/dist/{warm-progress-q11Vdvhh.mjs → warm-progress-DwsGBpph.mjs} +3 -3
  137. package/dist/{web-BdaMBr2O.mjs → web-D2En0Wa5.mjs} +8 -8
  138. package/dist/web-Dpj70t4p.mjs +2 -0
  139. package/dist/web-run.mjs +4 -4
  140. package/dist/{workspace-state-BdZ-QgmB.mjs → workspace-state-BhwAJBgA.mjs} +2 -2
  141. package/dist/{workspaces-B9v5V7Es.mjs → workspaces-Dh5N70qW.mjs} +11 -11
  142. package/dist/{worktree-C4MBOMz7.mjs → worktree-DLm4s2Ib.mjs} +1 -1
  143. package/dist/{worktree-C3N86KpI.mjs → worktree-Yw3EW77B.mjs} +24 -24
  144. package/package.json +7 -7
  145. package/dist/device-capacity-CHC3dKWg.mjs +0 -867
  146. package/dist/device-ios-B3-Ah--R.mjs +0 -716
  147. package/dist/device-lease-run-i3FNX4OE.mjs +0 -282
  148. package/dist/idle-shutdown-DPD8oV36.mjs +0 -142
  149. package/dist/selection-CH-MUVGD.mjs +0 -791
  150. package/dist/server-expo-B59N16uT.mjs +0 -2
  151. package/dist/support-ivsfDj0v.mjs +0 -287
  152. package/dist/web-CIpHpGp8.mjs +0 -2
@@ -1,6 +1,22 @@
1
1
  import { f as WorkspaceProcessCleanupError } from "./exec-CGuDzt40.mjs";
2
- import { I as waitForSharedBuild } from "./activity-DkS-Ir6V.mjs";
3
- import { rmSync } from "node:fs";
2
+ import { I as waitForSharedBuild } from "./activity-BpdDvA8Q.mjs";
3
+ import { copyFileSync, rmSync } from "node:fs";
4
+ //#region src/engine/failed-transcript.ts
5
+ /**
6
+ * Copies a failed build's transcript beside the log, where the next build in the workspace, which truncates the
7
+ * log, leaves it. The name does not end in `.ndjson`, so `stim logs` keeps reading only the current run. A later
8
+ * failed build replaces it. Returns the copy's path, or the log's own path when it cannot be copied.
9
+ */
10
+ function retainFailedTranscript(logFile) {
11
+ const kept = `${logFile}.failed`;
12
+ try {
13
+ copyFileSync(logFile, kept);
14
+ return kept;
15
+ } catch {
16
+ return logFile;
17
+ }
18
+ }
19
+ //#endregion
4
20
  //#region src/engine/artifact-lifecycle.ts
5
21
  async function runArtifactLifecycle(phases) {
6
22
  try {
@@ -168,4 +184,4 @@ async function acquireArtifact(adapter, { root, logFile, deps }) {
168
184
  }
169
185
  }
170
186
  //#endregion
171
- export { settleArtifactUploads as n, acquireArtifact as t };
187
+ export { settleArtifactUploads as n, retainFailedTranscript as r, acquireArtifact as t };
@@ -1,28 +1,27 @@
1
1
  import { T as process_identity_exports, f as WorkspaceProcessCleanupError, m as workspaceProcessLockError, n as isTimeoutError, p as withWorkspaceProcessLock, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { E as workspaceDir, j as workspaceStateFile$1, k as workspaceLogsDir$1, r as readWorkspaceState$1, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { o as formatLongDuration, u as plural } from "./command-output-DjExb_tZ.mjs";
4
- import { at as isOnMountedVolume, ht as projectDeviceSlots, m as getProject, nt as directorySizeAsync, ot as listMountedVolumes, rt as formatBytes, st as measuredDirectorySizeAsync, v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
2
+ import { E as workspaceDir, j as workspaceStateFile$1, k as workspaceLogsDir$1, r as readWorkspaceState$1, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { o as formatLongDuration, u as plural } from "./command-output-T3cDctRE.mjs";
4
+ import { ct as measuredDirectorySizeAsync, gt as projectDeviceSlots, it as formatBytes, m as getProject, ot as isOnMountedVolume, rt as directorySizeAsync, st as listMountedVolumes, v as loadConfig$1 } from "./config-BA3TgoIP.mjs";
5
5
  import { c as gitQuiet, l as gitQuietAsync, n as runOperationFileQuiet, r as childEnvironment } from "./operation-exec-DKlBcKAL.mjs";
6
- import { At as listWorktrees, Et as hasUncommittedWorkAsync, Ft as matchWorktreeEntry, Kt as sourceCheckoutOf, O as maintenanceKeepSetting, Pt as lockReason, Ut as resolveFullRefAsync, Wt as resolveSourceCheckoutAsync, X as resolveProjectSettings, Xt as worktreeLockAsync, Z as resolveProjectSettingsAsync, bt as dirtyPathsAsync, h as deviceIdleShutdownMinutesSetting, it as settingValueAt, jt as listWorktreesAsync, mt as LOCKED_REASON, qt as unpushedCommitsAsync, sn as removeTemporaryEntryAsync, wt as hasPopulatedSubmodulesAsync } from "./settings-B5IBDfTx.mjs";
7
- import { P as readRemoteSession, i as findProjectRoot$1 } from "./project-DU3jjnBE.mjs";
8
- import { A as getAvdNameForSerialAsync, L as listAvds, N as listAdbDevices, P as listAdbDevicesAsync, R as listAvdsAsync, U as ownedAvdDirectory, k as getAvdNameForSerial, q as ownedAvdSerialResolverAsync, xt as readParked } from "./android-Iq0M2t2d.mjs";
9
- import { c as pidExists } from "./metro-B5PVz0Wv.mjs";
10
- import { $n as memorySweepIsScoped, A as diskPressureLevel, G as planCacheEmptying, Jn as collectMemoryReport, N as lowestFree, P as protectWindowMs, X as collectGradleVersions, Z as deleteGradleVersion, _ as resolveBudget, at as DEVICE_LIST_TIMEOUT_MS, cr as pruneCache, ct as collectParkedSims, d as enforceBudget, dt as deleteProjectDevices, ir as phase, j as levelFloors, lt as deleteParkedAvds, mt as deviceSweepIsScoped, nt as waitForGradleExit, p as machineNumber, rr as stopIdleGradleDaemons, sr as discoverCaches, st as collectParkedAvds, u as cacheLabel, ut as deleteParkedSims, v as trimmableCaches, vt as findStaleProjectDevices, y as stopOwnedMetro, z as emptyCaches } from "./ccache-ChBMXlBq.mjs";
11
- import { o as readWebRecord, u as webFacts } from "./state-CtmYTRWm.mjs";
12
- import { a as unregister, n as readManifest } from "./cache-manifest-8JX9S1QJ.mjs";
13
- import { B as workspaceBuildInProgress, Et as GC_OUTPUT, F as collectOwnedDeviceActivityAsync, Ot as takeGcResults, P as collectOwnedDeviceActivity, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, d as recentNativeUseReason, g as ARTIFACT_DIRS, h as workspaceDirRemoved, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, l as keptByLock, m as workspaceBuildReasons, o as collectWorkspaceOutputs, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, x as resolveSupervisorTarget, y as workspaceInUse } from "./workspaces-B9v5V7Es.mjs";
6
+ import { At as listWorktrees, Et as hasUncommittedWorkAsync, Ft as matchWorktreeEntry, Kt as sourceCheckoutOf, O as maintenanceKeepSetting, Pt as lockReason, Ut as resolveFullRefAsync, Wt as resolveSourceCheckoutAsync, X as resolveProjectSettings, Xt as worktreeLockAsync, Z as resolveProjectSettingsAsync, bt as dirtyPathsAsync, h as deviceIdleShutdownMinutesSetting, it as settingValueAt, jt as listWorktreesAsync, mt as LOCKED_REASON, qt as unpushedCommitsAsync, sn as removeTemporaryEntryAsync, wt as hasPopulatedSubmodulesAsync } from "./settings-Bap-qjnp.mjs";
7
+ import { P as readRemoteSession, i as findProjectRoot$1 } from "./project-Clk1JAWL.mjs";
8
+ import { A as getAvdNameForSerialAsync, L as listAvds, N as listAdbDevices, P as listAdbDevicesAsync, R as listAvdsAsync, U as ownedAvdDirectory, k as getAvdNameForSerial, q as ownedAvdSerialResolverAsync, xt as readParked } from "./android-SJx1V3R3.mjs";
9
+ import { c as pidExists } from "./metro-DM3yJL1M.mjs";
10
+ import { At as deleteParkedAvds, B as stopOwnedMetro, Ct as waitForGradleExit, Et as DEVICE_LIST_TIMEOUT_MS, Ft as deviceSweepIsScoped, M as enforceBudget, Mt as deleteProjectDevices, Or as discoverCaches, Ot as collectParkedAvds, P as machineNumber, Q as levelFloors, R as resolveBudget, Tr as phase, Z as diskPressureLevel, _t as collectGradleVersions, b as shutDownIdleDevices, br as memorySweepIsScoped, et as lowestFree, ft as planCacheEmptying, hr as collectMemoryReport, j as cacheLabel, jt as deleteParkedSims, kr as pruneCache, kt as collectParkedSims, ot as emptyCaches, tt as protectWindowMs, vt as deleteGradleVersion, wr as stopIdleGradleDaemons, x as writeIdleShutdownEvent, y as dueIdleDevices, z as trimmableCaches, zt as findStaleProjectDevices } from "./device-capacity-CpAVcKgq.mjs";
11
+ import { o as readWebRecord, u as webFacts } from "./state-B9VFI6r0.mjs";
12
+ import { a as unregister, n as readManifest } from "./cache-manifest-CxWkZmUr.mjs";
13
+ import { B as workspaceBuildInProgress, Et as GC_OUTPUT, F as collectOwnedDeviceActivityAsync, Ot as takeGcResults, P as collectOwnedDeviceActivity, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, d as recentNativeUseReason, g as ARTIFACT_DIRS, h as workspaceDirRemoved, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, l as keptByLock, m as workspaceBuildReasons, o as collectWorkspaceOutputs, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, x as resolveSupervisorTarget, y as workspaceInUse } from "./workspaces-Dh5N70qW.mjs";
14
14
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
15
- import { N as listBuildLocks, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, g as workspaceActivity, x as listLeaseFiles } from "./activity-DkS-Ir6V.mjs";
16
- import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-BdZdNsAj.mjs";
15
+ import { N as listBuildLocks, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, g as workspaceActivity, x as listLeaseFiles } from "./activity-BpdDvA8Q.mjs";
16
+ import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-BhfpRfNf.mjs";
17
17
  import { s as metroStoreRoot } from "./errors-DHm_U5gv.mjs";
18
18
  import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
19
- import { m as probeHostedSession } from "./hosted-client-CQuzZwAu.mjs";
20
- import { o as runStop } from "./stop-vX4w3_8V.mjs";
21
- import { D as stimCliUseOf, E as stimCliEntries, M as worktreeArchiveLimits, T as serviceRunningFrom, _ as cacheBlocked, a as nestedWorktrees, b as measurePressure, i as excludeWatchmanCookies, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, v as measureDisk, w as uncommittedActivityOf, x as measurePressureAsync, y as measureDiskAsync } from "./worktree-C3N86KpI.mjs";
19
+ import { m as probeHostedSession } from "./hosted-client-DMOOu8vD.mjs";
20
+ import { o as runStop } from "./stop-C3d5qG7C.mjs";
21
+ import { D as stimCliUseOf, E as stimCliEntries, M as worktreeArchiveLimits, T as serviceRunningFrom, _ as cacheBlocked, a as nestedWorktrees, b as measurePressure, i as excludeWatchmanCookies, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, v as measureDisk, w as uncommittedActivityOf, x as measurePressureAsync, y as measureDiskAsync } from "./worktree-Yw3EW77B.mjs";
22
22
  import { n as describePullRequest, r as endedPullRequest, s as pullRequestLookups } from "./pull-request-BpMTNkMB.mjs";
23
- import { a as lastFetchedAtAsync, c as mergeStateAsync, f as recordPullRequestLookup, i as fetchDefaultBranchAsync, o as localDefaultBranchAsync, r as FETCH_FRESH_MS } from "./warm-progress-q11Vdvhh.mjs";
24
- import { a as restoreProblem, r as recordLightened, t as finishLightened } from "./lightened-ALwQcQtV.mjs";
25
- import { i as writeIdleShutdownEvent, n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-DPD8oV36.mjs";
23
+ import { a as lastFetchedAtAsync, c as mergeStateAsync, f as recordPullRequestLookup, i as fetchDefaultBranchAsync, o as localDefaultBranchAsync, r as FETCH_FRESH_MS } from "./warm-progress-DwsGBpph.mjs";
24
+ import { a as restoreProblem, r as recordLightened, t as finishLightened } from "./lightened-B6TnpHMX.mjs";
26
25
  import { readClaimSet } from "@stim-cli/core/ownership-claim";
27
26
  import { existsSync, lstatSync, readFileSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync } from "node:fs";
28
27
  import { tmpdir } from "node:os";
@@ -1,9 +1,9 @@
1
1
  import { D as ownership_claim_exports, T as process_identity_exports, _ as declareSpawnsOn, t as getExecutor, x as stopDeclaringSpawnsOn } from "./exec-CGuDzt40.mjs";
2
- import { M as withDirLock$1, N as withDirLockAsync$1, c as withWorkspaceStateLock, d as writeWorkspaceState, k as workspaceLogsDir$1, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { a as formatElapsed, i as formatDuration, m as shortHash } from "./command-output-DjExb_tZ.mjs";
4
- import { _t as validateDeviceSlot, d as getConfigDir, dt as deviceSlotKey, pt as parseDeviceSlotKey } from "./config-BW0fAtoK.mjs";
2
+ import { M as withDirLock$1, N as withDirLockAsync$1, c as withWorkspaceStateLock, d as writeWorkspaceState, k as workspaceLogsDir$1, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1 } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { a as formatElapsed, i as formatDuration, m as shortHash } from "./command-output-T3cDctRE.mjs";
4
+ import { d as getConfigDir, ft as deviceSlotKey, mt as parseDeviceSlotKey, vt as validateDeviceSlot } from "./config-BA3TgoIP.mjs";
5
5
  import { n as runOperationFileQuiet } from "./operation-exec-DKlBcKAL.mjs";
6
- import { w as resolveBuild } from "./build-cache-Cqj4FGnX.mjs";
6
+ import { T as resolveBuild } from "./build-cache-BW8T4oD2.mjs";
7
7
  import { randomBytes } from "node:crypto";
8
8
  import { closeSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
9
9
  import { homedir } from "node:os";
@@ -1,8 +1,8 @@
1
1
  import { T as process_identity_exports } from "./exec-CGuDzt40.mjs";
2
- import { o as formatLongDuration } from "./command-output-DjExb_tZ.mjs";
3
- import { rt as formatBytes } from "./config-BW0fAtoK.mjs";
4
- import { bt as measureDu, u as listWorkspaceDirs, xt as writeUsageCache, yt as canonical } from "./workspaces-B9v5V7Es.mjs";
5
- import { c as parseAgentDeviceRecord, o as envDir, u as processMatches } from "./activity-DkS-Ir6V.mjs";
2
+ import { o as formatLongDuration } from "./command-output-T3cDctRE.mjs";
3
+ import { it as formatBytes } from "./config-BA3TgoIP.mjs";
4
+ import { bt as measureDu, u as listWorkspaceDirs, xt as writeUsageCache, yt as canonical } from "./workspaces-Dh5N70qW.mjs";
5
+ import { c as parseAgentDeviceRecord, o as envDir, u as processMatches } from "./activity-BpdDvA8Q.mjs";
6
6
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
7
7
  import { homedir } from "node:os";
8
8
  import { isAbsolute, join, relative, sep } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { u as androidToolCwd } from "./android-Iq0M2t2d.mjs";
2
+ import { u as androidToolCwd } from "./android-SJx1V3R3.mjs";
3
3
  //#region src/collector/android.ts
4
4
  const LEVEL_BY_LETTER = {
5
5
  V: "debug",
@@ -1,6 +1,6 @@
1
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DjExb_tZ.mjs";
2
- import { E as resolveVariant, T as resolveSystemImage, _ as findAapt, b as noDeviceDiagnostic, d as androidVariantSetting, f as apkDevClientFacts, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme, u as androidSystemImageSetting, x as parseXmltree, y as isReleaseVariant } from "./support-BNe1_Hg7.mjs";
3
- import { r as lastBuildRecord, t as androidFacts } from "./result-H-AxY7Ud.mjs";
4
- import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-D7qjT2fq.mjs";
5
- import { a as collectorLogFile, o as killPreviousCollector, s as startCollector } from "./launch-Cy-MWEZc.mjs";
1
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-T3cDctRE.mjs";
2
+ import { E as resolveVariant, T as resolveSystemImage, _ as findAapt, b as noDeviceDiagnostic, d as androidVariantSetting, f as apkDevClientFacts, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme, u as androidSystemImageSetting, x as parseXmltree, y as isReleaseVariant } from "./support-Vckdzrmk.mjs";
3
+ import { r as lastBuildRecord, t as androidFacts } from "./result-BkDpN5Mz.mjs";
4
+ import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-e9WP10cE.mjs";
5
+ import { a as collectorLogFile, o as killPreviousCollector, s as startCollector } from "./launch-6ckG9UrC.mjs";
6
6
  export { NO_DEVICE, NO_FINGERPRINT, androidDevClientScheme, androidFacts, androidSystemImageSetting, androidVariantSetting, apkDevClientFacts, apkPackage, collectorLogFile, androidCommand as default, displayPath, dumpApkManifest, findAapt, formatDuration, isReleaseVariant, killPreviousCollector, lastBuildRecord, noDeviceDiagnostic, parseXmltree, phaseLine, registerAndroid, resolveSystemImage, resolveVariant, runAndroid, runAndroidOperation, shortHash, startCollector };
@@ -1,10 +1,10 @@
1
1
  import { D as ownership_claim_exports, T as process_identity_exports, _ as declareSpawnsOn, f as WorkspaceProcessCleanupError, l as cancellableSleep, t as getExecutor, x as stopDeclaringSpawnsOn } from "./exec-CGuDzt40.mjs";
2
- import { M as withDirLock$1, N as withDirLockAsync$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { O as withConfigLock$1, c as ensureConfig, d as getConfigDir, f as getConfigPath$1, ft as deviceSlotPlatforms, gt as removeSlotDevice, ht as projectDeviceSlots, k as withConfigLockAsync$1, lt as assignSlotDevice, v as loadConfig$1, w as saveConfig } from "./config-BW0fAtoK.mjs";
2
+ import { M as withDirLock$1, N as withDirLockAsync$1 } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { A as withConfigLockAsync$1, _t as removeSlotDevice, c as ensureConfig, d as getConfigDir, f as getConfigPath$1, gt as projectDeviceSlots, k as withConfigLock$1, pt as deviceSlotPlatforms, ut as assignSlotDevice, v as loadConfig$1, w as saveConfig } from "./config-BA3TgoIP.mjs";
4
4
  import { n as runOperationFileQuiet, t as runOperationFile } from "./operation-exec-DKlBcKAL.mjs";
5
- import { c as androidDataPartitionSizeBytes } from "./settings-B5IBDfTx.mjs";
6
- import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-_WTria-r.mjs";
7
- import { c as pidExists, p as signalProcessTreeAsync } from "./metro-B5PVz0Wv.mjs";
5
+ import { c as androidDataPartitionSizeBytes } from "./settings-Bap-qjnp.mjs";
6
+ import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-D0P_bzmd.mjs";
7
+ import { c as pidExists, p as signalProcessTreeAsync } from "./metro-DM3yJL1M.mjs";
8
8
  import { renameSync, rmSync, writeFileSync } from "node:fs";
9
9
  import { isDeepStrictEqual } from "node:util";
10
10
  import { join } from "node:path";
@@ -1,7 +1,7 @@
1
- import { M as withDirLock$1, _ as ensureWorkspaceStorage } from "./workspace-state-BdZ-QgmB.mjs";
2
- import { d as getConfigDir } from "./config-BW0fAtoK.mjs";
3
- import { m as defaultAndroidLayout } from "./settings-B5IBDfTx.mjs";
4
- import { r as register } from "./cache-manifest-8JX9S1QJ.mjs";
1
+ import { M as withDirLock$1, _ as ensureWorkspaceStorage } from "./workspace-state-BhwAJBgA.mjs";
2
+ import { d as getConfigDir } from "./config-BA3TgoIP.mjs";
3
+ import { m as defaultAndroidLayout } from "./settings-Bap-qjnp.mjs";
4
+ import { r as register } from "./cache-manifest-CxWkZmUr.mjs";
5
5
  import { createHash, randomUUID } from "node:crypto";
6
6
  import { accessSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync } from "node:fs";
7
7
  import { join } from "node:path";
@@ -1,44 +1,43 @@
1
1
  import { D as ownership_claim_exports, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, g as emulatorLogFile, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-DjExb_tZ.mjs";
4
- import { D as upsertProject, _t as validateDeviceSlot, ft as deviceSlotPlatforms, k as withConfigLockAsync$1, m as getProject, mt as parseDeviceSlotOption, u as getConcurrencyLimits, ut as deviceSlotFileKey } from "./config-BW0fAtoK.mjs";
5
- import { B as publicUrlSetting, F as metroWarmupUrlSetting, J as resolveCacheProviderConfig, N as metroPortSetting, Q as resolveSettings, W as remoteEasFallbackSetting, Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, dt as detectProviders, g as deviceReclaimIdleMinutesSetting, ot as tunnelModeSetting, z as projectSettingsContextAsync } from "./settings-B5IBDfTx.mjs";
6
- import { f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-DU3jjnBE.mjs";
7
- import { $ as probeEmulatorSerial, At as configuredAndroidEmulatorApp, E as emulatorProbeSession, M as isEmulatorToolAbsent, P as listAdbDevicesAsync, U as ownedAvdDirectory, Z as physicalDeviceModel, a as androidDeviceAbi, at as resolvePhysicalDevice, it as resolveOwnedAvdSerialAsync, ut as waitForBoot, v as avdStorageExists, z as listInstalledSystemImages } from "./android-Iq0M2t2d.mjs";
8
- import { c as pidExists, d as resolveProjectMetro } from "./metro-B5PVz0Wv.mjs";
2
+ import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, g as emulatorLogFile, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-T3cDctRE.mjs";
4
+ import { A as withConfigLockAsync$1, O as upsertProject, dt as deviceSlotFileKey, ht as parseDeviceSlotOption, m as getProject, pt as deviceSlotPlatforms, u as getConcurrencyLimits, vt as validateDeviceSlot } from "./config-BA3TgoIP.mjs";
5
+ import { B as publicUrlSetting, F as metroWarmupUrlSetting, J as resolveCacheProviderConfig, N as metroPortSetting, Q as resolveSettings, W as remoteEasFallbackSetting, Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, dt as detectProviders, g as deviceReclaimIdleMinutesSetting, ot as tunnelModeSetting, z as projectSettingsContextAsync } from "./settings-Bap-qjnp.mjs";
6
+ import { f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-Clk1JAWL.mjs";
7
+ import { $ as probeEmulatorSerial, At as configuredAndroidEmulatorApp, E as emulatorProbeSession, M as isEmulatorToolAbsent, P as listAdbDevicesAsync, U as ownedAvdDirectory, Z as physicalDeviceModel, a as androidDeviceAbi, at as resolvePhysicalDevice, it as resolveOwnedAvdSerialAsync, ut as waitForBoot, v as avdStorageExists, z as listInstalledSystemImages } from "./android-SJx1V3R3.mjs";
8
+ import { c as pidExists, d as resolveProjectMetro } from "./metro-DM3yJL1M.mjs";
9
9
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
10
- import { At as ensureRemoteBootOwned, Cn as runProcessOperation, Dn as checkEasAuth, Et as binOnPath, Fn as resolveRemote, In as uploadRemote, Jt as verifyLaunch, Mt as remoteAndroidDeps, Pn as resolveEasCliBin, Pt as resolveRemoteContext, Qt as DEFAULT_METRO_PORT, Wn as ownedSessionName, Zt as ADB_INSTALL_TIMEOUT_MS, c as budgetGate, kt as ensureMetroReachable, ln as installAndroidApp, mn as launchAndroidReleaseApp, pn as launchAndroidApp, qt as verifyAndroidReleaseLaunch, t as CCACHE_NOT_RUN, xn as exitAfterFlush } from "./ccache-ChBMXlBq.mjs";
11
- import { $ as tapBuildLog, H as NO_BUILD_PROGRESS, Q as startBuildProgress, St as acquireBuildSlot, Tt as releaseBuildSlot, Z as runFailureRecord, ct as recordRunStats, et as thrownRunFailureRecord, it as readRunEstimates, lt as statsProjectKey$1, ot as recordCapacityRefusal, rt as createRunRecorder } from "./workspaces-B9v5V7Es.mjs";
12
- import { _t as runCancellationSignal, gt as runCancellation, lt as cancelledFailure, vt as withNativeBuildRun } from "./toolchain-CYonNjd_.mjs";
13
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-DkS-Ir6V.mjs";
14
- import { E as storedAppId } from "./build-cache-Cqj4FGnX.mjs";
15
- import { C as setRemoteLogSink } from "./client-kU37gURU.mjs";
16
- import { d as resolveBuildPlacement, s as parseBuildMachineOption } from "./selection-CH-MUVGD.mjs";
17
- import { i as hostedMetroSettings } from "./metro-request-2LmFpC1z.mjs";
18
- import { a as writeHostedAndroidAsync, i as writeDevicePlacementAsync, t as readHostedAndroid } from "./ios-state-CWsBysyN.mjs";
19
- import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-B7yfqXEy.mjs";
20
- import { n as verifyCollectorOwnership } from "./ownership-hC7xvvxF.mjs";
21
- import { i as restoreLightenedDependencies, n as printLightenedFailure } from "./lightened-ALwQcQtV.mjs";
22
- import { c as startDevServer } from "./start-WTMumMHi.mjs";
23
- import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-i3FNX4OE.mjs";
24
- import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-CHC3dKWg.mjs";
25
- import { r as ensureSystemImage, t as androidImageInstallPolicy } from "./android-image-DFk26aY6.mjs";
26
- import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-BpHIt_M3.mjs";
27
- import { t as followHostedLaunchLogs } from "./hosted-logs-sync-Dlpa2mQF.mjs";
28
- import { f as settleFingerprintCheck } from "./prebuild-BfJII57G.mjs";
29
- import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-CNgxeOCG.mjs";
30
- import { n as devicePlacementRecord } from "./placement-log-BsGvKLtU.mjs";
31
- import { S as pooledAndroidDevice, a as PLATFORM, b as noDeviceDiagnostic, g as dumpApkManifest, h as displayPath, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme } from "./support-BNe1_Hg7.mjs";
32
- import { t as acquireAndroidArtifact } from "./artifact-DmRtKFXW.mjs";
33
- import { a as persistLastBuild, c as androidDeviceSelectorRefusal, i as logPostBuildFailure, n as finishAndroidUpload, o as persistThrownBuild, s as reportAndroidResult, u as resolveAndroidRunPlan } from "./result-H-AxY7Ud.mjs";
34
- import { n as devicePlacementLine, t as automaticDevicePlacement } from "./auto-placement-DA65VQH7.mjs";
35
- import { i as verifyAndroidMetroRun, r as finishAndroidRun } from "./launch-Cy-MWEZc.mjs";
36
- import { t as checkEasFallback } from "./eas-fallback-CNPcjq3K.mjs";
37
- import { i as warmMetro, n as ensureBooted, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-DH5yf6TU.mjs";
38
- import { a as AvdBootError, o as AvdRecoveryError } from "./device-android-ChfF5I9A.mjs";
39
- import { t as selectFromPool } from "./device-pool-EZziQ0uS.mjs";
10
+ import { $t as remoteAndroidDeps, An as installAndroidApp, Fn as launchAndroidReleaseApp, Hn as exitAfterFlush, Jn as checkEasAuth, Pn as launchAndroidApp, S as CCACHE_NOT_RUN, Wn as runProcessOperation, Xt as ensureMetroReachable, Zt as ensureRemoteBootOwned, dr as ownedSessionName, hn as verifyLaunch, k as budgetGate, mn as verifyAndroidReleaseLaunch, n as DeviceAdmissionRefusal, nr as resolveRemote, qt as binOnPath, r as checkDeviceCapacity, rr as uploadRemote, tn as resolveRemoteContext, tr as resolveEasCliBin, vn as ADB_INSTALL_TIMEOUT_MS, yn as DEFAULT_METRO_PORT } from "./device-capacity-CpAVcKgq.mjs";
11
+ import { $ as tapBuildLog, H as NO_BUILD_PROGRESS, Q as startBuildProgress, St as acquireBuildSlot, Tt as releaseBuildSlot, Z as runFailureRecord, ct as recordRunStats, et as thrownRunFailureRecord, it as readRunEstimates, lt as statsProjectKey$1, ot as recordCapacityRefusal, rt as createRunRecorder } from "./workspaces-Dh5N70qW.mjs";
12
+ import { _t as runCancellationSignal, gt as runCancellation, lt as cancelledFailure, vt as withNativeBuildRun } from "./toolchain-DCnWAxQL.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-BpdDvA8Q.mjs";
14
+ import { D as storedAppId } from "./build-cache-BW8T4oD2.mjs";
15
+ import { C as setRemoteLogSink } from "./client-KSWIeQLA.mjs";
16
+ import { J as releaseLeaseOnAbort, L as resolveBuildPlacement, N as parseBuildMachineOption, U as acquireRunLease, W as leaseExpiryText, X as waitFlagConflict, Y as runLease } from "./support-BJbXovoO.mjs";
17
+ import { i as hostedMetroSettings } from "./metro-request-O8Q-JvBg.mjs";
18
+ import { a as writeHostedAndroidAsync, i as writeDevicePlacementAsync, t as readHostedAndroid } from "./ios-state-Avwz2cbZ.mjs";
19
+ import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-D__HGVIO.mjs";
20
+ import { n as verifyCollectorOwnership } from "./ownership-C3y8wLSl.mjs";
21
+ import { i as restoreLightenedDependencies, n as printLightenedFailure } from "./lightened-B6TnpHMX.mjs";
22
+ import { c as startDevServer } from "./start-YpT_JpQQ.mjs";
23
+ import { r as ensureSystemImage, t as androidImageInstallPolicy } from "./android-image-BZ57YL6R.mjs";
24
+ import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-Xf5Jd6LR.mjs";
25
+ import { t as followHostedLaunchLogs } from "./hosted-logs-sync-B7XCeqVm.mjs";
26
+ import { f as settleFingerprintCheck } from "./prebuild-Di2IhUue.mjs";
27
+ import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-C3_NkUlW.mjs";
28
+ import { t as lookupRecordedBuild } from "./recorded-build-BuGL_fnm.mjs";
29
+ import { S as pooledAndroidDevice, a as PLATFORM, b as noDeviceDiagnostic, g as dumpApkManifest, h as displayPath, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE, s as androidDevClientScheme } from "./support-Vckdzrmk.mjs";
30
+ import { n as devicePlacementRecord } from "./placement-log-B8RCSzOm.mjs";
31
+ import { n as acquireAndroidArtifactOrRecorded } from "./artifact-C3srrGVU.mjs";
32
+ import { a as persistLastBuild, c as androidDeviceSelectorRefusal, i as logPostBuildFailure, n as finishAndroidUpload, o as persistThrownBuild, s as reportAndroidResult, u as resolveAndroidRunPlan } from "./result-BkDpN5Mz.mjs";
33
+ import { n as devicePlacementLine, t as automaticDevicePlacement } from "./auto-placement-CKFpFCuq.mjs";
34
+ import { i as verifyAndroidMetroRun, r as finishAndroidRun } from "./launch-6ckG9UrC.mjs";
35
+ import { t as checkEasFallback } from "./eas-fallback-DNYPNinw.mjs";
36
+ import { i as warmMetro, n as ensureBooted, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-BZWt_aPJ.mjs";
37
+ import { a as AvdBootError, o as AvdRecoveryError } from "./device-android-BB9Lugr8.mjs";
38
+ import { t as selectFromPool } from "./device-pool-BJToGG-q.mjs";
40
39
  import { t as unsupportedPlan } from "./project-plan-BPwbLwQu.mjs";
41
- import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-Ct1FiA3E.mjs";
40
+ import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-CeIooJqn.mjs";
42
41
  import { join } from "node:path";
43
42
  import { workspaceId } from "@stim-cli/core";
44
43
  import { hostedAndroidStatus, parseMachine } from "@stim-cli/core/state";
@@ -430,6 +429,7 @@ function runAndroidOperation(context, root, opts = {}) {
430
429
  buildMachine: opts.remoteBuild,
431
430
  slot: opts.slot,
432
431
  easProfile: opts.easProfile,
432
+ recordedBuild: opts.recordedBuild,
433
433
  json: Boolean(opts.json),
434
434
  metroCheck: opts.metroCheck !== false,
435
435
  useBuildCache: opts.buildCache !== false,
@@ -447,7 +447,7 @@ function runAndroidOperation(context, root, opts = {}) {
447
447
  }
448
448
  }, { write: (line) => context.output("stderr", `${chalk.dim(phaseLine("lock", line))}\n`) });
449
449
  }
450
- function resolveRunAndroidOptions({ context, root, json = false, remoteDevice: commandRemoteBackend = null, resolveSettingsFor = resolveSettings, resolveRemoteDeviceContext = resolveRemoteContext, remoteDeviceDeps: makeRemoteDeviceDeps = remoteAndroidDeps, resolveEasBin = resolveEasCliBin, ensureMetroReachable: ensureRemoteMetro = ensureMetroReachable, ensureRemoteBootOwned: ensureRemoteOwned = ensureRemoteBootOwned, detectRemoteProviders = detectProviders, metroCheck = true, useBuildCache = true, easProfile, resolveEasDevelopmentBuild: resolveEasBuild = resolveEasDevelopmentBuild, variant: variantFlag = null, systemImage: systemImageFlag = null, deviceProfile: deviceProfileFlag, device: deviceFlag = null, wait: waitFlag = void 0, waitConflict = false, acquireLease = acquireRunLease, makeRunLease = runLease, selectPool = selectFromPool, onLeaseSignal = releaseLeaseOnAbort, listDevices = listAdbDevicesAsync, deviceModel = physicalDeviceModel, deviceAbi = androidDeviceAbi, isEmulatorDevice = probeEmulatorSerial, readApkPackage = async (apkPath) => apkPackage(await dumpApkManifest(apkPath, { context })), getLimits = getConcurrencyLimits, checkCapacity = checkDeviceCapacity, acquireSlot = acquireBuildSlot, releaseSlot = releaseBuildSlot, ensureDevice = ensureOwnedDevice, listSystemImages = listInstalledSystemImages, listDeviceProfiles, ensureDeviceBooted = ensureBooted, resolveAvdSerial = resolveOwnedAvdSerialAsync, waitForDeviceBoot = waitForBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro = resolveProjectMetro, warmMetro: prewarmMetro = warmMetro, startServer = startDevServer, readState = readWorkspaceState$1, pidAlive = pidExists, verifyCollector = verifyCollectorOwnership, verifyLaunched = verifyLaunch, ensureStorage = ensureWorkspaceStorageSafely, acquireLock = acquireBuildLock, releaseLock = releaseBuildLock, waitForBuild: waitForBuild$1 = waitForBuild, easAuth = checkEasAuth, resolveRemoteBuild = resolveRemote, uploadRemoteBuild = uploadRemote, resolveCacheProvider = resolveCacheProviderConfig, loadCacheProviderModule = loadCacheProvider, storedAppId: storedAppId$1 = storedAppId, install = installAndroidApp, launch = launchAndroidApp, launchRelease = launchAndroidReleaseApp, verifyReleaseLaunched = verifyAndroidReleaseLaunch, resolveDevClientScheme = (projectRoot, apkPath, options) => androidDevClientScheme(projectRoot, apkPath, {
450
+ function resolveRunAndroidOptions({ context, root, json = false, remoteDevice: commandRemoteBackend = null, resolveSettingsFor = resolveSettings, resolveRemoteDeviceContext = resolveRemoteContext, remoteDeviceDeps: makeRemoteDeviceDeps = remoteAndroidDeps, resolveEasBin = resolveEasCliBin, ensureMetroReachable: ensureRemoteMetro = ensureMetroReachable, ensureRemoteBootOwned: ensureRemoteOwned = ensureRemoteBootOwned, detectRemoteProviders = detectProviders, metroCheck = true, useBuildCache = true, easProfile, recordedBuild, resolveEasDevelopmentBuild: resolveEasBuild = resolveEasDevelopmentBuild, variant: variantFlag = null, systemImage: systemImageFlag = null, deviceProfile: deviceProfileFlag, device: deviceFlag = null, wait: waitFlag = void 0, waitConflict = false, acquireLease = acquireRunLease, makeRunLease = runLease, selectPool = selectFromPool, onLeaseSignal = releaseLeaseOnAbort, listDevices = listAdbDevicesAsync, deviceModel = physicalDeviceModel, deviceAbi = androidDeviceAbi, isEmulatorDevice = probeEmulatorSerial, readApkPackage = async (apkPath) => apkPackage(await dumpApkManifest(apkPath, { context })), getLimits = getConcurrencyLimits, checkCapacity = checkDeviceCapacity, acquireSlot = acquireBuildSlot, releaseSlot = releaseBuildSlot, ensureDevice = ensureOwnedDevice, listSystemImages = listInstalledSystemImages, listDeviceProfiles, ensureDeviceBooted = ensureBooted, resolveAvdSerial = resolveOwnedAvdSerialAsync, waitForDeviceBoot = waitForBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro = resolveProjectMetro, warmMetro: prewarmMetro = warmMetro, startServer = startDevServer, readState = readWorkspaceState$1, pidAlive = pidExists, verifyCollector = verifyCollectorOwnership, verifyLaunched = verifyLaunch, ensureStorage = ensureWorkspaceStorageSafely, acquireLock = acquireBuildLock, releaseLock = releaseBuildLock, waitForBuild: waitForBuild$1 = waitForBuild, easAuth = checkEasAuth, resolveRemoteBuild = resolveRemote, uploadRemoteBuild = uploadRemote, resolveCacheProvider = resolveCacheProviderConfig, loadCacheProviderModule = loadCacheProvider, storedAppId: storedAppId$1 = storedAppId, install = installAndroidApp, launch = launchAndroidApp, launchRelease = launchAndroidReleaseApp, verifyReleaseLaunched = verifyAndroidReleaseLaunch, resolveDevClientScheme = (projectRoot, apkPath, options) => androidDevClientScheme(projectRoot, apkPath, {
451
451
  ...options,
452
452
  context
453
453
  }), spawn = (cmd, args, opts) => getExecutor().spawn(cmd, args, opts), kill = (pid, signal) => process.kill(pid, signal), createWriter = createNdjsonWriter, writeLaunch = writeWorkspaceLaunchAsync, writeState = writeWorkspaceStateAsync, recordBuild, recordStats = recordRunStats, recordCapacityRefusal: recordRefusal, readEstimates = readRunEstimates, now = Date.now, out = (line) => context ? context.output("stderr", `${line}\n`) : console.error(line), emit = (line) => context ? context.output("stdout", `${line}\n`) : console.log(line) } = {}) {
@@ -465,6 +465,7 @@ function resolveRunAndroidOptions({ context, root, json = false, remoteDevice: c
465
465
  metroCheck,
466
466
  useBuildCache,
467
467
  easProfile,
468
+ recordedBuild,
468
469
  resolveEasBuild,
469
470
  variantFlag,
470
471
  systemImageFlag,
@@ -610,7 +611,7 @@ async function localRunRefusal(budgetRefusal, target, keepsAvd, ensureImage, rec
610
611
  }
611
612
  async function runAndroid(options = {}) {
612
613
  const { context } = options;
613
- let { root, json, commandRemoteBackend, resolveSettingsFor, resolveRemoteDeviceContext, makeRemoteDeviceDeps, resolveEasBin, ensureRemoteMetro, ensureRemoteOwned, detectRemoteProviders, metroCheck, useBuildCache: requestedBuildCache, easProfile, resolveEasBuild, variantFlag, systemImageFlag, deviceProfileFlag, deviceFlag, waitFlag, waitConflict, acquireLease, makeRunLease, selectPool, onLeaseSignal, listDevices, deviceModel, deviceAbi, isEmulatorDevice, readApkPackage, getLimits, checkCapacity, acquireSlot, releaseSlot, ensureDevice, listSystemImages, listDeviceProfiles, ensureDeviceBooted, resolveAvdSerial, waitForDeviceBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro, prewarmMetro, startServer, readState, pidAlive, verifyCollector, verifyLaunched, ensureStorage, acquireLock, releaseLock, waitForBuild, easAuth, resolveRemoteBuild, uploadRemoteBuild, resolveCacheProvider, loadCacheProviderModule, storedAppId, install, launch, launchRelease, verifyReleaseLaunched, resolveDevClientScheme, spawn, kill, createWriter, writeLaunch, writeState, recordBuild, recordStats, recordCapacityRefusal: recordRefusal = recordCapacityRefusal, readEstimates, now, out, emit } = androidSlotOptions(options);
614
+ let { root, json, commandRemoteBackend, resolveSettingsFor, resolveRemoteDeviceContext, makeRemoteDeviceDeps, resolveEasBin, ensureRemoteMetro, ensureRemoteOwned, detectRemoteProviders, metroCheck, useBuildCache: requestedBuildCache, easProfile, recordedBuild: recordedBuildRequested, resolveEasBuild, variantFlag, systemImageFlag, deviceProfileFlag, deviceFlag, waitFlag, waitConflict, acquireLease, makeRunLease, selectPool, onLeaseSignal, listDevices, deviceModel, deviceAbi, isEmulatorDevice, readApkPackage, getLimits, checkCapacity, acquireSlot, releaseSlot, ensureDevice, listSystemImages, listDeviceProfiles, ensureDeviceBooted, resolveAvdSerial, waitForDeviceBoot, dataFreeBytes, trimCaches, wipeDevice, resolveMetro, prewarmMetro, startServer, readState, pidAlive, verifyCollector, verifyLaunched, ensureStorage, acquireLock, releaseLock, waitForBuild, easAuth, resolveRemoteBuild, uploadRemoteBuild, resolveCacheProvider, loadCacheProviderModule, storedAppId, install, launch, launchRelease, verifyReleaseLaunched, resolveDevClientScheme, spawn, kill, createWriter, writeLaunch, writeState, recordBuild, recordStats, recordCapacityRefusal: recordRefusal = recordCapacityRefusal, readEstimates, now, out, emit } = androidSlotOptions(options);
614
615
  const progress = options.progress ?? NO_BUILD_PROGRESS;
615
616
  const slot = validateDeviceSlot(options.slot);
616
617
  const started = now();
@@ -783,6 +784,7 @@ async function runAndroid(options = {}) {
783
784
  signal: context.signal,
784
785
  slot,
785
786
  easProfile,
787
+ recordedBuild: recordedBuildRequested,
786
788
  variant: variantFlag,
787
789
  systemImage: systemImageFlag,
788
790
  deviceProfile: deviceProfileFlag,
@@ -820,6 +822,10 @@ async function runAndroid(options = {}) {
820
822
  };
821
823
  const { build: buildPlan, isExpo, cacheProviderConfig } = plan;
822
824
  const { variant, release } = buildPlan;
825
+ const recordedLookup = lookupRecordedBuild(recordedBuildRequested, root, {
826
+ platform: "android",
827
+ configuration: variant
828
+ });
823
829
  const runtimeKind = integration.runtimeKind(buildPlan);
824
830
  const appMode = runtimeKind === "process" ? "process" : runtimeKind === "metro" ? "development" : "release";
825
831
  record.configuration = variant ?? "debug";
@@ -1174,7 +1180,7 @@ async function runAndroid(options = {}) {
1174
1180
  logsDir,
1175
1181
  root
1176
1182
  });
1177
- const acquiredArtifact = await acquireAndroidArtifact({
1183
+ const acquiredArtifact = await acquireAndroidArtifactOrRecorded(recordedLookup.build, {
1178
1184
  context,
1179
1185
  root,
1180
1186
  buildLog,
@@ -1,6 +1,6 @@
1
1
  import { D as ownership_claim_exports, T as process_identity_exports, l as cancellableSleep, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { it as settingValueAt } from "./settings-B5IBDfTx.mjs";
3
- import { Q as pickDefaultSystemImage, d as androidToolPath, j as hostSystemImageArch, kt as recordInstalledSystemImageAsync, o as androidHome, z as listInstalledSystemImages } from "./android-Iq0M2t2d.mjs";
2
+ import { it as settingValueAt } from "./settings-Bap-qjnp.mjs";
3
+ import { Q as pickDefaultSystemImage, d as androidToolPath, j as hostSystemImageArch, kt as recordInstalledSystemImageAsync, o as androidHome, z as listInstalledSystemImages } from "./android-SJx1V3R3.mjs";
4
4
  import { createHash } from "node:crypto";
5
5
  import { existsSync, readFileSync, realpathSync, statfsSync } from "node:fs";
6
6
  import { isAbsolute, join } from "node:path";
@@ -2,7 +2,7 @@ import { n as SettingsObject, t as AndroidLayout } from "./ios-CDvlmUs7.mjs";
2
2
  import { r as createNdjsonWriter } from "./exec-DnYc4HGH.mjs";
3
3
  import { readFileSync, writeFileSync } from "node:fs";
4
4
  import { StimContext, hostSimulatorArch } from "@stim-cli/core";
5
- import { ANDROID_EMULATOR_APPS, BuildPhase, BuildPlanPayload, Endpoint, RunEstimates, SettingScope, WebViewport, machineCapacity } from "@stim-cli/core/state";
5
+ import { ANDROID_EMULATOR_APPS, BuildPhase, BuildPlanPayload, Endpoint, RunEstimates, SettingScope, TailnetIdentity, WebViewport, machineCapacity } from "@stim-cli/core/state";
6
6
  import { readFileSync as readFileSync$1 } from "fs";
7
7
  import { Command } from "commander";
8
8
  import "@stim-cli/core/noise-session";
@@ -370,6 +370,8 @@ interface BuildMachineReport {
370
370
  fingerprint?: string;
371
371
  deviceId?: string;
372
372
  requestedAt?: string;
373
+ /** The tailnet this machine was signed in to when it first reached the machine; absent for a pairing from before it was kept. */
374
+ tailnet?: TailnetIdentity;
373
375
  expiresAt?: string;
374
376
  host?: NonNullable<HelloResult["host"]>;
375
377
  /** For an approved machine: whether it would take this project's build now, and every reason it would not. */
package/dist/api.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as CompilationCacheActivity, a as BuildMachinesInspection, c as TailnetMachineIo, d as BudgetReport, f as DoctorPlatform, g as CcacheActivity, h as AndroidFacts, n as WebLaunched, o as GeneratedTickets, p as Finding, s as KeyConfirmer, v as IosFacts } from "./android-project-DhO6el8N.mjs";
1
+ import { _ as CompilationCacheActivity, a as BuildMachinesInspection, c as TailnetMachineIo, d as BudgetReport, f as DoctorPlatform, g as CcacheActivity, h as AndroidFacts, n as WebLaunched, o as GeneratedTickets, p as Finding, s as KeyConfirmer, v as IosFacts } from "./android-project-v_1nej_x.mjs";
2
2
  import { a as WorkspaceLaunchPlatform } from "./ios-CDvlmUs7.mjs";
3
3
  import "./exec-DnYc4HGH.mjs";
4
4
  import "./pull-request-eODyIqZF.mjs";
@@ -45,7 +45,10 @@ interface StartFacts {
45
45
  //#region src/commands/android/build.d.ts
46
46
  type AndroidBuildOptions = Omit<Extract<PlatformBuildOptions, {
47
47
  platform: "android";
48
- }>, "platform">;
48
+ }>, "platform"> & {
49
+ /** Downloads this EAS profile's completed development build instead of compiling; not part of the Desktop transport. */
50
+ easProfile?: string;
51
+ };
49
52
  interface AndroidBuildFacts {
50
53
  /** Owned copy, retained with this workspace until explicitly removed. */
51
54
  apkPath: string;
@@ -89,7 +92,10 @@ interface MacosBuildFacts {
89
92
  //#region src/commands/ios/build.d.ts
90
93
  type IosBuildOptions = Omit<Extract<PlatformBuildOptions, {
91
94
  platform: "ios";
92
- }>, "platform">;
95
+ }>, "platform"> & {
96
+ /** Downloads this EAS profile's completed development build instead of compiling; not part of the Desktop transport. */
97
+ easProfile?: string;
98
+ };
93
99
  interface IosBuildFacts {
94
100
  /** Owned simulator app, retained with this workspace until explicitly removed. */
95
101
  appPath: string;
@@ -228,11 +234,13 @@ interface Inspection {
228
234
  machines: MachineReport[];
229
235
  }
230
236
  /**
231
- * Reports the device-host approval of each remote machine, separate from its build approval. Only --fix makes a setup
232
- * ticket or forgets credentials; every server key stays pinned.
237
+ * Reports the device-host approval of each remote machine, separate from its build approval. Only `fix` makes a setup
238
+ * ticket, and only `forget`, which defaults to `fix`, forgets the credentials of machines not in `entries`; every
239
+ * server key stays pinned.
233
240
  */
234
- declare function inspectDeviceHostMachines({ fix, version, tickets, operation, confirmKey }: {
241
+ declare function inspectDeviceHostMachines({ fix, forget, version, tickets, operation, confirmKey }: {
235
242
  fix: boolean;
243
+ forget?: boolean;
236
244
  version?: string;
237
245
  tickets?: GeneratedTickets;
238
246
  operation?: StimContext;
@@ -856,6 +864,12 @@ interface StimOptions {
856
864
  onProgress?: (event: StimProgress) => void;
857
865
  }
858
866
  type StimRunOptions = PlatformRunOptions & {
867
+ /**
868
+ * iOS and Android: install and launch the app the last `build` with the same scheme and configuration or variant
869
+ * recorded in this workspace, without fingerprinting, building or replacing its JS. Refuses with
870
+ * STIM_NO_RECORDED_BUILD when there is none. Not part of the private Desktop transport.
871
+ */
872
+ recordedBuild?: boolean;
859
873
  signal?: AbortSignal;
860
874
  };
861
875
  type StimRunResult = {
package/dist/api.mjs CHANGED
@@ -1,32 +1,32 @@
1
1
  import { C as operationState, D as ownership_claim_exports, a as trackReportResource, d as throwIfCancelled, f as WorkspaceProcessCleanupError, i as runReport, u as cancelledError } from "./exec-CGuDzt40.mjs";
2
- import { E as workspaceDir, a as recordWorkspaceUseAsync, k as workspaceLogsDir$1, v as ensureWorkspaceStorageAsync } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { l as phaseLine } from "./command-output-DjExb_tZ.mjs";
4
- import { D as upsertProject, _t as validateDeviceSlot, b as refuseRelativeStimPaths, k as withConfigLockAsync$1, m as getProject } from "./config-BW0fAtoK.mjs";
5
- import { Vt as repoRootAsync, Z as resolveProjectSettingsAsync, _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys } from "./settings-B5IBDfTx.mjs";
6
- import { c as projectProblem, f as projectRegistry, i as findProjectRoot$1, r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-DU3jjnBE.mjs";
7
- import { n as macosDir } from "./state-DSOUqO-o.mjs";
8
- import { c as ensureHomeIdentity, s as workspaceShareURL } from "./stim-desktop-_WTria-r.mjs";
2
+ import { E as workspaceDir, a as recordWorkspaceUseAsync, k as workspaceLogsDir$1, v as ensureWorkspaceStorageAsync } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
4
+ import { A as withConfigLockAsync$1, O as upsertProject, b as refuseRelativeStimPaths, m as getProject, vt as validateDeviceSlot } from "./config-BA3TgoIP.mjs";
5
+ import { Vt as repoRootAsync, Z as resolveProjectSettingsAsync, _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys } from "./settings-Bap-qjnp.mjs";
6
+ import { c as projectProblem, f as projectRegistry, i as findProjectRoot$1, r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-Clk1JAWL.mjs";
7
+ import { n as macosDir } from "./state-B4B5P4LU.mjs";
8
+ import { c as ensureHomeIdentity, s as workspaceShareURL } from "./stim-desktop-D0P_bzmd.mjs";
9
9
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
10
- import { $ as tapBuildLog, Q as startBuildProgress, X as recordFinishedBuild, tt as errorRemedy } from "./workspaces-B9v5V7Es.mjs";
11
- import { _t as runCancellationSignal, vt as withNativeBuildRun } from "./toolchain-CYonNjd_.mjs";
12
- import { d as resolveBuildPlacement } from "./selection-CH-MUVGD.mjs";
13
- import { c as stopWorkspaceNow } from "./stop-vX4w3_8V.mjs";
14
- import { r as runReload } from "./reload-CC3sNo10.mjs";
15
- import { m as warmWorktreeTarget, p as removeWorktreeTarget } from "./worktree-C3N86KpI.mjs";
16
- import { i as restoreLightenedDependencies } from "./lightened-ALwQcQtV.mjs";
17
- import { c as startDevServer } from "./start-WTMumMHi.mjs";
18
- import { s as recordDoctorCheck } from "./doctor-watchman-r7M9UPi0.mjs";
19
- import { c as readSettingsPayload, s as readSettingsContext, t as SettingsRefusal } from "./settings-payload-Bxw3hid5.mjs";
20
- import { a as readDoctorReport } from "./doctor-B5uEZiKp.mjs";
21
- import { i as readGcReport, n as executeGc, o as withGcMaintenanceClaim } from "./gc-C7YxKNci.mjs";
22
- import { r as readWorkspaceLogs, t as followWorkspaceLogs } from "./logs-DWT7jGpF.mjs";
10
+ import { $ as tapBuildLog, Q as startBuildProgress, X as recordFinishedBuild, tt as errorRemedy } from "./workspaces-Dh5N70qW.mjs";
11
+ import { _t as runCancellationSignal, vt as withNativeBuildRun } from "./toolchain-DCnWAxQL.mjs";
12
+ import { L as resolveBuildPlacement } from "./support-BJbXovoO.mjs";
13
+ import { c as stopWorkspaceNow } from "./stop-C3d5qG7C.mjs";
14
+ import { r as runReload } from "./reload-A_axEbeS.mjs";
15
+ import { m as warmWorktreeTarget, p as removeWorktreeTarget } from "./worktree-Yw3EW77B.mjs";
16
+ import { i as restoreLightenedDependencies } from "./lightened-B6TnpHMX.mjs";
17
+ import { c as startDevServer } from "./start-YpT_JpQQ.mjs";
18
+ import { s as recordDoctorCheck } from "./doctor-watchman-TZxYt_98.mjs";
19
+ import { c as readSettingsPayload, s as readSettingsContext, t as SettingsRefusal } from "./settings-payload-D5jjhmrw.mjs";
20
+ import { a as readDoctorReport } from "./doctor-DV639Iw_.mjs";
21
+ import { i as readGcReport, n as executeGc, o as withGcMaintenanceClaim } from "./gc-DiUhrVFo.mjs";
22
+ import { r as readWorkspaceLogs, t as followWorkspaceLogs } from "./logs-CO0CJRiC.mjs";
23
23
  import { t as readProjectStats } from "./stats-report-BVRCqwWA.mjs";
24
- import { n as buildAndroidOperation, t as buildIosOperation } from "./build-D7SuVoRX.mjs";
25
- import { a as readAndroidBuildPlan, i as runAndroidOperation } from "./android-D7qjT2fq.mjs";
26
- import { i as readIosBuildPlan, r as runIosOperation } from "./ios-DSBs9c6d.mjs";
27
- import { a as buildMacosBundle, i as planMacos, n as runMacos } from "./macos-CtBtA_hW.mjs";
28
- import { t as runWeb } from "./web-BdaMBr2O.mjs";
29
- import { t as mutateSetting } from "./settings-write-C6d7EC54.mjs";
24
+ import { n as buildAndroidOperation, t as buildIosOperation } from "./build-B_Dx9SKJ.mjs";
25
+ import { a as readAndroidBuildPlan, i as runAndroidOperation } from "./android-e9WP10cE.mjs";
26
+ import { i as readIosBuildPlan, r as runIosOperation } from "./ios-BhpUWyN7.mjs";
27
+ import { a as buildMacosBundle, i as planMacos, n as runMacos } from "./macos-B1aCXhem.mjs";
28
+ import { t as runWeb } from "./web-D2En0Wa5.mjs";
29
+ import { t as mutateSetting } from "./settings-write-C5huI-iS.mjs";
30
30
  import { randomBytes } from "node:crypto";
31
31
  import { mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync } from "node:fs";
32
32
  import { stripVTControlCharacters } from "node:util";
@@ -723,6 +723,11 @@ async function build(context, options) {
723
723
  }
724
724
  }
725
725
  async function run(context, options) {
726
+ if (options.recordedBuild && ("device" in options && options.device !== void 0 || "remote" in options && options.remote !== void 0)) throw new StimError({
727
+ code: "STIM_BAD_ARG",
728
+ message: "recordedBuild installs a local simulator or emulator build, not a physical device or a remote host.",
729
+ remedy: "Drop device and remote, or run without recordedBuild."
730
+ });
726
731
  const root = context.projectRoot;
727
732
  switch (options.platform) {
728
733
  case "ios": {
@@ -1,5 +1,5 @@
1
- import { y as sharedBuildCache } from "./workspace-state-BdZ-QgmB.mjs";
2
- import { O as findBuildTool } from "./android-Iq0M2t2d.mjs";
1
+ import { y as sharedBuildCache } from "./workspace-state-BhwAJBgA.mjs";
2
+ import { O as findBuildTool } from "./android-SJx1V3R3.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import { closeSync, fstatSync, openSync, readFileSync, readSync, realpathSync, renameSync, rmSync } from "node:fs";
5
5
  import { basename, dirname, join } from "node:path";
@@ -1,16 +1,16 @@
1
1
  import { D as ownership_claim_exports, d as throwIfCancelled, w as withDrainingCancellation } from "./exec-CGuDzt40.mjs";
2
- import { E as workspaceDir } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { _ as stepTimer, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DjExb_tZ.mjs";
4
- import { On as easAuthNote, kn as isEasAuthFailureText, n as CCACHE_UNAVAILABLE, r as ccacheActivityLine, t as CCACHE_NOT_RUN, wn as RESOLVE_TIMEOUT_MS } from "./ccache-ChBMXlBq.mjs";
5
- import { _t as runCancellationSignal, lt as cancelledFailure } from "./toolchain-CYonNjd_.mjs";
6
- import { b as prepareProviderDownloadDir, x as providerDownloadPath } from "./build-cache-Cqj4FGnX.mjs";
7
- import { c as offloadPlacement, i as closeOffload, l as placementLoad, n as buildPlacementCandidates, o as offloadBuild, r as chooseBuildMachine, u as remotePhaseText } from "./client-kU37gURU.mjs";
8
- import { a as missingPackageManagerRemedy, i as fingerprintMismatchRemedy, l as requireLocalBuild, n as automaticBuild, o as namedBuildMachine, t as OffloadRefusal } from "./selection-CH-MUVGD.mjs";
9
- import { f as formatDiagnostic } from "./react-native-build-CuvNPt-q.mjs";
10
- import { u as skippedMissReason } from "./prebuild-BfJII57G.mjs";
11
- import { t as buildPlacementRecord } from "./placement-log-BsGvKLtU.mjs";
12
- import { n as settleArtifactUploads, t as acquireArtifact } from "./acquire-artifact-B0SWoVNt.mjs";
13
- import { a as PLATFORM, h as displayPath } from "./support-BNe1_Hg7.mjs";
2
+ import { E as workspaceDir } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { _ as stepTimer, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-T3cDctRE.mjs";
4
+ import { C as CCACHE_UNAVAILABLE, Gn as RESOLVE_TIMEOUT_MS, S as CCACHE_NOT_RUN, Xn as isEasAuthFailureText, Yn as easAuthNote, w as ccacheActivityLine } from "./device-capacity-CpAVcKgq.mjs";
5
+ import { _t as runCancellationSignal, lt as cancelledFailure } from "./toolchain-DCnWAxQL.mjs";
6
+ import { S as providerDownloadPath, x as prepareProviderDownloadDir } from "./build-cache-BW8T4oD2.mjs";
7
+ import { c as offloadPlacement, i as closeOffload, l as placementLoad, n as buildPlacementCandidates, o as offloadBuild, r as chooseBuildMachine, u as remotePhaseText } from "./client-KSWIeQLA.mjs";
8
+ import { A as fingerprintMismatchRemedy, D as OffloadRefusal, F as requireLocalBuild, M as namedBuildMachine, O as automaticBuild, j as missingPackageManagerRemedy } from "./support-BJbXovoO.mjs";
9
+ import { f as formatDiagnostic } from "./react-native-build-CJega_NM.mjs";
10
+ import { u as skippedMissReason } from "./prebuild-Di2IhUue.mjs";
11
+ import { a as PLATFORM, h as displayPath } from "./support-Vckdzrmk.mjs";
12
+ import { n as settleArtifactUploads, r as retainFailedTranscript, t as acquireArtifact } from "./acquire-artifact-DGTHCd0Q.mjs";
13
+ import { t as buildPlacementRecord } from "./placement-log-B8RCSzOm.mjs";
14
14
  import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
15
15
  import { rmSync } from "node:fs";
16
16
  import { join } from "node:path";
@@ -634,7 +634,7 @@ async function acquireAndroidArtifact({ context, root, buildLog, writer, recipe,
634
634
  diagnostics: extracted,
635
635
  buildDiagnostics: diagnostics,
636
636
  lines: extracted.length ? [] : tail(built.lastLines),
637
- logPath: displayPath(root, buildLog)
637
+ logPath: displayPath(root, retainFailedTranscript(buildLog))
638
638
  });
639
639
  throw new AndroidRecipeRefusal(phaseFailure);
640
640
  }
@@ -809,5 +809,27 @@ async function acquireAndroidArtifact({ context, root, buildLog, writer, recipe,
809
809
  function tail(lines, n = FALLBACK_LINES) {
810
810
  return (Array.isArray(lines) ? lines : []).slice(-n);
811
811
  }
812
+ async function acquireAndroidArtifactOrRecorded(recorded, request, deps) {
813
+ return recorded ? recordedAndroidArtifact(recorded) : acquireAndroidArtifact(request, deps);
814
+ }
815
+ function recordedAndroidArtifact(recorded) {
816
+ return {
817
+ ok: true,
818
+ artifact: {
819
+ apkPath: recorded.appPath,
820
+ androidPackage: recorded.bundleId,
821
+ apkPackage: recorded.bundleId,
822
+ fingerprintCheck: null,
823
+ release: () => {},
824
+ waitedForBuild: null,
825
+ ccache: CCACHE_NOT_RUN,
826
+ uploadPending: null,
827
+ providerUpload: null,
828
+ providerName: null,
829
+ remote: null,
830
+ abandonedRemote: false
831
+ }
832
+ };
833
+ }
812
834
  //#endregion
813
- export { acquireAndroidArtifact as t };
835
+ export { acquireAndroidArtifactOrRecorded as n, acquireAndroidArtifact as t };