stim 1.27.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/{acquire-artifact-BKN2Yuhg.mjs → acquire-artifact-CKByBnTD.mjs} +1 -1
  2. package/dist/{act-ROviTF_t.mjs → act-8iswyfRa.mjs} +36 -18
  3. package/dist/{activity-Cd-ysFes.mjs → activity-DRMg4_mD.mjs} +3 -3
  4. package/dist/{agent-device-usage-output-C5nCKWp9.mjs → agent-device-usage-output-tE90fDdo.mjs} +3 -3
  5. package/dist/{android-Cd6w7_qw.mjs → android-CHmSU4B4.mjs} +40 -37
  6. package/dist/{android-DriNoAVy.mjs → android-CsPs-7Mg.mjs} +3 -3
  7. package/dist/{android-Deb9X3_Y.mjs → android-D577ApKG.mjs} +1 -1
  8. package/dist/{android--HBgpvpW.mjs → android-YWCbmkVK.mjs} +5 -5
  9. package/dist/{android-cas-D5e6ecUg.mjs → android-cas-_aDifWW0.mjs} +2 -2
  10. package/dist/api.d.mts +1 -1
  11. package/dist/api.mjs +24 -24
  12. package/dist/{apk-signed-tail-BHQHx3Rm.mjs → apk-signed-tail-CQbwM0qO.mjs} +2 -2
  13. package/dist/{artifact-faemIZv5.mjs → artifact-DYtHjxsn.mjs} +12 -12
  14. package/dist/{artifact-0AGJYB9O.mjs → artifact-bFkfD3vf.mjs} +12 -12
  15. package/dist/{auto-placement-z-H5pJza.mjs → auto-placement-BVqs8AJi.mjs} +7 -7
  16. package/dist/{browser-web-slD8AvLp.mjs → browser-web-BUaLcafY.mjs} +10 -10
  17. package/dist/{build-hS0QyFlQ.mjs → build-cQURy_KW.mjs} +20 -20
  18. package/dist/{build-cache-gBJ-WKzA.mjs → build-cache-CZULpXVl.mjs} +3 -3
  19. package/dist/{build-plan-CBqYbzYM.mjs → build-plan-CxoYfxsc.mjs} +6 -6
  20. package/dist/{ccache-BWTze1Ls.mjs → ccache-Bm_A1xX9.mjs} +15 -14
  21. package/dist/{cli-ftXDLto1.mjs → cli-CpbaLDa7.mjs} +17 -17
  22. package/dist/cli.mjs +1 -1
  23. package/dist/{client-xsdxrhWA.mjs → client-YxCer6ab.mjs} +39 -6
  24. package/dist/collector-run.mjs +3 -3
  25. package/dist/{command-output-Dj-WT4BP.mjs → command-output-C8R1KIvi.mjs} +1 -1
  26. package/dist/{dependencies-BGokZ-Ng.mjs → dependencies-DKeMzwXY.mjs} +35 -35
  27. package/dist/{dependency-state-C3OtgG94.mjs → dependency-state-CojA2o0t.mjs} +1 -1
  28. package/dist/{dev-client-BMca82xo.mjs → dev-client-D-BW5uiq.mjs} +2 -2
  29. package/dist/{device-tM41-TUq.mjs → device-CgXfbcz5.mjs} +11 -11
  30. package/dist/{device-capacity-6LP7QsaA.mjs → device-capacity-Cd8lMSn3.mjs} +85 -17
  31. package/dist/{device-BJm0irrq.mjs → device-eeK95Lir.mjs} +13 -13
  32. package/dist/device-host-worker.mjs +13 -11
  33. package/dist/{device-ios-534c14fz.mjs → device-ios-Cc9ulihb.mjs} +7 -7
  34. package/dist/{device-lease-run-DwsGfjUN.mjs → device-lease-run-Mtzp4THX.mjs} +3 -3
  35. package/dist/{device-pool-BnQqvs6o.mjs → device-pool-eRz6DtCg.mjs} +2 -2
  36. package/dist/{doctor-DyqE9n1J.mjs → doctor-Bz_ouYAW.mjs} +12 -12
  37. package/dist/{doctor-Dbx1ZpD2.mjs → doctor-C2QyhejJ.mjs} +1 -1
  38. package/dist/doctor-fingerprint.mjs +1 -1
  39. package/dist/{doctor-watchman-CxDbyrrt.mjs → doctor-watchman-BTW82PDC.mjs} +3 -3
  40. package/dist/{doctor-F-3VUUyN.mjs → doctor-xf7ht-5n.mjs} +17 -17
  41. package/dist/{eas-build-CjNSWmjo.mjs → eas-build-Dm6q68QY.mjs} +2 -2
  42. package/dist/{eas-fallback-9fqb46kW.mjs → eas-fallback-DajNpxf-.mjs} +3 -3
  43. package/dist/{eas-session-ledger-DrP4OuuM.mjs → eas-session-ledger-CBFo_Uo1.mjs} +35 -6
  44. package/dist/{error-diagnostics-snej9k4j.mjs → error-diagnostics-D1QfyJzQ.mjs} +7 -7
  45. package/dist/{gc-CGZ1Yg88.mjs → gc-DM5oMm-J.mjs} +17 -16
  46. package/dist/{gc-BRwAY3qT.mjs → gc-PLFwb0k4.mjs} +2 -2
  47. package/dist/{guide-_rfEh_zM.mjs → guide-C4I46XAk.mjs} +106 -42
  48. package/dist/{hosted-android-BMKzUNnY.mjs → hosted-android-DlaKLbW0.mjs} +5 -6
  49. package/dist/{hosted-client-D7Pk_Oo1.mjs → hosted-client-DDRm9hPJ.mjs} +43 -16
  50. package/dist/{hosted-logs-B1gqQuva.mjs → hosted-logs-bSebOKbz.mjs} +5 -5
  51. package/dist/{hosted-logs-sync-Dg3qrZmV.mjs → hosted-logs-sync-B0c53W_c.mjs} +5 -5
  52. package/dist/{hosted-macos-B9w4H8hc.mjs → hosted-macos-B7-8Pv4H.mjs} +5 -5
  53. package/dist/{hosted-native-CdgaiuyP.mjs → hosted-native-CDe33CSr.mjs} +11 -8
  54. package/dist/{idle-shutdown-Cbvo5KEh.mjs → idle-shutdown-CQ0QwU9J.mjs} +5 -5
  55. package/dist/{ios-E26qSpkb.mjs → ios-B1DYuOjh.mjs} +2 -2
  56. package/dist/{ios-Bk4mWbtS.mjs → ios-B1HvafEG.mjs} +8 -8
  57. package/dist/{ios-device-C_QkIf1Z.mjs → ios-device-B4elVFKi.mjs} +1 -1
  58. package/dist/{ios-project-D8Jcy_br.mjs → ios-project-CR4mZ7CH.mjs} +6 -6
  59. package/dist/{ios-state-BZ03NFgF.mjs → ios-state-BPHqMDdZ.mjs} +1 -1
  60. package/dist/{ios-B5HlVMhQ.mjs → ios-tg4tp3q1.mjs} +30 -28
  61. package/dist/{js-swap-Dg2a945i.mjs → js-swap-CVpSW1fn.mjs} +4 -4
  62. package/dist/{launch-CRyBeNsA.mjs → launch-DoySmhjz.mjs} +17 -17
  63. package/dist/{lightened-BCsdAGj_.mjs → lightened-DFAJgfIk.mjs} +4 -4
  64. package/dist/{logs-aJQb-RDg.mjs → logs-BGsW7iPe.mjs} +6 -6
  65. package/dist/{logs-CC_-ZzEE.mjs → logs-DI5ILkYB.mjs} +4 -4
  66. package/dist/{macos-DlCBhMw5.mjs → macos-Bo9st9Di.mjs} +18 -18
  67. package/dist/{macos-BGmTpnv9.mjs → macos-C12RMJQF.mjs} +1 -1
  68. package/dist/macos-run.mjs +1 -1
  69. package/dist/maintenance-run.mjs +4 -4
  70. package/dist/{metro-CvyD-xwe.mjs → metro-BnhXV2Mj.mjs} +1 -1
  71. package/dist/{metro-gateway-BnHdqMO_.mjs → metro-request-DXyKjVDF.mjs} +25 -46
  72. package/dist/{named-ports-BCyMWA6b.mjs → named-ports-Phoi2POD.mjs} +1 -1
  73. package/dist/{native-android-DlpxCyOP.mjs → native-android-vxgtLD7w.mjs} +14 -14
  74. package/dist/{native-gradle-artifact-inputs-C13qT7R_.mjs → native-gradle-artifact-inputs-BN96IVw8.mjs} +3 -3
  75. package/dist/{native-runtime-DqaIBO5w.mjs → native-runtime-DG4Rodzj.mjs} +6 -6
  76. package/dist/{native-xcode-inputs-B1W8SrxB.mjs → native-xcode-inputs-BKarCoKg.mjs} +2 -2
  77. package/dist/{native-xcode-ios-QPP0Rm68.mjs → native-xcode-ios-8A-efGa5.mjs} +14 -14
  78. package/dist/offload-worker.mjs +18 -18
  79. package/dist/{ownership-Bx-0cku-.mjs → ownership-DJCq48IJ.mjs} +2 -2
  80. package/dist/{phone-reverses-C9yAaKEv.mjs → phone-reverses-BzTa8g1F.mjs} +3 -3
  81. package/dist/{placement-log-BXUbiZM6.mjs → placement-log-Cvhta5ib.mjs} +1 -1
  82. package/dist/{plan-placement-UxnQjv5Z.mjs → plan-placement-WkZdccuN.mjs} +5 -5
  83. package/dist/{ports-uUrghqWN.mjs → ports-UV4mJgyC.mjs} +2 -2
  84. package/dist/{prebuild-BDpToDgR.mjs → prebuild-k8d_tqOq.mjs} +8 -8
  85. package/dist/{project-DYj-HVx6.mjs → project-Sui52ywT.mjs} +14 -14
  86. package/dist/{react-native-android-DDBccgJw.mjs → react-native-android-DANlGGQf.mjs} +21 -21
  87. package/dist/{react-native-build-DaK2IFyP.mjs → react-native-build-jUHnIfZ9.mjs} +6 -6
  88. package/dist/{react-native-doctor-B-Mw6DcR.mjs → react-native-doctor-DCWRjS7K.mjs} +5 -5
  89. package/dist/{react-native-ios-DjYwUF9U.mjs → react-native-ios-BwMsFMXi.mjs} +14 -14
  90. package/dist/{recordings-C20iUZfp.mjs → recordings-iy0mkm7b.mjs} +1 -1
  91. package/dist/{reload-DJBeF_rC.mjs → reload-Bj7QyuDy.mjs} +1 -1
  92. package/dist/{reload-fUdkH2_p.mjs → reload-c_uEyc_X.mjs} +13 -13
  93. package/dist/{remote-y6n99WMW.mjs → remote-DFlpAqdV.mjs} +8 -8
  94. package/dist/{result-CTqBw2Te.mjs → result-BIcXREyC.mjs} +14 -14
  95. package/dist/{run-DaCeNKRm.mjs → run-y2HwyNvg.mjs} +1 -1
  96. package/dist/{selection-Bs8phwhN.mjs → selection-CXgM_VK_.mjs} +2 -2
  97. package/dist/{server-bare-BOh-iZEj.mjs → server-bare-2N4vSRZG.mjs} +1 -1
  98. package/dist/{server-command-8CuA51Cv.mjs → server-command-qneHPcRI.mjs} +4 -4
  99. package/dist/{server-expo-ABQs2XFA.mjs → server-expo-Ccm9zB0o.mjs} +2 -2
  100. package/dist/server-expo-WulkyAwT.mjs +2 -0
  101. package/dist/{settings-BDVI8Ivc.mjs → settings-CY5JZlNN.mjs} +46 -2
  102. package/dist/{settings-CMHhQNwI.mjs → settings-Cfd_Q6ys.mjs} +2 -2
  103. package/dist/{settings-payload-cm60Zhib.mjs → settings-payload-DwQiEMCn.mjs} +2 -2
  104. package/dist/{settings-write-BdNRLlBn.mjs → settings-write-CJpjkeAd.mjs} +3 -3
  105. package/dist/{slot-launch-0l7RqSpr.mjs → slot-launch-BpmanOnk.mjs} +5 -5
  106. package/dist/{stage-F4cAfJGi.mjs → stage-CmugrSG5.mjs} +1 -1
  107. package/dist/{start-DcqnF9p8.mjs → start-CHH3zgIU.mjs} +1 -1
  108. package/dist/{start-DrPwER_2.mjs → start-DYLk6GXn.mjs} +8 -8
  109. package/dist/{state-BX1y5syV.mjs → state-B2QJbDwz.mjs} +2 -2
  110. package/dist/{state-CZxLyetD.mjs → state-BXC1Lfxw.mjs} +1 -1
  111. package/dist/{stats-GxuCbles.mjs → stats-DxKqhcGp.mjs} +3 -3
  112. package/dist/{status-BfnK9pUd.mjs → status-BHCkOZga.mjs} +46 -23
  113. package/dist/{status-Bj7ZYvvc.mjs → status-D_Ljc89p.mjs} +1 -1
  114. package/dist/{status-watch-BfabQn03.mjs → status-watch-BmsPqYSU.mjs} +17 -6
  115. package/dist/status-worker.mjs +1 -1
  116. package/dist/{stop-D-EAr25B.mjs → stop-D-dGE9gh.mjs} +14 -14
  117. package/dist/{stop-CH79S3IZ.mjs → stop-DQvE-P76.mjs} +9 -5
  118. package/dist/{stop-x1Yu3He4.mjs → stop-b2pouxAO.mjs} +2 -2
  119. package/dist/supervisor-run.mjs +232 -58
  120. package/dist/{support-CNg_YsOk.mjs → support-04IhBUTT.mjs} +4 -4
  121. package/dist/{support-Be0UeVZU.mjs → support-BtlJKjyQ.mjs} +11 -10
  122. package/dist/{swiftpm-artifact-inputs-uPqYvGBv.mjs → swiftpm-artifact-inputs-Cj2UpmPN.mjs} +1 -1
  123. package/dist/{swiftpm-macos-Ch4YjY_A.mjs → swiftpm-macos-BhF2stxY.mjs} +7 -7
  124. package/dist/{toolchain-CbCG6C5Z.mjs → toolchain-mLA_km-b.mjs} +4 -4
  125. package/dist/{toolchain-JYAOquPg.mjs → toolchain-qktiV8xc.mjs} +1 -1
  126. package/dist/{warm-progress-C0RsbngN.mjs → warm-progress-B0Vpuvpl.mjs} +3 -3
  127. package/dist/{web-Cq_AQ4DK.mjs → web-BYmK0TjL.mjs} +6 -6
  128. package/dist/web-CrVLVQZY.mjs +2 -0
  129. package/dist/web-run.mjs +4 -4
  130. package/dist/{workspace-state-BjqdjnJR.mjs → workspace-state-kIZrdlSg.mjs} +1 -1
  131. package/dist/{workspaces-DFbj07jp.mjs → workspaces-CmOcceDN.mjs} +105 -25
  132. package/dist/{worktree-COAJ3-OD.mjs → worktree-2dk5edza.mjs} +23 -44
  133. package/dist/worktree-nliAoHxB.mjs +2 -0
  134. package/package.json +7 -7
  135. package/dist/server-expo-Ba_Y21vB.mjs +0 -2
  136. package/dist/web-Je6abcpz.mjs +0 -2
  137. package/dist/worktree-JGUd_53L.mjs +0 -2
