stim 1.26.0 → 1.27.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/dist/{acquire-artifact-DVsvSwf7.mjs → acquire-artifact-BKN2Yuhg.mjs} +2 -2
- package/dist/{act-C-BqJEpu.mjs → act-ROviTF_t.mjs} +297 -122
- package/dist/{activity-Lnb_EoRY.mjs → activity-Cd-ysFes.mjs} +6 -6
- package/dist/{agent-device-usage-output-DbXy5tg8.mjs → agent-device-usage-output-C5nCKWp9.mjs} +5 -5
- package/dist/{android-CSbLRD53.mjs → android--HBgpvpW.mjs} +5 -5
- package/dist/{android-CiNQw3kq.mjs → android-Cd6w7_qw.mjs} +96 -43
- package/dist/{android-B5P81yI-.mjs → android-Deb9X3_Y.mjs} +37 -15
- package/dist/{android-DTAcRwBC.mjs → android-DriNoAVy.mjs} +23 -18
- package/dist/{android-cas-BTVhZ0Qs.mjs → android-cas-D5e6ecUg.mjs} +4 -4
- package/dist/android-cas-compiler.mjs +1 -1
- package/dist/api.d.mts +13 -3
- package/dist/api.mjs +39 -29
- package/dist/{apk-signed-tail-B46U9hXc.mjs → apk-signed-tail-BHQHx3Rm.mjs} +2 -2
- package/dist/{artifact-BxREhAaV.mjs → artifact-0AGJYB9O.mjs} +18 -23
- package/dist/{artifact-CsAP6AGK.mjs → artifact-faemIZv5.mjs} +19 -24
- package/dist/{artifact-platform-CMRc0M_r.mjs → artifact-platform-BO2Uvk_A.mjs} +1 -1
- package/dist/auto-placement-z-H5pJza.mjs +350 -0
- package/dist/{browser-web-rYPyqhTf.mjs → browser-web-slD8AvLp.mjs} +16 -16
- package/dist/{build-cache-DrXNCy3T.mjs → build-cache-gBJ-WKzA.mjs} +43 -21
- package/dist/{build-DPhApsjV.mjs → build-hS0QyFlQ.mjs} +35 -31
- package/dist/{build-plan-DrMMdayj.mjs → build-plan-CBqYbzYM.mjs} +7 -6
- package/dist/{cache-manifest-BEZ9Bpl1.mjs → cache-manifest-DEjqGGat.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{budget-k2mZGvvk.mjs → ccache-BWTze1Ls.mjs} +560 -1603
- package/dist/{cdp-BG3FJCCx.mjs → cdp-C3svvXiE.mjs} +1 -1
- package/dist/{chrome-BvV8ssI3.mjs → chrome-DyDWurWG.mjs} +1 -1
- package/dist/{cli-BBKFGOFl.mjs → cli-ftXDLto1.mjs} +24 -23
- package/dist/cli.mjs +1 -1
- package/dist/{client-D9CaRks-.mjs → client-xsdxrhWA.mjs} +48 -62
- package/dist/collector-run.d.mts +10 -9
- package/dist/collector-run.mjs +42 -27
- package/dist/{command-output-BF5AR2dL.mjs → command-output-Dj-WT4BP.mjs} +1 -1
- package/dist/{config-BktkY_zC.mjs → config-Cn94Jc0g.mjs} +23 -4
- package/dist/{dependencies-Dw6wfQdv.mjs → dependencies-BGokZ-Ng.mjs} +108 -60
- package/dist/{dependency-state-DFB41vfr.mjs → dependency-state-C3OtgG94.mjs} +14 -7
- package/dist/{detached-entry-KmieOKgN.mjs → detached-entry-BPlSaCwC.mjs} +1 -1
- package/dist/{dev-client-DXR_tPVY.mjs → dev-client-BMca82xo.mjs} +2 -2
- package/dist/{device-BcYeHSFu.mjs → device-BJm0irrq.mjs} +16 -16
- package/dist/{device-capacity-DCSvUF0l.mjs → device-capacity-6LP7QsaA.mjs} +101 -16
- package/dist/device-host-worker.mjs +19 -19
- package/dist/{device-ios-BLGfXQeK.mjs → device-ios-534c14fz.mjs} +251 -23
- package/dist/{device-lease-run-BmvIl7bI.mjs → device-lease-run-DwsGfjUN.mjs} +5 -5
- package/dist/{device-pool-Dluix4H3.mjs → device-pool-BnQqvs6o.mjs} +3 -3
- package/dist/{device-BK-zwyd_.mjs → device-tM41-TUq.mjs} +25 -24
- package/dist/{doctor-Cp-BhzTS.mjs → doctor-Dbx1ZpD2.mjs} +1 -1
- package/dist/{doctor-Bhg1ii70.mjs → doctor-DyqE9n1J.mjs} +28 -16
- package/dist/{doctor-OnwP94ne.mjs → doctor-F-3VUUyN.mjs} +76 -32
- package/dist/{doctor-fingerprint-D3a04Mhu.mjs → doctor-fingerprint-o7ZI9YLn.mjs} +1 -1
- package/dist/doctor-fingerprint.mjs +1 -1
- package/dist/{doctor-watchman-BStK05nt.mjs → doctor-watchman-CxDbyrrt.mjs} +5 -5
- package/dist/{eas-build-Dsj93iM9.mjs → eas-build-CjNSWmjo.mjs} +4 -4
- package/dist/eas-fallback-9fqb46kW.mjs +87 -0
- package/dist/{eas-session-ledger-B5vygTiD.mjs → eas-session-ledger-DrP4OuuM.mjs} +6 -6
- package/dist/{error-diagnostics-BOOm9Db7.mjs → error-diagnostics-snej9k4j.mjs} +51 -25
- package/dist/{exec-VFRpu1iA.mjs → exec-aULwtNly.mjs} +57 -6
- package/dist/{gc-C_79zvz4.mjs → gc-BRwAY3qT.mjs} +2 -2
- package/dist/{gc-ldgr-hXU.mjs → gc-CGZ1Yg88.mjs} +160 -45
- package/dist/{guide-D7K0X6KG.mjs → guide-_rfEh_zM.mjs} +580 -183
- package/dist/{hosted-android-Bk54ej6n.mjs → hosted-android-BMKzUNnY.mjs} +4 -4
- package/dist/{hosted-client-fHO8yqzc.mjs → hosted-client-D7Pk_Oo1.mjs} +12 -8
- package/dist/{hosted-logs-BfbmDM4M.mjs → hosted-logs-B1gqQuva.mjs} +8 -8
- package/dist/{hosted-logs-sync-B0pvmOk-.mjs → hosted-logs-sync-Dg3qrZmV.mjs} +5 -5
- package/dist/{hosted-macos-CPl0OZ9h.mjs → hosted-macos-B9w4H8hc.mjs} +6 -6
- package/dist/{hosted-native-CpDB3-PO.mjs → hosted-native-CdgaiuyP.mjs} +17 -16
- package/dist/{idle-shutdown-FfxL1KdG.mjs → idle-shutdown-Cbvo5KEh.mjs} +7 -8
- package/dist/{ios-ftxdQbJS.mjs → ios-B5HlVMhQ.mjs} +92 -37
- package/dist/{ios-B7-lToDu.mjs → ios-Bk4mWbtS.mjs} +8 -8
- package/dist/{ios-ENC4sRPA.mjs → ios-CsRVik64.mjs} +7 -1
- package/dist/{ios-WxpDJ5T1.mjs → ios-E26qSpkb.mjs} +27 -11
- package/dist/{ios-device-CsyryvpT.mjs → ios-device-C_QkIf1Z.mjs} +3 -3
- package/dist/{ios-device-B6HK951C.mjs → ios-device-CiBA-er9.mjs} +1 -1
- package/dist/{ios-project-Ty5pHl9O.mjs → ios-project-D8Jcy_br.mjs} +22 -9
- package/dist/{ios-signing-4c_qXvQm.mjs → ios-signing-BJzvDPfU.mjs} +2 -2
- package/dist/{ios-state-Cw7-WQf2.mjs → ios-state-BZ03NFgF.mjs} +1 -1
- package/dist/{js-swap-BMhXYVDS.mjs → js-swap-Dg2a945i.mjs} +8 -7
- package/dist/{launch-DOp8RjDz.mjs → launch-CRyBeNsA.mjs} +42 -38
- package/dist/lightened-BCsdAGj_.mjs +171 -0
- package/dist/{logs-dQDki6Tt.mjs → logs-CC_-ZzEE.mjs} +7 -7
- package/dist/{logs-s1dRIG1E.mjs → logs-aJQb-RDg.mjs} +46 -21
- package/dist/{macos-B0VEV3Gf.mjs → macos-BGmTpnv9.mjs} +1 -1
- package/dist/{macos-DBBPNnIA.mjs → macos-DlCBhMw5.mjs} +73 -38
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +7 -7
- package/dist/{metro-CjC10t6E.mjs → metro-CvyD-xwe.mjs} +4 -4
- package/dist/{metro-gateway-B6_PgD0L.mjs → metro-gateway-BnHdqMO_.mjs} +3 -3
- package/dist/{named-ports-BG0j1X4g.mjs → named-ports-BCyMWA6b.mjs} +3 -3
- package/dist/{native-android-CL2NGiik.mjs → native-android-DlpxCyOP.mjs} +17 -18
- package/dist/{native-gradle-artifact-inputs-btSUulme.mjs → native-gradle-artifact-inputs-C13qT7R_.mjs} +5 -5
- package/dist/{native-runtime-Dq3RBcON.mjs → native-runtime-DqaIBO5w.mjs} +9 -8
- package/dist/{native-source-D-4Dh4JU.mjs → native-source-D1AzWiuP.mjs} +1 -1
- package/dist/{native-xcode-inputs-BW7H8JGu.mjs → native-xcode-inputs-B1W8SrxB.mjs} +3 -3
- package/dist/{native-xcode-ios-CBXJAxfC.mjs → native-xcode-ios-QPP0Rm68.mjs} +17 -17
- package/dist/{ndjson-CgE_o3Dl.mjs → ndjson-Dy2W4vRa.mjs} +2 -2
- package/dist/offload-worker.mjs +23 -24
- package/dist/{operation-exec-CUZifp6Z.mjs → operation-exec-Dp4FuIGR.mjs} +1 -1
- package/dist/{ownership-BjYvMNX_.mjs → ownership-Bx-0cku-.mjs} +3 -3
- package/dist/{page-CzEA_-5_.mjs → page-CQJlcj3x.mjs} +2 -2
- package/dist/{phone-reverses-lmj6kcPm.mjs → phone-reverses-C9yAaKEv.mjs} +18 -4
- package/dist/{placement-log-DIFPQAXp.mjs → placement-log-BXUbiZM6.mjs} +3 -3
- package/dist/{plan-placement-IiiSQhtz.mjs → plan-placement-UxnQjv5Z.mjs} +36 -10
- package/dist/{ports-C2_w1Z0Z.mjs → ports-uUrghqWN.mjs} +3 -3
- package/dist/{prebuild-gmouvmJZ.mjs → prebuild-BDpToDgR.mjs} +16 -17
- package/dist/{project-BUu6Is4k.mjs → project-DYj-HVx6.mjs} +17 -17
- package/dist/{pull-request-CbNlkFok.mjs → pull-request-BzLmzAIQ.mjs} +2 -2
- package/dist/pull-requests.mjs +1 -1
- package/dist/{react-native-android-Cgg99REN.mjs → react-native-android-DDBccgJw.mjs} +32 -26
- package/dist/{react-native-build-oNwqF5Wb.mjs → react-native-build-DaK2IFyP.mjs} +9 -9
- package/dist/{react-native-doctor-BhA3KUte.mjs → react-native-doctor-B-Mw6DcR.mjs} +6 -6
- package/dist/{react-native-ios-B-nf4rjN.mjs → react-native-ios-DjYwUF9U.mjs} +23 -17
- package/dist/{recordings-BldzVKq0.mjs → recordings-C20iUZfp.mjs} +1 -1
- package/dist/{registration-CN6nlhcD.mjs → registration-BwCe64PH.mjs} +1 -1
- package/dist/{reload-C9OduiNc.mjs → reload-DJBeF_rC.mjs} +1 -1
- package/dist/{reload-CCR7KC_l.mjs → reload-fUdkH2_p.mjs} +16 -16
- package/dist/{remote-C8S7FlPF.mjs → remote-y6n99WMW.mjs} +22 -9
- package/dist/{result-7F5hEwQJ.mjs → result-CTqBw2Te.mjs} +32 -21
- package/dist/{run-BqB0v3pt.mjs → run-DaCeNKRm.mjs} +3 -3
- package/dist/{selection-BNPBZ6T5.mjs → selection-Bs8phwhN.mjs} +37 -29
- package/dist/{server-bare-A75rDIdD.mjs → server-bare-BOh-iZEj.mjs} +2 -2
- package/dist/{server-command-CssKFOD7.mjs → server-command-8CuA51Cv.mjs} +6 -6
- package/dist/{server-expo-eQfOdydb.mjs → server-expo-ABQs2XFA.mjs} +4 -4
- package/dist/server-expo-Ba_Y21vB.mjs +2 -0
- package/dist/{settings-CosW5X-S.mjs → settings-BDVI8Ivc.mjs} +331 -62
- package/dist/{settings-OaGQF-ri.mjs → settings-CMHhQNwI.mjs} +24 -3
- package/dist/settings-payload-cm60Zhib.mjs +257 -0
- package/dist/settings-write-BdNRLlBn.mjs +185 -0
- package/dist/settings.schema.json +51 -33
- package/dist/{simslim-Bax1qcxu.mjs → simslim-DCQwzoPy.mjs} +2 -2
- package/dist/{slot-launch-CYCEhfBY.mjs → slot-launch-0l7RqSpr.mjs} +6 -6
- package/dist/{stage-jKQ7CP_B.mjs → stage-F4cAfJGi.mjs} +2 -2
- package/dist/{start-C_wefNKB.mjs → start-DcqnF9p8.mjs} +1 -1
- package/dist/{start-_BdJ32cZ.mjs → start-DrPwER_2.mjs} +27 -22
- package/dist/{state-C1i2nMOP.mjs → state-BX1y5syV.mjs} +4 -4
- package/dist/{state-C4OdpOTF.mjs → state-CZxLyetD.mjs} +2 -2
- package/dist/{stats-tEpEEH-u.mjs → stats-GxuCbles.mjs} +5 -5
- package/dist/{stats-report-n2U5plhk.mjs → stats-report-B86Cv7Uc.mjs} +1 -1
- package/dist/{status-CRXz-Gtj.mjs → status-7ULDEJ1e.mjs} +1 -1
- package/dist/{status-DQrqodLj.mjs → status-BfnK9pUd.mjs} +25 -25
- package/dist/{status-B9M7x4CZ.mjs → status-Bj7ZYvvc.mjs} +1 -1
- package/dist/{status-watch-B5wDIH_o.mjs → status-watch-BfabQn03.mjs} +5 -5
- package/dist/status-worker.mjs +1 -1
- package/dist/{stim-desktop-6Dqp-gjX.mjs → stim-desktop-CbWo21kb.mjs} +2 -2
- package/dist/{stop-ySNQHXMG.mjs → stop-CH79S3IZ.mjs} +5 -5
- package/dist/{stop-DRqQVqDJ.mjs → stop-D-EAr25B.mjs} +21 -20
- package/dist/{stop-CmdNhGlC.mjs → stop-x1Yu3He4.mjs} +2 -2
- package/dist/supervisor-run.mjs +17 -17
- package/dist/{support-CVOCp0Ft.mjs → support-Be0UeVZU.mjs} +10 -10
- package/dist/{support-BGSCBoib.mjs → support-CNg_YsOk.mjs} +6 -6
- package/dist/{swiftpm-artifact-inputs-CfUzt_0Z.mjs → swiftpm-artifact-inputs-uPqYvGBv.mjs} +4 -4
- package/dist/{swiftpm-macos-x6HPpl_2.mjs → swiftpm-macos-Ch4YjY_A.mjs} +11 -12
- package/dist/{toolchain-J4J8MrAr.mjs → toolchain-CbCG6C5Z.mjs} +321 -15
- package/dist/{toolchain-DoavrvIA.mjs → toolchain-JYAOquPg.mjs} +1 -1
- package/dist/{trigger-KVaWWNyn.mjs → trigger-DMou-X7j.mjs} +2 -2
- package/dist/trigger-qp2ji5wE.mjs +2 -0
- package/dist/{warm-progress-DvhTX_eu.mjs → warm-progress-C0RsbngN.mjs} +731 -727
- package/dist/{web-Bihbf7-u.mjs → web-Cq_AQ4DK.mjs} +9 -9
- package/dist/web-Je6abcpz.mjs +2 -0
- package/dist/web-run.mjs +9 -9
- package/dist/windows-report.mjs +1 -1
- package/dist/{workspace-state-pUg3_RRA.mjs → workspace-state-BjqdjnJR.mjs} +3 -3
- package/dist/{workspaces-g2lhdBXF.mjs → workspaces-DFbj07jp.mjs} +1795 -70
- package/dist/{worktree-BKuklFh_.mjs → worktree-COAJ3-OD.mjs} +934 -514
- package/dist/{worktree-Bm4cb-nU.mjs → worktree-JGUd_53L.mjs} +1 -1
- package/package.json +7 -7
- package/dist/ccache-Bx5TbxwG.mjs +0 -143
- package/dist/eas-fallback-FwkeqqGi.mjs +0 -381
- package/dist/hosted-ios-D55QhYaD.mjs +0 -15
- package/dist/native-run-BfIDFKLH.mjs +0 -275
- package/dist/server-expo-wvcj5tiZ.mjs +0 -2
- package/dist/settings-write-QjYfSrjF.mjs +0 -360
- package/dist/trigger-DzJu208Q.mjs +0 -2
- package/dist/web-BFLueSh-.mjs +0 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { D as ownership_claim_exports, S as process_identity_exports, m as declareSpawnsOn, t as getExecutor, v as stopDeclaringSpawnsOn } from "./exec-
|
|
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-
|
|
3
|
-
import { U as parseDeviceSlotKey, V as deviceSlotKey, d as getConfigDir, q as validateDeviceSlot } from "./config-
|
|
4
|
-
import { a as formatElapsed, i as formatDuration, m as shortHash } from "./command-output-
|
|
5
|
-
import { n as runOperationFileQuiet } from "./operation-exec-
|
|
6
|
-
import {
|
|
1
|
+
import { D as ownership_claim_exports, S as process_identity_exports, m as declareSpawnsOn, t as getExecutor, v as stopDeclaringSpawnsOn } from "./exec-aULwtNly.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-BjqdjnJR.mjs";
|
|
3
|
+
import { U as parseDeviceSlotKey, V as deviceSlotKey, d as getConfigDir, q as validateDeviceSlot } from "./config-Cn94Jc0g.mjs";
|
|
4
|
+
import { a as formatElapsed, i as formatDuration, m as shortHash } from "./command-output-Dj-WT4BP.mjs";
|
|
5
|
+
import { n as runOperationFileQuiet } from "./operation-exec-Dp4FuIGR.mjs";
|
|
6
|
+
import { C as resolveBuild } from "./build-cache-gBJ-WKzA.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";
|
package/dist/{agent-device-usage-output-DbXy5tg8.mjs → agent-device-usage-output-C5nCKWp9.mjs}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { S as process_identity_exports } from "./exec-
|
|
2
|
-
import { P as formatBytes } from "./config-
|
|
3
|
-
import { o as formatLongDuration } from "./command-output-
|
|
4
|
-
import {
|
|
5
|
-
import { c as parseAgentDeviceRecord, o as envDir, u as processMatches } from "./activity-
|
|
1
|
+
import { S as process_identity_exports } from "./exec-aULwtNly.mjs";
|
|
2
|
+
import { P as formatBytes } from "./config-Cn94Jc0g.mjs";
|
|
3
|
+
import { o as formatLongDuration } from "./command-output-Dj-WT4BP.mjs";
|
|
4
|
+
import { _t as measureDu, gt as canonical, l as listWorkspaceDirs, vt as writeUsageCache } from "./workspaces-DFbj07jp.mjs";
|
|
5
|
+
import { c as parseAgentDeviceRecord, o as envDir, u as processMatches } from "./activity-Cd-ysFes.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,6 +1,6 @@
|
|
|
1
|
-
import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-
|
|
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-
|
|
3
|
-
import { r as lastBuildRecord, t as androidFacts } from "./result-
|
|
4
|
-
import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-
|
|
5
|
-
import { a as collectorLogFile, o as killPreviousCollector, s as startCollector } from "./launch-
|
|
1
|
+
import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-Dj-WT4BP.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-CNg_YsOk.mjs";
|
|
3
|
+
import { r as lastBuildRecord, t as androidFacts } from "./result-CTqBw2Te.mjs";
|
|
4
|
+
import { i as runAndroidOperation, n as registerAndroid, r as runAndroid, t as androidCommand } from "./android-Cd6w7_qw.mjs";
|
|
5
|
+
import { a as collectorLogFile, o as killPreviousCollector, s as startCollector } from "./launch-CRyBeNsA.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,42 +1,43 @@
|
|
|
1
|
-
import { D as ownership_claim_exports, t as getExecutor } from "./exec-
|
|
2
|
-
import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, g as emulatorLogFile, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-
|
|
3
|
-
import { B as deviceSlotFileKey, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync$1, W as parseDeviceSlotOption, p as getProject, q as validateDeviceSlot, u as getConcurrencyLimits } from "./config-
|
|
4
|
-
import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-
|
|
5
|
-
import {
|
|
6
|
-
import { f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-
|
|
7
|
-
import { A as listAdbDevices, Dt as configuredAndroidEmulatorApp, I as listInstalledSystemImages, Y as physicalDeviceModel, Z as probeEmulatorSerial, a as androidDeviceAbi, ct as waitForBoot, nt as resolveOwnedAvdSerialAsync, rt as resolvePhysicalDevice } from "./android-
|
|
8
|
-
import { c as pidExists, d as resolveProjectMetro } from "./metro-
|
|
9
|
-
import {
|
|
10
|
-
import { An as
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { n as
|
|
21
|
-
import { n as
|
|
22
|
-
import { c as startDevServer } from "./start-
|
|
23
|
-
import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-
|
|
24
|
-
import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-
|
|
25
|
-
import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-
|
|
26
|
-
import { t as followHostedLaunchLogs } from "./hosted-logs-sync-
|
|
27
|
-
import { f as settleFingerprintCheck } from "./prebuild-
|
|
28
|
-
import { n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-
|
|
29
|
-
import { n as devicePlacementRecord } from "./placement-log-
|
|
30
|
-
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-
|
|
31
|
-
import { t as acquireAndroidArtifact } from "./artifact-
|
|
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-
|
|
33
|
-
import { n as
|
|
34
|
-
import { i as verifyAndroidMetroRun, r as finishAndroidRun } from "./launch-
|
|
35
|
-
import {
|
|
36
|
-
import { t as
|
|
1
|
+
import { D as ownership_claim_exports, t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
|
+
import { a as recordWorkspaceUseAsync, f as writeWorkspaceStateAsync, g as emulatorLogFile, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-BjqdjnJR.mjs";
|
|
3
|
+
import { B as deviceSlotFileKey, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync$1, W as parseDeviceSlotOption, p as getProject, q as validateDeviceSlot, u as getConcurrencyLimits } from "./config-Cn94Jc0g.mjs";
|
|
4
|
+
import { _ as stepTimer, f as refuseNoProject, g as stepClock, i as formatDuration, l as phaseLine } from "./command-output-Dj-WT4BP.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-BDVI8Ivc.mjs";
|
|
6
|
+
import { f as projectRegistry, i as findProjectRoot$1, l as projectShortcut, t as NO_PROJECT_REFUSAL, z as writeWorkspaceLaunchAsync } from "./project-DYj-HVx6.mjs";
|
|
7
|
+
import { A as listAdbDevices, Dt as configuredAndroidEmulatorApp, I as listInstalledSystemImages, Y as physicalDeviceModel, Z as probeEmulatorSerial, a as androidDeviceAbi, ct as waitForBoot, nt as resolveOwnedAvdSerialAsync, rt as resolvePhysicalDevice } from "./android-DriNoAVy.mjs";
|
|
8
|
+
import { c as pidExists, d as resolveProjectMetro } from "./metro-CvyD-xwe.mjs";
|
|
9
|
+
import { i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.mjs";
|
|
10
|
+
import { An as checkEasAuth, At as ensureRemoteBootOwned, En as runProcessOperation, Et as binOnPath, Jt as verifyLaunch, Ln as resolveEasCliBin, Mt as remoteAndroidDeps, Pt as resolveRemoteContext, Qt as DEFAULT_METRO_PORT, Rn as resolveRemote, Zt as ADB_INSTALL_TIMEOUT_MS, c as budgetGate, kt as ensureMetroReachable, ln as installAndroidApp, mn as launchAndroidReleaseApp, pn as launchAndroidApp, qn as ownedSessionName, qt as verifyAndroidReleaseLaunch, t as CCACHE_NOT_RUN, wn as exitAfterFlush, zn as uploadRemote } from "./ccache-BWTze1Ls.mjs";
|
|
11
|
+
import { J as runFailureRecord, X as tapBuildLog, Y as startBuildProgress, Z as thrownRunFailureRecord, at as recordRunStats, et as createRunRecorder, ot as statsProjectKey$1, rt as recordCapacityRefusal, tt as readRunEstimates, xt as releaseBuildSlot, yt as acquireBuildSlot, z as NO_BUILD_PROGRESS } from "./workspaces-DFbj07jp.mjs";
|
|
12
|
+
import { Q as cancelledFailure, at as runCancellation, ot as runCancellationSignal, st as withNativeBuildRun } from "./toolchain-CbCG6C5Z.mjs";
|
|
13
|
+
import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-Cd-ysFes.mjs";
|
|
14
|
+
import { T as storedAppId } from "./build-cache-gBJ-WKzA.mjs";
|
|
15
|
+
import { S as setRemoteLogSink } from "./client-xsdxrhWA.mjs";
|
|
16
|
+
import { d as resolveBuildPlacement, s as parseBuildMachineOption } from "./selection-Bs8phwhN.mjs";
|
|
17
|
+
import { r as hostedMetroSettings } from "./metro-gateway-BnHdqMO_.mjs";
|
|
18
|
+
import { a as writeHostedAndroidAsync, i as writeDevicePlacementAsync, t as readHostedAndroid } from "./ios-state-BZ03NFgF.mjs";
|
|
19
|
+
import { n as prepareHostedAndroid, t as placeHostedAndroid } from "./hosted-android-BMKzUNnY.mjs";
|
|
20
|
+
import { n as verifyCollectorOwnership } from "./ownership-Bx-0cku-.mjs";
|
|
21
|
+
import { i as restoreLightenedDependencies, n as printLightenedFailure } from "./lightened-BCsdAGj_.mjs";
|
|
22
|
+
import { c as startDevServer } from "./start-DrPwER_2.mjs";
|
|
23
|
+
import { a as acquireRunLease, d as runLease, f as waitFlagConflict, o as leaseExpiryText, u as releaseLeaseOnAbort } from "./device-lease-run-DwsGfjUN.mjs";
|
|
24
|
+
import { n as DeviceAdmissionRefusal, r as checkDeviceCapacity } from "./device-capacity-6LP7QsaA.mjs";
|
|
25
|
+
import { a as resolveEasDevelopmentBuild, r as isEasBuildFailure } from "./eas-build-CjNSWmjo.mjs";
|
|
26
|
+
import { t as followHostedLaunchLogs } from "./hosted-logs-sync-Dg3qrZmV.mjs";
|
|
27
|
+
import { f as settleFingerprintCheck } from "./prebuild-BDpToDgR.mjs";
|
|
28
|
+
import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-DqaIBO5w.mjs";
|
|
29
|
+
import { n as devicePlacementRecord } from "./placement-log-BXUbiZM6.mjs";
|
|
30
|
+
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-CNg_YsOk.mjs";
|
|
31
|
+
import { t as acquireAndroidArtifact } from "./artifact-0AGJYB9O.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-CTqBw2Te.mjs";
|
|
33
|
+
import { n as devicePlacementLine, t as automaticDevicePlacement } from "./auto-placement-z-H5pJza.mjs";
|
|
34
|
+
import { i as verifyAndroidMetroRun, r as finishAndroidRun } from "./launch-CRyBeNsA.mjs";
|
|
35
|
+
import { t as checkEasFallback } from "./eas-fallback-9fqb46kW.mjs";
|
|
36
|
+
import { a as AvdRecoveryError, i as AvdBootError, n as ensureBooted, o as warmMetro, r as ensureOwnedDevice, t as didSetUpDevice } from "./device-tM41-TUq.mjs";
|
|
37
|
+
import { t as selectFromPool } from "./device-pool-BnQqvs6o.mjs";
|
|
37
38
|
import { t as unsupportedPlan } from "./project-plan-BPwbLwQu.mjs";
|
|
38
|
-
import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-
|
|
39
|
-
import {
|
|
39
|
+
import { a as refusePlan, i as printPlan, n as planFlagRefusal } from "./build-plan-CBqYbzYM.mjs";
|
|
40
|
+
import { join } from "node:path";
|
|
40
41
|
import { workspaceId } from "@stim-cli/core";
|
|
41
42
|
import { hostedAndroidStatus, parseMachine } from "@stim-cli/core/state";
|
|
42
43
|
import chalk from "chalk";
|
|
@@ -86,7 +87,7 @@ async function connectAndroidHosting({ root, slot, machine, release, appMode = r
|
|
|
86
87
|
} };
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
|
-
async function selectAndroidPlacement({ target: selected, automatic = automaticDevicePlacement, checkBudget = budgetGate, note, phase, log, fromFlag, noWait, buildMachine, localSelectors, eas, ...args }) {
|
|
90
|
+
async function selectAndroidPlacement({ target: selected, automatic = automaticDevicePlacement, checkBudget = budgetGate, note, phase, log, fromFlag, noWait, waitMs, signal, buildMachine, localSelectors, eas, ...args }) {
|
|
90
91
|
const appMode = args.appMode ?? (args.release ? "release" : "development");
|
|
91
92
|
const selectors = selected.kind === "hosted" ? {
|
|
92
93
|
...selected.systemImage ? { systemImage: selected.systemImage } : {},
|
|
@@ -119,15 +120,20 @@ async function selectAndroidPlacement({ target: selected, automatic = automaticD
|
|
|
119
120
|
root: args.root,
|
|
120
121
|
slot: args.slot,
|
|
121
122
|
platform: "android",
|
|
123
|
+
...selected.placement ? { placement: selected.placement } : {},
|
|
122
124
|
...appMode === "process" ? { appMode } : {},
|
|
123
125
|
selectors,
|
|
124
126
|
buildMachine,
|
|
125
127
|
noWait,
|
|
128
|
+
...waitMs === void 0 ? {} : { waitMs },
|
|
129
|
+
onWait: (line) => phase("placement:", line),
|
|
130
|
+
signal,
|
|
126
131
|
...eas ? { eas } : {}
|
|
127
132
|
});
|
|
128
133
|
phase("placement:", devicePlacementLine(placed.placement, placed.skipped));
|
|
129
134
|
log?.(devicePlacementRecord({
|
|
130
135
|
platform: "android",
|
|
136
|
+
selected: selected.placement,
|
|
131
137
|
fromFlag,
|
|
132
138
|
easFallback: Boolean(eas),
|
|
133
139
|
placed
|
|
@@ -173,6 +179,11 @@ async function selectAndroidPlacement({ target: selected, automatic = automaticD
|
|
|
173
179
|
devicePlacement: placed.placement
|
|
174
180
|
};
|
|
175
181
|
} catch (error) {
|
|
182
|
+
if (signal?.aborted) return { failure: {
|
|
183
|
+
code: "STIM_CANCELLED",
|
|
184
|
+
message: "The run was cancelled while it waited for a remote machine.",
|
|
185
|
+
remedy: "Run the command again when you want the app on a device."
|
|
186
|
+
} };
|
|
176
187
|
return { failure: {
|
|
177
188
|
code: error.code ?? "STIM_HOSTING_REFUSED",
|
|
178
189
|
message: error.message,
|
|
@@ -187,6 +198,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
|
|
|
187
198
|
if (!artifact.apkPath || !packageName) return fail("STIM_INSTALL_FAILED", "The built APK has no package identity.");
|
|
188
199
|
const devClientScheme = appMode === "development" && isExpo ? await resolveDevClientScheme(root, artifact.apkPath) ?? void 0 : void 0;
|
|
189
200
|
const launchedAt = now();
|
|
201
|
+
let marked = false;
|
|
190
202
|
try {
|
|
191
203
|
const run = await place(target, {
|
|
192
204
|
root,
|
|
@@ -199,7 +211,25 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
|
|
|
199
211
|
metroPort,
|
|
200
212
|
selectors,
|
|
201
213
|
...appMode === "development" && isExpo ? { devClientScheme } : {},
|
|
202
|
-
reserved: (placement) =>
|
|
214
|
+
reserved: (placement) => {
|
|
215
|
+
if (placement.device && !marked) {
|
|
216
|
+
marked = true;
|
|
217
|
+
report.writer.write({
|
|
218
|
+
src: "build",
|
|
219
|
+
level: "info",
|
|
220
|
+
marker: true,
|
|
221
|
+
event: "launch_attempt",
|
|
222
|
+
ts: now(),
|
|
223
|
+
platform: "android",
|
|
224
|
+
appId: packageName,
|
|
225
|
+
deviceId: placement.session,
|
|
226
|
+
remote: true,
|
|
227
|
+
host: target.host.machine,
|
|
228
|
+
msg: `launching ${packageName} on ${target.host.machine}`
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
return writePlacement(root, slot, placement);
|
|
232
|
+
},
|
|
203
233
|
note: out,
|
|
204
234
|
enterPhase
|
|
205
235
|
});
|
|
@@ -214,6 +244,7 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
|
|
|
214
244
|
}, slot);
|
|
215
245
|
let launched = run.launched;
|
|
216
246
|
let launchWarning;
|
|
247
|
+
let unattributed = false;
|
|
217
248
|
if (appMode === "development") {
|
|
218
249
|
const hostedLogs = followLogs(root, slot, "android", launchedAt);
|
|
219
250
|
let verification;
|
|
@@ -244,7 +275,17 @@ async function finishHostedAndroidRun({ target, artifact, root, slot = "default"
|
|
|
244
275
|
if (verification.state === "fatal") return fail("STIM_LAUNCH_FAILED", "The app failed its launch readiness check.", `Read the launch error above or run \`stim logs --errors\`. The full timeline is in ${logsDir}.`, { lastBuildStatus: true });
|
|
245
276
|
launched = verification.state === true ? true : verification.state === "bundling" ? "bundling" : "unverified";
|
|
246
277
|
launchWarning = verification.warning;
|
|
278
|
+
unattributed = verification.unattributed ?? false;
|
|
247
279
|
}
|
|
280
|
+
report.writer.write(launchOutcomeRecord({
|
|
281
|
+
launchState: launched,
|
|
282
|
+
release,
|
|
283
|
+
process: appMode === "process",
|
|
284
|
+
bundleId: packageName,
|
|
285
|
+
configuration: report.variant,
|
|
286
|
+
metroPort,
|
|
287
|
+
unattributed
|
|
288
|
+
}));
|
|
248
289
|
if (launched === "unverified") out(`Launch on ${target.host.machine} is unverified; check the hosted app, then retry stim android --remote ${target.host.machine}.`);
|
|
249
290
|
const host = hostedAndroidStatus(run.placement);
|
|
250
291
|
report.record.deviceName = host.device?.name ?? null;
|
|
@@ -337,8 +378,8 @@ function androidCommand(program) {
|
|
|
337
378
|
registerAndroid(program);
|
|
338
379
|
}
|
|
339
380
|
function registerAndroid(program) {
|
|
340
|
-
program.command("android").description("Build (or install from the shared cache), install and launch this workspace's Android app on its owned emulator. React Native and Expo Debug runs start the dev server when it is not running.").option("--eas-profile <name>", "Download a matching EAS development build; on a miss, print the build command without running it").option("--slot <name>", "Reusable device slot within this workspace (default: default)", parseDeviceSlotOption).option("--remote-build <value>", "Build on auto,
|
|
341
|
-
if (!parseMachine(value)) throw new InvalidArgumentError("expected eas, proxy, auto,
|
|
381
|
+
program.command("android").description("Build (or install from the shared cache), install and launch this workspace's Android app on its owned emulator. React Native and Expo Debug runs start the dev server when it is not running.").option("--eas-profile <name>", "Download a matching EAS development build; on a miss, print the build command without running it").option("--slot <name>", "Reusable device slot within this workspace (default: default)", parseDeviceSlotOption).option("--remote-build <value>", "Build on local, auto, remote (remote machines first), remote-only (never here), or one named machine; a name refuses without fallback", parseBuildMachineOption).option("--json", "Emit the facts as a single JSON line on stdout; every other line goes to stderr").option("--plan", "Predict the next build without building, booting or installing: resolve the fingerprint, check the local then remote cache, and print the expected cache result and duration. Writes no Stim state.").option("--no-metro-check", "Skip the reserved-port Metro health check and do not start it (the app will load no bundle unless something else serves it)").option("--no-build-cache", "Build fresh, ignoring cached artifacts (local and the project's build-cache provider); the fresh build still replaces the cache entry").option("--variant <name>", "Gradle variant to assemble and install (e.g. productionDebug on a flavored project); overrides the android.variant setting. A variant ending in Release embeds the JS bundle and skips Metro entirely. Default: debug").option("--system-image <id>", "Android system image to create this workspace's owned AVD from, as the sdkmanager package id (e.g. \"system-images;android-36;google_apis;arm64-v8a\"). Overrides the android.systemImage setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the installed images.").option("--device-profile <id>", "Hardware profile to create this workspace's owned AVD with, as an `avdmanager list device -c` id (e.g. \"pixel_fold\", \"pixel_tablet\"). Overrides the android.deviceProfile setting for this invocation. An unknown id refuses with STIM_BAD_ARG and prints the available ids.").option("--device [serial]", "Install and launch on a connected physical device instead of this workspace's owned emulator. With no serial, the first connected device this workspace can lease is used. Stim never creates, boots, or deletes a physical device.").option("--remote <target>", "Run on eas, proxy, or a named approved Mac from remote.machines; auto places on an approved Mac when this machine is full or busy; remote tries remote.machines in order first and runs here only when none takes it; remote-only never runs here; local runs here, whatever android.remote says", (value) => {
|
|
382
|
+
if (!parseMachine(value)) throw new InvalidArgumentError("expected eas, proxy, local, auto, remote, remote-only, or a tailnet machine name");
|
|
342
383
|
return value;
|
|
343
384
|
}).option("--wait <seconds>", "How long to wait for another workspace to release the device it leases, before refusing with STIM_DEVICE_BUSY (default 60, 0 refuses at once). Without --device, wait for an owned-device slot (default 600 seconds; --no-wait refuses immediately).").option("--no-wait", "Install on a device another workspace leases instead of waiting: this run takes no lease and, when both workspaces build the same app id, the install terminates the holder's running app. Without --device, refuse a full device cap or existing slot queue immediately.").action(async (opts) => {
|
|
344
385
|
if (opts.plan) return planAndroid(opts);
|
|
@@ -361,6 +402,14 @@ function runAndroidOperation(context, root, opts = {}) {
|
|
|
361
402
|
platform: PLATFORM,
|
|
362
403
|
slot: opts.slot ?? "default"
|
|
363
404
|
}, async (claim) => {
|
|
405
|
+
const lightened = await restoreLightenedDependencies(root, context);
|
|
406
|
+
if (lightened) {
|
|
407
|
+
printLightenedFailure(context, lightened, Boolean(opts.json));
|
|
408
|
+
return {
|
|
409
|
+
ok: false,
|
|
410
|
+
error: lightened
|
|
411
|
+
};
|
|
412
|
+
}
|
|
364
413
|
await recordWorkspaceUseAsync(root, /* @__PURE__ */ new Date(), context.env, context.cwd, context.signal);
|
|
365
414
|
const progress = startBuildProgress({
|
|
366
415
|
root,
|
|
@@ -628,6 +677,8 @@ async function runAndroid(options = {}) {
|
|
|
628
677
|
status: "failed",
|
|
629
678
|
errorCode: code,
|
|
630
679
|
diagnostics: rawDiagnostics,
|
|
680
|
+
message,
|
|
681
|
+
remedy,
|
|
631
682
|
out
|
|
632
683
|
});
|
|
633
684
|
logPostBuildFailure(artifactAcquired, writer, runFailureRecord({
|
|
@@ -733,7 +784,6 @@ async function runAndroid(options = {}) {
|
|
|
733
784
|
automatic: plan.target.kind === "hosted" && plan.target.machine === "auto",
|
|
734
785
|
signal: runCancellationSignal(context),
|
|
735
786
|
waitMs: plan.deviceSlotWaitMs,
|
|
736
|
-
displayName: basename(root),
|
|
737
787
|
reclaimIdleMinutes: deviceReclaimIdleMinutesSetting(settings),
|
|
738
788
|
waitingFor: (info) => progress.waitingFor(info, "device-slot"),
|
|
739
789
|
onWait: (ms) => {
|
|
@@ -754,6 +804,8 @@ async function runAndroid(options = {}) {
|
|
|
754
804
|
appMode,
|
|
755
805
|
metroCheck,
|
|
756
806
|
noWait: plan.deviceSlotWaitMs === 0,
|
|
807
|
+
waitMs: plan.deviceSlotWaitMs,
|
|
808
|
+
signal: settingsSignal,
|
|
757
809
|
buildMachine: options.buildMachine,
|
|
758
810
|
read: options.readHostedAndroid,
|
|
759
811
|
resolveSerial: resolveAvdSerial,
|
|
@@ -1068,6 +1120,7 @@ async function runAndroid(options = {}) {
|
|
|
1068
1120
|
}
|
|
1069
1121
|
record.avdName = device.avdName ?? null;
|
|
1070
1122
|
record.deviceName = device.deviceName ?? device.avdName ?? null;
|
|
1123
|
+
record.deviceSerial = device.serial;
|
|
1071
1124
|
record.systemImage = device.systemImage;
|
|
1072
1125
|
record.deviceProfile = device.deviceProfile;
|
|
1073
1126
|
let preparedArtifact;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
2
|
-
import { u as androidToolCwd } from "./android-
|
|
1
|
+
import { t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
|
+
import { u as androidToolCwd } from "./android-DriNoAVy.mjs";
|
|
3
3
|
//#region src/collector/android.ts
|
|
4
4
|
const LEVEL_BY_LETTER = {
|
|
5
5
|
V: "debug",
|
|
@@ -111,10 +111,19 @@ function logcatArgs(serial, pid) {
|
|
|
111
111
|
"time,epoch"
|
|
112
112
|
];
|
|
113
113
|
}
|
|
114
|
-
function
|
|
114
|
+
function killOnAbort(signal) {
|
|
115
|
+
if (!signal) return {};
|
|
116
|
+
return { onSpawn(child) {
|
|
117
|
+
const kill = () => child.kill("SIGKILL");
|
|
118
|
+
signal.addEventListener("abort", kill, { once: true });
|
|
119
|
+
child.once("close", () => signal.removeEventListener("abort", kill));
|
|
120
|
+
if (signal.aborted) kill();
|
|
121
|
+
} };
|
|
122
|
+
}
|
|
123
|
+
async function androidClockOffset(serial, { exec = getExecutor(), now = Date.now, signal } = {}) {
|
|
115
124
|
const before = now();
|
|
116
125
|
try {
|
|
117
|
-
const output = exec.
|
|
126
|
+
const output = (await exec.runFileAsync("adb", [
|
|
118
127
|
"-s",
|
|
119
128
|
serial,
|
|
120
129
|
"shell",
|
|
@@ -122,8 +131,9 @@ function androidClockOffset(serial, { exec = getExecutor(), now = Date.now } = {
|
|
|
122
131
|
"+%s%3N"
|
|
123
132
|
], {
|
|
124
133
|
timeoutMs: 1e3,
|
|
125
|
-
cwd: androidToolCwd()
|
|
126
|
-
|
|
134
|
+
cwd: androidToolCwd(),
|
|
135
|
+
...killOnAbort(signal)
|
|
136
|
+
})).trim();
|
|
127
137
|
const after = now();
|
|
128
138
|
if (!/^\d{13}$/.test(output) || after < before || after - before > 1e3) return null;
|
|
129
139
|
return Math.round((before + after) / 2) - Number(output);
|
|
@@ -136,25 +146,31 @@ function parsePidof(text) {
|
|
|
136
146
|
const pid = Number(first);
|
|
137
147
|
return Number.isInteger(pid) && pid > 0 ? pid : null;
|
|
138
148
|
}
|
|
139
|
-
function resolveAppPid(serial, packageName, { exec = null } = {}) {
|
|
149
|
+
async function resolveAppPid(serial, packageName, { exec = null, signal } = {}) {
|
|
140
150
|
const e = exec || getExecutor();
|
|
141
151
|
try {
|
|
142
|
-
return parsePidof(e.
|
|
152
|
+
return parsePidof(await e.runFileAsync("adb", [
|
|
143
153
|
"-s",
|
|
144
154
|
serial,
|
|
145
155
|
"shell",
|
|
146
156
|
"pidof",
|
|
147
157
|
"-s",
|
|
148
158
|
packageName
|
|
149
|
-
], {
|
|
159
|
+
], {
|
|
160
|
+
timeoutMs: 1e4,
|
|
161
|
+
...killOnAbort(signal)
|
|
162
|
+
}));
|
|
150
163
|
} catch {
|
|
151
164
|
return null;
|
|
152
165
|
}
|
|
153
166
|
}
|
|
154
|
-
async function waitForAppPid({ serial, packageName, timeoutMs = 3e4, pollMs = 500, exec = null, now = Date.now, sleep = defaultSleep }) {
|
|
167
|
+
async function waitForAppPid({ serial, packageName, timeoutMs = 3e4, pollMs = 500, exec = null, signal, now = Date.now, sleep = defaultSleep }) {
|
|
155
168
|
const deadline = now() + timeoutMs;
|
|
156
169
|
for (;;) {
|
|
157
|
-
const pid = resolveAppPid(serial, packageName, {
|
|
170
|
+
const pid = await resolveAppPid(serial, packageName, {
|
|
171
|
+
exec,
|
|
172
|
+
signal
|
|
173
|
+
});
|
|
158
174
|
if (pid) return {
|
|
159
175
|
ok: true,
|
|
160
176
|
pid
|
|
@@ -184,7 +200,7 @@ function pidWatchInterval() {
|
|
|
184
200
|
const override = Number(process.env.STIM_PID_WATCH_MS);
|
|
185
201
|
return Number.isFinite(override) && override > 0 ? override : PID_WATCH_MS;
|
|
186
202
|
}
|
|
187
|
-
function watchAppPid({ serial, packageName, pid, intervalMs = null, exec = null, onChange, resolve = resolveAppPid, setTimer = setTimeout, clearTimer = clearTimeout }) {
|
|
203
|
+
function watchAppPid({ serial, packageName, pid, intervalMs = null, exec = null, signal, onChange, resolve = resolveAppPid, setTimer = setTimeout, clearTimer = clearTimeout }) {
|
|
188
204
|
const every = intervalMs ?? pidWatchInterval();
|
|
189
205
|
let current = pid;
|
|
190
206
|
let stopped = false;
|
|
@@ -194,7 +210,10 @@ function watchAppPid({ serial, packageName, pid, intervalMs = null, exec = null,
|
|
|
194
210
|
if (stopped) return;
|
|
195
211
|
let next = null;
|
|
196
212
|
try {
|
|
197
|
-
next = resolve(serial, packageName, {
|
|
213
|
+
next = await resolve(serial, packageName, {
|
|
214
|
+
exec,
|
|
215
|
+
signal
|
|
216
|
+
});
|
|
198
217
|
} catch {}
|
|
199
218
|
if (next && next !== current) {
|
|
200
219
|
current = next;
|
|
@@ -211,9 +230,12 @@ function watchAppPid({ serial, packageName, pid, intervalMs = null, exec = null,
|
|
|
211
230
|
if (timer) clearTimer(timer);
|
|
212
231
|
timer = null;
|
|
213
232
|
},
|
|
214
|
-
probe() {
|
|
233
|
+
async probe() {
|
|
215
234
|
try {
|
|
216
|
-
return resolve(serial, packageName, {
|
|
235
|
+
return await resolve(serial, packageName, {
|
|
236
|
+
exec,
|
|
237
|
+
signal
|
|
238
|
+
});
|
|
217
239
|
} catch {
|
|
218
240
|
return null;
|
|
219
241
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { D as ownership_claim_exports, S as process_identity_exports, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, o as cancellableSleep, t as getExecutor, v as stopDeclaringSpawnsOn } from "./exec-
|
|
2
|
-
import { M as withDirLock$1, N as withDirLockAsync$1 } from "./workspace-state-
|
|
3
|
-
import { C as saveConfig, D as withConfigLock$1, G as projectDeviceSlots, H as deviceSlotPlatforms, K as removeSlotDevice, O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig, d as getConfigDir, f as getConfigPath$1, z as assignSlotDevice } from "./config-
|
|
4
|
-
import { n as runOperationFileQuiet, t as runOperationFile } from "./operation-exec-
|
|
5
|
-
import { c as androidDataPartitionSizeBytes } from "./settings-
|
|
6
|
-
import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-
|
|
7
|
-
import { c as pidExists, p as signalProcessTreeAsync } from "./metro-
|
|
1
|
+
import { D as ownership_claim_exports, S as process_identity_exports, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, o as cancellableSleep, t as getExecutor, v as stopDeclaringSpawnsOn } from "./exec-aULwtNly.mjs";
|
|
2
|
+
import { M as withDirLock$1, N as withDirLockAsync$1 } from "./workspace-state-BjqdjnJR.mjs";
|
|
3
|
+
import { C as saveConfig, D as withConfigLock$1, G as projectDeviceSlots, H as deviceSlotPlatforms, K as removeSlotDevice, O as withConfigLockAsync$1, _ as loadConfig$1, c as ensureConfig, d as getConfigDir, f as getConfigPath$1, z as assignSlotDevice } from "./config-Cn94Jc0g.mjs";
|
|
4
|
+
import { n as runOperationFileQuiet, t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
|
|
5
|
+
import { c as androidDataPartitionSizeBytes } from "./settings-BDVI8Ivc.mjs";
|
|
6
|
+
import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-CbWo21kb.mjs";
|
|
7
|
+
import { c as pidExists, p as signalProcessTreeAsync } from "./metro-CvyD-xwe.mjs";
|
|
8
8
|
import { renameSync, rmSync, writeFileSync } from "node:fs";
|
|
9
9
|
import { isDeepStrictEqual } from "node:util";
|
|
10
10
|
import { join } from "node:path";
|
|
@@ -1421,16 +1421,25 @@ function listAvdEmulatorProcesses(avdName, platform) {
|
|
|
1421
1421
|
], { timeoutMs: 5e3 });
|
|
1422
1422
|
return out === null ? null : parseAvdEmulatorProcesses(out, avdName);
|
|
1423
1423
|
}
|
|
1424
|
+
const PROCESS_TABLE_READ_TIMEOUTS_MS = [5e3, 15e3];
|
|
1425
|
+
async function readProcessTableAsync(operation, args, options = {}) {
|
|
1426
|
+
for (const timeoutMs of PROCESS_TABLE_READ_TIMEOUTS_MS) {
|
|
1427
|
+
const out = await runOperationFileQuiet(operation, getExecutor(), "ps", args, {
|
|
1428
|
+
timeoutMs,
|
|
1429
|
+
killSignal: "SIGKILL",
|
|
1430
|
+
...options
|
|
1431
|
+
});
|
|
1432
|
+
if (out !== null) return out;
|
|
1433
|
+
}
|
|
1434
|
+
return null;
|
|
1435
|
+
}
|
|
1424
1436
|
async function listAvdEmulatorProcessesAsync(avdName, platform, operation) {
|
|
1425
1437
|
if (platform === "win32") return [];
|
|
1426
|
-
const out = await
|
|
1438
|
+
const out = await readProcessTableAsync(operation, [
|
|
1427
1439
|
"-axww",
|
|
1428
1440
|
"-o",
|
|
1429
1441
|
"pid=,command="
|
|
1430
|
-
]
|
|
1431
|
-
timeoutMs: 5e3,
|
|
1432
|
-
killSignal: "SIGKILL"
|
|
1433
|
-
});
|
|
1442
|
+
]);
|
|
1434
1443
|
return out === null ? null : parseAvdEmulatorProcesses(out, avdName);
|
|
1435
1444
|
}
|
|
1436
1445
|
function scanAvdEmulatorProcesses(avdName, platform, listProcesses) {
|
|
@@ -1463,16 +1472,12 @@ async function assertOwnedAvdStoppedAsync(avdName, operation, resolveDirectory =
|
|
|
1463
1472
|
if (processes === null) throw new Error(`Could not read the process table to verify that owned AVD ${avdName} stopped.`);
|
|
1464
1473
|
const live = new Set(processes);
|
|
1465
1474
|
if (processId !== null && pidExists(processId)) {
|
|
1466
|
-
const stat = process.platform === "win32" ? null : await
|
|
1475
|
+
const stat = process.platform === "win32" ? null : await readProcessTableAsync(operation, [
|
|
1467
1476
|
"-o",
|
|
1468
1477
|
"stat=",
|
|
1469
1478
|
"-p",
|
|
1470
1479
|
String(processId)
|
|
1471
|
-
], {
|
|
1472
|
-
timeoutMs: 5e3,
|
|
1473
|
-
killSignal: "SIGKILL",
|
|
1474
|
-
cwd: operation?.cwd
|
|
1475
|
-
});
|
|
1480
|
+
], { cwd: operation?.cwd });
|
|
1476
1481
|
if (stat === null || !stat.trim().startsWith("Z")) live.add(processId);
|
|
1477
1482
|
}
|
|
1478
1483
|
if (live.size) throw new Error(`Owned AVD ${avdName} still has a live emulator process (${[...live].join(", ")}).`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { M as withDirLock$1, _ as ensureWorkspaceStorage } from "./workspace-state-
|
|
2
|
-
import { d as getConfigDir } from "./config-
|
|
3
|
-
import { m as defaultAndroidLayout } from "./settings-
|
|
4
|
-
import { r as register } from "./cache-manifest-
|
|
1
|
+
import { M as withDirLock$1, _ as ensureWorkspaceStorage } from "./workspace-state-BjqdjnJR.mjs";
|
|
2
|
+
import { d as getConfigDir } from "./config-Cn94Jc0g.mjs";
|
|
3
|
+
import { m as defaultAndroidLayout } from "./settings-BDVI8Ivc.mjs";
|
|
4
|
+
import { r as register } from "./cache-manifest-DEjqGGat.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,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as getExecutor } from "./exec-
|
|
2
|
+
import { t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
4
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
package/dist/api.d.mts
CHANGED
|
@@ -19,7 +19,7 @@ interface ReleasedLease {
|
|
|
19
19
|
}
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/commands/gc/results.d.ts
|
|
22
|
-
type GcResultKind = "archive" | "device" | "parkedDevice" | "parkedHostedDevice" | "idleDevice" | "deviceRecord" | "workspaceOutputs" | "recording" | "workspaceDirectory" | "project" | "buildLock" | "buildSlot" | "deviceLease" | "easSession" | "worktree" | "cache" | "statusCache" | "tempLeftover" | "trash" | "watchmanRoot" | "watchman" | "gradleDaemon" | "gradleVersion" | "kotlinDaemon" | "devServer" | "workspaceLogs" | "ledgerEntry" | "easLedgerEntry";
|
|
22
|
+
type GcResultKind = "archive" | "device" | "parkedDevice" | "parkedHostedDevice" | "idleDevice" | "deviceRecord" | "workspaceOutputs" | "worktreeDependencies" | "recording" | "workspaceDirectory" | "project" | "buildLock" | "buildSlot" | "deviceLease" | "easSession" | "worktree" | "cache" | "statusCache" | "tempLeftover" | "trash" | "watchmanRoot" | "watchman" | "gradleDaemon" | "gradleVersion" | "kotlinDaemon" | "devServer" | "workspaceLogs" | "ledgerEntry" | "easLedgerEntry";
|
|
23
23
|
type GcResultStatus = "done" | "kept" | "failed";
|
|
24
24
|
interface GcResult {
|
|
25
25
|
kind: GcResultKind;
|
|
@@ -259,8 +259,12 @@ interface DoctorReport {
|
|
|
259
259
|
maintenance: ReturnType<typeof maintenanceStatus> & {
|
|
260
260
|
logPath: string;
|
|
261
261
|
};
|
|
262
|
-
remoteMachines: BuildMachinesInspection["machines"]
|
|
263
|
-
|
|
262
|
+
remoteMachines: Array<BuildMachinesInspection["machines"][number] & {
|
|
263
|
+
priority?: number;
|
|
264
|
+
}>;
|
|
265
|
+
deviceHosts: Array<Awaited<ReturnType<typeof inspectDeviceHostMachines>>["machines"][number] & {
|
|
266
|
+
priority?: number;
|
|
267
|
+
}>;
|
|
264
268
|
toolchain: ToolchainReport | null;
|
|
265
269
|
findings: Finding[];
|
|
266
270
|
}
|
|
@@ -684,6 +688,11 @@ interface GcJsonSections {
|
|
|
684
688
|
reason: WorkspaceLogsKeptCode | null;
|
|
685
689
|
detail: string | null;
|
|
686
690
|
}[];
|
|
691
|
+
worktreeDependencies: {
|
|
692
|
+
path: string;
|
|
693
|
+
willDelete: boolean;
|
|
694
|
+
detail: string | null;
|
|
695
|
+
}[];
|
|
687
696
|
recordings: {
|
|
688
697
|
dir: string;
|
|
689
698
|
projectRoot: string | null;
|
|
@@ -697,6 +706,7 @@ interface GcJsonSections {
|
|
|
697
706
|
workspaceBuildOutputs: {
|
|
698
707
|
dir: string;
|
|
699
708
|
projectRoot: string | null;
|
|
709
|
+
inTreeDirs: string[];
|
|
700
710
|
bytes: number | null;
|
|
701
711
|
idleDays: number | null;
|
|
702
712
|
willClear: boolean;
|