stim 1.35.0 → 1.37.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 (167) hide show
  1. package/README.md +3 -1
  2. package/dist/{acquire-artifact-0E_iw7Rf.mjs → acquire-artifact-zBUbPuDP.mjs} +20 -4
  3. package/dist/{act-CyxFP8Vj.mjs → act-BGAFjY8f.mjs} +21 -21
  4. package/dist/{activity-BQpJpAjA.mjs → activity-CdpXXSq2.mjs} +6 -6
  5. package/dist/{agent-device-usage-output-BoOC3ZF9.mjs → agent-device-usage-output-D0582GHy.mjs} +5 -5
  6. package/dist/{android-YRb1UzSy.mjs → android-BBwLpxRh.mjs} +51 -40
  7. package/dist/{android-B2DSKg-A.mjs → android-BPBARZMR.mjs} +2 -2
  8. package/dist/{android-Iq0M2t2d.mjs → android-CGctfYpv.mjs} +7 -7
  9. package/dist/{android-CjcJE7uA.mjs → android-CaSsewbu.mjs} +5 -5
  10. package/dist/android-cas-compiler.mjs +1 -1
  11. package/dist/{android-cas-Dhcjkys1.mjs → android-cas-p8gna03x.mjs} +4 -4
  12. package/dist/{android-image-DFk26aY6.mjs → android-image-DY8KxK2m.mjs} +3 -3
  13. package/dist/{android-project-DhO6el8N.d.mts → android-project-v_1nej_x.d.mts} +3 -1
  14. package/dist/api.d.mts +30 -9
  15. package/dist/api.mjs +36 -28
  16. package/dist/{apk-signed-tail-CPpA-3vu.mjs → apk-signed-tail-BMv-KLcB.mjs} +2 -2
  17. package/dist/{artifact-2NIRz6SC.mjs → artifact-BrNZTZtA.mjs} +44 -15
  18. package/dist/{artifact-BG4h_WTC.mjs → artifact-BsimBWxG.mjs} +37 -15
  19. package/dist/{artifact-platform-DqCWUieN.mjs → artifact-platform-BaGL1i1X.mjs} +1 -1
  20. package/dist/{auto-placement-CBdWa87P.mjs → auto-placement-CFKNrWLU.mjs} +7 -7
  21. package/dist/{browser-web-CNlRugJv.mjs → browser-web-YFsgCP_a.mjs} +15 -15
  22. package/dist/{build-CNE3Wo5-.mjs → build-DIhuoozz.mjs} +77 -28
  23. package/dist/{build-cache-_fkewiwH.mjs → build-cache-Dt-dhCJF.mjs} +6 -6
  24. package/dist/{build-plan-BSgR9yKo.mjs → build-plan-CgnLDof9.mjs} +7 -7
  25. package/dist/{cache-manifest-8JX9S1QJ.mjs → cache-manifest-BO0TIcPV.mjs} +1 -1
  26. package/dist/cache-manifest.mjs +1 -1
  27. package/dist/{cdp-C216kOAn.mjs → cdp-CgT47_9A.mjs} +1 -1
  28. package/dist/{chrome-C8sC5tdl.mjs → chrome-DL5znvmo.mjs} +1 -1
  29. package/dist/{cli-DK24VzHi.mjs → cli-BGUrlSH3.mjs} +21 -20
  30. package/dist/cli.mjs +1 -1
  31. package/dist/{client-Dy0eJJtz.mjs → client-DU6dnGX1.mjs} +7 -7
  32. package/dist/collector-run.mjs +7 -7
  33. package/dist/{command-output-CGxrQ3Bd.mjs → command-output-ByEmIwur.mjs} +1 -1
  34. package/dist/{config-BW0fAtoK.mjs → config-CNmN-ndb.mjs} +61 -12
  35. package/dist/{dependencies-IVl2Ga2D.mjs → dependencies-BozoTBqa.mjs} +102 -64
  36. package/dist/{dependency-state-mL5g4H6K.mjs → dependency-state-BQeC4FVn.mjs} +2 -2
  37. package/dist/{detached-entry-tfrgGVWb.mjs → detached-entry-VqFeEE9W.mjs} +1 -1
  38. package/dist/{dev-client-DDApoVvd.mjs → dev-client-3SQzMRXZ.mjs} +2 -2
  39. package/dist/{device-p_cp8IzW.mjs → device-BIg1iExg.mjs} +11 -11
  40. package/dist/{device-mOFYiHiw.mjs → device-DGMvzoZZ.mjs} +13 -13
  41. package/dist/{device-android-C-biM49_.mjs → device-android-CBat355q.mjs} +9 -9
  42. package/dist/{device-capacity-C0PiTyRb.mjs → device-capacity-DWUOvY13.mjs} +19 -19
  43. package/dist/device-host-worker.mjs +16 -16
  44. package/dist/{device-pool-nsMvt2X2.mjs → device-pool-B8IqZKqm.mjs} +3 -3
  45. package/dist/{device-provision-BYYJuRKZ.mjs → device-provision-DWAoSKEw.mjs} +10 -10
  46. package/dist/{doctor-RosbBfTV.mjs → doctor-Bknt0121.mjs} +24 -24
  47. package/dist/{doctor-BptE4PaK.mjs → doctor-CPzwqcXY.mjs} +15 -15
  48. package/dist/{doctor-BBAb8NLe.mjs → doctor-CxgR5vPi.mjs} +1 -1
  49. package/dist/{doctor-fingerprint-DqWvIhMb.mjs → doctor-fingerprint-Bo4z8YNP.mjs} +1 -1
  50. package/dist/doctor-fingerprint.mjs +1 -1
  51. package/dist/{doctor-watchman-CKOnCINh.mjs → doctor-watchman-CPE4C8KV.mjs} +5 -5
  52. package/dist/{eas-build-BxJdzQnF.mjs → eas-build-CwOXKJwa.mjs} +4 -4
  53. package/dist/{eas-fallback-DU2WDF8r.mjs → eas-fallback-Cnb12a50.mjs} +6 -6
  54. package/dist/{eas-session-ledger-DCUfh6m7.mjs → eas-session-ledger-TE1miVz5.mjs} +6 -6
  55. package/dist/{error-diagnostics-D6wlK-yX.mjs → error-diagnostics-CXTT3bYC.mjs} +10 -10
  56. package/dist/{exec-CGuDzt40.mjs → exec-L37dbiIb.mjs} +7 -1
  57. package/dist/{gc-BUkonUfz.mjs → gc-0jdcnDHs.mjs} +19 -19
  58. package/dist/{gc-CvMEytXz.mjs → gc-1ZLq1djg.mjs} +2 -2
  59. package/dist/{guide-BWozWG7D.mjs → guide-COxIANZu.mjs} +179 -86
  60. package/dist/{hosted-android-y6K3DKQT.mjs → hosted-android-D8JbIzgC.mjs} +4 -4
  61. package/dist/{hosted-client-Bb89P6an.mjs → hosted-client-BLwuXEZS.mjs} +7 -7
  62. package/dist/{hosted-logs-DYPsnWMF.mjs → hosted-logs-BWEQNJx_.mjs} +7 -7
  63. package/dist/{hosted-logs-sync-DfUJ2GpF.mjs → hosted-logs-sync-uWSrH2mf.mjs} +5 -5
  64. package/dist/{hosted-macos-DsEzYVY_.mjs → hosted-macos-BnCYAv1y.mjs} +6 -6
  65. package/dist/{hosted-native-C9xQYYFb.mjs → hosted-native-OBT2sJxn.mjs} +8 -8
  66. package/dist/{ios-Qam0bT9n.mjs → ios-2Qr4_Zu2.mjs} +1 -1
  67. package/dist/{ios-BCKxjpRp.mjs → ios-Bjz7aPLy.mjs} +8 -8
  68. package/dist/{ios-BdZdNsAj.mjs → ios-BveW7qK1.mjs} +16 -6
  69. package/dist/{ios-FhMkDfNC.mjs → ios-CGyx4PA7.mjs} +44 -34
  70. package/dist/{ios-device-DMOnaH5n.mjs → ios-device-ByrDWSpC.mjs} +3 -3
  71. package/dist/{ios-device-DLdEDWJj.mjs → ios-device-ygijU78G.mjs} +1 -1
  72. package/dist/{ios-project-PXBDoaii.mjs → ios-project-XHg87vyQ.mjs} +7 -7
  73. package/dist/{ios-signing-CCFNjjWU.mjs → ios-signing-CRYQ1W42.mjs} +3 -3
  74. package/dist/{ios-state-CWsBysyN.mjs → ios-state-enWc5P6U.mjs} +1 -1
  75. package/dist/{js-swap-07ikLRJJ.mjs → js-swap-C6vl3vEd.mjs} +60 -13
  76. package/dist/{launch-CTq5gBim.mjs → launch-f3RnbFW5.mjs} +48 -28
  77. package/dist/{lightened-DikgC3-S.mjs → lightened-Cdfmo8MO.mjs} +5 -5
  78. package/dist/{logs-YDMfEohb.mjs → logs-DAjxBF3c.mjs} +6 -6
  79. package/dist/{logs-DwI3Rkpf.mjs → logs-x3em2-oI.mjs} +7 -7
  80. package/dist/{macos-BoNM-l6f.mjs → macos-D_LAseN9.mjs} +22 -22
  81. package/dist/{macos-C_e9f5-5.mjs → macos-ZfpWlzBO.mjs} +1 -1
  82. package/dist/macos-run.mjs +1 -1
  83. package/dist/maintenance-run.mjs +6 -6
  84. package/dist/{metro-B5PVz0Wv.mjs → metro-TIQ1Wft-.mjs} +4 -4
  85. package/dist/{metro-request-2LmFpC1z.mjs → metro-request-DcUxyaq8.mjs} +2 -2
  86. package/dist/{named-ports-CA0nB9Yw.mjs → named-ports-BfEMi9bK.mjs} +3 -3
  87. package/dist/{native-android-Mv4YTrVN.mjs → native-android-COOrNDk2.mjs} +18 -18
  88. package/dist/{native-gradle-artifact-inputs-C_TU6wPq.mjs → native-gradle-artifact-inputs-B4Mwydmf.mjs} +5 -5
  89. package/dist/{native-runtime-oDqT4UES.mjs → native-runtime-UxUBU8up.mjs} +6 -6
  90. package/dist/{native-source-ChAGj7R1.mjs → native-source-D2ZfiQ6U.mjs} +1 -1
  91. package/dist/{native-xcode-inputs-DsozghTX.mjs → native-xcode-inputs-DUv7Q3ok.mjs} +3 -3
  92. package/dist/{native-xcode-ios-UXnH9NRY.mjs → native-xcode-ios-DXcteLVi.mjs} +18 -19
  93. package/dist/offload-worker.d.mts +1 -1
  94. package/dist/offload-worker.mjs +22 -22
  95. package/dist/{operation-exec-DKlBcKAL.mjs → operation-exec-DNynwpqO.mjs} +1 -1
  96. package/dist/{ownership-hC7xvvxF.mjs → ownership-CQTg6v1d.mjs} +3 -3
  97. package/dist/{page-Dj8IqvGM.mjs → page-CoN9al_x.mjs} +2 -2
  98. package/dist/{phone-reverses-B9WyCBKQ.mjs → phone-reverses-CHtco460.mjs} +4 -4
  99. package/dist/{placement-log-D0DZLcJk.mjs → placement-log-oQnELAvQ.mjs} +1 -1
  100. package/dist/{plan-placement-DqmLrWoX.mjs → plan-placement-45EOlIG1.mjs} +6 -6
  101. package/dist/{ports-C1_1Qgdy.mjs → ports-DKO7EUNt.mjs} +3 -3
  102. package/dist/{prebuild-BptrXmh_.mjs → prebuild-BKkj3OyL.mjs} +12 -12
  103. package/dist/{project-Dqqj3IkW.mjs → project-BCtQz48d.mjs} +16 -16
  104. package/dist/{pull-request-BpMTNkMB.mjs → pull-request-m8cMZ3aE.mjs} +2 -2
  105. package/dist/pull-requests.mjs +1 -1
  106. package/dist/{react-native-android-Bsm_o4A8.mjs → react-native-android-MI4ktuhL.mjs} +27 -31
  107. package/dist/{react-native-build-BTUcE926.mjs → react-native-build-dixAL2G8.mjs} +9 -9
  108. package/dist/{react-native-doctor-CfsCTKZt.mjs → react-native-doctor-CvkWincj.mjs} +6 -6
  109. package/dist/{react-native-ios-_cK2pjZn.mjs → react-native-ios-DF5otoBR.mjs} +17 -18
  110. package/dist/recorded-build-CGHGCO8m.mjs +76 -0
  111. package/dist/{recordings-AKZfsW2W.mjs → recordings-BcOzqFD1.mjs} +1 -1
  112. package/dist/{registration-DKjJGQ6p.mjs → registration-C-3PDR3X.mjs} +1 -1
  113. package/dist/{reload-DsTMtMDU.mjs → reload-DGWfNFwQ.mjs} +16 -16
  114. package/dist/{reload-CXgce4Yo.mjs → reload-DWxmO9dY.mjs} +1 -1
  115. package/dist/{remote-BsmYHUxH.mjs → remote-CV2jBcLv.mjs} +9 -9
  116. package/dist/remote-DWYGW2f5.mjs +158 -0
  117. package/dist/{result-DK6nTO-M.mjs → result-CWyxwPvZ.mjs} +23 -17
  118. package/dist/{run-N-BbRxnC.mjs → run-FZtMQgrx.mjs} +2 -2
  119. package/dist/{server-bare-BTlICuaX.mjs → server-bare-Ksh1NKeI.mjs} +2 -2
  120. package/dist/{server-command-Cu2w-UjB.mjs → server-command-BO2DIsJV.mjs} +5 -5
  121. package/dist/server-expo-9hQwyLze.mjs +2 -0
  122. package/dist/{server-expo-CjQwxvIi.mjs → server-expo-ZS9_WaNG.mjs} +3 -3
  123. package/dist/{settings-B5IBDfTx.mjs → settings-Ag4pbs0z.mjs} +5 -4
  124. package/dist/{settings-DcmVICCn.mjs → settings-TYrzDh8T.mjs} +2 -2
  125. package/dist/{settings-payload-BoiFMiFq.mjs → settings-payload-CUM0DYwz.mjs} +5 -5
  126. package/dist/{settings-write-B3LzEVwf.mjs → settings-write-D_9_IEx7.mjs} +6 -6
  127. package/dist/settings.schema.json +1 -1
  128. package/dist/{simslim-DKdJx0LL.mjs → simslim-BMgpTRWe.mjs} +2 -2
  129. package/dist/{slot-launch-DsQmPdlg.mjs → slot-launch-DW_29Bmu.mjs} +6 -6
  130. package/dist/{stage-Dqk0qvaI.mjs → stage-_8k8p7uq.mjs} +2 -2
  131. package/dist/{start-GkRBR1e3.mjs → start-CdgtOksb.mjs} +1 -1
  132. package/dist/{start-DIFiT2P5.mjs → start-CzBB5R7N.mjs} +12 -12
  133. package/dist/{state-CtmYTRWm.mjs → state-CfP-ccP8.mjs} +4 -4
  134. package/dist/{state-DSOUqO-o.mjs → state-DsrFh3yv.mjs} +2 -2
  135. package/dist/{stats-Dz08IopP.mjs → stats-BgTyuzib.mjs} +5 -5
  136. package/dist/{stats-report-BVRCqwWA.mjs → stats-report-Ci6TAfFm.mjs} +1 -1
  137. package/dist/{status-DhKv_e8a.mjs → status-Bcdy5eHt.mjs} +24 -24
  138. package/dist/{status-DTFhDnd1.mjs → status-C2PdxK6q.mjs} +1 -1
  139. package/dist/{status-Dost__Vn.mjs → status-C7Zzb-Eh.mjs} +1 -1
  140. package/dist/{status-watch-UecLnPQD.mjs → status-watch-DY0EZcmg.mjs} +5 -5
  141. package/dist/status-worker.mjs +1 -1
  142. package/dist/{stim-desktop-_WTria-r.mjs → stim-desktop-DWGAfaud.mjs} +2 -2
  143. package/dist/{stop-CcZISot5.mjs → stop-CbxsTKyZ.mjs} +5 -5
  144. package/dist/{stop-vRe6TQk5.mjs → stop-CkmBkNyg.mjs} +16 -16
  145. package/dist/{stop-QFOqgICJ.mjs → stop-iGkvEvDn.mjs} +2 -2
  146. package/dist/supervisor-run.mjs +15 -15
  147. package/dist/{support-DW575Dnx.mjs → support-CfYmOdQs.mjs} +76 -38
  148. package/dist/{support-CNqJDBrH.mjs → support-JZ4KRW0C.mjs} +7 -7
  149. package/dist/{swiftpm-artifact-inputs-DQTJTczX.mjs → swiftpm-artifact-inputs-C1rZDRDs.mjs} +4 -4
  150. package/dist/{swiftpm-macos-BKczZ0k9.mjs → swiftpm-macos-DRTjC7Ff.mjs} +11 -11
  151. package/dist/{toolchain-DRQyCvlp.mjs → toolchain-BeD7tbBW.mjs} +73 -9
  152. package/dist/{toolchain-BDlugtoh.mjs → toolchain-CNlKc9pH.mjs} +1 -1
  153. package/dist/trigger-Bp3lruF2.mjs +2 -0
  154. package/dist/{trigger-BtB4kbe0.mjs → trigger-G_gbfIVB.mjs} +2 -2
  155. package/dist/{warm-progress-q11Vdvhh.mjs → warm-progress-CJQ8tk5O.mjs} +6 -6
  156. package/dist/{web-TDWjHUT3.mjs → web-BXbmysa1.mjs} +9 -9
  157. package/dist/web-BcaySU05.mjs +2 -0
  158. package/dist/web-run.mjs +8 -8
  159. package/dist/windows-report.mjs +1 -1
  160. package/dist/{workspace-state-BdZ-QgmB.mjs → workspace-state-DOPXG2Gp.mjs} +3 -3
  161. package/dist/{workspaces-CY3KSdC0.mjs → workspaces-DCzDzydB.mjs} +15 -14
  162. package/dist/{worktree-D6myrQ2H.mjs → worktree-6ngObKkw.mjs} +1 -1
  163. package/dist/{worktree-fKKe8j5M.mjs → worktree-BAC43Kio.mjs} +27 -27
  164. package/package.json +7 -7
  165. package/dist/server-expo-DbSypdNl.mjs +0 -2
  166. package/dist/trigger-D8B7QR0q.mjs +0 -2
  167. package/dist/web-D1m1LKEz.mjs +0 -2
