stim 1.20.2 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +141 -8
  2. package/dist/acquire-artifact-Co2k4f7O.mjs +171 -0
  3. package/dist/act-DsuqEkiM.mjs +2801 -0
  4. package/dist/activity-CMLmzp7o.mjs +1397 -0
  5. package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-DUFaTMdd.mjs} +23 -67
  6. package/dist/{android-DCKZrNvV.mjs → android-ByRMUoiJ.mjs} +157 -93
  7. package/dist/{android-Mz_Inn3w.mjs → android-C7sVmyI9.mjs} +299 -116
  8. package/dist/{android-Dlzxshgp.mjs → android-DGkNqa_c.mjs} +5 -5
  9. package/dist/{android-HqP1_vB_.mjs → android-DR5lZ2Az.mjs} +2 -2
  10. package/dist/android-cas-compiler.mjs +2 -2
  11. package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-ngferVq2.mjs} +7 -6
  12. package/dist/android-project-BCAAmMwz.mjs +12 -0
  13. package/dist/android-project-DVWyCbWU.d.mts +391 -0
  14. package/dist/api.d.mts +810 -64
  15. package/dist/api.mjs +782 -1
  16. package/dist/{artifact-HSwkIWEQ.mjs → artifact-8EY8SAPw.mjs} +240 -213
  17. package/dist/{artifact-D3czlUvT.mjs → artifact-DJPy518Y.mjs} +203 -164
  18. package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
  19. package/dist/{browser-web-CA-F1GQo.mjs → browser-web-Bcv99PBM.mjs} +194 -64
  20. package/dist/budget-Cvwn54qV.mjs +9285 -0
  21. package/dist/{build-DYDbfkk5.mjs → build-CabC3G23.mjs} +153 -98
  22. package/dist/build-cache-Dv7RN200.mjs +602 -0
  23. package/dist/build-plan-DUC8Ka9y.mjs +248 -0
  24. package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DSeQjt-Q.mjs} +2 -2
  25. package/dist/cache-manifest.mjs +1 -1
  26. package/dist/{ccache-zdKiYQ3E.mjs → ccache-Btwc36-I.mjs} +10 -9
  27. package/dist/{cdp-Dq_ypAlJ.mjs → cdp-3fwICjzi.mjs} +18 -5
  28. package/dist/{chrome-BnzZMqsR.mjs → chrome-Bbw689-6.mjs} +7 -4
  29. package/dist/{cli-CLP3diBm.mjs → cli-CHZa9Lvk.mjs} +20 -20
  30. package/dist/cli.mjs +1 -1
  31. package/dist/client-OyRoEuSr.mjs +1577 -0
  32. package/dist/collector-run.d.mts +4 -40
  33. package/dist/collector-run.mjs +9 -8
  34. package/dist/{command-output-BTy8hZ0F.mjs → command-output-gwpm28fu.mjs} +1 -1
  35. package/dist/config-DlrsduwG.mjs +955 -0
  36. package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-x9rN6bhs.mjs} +14 -4
  37. package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-1I9KZT1Y.mjs} +20 -5
  38. package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
  39. package/dist/{dev-client-DAWVIGBu.mjs → dev-client-BSDR5h3F.mjs} +2 -2
  40. package/dist/{device-BECOiufl.mjs → device-B-L3Fbxy.mjs} +91 -34
  41. package/dist/device-DklWZLqb.mjs +1068 -0
  42. package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-DK5_EwRS.mjs} +42 -13
  43. package/dist/device-host-worker.mjs +76 -79
  44. package/dist/{device-ios-COSi6oS1.mjs → device-ios-DoB6KFCO.mjs} +77 -51
  45. package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-xJPQ_QQG.mjs} +14 -26
  46. package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-BMkdsefq.mjs} +5 -5
  47. package/dist/{doctor-kfMBnUw6.mjs → doctor-Bo7BXLux.mjs} +271 -320
  48. package/dist/{doctor-CB8oZKCk.mjs → doctor-D5_EzwfA.mjs} +186 -91
  49. package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
  50. package/dist/doctor-fingerprint.mjs +19 -0
  51. package/dist/doctor-thjWAV0z.mjs +2 -0
  52. package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-N2wDotwQ.mjs} +40 -21
  53. package/dist/{eas-build-JyfqyHfC.mjs → eas-build-CwknaQYj.mjs} +53 -20
  54. package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-CSgAulr5.mjs} +41 -214
  55. package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-DlY_serQ.mjs} +230 -11
  56. package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-DBWO2rxE.mjs} +172 -82
  57. package/dist/exec-DEoAhcze.mjs +858 -0
  58. package/dist/exec-DnYc4HGH.d.mts +78 -0
  59. package/dist/{gc-qWOMdnER.mjs → gc-CXxN-4SE.mjs} +1091 -1029
  60. package/dist/gc-DnNDQyaP.mjs +3 -0
  61. package/dist/{guide-G9cAbVAc.mjs → guide-Br0LEfKy.mjs} +1165 -297
  62. package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-B-9f-jkd.mjs} +10 -8
  63. package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DZAPrcro.mjs} +34 -19
  64. package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
  65. package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-FIRx9X2f.mjs} +77 -43
  66. package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-_awYSpfv.mjs} +35 -22
  67. package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-BdzE668-.mjs} +49 -27
  68. package/dist/idle-C4cZ757K.d.mts +24 -0
  69. package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DDg3SdvY.mjs} +11 -10
  70. package/dist/ios-CDvlmUs7.d.mts +24 -0
  71. package/dist/{ios-BwVCF7oA.mjs → ios-Ds1clbIt.mjs} +8 -8
  72. package/dist/{ios-device-D7pi2Sca.mjs → ios-device--h_-8ENa.mjs} +51 -26
  73. package/dist/{ios-device-B5veSDDQ.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
  74. package/dist/{ios-RkW4pnQf.mjs → ios-hcBpnEGk.mjs} +200 -93
  75. package/dist/{ios-Ce7bc7br.mjs → ios-pm4nL6By.mjs} +160 -108
  76. package/dist/{ios-project-K9hY_Jab.mjs → ios-project-CZhKODF3.mjs} +13 -13
  77. package/dist/ios-signing-BtAffm0A.mjs +489 -0
  78. package/dist/{ios-state-CBLe1xYw.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
  79. package/dist/{ios-nOLJGVdy.mjs → ios-xtlRHaeB.mjs} +1 -1
  80. package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Bwhh4S7V.mjs} +30 -25
  81. package/dist/{launch-C3qJ6Agb.mjs → launch-BjxemNpK.mjs} +85 -543
  82. package/dist/{launch-F4sOqAhB.mjs → launch-CCzXlc8r.mjs} +91 -90
  83. package/dist/logs-BfwwadsZ.mjs +479 -0
  84. package/dist/logs-jTS_lHSo.mjs +248 -0
  85. package/dist/{macos-D7uDvO-z.mjs → macos-DVlSSyUg.mjs} +1 -1
  86. package/dist/macos-NfV2D7dO.mjs +694 -0
  87. package/dist/macos-run.mjs +1 -1
  88. package/dist/maintenance-run.mjs +123 -248
  89. package/dist/{metro-DnCEjCxs.mjs → metro-DiXtA3Ty.mjs} +107 -30
  90. package/dist/metro-gateway-CKZqKqx7.mjs +209 -0
  91. package/dist/{named-ports-4WopRPg-.mjs → named-ports-DkEzOfzO.mjs} +42 -90
  92. package/dist/native-android-CqgnOgsT.mjs +645 -0
  93. package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
  94. package/dist/native-gradle-inputs-Dnh84Zbd.mjs +211 -0
  95. package/dist/native-inputs-TRTTTRxt.mjs +91 -0
  96. package/dist/native-run-NwUuxbkg.mjs +276 -0
  97. package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-B7KIafpM.mjs} +11 -9
  98. package/dist/native-source-Y0yLhFyQ.mjs +133 -0
  99. package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-D_VOfFL7.mjs} +26 -18
  100. package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-BYDOHWLN.mjs} +104 -60
  101. package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
  102. package/dist/offload-worker.d.mts +59 -41
  103. package/dist/offload-worker.mjs +478 -115
  104. package/dist/operation-exec-BW0em61G.mjs +171 -0
  105. package/dist/{ownership-DCtw_2IA.mjs → ownership-C5fo5Edb.mjs} +3 -3
  106. package/dist/{page-DRHy329N.mjs → page-DBL2PiUU.mjs} +12 -5
  107. package/dist/paths-BsJMoPP2.mjs +12 -0
  108. package/dist/paths-DQtTgsBf.mjs +42 -0
  109. package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BnGgJRRZ.mjs} +5 -5
  110. package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-DIsMtN-d.mjs} +15 -11
  111. package/dist/{ports-DdSUicVo.mjs → ports-Cy1RkmuQ.mjs} +3 -3
  112. package/dist/prebuild-D4JoEAEs.mjs +484 -0
  113. package/dist/{project-_phNIJfs.mjs → project-wM_XFTvE.mjs} +65 -37
  114. package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-W1IuLXDt.mjs} +102 -20
  115. package/dist/pull-request-eODyIqZF.d.mts +124 -0
  116. package/dist/pull-requests.d.mts +2 -120
  117. package/dist/pull-requests.mjs +2 -2
  118. package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-6OZ7MSM7.mjs} +121 -72
  119. package/dist/{gradle-DSrXb6lG.mjs → react-native-build-Dvd8hC21.mjs} +292 -15
  120. package/dist/react-native-doctor-DsoSF1Y9.mjs +234 -0
  121. package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-4u1Rn-GR.mjs} +71 -39
  122. package/dist/{recordings-D0d5aQt0.mjs → recordings-CQmfzAh7.mjs} +12 -9
  123. package/dist/registration-BcRgF6Ox.mjs +51 -0
  124. package/dist/{reload-C8JhxjSh.mjs → reload-BzkYabB-.mjs} +94 -47
  125. package/dist/reload-D7AVlb8N.mjs +2 -0
  126. package/dist/{remote-BiR6aYjy.mjs → remote-DjGDmlTZ.mjs} +26 -18
  127. package/dist/result-D2Ykz_iD.mjs +435 -0
  128. package/dist/{run-BtPgpKks.mjs → run-DidHghD1.mjs} +5 -5
  129. package/dist/selection-DSMbWEX2.mjs +620 -0
  130. package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CafzuyFB.mjs} +3 -4
  131. package/dist/{server-command-CTtCkmcQ.mjs → server-command-C6QjeupS.mjs} +14 -7
  132. package/dist/{server-expo-DsguMGUF.mjs → server-expo-CrjB29pq.mjs} +54 -11
  133. package/dist/server-expo-D58c9L0M.mjs +2 -0
  134. package/dist/{settings-B717odTD.mjs → settings-C7O8A6ZI.mjs} +309 -119
  135. package/dist/settings-DpR-1Wnn.mjs +114 -0
  136. package/dist/settings-write-CzD60rOD.mjs +360 -0
  137. package/dist/settings.schema.json +176 -16
  138. package/dist/{simslim-CCr3rE-A.mjs → simslim-BNckWpXi.mjs} +14 -12
  139. package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-CbfmNgM6.mjs} +15 -20
  140. package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
  141. package/dist/stage-Bps5oius.mjs +200 -0
  142. package/dist/{start-TXeMmmO2.mjs → start-Br-oxqMD.mjs} +1 -1
  143. package/dist/start-EojN4WFz.mjs +1364 -0
  144. package/dist/{state-D1Icyjlu.mjs → state--smjFSTL.mjs} +55 -13
  145. package/dist/{state-CG_OFoaA.mjs → state-08I3hw3_.mjs} +3 -2
  146. package/dist/{stats-BoY5sEPU.mjs → stats-D3GerlFW.mjs} +7 -13
  147. package/dist/stats-report-BzaPrRm6.mjs +16 -0
  148. package/dist/{status-BTA7kKiQ.mjs → status-BRROykC8.mjs} +7 -5
  149. package/dist/status-EvrK72L2.mjs +2 -0
  150. package/dist/{status-WgFbkRzj.mjs → status-WBDajew2.mjs} +554 -452
  151. package/dist/{status-watch-C23ILtf9.mjs → status-watch-Bg_u-pwR.mjs} +222 -25
  152. package/dist/status-worker.d.mts +1 -0
  153. package/dist/status-worker.mjs +19 -0
  154. package/dist/stim-desktop-D5OGpYZM.mjs +112 -0
  155. package/dist/{stop-DR6VoDIk.mjs → stop-DTZ9uTw3.mjs} +2 -2
  156. package/dist/{stop-DPEhunlw.mjs → stop-Dky10AEJ.mjs} +33 -23
  157. package/dist/{stop-BNmBMi1F.mjs → stop-Mv6W9FAk.mjs} +137 -98
  158. package/dist/supervisor-run.d.mts +8 -17
  159. package/dist/supervisor-run.mjs +56 -28
  160. package/dist/{support-CwjbFs9H.mjs → support-CNioewsd.mjs} +14 -14
  161. package/dist/{support-DMTqj3Hm.mjs → support-yUiOjnVY.mjs} +20 -13
  162. package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
  163. package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
  164. package/dist/toolchain-BY8X8HXx.mjs +2 -0
  165. package/dist/toolchain-DpJMHq0n.mjs +876 -0
  166. package/dist/{trigger-CigAYjeL.mjs → trigger-Cbyc41d_.mjs} +21 -6
  167. package/dist/trigger-yb_nFzPF.mjs +2 -0
  168. package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-CA3TgT3-.mjs} +263 -156
  169. package/dist/web-CZ07gd77.mjs +2 -0
  170. package/dist/{web-BDBMxDpx.mjs → web-DKx6yoFA.mjs} +20 -14
  171. package/dist/web-run.mjs +13 -12
  172. package/dist/windows-report.d.mts +1 -0
  173. package/dist/windows-report.mjs +18 -0
  174. package/dist/windows-report.ps1 +43 -0
  175. package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-U08dEzhG.mjs} +62 -58
  176. package/dist/{workspaces-C36s2jb9.mjs → workspaces-CpANmBlq.mjs} +1723 -1286
  177. package/dist/{worktree-CgvJYJ-Q.mjs → worktree-CHecZ4Oq.mjs} +1097 -547
  178. package/dist/worktree-ZqZVjD9K.mjs +2 -0
  179. package/dist/xcode-BXn9-xYx.mjs +896 -0
  180. package/package.json +7 -5
  181. package/shim/android-audio/Main.java +24 -0
  182. package/shim/android-audio/README.md +17 -0
  183. package/shim/android-audio.jar +0 -0
  184. package/shim/android-optimizations.gradle +7 -5
  185. package/dist/activity-BSV745Kz.mjs +0 -629
  186. package/dist/api-qvOzWyfO.mjs +0 -154
  187. package/dist/api-run.mjs +0 -294
  188. package/dist/app-install-BIKtMfPq.mjs +0 -896
  189. package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
  190. package/dist/budget-f7516Zk0.mjs +0 -4106
  191. package/dist/build-facts-DcLv2HSd.d.mts +0 -111
  192. package/dist/cancellation-C_22VQTH.mjs +0 -24
  193. package/dist/client-qQAaXSUs.mjs +0 -1771
  194. package/dist/config-BYDxlMY3.mjs +0 -562
  195. package/dist/device-DuiPJQSn.mjs +0 -290
  196. package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
  197. package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
  198. package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
  199. package/dist/exec-DqKo9GKJ.mjs +0 -268
  200. package/dist/git-DDfFzkMm.mjs +0 -45
  201. package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
  202. package/dist/logs-BGrEUaEs.mjs +0 -383
  203. package/dist/macos-Ch5VJmcS.mjs +0 -584
  204. package/dist/metro-gateway-CX9Xlkq2.mjs +0 -103
  205. package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
  206. package/dist/native-android-D5qc3-_v.mjs +0 -226
  207. package/dist/native-gradle-inputs-BsLRrl7u.mjs +0 -349
  208. package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
  209. package/dist/plan-C4TjdPsR.mjs +0 -260
  210. package/dist/prebuild-DYbucPXy.mjs +0 -212
  211. package/dist/preview-78a9kR_-.mjs +0 -1011
  212. package/dist/react-native-build-CtCccJtb.mjs +0 -239
  213. package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
  214. package/dist/remote-cache-OyOyVIS3.mjs +0 -526
  215. package/dist/result-CaJg5Iat.mjs +0 -186
  216. package/dist/server-expo-Bigriskl.mjs +0 -2
  217. package/dist/settings-BORNaaCO.mjs +0 -402
  218. package/dist/settings-vk3mJGSm.d.mts +0 -13
  219. package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
  220. package/dist/stage-KNTQopqv.mjs +0 -157
  221. package/dist/start-BWqzODpb.mjs +0 -1116
  222. package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
  223. package/dist/swiftpm-macos-DRNVJWlb.mjs +0 -119
  224. package/dist/tailnet-Dh-qiYzG.mjs +0 -265
  225. package/dist/toolchain-BFkAcstd.mjs +0 -2
  226. package/dist/toolchain-DxSsNssu.mjs +0 -1657
  227. package/dist/trigger-9_USgmxz.mjs +0 -2
  228. package/dist/web-Dq-i3wzJ.mjs +0 -2
  229. package/dist/worktree-DpLdCHga.mjs +0 -2
  230. package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
  231. package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
