stim 1.20.1 → 1.21.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 (217) hide show
  1. package/README.md +94 -11
  2. package/dist/acquire-artifact-CD4lbiWE.mjs +153 -0
  3. package/dist/act-DHAw2A2S.mjs +2667 -0
  4. package/dist/activity-BzVfHSrY.mjs +1376 -0
  5. package/dist/{agent-device-usage-output-VPaOgGaF.mjs → agent-device-usage-output-zh1vhbLp.mjs} +21 -66
  6. package/dist/{android-CZh6ElG5.mjs → android-BEJ8Jpl7.mjs} +3 -3
  7. package/dist/{android-CLbBJ2ve.mjs → android-BLgbNqox.mjs} +128 -79
  8. package/dist/{android-eXfIjKJr.mjs → android-CV_GCELZ.mjs} +5 -5
  9. package/dist/{android-DE8-JfGW.mjs → android-DUYkNF4u.mjs} +188 -106
  10. package/dist/{android-cas-BFpS84v2.mjs → android-cas-Ct5b1xCK.mjs} +7 -6
  11. package/dist/android-cas-compiler.mjs +2 -2
  12. package/dist/android-project-BCAAmMwz.mjs +12 -0
  13. package/dist/api.d.mts +740 -8
  14. package/dist/api.mjs +585 -1
  15. package/dist/{artifact-Ctb2jpw6.mjs → artifact-B8T3S5gi.mjs} +223 -201
  16. package/dist/{artifact-DXk_Fle_.mjs → artifact-DAuZ-FNU.mjs} +158 -148
  17. package/dist/{browser-web-xQWC2RWl.mjs → browser-web-QQzVjz3O.mjs} +28 -26
  18. package/dist/budget-Bs6SxxzO.mjs +9154 -0
  19. package/dist/{build-COBA1tBc.mjs → build-CoPzQRNw.mjs} +144 -101
  20. package/dist/build-cache-DmyR9Zzc.mjs +602 -0
  21. package/dist/build-plan-CaFskB7_.mjs +188 -0
  22. package/dist/{cache-manifest-qA3dT2x2.mjs → cache-manifest-DkkqguoK.mjs} +10 -5
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{ccache-CtbqWxIC.mjs → ccache-BJRZ9pG3.mjs} +10 -9
  25. package/dist/{cdp-Dq_ypAlJ.mjs → cdp-CWmIUMbw.mjs} +18 -5
  26. package/dist/{chrome-Dp2lMLBe.mjs → chrome-B6tfCta1.mjs} +7 -4
  27. package/dist/{cli-sGqlPu1n.mjs → cli-0DYf8QhQ.mjs} +20 -20
  28. package/dist/cli.mjs +1 -1
  29. package/dist/client-B7QVOlCr.d.mts +253 -0
  30. package/dist/client-UXD70ZbM.mjs +1406 -0
  31. package/dist/collector-run.d.mts +4 -39
  32. package/dist/collector-run.mjs +9 -9
  33. package/dist/{command-output-CPDq_90S.mjs → command-output-B1UrjZHL.mjs} +1 -1
  34. package/dist/config-CYcBF478.mjs +949 -0
  35. package/dist/{created-devices-CXBMtoj5.mjs → created-devices-CqeBlrEn.mjs} +3 -3
  36. package/dist/{dependency-state-B2m8eqsS.mjs → dependency-state-BbKQW83h.mjs} +20 -5
  37. package/dist/{detached-entry-BXq4fIl-.mjs → detached-entry-DFRyG1_o.mjs} +1 -1
  38. package/dist/{dev-client-BqYjMIaC.mjs → dev-client-UOeESKm6.mjs} +2 -2
  39. package/dist/device-DCxH7_By.mjs +1068 -0
  40. package/dist/{device-D4DqjSZZ.mjs → device-ExJq8Ei7.mjs} +35 -36
  41. package/dist/{device-capacity-DrwHwR97.mjs → device-capacity-CMlqEcvw.mjs} +43 -14
  42. package/dist/device-host-worker.mjs +65 -62
  43. package/dist/{device-ios-DE8KJd3b.mjs → device-ios-DRUeKaFV.mjs} +49 -49
  44. package/dist/{device-lease-run-Baelt3nc.mjs → device-lease-run-C8raGFoP.mjs} +14 -26
  45. package/dist/{device-pool-DtK9S6AD.mjs → device-pool-DMRpVX9a.mjs} +5 -5
  46. package/dist/doctor-BLHCYxzi.mjs +2 -0
  47. package/dist/{doctor-Dunu3Nv1.mjs → doctor-DTvaDOda.mjs} +317 -344
  48. package/dist/{doctor-DiP9HsIP.mjs → doctor-Dhqebm0q.mjs} +183 -91
  49. package/dist/doctor-fingerprint.mjs +19 -0
  50. package/dist/{doctor-watchman-XJzT8tK-.mjs → doctor-watchman-Cv1F10Kj.mjs} +40 -23
  51. package/dist/{eas-build-0gadvrca.mjs → eas-build-BomfRnFT.mjs} +53 -20
  52. package/dist/{build-plan-CRjAA6Qi.mjs → eas-fallback-DJwZpy0c.mjs} +26 -208
  53. package/dist/{watchman-CqmaGcIb.mjs → eas-session-ledger-op6A54yi.mjs} +229 -11
  54. package/dist/{error-diagnostics-BhQtoLrZ.mjs → error-diagnostics-Bf0rZvG9.mjs} +172 -82
  55. package/dist/exec-H20xSg2T.d.mts +65 -0
  56. package/dist/exec-_UbtCQcG.mjs +750 -0
  57. package/dist/gc-C-WwL0yi.mjs +3 -0
  58. package/dist/{gc-D5cz5G0k.mjs → gc-_-dCXdyL.mjs} +625 -786
  59. package/dist/git-C3iTsJaZ.mjs +73 -0
  60. package/dist/{guide-DakjcoUt.mjs → guide-Yqwt2bd6.mjs} +990 -280
  61. package/dist/{hosted-android-C-D8Dj0_.mjs → hosted-android-Bw-honsd.mjs} +8 -6
  62. package/dist/{hosted-client--hNFgixu.mjs → hosted-client-DB_gBPfY.mjs} +47 -24
  63. package/dist/{hosted-ios-Chx9XQyI.mjs → hosted-ios-CUvOf4Vr.mjs} +1 -1
  64. package/dist/{hosted-logs-Bkz0Hxzh.mjs → hosted-logs-DL_P5AdN.mjs} +77 -43
  65. package/dist/{hosted-macos-ckTjN-0V.mjs → hosted-macos-QI141yKk.mjs} +21 -15
  66. package/dist/{hosted-native-3KXZ5-qn.mjs → hosted-native-Ksyjgzq-.mjs} +31 -20
  67. package/dist/idle-BVeRGroT.d.mts +24 -0
  68. package/dist/{idle-shutdown-DhAUyf5s.mjs → idle-shutdown-DaKmZi0z.mjs} +11 -10
  69. package/dist/{ios-BDBN-xpf.mjs → ios-CQ68hG9s.mjs} +8 -8
  70. package/dist/{ios-o896T9PE.mjs → ios-CpByZy12.mjs} +141 -81
  71. package/dist/{ios-device-B1B14xND.mjs → ios-device-CXGP1bsD.mjs} +1 -1
  72. package/dist/{ios-device-BWHKGaJq.mjs → ios-device-CwFMehUS.mjs} +60 -35
  73. package/dist/{ios-project-BeOXKPt2.mjs → ios-project-WuwwBdvW.mjs} +13 -13
  74. package/dist/{ios-VGvNdsv2.mjs → ios-qNJt4dFm.mjs} +1 -1
  75. package/dist/ios-signing-DTTIChGs.mjs +489 -0
  76. package/dist/{ios-state-BsXMwo5y.mjs → ios-state-DvFX-K_l.mjs} +1 -1
  77. package/dist/{ios-CQ8bHQXB.mjs → ios-ubFsBzwq.mjs} +129 -86
  78. package/dist/{js-swap-Z_mSuRrx.mjs → js-swap-Cc1dttps.mjs} +60 -33
  79. package/dist/{launch-V1zqiOYn.mjs → launch-CD1yVc7U.mjs} +92 -91
  80. package/dist/{launch-BootbMk4.mjs → launch-Zq2mOSDy.mjs} +87 -545
  81. package/dist/logs-BS00Anxf.mjs +352 -0
  82. package/dist/logs-CMm05HxN.mjs +255 -0
  83. package/dist/macos-B65--pPd.mjs +2 -0
  84. package/dist/{macos-D7irBW3A.mjs → macos-C-0qJ6zq.mjs} +244 -215
  85. package/dist/macos-run.mjs +1 -1
  86. package/dist/maintenance-run.mjs +122 -247
  87. package/dist/{metro-_ZIE3Axg.mjs → metro-DEXpIhHC.mjs} +71 -17
  88. package/dist/{metro-gateway-BzlQZQmU.mjs → metro-gateway-BMJNlj3E.mjs} +20 -12
  89. package/dist/{named-ports-O1TIl7tx.mjs → named-ports-BWTzt6mu.mjs} +8 -64
  90. package/dist/native-android-JACyjTZs.mjs +844 -0
  91. package/dist/{native-gradle-inputs-BQnIdAlL.mjs → native-gradle-inputs-Bep9JcSF.mjs} +128 -147
  92. package/dist/native-inputs-TRTTTRxt.mjs +91 -0
  93. package/dist/native-run-DY_RLx3C.mjs +277 -0
  94. package/dist/{native-runtime-D024BAvm.mjs → native-runtime-Dg1Q7tfF.mjs} +10 -10
  95. package/dist/{native-xcode-inputs-UElfGs59.mjs → native-xcode-inputs-CB2iQeWq.mjs} +28 -20
  96. package/dist/{native-xcode-ios-CjS-nDVY.mjs → native-xcode-ios-CXX39F7o.mjs} +96 -47
  97. package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
  98. package/dist/offload-worker.d.mts +1 -46
  99. package/dist/offload-worker.mjs +213 -86
  100. package/dist/{ownership-BrjepDiv.mjs → ownership-DEmM5vhh.mjs} +3 -3
  101. package/dist/{page-Bv9s2KwY.mjs → page-CPaHeYqj.mjs} +7 -4
  102. package/dist/paths-BsJMoPP2.mjs +12 -0
  103. package/dist/paths-DQtTgsBf.mjs +42 -0
  104. package/dist/{placement-log-BItXET1x.mjs → placement-log-BqGbTa61.mjs} +5 -5
  105. package/dist/{plan-placement-B466UYMU.mjs → plan-placement-Bwj-IjY1.mjs} +6 -6
  106. package/dist/{ports-BFRL6JTj.mjs → ports-D-MmCTdv.mjs} +3 -3
  107. package/dist/prebuild-uD_ipCxF.mjs +449 -0
  108. package/dist/{project-DX8fXyw_.mjs → project-BZNjmW_8.mjs} +65 -38
  109. package/dist/{pull-request-vOhLNmIb.mjs → pull-request-Lfetn8Kr.mjs} +5 -18
  110. package/dist/pull-request-zjCSAryH.d.mts +120 -0
  111. package/dist/pull-requests.d.mts +1 -119
  112. package/dist/pull-requests.mjs +1 -1
  113. package/dist/{react-native-android-CuXM3QS8.mjs → react-native-android-DuzH0cn3.mjs} +83 -53
  114. package/dist/{gradle-CZZo1TSA.mjs → react-native-build-rhk4smwQ.mjs} +292 -15
  115. package/dist/react-native-doctor-CQpuIMso.mjs +234 -0
  116. package/dist/{react-native-ios-DtVO4qf2.mjs → react-native-ios-Bhq1rJeV.mjs} +46 -28
  117. package/dist/{recordings-Bk-VivUV.mjs → recordings-DYteQSu4.mjs} +12 -9
  118. package/dist/{reload-D9V7D8gP.mjs → reload-CmTRFJaX.mjs} +95 -49
  119. package/dist/reload-DzjSl5P_.mjs +2 -0
  120. package/dist/{remote-CZiTijxG.mjs → remote-ByYkXdGD.mjs} +15 -10
  121. package/dist/result-DNiS-tTP.mjs +434 -0
  122. package/dist/{run-ClC8UVB5.mjs → run-D23HmJMs.mjs} +4 -5
  123. package/dist/selection-CSl9i5qU.mjs +619 -0
  124. package/dist/{server-bare-dWjAarki.mjs → server-bare-CxTrvDg8.mjs} +3 -4
  125. package/dist/{server-command-DnJYLnr4.mjs → server-command-CtzloH3v.mjs} +14 -7
  126. package/dist/server-expo-C-90EhcG.mjs +2 -0
  127. package/dist/{server-expo-CUuzP9Mp.mjs → server-expo-DT_F_uVI.mjs} +51 -15
  128. package/dist/{settings-Bbztm4oV.mjs → settings-CsJDEXgK.mjs} +301 -132
  129. package/dist/{settings-vk3mJGSm.d.mts → settings-DkdmlelE.d.mts} +6 -4
  130. package/dist/settings-T1gtc3bf.mjs +114 -0
  131. package/dist/settings-write-HyVZ8eQ8.mjs +359 -0
  132. package/dist/settings.schema.json +163 -16
  133. package/dist/{simslim-ChMfe8rg.mjs → simslim-Cgk17SXV.mjs} +14 -13
  134. package/dist/{slot-launch-CeCRr6MK.mjs → slot-launch-DF8VfT64.mjs} +15 -20
  135. package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
  136. package/dist/stage-BIS0ydsV.mjs +183 -0
  137. package/dist/{start-CRkG-mZ7.mjs → start-7lpH7hmN.mjs} +66 -48
  138. package/dist/{start-mh6bS27z.mjs → start-RChynRDp.mjs} +1 -1
  139. package/dist/{state-lqxdOH_g.mjs → state-C4ZtUisW.mjs} +41 -14
  140. package/dist/{state-BUpAmt2r.mjs → state-XMziexv2.mjs} +3 -2
  141. package/dist/{stats-CaB1MxMi.mjs → stats-53T7OTb9.mjs} +7 -13
  142. package/dist/stats-report-BFfMpWWF.mjs +16 -0
  143. package/dist/{status-C7vzkInu.mjs → status-BL7jVyAB.mjs} +538 -467
  144. package/dist/status-CSi6tlRq.mjs +2 -0
  145. package/dist/{status-BDGHwkCs.mjs → status-DqEUSSxs.mjs} +6 -4
  146. package/dist/{status-watch-ZaVqRdtW.mjs → status-watch-GDCfqpTE.mjs} +187 -22
  147. package/dist/status-worker.d.mts +1 -0
  148. package/dist/status-worker.mjs +19 -0
  149. package/dist/stim-desktop-C12we7lz.mjs +112 -0
  150. package/dist/{stop-BU7JaFCg.mjs → stop-Bk_1qiV6.mjs} +2 -2
  151. package/dist/{stop-BO80KJoT.mjs → stop-CPzlM1L-.mjs} +138 -99
  152. package/dist/{stop-Cftw_sXJ.mjs → stop-D7h6jAXQ.mjs} +11 -10
  153. package/dist/supervisor-run.d.mts +8 -17
  154. package/dist/supervisor-run.mjs +63 -28
  155. package/dist/{support-Ca6PZbpr.mjs → support-67vraa1Q.mjs} +18 -11
  156. package/dist/{support-Co0wk8Cv.mjs → support-Dlu37g6H.mjs} +12 -12
  157. package/dist/{swiftpm-macos-siFSkmCO.mjs → swiftpm-macos-p8WZbxKU.mjs} +35 -24
  158. package/dist/toolchain-DhKwp9iI.mjs +2 -0
  159. package/dist/toolchain-Hp9sCpK4.mjs +873 -0
  160. package/dist/{trigger-C0MWBi8O.mjs → trigger-BAahxUPq.mjs} +20 -5
  161. package/dist/trigger-Bf3uDcpv.mjs +2 -0
  162. package/dist/{warm-progress-5FAXkXIg.mjs → warm-progress-BHX5r0Ei.mjs} +252 -176
  163. package/dist/{web-BTjzE8mc.mjs → web-CJmIj6AI.mjs} +18 -13
  164. package/dist/web-DknQETPs.mjs +2 -0
  165. package/dist/web-run.mjs +16 -17
  166. package/dist/windows-report.d.mts +1 -0
  167. package/dist/windows-report.mjs +18 -0
  168. package/dist/windows-report.ps1 +43 -0
  169. package/dist/workspace-process-lock-1_1OoVW5.mjs +57 -0
  170. package/dist/{workspace-state-CvgTFe-h.mjs → workspace-state-Cjuigeeu.mjs} +70 -56
  171. package/dist/{workspaces-C4kqIOlx.mjs → workspaces-BccMFmGQ.mjs} +1188 -1080
  172. package/dist/worktree-CK2MpJW5.mjs +2 -0
  173. package/dist/{worktree-DtRsh6go.mjs → worktree-DQ6Zi2Mv.mjs} +368 -110
  174. package/dist/xcode-Zlx3qjEs.mjs +896 -0
  175. package/package.json +7 -5
  176. package/shim/android-optimizations.gradle +7 -5
  177. package/dist/activity-BaMpUQ4-.mjs +0 -629
  178. package/dist/api-run.mjs +0 -296
  179. package/dist/api-zuX3ynYN.mjs +0 -154
  180. package/dist/app-install-Cg9YJy3x.mjs +0 -873
  181. package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
  182. package/dist/budget-RFbwFpG5.mjs +0 -4109
  183. package/dist/build-facts-DcLv2HSd.d.mts +0 -111
  184. package/dist/client-zqjFd79D.mjs +0 -1779
  185. package/dist/config-D0LhTY3S.mjs +0 -524
  186. package/dist/device-BgNj-qVj.mjs +0 -290
  187. package/dist/device-lease-C309csaB.mjs +0 -1228
  188. package/dist/device-remote-DjsNw8DD.mjs +0 -1272
  189. package/dist/eas-session-ledger-DJDeL4Uq.mjs +0 -205
  190. package/dist/exec-B81Qodjn.mjs +0 -254
  191. package/dist/launch-verify-Dl78EVgR.mjs +0 -428
  192. package/dist/logs-Bh4eqCCc.mjs +0 -384
  193. package/dist/macos-kivF8qKz.mjs +0 -2
  194. package/dist/miss-reason-SuTptY-I.mjs +0 -238
  195. package/dist/native-android-D94RlJ-X.mjs +0 -226
  196. package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
  197. package/dist/plan-Jwu_vr-F.mjs +0 -260
  198. package/dist/prebuild-DB_zLOLc.mjs +0 -213
  199. package/dist/preview-BRLFRhTz.mjs +0 -1004
  200. package/dist/process-identity-Biv3arCO.mjs +0 -40
  201. package/dist/react-native-build-JUF31S8U.mjs +0 -239
  202. package/dist/react-native-doctor-BQHqiXaQ.mjs +0 -78
  203. package/dist/remote-cache-fxcl5C-L.mjs +0 -526
  204. package/dist/result-BrfgXtdO.mjs +0 -186
  205. package/dist/server-expo-Dvkd7JcF.mjs +0 -2
  206. package/dist/settings-BuKMOANA.mjs +0 -402
  207. package/dist/spawn-claims-Kqiifsk2.mjs +0 -72
  208. package/dist/stage-BNKKdDNc.mjs +0 -157
  209. package/dist/stim-desktop-8GQX2OV8.mjs +0 -63
  210. package/dist/tailnet-D7-tE_ug.mjs +0 -265
  211. package/dist/toolchain-B12psPA2.mjs +0 -2
  212. package/dist/toolchain-SqehyPLw.mjs +0 -1657
  213. package/dist/trigger-SHLOWJ4O.mjs +0 -2
  214. package/dist/web-CHN5gh34.mjs +0 -2
  215. package/dist/worktree-Cgnm6vZt.mjs +0 -2
  216. package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
  217. package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
