stim 1.21.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +60 -7
  2. package/dist/{acquire-artifact-CD4lbiWE.mjs → acquire-artifact-Co2k4f7O.mjs} +21 -3
  3. package/dist/{act-DHAw2A2S.mjs → act-DsuqEkiM.mjs} +298 -164
  4. package/dist/{activity-BzVfHSrY.mjs → activity-CMLmzp7o.mjs} +33 -12
  5. package/dist/{agent-device-usage-output-zh1vhbLp.mjs → agent-device-usage-output-DUFaTMdd.mjs} +7 -7
  6. package/dist/{android-BLgbNqox.mjs → android-ByRMUoiJ.mjs} +66 -52
  7. package/dist/{android-DUYkNF4u.mjs → android-C7sVmyI9.mjs} +160 -59
  8. package/dist/{android-CV_GCELZ.mjs → android-DGkNqa_c.mjs} +5 -5
  9. package/dist/{android-BEJ8Jpl7.mjs → android-DR5lZ2Az.mjs} +2 -2
  10. package/dist/android-cas-compiler.mjs +1 -1
  11. package/dist/{android-cas-Ct5b1xCK.mjs → android-cas-ngferVq2.mjs} +3 -3
  12. package/dist/{client-B7QVOlCr.d.mts → android-project-DVWyCbWU.d.mts} +145 -7
  13. package/dist/api.d.mts +132 -118
  14. package/dist/api.mjs +239 -42
  15. package/dist/{artifact-B8T3S5gi.mjs → artifact-8EY8SAPw.mjs} +40 -35
  16. package/dist/{artifact-DAuZ-FNU.mjs → artifact-DJPy518Y.mjs} +69 -40
  17. package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
  18. package/dist/{browser-web-QQzVjz3O.mjs → browser-web-Bcv99PBM.mjs} +187 -59
  19. package/dist/{budget-Bs6SxxzO.mjs → budget-Cvwn54qV.mjs} +830 -699
  20. package/dist/{build-CoPzQRNw.mjs → build-CabC3G23.mjs} +34 -27
  21. package/dist/{build-cache-DmyR9Zzc.mjs → build-cache-Dv7RN200.mjs} +4 -4
  22. package/dist/{build-plan-CaFskB7_.mjs → build-plan-DUC8Ka9y.mjs} +74 -14
  23. package/dist/{cache-manifest-DkkqguoK.mjs → cache-manifest-DSeQjt-Q.mjs} +1 -1
  24. package/dist/cache-manifest.mjs +1 -1
  25. package/dist/{ccache-BJRZ9pG3.mjs → ccache-Btwc36-I.mjs} +6 -6
  26. package/dist/{cdp-CWmIUMbw.mjs → cdp-3fwICjzi.mjs} +1 -1
  27. package/dist/{chrome-B6tfCta1.mjs → chrome-Bbw689-6.mjs} +1 -1
  28. package/dist/{cli-0DYf8QhQ.mjs → cli-CHZa9Lvk.mjs} +20 -20
  29. package/dist/cli.mjs +1 -1
  30. package/dist/{client-UXD70ZbM.mjs → client-OyRoEuSr.mjs} +218 -47
  31. package/dist/collector-run.d.mts +1 -1
  32. package/dist/collector-run.mjs +6 -6
  33. package/dist/{command-output-B1UrjZHL.mjs → command-output-gwpm28fu.mjs} +1 -1
  34. package/dist/{config-CYcBF478.mjs → config-DlrsduwG.mjs} +17 -11
  35. package/dist/{created-devices-CqeBlrEn.mjs → created-devices-x9rN6bhs.mjs} +13 -3
  36. package/dist/{dependency-state-BbKQW83h.mjs → dependency-state-1I9KZT1Y.mjs} +2 -2
  37. package/dist/{detached-entry-DFRyG1_o.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
  38. package/dist/{dev-client-UOeESKm6.mjs → dev-client-BSDR5h3F.mjs} +2 -2
  39. package/dist/{device-ExJq8Ei7.mjs → device-B-L3Fbxy.mjs} +71 -14
  40. package/dist/{device-DCxH7_By.mjs → device-DklWZLqb.mjs} +16 -16
  41. package/dist/{device-capacity-CMlqEcvw.mjs → device-capacity-DK5_EwRS.mjs} +9 -10
  42. package/dist/device-host-worker.mjs +25 -32
  43. package/dist/{device-ios-DRUeKaFV.mjs → device-ios-DoB6KFCO.mjs} +39 -16
  44. package/dist/{device-lease-run-C8raGFoP.mjs → device-lease-run-xJPQ_QQG.mjs} +5 -5
  45. package/dist/{device-pool-DMRpVX9a.mjs → device-pool-BMkdsefq.mjs} +3 -3
  46. package/dist/{doctor-DTvaDOda.mjs → doctor-Bo7BXLux.mjs} +24 -37
  47. package/dist/{doctor-Dhqebm0q.mjs → doctor-D5_EzwfA.mjs} +19 -16
  48. package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
  49. package/dist/doctor-fingerprint.mjs +1 -1
  50. package/dist/{doctor-BLHCYxzi.mjs → doctor-thjWAV0z.mjs} +1 -1
  51. package/dist/{doctor-watchman-Cv1F10Kj.mjs → doctor-watchman-N2wDotwQ.mjs} +5 -5
  52. package/dist/{eas-build-BomfRnFT.mjs → eas-build-CwknaQYj.mjs} +4 -4
  53. package/dist/{eas-fallback-DJwZpy0c.mjs → eas-fallback-CSgAulr5.mjs} +27 -18
  54. package/dist/{eas-session-ledger-op6A54yi.mjs → eas-session-ledger-DlY_serQ.mjs} +8 -7
  55. package/dist/{error-diagnostics-Bf0rZvG9.mjs → error-diagnostics-DBWO2rxE.mjs} +10 -10
  56. package/dist/{exec-_UbtCQcG.mjs → exec-DEoAhcze.mjs} +155 -47
  57. package/dist/{exec-H20xSg2T.d.mts → exec-DnYc4HGH.d.mts} +17 -4
  58. package/dist/{gc-_-dCXdyL.mjs → gc-CXxN-4SE.mjs} +587 -313
  59. package/dist/gc-DnNDQyaP.mjs +3 -0
  60. package/dist/{guide-Yqwt2bd6.mjs → guide-Br0LEfKy.mjs} +239 -43
  61. package/dist/{hosted-android-Bw-honsd.mjs → hosted-android-B-9f-jkd.mjs} +6 -6
  62. package/dist/{hosted-client-DB_gBPfY.mjs → hosted-client-DZAPrcro.mjs} +4 -4
  63. package/dist/{hosted-ios-CUvOf4Vr.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
  64. package/dist/{hosted-logs-DL_P5AdN.mjs → hosted-logs-FIRx9X2f.mjs} +5 -5
  65. package/dist/{hosted-macos-QI141yKk.mjs → hosted-macos-_awYSpfv.mjs} +21 -12
  66. package/dist/{hosted-native-Ksyjgzq-.mjs → hosted-native-BdzE668-.mjs} +27 -14
  67. package/dist/{idle-BVeRGroT.d.mts → idle-C4cZ757K.d.mts} +3 -3
  68. package/dist/{idle-shutdown-DaKmZi0z.mjs → idle-shutdown-DDg3SdvY.mjs} +7 -7
  69. package/dist/ios-CDvlmUs7.d.mts +24 -0
  70. package/dist/{ios-CQ68hG9s.mjs → ios-Ds1clbIt.mjs} +8 -8
  71. package/dist/{ios-device-CwFMehUS.mjs → ios-device--h_-8ENa.mjs} +3 -3
  72. package/dist/{ios-device-CXGP1bsD.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
  73. package/dist/{ios-CpByZy12.mjs → ios-hcBpnEGk.mjs} +81 -34
  74. package/dist/{ios-ubFsBzwq.mjs → ios-pm4nL6By.mjs} +59 -50
  75. package/dist/{ios-project-WuwwBdvW.mjs → ios-project-CZhKODF3.mjs} +5 -5
  76. package/dist/{ios-signing-DTTIChGs.mjs → ios-signing-BtAffm0A.mjs} +2 -2
  77. package/dist/{ios-state-DvFX-K_l.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
  78. package/dist/{ios-qNJt4dFm.mjs → ios-xtlRHaeB.mjs} +1 -1
  79. package/dist/{js-swap-Cc1dttps.mjs → js-swap-Bwhh4S7V.mjs} +7 -29
  80. package/dist/{launch-Zq2mOSDy.mjs → launch-BjxemNpK.mjs} +40 -39
  81. package/dist/{launch-CD1yVc7U.mjs → launch-CCzXlc8r.mjs} +16 -16
  82. package/dist/{logs-BS00Anxf.mjs → logs-BfwwadsZ.mjs} +151 -24
  83. package/dist/{logs-CMm05HxN.mjs → logs-jTS_lHSo.mjs} +10 -17
  84. package/dist/{macos-B65--pPd.mjs → macos-DVlSSyUg.mjs} +1 -1
  85. package/dist/{macos-C-0qJ6zq.mjs → macos-NfV2D7dO.mjs} +143 -46
  86. package/dist/macos-run.mjs +1 -1
  87. package/dist/maintenance-run.mjs +8 -8
  88. package/dist/{metro-DEXpIhHC.mjs → metro-DiXtA3Ty.mjs} +59 -37
  89. package/dist/{metro-gateway-BMJNlj3E.mjs → metro-gateway-CKZqKqx7.mjs} +120 -22
  90. package/dist/{named-ports-BWTzt6mu.mjs → named-ports-DkEzOfzO.mjs} +40 -33
  91. package/dist/{native-android-JACyjTZs.mjs → native-android-CqgnOgsT.mjs} +43 -242
  92. package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
  93. package/dist/{native-gradle-inputs-Bep9JcSF.mjs → native-gradle-inputs-Dnh84Zbd.mjs} +3 -129
  94. package/dist/{native-run-DY_RLx3C.mjs → native-run-NwUuxbkg.mjs} +4 -5
  95. package/dist/{native-runtime-Dg1Q7tfF.mjs → native-runtime-B7KIafpM.mjs} +8 -7
  96. package/dist/native-source-Y0yLhFyQ.mjs +133 -0
  97. package/dist/{native-xcode-inputs-CB2iQeWq.mjs → native-xcode-inputs-D_VOfFL7.mjs} +2 -3
  98. package/dist/{native-xcode-ios-CXX39F7o.mjs → native-xcode-ios-BYDOHWLN.mjs} +27 -32
  99. package/dist/offload-worker.d.mts +65 -2
  100. package/dist/offload-worker.mjs +305 -73
  101. package/dist/operation-exec-BW0em61G.mjs +171 -0
  102. package/dist/{ownership-DEmM5vhh.mjs → ownership-C5fo5Edb.mjs} +3 -3
  103. package/dist/{page-CPaHeYqj.mjs → page-DBL2PiUU.mjs} +8 -4
  104. package/dist/{placement-log-BqGbTa61.mjs → placement-log-BnGgJRRZ.mjs} +1 -1
  105. package/dist/{plan-placement-Bwj-IjY1.mjs → plan-placement-DIsMtN-d.mjs} +12 -8
  106. package/dist/{ports-D-MmCTdv.mjs → ports-Cy1RkmuQ.mjs} +3 -3
  107. package/dist/{prebuild-uD_ipCxF.mjs → prebuild-D4JoEAEs.mjs} +49 -14
  108. package/dist/{project-BZNjmW_8.mjs → project-wM_XFTvE.mjs} +16 -16
  109. package/dist/{pull-request-Lfetn8Kr.mjs → pull-request-W1IuLXDt.mjs} +102 -20
  110. package/dist/{pull-request-zjCSAryH.d.mts → pull-request-eODyIqZF.d.mts} +6 -2
  111. package/dist/pull-requests.d.mts +2 -2
  112. package/dist/pull-requests.mjs +2 -2
  113. package/dist/{react-native-android-DuzH0cn3.mjs → react-native-android-6OZ7MSM7.mjs} +71 -48
  114. package/dist/{react-native-build-rhk4smwQ.mjs → react-native-build-Dvd8hC21.mjs} +8 -8
  115. package/dist/{react-native-doctor-CQpuIMso.mjs → react-native-doctor-DsoSF1Y9.mjs} +7 -7
  116. package/dist/{react-native-ios-Bhq1rJeV.mjs → react-native-ios-4u1Rn-GR.mjs} +40 -26
  117. package/dist/{recordings-DYteQSu4.mjs → recordings-CQmfzAh7.mjs} +1 -1
  118. package/dist/registration-BcRgF6Ox.mjs +51 -0
  119. package/dist/{reload-CmTRFJaX.mjs → reload-BzkYabB-.mjs} +16 -15
  120. package/dist/{reload-DzjSl5P_.mjs → reload-D7AVlb8N.mjs} +1 -1
  121. package/dist/{remote-ByYkXdGD.mjs → remote-DjGDmlTZ.mjs} +18 -15
  122. package/dist/{result-DNiS-tTP.mjs → result-D2Ykz_iD.mjs} +24 -23
  123. package/dist/{run-D23HmJMs.mjs → run-DidHghD1.mjs} +3 -2
  124. package/dist/{selection-CSl9i5qU.mjs → selection-DSMbWEX2.mjs} +6 -5
  125. package/dist/{server-bare-CxTrvDg8.mjs → server-bare-CafzuyFB.mjs} +2 -2
  126. package/dist/{server-command-CtzloH3v.mjs → server-command-C6QjeupS.mjs} +5 -5
  127. package/dist/{server-expo-DT_F_uVI.mjs → server-expo-CrjB29pq.mjs} +7 -5
  128. package/dist/server-expo-D58c9L0M.mjs +2 -0
  129. package/dist/{settings-CsJDEXgK.mjs → settings-C7O8A6ZI.mjs} +223 -243
  130. package/dist/{settings-T1gtc3bf.mjs → settings-DpR-1Wnn.mjs} +1 -1
  131. package/dist/{settings-write-HyVZ8eQ8.mjs → settings-write-CzD60rOD.mjs} +7 -6
  132. package/dist/settings.schema.json +13 -0
  133. package/dist/{simslim-Cgk17SXV.mjs → simslim-BNckWpXi.mjs} +2 -2
  134. package/dist/{slot-launch-DF8VfT64.mjs → slot-launch-CbfmNgM6.mjs} +6 -6
  135. package/dist/{stage-BIS0ydsV.mjs → stage-Bps5oius.mjs} +21 -4
  136. package/dist/{start-RChynRDp.mjs → start-Br-oxqMD.mjs} +1 -1
  137. package/dist/{start-7lpH7hmN.mjs → start-EojN4WFz.mjs} +622 -393
  138. package/dist/{state-C4ZtUisW.mjs → state--smjFSTL.mjs} +22 -7
  139. package/dist/{state-XMziexv2.mjs → state-08I3hw3_.mjs} +2 -2
  140. package/dist/{stats-53T7OTb9.mjs → stats-D3GerlFW.mjs} +5 -5
  141. package/dist/{stats-report-BFfMpWWF.mjs → stats-report-BzaPrRm6.mjs} +1 -1
  142. package/dist/{status-DqEUSSxs.mjs → status-BRROykC8.mjs} +2 -2
  143. package/dist/{status-CSi6tlRq.mjs → status-EvrK72L2.mjs} +1 -1
  144. package/dist/{status-BL7jVyAB.mjs → status-WBDajew2.mjs} +43 -29
  145. package/dist/{status-watch-GDCfqpTE.mjs → status-watch-Bg_u-pwR.mjs} +48 -16
  146. package/dist/status-worker.mjs +1 -1
  147. package/dist/{stim-desktop-C12we7lz.mjs → stim-desktop-D5OGpYZM.mjs} +2 -2
  148. package/dist/{stop-Bk_1qiV6.mjs → stop-DTZ9uTw3.mjs} +2 -2
  149. package/dist/{stop-D7h6jAXQ.mjs → stop-Dky10AEJ.mjs} +31 -22
  150. package/dist/{stop-CPzlM1L-.mjs → stop-Mv6W9FAk.mjs} +15 -16
  151. package/dist/supervisor-run.d.mts +3 -3
  152. package/dist/supervisor-run.mjs +28 -36
  153. package/dist/{support-Dlu37g6H.mjs → support-CNioewsd.mjs} +10 -10
  154. package/dist/{support-67vraa1Q.mjs → support-yUiOjnVY.mjs} +8 -8
  155. package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
  156. package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
  157. package/dist/toolchain-BY8X8HXx.mjs +2 -0
  158. package/dist/{toolchain-Hp9sCpK4.mjs → toolchain-DpJMHq0n.mjs} +9 -6
  159. package/dist/{trigger-BAahxUPq.mjs → trigger-Cbyc41d_.mjs} +3 -3
  160. package/dist/trigger-yb_nFzPF.mjs +2 -0
  161. package/dist/{warm-progress-BHX5r0Ei.mjs → warm-progress-CA3TgT3-.mjs} +29 -16
  162. package/dist/web-CZ07gd77.mjs +2 -0
  163. package/dist/{web-CJmIj6AI.mjs → web-DKx6yoFA.mjs} +11 -10
  164. package/dist/web-run.mjs +11 -9
  165. package/dist/windows-report.mjs +1 -1
  166. package/dist/{workspace-state-Cjuigeeu.mjs → workspace-state-U08dEzhG.mjs} +3 -3
  167. package/dist/{workspaces-BccMFmGQ.mjs → workspaces-CpANmBlq.mjs} +594 -266
  168. package/dist/{worktree-DQ6Zi2Mv.mjs → worktree-CHecZ4Oq.mjs} +850 -551
  169. package/dist/worktree-ZqZVjD9K.mjs +2 -0
  170. package/dist/{xcode-Zlx3qjEs.mjs → xcode-BXn9-xYx.mjs} +5 -5
  171. package/package.json +7 -7
  172. package/shim/android-audio/Main.java +24 -0
  173. package/shim/android-audio/README.md +17 -0
  174. package/shim/android-audio.jar +0 -0
  175. package/dist/gc-C-WwL0yi.mjs +0 -3
  176. package/dist/git-C3iTsJaZ.mjs +0 -73
  177. package/dist/server-expo-C-90EhcG.mjs +0 -2
  178. package/dist/settings-DkdmlelE.d.mts +0 -15
  179. package/dist/swiftpm-macos-p8WZbxKU.mjs +0 -130
  180. package/dist/toolchain-DhKwp9iI.mjs +0 -2
  181. package/dist/trigger-Bf3uDcpv.mjs +0 -2
  182. package/dist/web-DknQETPs.mjs +0 -2
  183. package/dist/workspace-process-lock-1_1OoVW5.mjs +0 -57
  184. package/dist/worktree-CK2MpJW5.mjs +0 -2
@@ -1,5 +1,5 @@
1
- import { t as getExecutor } from "./exec-_UbtCQcG.mjs";
2
- import { Gt as childEnvironment, en as throwIfCancelled, qt as killOnAbort } from "./settings-CsJDEXgK.mjs";
1
+ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
+ import { a as killOnAbort, f as throwIfCancelled, r as childEnvironment } from "./operation-exec-BW0em61G.mjs";
3
3
  import { X509Certificate } from "node:crypto";
4
4
  import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { tmpdir } from "node:os";
@@ -1,4 +1,4 @@
1
- import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-Cjuigeeu.mjs";
1
+ import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
2
2
  import { HOSTED_METRO_REQUESTS_KEY, hostedMetroRequests, hostedNativeRecords, isJsonObject, parseHostedNativePlacement, unreadableHostedNative } from "@stim-cli/core/state";
3
3
  //#region src/device-host/ios-state.ts
4
4
  function readHostedNative(root, platform, slot) {
@@ -1,4 +1,4 @@
1
- import { t as getExecutor } from "./exec-_UbtCQcG.mjs";
1
+ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  //#region src/collector/ios.ts
3
3
  const MESSAGE_TYPE_LEVEL = {
4
4
  Debug: "debug",
@@ -1,35 +1,13 @@
1
- import { s as spawnDeclared, t as getExecutor, u as operationState } from "./exec-_UbtCQcG.mjs";
1
+ import { d as spawnDeclared, m as operationState, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
3
- import { Gt as childEnvironment, Xt as removeTemporaryEntry, Yt as makeTemporaryDirectory, en as throwIfCancelled, qt as killOnAbort } from "./settings-CsJDEXgK.mjs";
4
- import { Xn as bundleInvocation } from "./budget-Bs6SxxzO.mjs";
5
- import { t as cleanLine } from "./server-expo-DT_F_uVI.mjs";
6
- import { _ as tailLines, h as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-Zlx3qjEs.mjs";
3
+ import { a as killOnAbort, f as throwIfCancelled, t as runOperationFile } from "./operation-exec-BW0em61G.mjs";
4
+ import { Ht as makeTemporaryDirectory, Ut as removeTemporaryEntry } from "./settings-C7O8A6ZI.mjs";
5
+ import { Xn as bundleInvocation } from "./budget-Cvwn54qV.mjs";
6
+ import { t as cleanLine } from "./server-expo-CrjB29pq.mjs";
7
+ import { _ as tailLines, h as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-BXn9-xYx.mjs";
7
8
  import { randomUUID } from "node:crypto";
8
9
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
9
10
  import { basename, join } from "node:path";
10
- //#region src/engine/operation-exec.ts
11
- async function runOperationFile(context, executor, file, args, options) {
12
- const signal = context ? operationState(context).runSignal ?? context.signal : void 0;
13
- throwIfCancelled(signal, file);
14
- const environment = context ? childEnvironment(context.env) : {
15
- env: {},
16
- omitEnv: []
17
- };
18
- const output = await executor.runFileAsync(file, args, {
19
- ...environment,
20
- ...options,
21
- ...context ? { env: {
22
- ...environment.env,
23
- ...options.env
24
- } } : {},
25
- omitEnv: [...environment.omitEnv.filter((name) => options.env?.[name] === void 0), ...options.omitEnv ?? []],
26
- declareFor: context,
27
- onSpawn: killOnAbort(signal)
28
- });
29
- throwIfCancelled(signal, file);
30
- return output;
31
- }
32
- //#endregion
33
11
  //#region src/engine/js-swap.ts
34
12
  const JS_BUNDLE_NAME = "main.jsbundle";
35
13
  const LAST_LINES = 5;
@@ -456,4 +434,4 @@ function describe(err) {
456
434
  return String(err?.message || err);
457
435
  }
458
436
  //#endregion
459
- export { runOperationFile as a, swapJsBundle as i, detectEntryFile as n, refreshUpdatesManifestFile as r, UPDATES_MANIFEST_NAME as t };
437
+ export { swapJsBundle as i, detectEntryFile as n, refreshUpdatesManifestFile as r, UPDATES_MANIFEST_NAME as t };
@@ -1,43 +1,44 @@
1
- import { t as getExecutor } from "./exec-_UbtCQcG.mjs";
1
+ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
2
  import { m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
3
- import { E as upsertProject, H as deviceSlotKey, V as deviceSlotFileKey, p as getProject, u as getConcurrencyLimits, v as recordIosSchemeApprovals } from "./config-CYcBF478.mjs";
4
- import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-B1UrjZHL.mjs";
5
- import { d as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-Cjuigeeu.mjs";
6
- import { $ as settingOriginScope, G as resolveCacheProviderConfig, It as repoRootAsync, Qt as cancellableSleep, Xt as removeTemporaryEntry, Y as resolveSettings, Yt as makeTemporaryDirectory, ct as detectProviders, nt as settingsLayers, yt as gitCommonDirAsync } from "./settings-CsJDEXgK.mjs";
7
- import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot, v as detectIsExpo, z as writeWorkspaceLaunch } from "./project-BZNjmW_8.mjs";
3
+ import { B as deviceSlotFileKey, E as upsertProject, V as deviceSlotKey, p as getProject, u as getConcurrencyLimits, v as recordIosSchemeApprovals } from "./config-DlrsduwG.mjs";
4
+ import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-gwpm28fu.mjs";
5
+ import { u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
6
+ import { d as writeWorkspaceState, r as readWorkspaceState } from "./workspace-state-U08dEzhG.mjs";
7
+ import { $ as settingOriginScope, G as resolveCacheProviderConfig, Ht as makeTemporaryDirectory, Nt as repoRootAsync, Ut as removeTemporaryEntry, Y as resolveSettings, ct as detectProviders, nt as settingsLayers, vt as gitCommonDirAsync } from "./settings-C7O8A6ZI.mjs";
8
+ import { L as workspaceDevServerMode, f as projectRegistry, i as findProjectRoot, v as detectIsExpo, z as writeWorkspaceLaunch } from "./project-wM_XFTvE.mjs";
8
9
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
9
- import { f as resolveProjectMetro, l as pidExists, p as signalProcessTree } from "./metro-DEXpIhHC.mjs";
10
- import { $t as readCollectorRecords, Bn as checkEasAuth, Bt as ensureMetroReachable, En as restartedAppNote, Gt as resolveRemoteContext, J as recordRunStats, Jn as resolveRemote, Jt as LAUNCH_FATAL, K as recordCapacityRefusal, Mn as readRemoteSimulatorArch, Nn as gateMetroOrigin, Qt as isBundleProof, Rt as bundleEntryPoint, Sn as iosAppProcess, Tn as launchIosApp, Un as loadProjectProvider, Vt as ensureRemoteBootOwned, W as readRunEstimates, Wt as remoteIosDeps, Xt as RELEASE_VERIFY_WAIT_MS, Yn as uploadRemote, Yt as LAUNCH_UNVERIFIED, an as verifyReleaseLaunch, en as readMetroRecords, hn as devClientUrl, in as verifyLaunch, mn as clearOtherUserApps, nn as unverifiedLaunchLines, qn as resolveEasCliBin, qt as LAUNCH_BUNDLING, t as budgetGate, tn as unattributedLaunchLines, un as IOS_DEV_MENU_OFF_DEFAULTS_PLIST, xn as installIosApp } from "./budget-Bs6SxxzO.mjs";
11
- import { F as acquireBuildSlot, L as releaseBuildSlot } from "./workspaces-BccMFmGQ.mjs";
12
- import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-BzVfHSrY.mjs";
13
- import { b as untrackedNativeFiles, g as storeBuild, h as resolveBuild, l as fingerprintProject } from "./build-cache-DmyR9Zzc.mjs";
14
- import { d as listAllIosSims, m as listIosRuntimes, r as clearIosAppData } from "./ios-CpByZy12.mjs";
15
- import { o as workspaceLinks } from "./stim-desktop-C12we7lz.mjs";
16
- import { f as readBundleExecutable, m as resolveScheme, p as readBundleId } from "./xcode-Zlx3qjEs.mjs";
17
- import { _ as runPodInstall, m as readPodState, p as podsAreStale } from "./toolchain-Hp9sCpK4.mjs";
18
- import { n as readHostedIos, o as writeHostedIos } from "./ios-state-DvFX-K_l.mjs";
19
- import { n as prepareHostedIos, t as placeHostedIos } from "./hosted-ios-CUvOf4Vr.mjs";
20
- import { n as verifyCollectorOwnership } from "./ownership-DEmM5vhh.mjs";
21
- import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DF8VfT64.mjs";
22
- import { a as discoverXcodeProject, r as buildIos } from "./react-native-build-rhk4smwQ.mjs";
23
- import { a as acquireRunLease, c as lostRefusal, d as runLease, s as lostLine, t as DEBUG_VERIFY_STEP_MS, u as releaseLeaseOnAbort } from "./device-lease-run-C8raGFoP.mjs";
24
- import { r as checkDeviceCapacity } from "./device-capacity-CMlqEcvw.mjs";
25
- import { n as clearIosAdoptionPending } from "./device-ios-DRUeKaFV.mjs";
26
- import { i as deviceLabel, o as deviceShortName, t as appNameFromPath } from "./support-Dlu37g6H.mjs";
27
- import { a as sealAppForDevice, r as gateProfileForDevice } from "./ios-signing-DTTIChGs.mjs";
28
- import { a as resolveEasDevelopmentBuild } from "./eas-build-BomfRnFT.mjs";
29
- import { a as printNativeCrashReport, n as IOS_CRASH_REPORT_RETRY, o as simulatorConsolePaths, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-Bf0rZvG9.mjs";
30
- import { c as startDevServer, g as detectBundleId } from "./start-7lpH7hmN.mjs";
10
+ import { c as pidExists, d as resolveProjectMetro, f as signalProcessTree } from "./metro-DiXtA3Ty.mjs";
11
+ import { $t as readCollectorRecords, Bn as checkEasAuth, Bt as ensureMetroReachable, En as restartedAppNote, Gt as resolveRemoteContext, J as recordRunStats, Jn as resolveRemote, Jt as LAUNCH_FATAL, K as recordCapacityRefusal, Mn as readRemoteSimulatorArch, Nn as gateMetroOrigin, Qt as isBundleProof, Rt as bundleEntryPoint, Sn as iosAppProcess, Tn as launchIosApp, Un as loadProjectProvider, Vt as ensureRemoteBootOwned, W as readRunEstimates, Wt as remoteIosDeps, Xt as RELEASE_VERIFY_WAIT_MS, Yn as uploadRemote, Yt as LAUNCH_UNVERIFIED, an as verifyReleaseLaunch, en as readMetroRecords, hn as devClientUrl, in as verifyLaunch, mn as clearOtherUserApps, nn as unverifiedLaunchLines, qn as resolveEasCliBin, qt as LAUNCH_BUNDLING, t as budgetGate, tn as unattributedLaunchLines, un as IOS_DEV_MENU_OFF_DEFAULTS_PLIST, xn as installIosApp } from "./budget-Cvwn54qV.mjs";
12
+ import { I as acquireBuildSlot, R as releaseBuildSlot } from "./workspaces-CpANmBlq.mjs";
13
+ import { F as waitForBuild, M as acquireBuildLock, P as releaseBuildLock } from "./activity-CMLmzp7o.mjs";
14
+ import { b as untrackedNativeFiles, g as storeBuild, h as resolveBuild, l as fingerprintProject } from "./build-cache-Dv7RN200.mjs";
15
+ import { d as listAllIosSims, h as listIosRuntimesAsync, r as clearIosAppData } from "./ios-hcBpnEGk.mjs";
16
+ import { o as workspaceLinks } from "./stim-desktop-D5OGpYZM.mjs";
17
+ import { f as readBundleExecutable, m as resolveScheme, p as readBundleId } from "./xcode-BXn9-xYx.mjs";
18
+ import { h as readPodState, m as podsAreStale, v as runPodInstall } from "./toolchain-DpJMHq0n.mjs";
19
+ import { n as readHostedIos, o as writeHostedIos } from "./ios-state-Dtw5K2aI.mjs";
20
+ import { n as prepareHostedIos, t as placeHostedIos } from "./hosted-ios-CsCS21hn.mjs";
21
+ import { n as verifyCollectorOwnership } from "./ownership-C5fo5Edb.mjs";
22
+ import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-CbfmNgM6.mjs";
23
+ import { c as startDevServer, g as detectBundleId } from "./start-EojN4WFz.mjs";
31
24
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
32
- import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely } from "./native-runtime-Dg1Q7tfF.mjs";
33
- import { r as runPrebuild, t as planPrebuild } from "./prebuild-uD_ipCxF.mjs";
34
- import { n as devClientTakesDevMenuParams, t as devClientScheme } from "./dev-client-UOeESKm6.mjs";
35
- import { n as automaticDevicePlacement, t as checkEasFallback } from "./eas-fallback-DJwZpy0c.mjs";
36
- import { n as ensureBooted, o as warmMetro, r as ensureOwnedDevice } from "./device-ExJq8Ei7.mjs";
37
- import { t as selectFromPool } from "./device-pool-DMRpVX9a.mjs";
38
- import { o as reportIosResult } from "./ios-project-WuwwBdvW.mjs";
39
- import { c as isWirelessIosDevice, i as iosDeviceProcess, l as listIosDevices, n as installIosDeviceApp, p as verifyIosDeviceReleaseLaunch, r as iosDeviceBounds, t as awaitIosDeviceLaunch, u as localNetworkPending } from "./ios-device-CwFMehUS.mjs";
40
- import { i as swapJsBundle } from "./js-swap-Cc1dttps.mjs";
25
+ import { a as discoverXcodeProject, r as buildIos } from "./react-native-build-Dvd8hC21.mjs";
26
+ import { a as acquireRunLease, c as lostRefusal, d as runLease, s as lostLine, t as DEBUG_VERIFY_STEP_MS, u as releaseLeaseOnAbort } from "./device-lease-run-xJPQ_QQG.mjs";
27
+ import { r as checkDeviceCapacity } from "./device-capacity-DK5_EwRS.mjs";
28
+ import { n as clearIosAdoptionPending } from "./device-ios-DoB6KFCO.mjs";
29
+ import { i as deviceLabel, o as deviceShortName, t as appNameFromPath } from "./support-CNioewsd.mjs";
30
+ import { a as sealAppForDevice, r as gateProfileForDevice } from "./ios-signing-BtAffm0A.mjs";
31
+ import { a as resolveEasDevelopmentBuild } from "./eas-build-CwknaQYj.mjs";
32
+ import { a as printNativeCrashReport, n as IOS_CRASH_REPORT_RETRY, o as simulatorConsolePaths, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-DBWO2rxE.mjs";
33
+ import { i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely } from "./native-runtime-B7KIafpM.mjs";
34
+ import { i as runPrebuild, n as planPrebuildAsync } from "./prebuild-D4JoEAEs.mjs";
35
+ import { n as devClientTakesDevMenuParams, t as devClientScheme } from "./dev-client-BSDR5h3F.mjs";
36
+ import { n as automaticDevicePlacement, t as checkEasFallback } from "./eas-fallback-CSgAulr5.mjs";
37
+ import { n as ensureBooted, o as warmMetro, r as ensureOwnedDevice } from "./device-B-L3Fbxy.mjs";
38
+ import { t as selectFromPool } from "./device-pool-BMkdsefq.mjs";
39
+ import { o as reportIosResult } from "./ios-project-CZhKODF3.mjs";
40
+ import { c as isWirelessIosDevice, i as iosDeviceProcess, l as listIosDevices, n as installIosDeviceApp, p as verifyIosDeviceReleaseLaunch, r as iosDeviceBounds, t as awaitIosDeviceLaunch, u as localNetworkPending } from "./ios-device--h_-8ENa.mjs";
41
+ import { i as swapJsBundle } from "./js-swap-Bwhh4S7V.mjs";
41
42
  import { mkdirSync, openSync, writeFileSync } from "node:fs";
42
43
  import { networkInterfaces } from "node:os";
43
44
  import { basename, join } from "node:path";
@@ -275,7 +276,7 @@ const DEFAULT_DEPS = {
275
276
  checkDeviceCapacity,
276
277
  budgetGate,
277
278
  ensureOwnedDevice,
278
- listIosRuntimes,
279
+ listIosRuntimes: listIosRuntimesAsync,
279
280
  listAllIosSims,
280
281
  ensureBooted,
281
282
  resolveRemoteContext,
@@ -307,7 +308,7 @@ const DEFAULT_DEPS = {
307
308
  resolveEasCliBin,
308
309
  resolveRemote,
309
310
  uploadRemote,
310
- planPrebuild,
311
+ planPrebuild: planPrebuildAsync,
311
312
  runPrebuild,
312
313
  readPodState,
313
314
  podsAreStale,
@@ -1,21 +1,21 @@
1
1
  import { m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
2
- import { C as saveConfig, E as upsertProject, H as deviceSlotKey, O as withConfigLockAsync, P as formatBytes, U as deviceSlotPlatforms, V as deviceSlotFileKey, _ as loadConfig, w as setDevice } from "./config-CYcBF478.mjs";
3
- import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-B1UrjZHL.mjs";
4
- import { L as workspaceDevServerMode } from "./project-BZNjmW_8.mjs";
5
- import { l as pidExists, p as signalProcessTree } from "./metro-DEXpIhHC.mjs";
6
- import { En as restartedAppNote, Jt as LAUNCH_FATAL, Xt as RELEASE_VERIFY_WAIT_MS, Yt as LAUNCH_UNVERIFIED, Zt as VERIFY_TIMEOUT_MS, bn as installConflictKind, dn as androidAppProcess, fn as androidDevClientUrl, nn as unverifiedLaunchLines, qt as LAUNCH_BUNDLING, sn as ADB_INSTALL_TIMEOUT_MS, tn as unattributedLaunchLines } from "./budget-Bs6SxxzO.mjs";
7
- import { E as teardownOwnedAvd } from "./workspaces-BccMFmGQ.mjs";
8
- import { p as providerUploadOutcome } from "./build-cache-DmyR9Zzc.mjs";
9
- import { Z as resetAdoptedAvd, i as androidDataFreeBytes, nt as trimAndroidCaches, u as androidToolCwd } from "./android-DUYkNF4u.mjs";
10
- import { o as workspaceLinks } from "./stim-desktop-C12we7lz.mjs";
11
- import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-DEmM5vhh.mjs";
12
- import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DF8VfT64.mjs";
13
- import { c as lostRefusal, s as lostLine, t as DEBUG_VERIFY_STEP_MS } from "./device-lease-run-C8raGFoP.mjs";
14
- import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-Bf0rZvG9.mjs";
2
+ import { B as deviceSlotFileKey, C as saveConfig, E as upsertProject, H as deviceSlotPlatforms, O as withConfigLockAsync, P as formatBytes, V as deviceSlotKey, _ as loadConfig, w as setDevice } from "./config-DlrsduwG.mjs";
3
+ import { _ as stepTimer, c as launchErrorReport, i as formatDuration, l as phaseLine, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-gwpm28fu.mjs";
4
+ import { L as workspaceDevServerMode } from "./project-wM_XFTvE.mjs";
5
+ import { c as pidExists, f as signalProcessTree } from "./metro-DiXtA3Ty.mjs";
6
+ import { En as restartedAppNote, Jt as LAUNCH_FATAL, Xt as RELEASE_VERIFY_WAIT_MS, Yt as LAUNCH_UNVERIFIED, Zt as VERIFY_TIMEOUT_MS, bn as installConflictKind, dn as androidAppProcess, fn as androidDevClientUrl, nn as unverifiedLaunchLines, qt as LAUNCH_BUNDLING, sn as ADB_INSTALL_TIMEOUT_MS, tn as unattributedLaunchLines } from "./budget-Cvwn54qV.mjs";
7
+ import { D as teardownOwnedAvd } from "./workspaces-CpANmBlq.mjs";
8
+ import { p as providerUploadOutcome } from "./build-cache-Dv7RN200.mjs";
9
+ import { $ as resetAdoptedAvd, i as androidDataFreeBytes, it as trimAndroidCaches, u as androidToolCwd } from "./android-C7sVmyI9.mjs";
10
+ import { o as workspaceLinks } from "./stim-desktop-D5OGpYZM.mjs";
11
+ import { n as verifyCollectorOwnership, r as readCollectors } from "./ownership-C5fo5Edb.mjs";
12
+ import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-CbfmNgM6.mjs";
15
13
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
16
- import { i as launchOutcomeRecord } from "./native-runtime-Dg1Q7tfF.mjs";
17
- import { a as PLATFORM, b as noDeviceDiagnostic, h as displayPath, n as LAUNCH_FAILED, r as NO_DEVICE, t as INSTALL_FAILED } from "./support-67vraa1Q.mjs";
18
- import { a as reportAndroidResult, i as persistLastBuild, n as finishAndroidUpload } from "./result-DNiS-tTP.mjs";
14
+ import { c as lostRefusal, s as lostLine, t as DEBUG_VERIFY_STEP_MS } from "./device-lease-run-xJPQ_QQG.mjs";
15
+ import { a as printNativeCrashReport, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-DBWO2rxE.mjs";
16
+ import { i as launchOutcomeRecord } from "./native-runtime-B7KIafpM.mjs";
17
+ import { a as PLATFORM, b as noDeviceDiagnostic, h as displayPath, n as LAUNCH_FAILED, r as NO_DEVICE, t as INSTALL_FAILED } from "./support-yUiOjnVY.mjs";
18
+ import { a as reportAndroidResult, i as persistLastBuild, n as finishAndroidUpload } from "./result-D2Ykz_iD.mjs";
19
19
  import { mkdirSync, openSync, statSync } from "node:fs";
20
20
  import { basename, join } from "node:path";
21
21
  import { ambientEnv } from "@stim-cli/core";
@@ -1,14 +1,14 @@
1
- import { p as process_identity_exports } from "./exec-_UbtCQcG.mjs";
1
+ import { g as process_identity_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
3
- import { K as projectDeviceSlots, _ as loadConfig$1 } from "./config-CYcBF478.mjs";
4
- import { n as pullHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-DL_P5AdN.mjs";
5
- import { l as phaseLine } from "./command-output-B1UrjZHL.mjs";
6
- import { f as readAgentDeviceRecordsAsync, n as agentDeviceLiveness } from "./activity-BzVfHSrY.mjs";
7
- import { l as connectHost } from "./hosted-client-DB_gBPfY.mjs";
8
- import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-DvFX-K_l.mjs";
9
- import "./hosted-macos-QI141yKk.mjs";
10
- import { i as captureWorkspaceCrashes } from "./error-diagnostics-Bf0rZvG9.mjs";
11
- import { watch } from "node:fs";
3
+ import { G as projectDeviceSlots, _ as loadConfig$1 } from "./config-DlrsduwG.mjs";
4
+ import { n as pullHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-FIRx9X2f.mjs";
5
+ import { l as phaseLine } from "./command-output-gwpm28fu.mjs";
6
+ import { f as readAgentDeviceRecordsAsync, n as agentDeviceLiveness, o as envDir } from "./activity-CMLmzp7o.mjs";
7
+ import { l as connectHost } from "./hosted-client-DZAPrcro.mjs";
8
+ import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-Dtw5K2aI.mjs";
9
+ import "./hosted-macos-_awYSpfv.mjs";
10
+ import { i as captureWorkspaceCrashes } from "./error-diagnostics-DBWO2rxE.mjs";
11
+ import { readdirSync, statSync, watch } from "node:fs";
12
12
  import { homedir } from "node:os";
13
13
  import { dirname, join, relative, resolve, sep } from "node:path";
14
14
  import { ambientWrite, configDir } from "@stim-cli/core";
@@ -85,6 +85,142 @@ function createAsyncAgentActionReader$1({ targets, sinceTs, home = homedir(), en
85
85
  };
86
86
  }
87
87
  //#endregion
88
+ //#region src/devices/agent-actions-follow.ts
89
+ function location(root, recursive) {
90
+ let directory = root;
91
+ while (true) {
92
+ try {
93
+ const info = statSync(directory);
94
+ if (info.isDirectory()) return {
95
+ directory,
96
+ identity: `${info.dev}:${info.ino}`,
97
+ recursive: recursive && directory === root
98
+ };
99
+ } catch {}
100
+ const parent = dirname(directory);
101
+ if (parent === directory) throw new Error(`Cannot watch the agent state directory ${root}.`);
102
+ directory = parent;
103
+ }
104
+ }
105
+ function relevant(root, directory, name) {
106
+ if (name === null || directory === root) return true;
107
+ return name.replaceAll("\\", "/").split("/")[0] === relative(directory, root).split(sep)[0];
108
+ }
109
+ function followAgentActions(context, read, onRecord) {
110
+ const home = context.env.HOME ?? homedir();
111
+ const override = context.env.AGENT_DEVICE_STATE_DIR?.trim();
112
+ const workspaces = join(context.home, "workspaces");
113
+ const baseRoots = /* @__PURE__ */ new Map([
114
+ [override ? resolve(override) : join(home, ".agent-device"), true],
115
+ [envDir("AGENT_DEVICE_CLAIMS_DIR", context.env) ?? join(home, ".agent-device", "device-claims"), true],
116
+ [workspaces, false]
117
+ ]);
118
+ let rootCount = baseRoots.size;
119
+ const bindings = /* @__PURE__ */ new Map();
120
+ let stopped = false;
121
+ let reading = false;
122
+ let pending = false;
123
+ let repair;
124
+ let scheduled;
125
+ const refresh = async () => {
126
+ if (stopped) return;
127
+ if (reading) {
128
+ pending = true;
129
+ return;
130
+ }
131
+ reading = true;
132
+ try {
133
+ for (const record of await read()) {
134
+ if (stopped) break;
135
+ onRecord(record);
136
+ }
137
+ } catch {} finally {
138
+ reading = false;
139
+ if (pending) {
140
+ pending = false;
141
+ refresh();
142
+ }
143
+ }
144
+ };
145
+ const scheduleRefresh = () => {
146
+ if (stopped || scheduled !== void 0) return;
147
+ scheduled = setTimeout(() => {
148
+ scheduled = void 0;
149
+ refresh();
150
+ }, 500);
151
+ };
152
+ const reconcile = () => {
153
+ const roots = new Map(baseRoots);
154
+ try {
155
+ for (const entry of readdirSync(workspaces, { withFileTypes: true })) if (entry.isDirectory() || entry.isSymbolicLink()) roots.set(join(workspaces, entry.name, "agent-device"), true);
156
+ } catch {}
157
+ rootCount = roots.size;
158
+ for (const [root, binding] of bindings) {
159
+ if (roots.has(root)) continue;
160
+ bindings.delete(root);
161
+ binding.watcher.close();
162
+ }
163
+ for (const [root, recursive] of roots) {
164
+ let next;
165
+ try {
166
+ next = location(root, recursive);
167
+ } catch {
168
+ continue;
169
+ }
170
+ const current = bindings.get(root);
171
+ if (current?.directory === next.directory && current.identity === next.identity && current.recursive === next.recursive) continue;
172
+ bindings.delete(root);
173
+ current?.watcher.close();
174
+ try {
175
+ const watcher = watch(next.directory, { recursive: next.recursive }, (event, name) => {
176
+ if (stopped || !relevant(root, next.directory, name)) return;
177
+ if (event === "rename" || next.directory !== root) reconcile();
178
+ scheduleRefresh();
179
+ });
180
+ const binding = {
181
+ ...next,
182
+ watcher
183
+ };
184
+ bindings.set(root, binding);
185
+ const lost = () => {
186
+ if (bindings.get(root) !== binding) return;
187
+ bindings.delete(root);
188
+ watcher.close();
189
+ armRepair(500);
190
+ };
191
+ watcher.once("error", lost);
192
+ watcher.once("close", lost);
193
+ } catch {}
194
+ }
195
+ };
196
+ function armRepair(delay) {
197
+ clearTimeout(repair);
198
+ if (stopped) return;
199
+ repair = setTimeout(() => {
200
+ reconcile();
201
+ refresh();
202
+ armRepair(bindings.size < rootCount ? 500 : 1e4);
203
+ }, delay);
204
+ }
205
+ const stop = () => {
206
+ if (stopped) return;
207
+ stopped = true;
208
+ clearTimeout(repair);
209
+ clearTimeout(scheduled);
210
+ for (const { watcher } of bindings.values()) watcher.close();
211
+ bindings.clear();
212
+ context.signal.removeEventListener("abort", stop);
213
+ };
214
+ context.signal.addEventListener("abort", stop, { once: true });
215
+ if (context.signal.aborted) stop();
216
+ else {
217
+ reconcile();
218
+ refresh();
219
+ armRepair(500);
220
+ }
221
+ return stop;
222
+ }
223
+ //#endregion
88
224
  //#region src/device-host/hosted-logs-sync.ts
89
225
  function warn(context, machine, error) {
90
226
  const text = `${warning(machine, error)}\n`;
@@ -325,23 +461,14 @@ async function followWorkspaceLogs(context, options, onRecord, onBackfill) {
325
461
  errorContext: options.errorsOnly ? "field" : void 0
326
462
  });
327
463
  await view.close();
328
- let readingAgent = false;
329
- let stopped = false;
330
- const agentTimer = readAgent ? setInterval(() => {
331
- if (readingAgent || context.signal.aborted) return;
332
- readingAgent = true;
333
- readAgent().then((records) => {
334
- for (const record of records) if (!stopped && !context.signal.aborted && recordMatches(record, criteria)) onRecord(record);
335
- }, () => {}).finally(() => {
336
- readingAgent = false;
337
- });
338
- }, 500) : null;
464
+ const stopAgent = readAgent ? followAgentActions(context, readAgent, (record) => {
465
+ if (recordMatches(record, criteria)) onRecord(record);
466
+ }) : null;
339
467
  const stopHosted = followHostedLogs(context.projectRoot, !hostedReachable, context);
340
468
  const stop = () => {
341
- stopped = true;
342
469
  stopLog();
343
470
  stopHosted();
344
- if (agentTimer) clearInterval(agentTimer);
471
+ stopAgent?.();
345
472
  context.signal.removeEventListener("abort", stop);
346
473
  };
347
474
  context.signal.addEventListener("abort", stop, { once: true });
@@ -349,4 +476,4 @@ async function followWorkspaceLogs(context, options, onRecord, onBackfill) {
349
476
  return stop;
350
477
  }
351
478
  //#endregion
352
- export { followHostedLogs as i, openWorkspaceLogs as n, readWorkspaceLogs as r, followWorkspaceLogs as t };
479
+ export { followAgentActions as a, followHostedLogs as i, openWorkspaceLogs as n, readWorkspaceLogs as r, followWorkspaceLogs as t };
@@ -1,11 +1,11 @@
1
1
  import { m as workspaceLogsDir$1 } from "./paths-DQtTgsBf.mjs";
2
- import { G as parseDeviceSlotOption, _ as loadConfig$1, g as isPathPrefix } from "./config-CYcBF478.mjs";
3
- import { f as refuseNoProject, v as launchErrorPreview } from "./command-output-B1UrjZHL.mjs";
4
- import { r as readWorkspaceState$1 } from "./workspace-state-Cjuigeeu.mjs";
5
- import { n as findCommandWorkspace } from "./project-BZNjmW_8.mjs";
2
+ import { W as parseDeviceSlotOption, _ as loadConfig$1, g as isPathPrefix } from "./config-DlrsduwG.mjs";
3
+ import { f as refuseNoProject, v as launchErrorPreview } from "./command-output-gwpm28fu.mjs";
4
+ import { r as readWorkspaceState$1 } from "./workspace-state-U08dEzhG.mjs";
5
+ import { n as findCommandWorkspace } from "./project-wM_XFTvE.mjs";
6
6
  import { n as SOURCES$1, t as LEVELS$1 } from "./ndjson-CgE_o3Dl.mjs";
7
- import { i as followHostedLogs, n as openWorkspaceLogs } from "./logs-BS00Anxf.mjs";
8
- import { t as errorDiagnostics } from "./error-diagnostics-Bf0rZvG9.mjs";
7
+ import { a as followAgentActions, i as followHostedLogs, n as openWorkspaceLogs } from "./logs-BfwwadsZ.mjs";
8
+ import { t as errorDiagnostics } from "./error-diagnostics-DBWO2rxE.mjs";
9
9
  import { t as watchStdoutReader } from "./stdout-reader-C8yjre1x.mjs";
10
10
  import { realpathSync } from "node:fs";
11
11
  import { relative, sep } from "node:path";
@@ -224,22 +224,15 @@ function logsCommand(program) {
224
224
  onRecord: emit,
225
225
  errorContext: opts.errors ? opts.json ? "field" : "msg" : void 0
226
226
  });
227
- let readingAgent = false;
228
- const agentTimer = readAgent ? setInterval(() => {
229
- if (readingAgent) return;
230
- readingAgent = true;
231
- readAgent().then((actions) => {
232
- for (const record of actions) if (recordMatches(record, criteria)) emit(record);
233
- }, () => {}).finally(() => {
234
- readingAgent = false;
235
- });
236
- }, 500) : null;
227
+ const stopAgent = readAgent ? followAgentActions(context, readAgent, (record) => {
228
+ if (recordMatches(record, criteria)) emit(record);
229
+ }) : null;
237
230
  const stopHosted = followHostedLogs(root, !hostedReachable);
238
231
  const finish = () => {
239
232
  stop();
240
233
  stopHosted?.();
241
234
  stopReader();
242
- if (agentTimer) clearInterval(agentTimer);
235
+ stopAgent?.();
243
236
  process.exit(0);
244
237
  };
245
238
  const stopReader = watchStdoutReader(finish);
@@ -1,2 +1,2 @@
1
- import { n as runMacos, r as waitForLaunchServices, t as macosCommand } from "./macos-C-0qJ6zq.mjs";
1
+ import { n as runMacos, r as waitForLaunchServices, t as macosCommand } from "./macos-NfV2D7dO.mjs";
2
2
  export { macosCommand as default, runMacos, waitForLaunchServices };