stim 1.30.0 → 1.32.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-CrZ4rEbI.mjs → acquire-artifact-CI9fIokp.mjs} +1 -1
- package/dist/{act-BaKjDWGw.mjs → act-BfChMxcU.mjs} +71 -22
- package/dist/{activity-BTaUf0tc.mjs → activity-yjH7Q3zn.mjs} +4 -4
- package/dist/{agent-device-usage-output-DYBpO17K.mjs → agent-device-usage-output-DO412bsG.mjs} +4 -4
- package/dist/{android-BWqdDK6R.mjs → android-BNm5A40S.mjs} +41 -39
- package/dist/{android-BEQUDpOg.mjs → android-BeeC15Ve.mjs} +1 -1
- package/dist/{android-BCYLwmH6.mjs → android-D56S_GX3.mjs} +5 -5
- package/dist/{android-DdKG6lyD.mjs → android-DsEj2CCs.mjs} +27 -6
- package/dist/{android-cas-BH6K12__.mjs → android-cas-CbumHXIq.mjs} +4 -4
- package/dist/api.mjs +26 -26
- package/dist/{apk-signed-tail-B8kw4a8K.mjs → apk-signed-tail-B9Usseps.mjs} +2 -2
- package/dist/{artifact-M6W2l-xh.mjs → artifact-C8Nvp07y.mjs} +12 -12
- package/dist/{artifact-DTHXcmQ3.mjs → artifact-k1x9Jrn0.mjs} +12 -12
- package/dist/{auto-placement-CZaWDmcY.mjs → auto-placement--nfdQ9rp.mjs} +10 -10
- package/dist/{browser-web-JQ7lFej3.mjs → browser-web-6RDAeH0z.mjs} +11 -11
- package/dist/{build-C2ZWoCmg.mjs → build-VXX_dtl5.mjs} +22 -22
- package/dist/{build-cache-DlC3owap.mjs → build-cache-BsKim4V7.mjs} +4 -4
- package/dist/{build-plan-J3iRR3gI.mjs → build-plan-BK34X2iY.mjs} +6 -6
- package/dist/{cache-manifest-evF_zJ9U.mjs → cache-manifest-CfiEny4T.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{ccache-B8gY50-h.mjs → ccache-BrwGIxmV.mjs} +15 -15
- package/dist/{cli-xRPXJPtA.mjs → cli-Jc7obreB.mjs} +18 -18
- package/dist/cli.mjs +1 -1
- package/dist/{client-DrHykA24.mjs → client-lDmA-5jx.mjs} +4 -4
- package/dist/collector-run.mjs +4 -4
- package/dist/{command-output-BBW8eWPL.mjs → command-output-CfPW1bKP.mjs} +1 -1
- package/dist/{config-AbUjIBOQ.mjs → config-D5qNWJEP.mjs} +2 -2
- package/dist/{dependencies-vUh9mp5z.mjs → dependencies-DkZ8681S.mjs} +37 -37
- package/dist/{dependency-state-CPKAKCZ8.mjs → dependency-state-DZVln1P9.mjs} +1 -1
- package/dist/{dev-client-CASgAOu7.mjs → dev-client-eDZy6RoX.mjs} +2 -2
- package/dist/{device-CsIdRXfm.mjs → device-CTozKhU0.mjs} +11 -11
- package/dist/{device-ChnO7bR9.mjs → device-CeIikWac.mjs} +12 -12
- package/dist/{device-android-CcdQqQWg.mjs → device-android-zgD9We85.mjs} +20 -14
- package/dist/{device-capacity-C5C_jOQd.mjs → device-capacity-Bki6B-7h.mjs} +173 -74
- package/dist/device-host-worker.mjs +19 -15
- package/dist/{device-ios-DbmtPIiw.mjs → device-ios-TE5ejeXx.mjs} +8 -8
- package/dist/{device-lease-run-Do6zYA7y.mjs → device-lease-run-DeNGjJZM.mjs} +4 -4
- package/dist/{device-pool-CpoYiCGO.mjs → device-pool-mjyUYaau.mjs} +3 -3
- package/dist/{device-provision-B5Ms94qY.mjs → device-provision-j_B7G0e6.mjs} +8 -8
- package/dist/{doctor-CJSB5q-s.mjs → doctor-BlrcoQ7B.mjs} +36 -25
- package/dist/{doctor-CpfbYh3Q.mjs → doctor-CNZuvTSe.mjs} +1 -1
- package/dist/doctor-fingerprint.mjs +1 -1
- package/dist/{doctor-CLE4AZEI.mjs → doctor-sSLtn-j1.mjs} +15 -15
- package/dist/{doctor-watchman-D1IyMle9.mjs → doctor-watchman-CCuboyj1.mjs} +4 -4
- package/dist/{eas-build-DIDOHw2P.mjs → eas-build-CaG-Sfs9.mjs} +2 -2
- package/dist/{eas-fallback-DVS9oBSc.mjs → eas-fallback-BpX1lpco.mjs} +4 -4
- package/dist/{eas-session-ledger-CW3l-inB.mjs → eas-session-ledger-B-nTfdfk.mjs} +19 -6
- package/dist/{error-diagnostics-XJ9eWdtq.mjs → error-diagnostics-q56Im4D8.mjs} +8 -8
- package/dist/{gc-BVIcxCxE.mjs → gc-By2Kc-Ek.mjs} +2 -2
- package/dist/{gc-Co7PE36D.mjs → gc-Dv6nb9nf.mjs} +17 -17
- package/dist/{guide-DkepBgHT.mjs → guide-CwpsGWTJ.mjs} +141 -39
- package/dist/{hosted-android-Du7NxufJ.mjs → hosted-android-c5nPJA6S.mjs} +3 -3
- package/dist/{hosted-client-Cect92SZ.mjs → hosted-client-Hs-fD4L3.mjs} +36 -12
- package/dist/{hosted-logs-Opcjv1Lr.mjs → hosted-logs-BteXG8rm.mjs} +16 -10
- package/dist/{hosted-logs-sync-wsI7N1Hv.mjs → hosted-logs-sync-B8bjLEMs.mjs} +5 -5
- package/dist/{hosted-macos-BP9Kucat.mjs → hosted-macos-B4byscei.mjs} +5 -5
- package/dist/{hosted-native-DmdLSmvu.mjs → hosted-native-Bh9IJ_t5.mjs} +7 -7
- package/dist/{idle-shutdown-BcMN_cLm.mjs → idle-shutdown-BaeCo4ps.mjs} +6 -6
- package/dist/{ios-CXnoVO_z.mjs → ios-CdAV4-1E.mjs} +4 -4
- package/dist/{ios-BFkBHuRT.mjs → ios-D1XKSITX.mjs} +8 -8
- package/dist/{ios-CG0IsLtt.mjs → ios-D3oK9-O4.mjs} +32 -31
- package/dist/{ios-device-ClSfuu-_.mjs → ios-device-D7Gi3e1I.mjs} +1 -1
- package/dist/{ios-project-BM9TbTE7.mjs → ios-project-DDQlX_jX.mjs} +7 -7
- package/dist/{ios-state-Ce_dystM.mjs → ios-state-BEIJRJ7P.mjs} +1 -1
- package/dist/{js-swap-9Rx-5Nqz.mjs → js-swap-C8N5DXHl.mjs} +4 -4
- package/dist/{launch-DvJV1Mx4.mjs → launch-DxpvL6il.mjs} +19 -19
- package/dist/{lightened-23pqe7LS.mjs → lightened-Df6II_XI.mjs} +4 -4
- package/dist/{logs-DJgZlf2K.mjs → logs-CuWJWF88.mjs} +7 -7
- package/dist/{logs-Pkeh3wZk.mjs → logs-zv3ge7c6.mjs} +5 -5
- package/dist/{macos-DPvPQadc.mjs → macos-C6U-4Iip.mjs} +19 -19
- package/dist/{macos-Du07NsOB.mjs → macos-CbRZheLw.mjs} +1 -1
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +5 -5
- package/dist/{metro-BMQHczcf.mjs → metro-mKHEMO-a.mjs} +2 -2
- package/dist/{metro-request-BtF7ox53.mjs → metro-request-DODHNXCN.mjs} +8 -2
- package/dist/{named-ports-DcktE2Pw.mjs → named-ports-B0hCk2v-.mjs} +2 -2
- package/dist/{native-android-CBOM1_gB.mjs → native-android-9dVFqvTT.mjs} +16 -16
- package/dist/{native-gradle-artifact-inputs-D_iAfPuS.mjs → native-gradle-artifact-inputs-BlY97pt8.mjs} +3 -3
- package/dist/{native-runtime-D4cTwU0Z.mjs → native-runtime-DQfxW5Au.mjs} +6 -6
- package/dist/{native-xcode-inputs-BF-ogSnG.mjs → native-xcode-inputs-tDuUvSU8.mjs} +2 -2
- package/dist/{native-xcode-ios-DwJBfMP6.mjs → native-xcode-ios-CG-PD-7g.mjs} +15 -15
- package/dist/offload-worker.mjs +19 -19
- package/dist/{ownership-Dtz9G5Gl.mjs → ownership-CCfiBfOP.mjs} +2 -2
- package/dist/{phone-reverses-CvhhkGMH.mjs → phone-reverses-CnNwdz9A.mjs} +4 -4
- package/dist/{placement-log-CRR_TE1r.mjs → placement-log-CRL0IY-k.mjs} +1 -1
- package/dist/{plan-placement-CdLc-pTb.mjs → plan-placement-2imvnlWP.mjs} +6 -6
- package/dist/{ports-g4N_cfyg.mjs → ports-CKktj5lV.mjs} +3 -3
- package/dist/{prebuild-DBJMhwSS.mjs → prebuild-CyNrUWgV.mjs} +9 -9
- package/dist/{project-DPQjnpcI.mjs → project-Crtcbfl0.mjs} +15 -15
- package/dist/{react-native-android-idMWOwkX.mjs → react-native-android-Cabe2YER.mjs} +22 -22
- package/dist/{react-native-build-BSoh4HkH.mjs → react-native-build-DhWBUV_H.mjs} +7 -7
- package/dist/{react-native-doctor-CYibY8-4.mjs → react-native-doctor-D-twmBon.mjs} +5 -5
- package/dist/{react-native-ios-13KIIOOy.mjs → react-native-ios-u_ley41B.mjs} +14 -14
- package/dist/{recordings-CHMaF73C.mjs → recordings-BWnIlhZH.mjs} +1 -1
- package/dist/{reload-BUQI3dSu.mjs → reload-D2TpUlns.mjs} +14 -14
- package/dist/{reload-B9DZOjcV.mjs → reload-f9hvEHE9.mjs} +1 -1
- package/dist/{remote-C-RGHhAP.mjs → remote-BsBAjlD2.mjs} +8 -8
- package/dist/{result-W4HCum4A.mjs → result-EOsWV6sp.mjs} +16 -16
- package/dist/{run-BQAmrohh.mjs → run-2CHAJ9Oj.mjs} +1 -1
- package/dist/{selection-PCMT97XD.mjs → selection-C4ZQz_ER.mjs} +3 -3
- package/dist/{server-bare-CEQdB_F4.mjs → server-bare-CFyVFZXJ.mjs} +1 -1
- package/dist/{server-command-oqi3TDy7.mjs → server-command-BMyKtnjH.mjs} +4 -4
- package/dist/{server-expo-C1K07shx.mjs → server-expo-BLxcN2x2.mjs} +2 -2
- package/dist/server-expo-DwR3eD-a.mjs +2 -0
- package/dist/{settings-D776ygML.mjs → settings-C6UTYW2K.mjs} +1 -1
- package/dist/{settings-CKlMOmhj.mjs → settings-jeS0WmUF.mjs} +2 -2
- package/dist/{settings-payload-CE-NZ6Lq.mjs → settings-payload-CrX933Xi.mjs} +4 -4
- package/dist/{settings-write-D7Xwa_-M.mjs → settings-write-DMcT23Kl.mjs} +5 -5
- package/dist/settings.schema.json +47 -5
- package/dist/{simslim-CbpHERcv.mjs → simslim-93xmPh-d.mjs} +1 -1
- package/dist/{slot-launch-CeIK1iUI.mjs → slot-launch-CSpQcFZw.mjs} +6 -6
- package/dist/{stage-Blqe6bWb.mjs → stage-Cf9uSM1a.mjs} +1 -1
- package/dist/{start-B7J5a9nS.mjs → start-CLN_r9EG.mjs} +10 -10
- package/dist/{start-CvP2pJjc.mjs → start-CquYgzVf.mjs} +1 -1
- package/dist/{state-D5ZxwCGJ.mjs → state-CM_HvvkS.mjs} +2 -2
- package/dist/{state-C2AUjjhg.mjs → state-CiflgxTP.mjs} +1 -1
- package/dist/{stats-Uo7l8OAk.mjs → stats-BVEZuSlg.mjs} +4 -4
- package/dist/{status-CqJI1TgG.mjs → status-Bhdy07v0.mjs} +1 -1
- package/dist/{status-_rWXFSO7.mjs → status-D0ruTmPl.mjs} +26 -25
- package/dist/{status-CK7ZoEhV.mjs → status-GQ-JqvRi.mjs} +1 -1
- package/dist/{status-watch-CnSyXUmj.mjs → status-watch-DSu_hhg6.mjs} +4 -4
- package/dist/status-worker.mjs +1 -1
- package/dist/{stim-desktop-CYXLFpFS.mjs → stim-desktop-1XxET4S8.mjs} +1 -1
- package/dist/{stop-CMVfaA-6.mjs → stop-B616ZyTv.mjs} +4 -4
- package/dist/{stop-Bogo9oO2.mjs → stop-RZqER_Ww.mjs} +2 -2
- package/dist/{stop-CnF9ixYe.mjs → stop-W4DK8qZq.mjs} +15 -15
- package/dist/supervisor-run.mjs +134 -42
- package/dist/{support-DUevTPur.mjs → support-NxnD8QXd.mjs} +9 -9
- package/dist/{support-BGqpYMV8.mjs → support-S_5nkkzs.mjs} +4 -4
- package/dist/{swiftpm-artifact-inputs-BcJk6-3u.mjs → swiftpm-artifact-inputs-yp8D5LE4.mjs} +1 -1
- package/dist/{swiftpm-macos-DBrmoocG.mjs → swiftpm-macos-Gtq9bNQb.mjs} +8 -8
- package/dist/{toolchain-Cw9VVHOY.mjs → toolchain-B2bN8jEo.mjs} +1 -1
- package/dist/{toolchain-DLdoyxIt.mjs → toolchain-Bnm8vUCV.mjs} +4 -4
- package/dist/{warm-progress-DQ2wQZKp.mjs → warm-progress-_aTMvkIH.mjs} +3 -3
- package/dist/{web-g9U7L1sR.mjs → web-BdWG8b5_.mjs} +8 -8
- package/dist/web-DwuluWJt.mjs +2 -0
- package/dist/web-run.mjs +4 -4
- package/dist/{workspace-state-DGwkPXwq.mjs → workspace-state-3bF4TB8P.mjs} +2 -2
- package/dist/{workspaces-7_RWoi6c.mjs → workspaces-C59v9bpD.mjs} +19 -15
- package/dist/{worktree-qKJ3x07S.mjs → worktree-CinoSsGy.mjs} +24 -24
- package/dist/{worktree-DEet9H3p.mjs → worktree-K9F50fD_.mjs} +1 -1
- package/package.json +7 -7
- package/dist/server-expo-BUFAq2In.mjs +0 -2
- package/dist/web-CI_qCRPw.mjs +0 -2
package/dist/supervisor-run.mjs
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { S as process_identity_exports, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { c as withWorkspaceStateLock, d as writeWorkspaceState, j as workspaceStateFile$1, k as workspaceLogsDir$1, n as clearWorkspaceStateKeys, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-
|
|
3
|
-
import {
|
|
4
|
-
import { $ as runnableMetroCommand, X as resolveProjectSettings } from "./settings-
|
|
5
|
-
import { D as clearExpoMetroTunnel, E as MODE_EXPO, N as readPidFile, R as writePidFile, T as MODE_COMMAND, d as nativeProjectIntegration, j as clearWorkspaceSupervisor, v as detectIsExpo, w as MODE_BARE } from "./project-
|
|
6
|
-
import {
|
|
2
|
+
import { c as withWorkspaceStateLock, d as writeWorkspaceState, j as workspaceStateFile$1, k as workspaceLogsDir$1, n as clearWorkspaceStateKeys, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-3bF4TB8P.mjs";
|
|
3
|
+
import { E as setSupervisor, K as projectDeviceSlots, W as parseDeviceSlotKey, at as parseMachine$1, m as getProject, o as clearSupervisor } from "./config-D5qNWJEP.mjs";
|
|
4
|
+
import { $ as runnableMetroCommand, X as resolveProjectSettings } from "./settings-C6UTYW2K.mjs";
|
|
5
|
+
import { D as clearExpoMetroTunnel, E as MODE_EXPO, N as readPidFile, R as writePidFile, T as MODE_COMMAND, d as nativeProjectIntegration, j as clearWorkspaceSupervisor, v as detectIsExpo, w as MODE_BARE } from "./project-Crtcbfl0.mjs";
|
|
6
|
+
import { K as ownedAvdSerialResolver } from "./android-DsEj2CCs.mjs";
|
|
7
7
|
import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
|
|
8
|
-
import { C as devServerStopLevel, O as vanishedSupervisorMessage, w as devServerStopRecord, x as describeDevServerStop } from "./ccache-
|
|
9
|
-
import { d as parseWatchRoots, l as parseSubscriberNames, m as runWatchman, u as parseTriggerCount } from "./eas-session-ledger-
|
|
10
|
-
import { B as workspaceBuildInProgress, v as withIdleWorkspace } from "./workspaces-
|
|
11
|
-
import { S as parseLease, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, r as createActivityReader, v as deviceLeasePath, w as parseWorkspaceLeases } from "./activity-
|
|
8
|
+
import { C as devServerStopLevel, O as vanishedSupervisorMessage, w as devServerStopRecord, x as describeDevServerStop } from "./ccache-BrwGIxmV.mjs";
|
|
9
|
+
import { d as parseWatchRoots, l as parseSubscriberNames, m as runWatchman, u as parseTriggerCount } from "./eas-session-ledger-B-nTfdfk.mjs";
|
|
10
|
+
import { B as workspaceBuildInProgress, v as withIdleWorkspace } from "./workspaces-C59v9bpD.mjs";
|
|
11
|
+
import { S as parseLease, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, r as createActivityReader, v as deviceLeasePath, w as parseWorkspaceLeases } from "./activity-yjH7Q3zn.mjs";
|
|
12
12
|
import { t as describeError } from "./errors-DHm_U5gv.mjs";
|
|
13
|
-
import { d as hostConnector, p as probeHostedSession } from "./hosted-client-
|
|
14
|
-
import {
|
|
13
|
+
import { d as hostConnector, p as probeHostedSession } from "./hosted-client-Hs-fD4L3.mjs";
|
|
14
|
+
import { s as watchWorkspaceState, t as clearHostedMetro } from "./metro-request-DODHNXCN.mjs";
|
|
15
15
|
import { t as relaunchWithLogFile } from "./detached-entry-BPlSaCwC.mjs";
|
|
16
|
-
import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-
|
|
16
|
+
import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-BaeCo4ps.mjs";
|
|
17
17
|
import { t as triggerMaintenance } from "./trigger-CfnOfpDd.mjs";
|
|
18
18
|
import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
19
19
|
import { dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
20
20
|
import { LOG_ROTATE_BYTES } from "@stim-cli/core";
|
|
21
21
|
import { DEV_SERVER_STOP_REQUEST_KEY, HOSTED_METRO_LINKS_KEY, HOSTED_METRO_REQUESTS_KEY, IDLE_STOP_KEY, hostedAndroidPlacements, hostedIosPlacements, hostedMetroLinks, hostedMetroRequests, hostedNativeRecords, parseHostedNativePlacement, readDevServerStopRequest } from "@stim-cli/core/state";
|
|
22
22
|
import { fileURLToPath } from "node:url";
|
|
23
|
-
import { connect } from "node:net";
|
|
23
|
+
import { connect, createServer } from "node:net";
|
|
24
24
|
//#region src/supervisor/metro-links.ts
|
|
25
25
|
const IDLE_LINKS = 4;
|
|
26
26
|
const FRAME_BYTES = 32768;
|
|
@@ -33,6 +33,35 @@ const RETRY_MS = [
|
|
|
33
33
|
];
|
|
34
34
|
const METRO_RESET = 4410;
|
|
35
35
|
/**
|
|
36
|
+
* Carries one TCP stream over a link connection as binary frames, with backpressure both ways. A clean end on either
|
|
37
|
+
* side closes the other cleanly, and a reset resets it. `ended` runs once when `socket` closes.
|
|
38
|
+
*/
|
|
39
|
+
function pipeLink(connection, socket, ended) {
|
|
40
|
+
socket.on("error", () => socket.destroy());
|
|
41
|
+
socket.once("close", (hadError) => {
|
|
42
|
+
ended();
|
|
43
|
+
connection.flushed().then(() => connection.close(hadError ? METRO_RESET : 1e3));
|
|
44
|
+
});
|
|
45
|
+
connection.onDropped((code) => code === 1e3 ? socket.end() : socket.resetAndDestroy());
|
|
46
|
+
let paused = false;
|
|
47
|
+
connection.onBinary((frame) => {
|
|
48
|
+
if (socket.write(frame) || paused) return;
|
|
49
|
+
paused = true;
|
|
50
|
+
connection.pause();
|
|
51
|
+
socket.once("drain", () => {
|
|
52
|
+
paused = false;
|
|
53
|
+
connection.resume();
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
socket.on("data", (chunk) => {
|
|
57
|
+
socket.pause();
|
|
58
|
+
(async () => {
|
|
59
|
+
for (let offset = 0; offset < chunk.length; offset += FRAME_BYTES) await connection.sendBinary(chunk.subarray(offset, offset + FRAME_BYTES));
|
|
60
|
+
if (!socket.destroyed) socket.resume();
|
|
61
|
+
})();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
36
65
|
* Keeps `IDLE_LINKS` authenticated connections open to `machine`, each offered to `session`'s Metro bridge there. The
|
|
37
66
|
* host pairs one with each connection the hosted device makes; this side then pipes it to loopback `metroPort` and
|
|
38
67
|
* opens a replacement. `onReady` runs when the host holds a link after holding none, and `onLost` when no linked
|
|
@@ -86,29 +115,9 @@ function openMetroLinks({ machine, session, metroPort, onReady, onLost, onError
|
|
|
86
115
|
port: metroPort
|
|
87
116
|
});
|
|
88
117
|
streams.add(metro);
|
|
89
|
-
|
|
90
|
-
metro.once("close", (hadError) => {
|
|
118
|
+
pipeLink(connection, metro, () => {
|
|
91
119
|
streams.delete(metro);
|
|
92
120
|
ended();
|
|
93
|
-
connection.flushed().then(() => connection.close(hadError ? METRO_RESET : 1e3));
|
|
94
|
-
});
|
|
95
|
-
connection.onDropped((code) => code === 1e3 ? metro.end() : metro.resetAndDestroy());
|
|
96
|
-
let paused = false;
|
|
97
|
-
connection.onBinary((frame) => {
|
|
98
|
-
if (metro.write(frame) || paused) return;
|
|
99
|
-
paused = true;
|
|
100
|
-
connection.pause();
|
|
101
|
-
metro.once("drain", () => {
|
|
102
|
-
paused = false;
|
|
103
|
-
connection.resume();
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
metro.on("data", (chunk) => {
|
|
107
|
-
metro.pause();
|
|
108
|
-
(async () => {
|
|
109
|
-
for (let offset = 0; offset < chunk.length; offset += FRAME_BYTES) await connection.sendBinary(chunk.subarray(offset, offset + FRAME_BYTES));
|
|
110
|
-
if (!metro.destroyed) metro.resume();
|
|
111
|
-
})();
|
|
112
121
|
});
|
|
113
122
|
};
|
|
114
123
|
const link = async () => {
|
|
@@ -179,6 +188,70 @@ function openMetroLinks({ machine, session, metroPort, onReady, onLost, onError
|
|
|
179
188
|
return { close: stop };
|
|
180
189
|
}
|
|
181
190
|
//#endregion
|
|
191
|
+
//#region src/supervisor/agent-relay.ts
|
|
192
|
+
const MAX_CONNECTIONS = 8;
|
|
193
|
+
function refuse(socket, message) {
|
|
194
|
+
const body = `${message}\n`;
|
|
195
|
+
socket.resume();
|
|
196
|
+
socket.end(`HTTP/1.1 502 Bad Gateway\r\ncontent-type: text/plain\r\nconnection: close\r\ncontent-length: ${Buffer.byteLength(body)}\r\n\r\n${body}`);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Listens on a loopback port and carries each connection to `session`'s agent route on `machine` over its own
|
|
200
|
+
* authenticated `device-host.agent.link` connection, so the host knows the request comes from this machine's key.
|
|
201
|
+
* The host still requires the session's agent token in each request. A connection the host does not link is answered
|
|
202
|
+
* with 502 and the reason. It holds at most 8 connections at a time, and listens on `port` when that is free, so a
|
|
203
|
+
* remote config written for an earlier relay of the session still reaches it.
|
|
204
|
+
*/
|
|
205
|
+
function openAgentRelay({ machine, session, port: preferred }) {
|
|
206
|
+
const connect = hostConnector(machine);
|
|
207
|
+
const live = /* @__PURE__ */ new Set();
|
|
208
|
+
const sockets = /* @__PURE__ */ new Set();
|
|
209
|
+
let closed = false;
|
|
210
|
+
const relay = async (socket) => {
|
|
211
|
+
sockets.add(socket);
|
|
212
|
+
socket.once("close", () => sockets.delete(socket));
|
|
213
|
+
socket.on("error", () => socket.destroy());
|
|
214
|
+
let connection;
|
|
215
|
+
try {
|
|
216
|
+
connection = await connect();
|
|
217
|
+
if (closed || socket.destroyed) return void connection.close();
|
|
218
|
+
if (!connection.supports("hosted-agent-link")) throw new Error(`${machine} runs a stim-server that cannot carry agent control over the local network. Update stim-server there, then retry.`);
|
|
219
|
+
const reply = await connection.request("device-host.agent.link", { session });
|
|
220
|
+
if ("error" in reply) throw new Error(`${machine} refused the agent link: ${reply.error.message}`);
|
|
221
|
+
if (closed || socket.destroyed) return void connection.close();
|
|
222
|
+
const linked = connection;
|
|
223
|
+
live.add(linked);
|
|
224
|
+
pipeLink(linked, socket, () => live.delete(linked));
|
|
225
|
+
socket.resume();
|
|
226
|
+
} catch (error) {
|
|
227
|
+
connection?.close();
|
|
228
|
+
if (!socket.destroyed) refuse(socket, error instanceof Error ? error.message : String(error));
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
const server = createServer({ pauseOnConnect: true }, (socket) => void relay(socket));
|
|
232
|
+
server.maxConnections = MAX_CONNECTIONS;
|
|
233
|
+
server.on("error", () => {});
|
|
234
|
+
const listen = (port) => new Promise((resolve, reject) => {
|
|
235
|
+
server.once("error", reject);
|
|
236
|
+
server.listen(port, "127.0.0.1", () => {
|
|
237
|
+
server.off("error", reject);
|
|
238
|
+
resolve(server.address().port);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
const port = preferred ? listen(preferred).catch(() => listen(0)) : listen(0);
|
|
242
|
+
port.catch(() => {});
|
|
243
|
+
return {
|
|
244
|
+
port,
|
|
245
|
+
close: () => {
|
|
246
|
+
closed = true;
|
|
247
|
+
server.close();
|
|
248
|
+
for (const connection of live) connection.close();
|
|
249
|
+
for (const socket of sockets) socket.destroy();
|
|
250
|
+
live.clear();
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
//#endregion
|
|
182
255
|
//#region src/supervisor/hosted-metro.ts
|
|
183
256
|
function reconcileHostedMetro(requests, active) {
|
|
184
257
|
const same = (session) => JSON.stringify(requests[session]) === JSON.stringify(active[session]);
|
|
@@ -270,31 +343,50 @@ function watchHostedMetro(root, metroPort, processToken) {
|
|
|
270
343
|
for (const session of actions.open) {
|
|
271
344
|
const request = requests[session];
|
|
272
345
|
active[session] = request;
|
|
273
|
-
|
|
346
|
+
const relay = parseMachine$1(request.machine)?.transport === "local" ? openAgentRelay({
|
|
347
|
+
machine: request.machine,
|
|
348
|
+
session,
|
|
349
|
+
port: hostedMetroLinks(state)[session]?.agentPort
|
|
350
|
+
}) : null;
|
|
351
|
+
let agentPort;
|
|
352
|
+
const listening = relay ? relay.port.then((port) => void (agentPort = port)).catch(() => {}) : Promise.resolve();
|
|
353
|
+
let ready = false;
|
|
354
|
+
const pool = openMetroLinks({
|
|
274
355
|
machine: request.machine,
|
|
275
356
|
session,
|
|
276
357
|
metroPort,
|
|
277
|
-
onReady: () => {
|
|
278
|
-
|
|
358
|
+
onReady: async () => {
|
|
359
|
+
ready = true;
|
|
360
|
+
await listening;
|
|
361
|
+
if (active[session] === request && ready) publish(session, {
|
|
279
362
|
id: request.id,
|
|
280
363
|
processToken,
|
|
281
|
-
ready: true
|
|
364
|
+
ready: true,
|
|
365
|
+
...agentPort ? { agentPort } : {}
|
|
282
366
|
});
|
|
283
367
|
},
|
|
284
368
|
onLost: () => {
|
|
369
|
+
ready = false;
|
|
285
370
|
if (active[session] === request) publish(session, {
|
|
286
371
|
id: request.id,
|
|
287
|
-
processToken
|
|
372
|
+
processToken,
|
|
373
|
+
...agentPort ? { agentPort } : {}
|
|
288
374
|
});
|
|
289
375
|
},
|
|
290
376
|
onError: (message) => {
|
|
377
|
+
ready = false;
|
|
291
378
|
if (active[session] === request) publish(session, {
|
|
292
379
|
id: request.id,
|
|
293
380
|
processToken,
|
|
294
|
-
error: message
|
|
381
|
+
error: message,
|
|
382
|
+
...agentPort ? { agentPort } : {}
|
|
295
383
|
});
|
|
296
384
|
}
|
|
297
|
-
})
|
|
385
|
+
});
|
|
386
|
+
pools.set(session, { close: () => {
|
|
387
|
+
pool.close();
|
|
388
|
+
relay?.close();
|
|
389
|
+
} });
|
|
298
390
|
}
|
|
299
391
|
if (!probing && Date.now() >= probingAt) {
|
|
300
392
|
clearTimeout(probeTimer);
|
|
@@ -802,7 +894,7 @@ async function runSupervisor({ root, port, tunnel = false, resetCache = false, i
|
|
|
802
894
|
try {
|
|
803
895
|
let start;
|
|
804
896
|
if (command) {
|
|
805
|
-
const startServer = startCommand ?? (await import("./server-command-
|
|
897
|
+
const startServer = startCommand ?? (await import("./server-command-BMyKtnjH.mjs")).startCommandServer;
|
|
806
898
|
start = (opts) => startServer({
|
|
807
899
|
...opts,
|
|
808
900
|
command
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { k as workspaceLogsDir } from "./workspace-state-
|
|
2
|
-
import { h as shortUdid, l as phaseLine } from "./command-output-
|
|
3
|
-
import { _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, b as iosProjectDirSetting, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys, x as iosProjectDirSettingError } from "./settings-
|
|
4
|
-
import { J as describeDiagnostic } from "./toolchain-
|
|
5
|
-
import { P as parseIosSimulatorApp } from "./ios-
|
|
1
|
+
import { k as workspaceLogsDir } from "./workspace-state-3bF4TB8P.mjs";
|
|
2
|
+
import { h as shortUdid, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
|
|
3
|
+
import { _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, b as iosProjectDirSetting, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys, x as iosProjectDirSettingError } from "./settings-C6UTYW2K.mjs";
|
|
4
|
+
import { J as describeDiagnostic } from "./toolchain-Bnm8vUCV.mjs";
|
|
5
|
+
import { P as parseIosSimulatorApp } from "./ios-CdAV4-1E.mjs";
|
|
6
6
|
import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
|
|
7
|
-
import { d as resolveBuildPlacement } from "./selection-
|
|
8
|
-
import { l as parseDeviceWait } from "./device-lease-run-
|
|
9
|
-
import {
|
|
10
|
-
import { t as IosDeviceMismatchError } from "./device-ios-
|
|
7
|
+
import { d as resolveBuildPlacement } from "./selection-C4ZQz_ER.mjs";
|
|
8
|
+
import { l as parseDeviceWait } from "./device-lease-run-DeNGjJZM.mjs";
|
|
9
|
+
import { g as unknownIosRuntimeRefusal, h as unknownIosDeviceTypeRefusal, t as DEFAULT_DEVICE_SLOT_WAIT_MS, u as layerNote } from "./device-capacity-Bki6B-7h.mjs";
|
|
10
|
+
import { t as IosDeviceMismatchError } from "./device-ios-TE5ejeXx.mjs";
|
|
11
11
|
import { basename, join } from "node:path";
|
|
12
12
|
import chalk from "chalk";
|
|
13
13
|
function buildLogFile(root) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
2
|
import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { yn as pickDevClientScheme } from "./ccache-
|
|
5
|
-
import {
|
|
6
|
-
import { t as devClientScheme } from "./dev-client-
|
|
3
|
+
import { D as extractEmulatorFailure, E as emulatorProbeSession, O as findBuildTool, Q as pickDefaultSystemImage, T as emulatorFailureRemedy, c as androidPoolNoCandidatesRefusal, et as profileNeedsFoldFeature, j as hostSystemImageArch, l as androidSystemImageAbi, o as androidHome, s as androidPoolCandidates, w as emulatorDiskSpaceRemedy } from "./android-DsEj2CCs.mjs";
|
|
4
|
+
import { yn as pickDevClientScheme } from "./ccache-BrwGIxmV.mjs";
|
|
5
|
+
import { m as unknownAndroidSystemImageRefusal, p as unknownAndroidDeviceProfileRefusal, u as layerNote } from "./device-capacity-Bki6B-7h.mjs";
|
|
6
|
+
import { t as devClientScheme } from "./dev-client-eDZy6RoX.mjs";
|
|
7
7
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
8
8
|
import { relative } from "node:path";
|
|
9
9
|
//#region src/commands/android/support.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
2
|
import { s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
|
|
3
|
-
import { n as buildCacheKey } from "./build-cache-
|
|
3
|
+
import { n as buildCacheKey } from "./build-cache-BsKim4V7.mjs";
|
|
4
4
|
import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
|
|
5
5
|
import { a as sourceManifest, r as nativeFileDigest } from "./native-source-D1AzWiuP.mjs";
|
|
6
6
|
import { createHash } from "node:crypto";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { T as trackReportResource, _ as spawnDeclared, t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { y as sharedBuildCache } from "./workspace-state-
|
|
3
|
-
import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-
|
|
4
|
-
import { r as register } from "./cache-manifest-
|
|
5
|
-
import { h as macosToolchainAsync, st as runCancellationSignal } from "./toolchain-
|
|
6
|
-
import "./build-cache-
|
|
2
|
+
import { y as sharedBuildCache } from "./workspace-state-3bF4TB8P.mjs";
|
|
3
|
+
import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-C6UTYW2K.mjs";
|
|
4
|
+
import { r as register } from "./cache-manifest-CfiEny4T.mjs";
|
|
5
|
+
import { h as macosToolchainAsync, st as runCancellationSignal } from "./toolchain-Bnm8vUCV.mjs";
|
|
6
|
+
import "./build-cache-BsKim4V7.mjs";
|
|
7
7
|
import { l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
|
|
8
8
|
import { r as nativeFileDigest } from "./native-source-D1AzWiuP.mjs";
|
|
9
|
-
import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-
|
|
9
|
+
import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-Cf9uSM1a.mjs";
|
|
10
10
|
import { t as validateMacosArtifactPlatform } from "./artifact-platform-BO2Uvk_A.mjs";
|
|
11
|
-
import { t as logLines } from "./run-
|
|
12
|
-
import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-
|
|
11
|
+
import { t as logLines } from "./run-2CHAJ9Oj.mjs";
|
|
12
|
+
import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-yp8D5LE4.mjs";
|
|
13
13
|
import { createHash } from "node:crypto";
|
|
14
14
|
import { createReadStream, createWriteStream, existsSync, realpathSync } from "node:fs";
|
|
15
15
|
import { tmpdir } from "node:os";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-
|
|
1
|
+
import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-Bnm8vUCV.mjs";
|
|
2
2
|
export { macosToolchain, macosToolchainAsync };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, _ as spawnDeclared, b as operationState, g as signalDeclaredSpawns, h as refuseDeclaredSpawns, m as declareSpawnsOn, p as allowDeclaredSpawns, t as getExecutor, u as withWorkspaceProcessLock, v as stopDeclaringSpawnsOn, y as isTermination } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-
|
|
2
|
+
import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-3bF4TB8P.mjs";
|
|
3
3
|
import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
4
|
-
import { a as formatElapsed, l as phaseLine } from "./command-output-
|
|
4
|
+
import { a as formatElapsed, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
|
|
5
5
|
import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
|
|
6
|
-
import { o as androidHome } from "./android-
|
|
6
|
+
import { o as androidHome } from "./android-DsEj2CCs.mjs";
|
|
7
7
|
import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
|
|
8
8
|
import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
|
|
9
|
-
import { t as cleanLine } from "./server-expo-
|
|
9
|
+
import { t as cleanLine } from "./server-expo-BLxcN2x2.mjs";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
import { createHash } from "node:crypto";
|
|
12
12
|
import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, E as debugLog, l as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { E as workspaceDir, M as withDirLock, _ as ensureWorkspaceStorage, h as discoverAgentSessions, m as attributeAgentSessions, o as updateWorkspaceState, p as agentKey } from "./workspace-state-
|
|
2
|
+
import { E as workspaceDir, M as withDirLock, _ as ensureWorkspaceStorage, h as discoverAgentSessions, m as attributeAgentSessions, o as updateWorkspaceState, p as agentKey } from "./workspace-state-3bF4TB8P.mjs";
|
|
3
3
|
import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
|
|
4
|
-
import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-
|
|
5
|
-
import {
|
|
4
|
+
import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-C6UTYW2K.mjs";
|
|
5
|
+
import { U as ownedAvdDirectory } from "./android-DsEj2CCs.mjs";
|
|
6
6
|
import { s as pullRequestLookups } from "./pull-request-BzLmzAIQ.mjs";
|
|
7
7
|
import { clearClaimChild, markClaimChildPending, releaseClaim, setClaimChild, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
|
|
8
8
|
import { randomUUID } from "node:crypto";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-
|
|
2
|
-
import {
|
|
3
|
-
import { f as refuseNoProject, l as phaseLine } from "./command-output-
|
|
4
|
-
import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-
|
|
5
|
-
import { f as projectRegistry, n as findCommandWorkspace } from "./project-
|
|
6
|
-
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-
|
|
7
|
-
import { o as readWebRecord, r as cdpEndpoint } from "./state-
|
|
1
|
+
import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-3bF4TB8P.mjs";
|
|
2
|
+
import { D as upsertProject, k as withConfigLockAsync, m as getProject } from "./config-D5qNWJEP.mjs";
|
|
3
|
+
import { f as refuseNoProject, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
|
|
4
|
+
import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-C6UTYW2K.mjs";
|
|
5
|
+
import { f as projectRegistry, n as findCommandWorkspace } from "./project-Crtcbfl0.mjs";
|
|
6
|
+
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-1XxET4S8.mjs";
|
|
7
|
+
import { o as readWebRecord, r as cdpEndpoint } from "./state-CM_HvvkS.mjs";
|
|
8
8
|
import { t as liveWebRecord } from "./page-CQJlcj3x.mjs";
|
|
9
|
-
import { n as ensureWorkspaceStorageSafely } from "./native-runtime-
|
|
9
|
+
import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DQfxW5Au.mjs";
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
//#region src/commands/web.ts
|
|
12
12
|
const printNote = (line) => console.error(line);
|
package/dist/web-run.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, S as process_identity_exports, o as cancellableSleep, t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { f as signalProcessTree } from "./metro-
|
|
2
|
+
import { Dt as recordCreatedDevice } from "./android-DsEj2CCs.mjs";
|
|
3
|
+
import { f as signalProcessTree } from "./metro-mKHEMO-a.mjs";
|
|
4
4
|
import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
|
|
5
|
-
import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-
|
|
6
|
-
import { l as probeWebDrivers } from "./activity-
|
|
5
|
+
import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CM_HvvkS.mjs";
|
|
6
|
+
import { l as probeWebDrivers } from "./activity-yjH7Q3zn.mjs";
|
|
7
7
|
import { t as connectOwnedBrowser } from "./cdp-C3svvXiE.mjs";
|
|
8
8
|
import { t as relaunchWithLogFile } from "./detached-entry-BPlSaCwC.mjs";
|
|
9
9
|
import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-DyDWurWG.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S as process_identity_exports, t as getExecutor } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { A as
|
|
3
|
-
import { lt as workspaceHiddenSetting } from "./settings-
|
|
2
|
+
import { A as writeConfigSetting, h as getProjectSettings, j as writeConfigSettingAsync } from "./config-D5qNWJEP.mjs";
|
|
3
|
+
import { lt as workspaceHiddenSetting } from "./settings-C6UTYW2K.mjs";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
import { dirname, isAbsolute, join, relative } from "node:path";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, S as process_identity_exports, b as operationState, c as throwIfCancelled, d as workspaceProcessLockError, f as workspaceProcessLockPath, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, o as cancellableSleep, t as getExecutor, u as withWorkspaceProcessLock, v as stopDeclaringSpawnsOn } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { A as workspaceName$1, E as workspaceDir, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-
|
|
3
|
-
import {
|
|
2
|
+
import { A as workspaceName$1, E as workspaceDir, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-3bF4TB8P.mjs";
|
|
3
|
+
import { F as formatBytes, I as isOnMountedVolume, K as projectDeviceSlots, L as listMountedVolumes, M as acquireAvdClaim, O as withConfigLock$1, R as measuredDirectorySizeAsync, U as deviceSlotPlatforms, _ as isPathPrefix$1, d as getConfigDir, k as withConfigLockAsync$1, m as getProject, v as loadConfig$1 } from "./config-D5qNWJEP.mjs";
|
|
4
4
|
import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
5
|
-
import { a as formatElapsed, d as quotedPath$1, l as phaseLine, o as formatLongDuration, u as plural } from "./command-output-
|
|
5
|
+
import { a as formatElapsed, d as quotedPath$1, l as phaseLine, o as formatLongDuration, u as plural } from "./command-output-CfPW1bKP.mjs";
|
|
6
6
|
import { c as gitQuiet, l as gitQuietAsync, t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
|
|
7
|
-
import { Pt as lockReason, Vt as repoRootAsync, Xt as worktreeLockAsync, Yt as worktreeLock, pt as resolveTailscaleBinary } from "./settings-
|
|
8
|
-
import { a as macosRuntimeClaim, n as macosDir } from "./state-
|
|
9
|
-
import {
|
|
10
|
-
import { c as pidExists, f as signalProcessTree, p as signalProcessTreeAsync } from "./metro-
|
|
11
|
-
import { _ as chromeProcessStateAsync, c as webClaimRoot, i as clearWebRecord, o as readWebRecord, p as webProfileDir, t as CDP_PORT_LABEL, u as webFacts, v as liveProfileHolder, y as removeSingletonFiles } from "./state-
|
|
7
|
+
import { Pt as lockReason, Vt as repoRootAsync, Xt as worktreeLockAsync, Yt as worktreeLock, pt as resolveTailscaleBinary } from "./settings-C6UTYW2K.mjs";
|
|
8
|
+
import { a as macosRuntimeClaim, n as macosDir } from "./state-CiflgxTP.mjs";
|
|
9
|
+
import { B as listOrphanedAvdDirectories, C as deleteAvd, Dt as recordCreatedDevice, Et as readCreatedDevices$1, J as ownedAvdSystemImage, K as ownedAvdSerialResolver, M as isEmulatorToolAbsent, P as listAdbDevicesAsync, St as removeParkedAfter, Tt as forgetCreatedDeviceAsync, U as ownedAvdDirectory, W as ownedAvdMatchesConfiguration, _t as eraseParkedAfter, dt as wipeAvdUserData, ft as isStimOwnedAvd, g as avdPathExists, it as resolveOwnedAvdSerialAsync, lt as waitForAndroidEmulatorShutdown, ot as shutdownAndroidEmulator, p as assertOwnedAvdStoppedAsync, q as ownedAvdSerialResolverAsync, v as avdStorageExists, wt as forgetCreatedDevice, xt as readParked, y as avdStorageRoots, yt as parkSim } from "./android-DsEj2CCs.mjs";
|
|
10
|
+
import { c as pidExists, f as signalProcessTree, p as signalProcessTreeAsync } from "./metro-mKHEMO-a.mjs";
|
|
11
|
+
import { _ as chromeProcessStateAsync, c as webClaimRoot, i as clearWebRecord, o as readWebRecord, p as webProfileDir, t as CDP_PORT_LABEL, u as webFacts, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CM_HvvkS.mjs";
|
|
12
12
|
import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
|
|
13
|
-
import { N as listBuildLocks, d as readAgentDeviceRecords, i as createActivityReaderAsync, r as createActivityReader, s as idleForMs, t as agentDeviceDaemon } from "./activity-
|
|
14
|
-
import { C as renameIosSim, D as resolveOwnedIosSim, c as eraseIosSim, f as listAllIosSimsAsync, k as shutdownIosSim, o as deleteIosSim, p as listIosDeviceTypesAsync, s as deleteParkedIosSim, v as parkedSimName, y as parseRuntimeVersion } from "./ios-
|
|
15
|
-
import { r as releaseBrowserPort } from "./named-ports-
|
|
13
|
+
import { N as listBuildLocks, d as readAgentDeviceRecords, i as createActivityReaderAsync, r as createActivityReader, s as idleForMs, t as agentDeviceDaemon } from "./activity-yjH7Q3zn.mjs";
|
|
14
|
+
import { C as renameIosSim, D as resolveOwnedIosSim, c as eraseIosSim, f as listAllIosSimsAsync, k as shutdownIosSim, o as deleteIosSim, p as listIosDeviceTypesAsync, s as deleteParkedIosSim, v as parkedSimName, y as parseRuntimeVersion } from "./ios-CdAV4-1E.mjs";
|
|
15
|
+
import { r as releaseBrowserPort } from "./named-ports-B0hCk2v-.mjs";
|
|
16
16
|
import { createHash, randomUUID } from "node:crypto";
|
|
17
17
|
import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, rmdirSync, statSync, unlinkSync, watch, writeFileSync } from "node:fs";
|
|
18
18
|
import { isDeepStrictEqual } from "node:util";
|
|
@@ -858,7 +858,7 @@ async function teardownUnregisteredAvd(avdName, del, owner, surveyed, operation)
|
|
|
858
858
|
operation?.signal.throwIfAborted();
|
|
859
859
|
const candidates = surveyed ? [surveyed] : listOrphanedAvdDirectories(avdName);
|
|
860
860
|
if (candidates.length === 0) {
|
|
861
|
-
if (
|
|
861
|
+
if (avdStorageExists(avdName)) throw new Error(`AVD ${avdName} is not listed but its storage remains; it was kept.`);
|
|
862
862
|
return { status: "missing" };
|
|
863
863
|
}
|
|
864
864
|
if (!del) return {
|
|
@@ -924,6 +924,9 @@ async function teardownClaimedAvd(avdName, claim, { operation, del = false, wipe
|
|
|
924
924
|
timeoutMs: AVD_INVENTORY_TIMEOUT_MS,
|
|
925
925
|
operation,
|
|
926
926
|
signal: operation?.signal
|
|
927
|
+
}).catch((error) => {
|
|
928
|
+
if (isEmulatorToolAbsent(error, operation?.env)) return { missing: true };
|
|
929
|
+
throw error;
|
|
927
930
|
}) }) {
|
|
928
931
|
let parkFallback;
|
|
929
932
|
const reportedBusy = /* @__PURE__ */ new Set();
|
|
@@ -3527,7 +3530,7 @@ function numberOrNull(v) {
|
|
|
3527
3530
|
//#region src/workspace/in-use.ts
|
|
3528
3531
|
const NATIVE_RUN = "native-run";
|
|
3529
3532
|
const NATIVE_RUN_HELD = "a stim ios, android or stop run holds its native-run.lock";
|
|
3530
|
-
function workspaceInUse(root, { supervisor = true, devServer = true, managedLocks = true, hosted = true, nativeRun = true } = {}, bundleInstances = bundleInstancePids) {
|
|
3533
|
+
function workspaceInUse(root, { supervisor = true, devServer = true, managedLocks = true, hosted = true, hostedMacos = true, nativeRun = true } = {}, bundleInstances = bundleInstancePids) {
|
|
3531
3534
|
const reasons = [];
|
|
3532
3535
|
if (supervisor && devServer) {
|
|
3533
3536
|
const project = getProject(root);
|
|
@@ -3544,8 +3547,9 @@ function workspaceInUse(root, { supervisor = true, devServer = true, managedLock
|
|
|
3544
3547
|
}
|
|
3545
3548
|
if (supervisor) {
|
|
3546
3549
|
const macos = macosAppState(readMacosRecord(root));
|
|
3547
|
-
if (macos?.host)
|
|
3548
|
-
|
|
3550
|
+
if (macos?.host) {
|
|
3551
|
+
if (hostedMacos) reasons.push(`its macOS app runs on ${macos.host.machine}`);
|
|
3552
|
+
} else if (macos?.state === "running" || macos?.state === "orphaned" || macos?.build.state === "running") reasons.push("its macOS app or build is running");
|
|
3549
3553
|
else if (macos?.state === "unverified" || !macos && readWorkspaceState$1(root)?.macos !== void 0) reasons.push("its macOS process owner cannot be verified");
|
|
3550
3554
|
else try {
|
|
3551
3555
|
const pids = bundleInstances(root);
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, S as process_identity_exports, b as operationState, l as WorkspaceProcessCleanupError, m as declareSpawnsOn, n as isTimeoutError, t as getExecutor, v as stopDeclaringSpawnsOn } from "./exec-aULwtNly.mjs";
|
|
2
|
-
import { E as workspaceDir, a as recordWorkspaceUseAsync, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1, w as workspaceAgentDeviceDir } from "./workspace-state-
|
|
3
|
-
import {
|
|
4
|
-
import { a as formatElapsed, h as shortUdid, i as formatDuration, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-
|
|
2
|
+
import { E as workspaceDir, a as recordWorkspaceUseAsync, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1, w as workspaceAgentDeviceDir } from "./workspace-state-3bF4TB8P.mjs";
|
|
3
|
+
import { C as removeProject, D as upsertProject, K as projectDeviceSlots, M as acquireAvdClaim, R as measuredDirectorySizeAsync, _ as isPathPrefix$1, a as clearDevice, d as getConfigDir, k as withConfigLockAsync$1, m as getProject, v as loadConfig$1 } from "./config-D5qNWJEP.mjs";
|
|
4
|
+
import { a as formatElapsed, h as shortUdid, i as formatDuration, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-CfPW1bKP.mjs";
|
|
5
5
|
import { c as gitQuiet, l as gitQuietAsync, o as git, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-Dp4FuIGR.mjs";
|
|
6
|
-
import { Ct as gitCommonDirOnDisk, Dt as isPodInstallChurn, Et as hasUncommittedWorkAsync, Ft as matchWorktreeEntry, Gt as restoreFileAsync, Ht as resolveFullRef, It as nativeCanonicalPath, Jt as warmWorktreePaths, Kt as sourceCheckoutOf, Lt as podsOutOfSync, Mt as locallyKnownUpstream, Q as resolveSettings, Rt as readWorktreeExclude, St as gitCommonDirAsync, Tt as hasRemoteAsync, Ut as resolveFullRefAsync, V as readCommittedSettings, X as resolveProjectSettings, Y as resolveIosProjectDir, _ as inertSettingWarning, _t as deleteBranchAsync, a as SETTING_SHAPE_REMEDY, bt as dirtyPathsAsync, gt as cloneIgnoredEntries, ht as branchExistsAsync, jt as listWorktreesAsync, nn as moveIgnoredTreesToTrash, qt as unpushedCommitsAsync, rn as restoreTrashedTrees, rt as settingShapeErrors, st as unknownSettingKeys, tn as disposeTrash, vt as depsOutOfSync, wt as hasPopulatedSubmodulesAsync, zt as removeWorktreeAsync } from "./settings-
|
|
7
|
-
import { F as readRemoteSessionId, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, i as findProjectRoot$1, k as clearRemoteSession, o as isMobileProject } from "./project-
|
|
8
|
-
import { t as macosAppPresent } from "./state-
|
|
9
|
-
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-
|
|
10
|
-
import {
|
|
11
|
-
import { c as pidExists, d as resolveProjectMetro, p as signalProcessTreeAsync, r as killMetroTreeAsync } from "./metro-
|
|
12
|
-
import { A as diskPressureLevel, D as requestDevServerStop, En as runProcessOperation, G as planCacheEmptying, Ln as resolveEasCliBin, N as lowestFree, Ot as endRecordedSession, _ as resolveBudget, g as readVolumeSpaceAsync, h as readVolumeSpace, k as withdrawDevServerStopRequest, p as machineNumber, ur as discoverCaches } from "./ccache-
|
|
13
|
-
import { o as readWebRecord } from "./state-
|
|
14
|
-
import { C as stopTunnel, E as withManagedRemoteWorktreeRemovalLock, O as withManagedTunnelRemovalLock, _ as emptyWorkspaceDir, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, o as collectWorkspaceOutputs, pt as teardownOwnedAvd, v as withIdleWorkspace, x as resolveSupervisorTarget } from "./workspaces-
|
|
6
|
+
import { Ct as gitCommonDirOnDisk, Dt as isPodInstallChurn, Et as hasUncommittedWorkAsync, Ft as matchWorktreeEntry, Gt as restoreFileAsync, Ht as resolveFullRef, It as nativeCanonicalPath, Jt as warmWorktreePaths, Kt as sourceCheckoutOf, Lt as podsOutOfSync, Mt as locallyKnownUpstream, Q as resolveSettings, Rt as readWorktreeExclude, St as gitCommonDirAsync, Tt as hasRemoteAsync, Ut as resolveFullRefAsync, V as readCommittedSettings, X as resolveProjectSettings, Y as resolveIosProjectDir, _ as inertSettingWarning, _t as deleteBranchAsync, a as SETTING_SHAPE_REMEDY, bt as dirtyPathsAsync, gt as cloneIgnoredEntries, ht as branchExistsAsync, jt as listWorktreesAsync, nn as moveIgnoredTreesToTrash, qt as unpushedCommitsAsync, rn as restoreTrashedTrees, rt as settingShapeErrors, st as unknownSettingKeys, tn as disposeTrash, vt as depsOutOfSync, wt as hasPopulatedSubmodulesAsync, zt as removeWorktreeAsync } from "./settings-C6UTYW2K.mjs";
|
|
7
|
+
import { F as readRemoteSessionId, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, i as findProjectRoot$1, k as clearRemoteSession, o as isMobileProject } from "./project-Crtcbfl0.mjs";
|
|
8
|
+
import { t as macosAppPresent } from "./state-CiflgxTP.mjs";
|
|
9
|
+
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-1XxET4S8.mjs";
|
|
10
|
+
import { bt as parkedMaxSetting, mt as POOL_SETTING_REMEDY } from "./android-DsEj2CCs.mjs";
|
|
11
|
+
import { c as pidExists, d as resolveProjectMetro, p as signalProcessTreeAsync, r as killMetroTreeAsync } from "./metro-mKHEMO-a.mjs";
|
|
12
|
+
import { A as diskPressureLevel, D as requestDevServerStop, En as runProcessOperation, G as planCacheEmptying, Ln as resolveEasCliBin, N as lowestFree, Ot as endRecordedSession, _ as resolveBudget, g as readVolumeSpaceAsync, h as readVolumeSpace, k as withdrawDevServerStopRequest, p as machineNumber, ur as discoverCaches } from "./ccache-BrwGIxmV.mjs";
|
|
13
|
+
import { o as readWebRecord } from "./state-CM_HvvkS.mjs";
|
|
14
|
+
import { C as stopTunnel, E as withManagedRemoteWorktreeRemovalLock, O as withManagedTunnelRemovalLock, _ as emptyWorkspaceDir, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, o as collectWorkspaceOutputs, pt as teardownOwnedAvd, v as withIdleWorkspace, x as resolveSupervisorTarget } from "./workspaces-C59v9bpD.mjs";
|
|
15
15
|
import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
|
|
16
|
-
import { C as DEPS_ERROR, E as readPodState, M as HEARTBEAT_INTERVAL_MS, O as runCaptured, T as podsAreStale, X as podInstallCommand, k as runPodInstall, lt as cacheUser } from "./toolchain-
|
|
17
|
-
import { D as releaseWorkspaceLeases, t as agentDeviceDaemon } from "./activity-
|
|
18
|
-
import { R as readHostMemoryPressure, z as readHostMemoryPressureAsync } from "./ios-
|
|
19
|
-
import { t as clearNamedPorts } from "./named-ports-
|
|
16
|
+
import { C as DEPS_ERROR, E as readPodState, M as HEARTBEAT_INTERVAL_MS, O as runCaptured, T as podsAreStale, X as podInstallCommand, k as runPodInstall, lt as cacheUser } from "./toolchain-Bnm8vUCV.mjs";
|
|
17
|
+
import { D as releaseWorkspaceLeases, t as agentDeviceDaemon } from "./activity-yjH7Q3zn.mjs";
|
|
18
|
+
import { R as readHostMemoryPressure, z as readHostMemoryPressureAsync } from "./ios-CdAV4-1E.mjs";
|
|
19
|
+
import { t as clearNamedPorts } from "./named-ports-B0hCk2v-.mjs";
|
|
20
20
|
import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
|
|
21
|
-
import { i as stopHostedAndroid } from "./hosted-android-
|
|
22
|
-
import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-
|
|
23
|
-
import { r as stopMacosApp } from "./stop-
|
|
24
|
-
import { n as verifyCollectorOwnership } from "./ownership-
|
|
21
|
+
import { i as stopHostedAndroid } from "./hosted-android-c5nPJA6S.mjs";
|
|
22
|
+
import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-CnNwdz9A.mjs";
|
|
23
|
+
import { r as stopMacosApp } from "./stop-B616ZyTv.mjs";
|
|
24
|
+
import { n as verifyCollectorOwnership } from "./ownership-CCfiBfOP.mjs";
|
|
25
25
|
import { o as pullRequestLookupAsync, r as endedPullRequest } from "./pull-request-BzLmzAIQ.mjs";
|
|
26
|
-
import { c as mergeStateAsync, d as forgetStatusMeasures, t as startWarmProgress } from "./warm-progress-
|
|
27
|
-
import { r as workspaceRecordingEnabled } from "./recordings-
|
|
28
|
-
import { i as installedNpmTreeProblems, n as hasInstalledDependencies, t as dependencyState } from "./dependency-state-
|
|
29
|
-
import { a as discoverXcodeProject } from "./react-native-build-
|
|
26
|
+
import { c as mergeStateAsync, d as forgetStatusMeasures, t as startWarmProgress } from "./warm-progress-_aTMvkIH.mjs";
|
|
27
|
+
import { r as workspaceRecordingEnabled } from "./recordings-BWnIlhZH.mjs";
|
|
28
|
+
import { i as installedNpmTreeProblems, n as hasInstalledDependencies, t as dependencyState } from "./dependency-state-DZVln1P9.mjs";
|
|
29
|
+
import { a as discoverXcodeProject } from "./react-native-build-DhWBUV_H.mjs";
|
|
30
30
|
import { claimRemoveCommand, clearFreeClaimSet, readClaimSet, releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
|
|
31
31
|
import { createHash, randomUUID } from "node:crypto";
|
|
32
32
|
import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as nestedWorktrees, c as registerRemove, d as removalPath, f as removalRemedy, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerWarm, m as warmWorktreeTarget, n as dependencyInstallCommand, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, t as customIosDirs, u as removalBlockers } from "./worktree-
|
|
1
|
+
import { a as nestedWorktrees, c as registerRemove, d as removalPath, f as removalRemedy, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerWarm, m as warmWorktreeTarget, n as dependencyInstallCommand, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, t as customIosDirs, u as removalBlockers } from "./worktree-CinoSsGy.mjs";
|
|
2
2
|
export { customIosDirs, worktreeCommand as default, dependencyInstallCommand, excludePodChurn, excludeWatchmanCookies, nestedWorktrees, porcelainPath, reclaimKeys, registerRemove, registerWarm, removalBlockers, removalPath, removalRemedy, removeWorktreeTarget, warmWorktreeTarget, warmedWorkspace };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stim",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.32.0",
|
|
4
4
|
"description": "Stim: fast, isolated React Native environments for coding agents",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@expo/fingerprint": "^0.21.5",
|
|
56
|
-
"@stim-cli/agent-driver": "1.
|
|
57
|
-
"@stim-cli/agent-driver-agent-device": "1.
|
|
58
|
-
"@stim-cli/cache": "1.
|
|
59
|
-
"@stim-cli/core": "1.
|
|
60
|
-
"@stim-cli/metro": "1.
|
|
56
|
+
"@stim-cli/agent-driver": "1.32.0",
|
|
57
|
+
"@stim-cli/agent-driver-agent-device": "1.32.0",
|
|
58
|
+
"@stim-cli/cache": "1.32.0",
|
|
59
|
+
"@stim-cli/core": "1.32.0",
|
|
60
|
+
"@stim-cli/metro": "1.32.0",
|
|
61
61
|
"@xmldom/xmldom": "0.9.12",
|
|
62
62
|
"chalk": "^6.0.0",
|
|
63
63
|
"commander": "^15.0.0",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"ws": "^8.21.3"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@stim-cli/expo-build-cache": "1.
|
|
69
|
+
"@stim-cli/expo-build-cache": "1.32.0",
|
|
70
70
|
"@types/cross-spawn": "^6.0.6",
|
|
71
71
|
"@types/which": "^3.0.4",
|
|
72
72
|
"@types/ws": "^8.18.1",
|
package/dist/web-CI_qCRPw.mjs
DELETED