@@ -1,15 +1,15 @@
1
- import { C as operationState, D as ownership_claim_exports, l as cancellableSleep, n as isTimeoutError, p as withWorkspaceProcessLock, r as reportSignal, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { D as workspaceId$1, M as withDirLock$1, k as workspaceLogsDir$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { a as formatElapsed, h as shortUdid, l as phaseLine, r as clockTime } from "./command-output-CGxrQ3Bd.mjs";
4
- import { $ as unconfirmedKeyFinding, F as diagnoseOutcome, G as realIo, H as outdatedServer, I as diagnoseTailscale, J as setupRemedy, Q as notOnTailnetDiagnosis, R as endpoint$1, T as setDevice, U as parseMachine$1, W as reachMachine, X as diagnoseLocalUnreachable, Y as tailscaleStatusAsync, Z as diagnosisFinding, a as clearDevice, d as getConfigDir, dt as deviceSlotKey, et as readHostPermissions, ft as deviceSlotPlatforms, ht as projectDeviceSlots, k as withConfigLockAsync$1, v as loadConfig$1, w as saveConfig, z as findPeer$1 } from "./config-BW0fAtoK.mjs";
5
- import { D as iosSimSlimProfileSetting, E as iosSimSlimDefaultSetting, _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, b as iosProjectDirSetting, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys, x as iosProjectDirSettingError } from "./settings-B5IBDfTx.mjs";
6
- import { Ct as selectParked, bt as parkedMaxSetting, gt as dropParked, ht as adoptParked, xt as readParked } from "./android-Iq0M2t2d.mjs";
1
+ import { C as operationState, D as ownership_claim_exports, l as cancellableSleep, n as isTimeoutError, p as withWorkspaceProcessLock, r as reportSignal, t as getExecutor } from "./exec-L37dbiIb.mjs";
2
+ import { D as workspaceId$1, M as withDirLock$1, k as workspaceLogsDir$1 } from "./workspace-state-DOPXG2Gp.mjs";
3
+ import { a as formatElapsed, h as shortUdid, l as phaseLine, r as clockTime } from "./command-output-ByEmIwur.mjs";
4
+ import { $ as notOnTailnetDiagnosis, A as withConfigLockAsync$1, B as findPeer$1, G as reachMachine, I as diagnoseOutcome, K as realIo, L as diagnoseTailscale, Q as diagnosisFinding, T as setDevice, U as outdatedServer, W as parseMachine$1, X as tailscaleStatusAsync, Y as setupRemedy, Z as diagnoseLocalUnreachable, a as clearDevice, d as getConfigDir, et as unconfirmedKeyFinding, ft as deviceSlotKey, gt as projectDeviceSlots, pt as deviceSlotPlatforms, tt as readHostPermissions, v as loadConfig$1, w as saveConfig, z as endpoint$1 } from "./config-CNmN-ndb.mjs";
5
+ import { D as iosSimSlimProfileSetting, E as iosSimSlimDefaultSetting, _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, b as iosProjectDirSetting, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys, x as iosProjectDirSettingError } from "./settings-Ag4pbs0z.mjs";
6
+ import { Ct as selectParked, bt as parkedMaxSetting, gt as dropParked, ht as adoptParked, xt as readParked } from "./android-CGctfYpv.mjs";
7
7
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
8
- import { _ as withDeviceBootAdmission, _n as APP_READINESS_TIMEOUT_MS, f as runtimeMismatch, g as unknownIosRuntimeRefusal, h as unknownIosDeviceTypeRefusal, l as deviceTypeMismatch, n as DeviceAdmissionRefusal, on as MANIFEST_VERIFY_TIMEOUT_MS, t as DEFAULT_DEVICE_SLOT_WAIT_MS, u as layerNote } from "./device-capacity-C0PiTyRb.mjs";
9
- import { _t as teardownParkedIosSim, ht as teardownOwnedIosSim } from "./workspaces-CY3KSdC0.mjs";
10
- import { J as describeDiagnostic, s as cocoapodsInstall } from "./toolchain-DRQyCvlp.mjs";
11
- import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-BQpJpAjA.mjs";
12
- import { A as springBoardRunning, B as reportMemoryCulprits, C as renameIosSim, D as resolveOwnedIosSim, E as resolveIosCreation, F as hostMemoryPressureAdvice, M as waitForSpringBoard, N as configuredIosSimulatorViewer, P as parseIosSimulatorApp, R as readHostMemoryPressure, S as readSpringBoardPid, T as resetIosPrivacy, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosKeychain, y as parseRuntimeVersion } from "./ios-BdZdNsAj.mjs";
8
+ import { _ as withDeviceBootAdmission, _n as APP_READINESS_TIMEOUT_MS, f as runtimeMismatch, g as unknownIosRuntimeRefusal, h as unknownIosDeviceTypeRefusal, l as deviceTypeMismatch, n as DeviceAdmissionRefusal, on as MANIFEST_VERIFY_TIMEOUT_MS, t as DEFAULT_DEVICE_SLOT_WAIT_MS, u as layerNote } from "./device-capacity-DWUOvY13.mjs";
9
+ import { _t as teardownParkedIosSim, ht as teardownOwnedIosSim } from "./workspaces-DCzDzydB.mjs";
10
+ import { J as describeDiagnostic, s as cocoapodsInstall } from "./toolchain-BeD7tbBW.mjs";
11
+ import { E as releaseRunLease, S as parseLease, T as raiseLease, b as leaseIsExpired, j as takeLease, v as deviceLeasePath, y as fileLeaseIo } from "./activity-CdpXXSq2.mjs";
12
+ import { A as springBoardRunning, B as reportMemoryCulprits, C as renameIosSim, D as resolveOwnedIosSim, E as resolveIosCreation, F as hostMemoryPressureAdvice, M as waitForSpringBoard, N as configuredIosSimulatorViewer, P as parseIosSimulatorApp, R as readHostMemoryPressure, S as readSpringBoardPid, T as resetIosPrivacy, _ as ownedSimName, a as createOwnedIosSim, d as listAllIosSims, f as listAllIosSimsAsync, h as listIosRuntimesAsync, n as bootIosSim, p as listIosDeviceTypesAsync, u as iosSimulatorFailureAdvice, w as resetIosKeychain, y as parseRuntimeVersion } from "./ios-BveW7qK1.mjs";
13
13
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
14
14
  import { releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
15
15
  import { createHash } from "node:crypto";
@@ -17,7 +17,7 @@ import { mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node
17
17
  import { homedir, hostname } from "node:os";
18
18
  import { basename, join } from "node:path";
19
19
  import { LOG_ROTATE_BYTES, ambientContext, ambientEnv, withDirLockAsync } from "@stim-cli/core";
20
- import { MACHINE_CREDENTIALS_VERSION, acceptsShape, automaticMachineEnabled, buildMachinesFile, buildMachinesLock, cannotHost, deviceHostMachinesClaims, deviceHostMachinesFile, deviceHostMachinesLock, isJsonObject, localEndpoint, parseMachine, placementWord, readBuildMachines, readDeviceHostMachines, settingDefinition } from "@stim-cli/core/state";
20
+ import { MACHINE_CREDENTIALS_VERSION, acceptsShape, automaticMachineEnabled, buildMachinesFile, buildMachinesLock, cannotHost, currentTailnet, deviceHostMachinesClaims, deviceHostMachinesFile, deviceHostMachinesLock, isJsonObject, localEndpoint, parseMachine, placementWord, readBuildMachines, readDeviceHostMachines, settingDefinition, wrongTailnet } from "@stim-cli/core/state";
21
21
  import chalk from "chalk";
22
22
  import { InvalidArgumentError } from "commander";
23
23
  import { mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
@@ -81,11 +81,43 @@ async function store(machines, operation) {
81
81
  });
82
82
  else withDirLock$1(deviceHostMachinesLock(), write, options);
83
83
  }
84
+ /** Forgets this machine's hosting credential for `machine`; false when another run holds the credential claim. */
85
+ async function forgetDeviceHostMachine(machine) {
86
+ const claim = tryAcquireClaim({
87
+ root: deviceHostMachinesClaims(),
88
+ mode: "exclusive",
89
+ label: "device-host approval"
90
+ });
91
+ if (!claim.acquired) {
92
+ releaseClaim(claim.pending);
93
+ return false;
94
+ }
95
+ try {
96
+ const credentials = readDeviceHostMachines();
97
+ if (credentials.some((each) => each.machine === machine)) await store(credentials.filter((each) => each.machine !== machine));
98
+ return true;
99
+ } finally {
100
+ releaseClaim(claim.acquired);
101
+ }
102
+ }
103
+ function notOnTailnet(machine, ambiguous, stored, current) {
104
+ const diagnosis = notOnTailnetDiagnosis(machine, ambiguous, stored ? wrongTailnet(stored, current) : null);
105
+ return {
106
+ diagnosis,
107
+ report: {
108
+ machine,
109
+ state: "not-on-tailnet",
110
+ ...stored?.tailnet ? { tailnet: stored.tailnet } : {},
111
+ diagnosis
112
+ }
113
+ };
114
+ }
84
115
  /**
85
- * Reports the device-host approval of each remote machine, separate from its build approval. Only --fix makes a setup
86
- * ticket or forgets credentials; every server key stays pinned.
116
+ * Reports the device-host approval of each remote machine, separate from its build approval. Only `fix` makes a setup
117
+ * ticket, and only `forget`, which defaults to `fix`, forgets the credentials of machines not in `entries`; every
118
+ * server key stays pinned.
87
119
  */
88
- async function inspectDeviceHostMachines({ fix, version = "<version>", tickets = /* @__PURE__ */ new Map(), operation, confirmKey }, io = realIo, entries = configuredMachines()) {
120
+ async function inspectDeviceHostMachines({ fix, forget = fix, version = "<version>", tickets = /* @__PURE__ */ new Map(), operation, confirmKey }, io = realIo, entries = configuredMachines()) {
89
121
  if (entries === null) return {
90
122
  findings: [note$1("Invalid remote.machines setting", "Use a remote object with machines as an array of tailnet names. Existing hosting credentials and pinned keys are preserved.", "Run `stim guide settings` and correct the setting before running doctor again.")],
91
123
  machines: []
@@ -99,7 +131,7 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
99
131
  });
100
132
  const unreadable = () => unavailable("credentials-unavailable", note$1("Hosting credentials are unreadable", `Stim preserves ${deviceHostMachinesFile()} and its pinned keys.`, "Restore the existing file from a trusted backup or restore read access before running doctor again."));
101
133
  if (!entries.length) {
102
- if (!fix) return {
134
+ if (!forget) return {
103
135
  findings: [],
104
136
  machines: []
105
137
  };
@@ -128,7 +160,7 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
128
160
  } catch {
129
161
  return unreadable();
130
162
  }
131
- if (fix) {
163
+ if (forget) {
132
164
  const kept = credentials.filter((each) => entries.includes(each.machine));
133
165
  if (kept.length !== credentials.length) {
134
166
  await store(kept, operation);
@@ -185,15 +217,12 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
185
217
  }
186
218
  const peer = local ? null : findPeer$1(current, parsed.name);
187
219
  if (peer === "missing" || peer === "ambiguous") {
188
- const diagnosis = notOnTailnetDiagnosis(machine, peer === "ambiguous");
189
- inspected.machines.push({
190
- machine,
191
- state: "not-on-tailnet",
192
- diagnosis
193
- });
220
+ const { report, diagnosis } = notOnTailnet(machine, peer === "ambiguous", credentials.find((each) => each.machine === machine), current);
221
+ inspected.machines.push(report);
194
222
  inspected.findings.push(diagnosisFinding("device-host-machine", machine, diagnosis));
195
223
  continue;
196
224
  }
225
+ const signedIn = local ? null : currentTailnet(current);
197
226
  const target = peer ? endpoint$1(peer, parsed.port) : localEndpoint(parsed.name, parsed.port);
198
227
  const dnsName = peer ? { dnsName: peer.dnsName } : {};
199
228
  const nodeRoute = peer ? `${peer.nodeId}:${parsed.port}` : `local:${parsed.name}:${parsed.port}`;
@@ -222,6 +251,7 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
222
251
  access: "device-host",
223
252
  endpoint: target,
224
253
  address: peer?.dnsName ?? parsed.name,
254
+ ...signedIn ? { tailnet: signedIn } : {},
225
255
  credential,
226
256
  other: () => readBuildMachines().find((each) => each.machine === machine),
227
257
  persist: async (next) => {
@@ -249,6 +279,7 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
249
279
  machine,
250
280
  ...dnsName,
251
281
  ...saved?.deviceId ? { deviceId: saved.deviceId } : {},
282
+ ...saved?.tailnet ? { tailnet: saved.tailnet } : {},
252
283
  ...saved ? { requestedAt: saved.requestedAt } : {}
253
284
  };
254
285
  if (outcome.state === "approved") {
@@ -279,7 +310,7 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
279
310
  ...known,
280
311
  state: "not-asked"
281
312
  });
282
- inspected.findings.push(note$1(`Remote machine ${machine} has not approved this machine for device hosting`, "This machine has not asked for hosting access.", "Run `stim doctor --fix` to make a setup ticket and print the command to run there."));
313
+ inspected.findings.push(note$1(`Remote machine ${machine} has not approved this machine for device hosting`, "This machine has not asked for hosting access.", `Run \`stim remote add ${machine}\` to make a setup ticket and print the command to run there.`));
283
314
  continue;
284
315
  }
285
316
  if (outcome.state === "outdated") {
@@ -335,7 +366,7 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
335
366
  ...known,
336
367
  state: outcome.state
337
368
  });
338
- inspected.findings.push(outcome.state === "key-changed" ? note$1(`Remote machine ${machine} answered with a different server key`, "Stim refuses to connect to a stim-server that does not prove it holds the key pinned at approval.", `If that machine or its Stim home was replaced, remove ${machine} from remote.machines, run \`stim doctor --fix\`, then add it back and run \`stim doctor --fix\` again.`) : outcome.state === "lapsed" ? note$1(`Hosting request to ${machine} lapsed`, `${machine} did not approve this machine before its setup ticket expired at ${outcome.credential.expiresAt}.`, "Run `stim doctor --fix` to make a new ticket.") : note$1(`Remote machine ${machine} no longer accepts this machine for device hosting`, `${outcome.reason} The pinned key is preserved.`, "Run `stim doctor --fix` to ask again."));
369
+ inspected.findings.push(outcome.state === "key-changed" ? note$1(`Remote machine ${machine} answered with a different server key`, "Stim refuses to connect to a stim-server that does not prove it holds the key pinned at approval.", `If that machine or its Stim home was replaced, run \`stim remote remove ${machine}\`, then \`stim remote add ${machine}\`.`) : outcome.state === "lapsed" ? note$1(`Hosting request to ${machine} lapsed`, `${machine} did not approve this machine before its setup ticket expired at ${outcome.credential.expiresAt}.`, `Run \`stim remote add ${machine}\` to make a new ticket.`) : note$1(`Remote machine ${machine} no longer accepts this machine for device hosting`, `${outcome.reason} The pinned key is preserved.`, `Run \`stim remote add ${machine}\` to ask again.`));
339
370
  }
340
371
  return inspected;
341
372
  } finally {
@@ -375,6 +406,9 @@ async function updateCredentials(change, operation) {
375
406
  });
376
407
  else withDirLock$1(buildMachinesLock(), write, options);
377
408
  }
409
+ async function forgetBuildMachine(machine) {
410
+ if (readBuildMachines().some((each) => each.machine === machine)) await updateCredentials((credentials) => credentials.filter((each) => each.machine !== machine));
411
+ }
378
412
  function note(title, detail, fix = null) {
379
413
  return {
380
414
  code: "build-machine",
@@ -491,12 +525,15 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
491
525
  };
492
526
  const status = "status" in tailnet ? tailnet.status : {};
493
527
  const peer = local ? null : findPeer$1(status, parsed.name);
528
+ const credential = readBuildMachines().find((each) => each.machine === entry);
529
+ const signedIn = local ? null : currentTailnet(status);
494
530
  if (peer === "missing" || peer === "ambiguous") {
495
- const diagnosis = notOnTailnetDiagnosis(entry, peer === "ambiguous");
531
+ const diagnosis = notOnTailnetDiagnosis(entry, peer === "ambiguous", credential ? wrongTailnet(credential, status) : null);
496
532
  return {
497
533
  report: {
498
534
  machine: entry,
499
535
  state: "not-on-tailnet",
536
+ ...credential?.tailnet ? { tailnet: credential.tailnet } : {},
500
537
  diagnosis
501
538
  },
502
539
  finding: diagnosisFinding("build-machine", entry, diagnosis)
@@ -504,7 +541,6 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
504
541
  }
505
542
  const target = peer ? endpoint$1(peer, parsed.port) : localEndpoint(parsed.name, parsed.port);
506
543
  const address = peer?.dnsName ?? parsed.name;
507
- const credential = readBuildMachines().find((each) => each.machine === entry);
508
544
  const other = () => {
509
545
  try {
510
546
  return readDeviceHostMachines().find((each) => each.machine === entry);
@@ -519,6 +555,7 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
519
555
  access: "build",
520
556
  endpoint: target,
521
557
  address,
558
+ ...signedIn ? { tailnet: signedIn } : {},
522
559
  credential,
523
560
  other,
524
561
  persist,
@@ -541,6 +578,7 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
541
578
  }
542
579
  const paired = {
543
580
  ...known,
581
+ ...outcome.state !== "not-asked" && outcome.credential?.tailnet ? { tailnet: outcome.credential.tailnet } : {},
544
582
  ...outcome.state !== "not-asked" && outcome.credential?.deviceId ? { deviceId: outcome.credential.deviceId } : {},
545
583
  ...outcome.state !== "not-asked" && outcome.credential ? { requestedAt: outcome.credential.requestedAt } : {}
546
584
  };
@@ -550,14 +588,14 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
550
588
  ...known,
551
589
  state: "not-asked"
552
590
  },
553
- finding: note(`Remote machine ${entry} has not approved this machine for builds`, "This machine has not asked it for build access.", "Run `stim doctor --fix` to make a setup ticket and print the command to run there.")
591
+ finding: note(`Remote machine ${entry} has not approved this machine for builds`, "This machine has not asked it for build access.", `Run \`stim remote add ${entry}\` to make a setup ticket and print the command to run there.`)
554
592
  };
555
593
  case "key-changed": return {
556
594
  report: {
557
595
  ...paired,
558
596
  state: "key-changed"
559
597
  },
560
- finding: note(`Remote machine ${entry} answered with a different server key`, `${address} did not prove it holds the stim-server key this machine pinned at approval. Stim does not connect to it.`, `If that machine or its Stim home was replaced, remove ${entry} from remote.machines, run \`stim doctor --fix\` to forget the old pairing, then add it back and run \`stim doctor --fix\` again.`)
598
+ finding: note(`Remote machine ${entry} answered with a different server key`, `${address} did not prove it holds the stim-server key this machine pinned at approval. Stim does not connect to it.`, `If that machine or its Stim home was replaced, run \`stim remote remove ${entry}\` to forget the old pairing, then \`stim remote add ${entry}\`.`)
561
599
  };
562
600
  case "unconfirmed": return {
563
601
  report: {
@@ -580,14 +618,14 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
580
618
  ...paired,
581
619
  state: "lapsed"
582
620
  },
583
- finding: note(`Build request to ${entry} lapsed`, `${entry} did not approve this machine before its setup ticket expired at ${outcome.credential.expiresAt}.`, "Run `stim doctor --fix` to make a new ticket.")
621
+ finding: note(`Build request to ${entry} lapsed`, `${entry} did not approve this machine before its setup ticket expired at ${outcome.credential.expiresAt}.`, `Run \`stim remote add ${entry}\` to make a new ticket.`)
584
622
  };
585
623
  case "revoked": return {
586
624
  report: {
587
625
  ...paired,
588
626
  state: "revoked"
589
627
  },
590
- finding: note(`Remote machine ${entry} no longer accepts this machine for builds`, `${outcome.reason} It was revoked.`, "Run `stim doctor --fix` to ask again.")
628
+ finding: note(`Remote machine ${entry} no longer accepts this machine for builds`, `${outcome.reason} It was revoked.`, `Run \`stim remote add ${entry}\` to ask again.`)
591
629
  };
592
630
  case "outdated": {
593
631
  const outdated = outdatedServer(entry, version, outcome.command);
@@ -662,17 +700,18 @@ async function inspectMachine(entry, tailnet, deviceName, fix, version, tickets,
662
700
  /**
663
701
  * Doctor findings and a report for each `remote.machines` entry. The worker's stim-server key is pinned on first
664
702
  * contact; every later connection must prove it holds that key. With `fix`, makes a setup ticket for a named machine
665
- * this machine holds no pairing for, or that revoked it, and forgets pairings of machines no longer named. With
703
+ * this machine holds no pairing for, or that revoked it. With `forget`, which defaults to `fix`, forgets pairings of
704
+ * machines not in `entries`. With
666
705
  * `check`, each approved machine is asked for one build offer and reports every reason it would not take this
667
706
  * project's build.
668
707
  */
669
- async function inspectBuildMachines({ fix, check = null, version = "<version>", tickets = /* @__PURE__ */ new Map(), operation, confirmKey }, io = realIo, entries = configuredMachines()) {
708
+ async function inspectBuildMachines({ fix, forget = fix, check = null, version = "<version>", tickets = /* @__PURE__ */ new Map(), operation, confirmKey }, io = realIo, entries = configuredMachines()) {
670
709
  if (entries === null) return {
671
710
  findings: [note("Invalid remote.machines setting", "Use a remote object with machines as an array of tailnet names. Existing credentials and pinned keys are preserved.", "Run `stim guide settings` and correct the setting before running doctor again.")],
672
711
  machines: []
673
712
  };
674
713
  const unnamed = (each) => !entries.includes(each.machine);
675
- if (fix && readBuildMachines().some(unnamed)) await updateCredentials((credentials) => credentials.filter((each) => !unnamed(each)), operation);
714
+ if (forget && readBuildMachines().some(unnamed)) await updateCredentials((credentials) => credentials.filter((each) => !unnamed(each)), operation);
676
715
  if (entries.length === 0) return {
677
716
  findings: [],
678
717
  machines: []
@@ -1949,10 +1988,9 @@ function ownedSimFailure(error) {
1949
1988
  function isReleaseConfiguration(configuration) {
1950
1989
  return typeof configuration === "string" && configuration.trim() !== "" && configuration.trim().toLowerCase() !== "debug";
1951
1990
  }
1952
- function simulatorBuildArch({ physical, remoteArch, hostArch, configuration }) {
1991
+ function simulatorBuildArch({ physical, remoteArch, hostArch }) {
1953
1992
  if (physical) return null;
1954
- if (remoteArch) return remoteArch;
1955
- return isReleaseConfiguration(configuration) ? null : hostArch;
1993
+ return remoteArch ?? hostArch;
1956
1994
  }
1957
1995
  function iosProviderRunOptions(configuration, arch) {
1958
1996
  if (arch) return {
@@ -2047,4 +2085,4 @@ function createIosDeviceWaitRun(stats, progress, signal) {
2047
2085
  };
2048
2086
  }
2049
2087
  //#endregion
2050
- export { pairedMachines as $, fingerprintMismatchRemedy as A, DEVICE_BUSY as B, clearIosAdoptionPending as C, OffloadRefusal as D, muteBootedSimulator as E, requireLocalBuild as F, lostLine as G, DEVICE_WAIT_POLL_MS as H, resolveBuildMachine as I, releaseLeaseOnAbort as J, lostRefusal as K, resolveBuildPlacement as L, namedBuildMachine as M, parseBuildMachineOption as N, automaticBuild as O, podsFailedRemedy as P, inspectBuildMachines as Q, workerFailureReason as R, xcodeFailureReport as S, ensureOwnedIosDevice as T, acquireRunLease as U, DEVICE_WAIT_LINE_MS as V, leaseExpiryText as W, waitFlagConflict as X, runLease as Y, waitForDevice as Z, resolveIosWait as _, deviceModelRefusal as a, resolveSimulatorAppFlag as b, iosProjectPathError as c, ownedSimFailure as d, predictedRefusal as et, podAction as f, resolveIosBuildSetup as g, resolveDeviceType as h, deviceLabel as i, missingPackageManagerRemedy as j, buildPlacementSettings as k, iosProviderRunOptions as l, resolveConfiguration as m, buildLogFile as n, hostingMachines as nt, deviceShortName as o, printDiagnostics as p, parseDeviceWait as q, createIosDeviceWaitRun as r, inspectDeviceHostMachines as rt, iosConfigurationSetting as s, appNameFromPath as t, configuredMachines as tt, isReleaseConfiguration as u, resolveRuntime as v, ensureIosBooted as w, simulatorBuildArch as x, resolveSchemeSelection as y, DEBUG_VERIFY_STEP_MS as z };
2088
+ export { inspectBuildMachines as $, fingerprintMismatchRemedy as A, DEVICE_BUSY as B, clearIosAdoptionPending as C, OffloadRefusal as D, muteBootedSimulator as E, requireLocalBuild as F, lostLine as G, DEVICE_WAIT_POLL_MS as H, resolveBuildMachine as I, releaseLeaseOnAbort as J, lostRefusal as K, resolveBuildPlacement as L, namedBuildMachine as M, parseBuildMachineOption as N, automaticBuild as O, podsFailedRemedy as P, forgetBuildMachine as Q, workerFailureReason as R, xcodeFailureReport as S, ensureOwnedIosDevice as T, acquireRunLease as U, DEVICE_WAIT_LINE_MS as V, leaseExpiryText as W, waitFlagConflict as X, runLease as Y, waitForDevice as Z, resolveIosWait as _, deviceModelRefusal as a, inspectDeviceHostMachines as at, resolveSimulatorAppFlag as b, iosProjectPathError as c, ownedSimFailure as d, pairedMachines as et, podAction as f, resolveIosBuildSetup as g, resolveDeviceType as h, deviceLabel as i, hostingMachines as it, missingPackageManagerRemedy as j, buildPlacementSettings as k, iosProviderRunOptions as l, resolveConfiguration as m, buildLogFile as n, configuredMachines as nt, deviceShortName as o, printDiagnostics as p, parseDeviceWait as q, createIosDeviceWaitRun as r, forgetDeviceHostMachine as rt, iosConfigurationSetting as s, appNameFromPath as t, predictedRefusal as tt, isReleaseConfiguration as u, resolveRuntime as v, ensureIosBooted as w, simulatorBuildArch as x, resolveSchemeSelection as y, DEBUG_VERIFY_STEP_MS as z };
@@ -1,10 +1,10 @@
1
- import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { a as killOnAbort } from "./operation-exec-DKlBcKAL.mjs";
3
- import { D as extractEmulatorFailure, E as emulatorProbeSession, O as findBuildTool, Q as pickDefaultSystemImage, T as emulatorFailureRemedy, c as androidPoolNoCandidatesRefusal, et as profileNeedsFoldFeature, j as hostSystemImageArch, l as androidSystemImageAbi, o as androidHome, s as androidPoolCandidates, w as emulatorDiskSpaceRemedy } from "./android-Iq0M2t2d.mjs";
4
- import { m as unknownAndroidSystemImageRefusal, p as unknownAndroidDeviceProfileRefusal, u as layerNote } from "./device-capacity-C0PiTyRb.mjs";
5
- import { Q as pickDevClientScheme } from "./toolchain-DRQyCvlp.mjs";
6
- import { n as decideSystemImage } from "./android-image-DFk26aY6.mjs";
7
- import { t as devClientScheme } from "./dev-client-DDApoVvd.mjs";
1
+ import { t as getExecutor } from "./exec-L37dbiIb.mjs";
2
+ import { a as killOnAbort } from "./operation-exec-DNynwpqO.mjs";
3
+ import { D as extractEmulatorFailure, E as emulatorProbeSession, O as findBuildTool, Q as pickDefaultSystemImage, T as emulatorFailureRemedy, c as androidPoolNoCandidatesRefusal, et as profileNeedsFoldFeature, j as hostSystemImageArch, l as androidSystemImageAbi, o as androidHome, s as androidPoolCandidates, w as emulatorDiskSpaceRemedy } from "./android-CGctfYpv.mjs";
4
+ import { m as unknownAndroidSystemImageRefusal, p as unknownAndroidDeviceProfileRefusal, u as layerNote } from "./device-capacity-DWUOvY13.mjs";
5
+ import { Q as pickDevClientScheme } from "./toolchain-BeD7tbBW.mjs";
6
+ import { n as decideSystemImage } from "./android-image-DY8KxK2m.mjs";
7
+ import { t as devClientScheme } from "./dev-client-3SQzMRXZ.mjs";
8
8
  import { existsSync, readFileSync, readdirSync } from "node:fs";
9
9
  import { relative } from "node:path";
10
10
  //#region src/commands/android/support.ts
@@ -1,8 +1,8 @@
1
- import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { s as gitAsync } from "./operation-exec-DKlBcKAL.mjs";
3
- import { n as buildCacheKey } from "./build-cache-_fkewiwH.mjs";
1
+ import { t as getExecutor } from "./exec-L37dbiIb.mjs";
2
+ import { s as gitAsync } from "./operation-exec-DNynwpqO.mjs";
3
+ import { n as buildCacheKey } from "./build-cache-Dt-dhCJF.mjs";
4
4
  import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
5
- import { a as sourceManifest, r as nativeFileDigest } from "./native-source-ChAGj7R1.mjs";
5
+ import { a as sourceManifest, r as nativeFileDigest } from "./native-source-D2ZfiQ6U.mjs";
6
6
  import { createHash } from "node:crypto";
7
7
  import { join, relative, resolve, sep } from "node:path";
8
8
  import { isJsonObject } from "@stim-cli/core/state";
@@ -1,15 +1,15 @@
1
- import { a as trackReportResource, b as spawnDeclared, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { y as sharedBuildCache } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-B5IBDfTx.mjs";
4
- import { r as register } from "./cache-manifest-8JX9S1QJ.mjs";
5
- import { _t as runCancellationSignal, h as macosToolchainAsync } from "./toolchain-DRQyCvlp.mjs";
6
- import "./build-cache-_fkewiwH.mjs";
1
+ import { a as trackReportResource, b as spawnDeclared, t as getExecutor } from "./exec-L37dbiIb.mjs";
2
+ import { y as sharedBuildCache } from "./workspace-state-DOPXG2Gp.mjs";
3
+ import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-Ag4pbs0z.mjs";
4
+ import { r as register } from "./cache-manifest-BO0TIcPV.mjs";
5
+ import { _t as runCancellationSignal, h as macosToolchainAsync } from "./toolchain-BeD7tbBW.mjs";
6
+ import "./build-cache-Dt-dhCJF.mjs";
7
7
  import { l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
8
- import { r as nativeFileDigest } from "./native-source-ChAGj7R1.mjs";
9
- import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-Dqk0qvaI.mjs";
10
- import { t as validateMacosArtifactPlatform } from "./artifact-platform-DqCWUieN.mjs";
11
- import { t as logLines } from "./run-N-BbRxnC.mjs";
12
- import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-DQTJTczX.mjs";
8
+ import { r as nativeFileDigest } from "./native-source-D2ZfiQ6U.mjs";
9
+ import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-_8k8p7uq.mjs";
10
+ import { t as validateMacosArtifactPlatform } from "./artifact-platform-BaGL1i1X.mjs";
11
+ import { t as logLines } from "./run-FZtMQgrx.mjs";
12
+ import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-C1rZDRDs.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
- import { C as operationState, D as ownership_claim_exports, S as isTermination, _ as declareSpawnsOn, b as spawnDeclared, g as allowDeclaredSpawns, p as withWorkspaceProcessLock, t as getExecutor, v as refuseDeclaredSpawns, x as stopDeclaringSpawnsOn, y as signalDeclaredSpawns } from "./exec-CGuDzt40.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-BdZ-QgmB.mjs";
1
+ import { C as operationState, D as ownership_claim_exports, S as isTermination, _ as declareSpawnsOn, b as spawnDeclared, g as allowDeclaredSpawns, p as withWorkspaceProcessLock, t as getExecutor, v as refuseDeclaredSpawns, x as stopDeclaringSpawnsOn, y as signalDeclaredSpawns } from "./exec-L37dbiIb.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-DOPXG2Gp.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-CGxrQ3Bd.mjs";
5
- import { a as killOnAbort } from "./operation-exec-DKlBcKAL.mjs";
6
- import { o as androidHome } from "./android-Iq0M2t2d.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-ByEmIwur.mjs";
5
+ import { a as killOnAbort } from "./operation-exec-DNynwpqO.mjs";
6
+ import { o as androidHome } from "./android-CGctfYpv.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-CjQwxvIi.mjs";
9
+ import { t as cleanLine } from "./server-expo-ZS9_WaNG.mjs";
10
10
  import { createRequire } from "node:module";
11
11
  import { X509Certificate, createHash } from "node:crypto";
12
12
  import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -719,6 +719,14 @@ function podInstallCommand(root, directory, ...args) {
719
719
  const BUILD_FAILED = "** BUILD FAILED **";
720
720
  const POSITIONED = /^(\S[^\t]*?):(\d+):(?:(\d+):)?\s*(?:fatal\s+)?error:\s+(.+)$/;
721
721
  const UNPOSITIONED = /^(\S[^\t]*?)?\berror:\s+(.+)$/;
722
+ const SCRIPT_WRAPPER = /^error: ([\w.@/-]+) - (.*)$/;
723
+ const XTRACE = /^\++ /;
724
+ const FAILED_COMMANDS = /^The following build commands failed:\s*$/;
725
+ const FAILED_COMMANDS_END = /^\(\d+ failures?\)/;
726
+ const FAILED_PHASE = /^\s+PhaseScriptExecution\s+((?:\\.|\S)+)\s.*\(in target '([^']+)'/;
727
+ const SCRIPT_LINES_KEPT = 40;
728
+ const SCRIPT_DETAIL_MAX = 6;
729
+ const SCRIPT_LINE_MAX = 300;
722
730
  const LD_ERROR = /^ld:\s+(?!warning:)(.+)$/;
723
731
  const UNDEFINED_HEADER = /^(?:ld:\s+)?Undefined symbols?(?:\s+for architecture\s+\S+)?:\s*$/;
724
732
  const UNDEFINED_SYMBOL = /^\s+"?([^",]+)"?,\s+referenced from:\s*$/;
@@ -765,10 +773,28 @@ function makeDiagnostic({ file = null, line = null, column = null, message }, po
765
773
  if (remedy) out.remedy = remedy;
766
774
  return out;
767
775
  }
776
+ function unescape(token) {
777
+ return token.replace(/\\(.)/g, "$1");
778
+ }
768
779
  function dedupeKey(d) {
769
780
  return `${d.file || ""}|${d.line || ""}|${d.column || ""}|${d.message}`;
770
781
  }
782
+ function failureDiagnostics(phases, scriptLines) {
783
+ if (phases.length === 0) return [];
784
+ const anchor = scriptLines.findLastIndex((text) => text.startsWith("error:"));
785
+ const detail = anchor >= 0 ? scriptLines.slice(anchor, anchor + SCRIPT_DETAIL_MAX) : scriptLines.slice(-3);
786
+ return [...phases.map((phase) => ({ message: phase })), ...detail.map((text) => ({ message: text.replace(/^error:\s*/, "") }))];
787
+ }
788
+ /**
789
+ * Reads xcodebuild output line by line. `diagnostics` lists, first, the script phases xcodebuild's
790
+ * `The following build commands failed:` block names and the last error lines the script printed, then the
791
+ * errors found along the way. A script wrapper such as `error: sentry-cli - ` prefixes every line of its
792
+ * output, bash xtrace included; the prefix is removed and the trace lines are dropped.
793
+ */
771
794
  function createXcodeDiagnosticCollector(root = null, sdk = "iphonesimulator", podDirectory = root) {
795
+ const failedPhases = [];
796
+ const scriptLines = [];
797
+ let inFailedCommands = false;
772
798
  const pods = root ? {
773
799
  root,
774
800
  directory: podDirectory ?? root
@@ -783,9 +809,27 @@ function createXcodeDiagnosticCollector(root = null, sdk = "iphonesimulator", po
783
809
  seen.add(key);
784
810
  out.push(d);
785
811
  };
812
+ const pushFailedCommand = (raw) => {
813
+ if (FAILED_COMMANDS.test(raw)) {
814
+ inFailedCommands = true;
815
+ return;
816
+ }
817
+ if (!inFailedCommands) return;
818
+ if (FAILED_COMMANDS_END.test(raw)) {
819
+ inFailedCommands = false;
820
+ return;
821
+ }
822
+ const phase = FAILED_PHASE.exec(raw);
823
+ if (!phase) return;
824
+ const message = `Build phase failed: "${unescape(phase[1] ?? "")}" (target ${phase[2]})`;
825
+ if (!failedPhases.includes(message)) failedPhases.push(message);
826
+ };
786
827
  const push = (line) => {
787
- if (finished) return;
788
- const raw = line.replace(/\r$/, "");
828
+ if (finished) {
829
+ pushFailedCommand(line.replace(/\r$/, ""));
830
+ return;
831
+ }
832
+ let raw = line.replace(/\r$/, "");
789
833
  if (inUndefinedSymbols) {
790
834
  const sym = UNDEFINED_SYMBOL.exec(raw);
791
835
  if (sym) {
@@ -800,6 +844,16 @@ function createXcodeDiagnosticCollector(root = null, sdk = "iphonesimulator", po
800
844
  finished = true;
801
845
  return;
802
846
  }
847
+ const wrapped = SCRIPT_WRAPPER.exec(raw);
848
+ if (wrapped) {
849
+ const text = (wrapped[2] ?? "").trim();
850
+ if (XTRACE.test(text)) return;
851
+ if (text) {
852
+ scriptLines.push(text.length > SCRIPT_LINE_MAX ? `${text.slice(0, 297)}...` : text);
853
+ if (scriptLines.length > SCRIPT_LINES_KEPT) scriptLines.shift();
854
+ }
855
+ raw = text;
856
+ }
803
857
  if (UNDEFINED_HEADER.test(raw)) {
804
858
  inUndefinedSymbols = true;
805
859
  return;
@@ -833,7 +887,17 @@ function createXcodeDiagnosticCollector(root = null, sdk = "iphonesimulator", po
833
887
  };
834
888
  return {
835
889
  push,
836
- diagnostics: out
890
+ get diagnostics() {
891
+ const merged = [];
892
+ const keys = /* @__PURE__ */ new Set();
893
+ for (const d of [...failureDiagnostics(failedPhases, scriptLines), ...out]) {
894
+ const key = dedupeKey(d);
895
+ if (keys.has(key)) continue;
896
+ keys.add(key);
897
+ merged.push(d);
898
+ }
899
+ return merged;
900
+ }
837
901
  };
838
902
  }
839
903
  function capDiagnostics(diagnostics, max = 10) {
@@ -1,2 +1,2 @@
1
- import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-DRQyCvlp.mjs";
1
+ import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-BeD7tbBW.mjs";
2
2
  export { macosToolchain, macosToolchainAsync };
@@ -0,0 +1,2 @@
1
+ import { t as triggerMaintenance } from "./trigger-G_gbfIVB.mjs";
2
+ export { triggerMaintenance };
@@ -1,7 +1,7 @@
1
- import { t as getExecutor } from "./exec-CGuDzt40.mjs";
1
+ import { t as getExecutor } from "./exec-L37dbiIb.mjs";
2
2
  import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
3
3
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
4
- import { n as windowsLauncherArgs } from "./detached-entry-tfrgGVWb.mjs";
4
+ import { n as windowsLauncherArgs } from "./detached-entry-VqFeEE9W.mjs";
5
5
  import { n as stampAttempt, r as due, t as capChildLog } from "./attempt-ClyJlZPT.mjs";
6
6
  import { readClaimSet } from "@stim-cli/core/ownership-claim";
7
7
  import { closeSync, openSync } from "node:fs";
@@ -1,9 +1,9 @@
1
- import { D as ownership_claim_exports, E as debugLog, f as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-CGuDzt40.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-BdZ-QgmB.mjs";
3
- import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-DKlBcKAL.mjs";
4
- import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-B5IBDfTx.mjs";
5
- import { U as ownedAvdDirectory } from "./android-Iq0M2t2d.mjs";
6
- import { s as pullRequestLookups } from "./pull-request-BpMTNkMB.mjs";
1
+ import { D as ownership_claim_exports, E as debugLog, f as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-L37dbiIb.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-DOPXG2Gp.mjs";
3
+ import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-DNynwpqO.mjs";
4
+ import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-Ag4pbs0z.mjs";
5
+ import { U as ownedAvdDirectory } from "./android-CGctfYpv.mjs";
6
+ import { s as pullRequestLookups } from "./pull-request-m8cMZ3aE.mjs";
7
7
  import { clearClaimChild, markClaimChildPending, releaseClaim, setClaimChild, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { existsSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1,12 +1,12 @@
1
- import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-BdZ-QgmB.mjs";
2
- import { f as refuseNoProject, l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
3
- import { D as upsertProject, k as withConfigLockAsync, m as getProject } from "./config-BW0fAtoK.mjs";
4
- import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-B5IBDfTx.mjs";
5
- import { f as projectRegistry, n as findCommandWorkspace } from "./project-Dqqj3IkW.mjs";
6
- import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-_WTria-r.mjs";
7
- import { o as readWebRecord, r as cdpEndpoint } from "./state-CtmYTRWm.mjs";
8
- import { t as liveWebRecord } from "./page-Dj8IqvGM.mjs";
9
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-oDqT4UES.mjs";
1
+ import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-DOPXG2Gp.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-ByEmIwur.mjs";
3
+ import { A as withConfigLockAsync, O as upsertProject, m as getProject } from "./config-CNmN-ndb.mjs";
4
+ import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-Ag4pbs0z.mjs";
5
+ import { f as projectRegistry, n as findCommandWorkspace } from "./project-BCtQz48d.mjs";
6
+ import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-DWGAfaud.mjs";
7
+ import { o as readWebRecord, r as cdpEndpoint } from "./state-CfP-ccP8.mjs";
8
+ import { t as liveWebRecord } from "./page-CoN9al_x.mjs";
9
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-UxUBU8up.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-BXbmysa1.mjs";
2
+ export { webCommand as default, runWeb };
package/dist/web-run.mjs CHANGED
@@ -1,12 +1,12 @@
1
- import { D as ownership_claim_exports, T as process_identity_exports, l as cancellableSleep, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { Dt as recordCreatedDevice } from "./android-Iq0M2t2d.mjs";
3
- import { f as signalProcessTree } from "./metro-B5PVz0Wv.mjs";
1
+ import { D as ownership_claim_exports, T as process_identity_exports, l as cancellableSleep, t as getExecutor } from "./exec-L37dbiIb.mjs";
2
+ import { Dt as recordCreatedDevice } from "./android-CGctfYpv.mjs";
3
+ import { f as signalProcessTree } from "./metro-TIQ1Wft-.mjs";
4
4
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
5
- import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CtmYTRWm.mjs";
6
- import { l as probeWebDrivers } from "./activity-BQpJpAjA.mjs";
7
- import { t as connectOwnedBrowser } from "./cdp-C216kOAn.mjs";
8
- import { t as relaunchWithLogFile } from "./detached-entry-tfrgGVWb.mjs";
9
- import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-C8sC5tdl.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-CfP-ccP8.mjs";
6
+ import { l as probeWebDrivers } from "./activity-CdpXXSq2.mjs";
7
+ import { t as connectOwnedBrowser } from "./cdp-CgT47_9A.mjs";
8
+ import { t as relaunchWithLogFile } from "./detached-entry-VqFeEE9W.mjs";
9
+ import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-DL5znvmo.mjs";
10
10
  import { existsSync, mkdirSync, openSync, realpathSync } from "node:fs";
11
11
  import { isAbsolute, resolve } from "node:path";
12
12
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
@@ -1,4 +1,4 @@
1
- import { t as getExecutor } from "./exec-CGuDzt40.mjs";
1
+ import { t as getExecutor } from "./exec-L37dbiIb.mjs";
2
2
  import { writeFileSync } from "node:fs";
3
3
  //#region bin/windows-report.ts
4
4
  const request = JSON.parse(process.env.STIM_REPORT_CHILD ?? "");
@@ -1,6 +1,6 @@
1
- import { T as process_identity_exports, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { A as writeConfigSetting, h as getProjectSettings, j as writeConfigSettingAsync } from "./config-BW0fAtoK.mjs";
3
- import { lt as workspaceHiddenSetting } from "./settings-B5IBDfTx.mjs";
1
+ import { T as process_identity_exports, t as getExecutor } from "./exec-L37dbiIb.mjs";
2
+ import { M as writeConfigSettingAsync, h as getProjectSettings, j as writeConfigSetting } from "./config-CNmN-ndb.mjs";
3
+ import { lt as workspaceHiddenSetting } from "./settings-Ag4pbs0z.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";