@@ -1,20 +1,24 @@
1
- import { E as upsertProject, p as getProject } from "./config-BYDxlMY3.mjs";
2
- import { K as resolveProjectSettings, Q as settingShapeErrors, a as SETTING_SHAPE_REMEDY } from "./settings-B717odTD.mjs";
3
- import { i as recordWorkspaceUse, w as workspaceLogsDir } from "./workspace-state-DJt_MMvf.mjs";
4
- import { f as refuseNoProject, l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
5
- import { d as projectRegistry, n as findCommandWorkspace } from "./project-_phNIJfs.mjs";
6
- import { a as workspaceLinks, i as workspaceLinkLine } from "./stim-desktop-BzBN2Em2.mjs";
7
- import { o as readWebRecord, r as cdpEndpoint } from "./state-D1Icyjlu.mjs";
8
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-k8dTIrbK.mjs";
9
- import { t as liveWebRecord } from "./page-DRHy329N.mjs";
1
+ import { m as workspaceLogsDir } from "./paths-DQtTgsBf.mjs";
2
+ import { E as upsertProject, p as getProject } from "./config-DlrsduwG.mjs";
3
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-gwpm28fu.mjs";
4
+ import { i as recordWorkspaceUse } from "./workspace-state-U08dEzhG.mjs";
5
+ import { J as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, et as settingShapeErrors } from "./settings-C7O8A6ZI.mjs";
6
+ import { f as projectRegistry, n as findCommandWorkspace } from "./project-wM_XFTvE.mjs";
7
+ import { o as readWebRecord, r as cdpEndpoint } from "./state--smjFSTL.mjs";
8
+ import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-D5OGpYZM.mjs";
9
+ import { t as liveWebRecord } from "./page-DBL2PiUU.mjs";
10
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-B7KIafpM.mjs";
10
11
  import chalk from "chalk";
11
12
  //#region src/commands/web.ts
12
13
  const printNote = (line) => console.error(line);
13
- async function runWeb({ root, headed, note }) {
14
+ async function runWeb({ root, headed, note, context }) {
14
15
  const startedAt = Date.now();
15
16
  await ensureWorkspaceStorageSafely(root, { note });
16
17
  if (!getProject(root)) upsertProject(root, {});
17
- const { settings } = resolveProjectSettings(root);
18
+ const { settings } = await resolveProjectSettingsAsync(root, context ? {
19
+ env: context.env,
20
+ signal: context.signal
21
+ } : void 0);
18
22
  const [shapeError] = settingShapeErrors(settings);
19
23
  if (shapeError) return {
20
24
  ok: false,
@@ -39,7 +43,8 @@ async function runWeb({ root, headed, note }) {
39
43
  const runtime = (await selected.load()).runtime({
40
44
  settings,
41
45
  headed,
42
- note
46
+ note,
47
+ context
43
48
  });
44
49
  const preparation = await runtime.prepare();
45
50
  if (!preparation.ok) return {
@@ -53,7 +58,8 @@ async function runWeb({ root, headed, note }) {
53
58
  const { url } = prepared;
54
59
  const launch = await runtime.launch(prepared, {
55
60
  root,
56
- note
61
+ note,
62
+ signal: context?.signal
57
63
  });
58
64
  if (!launch.ok) return launch;
59
65
  const { verdict, remedy } = await runtime.verify(prepared, { since: launch.since });
@@ -106,7 +112,7 @@ function webCommand(program) {
106
112
  }
107
113
  const { facts, remedy } = result;
108
114
  if (remedy) printNote(chalk.yellow(phaseLine("launch", remedy)));
109
- const links = workspaceLinks(root, { platform: "web" });
115
+ const links = await workspaceLinks(root, { platform: "web" });
110
116
  if (json) {
111
117
  console.log(JSON.stringify(links ? {
112
118
  ...facts,
package/dist/web-run.mjs CHANGED
@@ -1,19 +1,18 @@
1
- import { j as ownership_claim_exports, k as process_identity_exports } from "./config-BYDxlMY3.mjs";
2
- import { t as getExecutor } from "./exec-DqKo9GKJ.mjs";
3
- import { r as recordCreatedDevice } from "./created-devices-Dzd5C2LF.mjs";
4
- import { d as signalProcessTree } from "./metro-DnCEjCxs.mjs";
5
- import { t as cancellableSleep } from "./cancellation-C_22VQTH.mjs";
6
- import { r as createNdjsonWriter } from "./ndjson-GOnbyvso.mjs";
7
- import { t as relaunchWithLogFile } from "./detached-entry-B9C_zeQC.mjs";
8
- import { _ as removeSingletonFiles, c as webClaimRoot, d as webLogFile, f as webProfileDir, g as liveProfileHolder, h as chromeProcessState, i as clearWebRecord, l as webDir, m as writeWebRecord, n as browserLogFile, s as updateWebRecord } from "./state-D1Icyjlu.mjs";
9
- import { c as probeWebDrivers } from "./activity-BSV745Kz.mjs";
10
- import { t as connectOwnedBrowser } from "./cdp-Dq_ypAlJ.mjs";
11
- import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-BnzZMqsR.mjs";
1
+ import { g as process_identity_exports, t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
+ import { u as cancellableSleep } from "./operation-exec-BW0em61G.mjs";
3
+ import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
4
+ import { f as signalProcessTree } from "./metro-DiXtA3Ty.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--smjFSTL.mjs";
6
+ import { l as probeWebDrivers } from "./activity-CMLmzp7o.mjs";
7
+ import { i as recordCreatedDevice } from "./created-devices-x9rN6bhs.mjs";
8
+ import { t as connectOwnedBrowser } from "./cdp-3fwICjzi.mjs";
9
+ import { t as relaunchWithLogFile } from "./detached-entry-BwNEtIrP.mjs";
10
+ import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-Bbw689-6.mjs";
12
11
  import { existsSync, mkdirSync, openSync, realpathSync } from "node:fs";
13
12
  import { isAbsolute, resolve } from "node:path";
13
+ import { LOG_ROTATE_BYTES } from "@stim-cli/core";
14
14
  import { WEB_VIEWPORTS } from "@stim-cli/core/state";
15
15
  import { fileURLToPath } from "node:url";
16
- import { LOG_ROTATE_BYTES } from "@stim-cli/core";
17
16
  //#region src/web/events.ts
18
17
  const MAX_FRAMES = 20;
19
18
  const CONSOLE_LEVELS = {
@@ -518,6 +517,7 @@ async function runWebSupervisor(options, { onExit = (code) => process.exit(code)
518
517
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
519
518
  ...options.launchId ? { launchId: options.launchId } : {}
520
519
  });
520
+ process.send?.("web-registered", () => {});
521
521
  const fd = openSync(browserLogFile(root), "a");
522
522
  (0, ownership_claim_exports.markClaimChildPending)(claim);
523
523
  chrome = getExecutor().spawn(options.chrome, chromeArgs({
@@ -735,6 +735,7 @@ async function runWebSupervisor(options, { onExit = (code) => process.exit(code)
735
735
  targetId,
736
736
  version
737
737
  });
738
+ process.send?.("web-registered", () => {});
738
739
  log("info", "web_browser_started", `browser supervisor pid ${process.pid} runs ${version} (pid ${pid}) on ${profile}`);
739
740
  connection.send("Page.navigate", { url: options.url }, sessionId).catch((error) => {
740
741
  log("debug", "web_navigation_slow", `Page.navigate did not answer: ${describe(error)}; the page may still load`);
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,18 @@
1
+ import { t as getExecutor } from "./exec-DEoAhcze.mjs";
2
+ //#region bin/windows-report.ts
3
+ const request = JSON.parse(process.env.STIM_REPORT_CHILD ?? "");
4
+ const env = { ...process.env };
5
+ delete env.STIM_REPORT_CHILD;
6
+ const child = getExecutor().spawn(request.file, request.args, {
7
+ stdio: "inherit",
8
+ env
9
+ });
10
+ child.once("error", (error) => {
11
+ console.error(error.message);
12
+ process.exitCode = 1;
13
+ });
14
+ child.once("close", (status) => {
15
+ process.exitCode = status ?? 1;
16
+ });
17
+ //#endregion
18
+ export {};
@@ -0,0 +1,43 @@
1
+ $ErrorActionPreference = 'Stop'
2
+ $assembly = [AppDomain]::CurrentDomain.DefineDynamicAssembly(
3
+ [Reflection.AssemblyName]::new('StimReportJob'), [Reflection.Emit.AssemblyBuilderAccess]::Run)
4
+ $module = $assembly.DefineDynamicModule('StimReportJob')
5
+ $builder = $module.DefineType('StimReportNative', [Reflection.TypeAttributes]'Public, Sealed, Abstract')
6
+ function Define-Native([string]$name, [type]$returns, [type[]]$parameters) {
7
+ $method = $builder.DefinePInvokeMethod($name, 'kernel32.dll',
8
+ [Reflection.MethodAttributes]'Public, Static, PinvokeImpl',
9
+ [Reflection.CallingConventions]::Standard, $returns, $parameters,
10
+ [Runtime.InteropServices.CallingConvention]::Winapi, [Runtime.InteropServices.CharSet]::Unicode)
11
+ $method.SetImplementationFlags([Reflection.MethodImplAttributes]::PreserveSig)
12
+ }
13
+ Define-Native 'CreateJobObjectW' ([IntPtr]) ([type[]]@([IntPtr], [string]))
14
+ Define-Native 'SetInformationJobObject' ([bool]) ([type[]]@([IntPtr], [int], [IntPtr], [uint32]))
15
+ Define-Native 'AssignProcessToJobObject' ([bool]) ([type[]]@([IntPtr], [IntPtr]))
16
+ $native = $builder.CreateType()
17
+ $job = $native::CreateJobObjectW([IntPtr]::Zero, $null)
18
+ if ($job -eq [IntPtr]::Zero) { throw 'Could not create the report process job.' }
19
+ # Win32 JOBOBJECT_EXTENDED_LIMIT_INFORMATION is 144 bytes on 64-bit and 112 on 32-bit;
20
+ # its BasicLimitInformation.LimitFlags field is at offset 16 on both.
21
+ # https://learn.microsoft.com/windows/win32/api/winnt/ns-winnt-jobobject_extended_limit_information
22
+ $size = if ([IntPtr]::Size -eq 8) { 144 } else { 112 }
23
+ $limits = [Runtime.InteropServices.Marshal]::AllocHGlobal($size)
24
+ try {
25
+ [Runtime.InteropServices.Marshal]::Copy([byte[]]::new($size), 0, $limits, $size)
26
+ [Runtime.InteropServices.Marshal]::WriteInt32($limits, 16, 0x2000)
27
+ if (!$native::SetInformationJobObject($job, 9, $limits, $size) -or
28
+ !$native::AssignProcessToJobObject($job, [IntPtr](-1))) {
29
+ throw 'Could not contain the report process job.'
30
+ }
31
+ } finally {
32
+ [Runtime.InteropServices.Marshal]::FreeHGlobal($limits)
33
+ }
34
+ # Child jobs inherit containment; closing the helper's sole job handle kills descendants.
35
+ # https://learn.microsoft.com/windows/win32/procthread/job-objects
36
+ $request = $env:STIM_REPORT_CHILD | ConvertFrom-Json
37
+ $start = [System.Diagnostics.ProcessStartInfo]::new()
38
+ $start.FileName = $request.node
39
+ $start.Arguments = '"' + $request.entry + '"'
40
+ $start.UseShellExecute = $false
41
+ $child = [System.Diagnostics.Process]::Start($start)
42
+ $child.WaitForExit()
43
+ [System.Environment]::Exit($child.ExitCode)
@@ -1,43 +1,12 @@
1
- import { O as writeConfigSetting, k as process_identity_exports, m as getProjectSettings } from "./config-BYDxlMY3.mjs";
2
- import { t as getExecutor } from "./exec-DqKo9GKJ.mjs";
3
- import { it as workspaceHiddenSetting } from "./settings-B717odTD.mjs";
1
+ import { g as process_identity_exports, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
+ import { _ as workspaceStateLock, g as workspaceStateFile$1, n as ensureWorkspaceStorage, r as ensureWorkspaceStorageAsync, v as withDirLock, y as withDirLockAsync } from "./paths-DQtTgsBf.mjs";
3
+ import { A as writeConfigSettingAsync, k as writeConfigSetting, m as getProjectSettings } from "./config-DlrsduwG.mjs";
4
+ import { ot as workspaceHiddenSetting } from "./settings-C7O8A6ZI.mjs";
4
5
  import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
5
- import { dirname, isAbsolute, join, relative } from "node:path";
6
- import { join as join$1, resolve as resolve$1 } from "path";
7
- import { WORKSPACE_AGENT_KEY, emulatorLogFile, isJsonObject, readJsonObject, readWorkspaceState, readWorkspaceState as readWorkspaceState$1, sharedCcache as sharedCcache$1, sharedCompilationCache as sharedCompilationCache$1, supervisorLogFile, supervisorPidFile, workspaceAgentDeviceDir, workspaceDerivedData, workspaceLastUsed, workspaceLogErrorIndex, workspaceLogsDir as workspaceLogsDir$1, workspaceMetadataFile, workspaceStateFile, workspaceStateLock } from "@stim-cli/core/state";
8
- import { buildCacheRoot as sharedBuildCache, ensurePrivateDir, withDirLock as withDirLock$1, workspaceId as workspaceId$1, workspaceName as workspaceName$1, workspaceStateDir as workspaceDir } from "@stim-cli/core";
9
6
  import { homedir } from "node:os";
7
+ import { dirname, isAbsolute, join, relative } from "node:path";
8
+ import { WORKSPACE_AGENT_KEY, isJsonObject, readWorkspaceState, readWorkspaceState as readWorkspaceState$1, workspaceLastUsed } from "@stim-cli/core/state";
10
9
  import { readFile, readdir } from "node:fs/promises";
11
- //#region src/workspace/paths.ts
12
- function ensureWorkspaceStorage(projectRoot) {
13
- const canonicalRoot = resolve$1(projectRoot);
14
- const dir = workspaceDir(canonicalRoot);
15
- const file = workspaceMetadataFile(canonicalRoot);
16
- ensurePrivateDir(dir);
17
- return withDirLock$1(join$1(dir, "metadata.lock"), () => {
18
- if (!existsSync(file)) {
19
- const metadata = {
20
- projectRoot: canonicalRoot,
21
- workspace: workspaceName$1(canonicalRoot),
22
- version: 1
23
- };
24
- const tmp = `${file}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
25
- writeFileSync(tmp, `${JSON.stringify(metadata, null, 2)}\n`);
26
- try {
27
- renameSync(tmp, file);
28
- } catch (error) {
29
- rmSync(tmp, { force: true });
30
- throw error;
31
- }
32
- return dir;
33
- }
34
- if (readJsonObject(file)?.projectRoot === canonicalRoot) return dir;
35
- const error = /* @__PURE__ */ new Error(`Stim workspace collision at ${dir}: its workspace.json does not belong to ${canonicalRoot}.`);
36
- error.code = "STIM_WORKSPACE_COLLISION";
37
- throw error;
38
- });
39
- }
40
- //#endregion
41
10
  //#region src/agent-sessions.ts
42
11
  const TITLE_MAX_LENGTH = 120;
43
12
  const SESSION_ID = /^[A-Za-z0-9._:-]{1,128}$/;
@@ -285,12 +254,21 @@ function attributeAgentSessions(workspaces, sessions, now) {
285
254
  //#endregion
286
255
  //#region src/workspace/workspace-state.ts
287
256
  function withWorkspaceStateLock(root, fn) {
288
- const file = workspaceStateFile(root);
289
- return withDirLock$1(workspaceStateLock(root), fn, { ensureParent: () => {
257
+ const file = workspaceStateFile$1(root);
258
+ return withDirLock(workspaceStateLock(root), fn, { ensureParent: () => {
290
259
  ensureWorkspaceStorage(root);
291
260
  mkdirSync(dirname(file), { recursive: true });
292
261
  } });
293
262
  }
263
+ /** Waits for the workspace state lock asynchronously; the transaction remains synchronous and reentrant. */
264
+ async function withWorkspaceStateLockAsync(root, fn, signal) {
265
+ await ensureWorkspaceStorageAsync(root, signal);
266
+ const file = workspaceStateFile$1(root);
267
+ return withDirLockAsync(workspaceStateLock(root), fn, {
268
+ ensureParent: () => mkdirSync(dirname(file), { recursive: true }),
269
+ signal
270
+ });
271
+ }
294
272
  function writeWorkspaceState(root, patch) {
295
273
  return updateWorkspaceState(root, (state) => ({
296
274
  ...state,
@@ -300,8 +278,12 @@ function writeWorkspaceState(root, patch) {
300
278
  function updateWorkspaceState(root, update) {
301
279
  return withWorkspaceStateLock(root, () => replaceWorkspaceState(root, update(readWorkspaceState(root) ?? {})));
302
280
  }
281
+ /** Updates workspace state atomically after asynchronously acquiring its lock. */
282
+ function updateWorkspaceStateAsync(root, update, signal) {
283
+ return withWorkspaceStateLockAsync(root, () => replaceWorkspaceState(root, update(readWorkspaceState(root) ?? {})), signal);
284
+ }
303
285
  function replaceWorkspaceState(root, state) {
304
- const file = workspaceStateFile(root);
286
+ const file = workspaceStateFile$1(root);
305
287
  mkdirSync(dirname(file), { recursive: true });
306
288
  const tmp = `${file}.tmp-${process.pid}`;
307
289
  writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\n`, { mode: 384 });
@@ -309,10 +291,10 @@ function replaceWorkspaceState(root, state) {
309
291
  return state;
310
292
  }
311
293
  function clearWorkspaceStateKeys(root, keys) {
312
- if (!existsSync(workspaceStateFile(root))) return;
294
+ if (!existsSync(workspaceStateFile$1(root))) return;
313
295
  withWorkspaceStateLock(root, () => {
314
296
  const state = readWorkspaceState(root);
315
- const file = workspaceStateFile(root);
297
+ const file = workspaceStateFile$1(root);
316
298
  if (!state) {
317
299
  try {
318
300
  rmSync(file, { force: true });
@@ -339,7 +321,7 @@ function clearWorkspaceStateKey(root, key, shouldClear) {
339
321
  if (!state || !(key in state)) return true;
340
322
  if (!shouldClear(state[key])) return false;
341
323
  delete state[key];
342
- const file = workspaceStateFile(root);
324
+ const file = workspaceStateFile$1(root);
343
325
  if (Object.keys(state).length === 0) {
344
326
  try {
345
327
  rmSync(file, { force: true });
@@ -354,21 +336,9 @@ function clearWorkspaceStateKey(root, key, shouldClear) {
354
336
  * Records a command's use of the workspace, and the agent session whose shell ran it when there is one, and
355
337
  * clears `workspace.hidden`.
356
338
  */
357
- function recordWorkspaceUse(root, now = /* @__PURE__ */ new Date(), env = process.env) {
358
- const agent = agentFromEnv(env);
359
- let cwd = process.cwd();
339
+ function recordWorkspaceUse(root, now = /* @__PURE__ */ new Date(), env = process.env, commandCwd = process.cwd()) {
360
340
  try {
361
- cwd = realpathSync(cwd);
362
- } catch {}
363
- try {
364
- writeWorkspaceState(root, {
365
- lastUsedAt: now.toISOString(),
366
- ...agent ? { [WORKSPACE_AGENT_KEY]: {
367
- ...agent,
368
- cwd,
369
- lastActiveAt: now.toISOString()
370
- } } : {}
371
- });
341
+ writeWorkspaceState(root, workspaceUsePatch(now, env, commandCwd));
372
342
  } catch {}
373
343
  try {
374
344
  if (workspaceHiddenSetting(getProjectSettings(root))) writeConfigSetting({
@@ -377,5 +347,39 @@ function recordWorkspaceUse(root, now = /* @__PURE__ */ new Date(), env = proces
377
347
  }, "workspace.hidden", void 0);
378
348
  } catch {}
379
349
  }
350
+ /** Records workspace use and clears workspace.hidden after asynchronously acquiring the state and config locks. */
351
+ async function recordWorkspaceUseAsync(root, now = /* @__PURE__ */ new Date(), env = process.env, commandCwd = process.cwd(), signal) {
352
+ signal?.throwIfAborted();
353
+ try {
354
+ const patch = workspaceUsePatch(now, env, commandCwd);
355
+ await updateWorkspaceStateAsync(root, (state) => ({
356
+ ...state,
357
+ ...patch
358
+ }), signal);
359
+ } catch {}
360
+ signal?.throwIfAborted();
361
+ try {
362
+ if (workspaceHiddenSetting(getProjectSettings(root))) await writeConfigSettingAsync({
363
+ scope: "workspace",
364
+ projectPath: root
365
+ }, "workspace.hidden", void 0, signal);
366
+ } catch {}
367
+ signal?.throwIfAborted();
368
+ }
369
+ function workspaceUsePatch(now, env, commandCwd) {
370
+ const agent = agentFromEnv(env);
371
+ let cwd = commandCwd;
372
+ try {
373
+ cwd = realpathSync(cwd);
374
+ } catch {}
375
+ return {
376
+ lastUsedAt: now.toISOString(),
377
+ ...agent ? { [WORKSPACE_AGENT_KEY]: {
378
+ ...agent,
379
+ cwd,
380
+ lastActiveAt: now.toISOString()
381
+ } } : {}
382
+ };
383
+ }
380
384
  //#endregion
381
- export { workspaceLogErrorIndex as C, withDirLock$1 as D, workspaceStateFile as E, workspaceId$1 as S, workspaceName$1 as T, supervisorLogFile as _, updateWorkspaceState as a, workspaceDerivedData as b, writeWorkspaceState as c, discoverAgentSessions as d, emulatorLogFile as f, sharedCompilationCache$1 as g, sharedCcache$1 as h, recordWorkspaceUse as i, agentKey as l, sharedBuildCache as m, clearWorkspaceStateKeys as n, withWorkspaceStateLock as o, ensureWorkspaceStorage as p, readWorkspaceState$1 as r, workspaceLastUsed as s, clearWorkspaceStateKey as t, attributeAgentSessions as u, supervisorPidFile as v, workspaceLogsDir$1 as w, workspaceDir as x, workspaceAgentDeviceDir as y };
385
+ export { recordWorkspaceUseAsync as a, withWorkspaceStateLock as c, writeWorkspaceState as d, agentKey as f, recordWorkspaceUse as i, withWorkspaceStateLockAsync as l, discoverAgentSessions as m, clearWorkspaceStateKeys as n, updateWorkspaceState as o, attributeAgentSessions as p, readWorkspaceState$1 as r, updateWorkspaceStateAsync as s, clearWorkspaceStateKey as t, workspaceLastUsed as u };