stim 1.20.2 → 1.22.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.
- package/README.md +141 -8
- package/dist/acquire-artifact-Co2k4f7O.mjs +171 -0
- package/dist/act-DsuqEkiM.mjs +2801 -0
- package/dist/activity-CMLmzp7o.mjs +1397 -0
- package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-DUFaTMdd.mjs} +23 -67
- package/dist/{android-DCKZrNvV.mjs → android-ByRMUoiJ.mjs} +157 -93
- package/dist/{android-Mz_Inn3w.mjs → android-C7sVmyI9.mjs} +299 -116
- package/dist/{android-Dlzxshgp.mjs → android-DGkNqa_c.mjs} +5 -5
- package/dist/{android-HqP1_vB_.mjs → android-DR5lZ2Az.mjs} +2 -2
- package/dist/android-cas-compiler.mjs +2 -2
- package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-ngferVq2.mjs} +7 -6
- package/dist/android-project-BCAAmMwz.mjs +12 -0
- package/dist/android-project-DVWyCbWU.d.mts +391 -0
- package/dist/api.d.mts +810 -64
- package/dist/api.mjs +782 -1
- package/dist/{artifact-HSwkIWEQ.mjs → artifact-8EY8SAPw.mjs} +240 -213
- package/dist/{artifact-D3czlUvT.mjs → artifact-DJPy518Y.mjs} +203 -164
- package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
- package/dist/{browser-web-CA-F1GQo.mjs → browser-web-Bcv99PBM.mjs} +194 -64
- package/dist/budget-Cvwn54qV.mjs +9285 -0
- package/dist/{build-DYDbfkk5.mjs → build-CabC3G23.mjs} +153 -98
- package/dist/build-cache-Dv7RN200.mjs +602 -0
- package/dist/build-plan-DUC8Ka9y.mjs +248 -0
- package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DSeQjt-Q.mjs} +2 -2
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{ccache-zdKiYQ3E.mjs → ccache-Btwc36-I.mjs} +10 -9
- package/dist/{cdp-Dq_ypAlJ.mjs → cdp-3fwICjzi.mjs} +18 -5
- package/dist/{chrome-BnzZMqsR.mjs → chrome-Bbw689-6.mjs} +7 -4
- package/dist/{cli-CLP3diBm.mjs → cli-CHZa9Lvk.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/client-OyRoEuSr.mjs +1577 -0
- package/dist/collector-run.d.mts +4 -40
- package/dist/collector-run.mjs +9 -8
- package/dist/{command-output-BTy8hZ0F.mjs → command-output-gwpm28fu.mjs} +1 -1
- package/dist/config-DlrsduwG.mjs +955 -0
- package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-x9rN6bhs.mjs} +14 -4
- package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-1I9KZT1Y.mjs} +20 -5
- package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
- package/dist/{dev-client-DAWVIGBu.mjs → dev-client-BSDR5h3F.mjs} +2 -2
- package/dist/{device-BECOiufl.mjs → device-B-L3Fbxy.mjs} +91 -34
- package/dist/device-DklWZLqb.mjs +1068 -0
- package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-DK5_EwRS.mjs} +42 -13
- package/dist/device-host-worker.mjs +76 -79
- package/dist/{device-ios-COSi6oS1.mjs → device-ios-DoB6KFCO.mjs} +77 -51
- package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-xJPQ_QQG.mjs} +14 -26
- package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-BMkdsefq.mjs} +5 -5
- package/dist/{doctor-kfMBnUw6.mjs → doctor-Bo7BXLux.mjs} +271 -320
- package/dist/{doctor-CB8oZKCk.mjs → doctor-D5_EzwfA.mjs} +186 -91
- package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
- package/dist/doctor-fingerprint.mjs +19 -0
- package/dist/doctor-thjWAV0z.mjs +2 -0
- package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-N2wDotwQ.mjs} +40 -21
- package/dist/{eas-build-JyfqyHfC.mjs → eas-build-CwknaQYj.mjs} +53 -20
- package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-CSgAulr5.mjs} +41 -214
- package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-DlY_serQ.mjs} +230 -11
- package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-DBWO2rxE.mjs} +172 -82
- package/dist/exec-DEoAhcze.mjs +858 -0
- package/dist/exec-DnYc4HGH.d.mts +78 -0
- package/dist/{gc-qWOMdnER.mjs → gc-CXxN-4SE.mjs} +1091 -1029
- package/dist/gc-DnNDQyaP.mjs +3 -0
- package/dist/{guide-G9cAbVAc.mjs → guide-Br0LEfKy.mjs} +1165 -297
- package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-B-9f-jkd.mjs} +10 -8
- package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DZAPrcro.mjs} +34 -19
- package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
- package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-FIRx9X2f.mjs} +77 -43
- package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-_awYSpfv.mjs} +35 -22
- package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-BdzE668-.mjs} +49 -27
- package/dist/idle-C4cZ757K.d.mts +24 -0
- package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DDg3SdvY.mjs} +11 -10
- package/dist/ios-CDvlmUs7.d.mts +24 -0
- package/dist/{ios-BwVCF7oA.mjs → ios-Ds1clbIt.mjs} +8 -8
- package/dist/{ios-device-D7pi2Sca.mjs → ios-device--h_-8ENa.mjs} +51 -26
- package/dist/{ios-device-B5veSDDQ.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
- package/dist/{ios-RkW4pnQf.mjs → ios-hcBpnEGk.mjs} +200 -93
- package/dist/{ios-Ce7bc7br.mjs → ios-pm4nL6By.mjs} +160 -108
- package/dist/{ios-project-K9hY_Jab.mjs → ios-project-CZhKODF3.mjs} +13 -13
- package/dist/ios-signing-BtAffm0A.mjs +489 -0
- package/dist/{ios-state-CBLe1xYw.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
- package/dist/{ios-nOLJGVdy.mjs → ios-xtlRHaeB.mjs} +1 -1
- package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Bwhh4S7V.mjs} +30 -25
- package/dist/{launch-C3qJ6Agb.mjs → launch-BjxemNpK.mjs} +85 -543
- package/dist/{launch-F4sOqAhB.mjs → launch-CCzXlc8r.mjs} +91 -90
- package/dist/logs-BfwwadsZ.mjs +479 -0
- package/dist/logs-jTS_lHSo.mjs +248 -0
- package/dist/{macos-D7uDvO-z.mjs → macos-DVlSSyUg.mjs} +1 -1
- package/dist/macos-NfV2D7dO.mjs +694 -0
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +123 -248
- package/dist/{metro-DnCEjCxs.mjs → metro-DiXtA3Ty.mjs} +107 -30
- package/dist/metro-gateway-CKZqKqx7.mjs +209 -0
- package/dist/{named-ports-4WopRPg-.mjs → named-ports-DkEzOfzO.mjs} +42 -90
- package/dist/native-android-CqgnOgsT.mjs +645 -0
- package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
- package/dist/native-gradle-inputs-Dnh84Zbd.mjs +211 -0
- package/dist/native-inputs-TRTTTRxt.mjs +91 -0
- package/dist/native-run-NwUuxbkg.mjs +276 -0
- package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-B7KIafpM.mjs} +11 -9
- package/dist/native-source-Y0yLhFyQ.mjs +133 -0
- package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-D_VOfFL7.mjs} +26 -18
- package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-BYDOHWLN.mjs} +104 -60
- package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
- package/dist/offload-worker.d.mts +59 -41
- package/dist/offload-worker.mjs +478 -115
- package/dist/operation-exec-BW0em61G.mjs +171 -0
- package/dist/{ownership-DCtw_2IA.mjs → ownership-C5fo5Edb.mjs} +3 -3
- package/dist/{page-DRHy329N.mjs → page-DBL2PiUU.mjs} +12 -5
- package/dist/paths-BsJMoPP2.mjs +12 -0
- package/dist/paths-DQtTgsBf.mjs +42 -0
- package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BnGgJRRZ.mjs} +5 -5
- package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-DIsMtN-d.mjs} +15 -11
- package/dist/{ports-DdSUicVo.mjs → ports-Cy1RkmuQ.mjs} +3 -3
- package/dist/prebuild-D4JoEAEs.mjs +484 -0
- package/dist/{project-_phNIJfs.mjs → project-wM_XFTvE.mjs} +65 -37
- package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-W1IuLXDt.mjs} +102 -20
- package/dist/pull-request-eODyIqZF.d.mts +124 -0
- package/dist/pull-requests.d.mts +2 -120
- package/dist/pull-requests.mjs +2 -2
- package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-6OZ7MSM7.mjs} +121 -72
- package/dist/{gradle-DSrXb6lG.mjs → react-native-build-Dvd8hC21.mjs} +292 -15
- package/dist/react-native-doctor-DsoSF1Y9.mjs +234 -0
- package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-4u1Rn-GR.mjs} +71 -39
- package/dist/{recordings-D0d5aQt0.mjs → recordings-CQmfzAh7.mjs} +12 -9
- package/dist/registration-BcRgF6Ox.mjs +51 -0
- package/dist/{reload-C8JhxjSh.mjs → reload-BzkYabB-.mjs} +94 -47
- package/dist/reload-D7AVlb8N.mjs +2 -0
- package/dist/{remote-BiR6aYjy.mjs → remote-DjGDmlTZ.mjs} +26 -18
- package/dist/result-D2Ykz_iD.mjs +435 -0
- package/dist/{run-BtPgpKks.mjs → run-DidHghD1.mjs} +5 -5
- package/dist/selection-DSMbWEX2.mjs +620 -0
- package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CafzuyFB.mjs} +3 -4
- package/dist/{server-command-CTtCkmcQ.mjs → server-command-C6QjeupS.mjs} +14 -7
- package/dist/{server-expo-DsguMGUF.mjs → server-expo-CrjB29pq.mjs} +54 -11
- package/dist/server-expo-D58c9L0M.mjs +2 -0
- package/dist/{settings-B717odTD.mjs → settings-C7O8A6ZI.mjs} +309 -119
- package/dist/settings-DpR-1Wnn.mjs +114 -0
- package/dist/settings-write-CzD60rOD.mjs +360 -0
- package/dist/settings.schema.json +176 -16
- package/dist/{simslim-CCr3rE-A.mjs → simslim-BNckWpXi.mjs} +14 -12
- package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-CbfmNgM6.mjs} +15 -20
- package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
- package/dist/stage-Bps5oius.mjs +200 -0
- package/dist/{start-TXeMmmO2.mjs → start-Br-oxqMD.mjs} +1 -1
- package/dist/start-EojN4WFz.mjs +1364 -0
- package/dist/{state-D1Icyjlu.mjs → state--smjFSTL.mjs} +55 -13
- package/dist/{state-CG_OFoaA.mjs → state-08I3hw3_.mjs} +3 -2
- package/dist/{stats-BoY5sEPU.mjs → stats-D3GerlFW.mjs} +7 -13
- package/dist/stats-report-BzaPrRm6.mjs +16 -0
- package/dist/{status-BTA7kKiQ.mjs → status-BRROykC8.mjs} +7 -5
- package/dist/status-EvrK72L2.mjs +2 -0
- package/dist/{status-WgFbkRzj.mjs → status-WBDajew2.mjs} +554 -452
- package/dist/{status-watch-C23ILtf9.mjs → status-watch-Bg_u-pwR.mjs} +222 -25
- package/dist/status-worker.d.mts +1 -0
- package/dist/status-worker.mjs +19 -0
- package/dist/stim-desktop-D5OGpYZM.mjs +112 -0
- package/dist/{stop-DR6VoDIk.mjs → stop-DTZ9uTw3.mjs} +2 -2
- package/dist/{stop-DPEhunlw.mjs → stop-Dky10AEJ.mjs} +33 -23
- package/dist/{stop-BNmBMi1F.mjs → stop-Mv6W9FAk.mjs} +137 -98
- package/dist/supervisor-run.d.mts +8 -17
- package/dist/supervisor-run.mjs +56 -28
- package/dist/{support-CwjbFs9H.mjs → support-CNioewsd.mjs} +14 -14
- package/dist/{support-DMTqj3Hm.mjs → support-yUiOjnVY.mjs} +20 -13
- package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
- package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
- package/dist/toolchain-BY8X8HXx.mjs +2 -0
- package/dist/toolchain-DpJMHq0n.mjs +876 -0
- package/dist/{trigger-CigAYjeL.mjs → trigger-Cbyc41d_.mjs} +21 -6
- package/dist/trigger-yb_nFzPF.mjs +2 -0
- package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-CA3TgT3-.mjs} +263 -156
- package/dist/web-CZ07gd77.mjs +2 -0
- package/dist/{web-BDBMxDpx.mjs → web-DKx6yoFA.mjs} +20 -14
- package/dist/web-run.mjs +13 -12
- package/dist/windows-report.d.mts +1 -0
- package/dist/windows-report.mjs +18 -0
- package/dist/windows-report.ps1 +43 -0
- package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-U08dEzhG.mjs} +62 -58
- package/dist/{workspaces-C36s2jb9.mjs → workspaces-CpANmBlq.mjs} +1723 -1286
- package/dist/{worktree-CgvJYJ-Q.mjs → worktree-CHecZ4Oq.mjs} +1097 -547
- package/dist/worktree-ZqZVjD9K.mjs +2 -0
- package/dist/xcode-BXn9-xYx.mjs +896 -0
- package/package.json +7 -5
- package/shim/android-audio/Main.java +24 -0
- package/shim/android-audio/README.md +17 -0
- package/shim/android-audio.jar +0 -0
- package/shim/android-optimizations.gradle +7 -5
- package/dist/activity-BSV745Kz.mjs +0 -629
- package/dist/api-qvOzWyfO.mjs +0 -154
- package/dist/api-run.mjs +0 -294
- package/dist/app-install-BIKtMfPq.mjs +0 -896
- package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
- package/dist/budget-f7516Zk0.mjs +0 -4106
- package/dist/build-facts-DcLv2HSd.d.mts +0 -111
- package/dist/cancellation-C_22VQTH.mjs +0 -24
- package/dist/client-qQAaXSUs.mjs +0 -1771
- package/dist/config-BYDxlMY3.mjs +0 -562
- package/dist/device-DuiPJQSn.mjs +0 -290
- package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
- package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
- package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
- package/dist/exec-DqKo9GKJ.mjs +0 -268
- package/dist/git-DDfFzkMm.mjs +0 -45
- package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
- package/dist/logs-BGrEUaEs.mjs +0 -383
- package/dist/macos-Ch5VJmcS.mjs +0 -584
- package/dist/metro-gateway-CX9Xlkq2.mjs +0 -103
- package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
- package/dist/native-android-D5qc3-_v.mjs +0 -226
- package/dist/native-gradle-inputs-BsLRrl7u.mjs +0 -349
- package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
- package/dist/plan-C4TjdPsR.mjs +0 -260
- package/dist/prebuild-DYbucPXy.mjs +0 -212
- package/dist/preview-78a9kR_-.mjs +0 -1011
- package/dist/react-native-build-CtCccJtb.mjs +0 -239
- package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
- package/dist/remote-cache-OyOyVIS3.mjs +0 -526
- package/dist/result-CaJg5Iat.mjs +0 -186
- package/dist/server-expo-Bigriskl.mjs +0 -2
- package/dist/settings-BORNaaCO.mjs +0 -402
- package/dist/settings-vk3mJGSm.d.mts +0 -13
- package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
- package/dist/stage-KNTQopqv.mjs +0 -157
- package/dist/start-BWqzODpb.mjs +0 -1116
- package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
- package/dist/swiftpm-macos-DRNVJWlb.mjs +0 -119
- package/dist/tailnet-Dh-qiYzG.mjs +0 -265
- package/dist/toolchain-BFkAcstd.mjs +0 -2
- package/dist/toolchain-DxSsNssu.mjs +0 -1657
- package/dist/trigger-9_USgmxz.mjs +0 -2
- package/dist/web-Dq-i3wzJ.mjs +0 -2
- package/dist/worktree-DpLdCHga.mjs +0 -2
- package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
- package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { a as
|
|
16
|
-
import {
|
|
17
|
-
import { a as
|
|
18
|
-
import {
|
|
19
|
-
import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-DCtw_2IA.mjs";
|
|
20
|
-
import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-BR677IDM.mjs";
|
|
1
|
+
import { m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
|
|
2
|
+
import { B as deviceSlotFileKey, C as saveConfig, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync, P as formatBytes, V as deviceSlotKey, _ as loadConfig, w as setDevice } from "./config-DlrsduwG.mjs";
|
|
3
|
+
import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-gwpm28fu.mjs";
|
|
4
|
+
import { L as workspaceDevServerMode } from "./project-wM_XFTvE.mjs";
|
|
5
|
+
import { c as pidExists, f as signalProcessTree } from "./metro-DiXtA3Ty.mjs";
|
|
6
|
+
import { En as restartedAppNote, Jt as LAUNCH_FATAL, Xt as RELEASE_VERIFY_WAIT_MS, Yt as LAUNCH_UNVERIFIED, Zt as VERIFY_TIMEOUT_MS, bn as installConflictKind, dn as androidAppProcess, fn as androidDevClientUrl, nn as unverifiedLaunchLines, qt as LAUNCH_BUNDLING, sn as ADB_INSTALL_TIMEOUT_MS, tn as unattributedLaunchLines } from "./budget-Cvwn54qV.mjs";
|
|
7
|
+
import { D as teardownOwnedAvd } from "./workspaces-CpANmBlq.mjs";
|
|
8
|
+
import { p as providerUploadOutcome } from "./build-cache-Dv7RN200.mjs";
|
|
9
|
+
import { $ as resetAdoptedAvd, i as androidDataFreeBytes, it as trimAndroidCaches, u as androidToolCwd } from "./android-C7sVmyI9.mjs";
|
|
10
|
+
import { o as workspaceLinks } from "./stim-desktop-D5OGpYZM.mjs";
|
|
11
|
+
import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-C5fo5Edb.mjs";
|
|
12
|
+
import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-CbfmNgM6.mjs";
|
|
13
|
+
import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
|
|
14
|
+
import { c as lostRefusal, s as lostLine, t as DEBUG_VERIFY_STEP_MS } from "./device-lease-run-xJPQ_QQG.mjs";
|
|
15
|
+
import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-DBWO2rxE.mjs";
|
|
16
|
+
import { i as launchOutcomeRecord } from "./native-runtime-B7KIafpM.mjs";
|
|
17
|
+
import { a as PLATFORM, b as noDeviceDiagnostic, h as displayPath, n as LAUNCH_FAILED, r as NO_DEVICE, t as INSTALL_FAILED } from "./support-yUiOjnVY.mjs";
|
|
18
|
+
import { a as reportAndroidResult, i as persistLastBuild, n as finishAndroidUpload } from "./result-D2Ykz_iD.mjs";
|
|
21
19
|
import { mkdirSync, openSync, statSync } from "node:fs";
|
|
22
20
|
import { basename, join } from "node:path";
|
|
21
|
+
import { ambientEnv } from "@stim-cli/core";
|
|
23
22
|
import chalk from "chalk";
|
|
24
23
|
//#region src/commands/android/collector.ts
|
|
25
24
|
function collectorEntry() {
|
|
@@ -91,7 +90,7 @@ async function startCollector({ root, slot = "default", serial, packageName, spa
|
|
|
91
90
|
cwd: androidToolCwd() ?? root,
|
|
92
91
|
detached: true,
|
|
93
92
|
stdio,
|
|
94
|
-
env:
|
|
93
|
+
env: ambientEnv()
|
|
95
94
|
});
|
|
96
95
|
child?.unref?.();
|
|
97
96
|
return child?.pid ?? null;
|
|
@@ -154,7 +153,7 @@ function androidMetroRuntime(prepare) {
|
|
|
154
153
|
})
|
|
155
154
|
};
|
|
156
155
|
}
|
|
157
|
-
async function verifyAndroidProcessRun({ root, slot, remoteDevice, verifyReleaseLaunched, serial, androidPackage, variant, logsDir, launchedAt, phase, embeddedJavaScript }) {
|
|
156
|
+
async function verifyAndroidProcessRun({ operation, root, slot, remoteDevice, verifyReleaseLaunched, serial, androidPackage, variant, logsDir, launchedAt, phase, embeddedJavaScript }) {
|
|
158
157
|
const readNativeCrashes = () => remoteDevice ? [] : captureNativeCrashes({
|
|
159
158
|
root,
|
|
160
159
|
slot,
|
|
@@ -162,7 +161,7 @@ async function verifyAndroidProcessRun({ root, slot, remoteDevice, verifyRelease
|
|
|
162
161
|
deviceId: serial,
|
|
163
162
|
appId: androidPackage,
|
|
164
163
|
since: launchedAt
|
|
165
|
-
}, logsDir);
|
|
164
|
+
}, logsDir, operation?.signal, operation?.env);
|
|
166
165
|
if (remoteDevice) {
|
|
167
166
|
phase("verify", chalk.yellow("UNVERIFIED: remote adapter launch accepted; process verification is unavailable"));
|
|
168
167
|
return { state: LAUNCH_UNVERIFIED };
|
|
@@ -171,9 +170,9 @@ async function verifyAndroidProcessRun({ root, slot, remoteDevice, verifyRelease
|
|
|
171
170
|
serial,
|
|
172
171
|
packageName: androidPackage
|
|
173
172
|
});
|
|
174
|
-
const crashes = readNativeCrashes();
|
|
173
|
+
const crashes = await readNativeCrashes();
|
|
175
174
|
if (processCheck?.verified && !crashes.length) {
|
|
176
|
-
phase("verify", `process alive ${formatDuration(processCheck.waitedMs ?? 0)} after launch (${variant}: no bundle fetch to observe)`);
|
|
175
|
+
phase("verify", `process alive ${formatDuration(processCheck.waitedMs ?? 0)} after launch (${variant ?? "debug"}: no bundle fetch to observe)`);
|
|
177
176
|
return { state: true };
|
|
178
177
|
}
|
|
179
178
|
if (processCheck?.reason === "probe-failed" && !crashes.length) {
|
|
@@ -186,7 +185,7 @@ async function verifyAndroidProcessRun({ root, slot, remoteDevice, verifyRelease
|
|
|
186
185
|
phase("", chalk.yellow(`${embeddedJavaScript ? "A release process" : "The app process"} exited before readiness. Run \`stim logs --errors\` for captured crash reports, or \`stim logs --source device\` for the full device output.`));
|
|
187
186
|
return { state: LAUNCH_FATAL };
|
|
188
187
|
}
|
|
189
|
-
async function verifyAndroidMetroRun({ root, slot, remoteDevice, verifyLaunched, serial, androidPackage, metroCheck, logsDir, launchedAt, metroPort, isExpo, physical, device, scheme, component = null, phase, enterActivity }) {
|
|
188
|
+
async function verifyAndroidMetroRun({ operation, root, slot, remoteDevice, verifyLaunched, serial, androidPackage, metroCheck, logsDir, launchedAt, metroPort, isExpo, physical, device, scheme, component = null, phase, enterActivity }) {
|
|
190
189
|
const runCommand = nativeRunCommand("android", slot, {
|
|
191
190
|
physical,
|
|
192
191
|
deviceId: serial
|
|
@@ -198,11 +197,11 @@ async function verifyAndroidMetroRun({ root, slot, remoteDevice, verifyLaunched,
|
|
|
198
197
|
deviceId: serial,
|
|
199
198
|
appId: androidPackage,
|
|
200
199
|
since: launchedAt
|
|
201
|
-
}, logsDir);
|
|
200
|
+
}, logsDir, operation?.signal, operation?.env);
|
|
202
201
|
const freshEmulator = Boolean((device.created || device.adoptionPending) && device.owned && !remoteDevice);
|
|
203
202
|
const timeoutMs = freshEmulator ? 6e4 : VERIFY_TIMEOUT_MS;
|
|
204
203
|
if (metroCheck && freshEmulator) phase("verify", `waiting up to 60s for bundle load (${device.created ? "new" : "adopted"} emulator)`);
|
|
205
|
-
const siblings = metroCheck ? siblingPlatformSlots(root, "android", slot) : [];
|
|
204
|
+
const siblings = metroCheck ? await siblingPlatformSlots(root, "android", slot) : [];
|
|
206
205
|
const verification = metroCheck ? await verifyLaunched({
|
|
207
206
|
timeoutMs,
|
|
208
207
|
requireBundleResponse: true,
|
|
@@ -216,15 +215,15 @@ async function verifyAndroidMetroRun({ root, slot, remoteDevice, verifyLaunched,
|
|
|
216
215
|
platform: "android",
|
|
217
216
|
mode: workspaceDevServerMode(root, isExpo),
|
|
218
217
|
readNativeCrashes,
|
|
219
|
-
processAlive: () => {
|
|
220
|
-
const running = androidAppProcess(serial, androidPackage);
|
|
218
|
+
processAlive: async () => {
|
|
219
|
+
const running = await androidAppProcess(serial, androidPackage);
|
|
221
220
|
return running.state === "unknown" ? null : running.state === "running";
|
|
222
221
|
}
|
|
223
222
|
}) : {
|
|
224
223
|
verified: false,
|
|
225
224
|
skipped: true
|
|
226
225
|
};
|
|
227
|
-
const nativeCrashes = verification.errors?.some((record) => record.event === "native_crash") ? [] : readNativeCrashes();
|
|
226
|
+
const nativeCrashes = verification.errors?.some((record) => record.event === "native_crash") ? [] : await readNativeCrashes();
|
|
228
227
|
if (nativeCrashes.length) verification.fatal = true;
|
|
229
228
|
verification.errors = await errorDiagnostics([...verification.errors ?? [], ...nativeCrashes], {
|
|
230
229
|
root,
|
|
@@ -304,7 +303,7 @@ async function wipeAdoptedAvd(room, free) {
|
|
|
304
303
|
room.phase("device", chalk.yellow(`${room.avdName} has ${free === null ? "too little space" : `${formatBytes(free)} free`} on /data after removing other apps and trimming caches; wiping its user data`));
|
|
305
304
|
const expectedRecord = deviceSlotPlatforms(loadConfig()?.projects?.[room.root], room.slot)?.android;
|
|
306
305
|
if (!expectedRecord?.adoptionPending || expectedRecord.avdName !== room.avdName) throw new Error("the emulator assignment changed before the wipe; its data was kept");
|
|
307
|
-
const wiped = room.wipeDevice(room.avdName, {
|
|
306
|
+
const wiped = await room.wipeDevice(room.avdName, {
|
|
308
307
|
wipe: true,
|
|
309
308
|
owner: {
|
|
310
309
|
projectPath: room.root,
|
|
@@ -316,7 +315,7 @@ async function wipeAdoptedAvd(room, free) {
|
|
|
316
315
|
if (wiped.status !== "torn-down") throw new Error(`could not wipe it: ${wiped.reason ?? wiped.status}`);
|
|
317
316
|
const rebooted = await room.rebootDevice();
|
|
318
317
|
if (!rebooted.ok || !rebooted.serial) throw new Error(`it did not boot after its user data was wiped: ${rebooted.reason ?? "no serial"}`);
|
|
319
|
-
if (room.resolveAvdSerial(room.avdName).serial !== rebooted.serial) throw new Error(`${rebooted.serial} is not running ${room.avdName} after the wipe`);
|
|
318
|
+
if ((await room.resolveAvdSerial(room.avdName)).serial !== rebooted.serial) throw new Error(`${rebooted.serial} is not running ${room.avdName} after the wipe`);
|
|
320
319
|
room.phase("device", `${room.avdName} (${rebooted.serial}) booted with wiped user data`);
|
|
321
320
|
return rebooted.serial;
|
|
322
321
|
}
|
|
@@ -326,45 +325,45 @@ async function installOnAdoptedAvd(room, serial, installApk) {
|
|
|
326
325
|
const outOfSpace = (result) => Boolean(result.failed) && INSUFFICIENT_STORAGE.test(result.reason ?? "");
|
|
327
326
|
let target = serial;
|
|
328
327
|
let wiped = false;
|
|
329
|
-
if (!roomy(room.dataFreeBytes(target))) {
|
|
330
|
-
room.trimCaches(target, neededBytes);
|
|
331
|
-
const free = room.dataFreeBytes(target);
|
|
328
|
+
if (!roomy(await room.dataFreeBytes(target))) {
|
|
329
|
+
await room.trimCaches(target, neededBytes);
|
|
330
|
+
const free = await room.dataFreeBytes(target);
|
|
332
331
|
if (roomy(free)) room.phase("install", `trimmed app caches on ${room.avdName} to make room for the APK`);
|
|
333
332
|
else {
|
|
334
333
|
target = await wipeAdoptedAvd(room, free);
|
|
335
334
|
wiped = true;
|
|
336
335
|
}
|
|
337
336
|
}
|
|
338
|
-
let installed = installApk(target);
|
|
337
|
+
let installed = await installApk(target);
|
|
339
338
|
if (wiped || !outOfSpace(installed)) return {
|
|
340
339
|
serial: target,
|
|
341
340
|
installed
|
|
342
341
|
};
|
|
343
|
-
room.trimCaches(target, neededBytes);
|
|
344
|
-
installed = installApk(target);
|
|
342
|
+
await room.trimCaches(target, neededBytes);
|
|
343
|
+
installed = await installApk(target);
|
|
345
344
|
if (!outOfSpace(installed)) return {
|
|
346
345
|
serial: target,
|
|
347
346
|
installed
|
|
348
347
|
};
|
|
349
|
-
target = await wipeAdoptedAvd(room, room.dataFreeBytes(target));
|
|
348
|
+
target = await wipeAdoptedAvd(room, await room.dataFreeBytes(target));
|
|
350
349
|
return {
|
|
351
350
|
serial: target,
|
|
352
|
-
installed: installApk(target)
|
|
351
|
+
installed: await installApk(target)
|
|
353
352
|
};
|
|
354
353
|
}
|
|
355
354
|
async function resolveInstallSerial({ root, slot, device, physical, remoteDevice, serial, resolveAvdSerial, waitForDeviceBoot, phase }) {
|
|
356
355
|
if (physical || remoteDevice || !device.owned || !device.avdName) return serial;
|
|
357
|
-
const resolved = resolveAvdSerial(device.avdName, { timeoutMs: 5e3 });
|
|
356
|
+
const resolved = await resolveAvdSerial(device.avdName, { timeoutMs: 5e3 });
|
|
358
357
|
if (!resolved.serial) throw new Error(`Could not verify a running owned AVD ${device.avdName} before installation.`);
|
|
359
358
|
if (resolved.serial !== serial) {
|
|
360
359
|
phase("device", `${device.avdName} changed serial (${serial} -> ${resolved.serial}); checking readiness before installation`);
|
|
361
360
|
const ready = await waitForDeviceBoot(resolved.serial, 6e4, { commandTimeoutMs: 5e3 });
|
|
362
361
|
if (!ready.ok) throw new Error(`Emulator ${resolved.serial} never reported boot completion. Diagnostic: ${JSON.stringify(ready.diagnostic)}`);
|
|
363
|
-
if (resolveAvdSerial(device.avdName, { timeoutMs: 5e3 }).serial !== resolved.serial) throw new Error(`Could not verify AVD ${device.avdName} still runs on ${resolved.serial} after checking readiness.`);
|
|
362
|
+
if ((await resolveAvdSerial(device.avdName, { timeoutMs: 5e3 })).serial !== resolved.serial) throw new Error(`Could not verify AVD ${device.avdName} still runs on ${resolved.serial} after checking readiness.`);
|
|
364
363
|
phase("device", `reopen agent-device on ${resolved.serial}`);
|
|
365
364
|
}
|
|
366
365
|
const consolePort = Number(resolved.serial.replace(/^emulator-/, ""));
|
|
367
|
-
|
|
366
|
+
await withConfigLockAsync(() => {
|
|
368
367
|
const current = deviceSlotPlatforms(loadConfig()?.projects?.[root], slot)?.android;
|
|
369
368
|
if (!current?.owned || current.avdName !== device.avdName) throw new Error("The owned emulator assignment changed before installation.");
|
|
370
369
|
if (current.consolePort !== consolePort) setDevice(root, PLATFORM, {
|
|
@@ -374,7 +373,8 @@ async function resolveInstallSerial({ root, slot, device, physical, remoteDevice
|
|
|
374
373
|
});
|
|
375
374
|
return resolved.serial;
|
|
376
375
|
}
|
|
377
|
-
async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLease, root, slot, json, metroCheck, useBuildCache, variant, release, isExpo, metroPort, logsDir, emuLog, device, physical, remoteDevice, bootPromise, resolveAvdSerial, waitForDeviceBoot, bootDuration, bootPending, apkPath, androidPackage: initialPackage, androidPackageProblem, record, waitedForBuild, ccache, uploadPending, providerUpload, providerName, remote, abandonedRemote: remoteWasAbandoned, started, startedAt, writer, phase, fail, readApkPackage, readProjectPackage, packageRemedy, install, launch, launchRelease, resolveDevClientScheme, verifyLaunched, verifyReleaseLaunched, spawn, kill, pidAlive, verifyCollector, writeLaunch, recordBuild, now, out, emit, recordRun, reclaimed, devServer, enterPhase, enterActivity, rebootDevice, dataFreeBytes = androidDataFreeBytes, trimCaches = trimAndroidCaches, wipeDevice = teardownOwnedAvd }) {
|
|
376
|
+
async function finishAndroidRun({ operation, runtime, runtimePreparation, lease, releaseLease, root, slot, json, metroCheck, useBuildCache, variant, release, isExpo, metroPort, logsDir, emuLog, device, physical, remoteDevice, bootPromise, resolveAvdSerial, waitForDeviceBoot, bootDuration, bootPending, apkPath, androidPackage: initialPackage, androidPackageProblem, record, waitedForBuild, ccache, uploadPending, providerUpload, providerName, remote, abandonedRemote: remoteWasAbandoned, started, startedAt, writer, phase, fail, readApkPackage, readProjectPackage, packageRemedy, install, launch, launchRelease, resolveDevClientScheme, verifyLaunched, verifyReleaseLaunched, spawn, kill, pidAlive, verifyCollector, writeLaunch, recordBuild, now, out, emit, recordRun, reclaimed, devServer, enterPhase, enterActivity, rebootDevice, dataFreeBytes = androidDataFreeBytes, trimCaches = trimAndroidCaches, wipeDevice = teardownOwnedAvd }) {
|
|
377
|
+
const { env, signal } = operation ?? {};
|
|
378
378
|
let androidPackage = initialPackage;
|
|
379
379
|
let leaseWarned = false;
|
|
380
380
|
const raiseLeaseFor = (boundMs, beforeInstall) => {
|
|
@@ -422,9 +422,9 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
422
422
|
return fail(NO_DEVICE, error instanceof Error ? error.message : String(error), `Run \`stim status\` to inspect the owned AVD, then retry \`${runCommand}\`; the APK was not installed.`);
|
|
423
423
|
}
|
|
424
424
|
phase("device", physical ? `${device.deviceName || serial} (${serial}) connected, not owned by Stim` : `${device.avdName || serial} (${serial}) ${device.adopted || device.adoptionPending ? "adopted" : "booted"} ${bootDuration()}`);
|
|
425
|
-
const packageFromApk = readApkPackage(apkPath);
|
|
425
|
+
const packageFromApk = await readApkPackage(apkPath);
|
|
426
426
|
if (packageFromApk && androidPackage && packageFromApk !== androidPackage) phase("install", chalk.dim(`applicationId ${packageFromApk} (from the APK; project files say ${androidPackage})`));
|
|
427
|
-
androidPackage = packageFromApk || androidPackage || readProjectPackage();
|
|
427
|
+
androidPackage = packageFromApk || androidPackage || await readProjectPackage();
|
|
428
428
|
if (!androidPackage && androidPackageProblem) return fail(LAUNCH_FAILED, androidPackageProblem, packageRemedy, { lastBuildStatus: true });
|
|
429
429
|
const adopting = !physical && !remoteDevice && Boolean(device.adoptionPending);
|
|
430
430
|
if (adopting) {
|
|
@@ -467,7 +467,7 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
467
467
|
} catch (error) {
|
|
468
468
|
return fail(INSTALL_FAILED, `Could not make room on adopted emulator ${device.avdName}: ${String(error?.message || error)}`, `Run \`${runCommand}\` again; adoption remains pending, so it retries the cleanup.`);
|
|
469
469
|
}
|
|
470
|
-
} else installed = installApk(serial);
|
|
470
|
+
} else installed = await installApk(serial);
|
|
471
471
|
if (installed.failed) {
|
|
472
472
|
const installRemedy = remoteDevice?.failureRemedy() ?? localInstallRemedy({
|
|
473
473
|
reason: installed.reason,
|
|
@@ -478,7 +478,7 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
478
478
|
return fail(installed.code || "STIM_INSTALL_FAILED", installed.reason, installRemedy, { lastBuildStatus: true });
|
|
479
479
|
}
|
|
480
480
|
if (adopting) try {
|
|
481
|
-
|
|
481
|
+
await withConfigLockAsync(() => {
|
|
482
482
|
const config = loadConfig();
|
|
483
483
|
const current = deviceSlotPlatforms(config?.projects?.[root], slot)?.android;
|
|
484
484
|
if (!config || !current || current.avdName !== device.avdName) throw new Error("The adopted emulator assignment changed during installation.");
|
|
@@ -503,7 +503,7 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
503
503
|
record.bundleId = androidPackage;
|
|
504
504
|
if (!androidPackage) return fail(LAUNCH_FAILED, "Could not determine this app's Android package name, so there is nothing to launch.", packageRemedy, { lastBuildStatus: true });
|
|
505
505
|
if (physical) raiseLeaseFor(0, false);
|
|
506
|
-
const scheme = runtime.scheme(root, apkPath, resolveDevClientScheme);
|
|
506
|
+
const scheme = await runtime.scheme(root, apkPath, resolveDevClientScheme);
|
|
507
507
|
enterPhase("launch");
|
|
508
508
|
const launchTimer = stepTimer(now);
|
|
509
509
|
const launchedAt = now();
|
|
@@ -530,14 +530,14 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
530
530
|
launchRelease
|
|
531
531
|
});
|
|
532
532
|
if (launched.failed) {
|
|
533
|
-
printNativeCrashReport({
|
|
533
|
+
await printNativeCrashReport({
|
|
534
534
|
root,
|
|
535
535
|
slot,
|
|
536
536
|
platform: "android",
|
|
537
537
|
deviceId: serial,
|
|
538
538
|
appId: androidPackage,
|
|
539
539
|
since: launchedAt
|
|
540
|
-
}, logsDir, (line) => phase("launch", chalk.red(line)), Boolean(remoteDevice));
|
|
540
|
+
}, logsDir, (line) => phase("launch", chalk.red(line)), Boolean(remoteDevice), signal, env);
|
|
541
541
|
return fail(launched.code || "STIM_LAUNCH_FAILED", launched.reason, launchRemedy(remoteDevice, serial, androidPackage), { lastBuildStatus: true });
|
|
542
542
|
}
|
|
543
543
|
writer.write({
|
|
@@ -578,7 +578,7 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
578
578
|
});
|
|
579
579
|
}
|
|
580
580
|
const uploadWasAbandoned = await finishAndroidUpload(uploadPending, remote, phase);
|
|
581
|
-
const providerOutcome = providerUploadOutcome(providerUpload ? await providerUpload : null, providerName);
|
|
581
|
+
const providerOutcome = providerUploadOutcome(providerUpload ? await providerUpload : null, providerName, env);
|
|
582
582
|
if (providerOutcome) phase("cache", providerOutcome.warn ? chalk.yellow(providerOutcome.line) : providerOutcome.line);
|
|
583
583
|
persistLastBuild({
|
|
584
584
|
recordBuild,
|
|
@@ -621,6 +621,7 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
621
621
|
}
|
|
622
622
|
if (physical) raiseLeaseFor(runtime.verificationWaitMs, false);
|
|
623
623
|
const { state: launchState, warning: launchWarning, unattributed } = await runtime.verify(runtimePreparation, {
|
|
624
|
+
operation,
|
|
624
625
|
root,
|
|
625
626
|
slot,
|
|
626
627
|
remoteDevice: Boolean(remoteDevice),
|
|
@@ -654,45 +655,45 @@ async function finishAndroidRun({ runtime, runtimePreparation, lease, releaseLea
|
|
|
654
655
|
}));
|
|
655
656
|
const leaseFacts = lease?.facts() ?? null;
|
|
656
657
|
releaseLease();
|
|
657
|
-
const facts = reportAndroidResult({
|
|
658
|
-
root,
|
|
659
|
-
slot,
|
|
660
|
-
json,
|
|
661
|
-
useBuildCache,
|
|
662
|
-
variant,
|
|
663
|
-
release,
|
|
664
|
-
runtimeKind: runtime.kind,
|
|
665
|
-
metroCheck,
|
|
666
|
-
metroPort,
|
|
667
|
-
logsDir: remoteRelease ? null : logsDir,
|
|
668
|
-
serial,
|
|
669
|
-
apkPath,
|
|
670
|
-
androidPackage,
|
|
671
|
-
installSkipped,
|
|
672
|
-
record,
|
|
673
|
-
waitedForBuild,
|
|
674
|
-
remote,
|
|
675
|
-
providerName,
|
|
676
|
-
launchState,
|
|
677
|
-
launchWarning,
|
|
678
|
-
launched,
|
|
679
|
-
ccache,
|
|
680
|
-
durationMs: now() - started,
|
|
681
|
-
writer,
|
|
682
|
-
emit,
|
|
683
|
-
lease: physical ? leaseFacts : void 0,
|
|
684
|
-
recordRun,
|
|
685
|
-
reclaimed,
|
|
686
|
-
devServer,
|
|
687
|
-
links: workspaceLinks(root, {
|
|
688
|
-
platform: "android",
|
|
689
|
-
slot
|
|
690
|
-
})
|
|
691
|
-
});
|
|
692
|
-
if (remoteWasAbandoned || uploadWasAbandoned) exitAfterFlush(0);
|
|
693
658
|
return {
|
|
694
659
|
ok: true,
|
|
695
|
-
facts
|
|
660
|
+
facts: reportAndroidResult({
|
|
661
|
+
root,
|
|
662
|
+
slot,
|
|
663
|
+
json,
|
|
664
|
+
useBuildCache,
|
|
665
|
+
variant,
|
|
666
|
+
release,
|
|
667
|
+
runtimeKind: runtime.kind,
|
|
668
|
+
metroCheck,
|
|
669
|
+
metroPort,
|
|
670
|
+
logsDir: remoteRelease ? null : logsDir,
|
|
671
|
+
serial,
|
|
672
|
+
apkPath,
|
|
673
|
+
androidPackage,
|
|
674
|
+
installSkipped,
|
|
675
|
+
record,
|
|
676
|
+
waitedForBuild,
|
|
677
|
+
remote,
|
|
678
|
+
providerName,
|
|
679
|
+
launchState,
|
|
680
|
+
launchWarning,
|
|
681
|
+
launched,
|
|
682
|
+
ccache,
|
|
683
|
+
durationMs: now() - started,
|
|
684
|
+
writer,
|
|
685
|
+
emit,
|
|
686
|
+
out,
|
|
687
|
+
lease: physical ? leaseFacts : void 0,
|
|
688
|
+
recordRun,
|
|
689
|
+
reclaimed,
|
|
690
|
+
devServer,
|
|
691
|
+
links: await workspaceLinks(root, {
|
|
692
|
+
platform: "android",
|
|
693
|
+
slot
|
|
694
|
+
})
|
|
695
|
+
}),
|
|
696
|
+
uploadsAbandoned: remoteWasAbandoned || uploadWasAbandoned
|
|
696
697
|
};
|
|
697
698
|
}
|
|
698
699
|
function localInstallRemedy({ reason, packageName, serial, useBuildCache }) {
|