@@ -1,25 +1,184 @@
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-BjqdjnJR.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-kIZrdlSg.mjs";
3
3
  import { G as projectDeviceSlots, T as setSupervisor, U as parseDeviceSlotKey, o as clearSupervisor, p as getProject } from "./config-Cn94Jc0g.mjs";
4
- import { $ as runnableMetroCommand, X as resolveProjectSettings } from "./settings-BDVI8Ivc.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-DYj-HVx6.mjs";
6
- import { W as ownedAvdSerialResolver } from "./android-DriNoAVy.mjs";
4
+ import { $ as runnableMetroCommand, X as resolveProjectSettings } from "./settings-CY5JZlNN.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-Sui52ywT.mjs";
6
+ import { W as ownedAvdSerialResolver } from "./android-CsPs-7Mg.mjs";
7
7
  import { i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.mjs";
8
- import { C as devServerStopLevel, O as vanishedSupervisorMessage, w as devServerStopRecord, x as describeDevServerStop } from "./ccache-BWTze1Ls.mjs";
9
- import { d as parseWatchRoots, l as parseSubscriberNames, m as runWatchman, u as parseTriggerCount } from "./eas-session-ledger-DrP4OuuM.mjs";
10
- import { L as workspaceBuildInProgress, _ as withIdleWorkspace } from "./workspaces-DFbj07jp.mjs";
11
- import { S as parseLease, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, r as createActivityReader, v as deviceLeasePath, w as parseWorkspaceLeases } from "./activity-Cd-ysFes.mjs";
8
+ import { C as devServerStopLevel, O as vanishedSupervisorMessage, w as devServerStopRecord, x as describeDevServerStop } from "./ccache-Bm_A1xX9.mjs";
9
+ import { d as parseWatchRoots, l as parseSubscriberNames, m as runWatchman, u as parseTriggerCount } from "./eas-session-ledger-CBFo_Uo1.mjs";
10
+ import { B as workspaceBuildInProgress, v as withIdleWorkspace } from "./workspaces-CmOcceDN.mjs";
11
+ import { S as parseLease, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, r as createActivityReader, v as deviceLeasePath, w as parseWorkspaceLeases } from "./activity-DRMg4_mD.mjs";
12
12
  import { t as describeError } from "./errors-DHm_U5gv.mjs";
13
- import { f as probeHostedSession } from "./hosted-client-D7Pk_Oo1.mjs";
14
- import { o as watchWorkspaceState, t as clearHostedMetro } from "./metro-gateway-BnHdqMO_.mjs";
13
+ import { d as hostConnector, p as probeHostedSession } from "./hosted-client-DDRm9hPJ.mjs";
14
+ import { o as watchWorkspaceState, t as clearHostedMetro } from "./metro-request-DXyKjVDF.mjs";
15
15
  import { t as relaunchWithLogFile } from "./detached-entry-BPlSaCwC.mjs";
16
- import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-Cbvo5KEh.mjs";
16
+ import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-CQ0QwU9J.mjs";
17
17
  import { t as triggerMaintenance } from "./trigger-DMou-X7j.mjs";
18
18
  import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
19
19
  import { dirname, isAbsolute, join, resolve, sep } from "node:path";
20
- import { LOG_ROTATE_BYTES, createMetroGateway } from "@stim-cli/core";
21
- import { DEV_SERVER_STOP_REQUEST_KEY, HOSTED_METRO_GATEWAYS_KEY, HOSTED_METRO_REQUESTS_KEY, IDLE_STOP_KEY, hostedAndroidPlacements, hostedIosPlacements, hostedMetroGateways, hostedMetroRequests, hostedNativeRecords, parseHostedNativePlacement, readDevServerStopRequest } from "@stim-cli/core/state";
20
+ import { LOG_ROTATE_BYTES } from "@stim-cli/core";
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";
24
+ //#region src/supervisor/metro-links.ts
25
+ const IDLE_LINKS = 4;
26
+ const FRAME_BYTES = 32768;
27
+ const RETRY_MS = [
28
+ 500,
29
+ 1e3,
30
+ 2e3,
31
+ 5e3,
32
+ 1e4
33
+ ];
34
+ const METRO_RESET = 4410;
35
+ /**
36
+ * Keeps `IDLE_LINKS` authenticated connections open to `machine`, each offered to `session`'s Metro bridge there. The
37
+ * host pairs one with each connection the hosted device makes; this side then pipes it to loopback `metroPort` and
38
+ * opens a replacement. `onReady` runs when the host holds a link after holding none, and `onLost` when no linked
39
+ * connection to the host is left. Failures that a retry can fix are retried. A host that turns this machine away calls
40
+ * `onError` and stops the pool, and so does a refused link before the host ever held one; after that, refused links
41
+ * are retried, since a session the host restarted refuses links until its client attaches again.
42
+ */
43
+ function openMetroLinks({ machine, session, metroPort, onReady, onLost, onError }) {
44
+ const connect$1 = hostConnector(machine);
45
+ const live = /* @__PURE__ */ new Set();
46
+ const linked = /* @__PURE__ */ new Set();
47
+ const waiting = /* @__PURE__ */ new Set();
48
+ const streams = /* @__PURE__ */ new Set();
49
+ let opening = 0;
50
+ let failures = 0;
51
+ let ready = false;
52
+ let linkedOnce = false;
53
+ let closed = false;
54
+ let retry;
55
+ const fill = () => {
56
+ if (closed || retry) return;
57
+ while (opening + waiting.size < IDLE_LINKS) {
58
+ opening++;
59
+ link();
60
+ }
61
+ };
62
+ const gone = (connection) => {
63
+ live.delete(connection);
64
+ waiting.delete(connection);
65
+ if (!linked.delete(connection) || closed || !ready || linked.size > 0) return;
66
+ ready = false;
67
+ onLost();
68
+ };
69
+ const failed = (message, refused) => {
70
+ if (closed) return;
71
+ if (refused === "host" || refused === "link" && !linkedOnce) {
72
+ stop();
73
+ onError(message);
74
+ return;
75
+ }
76
+ if (retry) return;
77
+ retry = setTimeout(() => {
78
+ retry = void 0;
79
+ fill();
80
+ }, RETRY_MS[Math.min(failures++, RETRY_MS.length - 1)]);
81
+ retry.unref();
82
+ };
83
+ const carry = (connection, ended) => {
84
+ const metro = connect({
85
+ host: "127.0.0.1",
86
+ port: metroPort
87
+ });
88
+ streams.add(metro);
89
+ metro.on("error", () => metro.destroy());
90
+ metro.once("close", (hadError) => {
91
+ streams.delete(metro);
92
+ 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
+ });
113
+ };
114
+ const link = async () => {
115
+ let connection;
116
+ try {
117
+ connection = await connect$1();
118
+ if (closed) return void connection.close();
119
+ live.add(connection);
120
+ if (!connection.supports("hosted-metro-link")) throw Object.assign(/* @__PURE__ */ new Error(`${machine} runs a stim-server that cannot link Metro. Update stim-server there, then retry.`), { code: "STIM_HOSTING_REFUSED" });
121
+ const each = connection;
122
+ let paired = false;
123
+ let ended = false;
124
+ each.onEvent((event) => {
125
+ if (event.event !== "device-host.metro.link.open" || paired || closed) return;
126
+ paired = true;
127
+ each.unwatch();
128
+ waiting.delete(each);
129
+ carry(each, () => {
130
+ ended = true;
131
+ gone(each);
132
+ });
133
+ fill();
134
+ });
135
+ let registered = false;
136
+ each.onDropped(() => {
137
+ if (paired || !registered) return;
138
+ gone(each);
139
+ fill();
140
+ });
141
+ const reply = await each.request("device-host.metro.link", { session });
142
+ if ("error" in reply) throw Object.assign(/* @__PURE__ */ new Error(`${machine} refused the Metro link: ${reply.error.message}`), { linkRefused: reply.error.code !== "closed" && reply.error.code !== "timeout" });
143
+ if (closed) return void each.close();
144
+ if (ended || each.failure) return void live.delete(each);
145
+ registered = true;
146
+ linked.add(each);
147
+ if (!paired) {
148
+ waiting.add(each);
149
+ each.watch();
150
+ }
151
+ failures = 0;
152
+ clearTimeout(retry);
153
+ retry = void 0;
154
+ if (!ready) {
155
+ ready = true;
156
+ linkedOnce = true;
157
+ onReady();
158
+ }
159
+ } catch (error) {
160
+ if (connection) live.delete(connection);
161
+ connection?.close();
162
+ const refused = typeof error !== "object" || error === null ? null : "code" in error && typeof error.code === "string" && error.code.startsWith("STIM_") ? "host" : "linkRefused" in error && error.linkRefused === true ? "link" : null;
163
+ failed(error instanceof Error ? error.message : String(error), refused);
164
+ } finally {
165
+ opening--;
166
+ fill();
167
+ }
168
+ };
169
+ function stop() {
170
+ closed = true;
171
+ clearTimeout(retry);
172
+ for (const connection of live) connection.close();
173
+ for (const stream of streams) stream.destroy();
174
+ live.clear();
175
+ linked.clear();
176
+ waiting.clear();
177
+ }
178
+ fill();
179
+ return { close: stop };
180
+ }
181
+ //#endregion
23
182
  //#region src/supervisor/hosted-metro.ts
24
183
  function reconcileHostedMetro(requests, active) {
25
184
  const same = (session) => JSON.stringify(requests[session]) === JSON.stringify(active[session]);
@@ -30,7 +189,7 @@ function reconcileHostedMetro(requests, active) {
30
189
  }
31
190
  function watchHostedMetro(root, metroPort, processToken) {
32
191
  const active = {};
33
- const bridges = /* @__PURE__ */ new Map();
192
+ const pools = /* @__PURE__ */ new Map();
34
193
  let closed = false;
35
194
  let running = Promise.resolve();
36
195
  let probingAt = 0;
@@ -43,7 +202,7 @@ function watchHostedMetro(root, metroPort, processToken) {
43
202
  ...state,
44
203
  supervisor: {
45
204
  ...state.supervisor,
46
- hostedMetro: true
205
+ hostedMetroLinks: true
47
206
  }
48
207
  } : state);
49
208
  const readState = () => {
@@ -55,16 +214,36 @@ function watchHostedMetro(root, metroPort, processToken) {
55
214
  }
56
215
  return cached;
57
216
  };
58
- const publish = (session, gateway) => updateWorkspaceState(root, (state) => {
59
- const gateways = { ...hostedMetroGateways(state) };
60
- if (state.supervisor?.processToken !== processToken) return state;
61
- if (gateway) gateways[session] = gateway;
62
- else delete gateways[session];
63
- return {
64
- ...state,
65
- [HOSTED_METRO_GATEWAYS_KEY]: gateways
66
- };
67
- });
217
+ const unpublished = /* @__PURE__ */ new Map();
218
+ let republish;
219
+ const flush = () => {
220
+ clearTimeout(republish);
221
+ for (const [session, links] of unpublished) {
222
+ try {
223
+ updateWorkspaceState(root, (state) => {
224
+ const published = { ...hostedMetroLinks(state) };
225
+ if (state.supervisor?.processToken !== processToken) return state;
226
+ if (links) published[session] = links;
227
+ else delete published[session];
228
+ return {
229
+ ...state,
230
+ [HOSTED_METRO_LINKS_KEY]: published
231
+ };
232
+ });
233
+ } catch {
234
+ if (closed) return;
235
+ republish = setTimeout(flush, 1e3);
236
+ republish.unref();
237
+ return;
238
+ }
239
+ unpublished.delete(session);
240
+ }
241
+ };
242
+ const publish = (session, links) => {
243
+ unpublished.delete(session);
244
+ unpublished.set(session, links);
245
+ flush();
246
+ };
68
247
  const reconcile = async () => {
69
248
  if (closed) return;
70
249
  observer.refresh();
@@ -83,45 +262,39 @@ function watchHostedMetro(root, metroPort, processToken) {
83
262
  });
84
263
  const actions = reconcileHostedMetro(requests, active);
85
264
  for (const session of actions.close) {
86
- await bridges.get(session)?.close();
87
- bridges.delete(session);
265
+ pools.get(session)?.close();
266
+ pools.delete(session);
88
267
  delete active[session];
89
268
  publish(session, null);
90
269
  }
91
270
  for (const session of actions.open) {
92
271
  const request = requests[session];
93
272
  active[session] = request;
94
- const bridge = createMetroGateway({
273
+ pools.set(session, openMetroLinks({
274
+ machine: request.machine,
275
+ session,
95
276
  metroPort,
96
- peer: request.peer,
97
- secret: request.secret
98
- });
99
- bridges.set(session, bridge);
100
- try {
101
- const saved = hostedMetroGateways(state)[session];
102
- await new Promise((resolve, reject) => {
103
- bridge.server.once("error", reject);
104
- bridge.server.listen(saved?.id === request.id ? saved.port ?? 0 : 0, request.address, () => {
105
- bridge.server.removeListener("error", reject);
106
- resolve();
277
+ onReady: () => {
278
+ if (active[session] === request) publish(session, {
279
+ id: request.id,
280
+ processToken,
281
+ ready: true
107
282
  });
108
- });
109
- const address = bridge.server.address();
110
- if (!address || typeof address === "string") throw new Error("No gateway port.");
111
- publish(session, {
112
- id: request.id,
113
- processToken,
114
- port: address.port
115
- });
116
- } catch {
117
- await bridge.close();
118
- bridges.delete(session);
119
- publish(session, {
120
- id: request.id,
121
- processToken,
122
- error: `Could not bind the private Metro gateway for ${request.machine}. Check Tailscale, then restart Metro.`
123
- });
124
- }
283
+ },
284
+ onLost: () => {
285
+ if (active[session] === request) publish(session, {
286
+ id: request.id,
287
+ processToken
288
+ });
289
+ },
290
+ onError: (message) => {
291
+ if (active[session] === request) publish(session, {
292
+ id: request.id,
293
+ processToken,
294
+ error: message
295
+ });
296
+ }
297
+ }));
125
298
  }
126
299
  if (!probing && Date.now() >= probingAt) {
127
300
  clearTimeout(probeTimer);
@@ -154,9 +327,10 @@ function watchHostedMetro(root, metroPort, processToken) {
154
327
  closed = true;
155
328
  observer.close();
156
329
  clearTimeout(probeTimer);
330
+ clearTimeout(republish);
157
331
  clearInterval(timer);
158
332
  await running;
159
- await Promise.all([...bridges.values()].map((bridge) => bridge.close()));
333
+ for (const pool of pools.values()) pool.close();
160
334
  };
161
335
  }
162
336
  //#endregion
@@ -628,7 +802,7 @@ async function runSupervisor({ root, port, tunnel = false, resetCache = false, i
628
802
  try {
629
803
  let start;
630
804
  if (command) {
631
- const startServer = startCommand ?? (await import("./server-command-8CuA51Cv.mjs")).startCommandServer;
805
+ const startServer = startCommand ?? (await import("./server-command-qneHPcRI.mjs")).startCommandServer;
632
806
  start = (opts) => startServer({
633
807
  ...opts,
634
808
  command
@@ -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 { C as emulatorDiskSpaceRemedy, E as findBuildTool, Q as profileNeedsFoldFeature, R as memoizeEmulatorProbe, T as extractEmulatorFailure, X as pickDefaultSystemImage, c as androidPoolNoCandidatesRefusal, k as hostSystemImageArch, l as androidSystemImageAbi, o as androidHome, s as androidPoolCandidates, w as emulatorFailureRemedy } from "./android-DriNoAVy.mjs";
4
- import { yn as pickDevClientScheme } from "./ccache-BWTze1Ls.mjs";
5
- import { c as layerNote, d as unknownAndroidDeviceProfileRefusal, f as unknownAndroidSystemImageRefusal } from "./device-capacity-6LP7QsaA.mjs";
6
- import { t as devClientScheme } from "./dev-client-BMca82xo.mjs";
3
+ import { C as emulatorDiskSpaceRemedy, E as findBuildTool, Q as profileNeedsFoldFeature, R as memoizeEmulatorProbe, T as extractEmulatorFailure, X as pickDefaultSystemImage, c as androidPoolNoCandidatesRefusal, k as hostSystemImageArch, l as androidSystemImageAbi, o as androidHome, s as androidPoolCandidates, w as emulatorFailureRemedy } from "./android-CsPs-7Mg.mjs";
4
+ import { yn as pickDevClientScheme } from "./ccache-Bm_A1xX9.mjs";
5
+ import { f as unknownAndroidDeviceProfileRefusal, l as layerNote, p as unknownAndroidSystemImageRefusal } from "./device-capacity-Cd8lMSn3.mjs";
6
+ import { t as devClientScheme } from "./dev-client-D-BW5uiq.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,13 +1,13 @@
1
- import { k as workspaceLogsDir } from "./workspace-state-BjqdjnJR.mjs";
2
- import { h as shortUdid, l as phaseLine } from "./command-output-Dj-WT4BP.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-BDVI8Ivc.mjs";
4
- import { q as describeDiagnostic } from "./toolchain-CbCG6C5Z.mjs";
5
- import { P as parseIosSimulatorApp } from "./ios-E26qSpkb.mjs";
1
+ import { k as workspaceLogsDir } from "./workspace-state-kIZrdlSg.mjs";
2
+ import { h as shortUdid, l as phaseLine } from "./command-output-C8R1KIvi.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-CY5JZlNN.mjs";
4
+ import { q as describeDiagnostic } from "./toolchain-mLA_km-b.mjs";
5
+ import { P as parseIosSimulatorApp } from "./ios-B1DYuOjh.mjs";
6
6
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
7
- import { d as resolveBuildPlacement } from "./selection-Bs8phwhN.mjs";
8
- import { l as parseDeviceWait } from "./device-lease-run-DwsGfjUN.mjs";
9
- import { c as layerNote, m as unknownIosRuntimeRefusal, p as unknownIosDeviceTypeRefusal, t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-6LP7QsaA.mjs";
10
- import { t as IosDeviceMismatchError } from "./device-ios-534c14fz.mjs";
7
+ import { d as resolveBuildPlacement } from "./selection-CXgM_VK_.mjs";
8
+ import { l as parseDeviceWait } from "./device-lease-run-Mtzp4THX.mjs";
9
+ import { h as unknownIosRuntimeRefusal, l as layerNote, m as unknownIosDeviceTypeRefusal, t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-Cd8lMSn3.mjs";
10
+ import { t as IosDeviceMismatchError } from "./device-ios-Cc9ulihb.mjs";
11
11
  import { basename, join } from "node:path";
12
12
  import chalk from "chalk";
13
13
  function buildLogFile(root) {
@@ -265,7 +265,8 @@ function createIosDeviceWaitRun(stats, progress, signal) {
265
265
  waiting = info !== null;
266
266
  progress.waitingFor(info, "device-slot");
267
267
  },
268
- onWait: stats.addDeviceSlotWaitMs
268
+ onWait: stats.addDeviceSlotWaitMs,
269
+ onBootStart: () => progress.bootStarted()
269
270
  },
270
271
  record(next) {
271
272
  if (waiting) outcome = next;
@@ -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-gBJ-WKzA.mjs";
3
+ import { n as buildCacheKey } from "./build-cache-CZULpXVl.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-BjqdjnJR.mjs";
3
- import { J as resolveCacheProviderConfig, Lt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-BDVI8Ivc.mjs";
2
+ import { y as sharedBuildCache } from "./workspace-state-kIZrdlSg.mjs";
3
+ import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-CY5JZlNN.mjs";
4
4
  import { r as register } from "./cache-manifest-DEjqGGat.mjs";
5
- import { m as macosToolchainAsync, ot as runCancellationSignal } from "./toolchain-CbCG6C5Z.mjs";
6
- import "./build-cache-gBJ-WKzA.mjs";
5
+ import { m as macosToolchainAsync, ot as runCancellationSignal } from "./toolchain-mLA_km-b.mjs";
6
+ import "./build-cache-CZULpXVl.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-F4cAfJGi.mjs";
9
+ import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-CmugrSG5.mjs";
10
10
  import { t as validateMacosArtifactPlatform } from "./artifact-platform-BO2Uvk_A.mjs";
11
- import { t as logLines } from "./run-DaCeNKRm.mjs";
12
- import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-uPqYvGBv.mjs";
11
+ import { t as logLines } from "./run-y2HwyNvg.mjs";
12
+ import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-Cj2UpmPN.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,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-BjqdjnJR.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-kIZrdlSg.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-Dj-WT4BP.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-C8R1KIvi.mjs";
5
5
  import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
6
- import { o as androidHome } from "./android-DriNoAVy.mjs";
6
+ import { o as androidHome } from "./android-CsPs-7Mg.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-ABQs2XFA.mjs";
9
+ import { t as cleanLine } from "./server-expo-Ccm9zB0o.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,2 +1,2 @@
1
- import { m as macosToolchainAsync, p as macosToolchain } from "./toolchain-CbCG6C5Z.mjs";
1
+ import { m as macosToolchainAsync, p as macosToolchain } from "./toolchain-mLA_km-b.mjs";
2
2
  export { macosToolchain, macosToolchainAsync };
@@ -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-BjqdjnJR.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-kIZrdlSg.mjs";
3
3
  import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
4
- import { Dt as linkedWorktreesOnDisk, St as gitCommonDirOnDisk } from "./settings-BDVI8Ivc.mjs";
5
- import { V as ownedAvdDirectory } from "./android-DriNoAVy.mjs";
4
+ import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-CY5JZlNN.mjs";
5
+ import { V as ownedAvdDirectory } from "./android-CsPs-7Mg.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-BjqdjnJR.mjs";
1
+ import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-kIZrdlSg.mjs";
2
2
  import { E as upsertProject, O as withConfigLockAsync, p as getProject } from "./config-Cn94Jc0g.mjs";
3
- import { f as refuseNoProject, l as phaseLine } from "./command-output-Dj-WT4BP.mjs";
4
- import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-BDVI8Ivc.mjs";
5
- import { f as projectRegistry, n as findCommandWorkspace } from "./project-DYj-HVx6.mjs";
3
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-C8R1KIvi.mjs";
4
+ import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-CY5JZlNN.mjs";
5
+ import { f as projectRegistry, n as findCommandWorkspace } from "./project-Sui52ywT.mjs";
6
6
  import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-CbWo21kb.mjs";
7
- import { o as readWebRecord, r as cdpEndpoint } from "./state-BX1y5syV.mjs";
7
+ import { o as readWebRecord, r as cdpEndpoint } from "./state-B2QJbDwz.mjs";
8
8
  import { t as liveWebRecord } from "./page-CQJlcj3x.mjs";
9
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DqaIBO5w.mjs";
9
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DG4Rodzj.mjs";
10
10
  import chalk from "chalk";
11
11
  //#region src/commands/web.ts
12
12
  const printNote = (line) => console.error(line);
@@ -0,0 +1,2 @@
1
+ import { n as webCommand, t as runWeb } from "./web-BYmK0TjL.mjs";
2
+ export { webCommand as default, runWeb };
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 { Tt as recordCreatedDevice } from "./android-DriNoAVy.mjs";
3
- import { f as signalProcessTree } from "./metro-CvyD-xwe.mjs";
2
+ import { Tt as recordCreatedDevice } from "./android-CsPs-7Mg.mjs";
3
+ import { f as signalProcessTree } from "./metro-BnhXV2Mj.mjs";
4
4
  import { i as createNdjsonWriter } from "./ndjson-Dy2W4vRa.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-BX1y5syV.mjs";
6
- import { l as probeWebDrivers } from "./activity-Cd-ysFes.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-B2QJbDwz.mjs";
6
+ import { l as probeWebDrivers } from "./activity-DRMg4_mD.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
2
  import { A as writeConfigSettingAsync, k as writeConfigSetting, m as getProjectSettings } from "./config-Cn94Jc0g.mjs";
3
- import { lt as workspaceHiddenSetting } from "./settings-BDVI8Ivc.mjs";
3
+ import { lt as workspaceHiddenSetting } from "./settings-CY5JZlNN.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";