@@ -1,384 +0,0 @@
1
- import { t as process_identity_exports } from "./process-identity-Biv3arCO.mjs";
2
- import { H as projectDeviceSlots, V as parseDeviceSlotOption, _ as loadConfig$1, g as isPathPrefix } from "./config-D0LhTY3S.mjs";
3
- import { r as readWorkspaceState$1, w as workspaceLogsDir$1 } from "./workspace-state-CvgTFe-h.mjs";
4
- import { f as refuseNoProject, l as phaseLine, v as launchErrorPreview } from "./command-output-CPDq_90S.mjs";
5
- import { n as findCommandWorkspace } from "./project-DX8fXyw_.mjs";
6
- import { n as SOURCES, t as LEVELS } from "./ndjson-GOnbyvso.mjs";
7
- import { n as agentDeviceLiveness, u as readAgentDeviceRecords } from "./activity-BaMpUQ4-.mjs";
8
- import { s as connectHost } from "./hosted-client--hNFgixu.mjs";
9
- import { n as pullHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-Bkz0Hxzh.mjs";
10
- import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-BsXMwo5y.mjs";
11
- import { i as captureWorkspaceCrashes, t as errorDiagnostics } from "./error-diagnostics-BhQtoLrZ.mjs";
12
- import "./hosted-macos-ckTjN-0V.mjs";
13
- import { t as watchStdoutReader } from "./stdout-reader-C8yjre1x.mjs";
14
- import { realpathSync } from "node:fs";
15
- import { dirname, join, relative, resolve, sep } from "node:path";
16
- import { agentDeviceStateDirs, buildCriteria, compileGrep, createAgentActionReader, fileSizes, followLogs, logFiles, parseSince, queryJsonLogs, queryLogs, readLogRecords, readMacosRecord, recordMatches, sortByTs } from "@stim-cli/core/state";
17
- import { homedir } from "node:os";
18
- import chalk from "chalk";
19
- //#region src/devices/agent-actions.ts
20
- function workspaceAgentTargets(project, macos) {
21
- const targets = [];
22
- if (macos?.app && macos.bundleId) targets.push({
23
- platform: "macos",
24
- id: macos.launchId,
25
- slot: "default",
26
- bundleId: macos.bundleId,
27
- launchedAt: macos.app.startedAtMicros / 1e3
28
- });
29
- let slots;
30
- try {
31
- slots = projectDeviceSlots(project);
32
- } catch {
33
- return [];
34
- }
35
- for (const { slot, platforms } of slots) {
36
- const { ios, android } = platforms;
37
- if (ios?.owned && typeof ios.deviceUdid === "string") targets.push({
38
- platform: "ios",
39
- id: ios.deviceUdid,
40
- slot
41
- });
42
- if (android?.owned && typeof android.consolePort === "number" && typeof android.avdName === "string") targets.push({
43
- platform: "android",
44
- id: `emulator-${android.consolePort}`,
45
- slot,
46
- name: android.avdName
47
- });
48
- }
49
- return targets;
50
- }
51
- function canonicalDir(path) {
52
- try {
53
- return realpathSync(path);
54
- } catch {
55
- return resolve(path);
56
- }
57
- }
58
- function createAgentActionReader$1({ targets, sinceTs, home = homedir(), now, startOf = process_identity_exports.inspectProcessStart }) {
59
- let claimed;
60
- const read = createAgentActionReader({
61
- sessionsDirs: () => agentDeviceStateDirs(home).map((root) => join(root, "sessions")),
62
- targets,
63
- sinceTs,
64
- now,
65
- claimedDevice: (session, sessionsDir) => {
66
- const byId = claimed ? /* @__PURE__ */ new Map() : new Map((typeof targets === "function" ? targets() : targets).map((target) => [target.id, target]));
67
- claimed ??= new Map(readAgentDeviceRecords(home).filter((record) => record.kind === "claim" && record.session && record.deviceId).filter((record) => {
68
- const target = byId.get(record.deviceId);
69
- return target?.platform !== "macos" && (target?.name === void 0 || target.name === record.deviceName);
70
- }).filter((record) => agentDeviceLiveness(record, startOf) === "live").map((record) => [`${record.stateDir ? canonicalDir(record.stateDir) : ""}\0${record.session}`, record.deviceId]));
71
- return claimed.get(`${canonicalDir(dirname(sessionsDir))}\0${session}`) ?? claimed.get(`\0${session}`) ?? null;
72
- }
73
- });
74
- return () => {
75
- claimed = void 0;
76
- return read();
77
- };
78
- }
79
- //#endregion
80
- //#region src/device-host/hosted-logs-sync.ts
81
- function warning(machine, error) {
82
- const message = error.message.replace(/\.$/, "");
83
- const hint = message.includes("refused device-host.logs.query") ? ` If ${machine} runs an older stim-server, update it.` : "";
84
- return phaseLine("device", `Could not read the app's logs from ${machine}: ${message}. Showing the logs already copied here.${hint}`);
85
- }
86
- async function syncHostedMacosLogs(root, placement, slot, warnings, platform = "ios") {
87
- let host;
88
- try {
89
- host = await connectHost(placement.machine);
90
- if (slot !== void 0) await pullHostedNativeLogs(root, slot, placement, host, false, platform);
91
- else await pullHostedMacosLogs(root, placement, host);
92
- return true;
93
- } catch (error) {
94
- if (!warnings?.has(placement.machine)) {
95
- process.stderr.write(`${warning(placement.machine, error)}\n`);
96
- warnings?.add(placement.machine);
97
- }
98
- return false;
99
- } finally {
100
- host?.connection.close();
101
- }
102
- }
103
- function followHostedMacosLogs(root, { failing = false, intervalMs = 500, retryMs = 5e3, slot, platform = "ios" } = {}) {
104
- let host;
105
- let retryAt = 0;
106
- let stopped = false;
107
- let running = false;
108
- const tick = async () => {
109
- if (running || stopped || Date.now() < retryAt) return;
110
- running = true;
111
- try {
112
- const placement = slot !== void 0 ? (platform === "ios" ? readHostedIos(root) : readHostedAndroid(root))[slot] : readMacosRecord(root)?.host;
113
- if (!placement) {
114
- host?.connection.close();
115
- host = void 0;
116
- return;
117
- }
118
- host ??= await connectHost(placement.machine);
119
- if (slot !== void 0) await pullHostedNativeLogs(root, slot, placement, host, false, platform);
120
- else await pullHostedMacosLogs(root, placement, host);
121
- failing = false;
122
- } catch (error) {
123
- host?.connection.close();
124
- host = void 0;
125
- if (!failing) process.stderr.write(`${warning((slot !== void 0 ? (platform === "ios" ? readHostedIos(root) : readHostedAndroid(root))[slot] : readMacosRecord(root)?.host)?.machine ?? "the host", error)}\n`);
126
- failing = true;
127
- retryAt = Date.now() + retryMs;
128
- } finally {
129
- running = false;
130
- }
131
- };
132
- const timer = setInterval(() => void tick(), intervalMs);
133
- return () => {
134
- stopped = true;
135
- clearInterval(timer);
136
- host?.connection.close();
137
- };
138
- }
139
- async function syncHostedLogs(root) {
140
- const macos = readMacosRecord(root)?.host;
141
- const warnings = /* @__PURE__ */ new Set();
142
- return (await Promise.all([
143
- ...macos ? [syncHostedMacosLogs(root, macos)] : [],
144
- ...Object.entries(readHostedIos(root)).map(([slot, placement]) => syncHostedMacosLogs(root, placement, slot, warnings)),
145
- ...Object.entries(readHostedAndroid(root)).map(([slot, placement]) => syncHostedMacosLogs(root, placement, slot, warnings, "android"))
146
- ])).every(Boolean);
147
- }
148
- function followHostedLogs(root, failing) {
149
- const stops = /* @__PURE__ */ new Map();
150
- const refresh = () => {
151
- if (readMacosRecord(root)?.host && !stops.has("macos")) stops.set("macos", followHostedMacosLogs(root, { failing }));
152
- for (const platform of ["ios", "android"]) for (const slot of Object.keys(platform === "ios" ? readHostedIos(root) : readHostedAndroid(root))) {
153
- const key = `${platform}:${slot}`;
154
- if (!stops.has(key)) stops.set(key, followHostedMacosLogs(root, {
155
- failing,
156
- slot,
157
- platform
158
- }));
159
- }
160
- };
161
- refresh();
162
- const timer = setInterval(refresh, 500);
163
- return () => {
164
- clearInterval(timer);
165
- for (const stop of stops.values()) stop();
166
- };
167
- }
168
- //#endregion
169
- //#region src/commands/logs.ts
170
- const LEVEL_WIDTH = 5;
171
- const SRC_WIDTH = 6;
172
- const INDENT = " ";
173
- function padTimePart(value, width = 2) {
174
- return String(value).padStart(width, "0");
175
- }
176
- function formatTime(ts) {
177
- if (typeof ts !== "number" || !Number.isFinite(ts)) return "--:--:--.---";
178
- const d = new Date(ts);
179
- return `${padTimePart(d.getHours())}:${padTimePart(d.getMinutes())}:${padTimePart(d.getSeconds())}.${padTimePart(d.getMilliseconds(), 3)}`;
180
- }
181
- function formatStackFrame(frame) {
182
- if (!frame || typeof frame !== "object") return null;
183
- const where = [
184
- frame.file,
185
- frame.line,
186
- frame.column
187
- ].filter((p) => p !== void 0 && p !== null && p !== "").join(":");
188
- if (frame.fn && where) return `at ${frame.fn} (${where})`;
189
- if (frame.fn) return `at ${frame.fn}`;
190
- if (where) return `at ${where}`;
191
- return null;
192
- }
193
- function formatRecord(record, { paint } = {}) {
194
- const colour = paint || ((t) => t);
195
- const level = String(record?.level ?? "").padEnd(LEVEL_WIDTH);
196
- const src = String(record?.src ?? "").padEnd(SRC_WIDTH);
197
- const [first, ...rest] = (record?.msg === void 0 || record?.msg === null ? "" : String(record.msg)).split("\n");
198
- const lines = [`${formatTime(record?.ts)} ${colour(level)} ${src} ${first}`];
199
- for (const line of rest) lines.push(`${INDENT}${line}`);
200
- for (const frame of Array.isArray(record?.stack) ? record.stack : []) {
201
- const rendered = formatStackFrame(frame);
202
- if (rendered) lines.push(`${INDENT}${rendered}`);
203
- }
204
- return lines.join("\n");
205
- }
206
- function parseTail(value) {
207
- if (typeof value === "number" && Number.isInteger(value) && value >= 0) return { n: value };
208
- if (typeof value !== "string" || !/^\d+$/.test(value.trim())) return { error: `Invalid --tail value ${JSON.stringify(value)}. Use a non-negative whole number, e.g. --tail 50.` };
209
- return { n: parseInt(value.trim(), 10) };
210
- }
211
- function validateSources(sources) {
212
- if (sources === void 0 || sources === null) return { sources: void 0 };
213
- const list = Array.isArray(sources) ? sources : [sources];
214
- if (list.includes("all")) return { sources: [...SOURCES] };
215
- const unknown = list.filter((s) => !SOURCES.includes(s));
216
- if (unknown.length > 0) return { error: `Unknown --source value(s): ${unknown.join(", ")}. Use one or more of: ${SOURCES.join(", ")}, or all.` };
217
- return { sources: list };
218
- }
219
- function validateLevel(level) {
220
- if (LEVELS.includes(level)) return { level };
221
- return { error: `Invalid --level value ${JSON.stringify(level)}. Use one of: ${LEVELS.join(", ")}.` };
222
- }
223
- const ERRORS_PRINT_CAP = 20;
224
- function nearestRegisteredLogsProject(root, candidates) {
225
- return candidates.filter((candidate) => candidate !== root && isPathPrefix(root, candidate)).toSorted((a, b) => {
226
- const depth = (path) => relative(root, path).split(sep).length;
227
- return depth(a) - depth(b) || a.length - b.length || a.localeCompare(b);
228
- })[0] ?? null;
229
- }
230
- function registeredDescendantWithLogs(root) {
231
- const candidates = Object.keys(loadConfig$1()?.projects ?? {}).flatMap((path) => {
232
- try {
233
- const canonical = realpathSync(path);
234
- return logFiles(workspaceLogsDir$1(canonical)).length > 0 ? [canonical] : [];
235
- } catch {
236
- return [];
237
- }
238
- });
239
- return nearestRegisteredLogsProject(root, [...new Set(candidates)]);
240
- }
241
- function requireLogsWorkspace(root, dir) {
242
- if (logFiles(dir).length > 0) return;
243
- const descendant = registeredDescendantWithLogs(root);
244
- fail(`STIM_NO_PROJECT: No Stim workspace has run in ${root}.${descendant ? ` The nearest registered app with logs is ${descendant}; run this command from there.` : " Run `stim start`, `stim ios`, or `stim android` in the app first."}`);
245
- }
246
- const LEVEL_COLOURS = {
247
- debug: chalk.dim,
248
- info: chalk.reset,
249
- warn: chalk.yellow,
250
- error: chalk.red,
251
- fatal: chalk.bgRed
252
- };
253
- function logsCommand(program) {
254
- program.command("logs").description("Query this workspace's merged NDJSON log timeline (bundler, client, device, build, agent actions, maintenance). Prints and exits; an existing timeline with nothing matching is a successful, empty result. Use --follow to stream.").option("--slot <name>", "Only this device slot's records, plus the shared Metro and app client records once it has launched", parseDeviceSlotOption).option("--source <s...>", "Only these sources: metro, client, device, build, agent, maintenance, placement, or all").option("--level <l>", `Minimum level: ${LEVELS.join(", ")}`).option("--since <d>", "Only records newer than this, e.g. 30s, 5m, 2h").option("--grep <re>", "Only records whose message matches this regular expression").option("--tail <n>", "Only the last n matching records").option("--errors", "Errors and fatals since the last marker, from metro, client and build, plus confirmed native app-crash reports and stim web browser errors. Add --source maintenance for maintenance failures, or --source device or --source all for general device errors.").option("--follow", "Keep streaming new records until interrupted").option("--json", "Emit the raw records, one per line (valid NDJSON; zero matches is zero bytes, exit 0)").action(async (opts) => {
255
- const root = findCommandWorkspace(process.cwd());
256
- if (!root) {
257
- refuseNoProject({ json: false });
258
- return;
259
- }
260
- const dir = workspaceLogsDir$1(root);
261
- let sources;
262
- if (opts.source !== void 0) {
263
- const checked = validateSources(opts.source);
264
- if (checked.error) fail(checked.error);
265
- sources = checked.sources;
266
- }
267
- let minLevel;
268
- if (opts.level !== void 0) {
269
- const checked = validateLevel(opts.level);
270
- if (checked.error) fail(checked.error);
271
- minLevel = checked.level;
272
- }
273
- if (opts.since !== void 0) {
274
- const parsed = parseSince(opts.since);
275
- if (parsed.error) fail(parsed.error);
276
- }
277
- let tail;
278
- if (opts.tail !== void 0) {
279
- const parsed = parseTail(opts.tail);
280
- if (parsed.error) fail(parsed.error);
281
- tail = parsed.n;
282
- }
283
- if (opts.grep !== void 0) {
284
- const compiled = compileGrep(opts.grep);
285
- if (compiled.error) fail(compiled.error);
286
- }
287
- requireLogsWorkspace(root, dir);
288
- const hostedReachable = await syncHostedLogs(root);
289
- const query = {
290
- slot: opts.slot,
291
- dir,
292
- sources,
293
- minLevel,
294
- since: opts.since,
295
- grep: opts.grep,
296
- tail,
297
- errorsOnly: Boolean(opts.errors),
298
- errorContext: Boolean(opts.errors && !opts.json && !opts.follow)
299
- };
300
- const emit = (record) => {
301
- if (opts.json) {
302
- console.log(JSON.stringify(record));
303
- return;
304
- }
305
- const rendered = {
306
- ...record,
307
- msg: launchErrorPreview([record], root, { full: true }).join("\n"),
308
- stack: void 0
309
- };
310
- console.log(formatRecord(rendered, { paint: record?.level ? LEVEL_COLOURS[record.level] : void 0 }));
311
- };
312
- const captured = captureWorkspaceCrashes(root, dir);
313
- const offsets = opts.follow ? fileSizes(dir) : null;
314
- const workspaceTimeline = opts.follow ? readLogRecords(dir) : captured;
315
- const agentSince = workspaceTimeline[0]?.ts ?? (opts.follow ? Date.now() : void 0);
316
- const project = loadConfig$1()?.projects?.[root];
317
- const readAgent = (sources ? sources.includes("agent") : !opts.errors) && agentSince !== void 0 ? createAgentActionReader$1({
318
- targets: () => workspaceAgentTargets(project, readMacosRecord(root)),
319
- sinceTs: agentSince
320
- }) : null;
321
- const timeline = readAgent ? sortByTs([...workspaceTimeline, ...readAgent()]) : workspaceTimeline;
322
- const rawRecords = (opts.json ? queryJsonLogs : queryLogs)({
323
- ...query,
324
- records: timeline
325
- });
326
- const supervisorPort = readWorkspaceState$1(root)?.supervisor?.port;
327
- const records = opts.json ? rawRecords : await errorDiagnostics(rawRecords, {
328
- root,
329
- logsDir: dir,
330
- port: typeof supervisorPort === "number" ? supervisorPort : null,
331
- allowRequest: true,
332
- timeline
333
- });
334
- const errorCount = records.filter((record) => record.errorContext !== true).length;
335
- let seenErrors = 0;
336
- const capped = opts.errors && !opts.json && tail === void 0 && errorCount > 20 ? records.filter((record) => {
337
- if (record.errorContext === true) return seenErrors <= 20;
338
- seenErrors += 1;
339
- return seenErrors <= 20;
340
- }) : records;
341
- for (const record of capped) emit(record);
342
- const hidden = errorCount - capped.filter((record) => record.errorContext !== true).length;
343
- if (hidden > 0) console.log(chalk.dim(`Showing 20 of ${errorCount} matching error records; ${hidden} not shown. Add --tail ${rawRecords.length} to include all captured records before grouping, or --json for raw records. Stacks are shown in full.`));
344
- if (!opts.follow) {
345
- if (records.length === 0 && !opts.json) console.error(chalk.dim(`No matching log records in ${dir}`));
346
- return;
347
- }
348
- const criteria = buildCriteria({
349
- slot: opts.slot,
350
- sources,
351
- minLevel,
352
- since: opts.since,
353
- grep: opts.grep,
354
- errorsOnly: Boolean(opts.errors)
355
- });
356
- const stop = followLogs({
357
- dir,
358
- offsets,
359
- criteria,
360
- onRecord: emit,
361
- errorContext: opts.errors ? opts.json ? "field" : "msg" : void 0
362
- });
363
- const agentTimer = readAgent ? setInterval(() => {
364
- for (const record of readAgent()) if (recordMatches(record, criteria)) emit(record);
365
- }, 500) : null;
366
- const stopHosted = followHostedLogs(root, !hostedReachable);
367
- const finish = () => {
368
- stop();
369
- stopHosted?.();
370
- stopReader();
371
- if (agentTimer) clearInterval(agentTimer);
372
- process.exit(0);
373
- };
374
- const stopReader = watchStdoutReader(finish);
375
- process.on("SIGINT", finish);
376
- process.on("SIGTERM", finish);
377
- });
378
- }
379
- function fail(message) {
380
- console.error(chalk.red(message));
381
- process.exit(1);
382
- }
383
- //#endregion
384
- export { ERRORS_PRINT_CAP, logsCommand as default, formatRecord, formatStackFrame, formatTime, parseTail, validateLevel, validateSources };
@@ -1,2 +0,0 @@
1
- import { n as runMacos, t as macosCommand } from "./macos-D7irBW3A.mjs";
2
- export { macosCommand as default, runMacos };
@@ -1,238 +0,0 @@
1
- import { ht as gitCommonDirOnDisk } from "./settings-Bbztm4oV.mjs";
2
- import { C as diffFingerprintSources, I as storedSources } from "./device-lease-C309csaB.mjs";
3
- import { m as sharedBuildCache } from "./workspace-state-CvgTFe-h.mjs";
4
- import { existsSync, realpathSync } from "node:fs";
5
- import { dirname, join, relative } from "node:path";
6
- import { LAST_BUILD_KEYS, loadConfig, readWorkspaceState } from "@stim-cli/core/state";
7
- import * as expoFingerprint from "@expo/fingerprint";
8
- //#region src/cache/miss-reason.ts
9
- const MISS_CHANGE_CAP = 20;
10
- function recordedBuilds(state, platform) {
11
- const builds = [];
12
- for (const value of [state?.[LAST_BUILD_KEYS[platform]], state?.lastBuild]) {
13
- const record = value;
14
- if (record?.platform !== platform) continue;
15
- const startedAt = typeof record.startedAt === "string" ? record.startedAt : "";
16
- if (typeof record.fingerprint === "string" && typeof record.cacheKey === "string") builds.push({
17
- fingerprint: record.fingerprint,
18
- cacheKey: record.cacheKey,
19
- startedAt
20
- });
21
- const carried = record.missReason?.baseline;
22
- if (typeof carried?.fingerprint === "string" && typeof carried.cacheKey === "string") builds.push({
23
- fingerprint: carried.fingerprint,
24
- cacheKey: carried.cacheKey,
25
- startedAt
26
- });
27
- }
28
- return builds;
29
- }
30
- function projectIdentity(root) {
31
- let real;
32
- try {
33
- real = realpathSync.native(root);
34
- } catch {
35
- return null;
36
- }
37
- for (let dir = real;; dir = dirname(dir)) {
38
- if (existsSync(join(dir, ".git"))) {
39
- const common = gitCommonDirOnDisk(dir);
40
- return common ? `${common}\n${relative(dir, real)}` : null;
41
- }
42
- if (dirname(dir) === dir) return null;
43
- }
44
- }
45
- function findMissBaseline(root, platform, { readState = readWorkspaceState, projectRoots = () => Object.keys(loadConfig()?.projects ?? {}), identity = projectIdentity, sourcesOf = (p, key) => storedSources(p, key, sharedBuildCache()) } = {}) {
46
- for (const build of recordedBuilds(readState(root), platform)) {
47
- const sources = sourcesOf(platform, build.cacheKey);
48
- if (sources) return {
49
- fingerprint: build.fingerprint,
50
- cacheKey: build.cacheKey,
51
- sources,
52
- from: "workspace"
53
- };
54
- }
55
- const project = identity(root);
56
- if (!project) return null;
57
- const others = [];
58
- for (const other of projectRoots()) {
59
- if (other === root || identity(other) !== project) continue;
60
- others.push(...recordedBuilds(readState(other), platform));
61
- }
62
- for (const build of others.toSorted((a, b) => (Date.parse(b.startedAt) || 0) - (Date.parse(a.startedAt) || 0))) {
63
- const sources = sourcesOf(platform, build.cacheKey);
64
- if (sources) return {
65
- fingerprint: build.fingerprint,
66
- cacheKey: build.cacheKey,
67
- sources,
68
- from: "project"
69
- };
70
- }
71
- return null;
72
- }
73
- const CATEGORY_RANK = {
74
- "native-dependency": 0,
75
- "app-config": 1,
76
- "config-plugin": 2,
77
- package: 3,
78
- "native-dir": 4,
79
- file: 5,
80
- "app-asset": 6,
81
- other: 7,
82
- "package-scripts": 8,
83
- autolinking: 9
84
- };
85
- function packageIn(path) {
86
- return [...path.matchAll(/(?:^|\/)node_modules\/((?:@[^/]+\/)?[^/]+)/g)].at(-1)?.[1] ?? null;
87
- }
88
- function describeChange({ name, change, reasons }) {
89
- const pkg = packageIn(name);
90
- if (name === "expoConfig" || reasons.includes("expoConfig")) return {
91
- category: "app-config",
92
- label: "app config changed"
93
- };
94
- if (pkg && reasons.some((reason) => /^(expo|rncore)Autolinking(Ios|Android)?$/.test(reason))) return {
95
- category: "native-dependency",
96
- label: `native dependency ${change}: ${pkg}`
97
- };
98
- if (pkg && reasons.includes("expoConfigPlugins")) return {
99
- category: "config-plugin",
100
- label: `config plugin ${change}: ${pkg}`
101
- };
102
- if (/^(expoAutolinkingConfig|rncoreAutolinkingConfig)(:|$)/.test(name)) return {
103
- category: "autolinking",
104
- label: "autolinking config changed"
105
- };
106
- if (name.startsWith("package:")) return {
107
- category: "package",
108
- label: `${name.slice(8)} ${change}`
109
- };
110
- if (name === "packageJson:scripts") return {
111
- category: "package-scripts",
112
- label: "package.json scripts changed"
113
- };
114
- if (reasons.includes("expoConfigExternalFile")) return {
115
- category: "app-asset",
116
- label: `app asset ${change}: ${name}`
117
- };
118
- if (reasons.includes("bareNativeDir")) return {
119
- category: "native-dir",
120
- label: `${name}/ ${change}`
121
- };
122
- if (reasons.length || name.includes("/") || name.includes(".")) return {
123
- category: "file",
124
- label: `${name} ${change}`
125
- };
126
- return {
127
- category: "other",
128
- label: `${name} ${change}`
129
- };
130
- }
131
- function rekeyPrefix(rekeyedBy) {
132
- return rekeyedBy.length ? `${rekeyedBy.join(" and ")} changed native inputs; ` : "";
133
- }
134
- function missReasonFromChanges({ changes, baseline, rekeyedBy = [] }) {
135
- const prefix = rekeyPrefix(rekeyedBy);
136
- if (!baseline) return {
137
- kind: "no-baseline",
138
- summary: `${prefix}no earlier build of this project in the cache to compare with`,
139
- changes: [],
140
- changeCount: 0,
141
- baseline: null,
142
- rekeyedBy
143
- };
144
- if (!changes.length) return {
145
- kind: "same-sources",
146
- summary: `${prefix}native inputs match the last build; no cached app for this configuration or target`,
147
- changes: [],
148
- changeCount: 0,
149
- baseline,
150
- rekeyedBy
151
- };
152
- const described = changes.map((change, index) => ({
153
- change,
154
- index,
155
- ...describeChange(change)
156
- })).toSorted((a, b) => CATEGORY_RANK[a.category] - CATEGORY_RANK[b.category] || a.index - b.index);
157
- const dependencyMoved = described.some((entry) => entry.category === "native-dependency");
158
- const labels = [...new Set(described.filter((entry) => !(dependencyMoved && entry.category === "autolinking")).map((entry) => entry.label))];
159
- const more = labels.length > 1 ? ` (+${labels.length - 1} more)` : "";
160
- return {
161
- kind: "changed",
162
- summary: `${prefix}${labels[0]}${more}`,
163
- changes: described.slice(0, MISS_CHANGE_CAP).map(({ change, category }) => ({
164
- source: change.name,
165
- change: change.change,
166
- category
167
- })),
168
- changeCount: changes.length,
169
- baseline,
170
- rekeyedBy
171
- };
172
- }
173
- function explainBuildMiss({ root, platform, current, rekeyedBy = [], baselineDeps, differ = expoFingerprint.diffFingerprints }) {
174
- const baseline = findMissBaseline(root, platform, baselineDeps);
175
- const changes = baseline ? diffFingerprintSources({
176
- previous: baseline.sources,
177
- previousHash: baseline.fingerprint,
178
- current,
179
- differ
180
- }) : [];
181
- return {
182
- reason: missReasonFromChanges({
183
- changes,
184
- baseline: baseline ? {
185
- fingerprint: baseline.fingerprint,
186
- cacheKey: baseline.cacheKey,
187
- from: baseline.from
188
- } : null,
189
- rekeyedBy
190
- }),
191
- changedNames: changes.map((change) => change.name),
192
- previousHash: baseline?.fingerprint ?? null
193
- };
194
- }
195
- function predictBuildMiss({ root, platform, current, prebuild }) {
196
- const { reason } = explainBuildMiss({
197
- root,
198
- platform,
199
- current
200
- });
201
- const baseline = reason.baseline && {
202
- fingerprint: reason.baseline.fingerprint,
203
- from: reason.baseline.from
204
- };
205
- if (!prebuild || !baseline) return {
206
- ...reason,
207
- baseline
208
- };
209
- const dir = platform === "ios" ? "ios/" : "android/";
210
- return {
211
- ...reason,
212
- kind: "prebuild-pending",
213
- summary: `${reason.summary} (before prebuild ${prebuild}s ${dir})`,
214
- baseline
215
- };
216
- }
217
- function skippedMissReason(summary) {
218
- return {
219
- kind: "cache-skipped",
220
- summary,
221
- changes: [],
222
- changeCount: 0,
223
- baseline: null,
224
- rekeyedBy: []
225
- };
226
- }
227
- function fingerprintErrorMissReason(message) {
228
- return {
229
- kind: "fingerprint-error",
230
- summary: `fingerprinting failed: ${message}`,
231
- changes: [],
232
- changeCount: 0,
233
- baseline: null,
234
- rekeyedBy: []
235
- };
236
- }
237
- //#endregion
238
- export { skippedMissReason as i, fingerprintErrorMissReason as n, predictBuildMiss as r, explainBuildMiss as t };