@piwitests/server 0.15.0 → 0.16.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 (457) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{DzbOHjZH.js → -KQO1A4C.js} +1 -1
  3. package/.output/public/_nuxt/{BEKwVcvQ.js → 1AB111xL.js} +1 -1
  4. package/.output/public/_nuxt/{CokbKVE6.js → 2xvsvjLO.js} +1 -1
  5. package/.output/public/_nuxt/{CNzoIhwN.js → ABGJk0pu.js} +1 -1
  6. package/.output/public/_nuxt/{Cgr8IKY4.js → B2lYFco4.js} +1 -1
  7. package/.output/public/_nuxt/B33X4zrC.js +1 -0
  8. package/.output/public/_nuxt/{V1BQiRoh.js → B3NbDoBP.js} +1 -1
  9. package/.output/public/_nuxt/{ChWPXucC.js → B3sNtVnf.js} +1 -1
  10. package/.output/public/_nuxt/{too3WhRB.js → B43OGXzV.js} +1 -1
  11. package/.output/public/_nuxt/{Cf3RuiXF.js → B6Jp7fpa.js} +4 -4
  12. package/.output/public/_nuxt/{B32ySRXg.js → B7yG1G_l.js} +1 -1
  13. package/.output/public/_nuxt/{BgR7oL4p.js → BBdfPriC.js} +1 -1
  14. package/.output/public/_nuxt/{DNP5tTJo.js → BGYbnqA7.js} +1 -1
  15. package/.output/public/_nuxt/{DAeYEeCC.js → BIf1R_fu.js} +1 -1
  16. package/.output/public/_nuxt/{nUsJV5qo.js → BIksQZfR.js} +1 -1
  17. package/.output/public/_nuxt/{B8fs6GU9.js → BPKwYP2Q.js} +31 -31
  18. package/.output/public/_nuxt/{DjCfCT_5.js → BP_SWi7S.js} +1 -1
  19. package/.output/public/_nuxt/{CrFCPOnY.js → BQrSEuzu.js} +1 -1
  20. package/.output/public/_nuxt/{BpepjHwc.js → BR9H8k-L.js} +1 -1
  21. package/.output/public/_nuxt/{Dejf0f7D.js → BRKa6EQR.js} +3 -3
  22. package/.output/public/_nuxt/{BMQIO38j.js → BS0gKVuF.js} +1 -1
  23. package/.output/public/_nuxt/{BW1UOxWn.js → BV83yObd.js} +1 -1
  24. package/.output/public/_nuxt/{o5WQ5Z7k.js → BVW5qIDP.js} +1 -1
  25. package/.output/public/_nuxt/{rvaZFYoE.js → BY4oA2IH.js} +1 -1
  26. package/.output/public/_nuxt/{DZoSxwj6.js → BZekCf_x.js} +1 -1
  27. package/.output/public/_nuxt/{lRMjXqiA.js → Bb64FEFL.js} +1 -1
  28. package/.output/public/_nuxt/{2PU-adwy.js → BdFEUAlx.js} +1 -1
  29. package/.output/public/_nuxt/{CBrCcDzR.js → Bf62wdzp.js} +1 -1
  30. package/.output/public/_nuxt/{DYDGGqZ3.js → BkDfdHFm.js} +1 -1
  31. package/.output/public/_nuxt/{CqA3gM8h.js → BoRFLTAO.js} +1 -1
  32. package/.output/public/_nuxt/{DxXZN6ed.js → BpIsBP5g.js} +1 -1
  33. package/.output/public/_nuxt/{DkFbpSsi.js → BpNqHxg2.js} +1 -1
  34. package/.output/public/_nuxt/{DFw8I2FL.js → BpceIssd.js} +1 -1
  35. package/.output/public/_nuxt/{n7Htv9PJ.js → Br2K9yi_.js} +1 -1
  36. package/.output/public/_nuxt/{D4nLD93c.js → BuZOa2M3.js} +1 -1
  37. package/.output/public/_nuxt/{B32-7cBF.js → Bvfmwzgw.js} +1 -1
  38. package/.output/public/_nuxt/{h-e-Ca3f.js → Bzl2H_vl.js} +1 -1
  39. package/.output/public/_nuxt/{IdQR_Djw.js → C1K3r_fc.js} +1 -1
  40. package/.output/public/_nuxt/C219JuBV.js +1 -0
  41. package/.output/public/_nuxt/{B_80i5Ge.js → C38aZbFJ.js} +1 -1
  42. package/.output/public/_nuxt/{DHVmXA9K.js → C3r_Sv1p.js} +1 -1
  43. package/.output/public/_nuxt/{O1A-LRgV.js → C8RBRg7I.js} +1 -1
  44. package/.output/public/_nuxt/{60-Zii7v.js → CCRRqXez.js} +1 -1
  45. package/.output/public/_nuxt/{__m3KqHO.js → CJFqA_QW.js} +1 -1
  46. package/.output/public/_nuxt/{Surk4Lw-.js → CKB_doYB.js} +1 -1
  47. package/.output/public/_nuxt/{DaKVSp-6.js → CMYQpoOI.js} +1 -1
  48. package/.output/public/_nuxt/CQeMb57w.js +1 -0
  49. package/.output/public/_nuxt/{Bq2ZPvIH.js → CSYJwpXG.js} +1 -1
  50. package/.output/public/_nuxt/{ETOCcsVw.js → CTdvGdc2.js} +1 -1
  51. package/.output/public/_nuxt/CX1dcT4v.js +1 -0
  52. package/.output/public/_nuxt/{evCxpgbd.js → CdME81ij.js} +2 -2
  53. package/.output/public/_nuxt/{DKTDub7I.js → CgoAUz76.js} +1 -1
  54. package/.output/public/_nuxt/{0KrkW531.js → CoHGrO41.js} +1 -1
  55. package/.output/public/_nuxt/{BGsuOpiq.js → CpO-ABDW.js} +1 -1
  56. package/.output/public/_nuxt/CuYYdFBL.js +1 -0
  57. package/.output/public/_nuxt/{CHMpVLqo.js → D2jhe9JK.js} +1 -1
  58. package/.output/public/_nuxt/{C7RarFGi.js → D33On6AX.js} +1 -1
  59. package/.output/public/_nuxt/{Dv2B_nw_.js → D4VpoHDP.js} +1 -1
  60. package/.output/public/_nuxt/{CKZn0TUX.js → DAWn6Z7h.js} +1 -1
  61. package/.output/public/_nuxt/{rWwWS3Kj.js → DCpmQ47_.js} +1 -1
  62. package/.output/public/_nuxt/{B59-l1Cv.js → DIkLLyR6.js} +1 -1
  63. package/.output/public/_nuxt/{CFn3w5jn.js → DJS3Bf50.js} +1 -1
  64. package/.output/public/_nuxt/{F07TcX0U.js → DL20rwkA.js} +1 -1
  65. package/.output/public/_nuxt/DOuoR2Pk.js +34 -0
  66. package/.output/public/_nuxt/{BC_Wu-fv.js → DRtTLQri.js} +1 -1
  67. package/.output/public/_nuxt/{DiUGa0CT.js → DbeHHTk-.js} +1 -1
  68. package/.output/public/_nuxt/DcCNnjKl.js +1 -0
  69. package/.output/public/_nuxt/{PPFO8UVt.js → DdbrJwT-.js} +1 -1
  70. package/.output/public/_nuxt/{Cfk2_UCm.js → DfcAIbcX.js} +1 -1
  71. package/.output/public/_nuxt/{OG2n3p77.js → DgYM3eyi.js} +1 -1
  72. package/.output/public/_nuxt/{BBJ9Pu3M.js → DhA17dqR.js} +1 -1
  73. package/.output/public/_nuxt/{DvdOsTLb.js → DjZKuUMz.js} +1 -1
  74. package/.output/public/_nuxt/{DCCMLWel.js → DqnyWaSQ.js} +1 -1
  75. package/.output/public/_nuxt/Dsk4Ic18.js +7 -0
  76. package/.output/public/_nuxt/{BCK4f6Y3.js → DszOHBMG.js} +1 -1
  77. package/.output/public/_nuxt/{Cpquifvd.js → DuBBqqbF.js} +1 -1
  78. package/.output/public/_nuxt/{DWzdeQ3Z.js → DuMv-ugy.js} +1 -1
  79. package/.output/public/_nuxt/{BfshMo9k.js → Dz55UR7w.js} +2 -2
  80. package/.output/public/_nuxt/{BkhdAGx0.js → Dzz9_Z0u.js} +1 -1
  81. package/.output/public/_nuxt/{DgZlpN9l.js → HoKG9cc2.js} +1 -1
  82. package/.output/public/_nuxt/{C9jjVEQU.js → IFqRT_xJ.js} +1 -1
  83. package/.output/public/_nuxt/{i38YGG9S.js → JCFZINev.js} +1 -1
  84. package/.output/public/_nuxt/{B9Q_4Mjt.js → Kc7La4sL.js} +1 -1
  85. package/.output/public/_nuxt/N3pCB6-m.js +4 -0
  86. package/.output/public/_nuxt/{CFXonrwQ.js → WctJXszi.js} +1 -1
  87. package/.output/public/_nuxt/{CHgsEM4U.js → bAfTAihV.js} +1 -1
  88. package/.output/public/_nuxt/builds/latest.json +1 -1
  89. package/.output/public/_nuxt/builds/meta/5182c9fb-56a6-4df2-9685-4020a08ce7a5.json +1 -0
  90. package/.output/public/_nuxt/{4fB15L_7.js → d5ZB3uxF.js} +1 -1
  91. package/.output/public/_nuxt/{CIOQo6gB.js → e1zUTrBb.js} +1 -1
  92. package/.output/public/_nuxt/entry.BsmKRJzR.css +1 -0
  93. package/.output/public/_nuxt/{BtJkQ3to.js → iwD5atI2.js} +1 -1
  94. package/.output/public/_nuxt/jIF87ALb.js +1 -0
  95. package/.output/public/_nuxt/{CvCF77E-.js → k-z_VVTK.js} +2 -2
  96. package/.output/public/_nuxt/{CHSkT2s0.js → l0gdGdar.js} +1 -1
  97. package/.output/public/_nuxt/{DVdOm5Bg.js → mGJLLqyN.js} +1 -1
  98. package/.output/public/_nuxt/{CU-OXXdh.js → mfzslNx_.js} +1 -1
  99. package/.output/public/_nuxt/{CD-xwM9N.js → nCjfWTGm.js} +1 -1
  100. package/.output/public/_nuxt/{DQpa8F03.js → oNq5pd3r.js} +1 -1
  101. package/.output/public/_nuxt/qzAP_nm7.js +1 -0
  102. package/.output/public/_nuxt/{3SnTawZW.js → r3SBLxtE.js} +1 -1
  103. package/.output/public/_nuxt/{DI_-kFec.js → uKeO2H7F.js} +1 -1
  104. package/.output/public/_nuxt/{DZLrAp2i.js → xUrLy-Zn.js} +1 -1
  105. package/.output/public/_nuxt/{BY0AkhJh.js → ze9-Ill2.js} +1 -1
  106. package/.output/public/demo/seed.version.json +2 -2
  107. package/.output/public/sw.js +1 -1
  108. package/.output/server/chunks/_/markers.mjs +1 -1
  109. package/.output/server/chunks/_/users.mjs +1 -1
  110. package/.output/server/chunks/build/{BrowserBadge-BTA4QU_J.mjs → BrowserBadge-DNCp9pF-.mjs} +3 -3
  111. package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +1 -0
  112. package/.output/server/chunks/build/{ChartCard-BqAhMip2.mjs → ChartCard-Fr557IbV.mjs} +2 -2
  113. package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +1 -0
  114. package/.output/server/chunks/build/{Checkbox-_1nGm_DR.mjs → Checkbox-7ZiMz60w.mjs} +5 -5
  115. package/.output/server/chunks/build/Checkbox-7ZiMz60w.mjs.map +1 -0
  116. package/.output/server/chunks/build/{CiEnvCard-DAufYuJw.mjs → CiEnvCard-DNxBVvx4.mjs} +5 -5
  117. package/.output/server/chunks/build/CiEnvCard-DNxBVvx4.mjs.map +1 -0
  118. package/.output/server/chunks/build/{CodeBlock-BVKHuYjU.mjs → CodeBlock-BGwNmJ8J.mjs} +2 -2
  119. package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +1 -0
  120. package/.output/server/chunks/build/{DashboardNavbar-BR6j4VLd.mjs → DashboardNavbar-Bdp-OwTN.mjs} +2 -2
  121. package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +1 -0
  122. package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs +1 -1
  123. package/.output/server/chunks/build/{DiagnosisPanel-BnrdXDvd.mjs → DiagnosisPanel-DV1xwGu4.mjs} +6 -6
  124. package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +1 -0
  125. package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs +1 -1
  126. package/.output/server/chunks/build/{EnvManagedBadge-DdnEtjIl.mjs → EnvManagedBadge-Qpn58Nmr.mjs} +5 -5
  127. package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +1 -0
  128. package/.output/server/chunks/build/{HelpHint-D_GJzMpW.mjs → HelpHint-YEMWtKu1.mjs} +18 -2
  129. package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +1 -0
  130. package/.output/server/chunks/build/{Modal-COIjm3js.mjs → Modal-CfA78Hm1.mjs} +2 -2
  131. package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +1 -0
  132. package/.output/server/chunks/build/{OpenInIdeLink-D97W6On1.mjs → OpenInIdeLink-B92wosXu.mjs} +3 -3
  133. package/.output/server/chunks/build/{OpenInIdeLink-D97W6On1.mjs.map → OpenInIdeLink-B92wosXu.mjs.map} +1 -1
  134. package/.output/server/chunks/build/{PageStateCard-C1HFN4Nv.mjs → PageStateCard-Bwee6JTk.mjs} +10 -10
  135. package/.output/server/chunks/build/{PageStateCard-C1HFN4Nv.mjs.map → PageStateCard-Bwee6JTk.mjs.map} +1 -1
  136. package/.output/server/chunks/build/{ProjectTestCasesTable-XFBPQGIX.mjs → ProjectTestCasesTable-9418EI8J.mjs} +9 -9
  137. package/.output/server/chunks/build/ProjectTestCasesTable-9418EI8J.mjs.map +1 -0
  138. package/.output/server/chunks/build/{RunReports-ChNkmuWa.mjs → RunReports-BpJqLHY9.mjs} +2 -2
  139. package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +1 -0
  140. package/.output/server/chunks/build/{RunStatusBadge-CXpuCUGQ.mjs → RunStatusBadge-BhmJ_RKM.mjs} +2 -2
  141. package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +1 -0
  142. package/.output/server/chunks/build/{SectionCard-zs9FDzps.mjs → SectionCard-COd9TuDq.mjs} +2 -2
  143. package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +1 -0
  144. package/.output/server/chunks/build/{Select-r3S5nkSY.mjs → Select-COwTIQlV.mjs} +3 -3
  145. package/.output/server/chunks/build/Select-COwTIQlV.mjs.map +1 -0
  146. package/.output/server/chunks/build/{SelectMenu-Dk6f8i9o.mjs → SelectMenu-BkyAHFCM.mjs} +4 -4
  147. package/.output/server/chunks/build/{SelectMenu-Dk6f8i9o.mjs.map → SelectMenu-BkyAHFCM.mjs.map} +1 -1
  148. package/.output/server/chunks/build/{Separator-pqpPG0up.mjs → Separator-CxZdx8kw.mjs} +2 -2
  149. package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +1 -0
  150. package/.output/server/chunks/build/{SettingsField-Wdpzlt13.mjs → SettingsField-DDD4oqys.mjs} +5 -5
  151. package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +1 -0
  152. package/.output/server/chunks/build/{Slideover-02XjJjn0.mjs → Slideover-B95Rj237.mjs} +3 -3
  153. package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +1 -0
  154. package/.output/server/chunks/build/{Switch-gx_JXgCo.mjs → Switch-htSKgC38.mjs} +2 -2
  155. package/.output/server/chunks/build/Switch-htSKgC38.mjs.map +1 -0
  156. package/.output/server/chunks/build/{Table-C64RrBp3.mjs → Table-CPhhVzDv.mjs} +3 -3
  157. package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +1 -0
  158. package/.output/server/chunks/build/{TestStatusBar--u4VX_Xf.mjs → TestStatusBar-CEzt76wk.mjs} +2 -2
  159. package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +1 -0
  160. package/.output/server/chunks/build/{Tooltip-ui_BVvqr.mjs → Tooltip-7vwuDPrZ.mjs} +3 -3
  161. package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +1 -0
  162. package/.output/server/chunks/build/{VisuallyHiddenInput-mMsqmkjz.mjs → VisuallyHiddenInput-C9eJVpPW.mjs} +2 -2
  163. package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +1 -0
  164. package/.output/server/chunks/build/{_id_-CFVnSs8B.mjs → _id_-BDqvTM9D.mjs} +19 -18
  165. package/.output/server/chunks/build/{_id_-CFVnSs8B.mjs.map → _id_-BDqvTM9D.mjs.map} +1 -1
  166. package/.output/server/chunks/build/{_id_-pkxJKe17.mjs → _id_-CE0Gso6i.mjs} +11 -11
  167. package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +1 -0
  168. package/.output/server/chunks/build/{_id_-R6KGfZOC.mjs → _id_-CnwAyvvS.mjs} +257 -84
  169. package/.output/server/chunks/build/_id_-CnwAyvvS.mjs.map +1 -0
  170. package/.output/server/chunks/build/{_id_-DXJQABO8.mjs → _id_-Dy67M9Dj.mjs} +25 -25
  171. package/.output/server/chunks/build/{_id_-DXJQABO8.mjs.map → _id_-Dy67M9Dj.mjs.map} +1 -1
  172. package/.output/server/chunks/build/{about-CmtGYbC6.mjs → about-FB9PYAHK.mjs} +5 -5
  173. package/.output/server/chunks/build/about-FB9PYAHK.mjs.map +1 -0
  174. package/.output/server/chunks/build/{account-AbLuwiZP.mjs → account-Cn-eZqXM.mjs} +4 -4
  175. package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +1 -0
  176. package/.output/server/chunks/build/{ai-DR_slopS.mjs → ai-V3YOh3yx.mjs} +17 -17
  177. package/.output/server/chunks/build/ai-V3YOh3yx.mjs.map +1 -0
  178. package/.output/server/chunks/build/{analytics-BbT2-Tr-.mjs → analytics-BBlAEmj5.mjs} +235 -64
  179. package/.output/server/chunks/build/analytics-BBlAEmj5.mjs.map +1 -0
  180. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  181. package/.output/server/chunks/build/{db.client-DlA_u5y9.mjs → db.client-aHcD0wyX.mjs} +47 -22
  182. package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +1 -0
  183. package/.output/server/chunks/build/{default-D6diRCW0.mjs → default-BfMirIgG.mjs} +17 -16
  184. package/.output/server/chunks/build/default-BfMirIgG.mjs.map +1 -0
  185. package/.output/server/chunks/build/{docs-DbYoZafk.mjs → docs-DtNcJCyb.mjs} +5 -5
  186. package/.output/server/chunks/build/{docs-DbYoZafk.mjs.map → docs-DtNcJCyb.mjs.map} +1 -1
  187. package/.output/server/chunks/build/{edit-CNV4xdYj.mjs → edit-Dsf11mL5.mjs} +8 -8
  188. package/.output/server/chunks/build/edit-Dsf11mL5.mjs.map +1 -0
  189. package/.output/server/chunks/build/fetch-8kznMtBM.mjs +1 -1
  190. package/.output/server/chunks/build/{help-content-BMumoQQF.mjs → help-content-DmFnuhNu.mjs} +6 -1
  191. package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +1 -0
  192. package/.output/server/chunks/build/{index-Dw526KXV.mjs → index-BR9hw6qk.mjs} +10 -10
  193. package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +1 -0
  194. package/.output/server/chunks/build/{index-dwYB76GO.mjs → index-Ba-Fifra.mjs} +4 -4
  195. package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +1 -0
  196. package/.output/server/chunks/build/{index-rSHkKNna.mjs → index-BgpEKTSq.mjs} +505 -84
  197. package/.output/server/chunks/build/index-BgpEKTSq.mjs.map +1 -0
  198. package/.output/server/chunks/build/{index-DmHBPf7T.mjs → index-CULN3-en.mjs} +11 -2
  199. package/.output/server/chunks/build/index-CULN3-en.mjs.map +1 -0
  200. package/.output/server/chunks/build/{index-C3Ou18qD.mjs → index-DzEgjHlB.mjs} +14 -14
  201. package/.output/server/chunks/build/{index-C3Ou18qD.mjs.map → index-DzEgjHlB.mjs.map} +1 -1
  202. package/.output/server/chunks/build/{isValueEqualOrExist-DTJ5ejZs.mjs → isValueEqualOrExist-DBZjbD_3.mjs} +3 -3
  203. package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +1 -0
  204. package/.output/server/chunks/build/{login-Da5C8jP2.mjs → login-D2XZDuek.mjs} +3 -3
  205. package/.output/server/chunks/build/login-D2XZDuek.mjs.map +1 -0
  206. package/.output/server/chunks/build/{mcp-DM1t-9L_.mjs → mcp-CXwa3xU3.mjs} +8 -8
  207. package/.output/server/chunks/build/mcp-CXwa3xU3.mjs.map +1 -0
  208. package/.output/server/chunks/build/{notifications-BTPF0xA7.mjs → notifications-hJj8tbAT.mjs} +11 -11
  209. package/.output/server/chunks/build/notifications-hJj8tbAT.mjs.map +1 -0
  210. package/.output/server/chunks/build/server.mjs +37 -28
  211. package/.output/server/chunks/build/{settings-Bmw_JdBS.mjs → settings-Ci_7EXYQ.mjs} +8 -7
  212. package/.output/server/chunks/build/settings-Ci_7EXYQ.mjs.map +1 -0
  213. package/.output/server/chunks/build/{settings-metadata-CksLgMun.mjs → settings-metadata-Cp0dx0vm.mjs} +12 -3
  214. package/.output/server/chunks/build/settings-metadata-Cp0dx0vm.mjs.map +1 -0
  215. package/.output/server/chunks/build/{storage-BqR4acgi.mjs → storage-CM-Pd-9E.mjs} +191 -14
  216. package/.output/server/chunks/build/storage-CM-Pd-9E.mjs.map +1 -0
  217. package/.output/server/chunks/build/{tags-miPAzIr3.mjs → tags-DrCQ7QSw.mjs} +6 -6
  218. package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +1 -0
  219. package/.output/server/chunks/build/{test-cases-D-LqhLpk.mjs → test-cases-DkGQB027.mjs} +14 -14
  220. package/.output/server/chunks/build/test-cases-DkGQB027.mjs.map +1 -0
  221. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs +318 -0
  222. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +1 -0
  223. package/.output/server/chunks/build/{useAiStatus-FwqbA4gz.mjs → useAiStatus-ZO987RY7.mjs} +8 -7
  224. package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +1 -0
  225. package/.output/server/chunks/build/{useSettingsNav-v_dFuTw9.mjs → useSettingsNav-D2knPCqF.mjs} +6 -6
  226. package/.output/server/chunks/build/useSettingsNav-D2knPCqF.mjs.map +1 -0
  227. package/.output/server/chunks/build/{users-D-GDKZmZ.mjs → users-NmAUZs3i.mjs} +6 -6
  228. package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +1 -0
  229. package/.output/server/chunks/build/{virtualizer-BcC1XuFf.mjs → virtualizer-0-UBy7xl.mjs} +4 -4
  230. package/.output/server/chunks/build/virtualizer-0-UBy7xl.mjs.map +1 -0
  231. package/.output/server/chunks/build/{wasted-time-CFmeT_e2.mjs → wasted-time-L4kBV5Nh.mjs} +8 -8
  232. package/.output/server/chunks/build/wasted-time-L4kBV5Nh.mjs.map +1 -0
  233. package/.output/server/chunks/nitro/nitro.mjs +949 -684
  234. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  235. package/.output/server/chunks/routes/__piwi/session.get.mjs +51 -0
  236. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -0
  237. package/.output/server/chunks/routes/api/admin/stats.get.mjs +5 -1
  238. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  239. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +75 -6
  240. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  241. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +1 -1
  242. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +1 -1
  243. package/.output/server/chunks/routes/api/auth/login.post.mjs +1 -1
  244. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -1
  245. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -1
  246. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -1
  247. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -1
  248. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -1
  249. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +1 -1
  250. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -1
  251. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -1
  252. package/.output/server/chunks/routes/api/auth/setup.post.mjs +1 -1
  253. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -1
  254. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -1
  255. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -1
  256. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -1
  257. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -1
  258. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +45 -0
  259. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -0
  260. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
  261. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
  262. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
  264. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
  265. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
  266. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
  267. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
  268. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
  269. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
  270. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
  271. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
  272. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
  273. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
  274. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  275. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  276. package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
  277. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  278. package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
  279. package/.output/server/chunks/routes/api/index.get5.mjs +1 -1
  280. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  281. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  282. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  283. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  284. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  285. package/.output/server/chunks/routes/api/index.post6.mjs +1 -1
  286. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -1
  287. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
  288. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
  289. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
  290. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
  291. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
  292. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
  293. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
  294. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
  295. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
  296. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
  297. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -1
  298. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
  299. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -1
  300. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
  301. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -1
  302. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
  303. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
  304. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
  305. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +50 -0
  306. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -0
  307. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
  308. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
  309. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
  310. package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
  311. package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
  312. package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
  313. package/.output/server/chunks/routes/api/search.get.mjs +1 -1
  314. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
  315. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
  316. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
  317. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
  318. package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
  319. package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
  320. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +1 -1
  321. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
  322. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +40 -0
  323. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -0
  324. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +46 -0
  325. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -0
  326. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
  327. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
  328. package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
  329. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
  330. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  331. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +1 -1
  332. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  333. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +1 -1
  334. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
  335. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
  336. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
  337. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
  338. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
  339. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
  340. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
  341. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
  342. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
  343. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +1 -1
  344. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +1 -1
  345. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
  346. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
  347. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
  348. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
  349. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
  350. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
  351. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
  352. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
  353. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
  354. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
  355. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
  356. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
  357. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
  358. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
  359. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
  360. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
  361. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
  362. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
  363. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
  364. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
  365. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
  366. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
  367. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  369. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
  371. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -1
  372. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -1
  373. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  374. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
  375. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
  376. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  377. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  378. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +1 -1
  379. package/.output/server/chunks/routes/api/version.get.mjs +1 -1
  380. package/.output/server/chunks/routes/mcp.post.mjs +1 -1
  381. package/.output/server/chunks/routes/renderer.mjs +1 -1
  382. package/.output/server/database/migrations/0037_tired_hellion.sql +1 -0
  383. package/.output/server/database/migrations/0038_glamorous_ulik.sql +1 -0
  384. package/.output/server/database/migrations/meta/0037_snapshot.json +3384 -0
  385. package/.output/server/database/migrations/meta/0038_snapshot.json +3391 -0
  386. package/.output/server/database/migrations/meta/_journal.json +14 -0
  387. package/.output/server/database/migrations-pg/0038_tranquil_moira_mactaggert.sql +1 -0
  388. package/.output/server/database/migrations-pg/0039_fat_starjammers.sql +1 -0
  389. package/.output/server/database/migrations-pg/meta/0038_snapshot.json +4027 -0
  390. package/.output/server/database/migrations-pg/meta/0039_snapshot.json +4033 -0
  391. package/.output/server/database/migrations-pg/meta/_journal.json +14 -0
  392. package/.output/server/index.mjs +1 -1
  393. package/.output/server/package.json +1 -1
  394. package/package.json +1 -1
  395. package/.output/public/_nuxt/2kfkdDTz.js +0 -1
  396. package/.output/public/_nuxt/BXEDsEwG.js +0 -1
  397. package/.output/public/_nuxt/BbgBGuMG.js +0 -1
  398. package/.output/public/_nuxt/CJGJI2Of.js +0 -34
  399. package/.output/public/_nuxt/Ce4EdfL_.js +0 -4
  400. package/.output/public/_nuxt/CkpB9oBr.js +0 -1
  401. package/.output/public/_nuxt/D1tZEdSi.js +0 -1
  402. package/.output/public/_nuxt/DK9uMTYX.js +0 -1
  403. package/.output/public/_nuxt/YDWXnWou.js +0 -1
  404. package/.output/public/_nuxt/builds/meta/f549de31-8db6-4504-b526-482778a55eba.json +0 -1
  405. package/.output/public/_nuxt/entry.BxXHl1Vy.css +0 -1
  406. package/.output/public/_nuxt/wCQds5_f.js +0 -1
  407. package/.output/server/chunks/build/BrowserBadge-BTA4QU_J.mjs.map +0 -1
  408. package/.output/server/chunks/build/ChartCard-BqAhMip2.mjs.map +0 -1
  409. package/.output/server/chunks/build/Checkbox-_1nGm_DR.mjs.map +0 -1
  410. package/.output/server/chunks/build/CiEnvCard-DAufYuJw.mjs.map +0 -1
  411. package/.output/server/chunks/build/CodeBlock-BVKHuYjU.mjs.map +0 -1
  412. package/.output/server/chunks/build/DashboardNavbar-BR6j4VLd.mjs.map +0 -1
  413. package/.output/server/chunks/build/DiagnosisPanel-BnrdXDvd.mjs.map +0 -1
  414. package/.output/server/chunks/build/EnvManagedBadge-DdnEtjIl.mjs.map +0 -1
  415. package/.output/server/chunks/build/HelpHint-D_GJzMpW.mjs.map +0 -1
  416. package/.output/server/chunks/build/Modal-COIjm3js.mjs.map +0 -1
  417. package/.output/server/chunks/build/ProjectTestCasesTable-XFBPQGIX.mjs.map +0 -1
  418. package/.output/server/chunks/build/RunReports-ChNkmuWa.mjs.map +0 -1
  419. package/.output/server/chunks/build/RunStatusBadge-CXpuCUGQ.mjs.map +0 -1
  420. package/.output/server/chunks/build/SectionCard-zs9FDzps.mjs.map +0 -1
  421. package/.output/server/chunks/build/Select-r3S5nkSY.mjs.map +0 -1
  422. package/.output/server/chunks/build/Separator-pqpPG0up.mjs.map +0 -1
  423. package/.output/server/chunks/build/SettingsField-Wdpzlt13.mjs.map +0 -1
  424. package/.output/server/chunks/build/Slideover-02XjJjn0.mjs.map +0 -1
  425. package/.output/server/chunks/build/Switch-gx_JXgCo.mjs.map +0 -1
  426. package/.output/server/chunks/build/Table-C64RrBp3.mjs.map +0 -1
  427. package/.output/server/chunks/build/TestStatusBar--u4VX_Xf.mjs.map +0 -1
  428. package/.output/server/chunks/build/Tooltip-ui_BVvqr.mjs.map +0 -1
  429. package/.output/server/chunks/build/VisuallyHiddenInput-mMsqmkjz.mjs.map +0 -1
  430. package/.output/server/chunks/build/_id_-R6KGfZOC.mjs.map +0 -1
  431. package/.output/server/chunks/build/_id_-pkxJKe17.mjs.map +0 -1
  432. package/.output/server/chunks/build/about-CmtGYbC6.mjs.map +0 -1
  433. package/.output/server/chunks/build/account-AbLuwiZP.mjs.map +0 -1
  434. package/.output/server/chunks/build/ai-DR_slopS.mjs.map +0 -1
  435. package/.output/server/chunks/build/analytics-BbT2-Tr-.mjs.map +0 -1
  436. package/.output/server/chunks/build/db.client-DlA_u5y9.mjs.map +0 -1
  437. package/.output/server/chunks/build/default-D6diRCW0.mjs.map +0 -1
  438. package/.output/server/chunks/build/edit-CNV4xdYj.mjs.map +0 -1
  439. package/.output/server/chunks/build/help-content-BMumoQQF.mjs.map +0 -1
  440. package/.output/server/chunks/build/index-DmHBPf7T.mjs.map +0 -1
  441. package/.output/server/chunks/build/index-Dw526KXV.mjs.map +0 -1
  442. package/.output/server/chunks/build/index-dwYB76GO.mjs.map +0 -1
  443. package/.output/server/chunks/build/index-rSHkKNna.mjs.map +0 -1
  444. package/.output/server/chunks/build/isValueEqualOrExist-DTJ5ejZs.mjs.map +0 -1
  445. package/.output/server/chunks/build/login-Da5C8jP2.mjs.map +0 -1
  446. package/.output/server/chunks/build/mcp-DM1t-9L_.mjs.map +0 -1
  447. package/.output/server/chunks/build/notifications-BTPF0xA7.mjs.map +0 -1
  448. package/.output/server/chunks/build/settings-Bmw_JdBS.mjs.map +0 -1
  449. package/.output/server/chunks/build/settings-metadata-CksLgMun.mjs.map +0 -1
  450. package/.output/server/chunks/build/storage-BqR4acgi.mjs.map +0 -1
  451. package/.output/server/chunks/build/tags-miPAzIr3.mjs.map +0 -1
  452. package/.output/server/chunks/build/test-cases-D-LqhLpk.mjs.map +0 -1
  453. package/.output/server/chunks/build/useAiStatus-FwqbA4gz.mjs.map +0 -1
  454. package/.output/server/chunks/build/useSettingsNav-v_dFuTw9.mjs.map +0 -1
  455. package/.output/server/chunks/build/users-D-GDKZmZ.mjs.map +0 -1
  456. package/.output/server/chunks/build/virtualizer-BcC1XuFf.mjs.map +0 -1
  457. package/.output/server/chunks/build/wasted-time-CFmeT_e2.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import{_ as Be}from"./B32-7cBF.js";import{_ as Le}from"./BY0AkhJh.js";import{d as ee,o as s,f as S,g as p,i as t,p as Y,k as e,j as c,c as l,t as o,q as m,s as ue,m as w,v as te,x as ye,F as L,y as Q,_ as ie,z as Pe,A as De,h as P,r as x,B as ne,C as Oe,l as J,D as ke,E as He,G as qe,H as fe,I as Ge,b as Ke,u as We,w as Je,e as Ze,J as Qe}from"./B8fs6GU9.js";import{_ as be}from"./DFw8I2FL.js";import{_ as Xe,a as Ye}from"./C9jjVEQU.js";import{_ as ge}from"./wCQds5_f.js";import{_ as et}from"./CHMpVLqo.js";import{_ as tt}from"./BBJ9Pu3M.js";import{_ as $e}from"./CNzoIhwN.js";import{u as st,_ as nt,a as at,i as ot,b as lt,c as rt,s as ve,d as it}from"./BfshMo9k.js";import{c as _e,f as ce,a as ct,b as Ce,s as pe,e as de,r as he,d as ut}from"./CvCF77E-.js";import{_ as we,a as dt,b as mt,c as ft,d as pt,e as gt,f as xt,g as Se,h as vt,i as _t,j as ht,k as yt,l as kt}from"./ChWPXucC.js";import{_ as xe}from"./2PU-adwy.js";import{_ as bt}from"./BCK4f6Y3.js";import{_ as $t}from"./DHVmXA9K.js";import{_ as Ct}from"./DKTDub7I.js";import{_ as wt}from"./Surk4Lw-.js";import{_ as Te}from"./CD-xwM9N.js";import{u as St,p as Tt,_ as jt}from"./DvdOsTLb.js";import{b as It}from"./lRMjXqiA.js";import{u as Ut}from"./DAeYEeCC.js";import{u as zt}from"./DWzdeQ3Z.js";import"./BtJkQ3to.js";import"./3SnTawZW.js";import"./B32ySRXg.js";import"./n7Htv9PJ.js";import"./0KrkW531.js";import"./OG2n3p77.js";import"./B_80i5Ge.js";import"./BGsuOpiq.js";import"./D1tZEdSi.js";import"./DVdOm5Bg.js";import"./4fB15L_7.js";import"./too3WhRB.js";const Rt={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Et={class:"flex items-center gap-3 min-w-0"},At={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Vt={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Mt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Nt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ft={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Bt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Lt={class:"space-y-3"},Pt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Dt={class:"flex flex-wrap gap-2"},Ot={class:"text-sm text-gray-500"},Ht={class:"flex items-start gap-3"},qt={class:"flex flex-col gap-1 shrink-0"},Gt={class:"flex-1 min-w-0 space-y-1.5"},Kt={class:"flex justify-end"},Wt=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:U}){const u=U,{summaryColSpanClass:b}=st(()=>1),f=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(g,n)=>{const d=ue,C=te,V=ge,E=ye,R=et,T=tt,h=ie,I=$e,v=nt;return s(),S(v,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",Rt,[t("div",Et,[c(d,{color:("clusterStatusColor"in g?g.clusterStatusColor:e(ct))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[w(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",At,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0)]),t("div",Vt,[t("span",Mt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Nt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),a.cluster.lastSeenAt?(s(),l("span",Ft," last seen "+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt)),1)):m("",!0)])])]),default:p(()=>[t("div",Bt,[t("div",{class:Y(e(b))},[c(T,{title:a.cluster.signature},{default:p(()=>[t("div",Lt,[a.cluster.title?(s(),l("p",Pt,o(a.cluster.title),1)):m("",!0),t("div",Dt,[a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests")+" affected ",1)]),_:1}),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),c(V,{topic:"cluster.concept"})]),t("p",Ot,[n[2]||(n[2]=w(" First seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(L,{key:0},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.firstSeenAt))+") ",1)],64)):m("",!0),n[3]||(n[3]=w(" · Last seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(L,{key:1},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt))+") ",1)],64)):m("",!0),a.cluster.lastSeenRunStatus?(s(),S(R,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):m("",!0)])])]),_:1},8,["title"])],2),c(T,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",Ht,[t("div",qt,[(s(),l(L,null,Q(f,j=>c(h,{key:j.value,size:"xs",class:"justify-start",color:a.triageStatus===j.value?j.color:"neutral",variant:a.triageStatus===j.value?"solid":"outline",onClick:G=>u("update:triageStatus",j.value)},{default:p(()=>[w(o(j.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",Gt,[c(I,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":n[0]||(n[0]=j=>u("update:triageNote",j))},null,8,["model-value"]),t("div",Kt,[a.triageChanged?(s(),S(h,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:n[1]||(n[1]=j=>u("save-triage"))},{default:p(()=>[...n[4]||(n[4]=[w(" Save ",-1)])]),_:1},8,["loading"])):m("",!0)])])])]),_:1})])]),_:1})}}}),Jt=Object.assign(Wt,{__name:"ClusterSummary"}),Zt={class:"divide-y divide-default"},Qt={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},Xt={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},Yt=ee({__name:"TestEvidenceSignals",props:De({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const U=a,u=P(()=>Array.isArray(U.consoleLogs)?U.consoleLogs.filter(d=>d.type==="error"||d.type==="warning"):[]),b=P(()=>Array.isArray(U.networkRequests)?U.networkRequests.filter(d=>d.status&&d.status>=400):[]),f=P(()=>u.value.length>0||b.value.length>0),g=P(()=>{const d=[];return u.value.length&&d.push(`${u.value.length} console`),b.value.length&&d.push(`${b.value.length} network`),d.join(", ")}),n=Pe(a,"open");return(d,C)=>{const V=te,E=ue,R=we;return e(f)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(g)})`,open:n.value,"onUpdate:open":C[0]||(C[0]=T=>n.value=T)},{default:p(()=>[t("div",Zt,[e(u).length>0?(s(),l(L,{key:0},[C[1]||(C[1]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Console")],-1)),(s(!0),l(L,null,Q(e(u),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[c(V,{name:T.type==="error"?"i-lucide-x-circle":"i-lucide-alert-triangle",class:Y(["size-3.5 mt-0.5 shrink-0",T.type==="error"?"text-red-500":"text-yellow-500"])},null,8,["name","class"]),t("p",Qt,o(T.text),1)]))),128))],64)):m("",!0),e(b).length>0?(s(),l(L,{key:1},[C[2]||(C[2]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Network")],-1)),(s(!0),l(L,null,Q(e(b),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[c(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[w(o(T.status),1)]),_:2},1032,["color"]),t("p",Xt,o(T.url),1)]))),128))],64)):m("",!0)])]),_:1},8,["label","open"])):m("",!0)}}}),es=Object.assign(Yt,{__name:"TestEvidenceSignals"}),ts={class:"space-y-3"},ss={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},ns=["title","onClick"],as={key:0,class:"opacity-60 ml-1"},os={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},ls={class:"min-w-0"},rs={class:"text-sm font-medium break-words"},is={key:2,class:"flex items-center justify-center py-10"},cs={key:0,class:"flex flex-wrap gap-1.5"},us={class:"divide-y divide-default"},ds={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ms={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},fs={class:"overflow-x-auto max-h-72"},ps={class:"max-h-64 overflow-auto"},gs=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const U=a,u=x(U.affectedTestCases[0]?.recentTestRunsCaseId??null),b=P(()=>U.affectedTestCases.find(i=>i.recentTestRunsCaseId===u.value)),f=x(null),g=x([]),n=x(!1),d=x(!1),C=x(!1),V=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){C.value=!1,V.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(i){I();const $=h.get(i);if($){f.value=$.detail,g.value=$.traces,n.value=!1,d.value=!1;return}n.value=!0,d.value=!0,f.value=null,g.value=[];const[B,H]=await Promise.allSettled([$fetch(`/api/test-run-cases/${i}`),$fetch(`/api/test-run-cases/${i}/traces`)]);B.status==="fulfilled"&&(f.value=B.value),n.value=!1,H.status==="fulfilled"&&(g.value=H.value),d.value=!1,B.status==="fulfilled"&&H.status==="fulfilled"&&h.set(i,{detail:B.value,traces:H.value})}const j=new Map,G=x(null),D=x("trace"),M=P(()=>G.value?.frames??[]);async function O(i){if(G.value=j.get(i)??null,j.has(i)||g.value.length===0)return;const $=f.value?.testRun?.id;if($)try{const B=await $fetch(`/api/test-runs/${$}/cases/${i}/trace-stacks`),H=B.status==="ok"&&B.frames?.length?B:null;j.set(i,H),u.value===i&&(G.value=H)}catch{j.set(i,null)}}ne([f,g],()=>{D.value="trace",u.value&&O(u.value)}),ne(u,i=>{i&&v(i)}),Oe(()=>{u.value&&v(u.value)});const A=P(()=>{const i=f.value?.steps;return Array.isArray(i)?i.filter($=>$.error):[]}),F=P(()=>f.value?.testSource?f.value.testSource.split(`
2
- `).length:0),z=P(()=>{const i=f.value;if(!i)return[];const $=i.attachments.filter(y=>ot(y.path,y.contentType)).length,B=i.attachments.filter(y=>lt(y.path,y.contentType)).length,H=Array.isArray(i.consoleLogs)?i.consoleLogs.filter(y=>y.type==="error"||y.type==="warning").length:0,X=Array.isArray(i.networkRequests)?i.networkRequests.filter(y=>(y.status??0)>=400).length:0;return[{icon:"i-lucide-image",label:"screenshots",count:$},{icon:"i-lucide-video",label:"videos",count:B},{icon:"i-lucide-bug-play",label:"traces",count:g.value.length},{icon:"i-lucide-list-checks",label:"failing steps",count:A.value.length},{icon:"i-lucide-triangle-alert",label:"signals",count:H+X},{icon:"i-lucide-code",label:"source",count:i.testSourceFrames?.length||(i.testSource?1:0)},{icon:"i-lucide-accessibility",label:"ARIA",count:i.ariaSnapshot?1:0}].filter(y=>y.count>0)});return(i,$)=>{const B=xe,H=ie,X=te,y=ue,r=dt,k=mt,N=ft,q=we,K=es,W=bt,Z=pt,ae=gt,se=at,oe=xt;return s(),l("div",ts,[a.affectedTestCases.length>1?(s(),l("div",ss,[(s(!0),l(L,null,Q(a.affectedTestCases,_=>(s(),l("button",{key:_.recentTestRunsCaseId,class:Y(["px-3 py-1.5 text-xs whitespace-nowrap border-b-2 -mb-px transition-colors",e(u)===_.recentTestRunsCaseId?"border-primary text-primary font-medium":"border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:_.title,onClick:le=>u.value=_.recentTestRunsCaseId},[w(o(_.title.split(" › ").pop())+" ",1),_.runCount>1?(s(),l("span",as,o(_.runCount)+"×",1)):m("",!0)],10,ns))),128))])):m("",!0),e(b)?(s(),l("div",os,[t("div",ls,[t("p",rs,o(e(b).title),1),c(B,{"file-path":e(b).filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])]),c(H,{to:`/test-run-cases/${e(b).recentTestRunsCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:p(()=>[...$[6]||($[6]=[w(" Open test run case ",-1)])]),_:1},8,["to"])])):m("",!0),e(n)?(s(),l("div",is,[c(X,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(f)?(s(),l(L,{key:3},[e(z).length?(s(),l("div",cs,[(s(!0),l(L,null,Q(e(z),_=>(s(),S(y,{key:_.label,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:p(()=>[c(X,{name:_.icon,class:"size-3"},null,8,["name"]),w(" "+o(_.count)+" "+o(_.label),1)]),_:2},1024))),128))])):m("",!0),c(r,{attachments:e(f).attachments},null,8,["attachments"]),c(k,{attachments:e(f).attachments},null,8,["attachments"]),c(N,{traces:e(g),loading:e(d)},null,8,["traces","loading"]),e(A).length>0?(s(),S(q,{key:1,icon:"i-lucide-list-checks",label:"Failing steps",count:e(A).length,open:e(C),"onUpdate:open":$[0]||($[0]=_=>J(C)?C.value=_:null)},{default:p(()=>[t("div",us,[(s(!0),l(L,null,Q(e(A),(_,le)=>(s(),l("div",{key:le,class:"px-3 py-2 space-y-0.5"},[t("p",ds,o(le+1)+". "+o(_.title),1),_.error?.message?(s(),l("p",ms,o(_.error.message),1)):m("",!0)]))),128))])]),_:1},8,["count","open"])):m("",!0),c(K,{"console-logs":e(f).consoleLogs,"network-requests":e(f).networkRequests,open:e(V),"onUpdate:open":$[1]||($[1]=_=>J(V)?V.value=_:null)},null,8,["console-logs","network-requests","open"]),e(f).testSourceFrames?.length||e(f).testSource||e(M).length?(s(),S(q,{key:2,icon:"i-lucide-code",label:"Test source",count:e(M).length||e(f).testSourceFrames?.length||e(F),open:e(E),"onUpdate:open":$[3]||($[3]=_=>J(E)?E.value=_:null)},{default:p(()=>[e(M).length&&(e(f).testSourceFrames?.length||e(f).testSource)?(s(),S(W,{key:0,modelValue:e(D),"onUpdate:modelValue":$[2]||($[2]=_=>J(D)?D.value=_:null),items:[{label:`Full stack (${e(M).length})`,value:"trace"},{label:`Captured (${e(f).testSourceFrames?.length||1})`,value:"captured"}],size:"xs",variant:"link",class:"mb-1.5",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])):m("",!0),t("div",fs,[e(D)==="trace"&&e(M).length?(s(),S(Z,{key:0,frames:e(M),"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSourceFrames?.length?(s(),S(ae,{key:1,frames:e(f).testSourceFrames,"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSource?(s(),S(se,{key:2,text:"```typescript\n"+e(f).testSource+"\n```"},null,8,["text"])):m("",!0)])]),_:1},8,["count","open"])):m("",!0),e(f).ariaSnapshot?(s(),S(q,{key:3,icon:"i-lucide-accessibility",label:"ARIA snapshot",open:e(R),"onUpdate:open":$[4]||($[4]=_=>J(R)?R.value=_:null)},{default:p(()=>[t("div",ps,[c(se,{text:"```yaml\n"+e(f).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},8,["open"])):m("",!0),e(f).pageState?(s(),S(q,{key:4,icon:"i-lucide-database",label:"App state",open:e(T),"onUpdate:open":$[5]||($[5]=_=>J(T)?T.value=_:null)},{default:p(()=>[c(oe,{"page-state":e(f).pageState,plain:""},null,8,["page-state"])]),_:1},8,["open"])):m("",!0)],64)):m("",!0)])}}}),xs=Object.assign(gs,{__name:"ClusterTestEvidence"}),vs={key:0,class:"flex items-center gap-1.5 overflow-hidden min-w-0"},_s={class:"text-primary shrink-0"},hs={class:"text-gray-500 truncate text-xs font-sans"},ys={key:1,class:"text-primary text-xs"},ks={key:2,class:"text-gray-400 font-sans text-xs"},bs={class:"w-96 p-2 space-y-2"},$s={class:"flex items-center gap-1"},Cs={class:"flex items-center gap-1"},ws={key:0,class:"flex items-center gap-2 px-2 py-1.5 text-xs rounded-md bg-primary/5 text-gray-600 dark:text-gray-300"},Ss={class:"font-medium text-green-600 dark:text-green-400"},Ts={class:"font-medium text-red-600 dark:text-red-400"},js={class:"text-gray-400"},Is={key:1,class:"flex items-center justify-center gap-2 py-6 text-gray-400"},Us={key:2,class:"py-4 text-center text-sm text-red-500"},zs={key:3,class:"flex items-start gap-2 px-2 py-2 text-xs text-amber-700 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 rounded-md"},Rs={key:4,class:"max-h-80 overflow-y-auto space-y-px"},Es={class:"text-xs text-primary"},As={key:1,class:"py-4 text-center text-sm text-gray-400"},Vs=["onClick"],Ms={class:"text-xs text-primary shrink-0 w-14 pt-px"},Ns={class:"flex-1 min-w-0"},Fs={class:"text-xs font-medium leading-snug truncate"},Bs={class:"text-xs text-gray-400 leading-snug truncate"},Ls=ee({__name:"CommitPicker",props:{modelValue:{},clusterId:{}},emits:["update:modelValue"],setup(a,{emit:U}){const u=a,b=U,f=x(!1),g=x(""),n=x([]),d=x(null),C=x(null),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x([]),I=x(!1),v=x(void 0),j=P(()=>{if(!u.modelValue)return null;const z=u.modelValue.trim();return n.value.find($=>$.sha===z||$.sha.startsWith(z))??{sha:z,shortSha:z.slice(0,7),message:"",author:"",date:""}});async function G(){if(!h.value.length){I.value=!0;try{const z=await $fetch(`/api/failure-clusters/${u.clusterId}/branches`);h.value=z.branches}catch{}finally{I.value=!1}}}async function D(){const z=u.modelValue||"";V.value=!0,E.value=!1,T.value=null;try{const i={};z&&(i.baseline=z),v.value&&(i.branch=v.value);const $=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:i});n.value=$.commits,C.value=$.aggregate,d.value=$.error??null,T.value=z}catch{E.value=!0}finally{V.value=!1}}ne(v,()=>{n.value=[],T.value=null,D()}),ne(f,async z=>{if(z){await Promise.all([G(),D()]),await qe();const i=R.value?.$el?.querySelector("input")??R.value?.$el;i instanceof HTMLElement&&i.focus()}else g.value=""});const M=P(()=>Ce(n.value,g.value)),O=P(()=>{const z=g.value.trim();return!/^[0-9a-f]{7,40}$/i.test(z)||M.value.some(i=>i.sha.startsWith(z.toLowerCase()))?null:z});function A(z){b("update:modelValue",z),f.value=!1}function F(z){z.stopPropagation(),d.value=null,C.value=null,b("update:modelValue",""),f.value=!1}return(z,i)=>{const $=ie,B=te,H=$t,X=ke,y=He;return s(),S(y,{open:e(f),"onUpdate:open":i[4]||(i[4]=r=>J(f)?f.value=r:null)},{content:p(()=>[t("div",bs,[t("div",$s,[c(B,{name:"i-lucide-git-branch",class:"size-3.5 text-gray-400 shrink-0"}),c(H,{modelValue:e(v),"onUpdate:modelValue":i[0]||(i[0]=r=>J(v)?v.value=r:null),items:e(h),placeholder:"Default branch",size:"xs",class:"flex-1",loading:e(I),disabled:e(I)},null,8,["modelValue","items","loading","disabled"])]),t("div",Cs,[c(X,{ref_key:"searchInputRef",ref:R,modelValue:e(g),"onUpdate:modelValue":i[1]||(i[1]=r=>J(g)?g.value=r:null),placeholder:"Search message, author, SHA…",size:"xs",icon:"i-lucide-search",class:"flex-1"},null,8,["modelValue"]),a.modelValue?(s(),S($,{key:0,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Clear baseline",onClick:i[2]||(i[2]=r=>F(r))})):m("",!0)]),e(C)&&a.modelValue&&!e(V)?(s(),l("div",ws,[c(B,{name:"i-lucide-git-compare-arrows",class:"size-3.5 shrink-0 text-primary"}),i[5]||(i[5]=t("span",null,"Since baseline:",-1)),t("span",Ss,"+"+o(e(C).linesAdded),1),t("span",Ts,"-"+o(e(C).linesRemoved),1),t("span",js,"across "+o(e(C).filesChanged)+" file"+o(e(C).filesChanged===1?"":"s"),1)])):m("",!0),e(V)?(s(),l("div",Is,[c(B,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i[6]||(i[6]=t("span",{class:"text-sm"},"Loading commits…",-1))])):e(E)?(s(),l("div",Us," Failed to load commits — check your SCM token in Settings → AI ")):e(d)&&!e(V)&&e(n).length===0?(s(),l("div",zs,[c(B,{name:"i-lucide-triangle-alert",class:"size-3.5 shrink-0 mt-0.5"}),t("span",null,o(e(d)),1)])):(s(),l("div",Rs,[e(O)?(s(),l("button",{key:0,class:"w-full text-left px-2 py-1.5 rounded flex items-center gap-2 hover:bg-elevated transition-colors border border-dashed border-default",onClick:i[3]||(i[3]=r=>A(e(O)))},[c(B,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),i[7]||(i[7]=t("span",{class:"text-xs text-gray-500"},"Use commit",-1)),t("code",Es,o(e(O).slice(0,7)),1)])):m("",!0),e(M).length===0&&!e(O)?(s(),l("div",As,o(e(g)?"No commits match":"No commits available"),1)):m("",!0),(s(!0),l(L,null,Q(e(M),r=>(s(),l("button",{key:r.sha,class:Y(["w-full text-left px-2 py-1.5 rounded flex items-start gap-2 hover:bg-elevated transition-colors",a.modelValue===r.sha?"bg-primary/10 ring-1 ring-inset ring-primary/30":""]),onClick:k=>A(r.sha)},[t("code",Ms,o(r.shortSha),1),t("div",Ns,[t("p",Fs,o(r.message),1),t("p",Bs,[w(o(r.author),1),r.date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(r.date)),1)],64)):m("",!0)])]),a.modelValue===r.sha?(s(),S(B,{key:0,name:"i-lucide-check",class:"size-3.5 text-primary shrink-0 mt-0.5"})):m("",!0)],10,Vs))),128))]))])]),default:p(()=>[c($,{size:"xs",color:"neutral",variant:"outline",icon:a.modelValue?"i-lucide-git-branch-plus":"i-lucide-git-branch","trailing-icon":"i-lucide-chevron-down",class:"min-w-36 max-w-48 font-mono"},{default:p(()=>[e(j)?.message?(s(),l("span",vs,[t("code",_s,o(e(j).shortSha),1),t("span",hs,o(e(j).message),1)])):a.modelValue?(s(),l("span",ys,o(a.modelValue.slice(0,7))+"…",1)):(s(),l("span",ks,"baseline commit…"))]),_:1},8,["icon"])]),_:1},8,["open"])}}}),Ps=Object.assign(Ls,{__name:"CommitPicker"}),Ds={class:"space-y-3"},Os={key:0,class:"space-y-1"},Hs={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Gs={class:"text-xs text-gray-400 shrink-0"},Ks={class:"text-xs text-gray-700 dark:text-gray-300 truncate"},Ws={class:"space-y-1"},Js={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},Zs={key:0,class:"text-yellow-500 font-normal normal-case"},Qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Xs=["onClick"],Ys={class:"text-xs font-mono flex-1 truncate text-gray-700 dark:text-gray-300"},en={class:"text-xs text-gray-400 shrink-0 tabular-nums"},tn={key:0,class:"text-green-500"},sn={key:1,class:"text-gray-300 mx-0.5"},nn={key:2,class:"text-red-500"},an={key:0,class:"border-t border-default overflow-x-auto max-h-96"},on=ee({__name:"ScmChangesView",props:{changes:{}},setup(a){const U=x(new Set);function u(b){const f=new Set(U.value);f.has(b)?f.delete(b):f.add(b),U.value=f}return(b,f)=>{const g=te,n=Se;return s(),l("div",Ds,[a.changes.commits.length>0?(s(),l("div",Os,[t("p",Hs,o(a.changes.commits.length)+" commit"+o(a.changes.commits.length===1?"":"s"),1),t("div",qs,[(s(!0),l(L,null,Q(a.changes.commits,d=>(s(),l("div",{key:d.sha,class:"flex items-center gap-2 px-3 py-1.5"},[c(g,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),t("code",Gs,o(d.sha.slice(0,7)),1),t("span",Ks,o(d.message),1)]))),128))])])):m("",!0),t("div",Ws,[t("p",Js,[w(o(a.changes.files.length)+" file"+o(a.changes.files.length===1?"":"s")+" changed ",1),a.changes.patchesOmitted?(s(),l("span",Zs," — diff too large, file names only ")):m("",!0)]),t("div",Qs,[(s(!0),l(L,null,Q(a.changes.files,d=>(s(),l("div",{key:d.filename},[t("button",{class:Y(["w-full flex items-center gap-2 px-3 py-1.5 text-left hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors",d.patch?"cursor-pointer":"cursor-default"]),onClick:C=>d.patch&&u(d.filename)},[c(g,{name:("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).icon,class:Y(["size-3.5 shrink-0",("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).color])},null,8,["name","class"]),t("span",Ys,o(d.filename),1),t("span",en,[d.additions?(s(),l("span",tn,"+"+o(d.additions),1)):m("",!0),d.additions&&d.deletions?(s(),l("span",sn,"/")):m("",!0),d.deletions?(s(),l("span",nn,"-"+o(d.deletions),1)):m("",!0)]),d.patch?(s(),S(g,{key:0,name:e(U).has(d.filename)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-3.5 text-gray-400 shrink-0"},null,8,["name"])):m("",!0)],10,Xs),d.patch&&e(U).has(d.filename)?(s(),l("div",an,[c(n,{patch:d.patch},null,8,["patch"])])):m("",!0)]))),128))])])])}}}),ln=Object.assign(on,{__name:"ScmChangesView"}),rn={class:"border border-default rounded-lg overflow-clip text-xs font-mono"},cn={class:"sticky top-0 z-10 flex items-center justify-between px-3 py-1.5 bg-elevated border-b border-default text-gray-600 dark:text-gray-300"},un={class:"font-medium truncate"},dn={class:"shrink-0 flex items-center gap-1.5 ml-2 text-[11px]"},mn={key:0,class:"text-green-600 dark:text-green-400"},fn={key:1,class:"text-red-600 dark:text-red-400"},pn={key:1,class:"px-3 py-2 text-gray-400 text-[11px]"},gn=ee({__name:"DiffFile",props:{file:{}},setup(a){return(U,u)=>{const b=ue,f=Se;return s(),l("div",rn,[t("div",cn,[t("span",un,o(a.file.filename),1),t("span",dn,[a.file.additions?(s(),l("span",mn,"+"+o(a.file.additions),1)):m("",!0),a.file.deletions?(s(),l("span",fn,"-"+o(a.file.deletions),1)):m("",!0),c(b,{label:a.file.status,size:"xs",variant:"subtle",color:("scmFileStatusMeta"in U?U.scmFileStatusMeta:e(pe))(a.file.status).badgeColor},null,8,["label","color"])])]),a.file.patch?(s(),S(f,{key:0,patch:a.file.patch},null,8,["patch"])):(s(),l("div",pn,"No patch available"))])}}}),xn=Object.assign(gn,{__name:"DiffFile"}),vn={class:"inline-flex items-center gap-1"},_n={class:"flex h-[72vh] overflow-hidden"},hn={class:"w-72 shrink-0 border-r border-default flex flex-col"},yn={class:"p-2 border-b border-default space-y-2 shrink-0"},kn={class:"flex items-center gap-2 text-xs text-gray-500"},bn={class:"ml-auto"},$n={key:2,class:"flex-1 overflow-y-auto flex flex-col"},Cn={key:0,class:"py-6 text-center text-sm text-gray-400 flex-1"},wn=["onClick"],Sn=["checked","onChange"],Tn={class:"flex-1 min-w-0"},jn={class:"text-xs font-medium leading-snug truncate"},In={class:"text-[10px] text-gray-400 leading-snug mt-0.5 flex items-center gap-1 min-w-0"},Un={class:"text-primary shrink-0"},zn={class:"truncate"},Rn={key:0,class:"shrink-0"},En={key:1,class:"p-2 shrink-0 space-y-1.5"},An={key:0,class:"flex items-center gap-1.5 text-xs text-red-500 px-1"},Vn={class:"flex-1 overflow-y-auto flex flex-col min-w-0"},Mn={key:0,class:"flex-1 flex items-center justify-center text-gray-400 text-sm"},Nn={key:2,class:"flex-1 p-4 space-y-3"},Fn={key:0,class:"space-y-0.5 pb-3 border-b border-default"},Bn={class:"flex items-center gap-2"},Ln={class:"text-xs font-mono text-primary"},Pn={class:"text-xs text-gray-400"},Dn={class:"text-sm font-semibold"},On={key:1,class:"text-sm text-gray-400 pt-2"},Hn={key:4,class:"flex-1 flex items-center justify-center text-sm text-gray-400"},qn={class:"flex items-center gap-3 w-full"},Gn={class:"flex-1 flex items-center gap-2 text-sm text-gray-500 min-w-0"},Kn={class:"font-medium text-gray-700 dark:text-gray-200 shrink-0"},Wn={class:"shrink-0"},Jn={class:"text-green-600 dark:text-green-400 shrink-0 font-medium"},Zn={class:"text-red-600 dark:text-red-400 shrink-0 font-medium"},Qn={key:1,class:"text-gray-400 text-xs shrink-0"},Xn={key:1},me=50,Yn=ee({__name:"CommitBrowserModal",props:{open:{type:Boolean},clusterId:{},initialSelected:{},autoSelectedShas:{}},emits:["update:open","confirm"],setup(a,{emit:U}){const u=a,b=P(()=>new Set(u.autoSelectedShas??[])),f=U,g=x(""),n=x([]),d=x(me),C=x(!1),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x(new Set),I=x(null),v=Ge({}),j=x(null),G=x(!1),D=x(null),M=P(()=>n.value.find(y=>y.sha===I.value)??null),O=P(()=>Ce(n.value,g.value)),A=P(()=>{let y=0,r=0,k=0,N=0;for(const q of h.value){if(!(q in v)){N++;continue}const K=v[q];K&&(y+=K.files.length,r+=K.files.reduce((W,Z)=>W+Z.additions,0),k+=K.files.reduce((W,Z)=>W+Z.deletions,0))}return{files:y,linesAdded:r,linesRemoved:k,unreviewed:N}});async function F(y){y?(V.value=!0,R.value=null):(E.value=!0,T.value=null);try{const r=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:{limit:d.value}});n.value=r.commits,C.value=r.hasMore??!1,r.error&&!r.commits.length&&(y?R.value=r.error:T.value=r.error),y&&r.commits[0]&&i(r.commits[0].sha)}catch(r){y?R.value=de(r):T.value=de(r)}finally{V.value=!1,E.value=!1}}async function z(){d.value+=me,await F(!1)}ne(()=>u.open,async y=>{if(y){if(h.value=new Set(u.initialSelected??[]),n.value.length){!I.value&&n.value[0]&&i(n.value[0].sha);return}d.value=me,await F(!0)}});async function i(y){if(I.value!==y){if(I.value=y,D.value=null,y in v){j.value=v[y],G.value=!1;return}j.value=null,G.value=!0;try{const r=await $fetch(`/api/failure-clusters/${u.clusterId}/commit-diff`,{query:{sha:y}});v[y]=r,I.value===y&&(j.value=r)}catch(r){I.value===y&&(D.value=de(r))}finally{I.value===y&&(G.value=!1)}}}function $(y){const r=new Set(h.value);r.has(y)?r.delete(y):r.add(y),h.value=r}function B(){h.value=new Set(O.value.map(y=>y.sha))}function H(){h.value=new Set}function X(){f("confirm",[...h.value]),f("update:open",!1)}return(y,r)=>{const k=ge,N=ke,q=Ct,K=ie,W=wt,Z=ue,ae=te,se=xn,oe=Te;return s(),S(oe,{open:a.open,title:"Browse commits",ui:{content:"max-w-6xl",body:"p-0 overflow-hidden"},"onUpdate:open":r[4]||(r[4]=_=>f("update:open",_))},{title:p(()=>[t("span",vn,[r[5]||(r[5]=w("Browse commits ",-1)),c(k,{topic:"cluster.commit-browser"})])]),body:p(()=>[t("div",_n,[t("div",hn,[t("div",yn,[c(N,{modelValue:e(g),"onUpdate:modelValue":r[0]||(r[0]=_=>J(g)?g.value=_:null),placeholder:"Search commits…",size:"xs",icon:"i-lucide-search"},null,8,["modelValue"]),t("div",kn,[t("button",{class:"hover:text-primary transition-colors",onClick:B},"All"),r[6]||(r[6]=t("span",null,"·",-1)),t("button",{class:"hover:text-primary transition-colors",onClick:H},"None"),t("span",bn,o(e(h).size>0?`${e(h).size} selected`:"none selected"),1)])]),e(V)?(s(),S(q,{key:0,text:"Loading…",padded:!1,class:"flex-1"})):e(R)?(s(),S(W,{key:1,text:e(R),padded:!1,class:"flex-1 p-4"},{action:p(()=>[c(K,{size:"xs",color:"neutral",variant:"outline",onClick:r[1]||(r[1]=_=>F(!0))},{default:p(()=>[...r[7]||(r[7]=[w(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):(s(),l("div",$n,[e(O).length===0?(s(),l("div",Cn,o(e(g)?"No commits match":"No commits"),1)):m("",!0),(s(!0),l(L,null,Q(e(O),_=>(s(),l("button",{key:_.sha,class:Y(["w-full text-left px-2.5 py-2 flex items-start gap-2.5 hover:bg-elevated transition-colors border-b border-default/50 last:border-0 shrink-0",e(I)===_.sha?"bg-elevated":""]),onClick:le=>i(_.sha)},[t("input",{type:"checkbox",checked:e(h).has(_.sha),class:"mt-0.5 shrink-0 cursor-pointer accent-primary",onClick:r[2]||(r[2]=fe(()=>{},["stop"])),onChange:le=>$(_.sha)},null,40,Sn),t("div",Tn,[t("p",jn,o(_.message||"(no message)"),1),t("p",In,[t("code",Un,o(_.shortSha),1),t("span",zn,o(_.author),1),_.date?(s(),l("span",Rn,"· "+o(e(ce)(_.date)),1)):m("",!0),e(b).has(_.sha)?(s(),S(Z,{key:1,size:"xs",color:"info",variant:"soft",class:"shrink-0"},{default:p(()=>[...r[8]||(r[8]=[w(" auto ",-1)])]),_:1})):m("",!0)])])],10,wn))),128)),e(C)&&!e(g)?(s(),l("div",En,[e(T)?(s(),l("p",An,[c(ae,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(T)),1)])):m("",!0),c(K,{size:"xs",color:"neutral",variant:"outline",block:"",loading:e(E),onClick:z},{default:p(()=>[...r[9]||(r[9]=[w(" Load more ",-1)])]),_:1},8,["loading"])])):m("",!0)]))]),t("div",Vn,[e(I)?e(G)?(s(),S(q,{key:1,text:"Loading diff…",padded:!1,class:"flex-1"})):e(j)?(s(),l("div",Nn,[e(M)?(s(),l("div",Fn,[t("div",Bn,[t("code",Ln,o(e(M).shortSha),1),t("span",Pn,[w(o(e(M).author),1),e(M).date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(e(M).date)),1)],64)):m("",!0)])]),t("p",Dn,o(e(M).message),1)])):m("",!0),e(j).files.length===0?(s(),l("div",On,"No file changes in this commit")):m("",!0),(s(!0),l(L,null,Q(e(j).files,_=>(s(),S(se,{key:_.filename,file:_},null,8,["file"]))),128))])):e(D)?(s(),S(W,{key:3,text:e(D),padded:!1,class:"flex-1 p-6"},{action:p(()=>[...r[10]||(r[10]=[t("p",{class:"text-xs text-gray-400"},"Click the commit again to retry",-1)])]),_:1},8,["text"])):(s(),l("div",Hn," Diff not available for this commit ")):(s(),l("div",Mn," Select a commit to view its diff "))])])]),footer:p(()=>[t("div",qn,[t("div",Gn,[e(h).size>0?(s(),l(L,{key:0},[t("span",Kn,o(e(h).size)+" commit"+o(e(h).size===1?"":"s"),1),e(A).files>0||e(A).linesAdded>0||e(A).linesRemoved>0?(s(),l(L,{key:0},[r[11]||(r[11]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("span",Wn,o(e(A).files)+" file"+o(e(A).files===1?"":"s"),1),t("span",Jn,"+"+o(e(A).linesAdded),1),t("span",Zn,"-"+o(e(A).linesRemoved),1)],64)):m("",!0),e(A).unreviewed>0?(s(),l("span",Qn," ("+o(e(A).unreviewed)+" unreviewed) ",1)):m("",!0)],64)):(s(),l("span",Xn,"No commits selected"))]),c(K,{color:"neutral",variant:"ghost",onClick:r[3]||(r[3]=_=>f("update:open",!1))},{default:p(()=>[...r[12]||(r[12]=[w(" Cancel ",-1)])]),_:1}),c(K,{color:"primary",disabled:e(h).size===0,onClick:X},{default:p(()=>[...r[13]||(r[13]=[w(" Add to context ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["open"])}}}),ea=Object.assign(Yn,{__name:"CommitBrowserModal"});function je(a){return{scmStatus:P(()=>{const u=a.value?.scm;if(!u)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"Git context unavailable",detail:""};if(u.baseCommitUsed){if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};const g=u.patchesOmitted?", no patches (diff too large)":u.patchesTruncated?`, ${u.patchedFilesCount} with patches (some cut)`:`, ${u.patchedFilesCount} with patches`;return{color:"text-blue-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · ${u.filesCount} files${g}`,detail:u.hasLastGreen?"overrides last passing run baseline":"no last passing run"}}if(!u.hasLastGreen)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No last passing run",detail:"enter a baseline commit below to enable diff"};if(!u.hasCommitRange)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No commit range",detail:"reporter did not send SCM metadata"};if(!u.provider)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:"Unsupported SCM host",detail:"only GitHub, GitLab and Bitbucket are supported"};if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};if(u.patchesOmitted)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files`,detail:"diff too large — file list only, no patches"};const b=u.patchesTruncated?", some patches cut (budget)":"",f=u.commitsCount>0?` · ${u.commitsCount} commit${u.commitsCount>1?"s":""}`:"";return{color:"text-green-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files · ${u.patchedFilesCount} with patches${b}${f}`,detail:""}})}}const ta={class:"space-y-3"},sa={class:"pb-2 border-b border-default"},na={class:"flex items-center gap-2 flex-wrap"},aa={class:"text-xs text-gray-500 font-medium shrink-0 inline-flex items-center gap-1"},oa={class:"flex items-center gap-1.5 ml-auto"},la={key:0,class:"flex items-center gap-1 px-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium"},ra={key:0,class:"flex items-start gap-1.5 text-xs px-2 py-1.5 rounded-md bg-elevated border border-default"},ia={key:0,class:"text-gray-400 ml-1"},ca={key:1,class:"flex items-center justify-center py-6"},ua={key:3,class:"text-xs text-gray-400 text-center py-4"},da=ee({__name:"ClusterInvestigation",setup(a){const{clusterId:U,baseCommit:u,selectedCommitShas:b,autoSelectedCommits:f,baseCommitIsPinned:g,coverage:n,scmChanges:d,contextLoading:C,refreshContext:V}=St(),E=x(!1),{scmStatus:R}=je(n);return(T,h)=>{const I=ge,v=Ps,j=te,G=be,D=ie,M=ln,O=ea;return s(),l(L,null,[t("div",ta,[t("div",sa,[t("div",na,[t("span",aa,[h[5]||(h[5]=w(" Baseline ",-1)),c(I,{topic:"cluster.baseline"})]),c(v,{modelValue:e(u),"onUpdate:modelValue":h[0]||(h[0]=A=>J(u)?u.value=A:null),"cluster-id":e(U)},null,8,["modelValue","cluster-id"]),e(g)?(s(),S(G,{key:0,text:"Baseline commit pinned for this cluster"},{default:p(()=>[c(j,{name:"i-lucide-pin",class:"size-3.5 text-primary shrink-0"})]),_:1})):m("",!0),t("div",oa,[e(b).length?(s(),l("div",la,[c(j,{name:"i-lucide-git-commit-horizontal",class:"size-3"}),t("span",null,o(e(b).length)+" commit"+o(e(b).length===1?"":"s"),1),t("button",{class:"ml-0.5 hover:opacity-70 transition-opacity",onClick:h[1]||(h[1]=A=>b.value=[])},[c(j,{name:"i-lucide-x",class:"size-3"})])])):m("",!0),c(D,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list",onClick:h[2]||(h[2]=A=>E.value=!0)},{default:p(()=>[...h[6]||(h[6]=[w(" Browse ",-1)])]),_:1}),c(D,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"outline",loading:e(C),onClick:e(V)},null,8,["loading","onClick"])])])]),e(n)?(s(),l("div",ra,[c(j,{name:e(R).icon,class:Y(["size-3.5 mt-0.5 shrink-0",e(R).color])},null,8,["name","class"]),t("div",null,[t("span",{class:Y(e(R).color)},o(e(R).text),3),e(R).detail?(s(),l("span",ia,"— "+o(e(R).detail),1)):m("",!0)])])):m("",!0),e(C)&&!e(d)?(s(),l("div",ca,[c(j,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-gray-400"})])):e(d)?(s(),S(M,{key:2,changes:e(d)},null,8,["changes"])):e(n)&&!e(C)&&!e(d)?(s(),l("p",ua," No changes found in this range. ")):m("",!0)]),c(O,{open:e(E),"onUpdate:open":h[3]||(h[3]=A=>J(E)?E.value=A:null),"cluster-id":e(U),"initial-selected":e(b),"auto-selected-shas":e(f),onConfirm:h[4]||(h[4]=A=>b.value=A)},null,8,["open","cluster-id","initial-selected","auto-selected-shas"])],64)}}}),ma=Object.assign(da,{__name:"ClusterInvestigation"}),fa={class:"flex flex-col h-[60vh]"},pa={class:"flex items-center gap-3 px-4 py-2.5 border-b border-default text-sm shrink-0"},ga={key:0,class:"ml-auto text-xs text-gray-500"},xa={class:"flex-1 overflow-y-auto"},va={class:"w-full text-sm"},_a=["onClick"],ha={class:"px-4 py-2.5"},ya=["checked","onChange"],ka={class:"px-2 py-2.5 min-w-0"},ba={class:"truncate font-medium text-gray-800 dark:text-gray-200 max-w-[24rem]"},$a={class:"px-2 py-2.5 text-gray-500 text-xs max-w-[16rem] hidden sm:table-cell"},Ca={class:"px-2 py-2.5 text-right text-gray-500 text-xs"},wa={key:0},Sa={class:"shrink-0 border-t border-default px-4 py-3 space-y-1.5"},Ta={key:0,class:"shrink-0 px-4 pb-3 flex items-center gap-1.5 text-xs text-red-500"},ja={class:"flex items-center gap-3 w-full"},Ia=ee({__name:"ClusterExtractCasesModal",props:{open:{type:Boolean},clusterId:{},affectedTestCases:{},projectKey:{},projectName:{}},emits:["update:open","extracted"],setup(a,{emit:U}){const u=a,b=U,f=Ke(),g=x(new Set),n=x(""),d=x(!1),C=x(null);function V(){g.value=new Set(u.affectedTestCases.map(I=>I.testCaseId))}function E(){g.value=new Set}function R(I){const v=new Set(g.value);v.has(I)?v.delete(I):v.add(I),g.value=v}ne(()=>u.open,I=>{I&&(E(),n.value="",C.value=null)});const T=P(()=>g.value.size);async function h(){if(T.value!==0){d.value=!0,C.value=null;try{await $fetch(`/api/failure-clusters/${u.clusterId}/extract-cases`,{method:"POST",body:{testCaseIds:[...g.value],triageNote:n.value.trim()||void 0}}),f.add({title:`Extracted ${T.value} test ${T.value===1?"case":"cases"}`,color:"success"}),b("extracted"),b("update:open",!1)}catch(I){C.value=de(I)}finally{d.value=!1}}}return(I,v)=>{const j=ye,G=xe,D=$e,M=te,O=ie,A=Te;return s(),S(A,{open:a.open,title:"Extract test cases",ui:{content:"max-w-4xl",body:"p-0 flex flex-col overflow-hidden"},"onUpdate:open":v[4]||(v[4]=F=>b("update:open",F))},{body:p(()=>[t("div",fa,[t("div",pa,[t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:V},"Select all"),v[5]||(v[5]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:E},"Deselect all"),e(T)>0?(s(),l("span",ga,o(e(T))+" selected ",1)):m("",!0)]),t("div",xa,[t("table",va,[v[8]||(v[8]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-800 border-b border-default"},[t("tr",null,[t("th",{class:"w-10 px-4 py-2.5"}),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide"},"Test"),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide hidden sm:table-cell"}," File "),t("th",{class:"text-right px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide w-20"}," Occurrences ")])],-1)),t("tbody",null,[(s(!0),l(L,null,Q(a.affectedTestCases,F=>(s(),l("tr",{key:F.testCaseId,class:"border-b border-default/50 hover:bg-elevated transition-colors cursor-pointer",onClick:z=>R(F.testCaseId)},[t("td",ha,[t("input",{type:"checkbox",checked:e(g).has(F.testCaseId),class:"shrink-0 cursor-pointer accent-primary",onClick:v[0]||(v[0]=fe(()=>{},["stop"])),onChange:z=>R(F.testCaseId)},null,40,ya)]),t("td",ka,[t("p",ba,o(F.title),1),c(j,{to:`/test-cases/${F.testCaseId}`,class:"text-[10px] text-primary hover:underline mt-0.5 inline-block",onClick:v[1]||(v[1]=fe(()=>{},["stop"]))},{default:p(()=>[...v[6]||(v[6]=[w(" View details ",-1)])]),_:1},8,["to"])]),t("td",$a,[c(G,{"file-path":F.filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"max-w-full"},null,8,["file-path","project-key","project-name"])]),t("td",Ca,o(F.runCount),1)],8,_a))),128)),a.affectedTestCases.length===0?(s(),l("tr",wa,[...v[7]||(v[7]=[t("td",{colspan:"4",class:"px-4 py-8 text-center text-gray-400 text-sm"},"No test cases in this cluster.",-1)])])):m("",!0)])])]),t("div",Sa,[v[9]||(v[9]=t("label",{class:"text-xs font-medium text-gray-500 uppercase tracking-wide"},"Triage note (optional)",-1)),c(D,{modelValue:e(n),"onUpdate:modelValue":v[2]||(v[2]=F=>J(n)?n.value=F:null),placeholder:"Add a note explaining why these tests were extracted…",rows:2,class:"text-sm w-full"},null,8,["modelValue"])]),e(C)?(s(),l("p",Ta,[c(M,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(C)),1)])):m("",!0)])]),footer:p(()=>[t("div",ja,[v[11]||(v[11]=t("div",{class:"flex-1"},null,-1)),c(O,{color:"neutral",variant:"ghost",disabled:e(d),onClick:v[3]||(v[3]=F=>b("update:open",!1))},{default:p(()=>[...v[10]||(v[10]=[w(" Cancel ",-1)])]),_:1},8,["disabled"]),c(O,{color:"warning",disabled:e(T)===0,loading:e(d),onClick:h},{default:p(()=>[w(" Extract"+o(e(T)>0?` ${e(T)}`:""),1)]),_:1},8,["disabled","loading"])])]),_:1},8,["open"])}}}),Ua=Object.assign(Ia,{__name:"ClusterExtractCasesModal"}),za={key:0,class:"flex flex-col h-full min-h-0 max-xl:overflow-y-auto xl:overflow-hidden"},Ra={class:"border-b border-default shrink-0"},Ea={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 p-1 xl:flex-1 xl:min-h-0 xl:overflow-hidden"},Aa={class:"space-y-4 xl:overflow-y-auto"},Va={class:"font-mono text-xs"},Ma=["innerHTML"],Na={class:"inline-flex items-center gap-1.5"},Fa={class:"xl:overflow-y-auto"},Ba={key:1,class:"flex items-center justify-center h-64 text-gray-500"},ko=ee({__name:"[id]",async setup(a){let U,u;const b=We(),f=parseInt(String(b.params.id)),g=Tt(f),{data:n,refresh:d}=([U,u]=Je(()=>Ut(`/api/failure-clusters/${f}`,"$y4C0kntcH9")),U=await U,u(),U);Ze(P(()=>({title:`${n.value?.signature??"Failure cluster"} — Piwi Dashboard`})));const C=x(n.value?.status??"open"),V=x(n.value?.triageNote??""),E=x(!1);ne(()=>n.value?.status,k=>{k&&(C.value=k)}),ne(()=>n.value?.triageNote,k=>{V.value=k??""});const R=P(()=>C.value!==(n.value?.status??"open")||V.value.trim()!==(n.value?.triageNote??""));async function T(){E.value=!0;try{await $fetch(`/api/failure-clusters/${f}/status`,{method:"PATCH",body:{status:C.value,triageNote:V.value.trim()||null}}),d()}finally{E.value=!1}}const h=x(!1);function I(){h.value=!1,d()}const{copyRich:v,copied:j}=rt();function G(){const k=n.value;if(!k)return;const N=window.location.href,q=se=>se.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),K=[k.errorType,`${k.occurrences} occurrence${k.occurrences===1?"":"s"}`,`${k.affectedTests} test${k.affectedTests===1?"":"s"} affected`,k.status!=="open"?k.status:null].filter(Boolean).join(" · "),W=k.diagnosis?.status==="completed"&&k.diagnosis.summary?`AI diagnosis (${k.diagnosis.category??"unknown"}, ${k.diagnosis.confidence??"?"} confidence): ${k.diagnosis.summary}`:null,Z=[`❌ Failure cluster: ${k.signature}`,K,"",...k.sampleError?["Sample error:",ve(k.sampleError),""]:[],...W?[W,""]:[],`Cluster: ${N}`].join(`
1
+ import{_ as Be}from"./Bvfmwzgw.js";import{_ as Le}from"./ze9-Ill2.js";import{d as ee,o as s,f as S,g as p,i as t,p as Y,k as e,j as c,c as l,t as o,q as m,s as ue,m as w,v as te,x as ye,F as L,y as Q,_ as ie,z as Pe,A as De,h as P,r as x,B as ne,C as Oe,l as J,D as ke,E as He,G as qe,H as fe,I as Ge,b as Ke,u as We,w as Je,e as Ze,J as Qe}from"./BPKwYP2Q.js";import{_ as be}from"./BpceIssd.js";import{_ as Xe,a as Ye}from"./IFqRT_xJ.js";import{_ as ge}from"./CQeMb57w.js";import{_ as et}from"./D2jhe9JK.js";import{_ as tt}from"./DhA17dqR.js";import{_ as $e}from"./ABGJk0pu.js";import{u as st,_ as nt,a as at,i as ot,b as lt,c as rt,s as ve,d as it}from"./Dz55UR7w.js";import{c as _e,f as ce,a as ct,b as Ce,s as pe,e as de,r as he,d as ut}from"./k-z_VVTK.js";import{_ as we,a as dt,b as mt,c as ft,d as pt,e as gt,f as xt,g as Se,h as vt,i as _t,j as ht,k as yt,l as kt}from"./B3sNtVnf.js";import{_ as xe}from"./BdFEUAlx.js";import{_ as bt}from"./DszOHBMG.js";import{_ as $t}from"./C3r_Sv1p.js";import{_ as Ct}from"./CgoAUz76.js";import{_ as wt}from"./CKB_doYB.js";import{_ as Te}from"./nCjfWTGm.js";import{u as St,p as Tt,_ as jt}from"./DjZKuUMz.js";import{b as It}from"./Bb64FEFL.js";import{u as Ut}from"./BIf1R_fu.js";import{u as zt}from"./DuMv-ugy.js";import"./iwD5atI2.js";import"./r3SBLxtE.js";import"./B7yG1G_l.js";import"./Br2K9yi_.js";import"./CoHGrO41.js";import"./DgYM3eyi.js";import"./C38aZbFJ.js";import"./CpO-ABDW.js";import"./jIF87ALb.js";import"./mGJLLqyN.js";import"./d5ZB3uxF.js";import"./B43OGXzV.js";const Rt={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Et={class:"flex items-center gap-3 min-w-0"},At={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Vt={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Mt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Nt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ft={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Bt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Lt={class:"space-y-3"},Pt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Dt={class:"flex flex-wrap gap-2"},Ot={class:"text-sm text-gray-500"},Ht={class:"flex items-start gap-3"},qt={class:"flex flex-col gap-1 shrink-0"},Gt={class:"flex-1 min-w-0 space-y-1.5"},Kt={class:"flex justify-end"},Wt=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:U}){const u=U,{summaryColSpanClass:b}=st(()=>1),f=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(g,n)=>{const d=ue,C=te,V=ge,E=ye,R=et,T=tt,h=ie,I=$e,v=nt;return s(),S(v,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",Rt,[t("div",Et,[c(d,{color:("clusterStatusColor"in g?g.clusterStatusColor:e(ct))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[w(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",At,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0)]),t("div",Vt,[t("span",Mt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Nt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),a.cluster.lastSeenAt?(s(),l("span",Ft," last seen "+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt)),1)):m("",!0)])])]),default:p(()=>[t("div",Bt,[t("div",{class:Y(e(b))},[c(T,{title:a.cluster.signature},{default:p(()=>[t("div",Lt,[a.cluster.title?(s(),l("p",Pt,o(a.cluster.title),1)):m("",!0),t("div",Dt,[a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests")+" affected ",1)]),_:1}),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),c(V,{topic:"cluster.concept"})]),t("p",Ot,[n[2]||(n[2]=w(" First seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(L,{key:0},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.firstSeenAt))+") ",1)],64)):m("",!0),n[3]||(n[3]=w(" · Last seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(L,{key:1},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt))+") ",1)],64)):m("",!0),a.cluster.lastSeenRunStatus?(s(),S(R,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):m("",!0)])])]),_:1},8,["title"])],2),c(T,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",Ht,[t("div",qt,[(s(),l(L,null,Q(f,j=>c(h,{key:j.value,size:"xs",class:"justify-start",color:a.triageStatus===j.value?j.color:"neutral",variant:a.triageStatus===j.value?"solid":"outline",onClick:G=>u("update:triageStatus",j.value)},{default:p(()=>[w(o(j.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",Gt,[c(I,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":n[0]||(n[0]=j=>u("update:triageNote",j))},null,8,["model-value"]),t("div",Kt,[a.triageChanged?(s(),S(h,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:n[1]||(n[1]=j=>u("save-triage"))},{default:p(()=>[...n[4]||(n[4]=[w(" Save ",-1)])]),_:1},8,["loading"])):m("",!0)])])])]),_:1})])]),_:1})}}}),Jt=Object.assign(Wt,{__name:"ClusterSummary"}),Zt={class:"divide-y divide-default"},Qt={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},Xt={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},Yt=ee({__name:"TestEvidenceSignals",props:De({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const U=a,u=P(()=>Array.isArray(U.consoleLogs)?U.consoleLogs.filter(d=>d.type==="error"||d.type==="warning"):[]),b=P(()=>Array.isArray(U.networkRequests)?U.networkRequests.filter(d=>d.status&&d.status>=400):[]),f=P(()=>u.value.length>0||b.value.length>0),g=P(()=>{const d=[];return u.value.length&&d.push(`${u.value.length} console`),b.value.length&&d.push(`${b.value.length} network`),d.join(", ")}),n=Pe(a,"open");return(d,C)=>{const V=te,E=ue,R=we;return e(f)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(g)})`,open:n.value,"onUpdate:open":C[0]||(C[0]=T=>n.value=T)},{default:p(()=>[t("div",Zt,[e(u).length>0?(s(),l(L,{key:0},[C[1]||(C[1]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Console")],-1)),(s(!0),l(L,null,Q(e(u),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[c(V,{name:T.type==="error"?"i-lucide-x-circle":"i-lucide-alert-triangle",class:Y(["size-3.5 mt-0.5 shrink-0",T.type==="error"?"text-red-500":"text-yellow-500"])},null,8,["name","class"]),t("p",Qt,o(T.text),1)]))),128))],64)):m("",!0),e(b).length>0?(s(),l(L,{key:1},[C[2]||(C[2]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Network")],-1)),(s(!0),l(L,null,Q(e(b),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[c(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[w(o(T.status),1)]),_:2},1032,["color"]),t("p",Xt,o(T.url),1)]))),128))],64)):m("",!0)])]),_:1},8,["label","open"])):m("",!0)}}}),es=Object.assign(Yt,{__name:"TestEvidenceSignals"}),ts={class:"space-y-3"},ss={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},ns=["title","onClick"],as={key:0,class:"opacity-60 ml-1"},os={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},ls={class:"min-w-0"},rs={class:"text-sm font-medium break-words"},is={key:2,class:"flex items-center justify-center py-10"},cs={key:0,class:"flex flex-wrap gap-1.5"},us={class:"divide-y divide-default"},ds={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ms={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},fs={class:"overflow-x-auto max-h-72"},ps={class:"max-h-64 overflow-auto"},gs=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const U=a,u=x(U.affectedTestCases[0]?.recentTestRunsCaseId??null),b=P(()=>U.affectedTestCases.find(r=>r.recentTestRunsCaseId===u.value)),f=x(null),g=x([]),n=x(!1),d=x(!1),C=x(!1),V=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){C.value=!1,V.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(r){I();const $=h.get(r);if($){f.value=$.detail,g.value=$.traces,n.value=!1,d.value=!1;return}n.value=!0,d.value=!0,f.value=null,g.value=[];const[B,H]=await Promise.allSettled([$fetch(`/api/test-run-cases/${r}`),$fetch(`/api/test-run-cases/${r}/traces`)]);B.status==="fulfilled"&&(f.value=B.value),n.value=!1,H.status==="fulfilled"&&(g.value=H.value),d.value=!1,B.status==="fulfilled"&&H.status==="fulfilled"&&h.set(r,{detail:B.value,traces:H.value})}const j=new Map,G=x(null),D=x("trace"),M=P(()=>G.value?.frames??[]);async function O(r){if(G.value=j.get(r)??null,j.has(r)||g.value.length===0)return;const $=f.value?.testRun?.id;if($)try{const B=await $fetch(`/api/test-runs/${$}/cases/${r}/trace-stacks`),H=B.status==="ok"&&B.frames?.length?B:null;j.set(r,H),u.value===r&&(G.value=H)}catch{j.set(r,null)}}ne([f,g],()=>{D.value="trace",u.value&&O(u.value)}),ne(u,r=>{r&&v(r)}),Oe(()=>{u.value&&v(u.value)});const A=P(()=>{const r=f.value?.steps;return Array.isArray(r)?r.filter($=>$.error):[]}),F=P(()=>f.value?.testSource?f.value.testSource.split(`
2
+ `).length:0),z=P(()=>{const r=f.value;if(!r)return[];const $=r.attachments.filter(y=>ot(y.path,y.contentType)).length,B=r.attachments.filter(y=>lt(y.path,y.contentType)).length,H=Array.isArray(r.consoleLogs)?r.consoleLogs.filter(y=>y.type==="error"||y.type==="warning").length:0,X=Array.isArray(r.networkRequests)?r.networkRequests.filter(y=>(y.status??0)>=400).length:0;return[{icon:"i-lucide-image",label:"screenshots",count:$},{icon:"i-lucide-video",label:"videos",count:B},{icon:"i-lucide-bug-play",label:"traces",count:g.value.length},{icon:"i-lucide-list-checks",label:"failing steps",count:A.value.length},{icon:"i-lucide-triangle-alert",label:"signals",count:H+X},{icon:"i-lucide-code",label:"source",count:r.testSourceFrames?.length||(r.testSource?1:0)},{icon:"i-lucide-accessibility",label:"ARIA",count:r.ariaSnapshot?1:0}].filter(y=>y.count>0)});return(r,$)=>{const B=xe,H=ie,X=te,y=ue,i=dt,k=mt,N=ft,q=we,K=es,W=bt,Z=pt,ae=gt,se=at,oe=xt;return s(),l("div",ts,[a.affectedTestCases.length>1?(s(),l("div",ss,[(s(!0),l(L,null,Q(a.affectedTestCases,_=>(s(),l("button",{key:_.recentTestRunsCaseId,class:Y(["px-3 py-1.5 text-xs whitespace-nowrap border-b-2 -mb-px transition-colors",e(u)===_.recentTestRunsCaseId?"border-primary text-primary font-medium":"border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:_.title,onClick:le=>u.value=_.recentTestRunsCaseId},[w(o(_.title.split(" › ").pop())+" ",1),_.runCount>1?(s(),l("span",as,o(_.runCount)+"×",1)):m("",!0)],10,ns))),128))])):m("",!0),e(b)?(s(),l("div",os,[t("div",ls,[t("p",rs,o(e(b).title),1),c(B,{"file-path":e(b).filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])]),c(H,{to:`/test-run-cases/${e(b).recentTestRunsCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:p(()=>[...$[6]||($[6]=[w(" Open test run case ",-1)])]),_:1},8,["to"])])):m("",!0),e(n)?(s(),l("div",is,[c(X,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(f)?(s(),l(L,{key:3},[e(z).length?(s(),l("div",cs,[(s(!0),l(L,null,Q(e(z),_=>(s(),S(y,{key:_.label,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:p(()=>[c(X,{name:_.icon,class:"size-3"},null,8,["name"]),w(" "+o(_.count)+" "+o(_.label),1)]),_:2},1024))),128))])):m("",!0),c(i,{attachments:e(f).attachments},null,8,["attachments"]),c(k,{attachments:e(f).attachments},null,8,["attachments"]),c(N,{traces:e(g),loading:e(d)},null,8,["traces","loading"]),e(A).length>0?(s(),S(q,{key:1,icon:"i-lucide-list-checks",label:"Failing steps",count:e(A).length,open:e(C),"onUpdate:open":$[0]||($[0]=_=>J(C)?C.value=_:null)},{default:p(()=>[t("div",us,[(s(!0),l(L,null,Q(e(A),(_,le)=>(s(),l("div",{key:le,class:"px-3 py-2 space-y-0.5"},[t("p",ds,o(le+1)+". "+o(_.title),1),_.error?.message?(s(),l("p",ms,o(_.error.message),1)):m("",!0)]))),128))])]),_:1},8,["count","open"])):m("",!0),c(K,{"console-logs":e(f).consoleLogs,"network-requests":e(f).networkRequests,open:e(V),"onUpdate:open":$[1]||($[1]=_=>J(V)?V.value=_:null)},null,8,["console-logs","network-requests","open"]),e(f).testSourceFrames?.length||e(f).testSource||e(M).length?(s(),S(q,{key:2,icon:"i-lucide-code",label:"Test source",count:e(M).length||e(f).testSourceFrames?.length||e(F),open:e(E),"onUpdate:open":$[3]||($[3]=_=>J(E)?E.value=_:null)},{default:p(()=>[e(M).length&&(e(f).testSourceFrames?.length||e(f).testSource)?(s(),S(W,{key:0,modelValue:e(D),"onUpdate:modelValue":$[2]||($[2]=_=>J(D)?D.value=_:null),items:[{label:`Full stack (${e(M).length})`,value:"trace"},{label:`Captured (${e(f).testSourceFrames?.length||1})`,value:"captured"}],size:"xs",variant:"link",class:"mb-1.5",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])):m("",!0),t("div",fs,[e(D)==="trace"&&e(M).length?(s(),S(Z,{key:0,frames:e(M),"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSourceFrames?.length?(s(),S(ae,{key:1,frames:e(f).testSourceFrames,"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSource?(s(),S(se,{key:2,text:"```typescript\n"+e(f).testSource+"\n```"},null,8,["text"])):m("",!0)])]),_:1},8,["count","open"])):m("",!0),e(f).ariaSnapshot?(s(),S(q,{key:3,icon:"i-lucide-accessibility",label:"ARIA snapshot",open:e(R),"onUpdate:open":$[4]||($[4]=_=>J(R)?R.value=_:null)},{default:p(()=>[t("div",ps,[c(se,{text:"```yaml\n"+e(f).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},8,["open"])):m("",!0),e(f).pageState?(s(),S(q,{key:4,icon:"i-lucide-database",label:"App state",open:e(T),"onUpdate:open":$[5]||($[5]=_=>J(T)?T.value=_:null)},{default:p(()=>[c(oe,{"page-state":e(f).pageState,plain:""},null,8,["page-state"])]),_:1},8,["open"])):m("",!0)],64)):m("",!0)])}}}),xs=Object.assign(gs,{__name:"ClusterTestEvidence"}),vs={key:0,class:"flex items-center gap-1.5 overflow-hidden min-w-0"},_s={class:"text-primary shrink-0"},hs={class:"text-gray-500 truncate text-xs font-sans"},ys={key:1,class:"text-primary text-xs"},ks={key:2,class:"text-gray-400 font-sans text-xs"},bs={class:"w-96 p-2 space-y-2"},$s={class:"flex items-center gap-1"},Cs={class:"flex items-center gap-1"},ws={key:0,class:"flex items-center gap-2 px-2 py-1.5 text-xs rounded-md bg-primary/5 text-gray-600 dark:text-gray-300"},Ss={class:"font-medium text-green-600 dark:text-green-400"},Ts={class:"font-medium text-red-600 dark:text-red-400"},js={class:"text-gray-400"},Is={key:1,class:"flex items-center justify-center gap-2 py-6 text-gray-400"},Us={key:2,class:"py-4 text-center text-sm text-red-500"},zs={key:3,class:"flex items-start gap-2 px-2 py-2 text-xs text-amber-700 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 rounded-md"},Rs={key:4,class:"max-h-80 overflow-y-auto space-y-px"},Es={class:"text-xs text-primary"},As={key:1,class:"py-4 text-center text-sm text-gray-400"},Vs=["onClick"],Ms={class:"text-xs text-primary shrink-0 w-14 pt-px"},Ns={class:"flex-1 min-w-0"},Fs={class:"text-xs font-medium leading-snug truncate"},Bs={class:"text-xs text-gray-400 leading-snug truncate"},Ls=ee({__name:"CommitPicker",props:{modelValue:{},clusterId:{}},emits:["update:modelValue"],setup(a,{emit:U}){const u=a,b=U,f=x(!1),g=x(""),n=x([]),d=x(null),C=x(null),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x([]),I=x(!1),v=x(void 0),j=P(()=>{if(!u.modelValue)return null;const z=u.modelValue.trim();return n.value.find($=>$.sha===z||$.sha.startsWith(z))??{sha:z,shortSha:z.slice(0,7),message:"",author:"",date:""}});async function G(){if(!h.value.length){I.value=!0;try{const z=await $fetch(`/api/failure-clusters/${u.clusterId}/branches`);h.value=z.branches}catch{}finally{I.value=!1}}}async function D(){const z=u.modelValue||"";V.value=!0,E.value=!1,T.value=null;try{const r={};z&&(r.baseline=z),v.value&&(r.branch=v.value);const $=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:r});n.value=$.commits,C.value=$.aggregate,d.value=$.error??null,T.value=z}catch{E.value=!0}finally{V.value=!1}}ne(v,()=>{n.value=[],T.value=null,D()}),ne(f,async z=>{if(z){await Promise.all([G(),D()]),await qe();const r=R.value?.$el?.querySelector("input")??R.value?.$el;r instanceof HTMLElement&&r.focus()}else g.value=""});const M=P(()=>Ce(n.value,g.value)),O=P(()=>{const z=g.value.trim();return!/^[0-9a-f]{7,40}$/i.test(z)||M.value.some(r=>r.sha.startsWith(z.toLowerCase()))?null:z});function A(z){b("update:modelValue",z),f.value=!1}function F(z){z.stopPropagation(),d.value=null,C.value=null,b("update:modelValue",""),f.value=!1}return(z,r)=>{const $=ie,B=te,H=$t,X=ke,y=He;return s(),S(y,{open:e(f),"onUpdate:open":r[4]||(r[4]=i=>J(f)?f.value=i:null)},{content:p(()=>[t("div",bs,[t("div",$s,[c(B,{name:"i-lucide-git-branch",class:"size-3.5 text-gray-400 shrink-0"}),c(H,{modelValue:e(v),"onUpdate:modelValue":r[0]||(r[0]=i=>J(v)?v.value=i:null),items:e(h),placeholder:"Default branch",size:"xs",class:"flex-1",loading:e(I),disabled:e(I)},null,8,["modelValue","items","loading","disabled"])]),t("div",Cs,[c(X,{ref_key:"searchInputRef",ref:R,modelValue:e(g),"onUpdate:modelValue":r[1]||(r[1]=i=>J(g)?g.value=i:null),placeholder:"Search message, author, SHA…",size:"xs",icon:"i-lucide-search",class:"flex-1"},null,8,["modelValue"]),a.modelValue?(s(),S($,{key:0,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Clear baseline",onClick:r[2]||(r[2]=i=>F(i))})):m("",!0)]),e(C)&&a.modelValue&&!e(V)?(s(),l("div",ws,[c(B,{name:"i-lucide-git-compare-arrows",class:"size-3.5 shrink-0 text-primary"}),r[5]||(r[5]=t("span",null,"Since baseline:",-1)),t("span",Ss,"+"+o(e(C).linesAdded),1),t("span",Ts,"-"+o(e(C).linesRemoved),1),t("span",js,"across "+o(e(C).filesChanged)+" file"+o(e(C).filesChanged===1?"":"s"),1)])):m("",!0),e(V)?(s(),l("div",Is,[c(B,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),r[6]||(r[6]=t("span",{class:"text-sm"},"Loading commits…",-1))])):e(E)?(s(),l("div",Us," Failed to load commits — check your SCM token in Settings → AI ")):e(d)&&!e(V)&&e(n).length===0?(s(),l("div",zs,[c(B,{name:"i-lucide-triangle-alert",class:"size-3.5 shrink-0 mt-0.5"}),t("span",null,o(e(d)),1)])):(s(),l("div",Rs,[e(O)?(s(),l("button",{key:0,class:"w-full text-left px-2 py-1.5 rounded flex items-center gap-2 hover:bg-elevated transition-colors border border-dashed border-default",onClick:r[3]||(r[3]=i=>A(e(O)))},[c(B,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),r[7]||(r[7]=t("span",{class:"text-xs text-gray-500"},"Use commit",-1)),t("code",Es,o(e(O).slice(0,7)),1)])):m("",!0),e(M).length===0&&!e(O)?(s(),l("div",As,o(e(g)?"No commits match":"No commits available"),1)):m("",!0),(s(!0),l(L,null,Q(e(M),i=>(s(),l("button",{key:i.sha,class:Y(["w-full text-left px-2 py-1.5 rounded flex items-start gap-2 hover:bg-elevated transition-colors",a.modelValue===i.sha?"bg-primary/10 ring-1 ring-inset ring-primary/30":""]),onClick:k=>A(i.sha)},[t("code",Ms,o(i.shortSha),1),t("div",Ns,[t("p",Fs,o(i.message),1),t("p",Bs,[w(o(i.author),1),i.date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(i.date)),1)],64)):m("",!0)])]),a.modelValue===i.sha?(s(),S(B,{key:0,name:"i-lucide-check",class:"size-3.5 text-primary shrink-0 mt-0.5"})):m("",!0)],10,Vs))),128))]))])]),default:p(()=>[c($,{size:"xs",color:"neutral",variant:"outline",icon:a.modelValue?"i-lucide-git-branch-plus":"i-lucide-git-branch","trailing-icon":"i-lucide-chevron-down",class:"min-w-36 max-w-48 font-mono"},{default:p(()=>[e(j)?.message?(s(),l("span",vs,[t("code",_s,o(e(j).shortSha),1),t("span",hs,o(e(j).message),1)])):a.modelValue?(s(),l("span",ys,o(a.modelValue.slice(0,7))+"…",1)):(s(),l("span",ks,"baseline commit…"))]),_:1},8,["icon"])]),_:1},8,["open"])}}}),Ps=Object.assign(Ls,{__name:"CommitPicker"}),Ds={class:"space-y-3"},Os={key:0,class:"space-y-1"},Hs={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Gs={class:"text-xs text-gray-400 shrink-0"},Ks={class:"text-xs text-gray-700 dark:text-gray-300 truncate"},Ws={class:"space-y-1"},Js={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},Zs={key:0,class:"text-yellow-500 font-normal normal-case"},Qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Xs=["onClick"],Ys={class:"text-xs font-mono flex-1 truncate text-gray-700 dark:text-gray-300"},en={class:"text-xs text-gray-400 shrink-0 tabular-nums"},tn={key:0,class:"text-green-500"},sn={key:1,class:"text-gray-300 mx-0.5"},nn={key:2,class:"text-red-500"},an={key:0,class:"border-t border-default overflow-x-auto max-h-96"},on=ee({__name:"ScmChangesView",props:{changes:{}},setup(a){const U=x(new Set);function u(b){const f=new Set(U.value);f.has(b)?f.delete(b):f.add(b),U.value=f}return(b,f)=>{const g=te,n=Se;return s(),l("div",Ds,[a.changes.commits.length>0?(s(),l("div",Os,[t("p",Hs,o(a.changes.commits.length)+" commit"+o(a.changes.commits.length===1?"":"s"),1),t("div",qs,[(s(!0),l(L,null,Q(a.changes.commits,d=>(s(),l("div",{key:d.sha,class:"flex items-center gap-2 px-3 py-1.5"},[c(g,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),t("code",Gs,o(d.sha.slice(0,7)),1),t("span",Ks,o(d.message),1)]))),128))])])):m("",!0),t("div",Ws,[t("p",Js,[w(o(a.changes.files.length)+" file"+o(a.changes.files.length===1?"":"s")+" changed ",1),a.changes.patchesOmitted?(s(),l("span",Zs," — diff too large, file names only ")):m("",!0)]),t("div",Qs,[(s(!0),l(L,null,Q(a.changes.files,d=>(s(),l("div",{key:d.filename},[t("button",{class:Y(["w-full flex items-center gap-2 px-3 py-1.5 text-left hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors",d.patch?"cursor-pointer":"cursor-default"]),onClick:C=>d.patch&&u(d.filename)},[c(g,{name:("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).icon,class:Y(["size-3.5 shrink-0",("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).color])},null,8,["name","class"]),t("span",Ys,o(d.filename),1),t("span",en,[d.additions?(s(),l("span",tn,"+"+o(d.additions),1)):m("",!0),d.additions&&d.deletions?(s(),l("span",sn,"/")):m("",!0),d.deletions?(s(),l("span",nn,"-"+o(d.deletions),1)):m("",!0)]),d.patch?(s(),S(g,{key:0,name:e(U).has(d.filename)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-3.5 text-gray-400 shrink-0"},null,8,["name"])):m("",!0)],10,Xs),d.patch&&e(U).has(d.filename)?(s(),l("div",an,[c(n,{patch:d.patch},null,8,["patch"])])):m("",!0)]))),128))])])])}}}),ln=Object.assign(on,{__name:"ScmChangesView"}),rn={class:"border border-default rounded-lg overflow-clip text-xs font-mono"},cn={class:"sticky top-0 z-10 flex items-center justify-between px-3 py-1.5 bg-elevated border-b border-default text-gray-600 dark:text-gray-300"},un={class:"font-medium truncate"},dn={class:"shrink-0 flex items-center gap-1.5 ml-2 text-[11px]"},mn={key:0,class:"text-green-600 dark:text-green-400"},fn={key:1,class:"text-red-600 dark:text-red-400"},pn={key:1,class:"px-3 py-2 text-gray-400 text-[11px]"},gn=ee({__name:"DiffFile",props:{file:{}},setup(a){return(U,u)=>{const b=ue,f=Se;return s(),l("div",rn,[t("div",cn,[t("span",un,o(a.file.filename),1),t("span",dn,[a.file.additions?(s(),l("span",mn,"+"+o(a.file.additions),1)):m("",!0),a.file.deletions?(s(),l("span",fn,"-"+o(a.file.deletions),1)):m("",!0),c(b,{label:a.file.status,size:"xs",variant:"subtle",color:("scmFileStatusMeta"in U?U.scmFileStatusMeta:e(pe))(a.file.status).badgeColor},null,8,["label","color"])])]),a.file.patch?(s(),S(f,{key:0,patch:a.file.patch},null,8,["patch"])):(s(),l("div",pn,"No patch available"))])}}}),xn=Object.assign(gn,{__name:"DiffFile"}),vn={class:"inline-flex items-center gap-1"},_n={class:"flex h-[72vh] overflow-hidden"},hn={class:"w-72 shrink-0 border-r border-default flex flex-col"},yn={class:"p-2 border-b border-default space-y-2 shrink-0"},kn={class:"flex items-center gap-2 text-xs text-gray-500"},bn={class:"ml-auto"},$n={key:2,class:"flex-1 overflow-y-auto flex flex-col"},Cn={key:0,class:"py-6 text-center text-sm text-gray-400 flex-1"},wn=["onClick"],Sn=["checked","onChange"],Tn={class:"flex-1 min-w-0"},jn={class:"text-xs font-medium leading-snug truncate"},In={class:"text-[10px] text-gray-400 leading-snug mt-0.5 flex items-center gap-1 min-w-0"},Un={class:"text-primary shrink-0"},zn={class:"truncate"},Rn={key:0,class:"shrink-0"},En={key:1,class:"p-2 shrink-0 space-y-1.5"},An={key:0,class:"flex items-center gap-1.5 text-xs text-red-500 px-1"},Vn={class:"flex-1 overflow-y-auto flex flex-col min-w-0"},Mn={key:0,class:"flex-1 flex items-center justify-center text-gray-400 text-sm"},Nn={key:2,class:"flex-1 p-4 space-y-3"},Fn={key:0,class:"space-y-0.5 pb-3 border-b border-default"},Bn={class:"flex items-center gap-2"},Ln={class:"text-xs font-mono text-primary"},Pn={class:"text-xs text-gray-400"},Dn={class:"text-sm font-semibold"},On={key:1,class:"text-sm text-gray-400 pt-2"},Hn={key:4,class:"flex-1 flex items-center justify-center text-sm text-gray-400"},qn={class:"flex items-center gap-3 w-full"},Gn={class:"flex-1 flex items-center gap-2 text-sm text-gray-500 min-w-0"},Kn={class:"font-medium text-gray-700 dark:text-gray-200 shrink-0"},Wn={class:"shrink-0"},Jn={class:"text-green-600 dark:text-green-400 shrink-0 font-medium"},Zn={class:"text-red-600 dark:text-red-400 shrink-0 font-medium"},Qn={key:1,class:"text-gray-400 text-xs shrink-0"},Xn={key:1},me=50,Yn=ee({__name:"CommitBrowserModal",props:{open:{type:Boolean},clusterId:{},initialSelected:{},autoSelectedShas:{}},emits:["update:open","confirm"],setup(a,{emit:U}){const u=a,b=P(()=>new Set(u.autoSelectedShas??[])),f=U,g=x(""),n=x([]),d=x(me),C=x(!1),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x(new Set),I=x(null),v=Ge({}),j=x(null),G=x(!1),D=x(null),M=P(()=>n.value.find(y=>y.sha===I.value)??null),O=P(()=>Ce(n.value,g.value)),A=P(()=>{let y=0,i=0,k=0,N=0;for(const q of h.value){if(!(q in v)){N++;continue}const K=v[q];K&&(y+=K.files.length,i+=K.files.reduce((W,Z)=>W+Z.additions,0),k+=K.files.reduce((W,Z)=>W+Z.deletions,0))}return{files:y,linesAdded:i,linesRemoved:k,unreviewed:N}});async function F(y){y?(V.value=!0,R.value=null):(E.value=!0,T.value=null);try{const i=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:{limit:d.value}});n.value=i.commits,C.value=i.hasMore??!1,i.error&&!i.commits.length&&(y?R.value=i.error:T.value=i.error),y&&i.commits[0]&&r(i.commits[0].sha)}catch(i){y?R.value=de(i):T.value=de(i)}finally{V.value=!1,E.value=!1}}async function z(){d.value+=me,await F(!1)}ne(()=>u.open,async y=>{if(y){if(h.value=new Set(u.initialSelected??[]),n.value.length){!I.value&&n.value[0]&&r(n.value[0].sha);return}d.value=me,await F(!0)}});async function r(y){if(I.value!==y){if(I.value=y,D.value=null,y in v){j.value=v[y],G.value=!1;return}j.value=null,G.value=!0;try{const i=await $fetch(`/api/failure-clusters/${u.clusterId}/commit-diff`,{query:{sha:y}});v[y]=i,I.value===y&&(j.value=i)}catch(i){I.value===y&&(D.value=de(i))}finally{I.value===y&&(G.value=!1)}}}function $(y){const i=new Set(h.value);i.has(y)?i.delete(y):i.add(y),h.value=i}function B(){h.value=new Set(O.value.map(y=>y.sha))}function H(){h.value=new Set}function X(){f("confirm",[...h.value]),f("update:open",!1)}return(y,i)=>{const k=ge,N=ke,q=Ct,K=ie,W=wt,Z=ue,ae=te,se=xn,oe=Te;return s(),S(oe,{open:a.open,title:"Browse commits",ui:{content:"max-w-6xl",body:"p-0 overflow-hidden"},"onUpdate:open":i[4]||(i[4]=_=>f("update:open",_))},{title:p(()=>[t("span",vn,[i[5]||(i[5]=w("Browse commits ",-1)),c(k,{topic:"cluster.commit-browser"})])]),body:p(()=>[t("div",_n,[t("div",hn,[t("div",yn,[c(N,{modelValue:e(g),"onUpdate:modelValue":i[0]||(i[0]=_=>J(g)?g.value=_:null),placeholder:"Search commits…",size:"xs",icon:"i-lucide-search"},null,8,["modelValue"]),t("div",kn,[t("button",{class:"hover:text-primary transition-colors",onClick:B},"All"),i[6]||(i[6]=t("span",null,"·",-1)),t("button",{class:"hover:text-primary transition-colors",onClick:H},"None"),t("span",bn,o(e(h).size>0?`${e(h).size} selected`:"none selected"),1)])]),e(V)?(s(),S(q,{key:0,text:"Loading…",padded:!1,class:"flex-1"})):e(R)?(s(),S(W,{key:1,text:e(R),padded:!1,class:"flex-1 p-4"},{action:p(()=>[c(K,{size:"xs",color:"neutral",variant:"outline",onClick:i[1]||(i[1]=_=>F(!0))},{default:p(()=>[...i[7]||(i[7]=[w(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):(s(),l("div",$n,[e(O).length===0?(s(),l("div",Cn,o(e(g)?"No commits match":"No commits"),1)):m("",!0),(s(!0),l(L,null,Q(e(O),_=>(s(),l("button",{key:_.sha,class:Y(["w-full text-left px-2.5 py-2 flex items-start gap-2.5 hover:bg-elevated transition-colors border-b border-default/50 last:border-0 shrink-0",e(I)===_.sha?"bg-elevated":""]),onClick:le=>r(_.sha)},[t("input",{type:"checkbox",checked:e(h).has(_.sha),class:"mt-0.5 shrink-0 cursor-pointer accent-primary",onClick:i[2]||(i[2]=fe(()=>{},["stop"])),onChange:le=>$(_.sha)},null,40,Sn),t("div",Tn,[t("p",jn,o(_.message||"(no message)"),1),t("p",In,[t("code",Un,o(_.shortSha),1),t("span",zn,o(_.author),1),_.date?(s(),l("span",Rn,"· "+o(e(ce)(_.date)),1)):m("",!0),e(b).has(_.sha)?(s(),S(Z,{key:1,size:"xs",color:"info",variant:"soft",class:"shrink-0"},{default:p(()=>[...i[8]||(i[8]=[w(" auto ",-1)])]),_:1})):m("",!0)])])],10,wn))),128)),e(C)&&!e(g)?(s(),l("div",En,[e(T)?(s(),l("p",An,[c(ae,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(T)),1)])):m("",!0),c(K,{size:"xs",color:"neutral",variant:"outline",block:"",loading:e(E),onClick:z},{default:p(()=>[...i[9]||(i[9]=[w(" Load more ",-1)])]),_:1},8,["loading"])])):m("",!0)]))]),t("div",Vn,[e(I)?e(G)?(s(),S(q,{key:1,text:"Loading diff…",padded:!1,class:"flex-1"})):e(j)?(s(),l("div",Nn,[e(M)?(s(),l("div",Fn,[t("div",Bn,[t("code",Ln,o(e(M).shortSha),1),t("span",Pn,[w(o(e(M).author),1),e(M).date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(e(M).date)),1)],64)):m("",!0)])]),t("p",Dn,o(e(M).message),1)])):m("",!0),e(j).files.length===0?(s(),l("div",On,"No file changes in this commit")):m("",!0),(s(!0),l(L,null,Q(e(j).files,_=>(s(),S(se,{key:_.filename,file:_},null,8,["file"]))),128))])):e(D)?(s(),S(W,{key:3,text:e(D),padded:!1,class:"flex-1 p-6"},{action:p(()=>[...i[10]||(i[10]=[t("p",{class:"text-xs text-gray-400"},"Click the commit again to retry",-1)])]),_:1},8,["text"])):(s(),l("div",Hn," Diff not available for this commit ")):(s(),l("div",Mn," Select a commit to view its diff "))])])]),footer:p(()=>[t("div",qn,[t("div",Gn,[e(h).size>0?(s(),l(L,{key:0},[t("span",Kn,o(e(h).size)+" commit"+o(e(h).size===1?"":"s"),1),e(A).files>0||e(A).linesAdded>0||e(A).linesRemoved>0?(s(),l(L,{key:0},[i[11]||(i[11]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("span",Wn,o(e(A).files)+" file"+o(e(A).files===1?"":"s"),1),t("span",Jn,"+"+o(e(A).linesAdded),1),t("span",Zn,"-"+o(e(A).linesRemoved),1)],64)):m("",!0),e(A).unreviewed>0?(s(),l("span",Qn," ("+o(e(A).unreviewed)+" unreviewed) ",1)):m("",!0)],64)):(s(),l("span",Xn,"No commits selected"))]),c(K,{color:"neutral",variant:"ghost",onClick:i[3]||(i[3]=_=>f("update:open",!1))},{default:p(()=>[...i[12]||(i[12]=[w(" Cancel ",-1)])]),_:1}),c(K,{color:"primary",disabled:e(h).size===0,onClick:X},{default:p(()=>[...i[13]||(i[13]=[w(" Add to context ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["open"])}}}),ea=Object.assign(Yn,{__name:"CommitBrowserModal"});function je(a){return{scmStatus:P(()=>{const u=a.value?.scm;if(!u)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"Git context unavailable",detail:""};if(u.baseCommitUsed){if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};const g=u.patchesOmitted?", no patches (diff too large)":u.patchesTruncated?`, ${u.patchedFilesCount} with patches (some cut)`:`, ${u.patchedFilesCount} with patches`;return{color:"text-blue-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · ${u.filesCount} files${g}`,detail:u.hasLastGreen?"overrides last passing run baseline":"no last passing run"}}if(!u.hasLastGreen)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No last passing run",detail:"enter a baseline commit below to enable diff"};if(!u.hasCommitRange)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No commit range",detail:"reporter did not send SCM metadata"};if(!u.provider)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:"Unsupported SCM host",detail:"only GitHub, GitLab and Bitbucket are supported"};if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};if(u.patchesOmitted)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files`,detail:"diff too large — file list only, no patches"};const b=u.patchesTruncated?", some patches cut (budget)":"",f=u.commitsCount>0?` · ${u.commitsCount} commit${u.commitsCount>1?"s":""}`:"";return{color:"text-green-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files · ${u.patchedFilesCount} with patches${b}${f}`,detail:""}})}}const ta={class:"space-y-3"},sa={class:"pb-2 border-b border-default"},na={class:"flex items-center gap-2 flex-wrap"},aa={class:"text-xs text-gray-500 font-medium shrink-0 inline-flex items-center gap-1"},oa={class:"flex items-center gap-1.5 ml-auto"},la={key:0,class:"flex items-center gap-1 px-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium"},ra={key:0,class:"flex items-start gap-1.5 text-xs px-2 py-1.5 rounded-md bg-elevated border border-default"},ia={key:0,class:"text-gray-400 ml-1"},ca={key:1,class:"flex items-center justify-center py-6"},ua={key:3,class:"text-xs text-gray-400 text-center py-4"},da=ee({__name:"ClusterInvestigation",setup(a){const{clusterId:U,baseCommit:u,selectedCommitShas:b,autoSelectedCommits:f,baseCommitIsPinned:g,coverage:n,scmChanges:d,contextLoading:C,refreshContext:V}=St(),E=x(!1),{scmStatus:R}=je(n);return(T,h)=>{const I=ge,v=Ps,j=te,G=be,D=ie,M=ln,O=ea;return s(),l(L,null,[t("div",ta,[t("div",sa,[t("div",na,[t("span",aa,[h[5]||(h[5]=w(" Baseline ",-1)),c(I,{topic:"cluster.baseline"})]),c(v,{modelValue:e(u),"onUpdate:modelValue":h[0]||(h[0]=A=>J(u)?u.value=A:null),"cluster-id":e(U)},null,8,["modelValue","cluster-id"]),e(g)?(s(),S(G,{key:0,text:"Baseline commit pinned for this cluster"},{default:p(()=>[c(j,{name:"i-lucide-pin",class:"size-3.5 text-primary shrink-0"})]),_:1})):m("",!0),t("div",oa,[e(b).length?(s(),l("div",la,[c(j,{name:"i-lucide-git-commit-horizontal",class:"size-3"}),t("span",null,o(e(b).length)+" commit"+o(e(b).length===1?"":"s"),1),t("button",{class:"ml-0.5 hover:opacity-70 transition-opacity",onClick:h[1]||(h[1]=A=>b.value=[])},[c(j,{name:"i-lucide-x",class:"size-3"})])])):m("",!0),c(D,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list",onClick:h[2]||(h[2]=A=>E.value=!0)},{default:p(()=>[...h[6]||(h[6]=[w(" Browse ",-1)])]),_:1}),c(D,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"outline",loading:e(C),onClick:e(V)},null,8,["loading","onClick"])])])]),e(n)?(s(),l("div",ra,[c(j,{name:e(R).icon,class:Y(["size-3.5 mt-0.5 shrink-0",e(R).color])},null,8,["name","class"]),t("div",null,[t("span",{class:Y(e(R).color)},o(e(R).text),3),e(R).detail?(s(),l("span",ia,"— "+o(e(R).detail),1)):m("",!0)])])):m("",!0),e(C)&&!e(d)?(s(),l("div",ca,[c(j,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-gray-400"})])):e(d)?(s(),S(M,{key:2,changes:e(d)},null,8,["changes"])):e(n)&&!e(C)&&!e(d)?(s(),l("p",ua," No changes found in this range. ")):m("",!0)]),c(O,{open:e(E),"onUpdate:open":h[3]||(h[3]=A=>J(E)?E.value=A:null),"cluster-id":e(U),"initial-selected":e(b),"auto-selected-shas":e(f),onConfirm:h[4]||(h[4]=A=>b.value=A)},null,8,["open","cluster-id","initial-selected","auto-selected-shas"])],64)}}}),ma=Object.assign(da,{__name:"ClusterInvestigation"}),fa={class:"flex flex-col h-[60vh]"},pa={class:"flex items-center gap-3 px-4 py-2.5 border-b border-default text-sm shrink-0"},ga={key:0,class:"ml-auto text-xs text-gray-500"},xa={class:"flex-1 overflow-y-auto"},va={class:"w-full text-sm"},_a=["onClick"],ha={class:"px-4 py-2.5"},ya=["checked","onChange"],ka={class:"px-2 py-2.5 min-w-0"},ba={class:"truncate font-medium text-gray-800 dark:text-gray-200 max-w-[24rem]"},$a={class:"px-2 py-2.5 text-gray-500 text-xs max-w-[16rem] hidden sm:table-cell"},Ca={class:"px-2 py-2.5 text-right text-gray-500 text-xs"},wa={key:0},Sa={class:"shrink-0 border-t border-default px-4 py-3 space-y-1.5"},Ta={key:0,class:"shrink-0 px-4 pb-3 flex items-center gap-1.5 text-xs text-red-500"},ja={class:"flex items-center gap-3 w-full"},Ia=ee({__name:"ClusterExtractCasesModal",props:{open:{type:Boolean},clusterId:{},affectedTestCases:{},projectKey:{},projectName:{}},emits:["update:open","extracted"],setup(a,{emit:U}){const u=a,b=U,f=Ke(),g=x(new Set),n=x(""),d=x(!1),C=x(null);function V(){g.value=new Set(u.affectedTestCases.map(I=>I.testCaseId))}function E(){g.value=new Set}function R(I){const v=new Set(g.value);v.has(I)?v.delete(I):v.add(I),g.value=v}ne(()=>u.open,I=>{I&&(E(),n.value="",C.value=null)});const T=P(()=>g.value.size);async function h(){if(T.value!==0){d.value=!0,C.value=null;try{await $fetch(`/api/failure-clusters/${u.clusterId}/extract-cases`,{method:"POST",body:{testCaseIds:[...g.value],triageNote:n.value.trim()||void 0}}),f.add({title:`Extracted ${T.value} test ${T.value===1?"case":"cases"}`,color:"success"}),b("extracted"),b("update:open",!1)}catch(I){C.value=de(I)}finally{d.value=!1}}}return(I,v)=>{const j=ye,G=xe,D=$e,M=te,O=ie,A=Te;return s(),S(A,{open:a.open,title:"Extract test cases",ui:{content:"max-w-4xl",body:"p-0 flex flex-col overflow-hidden"},"onUpdate:open":v[4]||(v[4]=F=>b("update:open",F))},{body:p(()=>[t("div",fa,[t("div",pa,[t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:V},"Select all"),v[5]||(v[5]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:E},"Deselect all"),e(T)>0?(s(),l("span",ga,o(e(T))+" selected ",1)):m("",!0)]),t("div",xa,[t("table",va,[v[8]||(v[8]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-800 border-b border-default"},[t("tr",null,[t("th",{class:"w-10 px-4 py-2.5"}),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide"},"Test"),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide hidden sm:table-cell"}," File "),t("th",{class:"text-right px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide w-20"}," Occurrences ")])],-1)),t("tbody",null,[(s(!0),l(L,null,Q(a.affectedTestCases,F=>(s(),l("tr",{key:F.testCaseId,class:"border-b border-default/50 hover:bg-elevated transition-colors cursor-pointer",onClick:z=>R(F.testCaseId)},[t("td",ha,[t("input",{type:"checkbox",checked:e(g).has(F.testCaseId),class:"shrink-0 cursor-pointer accent-primary",onClick:v[0]||(v[0]=fe(()=>{},["stop"])),onChange:z=>R(F.testCaseId)},null,40,ya)]),t("td",ka,[t("p",ba,o(F.title),1),c(j,{to:`/test-cases/${F.testCaseId}`,class:"text-[10px] text-primary hover:underline mt-0.5 inline-block",onClick:v[1]||(v[1]=fe(()=>{},["stop"]))},{default:p(()=>[...v[6]||(v[6]=[w(" View details ",-1)])]),_:1},8,["to"])]),t("td",$a,[c(G,{"file-path":F.filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"max-w-full"},null,8,["file-path","project-key","project-name"])]),t("td",Ca,o(F.runCount),1)],8,_a))),128)),a.affectedTestCases.length===0?(s(),l("tr",wa,[...v[7]||(v[7]=[t("td",{colspan:"4",class:"px-4 py-8 text-center text-gray-400 text-sm"},"No test cases in this cluster.",-1)])])):m("",!0)])])]),t("div",Sa,[v[9]||(v[9]=t("label",{class:"text-xs font-medium text-gray-500 uppercase tracking-wide"},"Triage note (optional)",-1)),c(D,{modelValue:e(n),"onUpdate:modelValue":v[2]||(v[2]=F=>J(n)?n.value=F:null),placeholder:"Add a note explaining why these tests were extracted…",rows:2,class:"text-sm w-full"},null,8,["modelValue"])]),e(C)?(s(),l("p",Ta,[c(M,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(C)),1)])):m("",!0)])]),footer:p(()=>[t("div",ja,[v[11]||(v[11]=t("div",{class:"flex-1"},null,-1)),c(O,{color:"neutral",variant:"ghost",disabled:e(d),onClick:v[3]||(v[3]=F=>b("update:open",!1))},{default:p(()=>[...v[10]||(v[10]=[w(" Cancel ",-1)])]),_:1},8,["disabled"]),c(O,{color:"warning",disabled:e(T)===0,loading:e(d),onClick:h},{default:p(()=>[w(" Extract"+o(e(T)>0?` ${e(T)}`:""),1)]),_:1},8,["disabled","loading"])])]),_:1},8,["open"])}}}),Ua=Object.assign(Ia,{__name:"ClusterExtractCasesModal"}),za={key:0,class:"flex flex-col h-full min-h-0 max-xl:overflow-y-auto xl:overflow-hidden"},Ra={class:"border-b border-default shrink-0"},Ea={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 p-1 xl:flex-1 xl:min-h-0 xl:overflow-hidden"},Aa={class:"space-y-4 xl:overflow-y-auto"},Va={class:"font-mono text-xs"},Ma=["innerHTML"],Na={class:"inline-flex items-center gap-1.5"},Fa={class:"xl:overflow-y-auto"},Ba={key:1,class:"flex items-center justify-center h-64 text-gray-500"},ko=ee({__name:"[id]",async setup(a){let U,u;const b=We(),f=parseInt(String(b.params.id)),g=Tt(f),{data:n,refresh:d}=([U,u]=Je(()=>Ut(`/api/failure-clusters/${f}`,"$y4C0kntcH9")),U=await U,u(),U);Ze(P(()=>({title:`${n.value?.signature??"Failure cluster"} — Piwi Dashboard`})));const C=x(n.value?.status??"open"),V=x(n.value?.triageNote??""),E=x(!1);ne(()=>n.value?.status,k=>{k&&(C.value=k)}),ne(()=>n.value?.triageNote,k=>{V.value=k??""});const R=P(()=>C.value!==(n.value?.status??"open")||V.value.trim()!==(n.value?.triageNote??""));async function T(){E.value=!0;try{await $fetch(`/api/failure-clusters/${f}/status`,{method:"PATCH",body:{status:C.value,triageNote:V.value.trim()||null}}),d()}finally{E.value=!1}}const h=x(!1);function I(){h.value=!1,d()}const{copyRich:v,copied:j}=rt();function G(){const k=n.value;if(!k)return;const N=window.location.href,q=se=>se.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),K=[k.errorType,`${k.occurrences} occurrence${k.occurrences===1?"":"s"}`,`${k.affectedTests} test${k.affectedTests===1?"":"s"} affected`,k.status!=="open"?k.status:null].filter(Boolean).join(" · "),W=k.diagnosis?.status==="completed"&&k.diagnosis.summary?`AI diagnosis (${k.diagnosis.category??"unknown"}, ${k.diagnosis.confidence??"?"} confidence): ${k.diagnosis.summary}`:null,Z=[`❌ Failure cluster: ${k.signature}`,K,"",...k.sampleError?["Sample error:",ve(k.sampleError),""]:[],...W?[W,""]:[],`Cluster: ${N}`].join(`
3
3
  `),ae=[`<p><strong>❌ Failure cluster</strong>: <code>${q(k.signature)}</code></p>`,`<p><em>${q(K)}</em></p>`,k.sampleError?`<p><strong>Sample error:</strong></p><pre>${he(k.sampleError)}</pre>`:"",W?`<p><strong>AI diagnosis</strong> (${q(k.diagnosis?.category??"unknown")}, ${q(k.diagnosis?.confidence??"?")} confidence):<br>${q(k.diagnosis.summary)}</p>`:"",`<p>🔗 <a href="${N}">View failure cluster</a></p>`].join("");v(Z,ae,{toast:"Failure cluster copied"})}const D=P(()=>{const k=n.value?.sampleError;return k?ve(k).split(`
4
- `).find(N=>N.trim())??"":""}),{scmStatus:M}=je(g.coverage),O=P(()=>It((n.value?.affectedTestCases??[]).map(k=>({filePath:k.filePath,title:k.title,line:null,projectName:null})))),{copy:A,copied:F}=zt(),z=x(null),i=x(null),$=x(null),B=x(null),H=x(null),X=x(null),y={sampleError:()=>z.value,executionError:()=>z.value,environmentDiff:()=>B.value,visualDiff:()=>H.value,domSnapshot:()=>X.value,scmInvestigation:()=>$.value,selectedCommits:()=>$.value,topSuspectedCommit:()=>$.value,failingAction:()=>$.value,affectedTests:()=>i.value,testSource:()=>i.value,sourceFiles:()=>i.value,steps:()=>i.value,failingSteps:()=>i.value,console:()=>i.value,networkRequests:()=>i.value,ariaSnapshot:()=>i.value,screenshots:()=>i.value,tracePointers:()=>i.value,artifacts:()=>i.value};Qe(it,{canLocate:k=>k in y,open:k=>y[k]?.()?.reveal()});const r=P(()=>[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...n.value?.project?[{label:n.value.project.label||n.value.project.name||"Project",to:`/projects/${n.value.project.id}?tab=failure-clusters`}]:[{label:"Project"}],{label:`Failure cluster #${f}`}]);return(k,N)=>{const q=Be,K=Le,W=ie,Z=be,ae=Ye,se=Jt,oe=vt,_=_t,le=ht,Ie=yt,Ue=kt,ze=xe,Re=ue,Ee=xs,Ae=te,Ve=ma,Me=jt,Ne=Xe,Fe=Ua;return s(),l(L,null,[c(Ne,{id:"failure-cluster-detail"},{header:p(()=>[c(ae,null,{leading:p(()=>[c(q),c(K,{items:e(r)},null,8,["items"])]),right:p(()=>[e(n)?(s(),S(Z,{key:0,text:e(j)?"Copied!":"Copy failure cluster"},{default:p(()=>[c(W,{size:"sm",variant:"ghost",color:"neutral",icon:e(j)?"i-lucide-check":"i-lucide-clipboard",onClick:G},null,8,["icon"])]),_:1},8,["text"])):m("",!0)]),_:1})]),body:p(()=>[e(n)?(s(),l("div",za,[t("div",Ra,[c(se,{cluster:e(n),"triage-status":e(C),"triage-note":e(V),"triage-saving":e(E),"triage-changed":e(R),"onUpdate:triageStatus":N[0]||(N[0]=re=>C.value=re),"onUpdate:triageNote":N[1]||(N[1]=re=>V.value=re),onSaveTriage:T},null,8,["cluster","triage-status","triage-note","triage-saving","triage-changed"])]),t("div",Ea,[t("div",Aa,[e(n).sampleError?(s(),S(oe,{key:0,ref_key:"errorSection",ref:z,"storage-key":"cluster-error",icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error message"},{folded:p(()=>[t("span",Va,o(e(D)),1)]),default:p(()=>[t("div",{class:"text-xs font-mono overflow-x-auto whitespace-pre-wrap",innerHTML:e(he)(e(n).sampleError)},null,8,Ma)]),_:1},512)):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(_,{key:1,ref:"locatorSection","storage-key":"cluster-locators","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId,"affected-count":e(n).affectedTestCases.length},null,8,["run-id","test-runs-case-id","affected-count"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(le,{key:2,ref_key:"envDiffSection",ref:B,"storage-key":"cluster-env-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ie,{key:3,ref_key:"visualDiffSection",ref:H,"storage-key":"cluster-visual-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ue,{key:4,ref_key:"domSnapshotSection",ref:X,"storage-key":"cluster-dom-snapshot","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length?(s(),S(oe,{key:5,ref_key:"evidenceSection",ref:i,"storage-key":"cluster-evidence",icon:"i-lucide-flask-conical",title:"Test evidence",help:"cluster.evidence"},{folded:p(()=>[w(o(e(n).affectedTests)+" "+o(e(n).affectedTests===1?"test":"tests")+" · "+o(e(n).occurrences)+" occurrence"+o(e(n).occurrences===1?"":"s")+" · ",1),e(n).affectedTestCases[0]?.filePath?(s(),S(ze,{key:0,"file-path":e(n).affectedTestCases[0].filePath,"project-key":e(n).project?.id,"project-name":e(n).project?.name,class:"text-xs"},null,8,["file-path","project-key","project-name"])):m("",!0)]),actions:p(()=>[c(Re,{color:"neutral",variant:"subtle",size:"sm"},{default:p(()=>[w(o(e(n).affectedTestCases.length)+" "+o(e(n).affectedTestCases.length===1?"test":"tests"),1)]),_:1}),c(W,{size:"xs",variant:"outline",color:"neutral",icon:e(F)?"i-lucide-check":"i-lucide-play",title:e(F)?"Copied!":("copyPreview"in k?k.copyPreview:e(ut))(e(O)),onClick:N[2]||(N[2]=re=>e(A)(e(O),{toast:"Retry command copied"}))},{default:p(()=>[...N[5]||(N[5]=[w(" Copy retry command ",-1)])]),_:1},8,["icon","title"]),c(Z,{text:"Unlink incorrectly clustered test cases from this group"},{default:p(()=>[c(W,{size:"xs",color:"warning",variant:"outline",icon:"i-lucide-arrow-up-from-line",onClick:N[3]||(N[3]=re=>h.value=!0)},{default:p(()=>[...N[6]||(N[6]=[w(" Extract ",-1)])]),_:1})]),_:1})]),default:p(()=>[c(Ee,{"affected-test-cases":e(n).affectedTestCases,"project-key":e(n).project?.id,"project-name":e(n).project?.name},null,8,["affected-test-cases","project-key","project-name"])]),_:1},512)):m("",!0),c(oe,{ref_key:"scmSection",ref:$,"storage-key":"cluster-scm",icon:"i-lucide-git-compare-arrows",title:"What changed",help:"cluster.scm"},{folded:p(()=>[t("span",Na,[c(Ae,{name:e(M).icon,class:Y(["size-3.5 shrink-0",e(M).color])},null,8,["name","class"]),t("span",{class:Y(e(M).color)},o(e(M).text),3)])]),default:p(()=>[c(Ve)]),_:1},512)]),t("div",Fa,[c(Me,{"cluster-id":e(f),"last-seen-run-id":e(n)?.lastSeenRunId,"affected-test-cases":e(n)?.affectedTestCases??[]},null,8,["cluster-id","last-seen-run-id","affected-test-cases"])])])])):(s(),l("div",Ba,"Cluster not found."))]),_:1}),e(n)?(s(),S(Fe,{key:0,open:e(h),"cluster-id":e(f),"affected-test-cases":e(n).affectedTestCases??[],"project-key":e(n).project?.id,"project-name":e(n).project?.name,"onUpdate:open":N[4]||(N[4]=re=>h.value=re),onExtracted:I},null,8,["open","cluster-id","affected-test-cases","project-key","project-name"])):m("",!0)],64)}}});export{ko as default};
4
+ `).find(N=>N.trim())??"":""}),{scmStatus:M}=je(g.coverage),O=P(()=>It((n.value?.affectedTestCases??[]).map(k=>({filePath:k.filePath,title:k.title,line:null,projectName:null})))),{copy:A,copied:F}=zt(),z=x(null),r=x(null),$=x(null),B=x(null),H=x(null),X=x(null),y={sampleError:()=>z.value,executionError:()=>z.value,environmentDiff:()=>B.value,visualDiff:()=>H.value,domSnapshot:()=>X.value,scmInvestigation:()=>$.value,selectedCommits:()=>$.value,topSuspectedCommit:()=>$.value,failingAction:()=>$.value,affectedTests:()=>r.value,testSource:()=>r.value,sourceFiles:()=>r.value,steps:()=>r.value,failingSteps:()=>r.value,console:()=>r.value,networkRequests:()=>r.value,serverTraces:()=>r.value,ariaSnapshot:()=>r.value,screenshots:()=>r.value,tracePointers:()=>r.value,artifacts:()=>r.value};Qe(it,{canLocate:k=>k in y,open:k=>y[k]?.()?.reveal()});const i=P(()=>[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...n.value?.project?[{label:n.value.project.label||n.value.project.name||"Project",to:`/projects/${n.value.project.id}?tab=failure-clusters`}]:[{label:"Project"}],{label:`Failure cluster #${f}`}]);return(k,N)=>{const q=Be,K=Le,W=ie,Z=be,ae=Ye,se=Jt,oe=vt,_=_t,le=ht,Ie=yt,Ue=kt,ze=xe,Re=ue,Ee=xs,Ae=te,Ve=ma,Me=jt,Ne=Xe,Fe=Ua;return s(),l(L,null,[c(Ne,{id:"failure-cluster-detail"},{header:p(()=>[c(ae,null,{leading:p(()=>[c(q),c(K,{items:e(i)},null,8,["items"])]),right:p(()=>[e(n)?(s(),S(Z,{key:0,text:e(j)?"Copied!":"Copy failure cluster"},{default:p(()=>[c(W,{size:"sm",variant:"ghost",color:"neutral",icon:e(j)?"i-lucide-check":"i-lucide-clipboard",onClick:G},null,8,["icon"])]),_:1},8,["text"])):m("",!0)]),_:1})]),body:p(()=>[e(n)?(s(),l("div",za,[t("div",Ra,[c(se,{cluster:e(n),"triage-status":e(C),"triage-note":e(V),"triage-saving":e(E),"triage-changed":e(R),"onUpdate:triageStatus":N[0]||(N[0]=re=>C.value=re),"onUpdate:triageNote":N[1]||(N[1]=re=>V.value=re),onSaveTriage:T},null,8,["cluster","triage-status","triage-note","triage-saving","triage-changed"])]),t("div",Ea,[t("div",Aa,[e(n).sampleError?(s(),S(oe,{key:0,ref_key:"errorSection",ref:z,"storage-key":"cluster-error",icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error message"},{folded:p(()=>[t("span",Va,o(e(D)),1)]),default:p(()=>[t("div",{class:"text-xs font-mono overflow-x-auto whitespace-pre-wrap",innerHTML:e(he)(e(n).sampleError)},null,8,Ma)]),_:1},512)):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(_,{key:1,ref:"locatorSection","storage-key":"cluster-locators","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId,"affected-count":e(n).affectedTestCases.length},null,8,["run-id","test-runs-case-id","affected-count"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(le,{key:2,ref_key:"envDiffSection",ref:B,"storage-key":"cluster-env-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ie,{key:3,ref_key:"visualDiffSection",ref:H,"storage-key":"cluster-visual-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ue,{key:4,ref_key:"domSnapshotSection",ref:X,"storage-key":"cluster-dom-snapshot","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length?(s(),S(oe,{key:5,ref_key:"evidenceSection",ref:r,"storage-key":"cluster-evidence",icon:"i-lucide-flask-conical",title:"Test evidence",help:"cluster.evidence"},{folded:p(()=>[w(o(e(n).affectedTests)+" "+o(e(n).affectedTests===1?"test":"tests")+" · "+o(e(n).occurrences)+" occurrence"+o(e(n).occurrences===1?"":"s")+" · ",1),e(n).affectedTestCases[0]?.filePath?(s(),S(ze,{key:0,"file-path":e(n).affectedTestCases[0].filePath,"project-key":e(n).project?.id,"project-name":e(n).project?.name,class:"text-xs"},null,8,["file-path","project-key","project-name"])):m("",!0)]),actions:p(()=>[c(Re,{color:"neutral",variant:"subtle",size:"sm"},{default:p(()=>[w(o(e(n).affectedTestCases.length)+" "+o(e(n).affectedTestCases.length===1?"test":"tests"),1)]),_:1}),c(W,{size:"xs",variant:"outline",color:"neutral",icon:e(F)?"i-lucide-check":"i-lucide-play",title:e(F)?"Copied!":("copyPreview"in k?k.copyPreview:e(ut))(e(O)),onClick:N[2]||(N[2]=re=>e(A)(e(O),{toast:"Retry command copied"}))},{default:p(()=>[...N[5]||(N[5]=[w(" Copy retry command ",-1)])]),_:1},8,["icon","title"]),c(Z,{text:"Unlink incorrectly clustered test cases from this group"},{default:p(()=>[c(W,{size:"xs",color:"warning",variant:"outline",icon:"i-lucide-arrow-up-from-line",onClick:N[3]||(N[3]=re=>h.value=!0)},{default:p(()=>[...N[6]||(N[6]=[w(" Extract ",-1)])]),_:1})]),_:1})]),default:p(()=>[c(Ee,{"affected-test-cases":e(n).affectedTestCases,"project-key":e(n).project?.id,"project-name":e(n).project?.name},null,8,["affected-test-cases","project-key","project-name"])]),_:1},512)):m("",!0),c(oe,{ref_key:"scmSection",ref:$,"storage-key":"cluster-scm",icon:"i-lucide-git-compare-arrows",title:"What changed",help:"cluster.scm"},{folded:p(()=>[t("span",Na,[c(Ae,{name:e(M).icon,class:Y(["size-3.5 shrink-0",e(M).color])},null,8,["name","class"]),t("span",{class:Y(e(M).color)},o(e(M).text),3)])]),default:p(()=>[c(Ve)]),_:1},512)]),t("div",Fa,[c(Me,{"cluster-id":e(f),"last-seen-run-id":e(n)?.lastSeenRunId,"affected-test-cases":e(n)?.affectedTestCases??[]},null,8,["cluster-id","last-seen-run-id","affected-test-cases"])])])])):(s(),l("div",Ba,"Cluster not found."))]),_:1}),e(n)?(s(),S(Fe,{key:0,open:e(h),"cluster-id":e(f),"affected-test-cases":e(n).affectedTestCases??[],"project-key":e(n).project?.id,"project-name":e(n).project?.name,"onUpdate:open":N[4]||(N[4]=re=>h.value=re),onExtracted:I},null,8,["open","cluster-id","affected-test-cases","project-key","project-name"])):m("",!0)],64)}}});export{ko as default};
@@ -1 +1 @@
1
- import{_ as k}from"./n7Htv9PJ.js";import{d as _,f as r,g as l,k as b,o as n,c as a,t as u,m as h,F as g,y as V,h as f,i as y,q as v,aa as x,T as p}from"./B8fs6GU9.js";import{_ as B}from"./wCQds5_f.js";import{_ as $}from"./CHgsEM4U.js";import{_ as E}from"./PPFO8UVt.js";import{h as M}from"./3SnTawZW.js";const F={key:0},q={key:1},S={class:"font-mono text-xs"},T={key:0},A={key:2},C=_({__name:"EnvManagedAlert",props:{envVars:{},title:{},description:{}},setup(e){const t=e,c=f(()=>t.title??"Managed by environment variables");return(o,s)=>{const d=k;return n(),r(d,{icon:"i-lucide-lock",color:"neutral",variant:"subtle",title:b(c)},{description:l(()=>[e.description?(n(),a("span",F,u(e.description),1)):e.envVars?.length?(n(),a("span",q,[s[0]||(s[0]=h(" These settings are pinned by ",-1)),(n(!0),a(g,null,V(e.envVars,(i,m)=>(n(),a(g,{key:i},[y("code",S,u(i),1),m<e.envVars.length-1?(n(),a("span",T,", ")):v("",!0)],64))),128)),s[1]||(s[1]=h(" and cannot be changed here. Edit the environment and restart to change them. ",-1))])):(n(),a("span",A," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(C,{__name:"EnvManagedAlert"}),N={class:"inline-flex items-center gap-1"},j=_({__name:"SettingsField",props:{label:{},help:{},envVars:{},envManaged:{type:Boolean},description:{},hint:{},required:{type:Boolean},name:{},disabled:{type:Boolean}},setup(e){const t=e,c=f(()=>{if(t.envVars)return t.envVars;if(t.help)return M(t.help)});return(o,s)=>{const d=B,i=$,m=E;return n(),r(m,{label:e.label,description:e.description,hint:e.hint,required:e.required,name:e.name,disabled:e.disabled||e.envManaged},x({label:l(()=>[y("span",N,[h(u(e.label)+" ",1),e.help?(n(),r(d,{key:0,topic:e.help},null,8,["topic"])):v("",!0),e.envManaged?(n(),r(i,{key:1,"env-vars":b(c)},null,8,["env-vars"])):v("",!0)])]),default:l(()=>[p(o.$slots,"default")]),_:2},[o.$slots.trailing?{name:"trailing",fn:l(()=>[p(o.$slots,"trailing")]),key:"0"}:void 0]),1032,["label","description","hint","required","name","disabled"])}}}),G=Object.assign(j,{__name:"SettingsField"});export{z as _,G as a};
1
+ import{_ as k}from"./Br2K9yi_.js";import{d as _,f as r,g as l,k as b,o as n,c as a,t as u,m as h,F as g,y as V,h as f,i as y,q as v,aa as x,T as p}from"./BPKwYP2Q.js";import{_ as B}from"./CQeMb57w.js";import{_ as E}from"./bAfTAihV.js";import{_ as M}from"./DdbrJwT-.js";import{h as $}from"./r3SBLxtE.js";const F={key:0},q={key:1},S={class:"font-mono text-xs"},T={key:0},A={key:2},C=_({__name:"EnvManagedAlert",props:{envVars:{},title:{},description:{}},setup(e){const t=e,c=f(()=>t.title??"Managed by environment variables");return(o,s)=>{const d=k;return n(),r(d,{icon:"i-lucide-lock",color:"neutral",variant:"subtle",title:b(c)},{description:l(()=>[e.description?(n(),a("span",F,u(e.description),1)):e.envVars?.length?(n(),a("span",q,[s[0]||(s[0]=h(" These settings are pinned by ",-1)),(n(!0),a(g,null,V(e.envVars,(i,m)=>(n(),a(g,{key:i},[y("code",S,u(i),1),m<e.envVars.length-1?(n(),a("span",T,", ")):v("",!0)],64))),128)),s[1]||(s[1]=h(" and cannot be changed here. Edit the environment and restart to change them. ",-1))])):(n(),a("span",A," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(C,{__name:"EnvManagedAlert"}),N={class:"inline-flex items-center gap-1"},j=_({__name:"SettingsField",props:{label:{},help:{},envVars:{},envManaged:{type:Boolean},description:{},hint:{},required:{type:Boolean},name:{},disabled:{type:Boolean}},setup(e){const t=e,c=f(()=>{if(t.envVars)return t.envVars;if(t.help)return $(t.help)});return(o,s)=>{const d=B,i=E,m=M;return n(),r(m,{label:e.label,description:e.description,hint:e.hint,required:e.required,name:e.name,disabled:e.disabled||e.envManaged},x({label:l(()=>[y("span",N,[h(u(e.label)+" ",1),e.help?(n(),r(d,{key:0,topic:e.help},null,8,["topic"])):v("",!0),e.envManaged?(n(),r(i,{key:1,"env-vars":b(c)},null,8,["env-vars"])):v("",!0)])]),default:l(()=>[p(o.$slots,"default")]),_:2},[o.$slots.trailing?{name:"trailing",fn:l(()=>[p(o.$slots,"trailing")]),key:"0"}:void 0]),1032,["label","description","hint","required","name","disabled"])}}}),G=Object.assign(j,{__name:"SettingsField"});export{z as _,G as a};