@piwitests/server 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{C9sdHaXd.js → 2VtBYkNh.js} +1 -1
- package/.output/public/_nuxt/{CES2i5Pl.js → 3xlGO1qT.js} +1 -1
- package/.output/public/_nuxt/{lGC893pn.js → 4yvOL9PC.js} +1 -1
- package/.output/public/_nuxt/{ZcAfCxWE.js → 6-ivqM_I.js} +1 -1
- package/.output/public/_nuxt/{DkT2nCqn.js → 9N6hSApy.js} +1 -1
- package/.output/public/_nuxt/{wkz5-1SO.js → 9P8iHISX.js} +1 -1
- package/.output/public/_nuxt/B-6GGrhr.js +1 -0
- package/.output/public/_nuxt/{Bo_dxehb.js → B09ddw9C.js} +1 -1
- package/.output/public/_nuxt/{BGusFAvZ.js → B0hK-xDF.js} +1 -1
- package/.output/public/_nuxt/{DfnKh3dZ.js → B2a-Phk3.js} +1 -1
- package/.output/public/_nuxt/{DqEOMteW.js → B6s20NbT.js} +1 -1
- package/.output/public/_nuxt/B9FSuKdA.js +1 -0
- package/.output/public/_nuxt/{DJMCXRuW.js → B9kt7ySS.js} +2 -2
- package/.output/public/_nuxt/{BnbSEpXX.js → BDQCwxpX.js} +1 -1
- package/.output/public/_nuxt/{B-zdP-D4.js → BFcdtAzg.js} +1 -1
- package/.output/public/_nuxt/{RAdNGxcF.js → BH-ym1CI.js} +1 -1
- package/.output/public/_nuxt/{zv8WdMx0.js → BKJetfRH.js} +1 -1
- package/.output/public/_nuxt/{CTD_pJ_v.js → BNAHBHbY.js} +1 -1
- package/.output/public/_nuxt/{DX4tAP78.js → BQOWm9mQ.js} +1 -1
- package/.output/public/_nuxt/{CvMzDKvu.js → BQzG26t0.js} +1 -1
- package/.output/public/_nuxt/{B_13C0GF.js → BTvE9qca.js} +1 -1
- package/.output/public/_nuxt/{BpBHls4-.js → BUMoU50-.js} +1 -1
- package/.output/public/_nuxt/{D_eDAIsT.js → BVN50jIb.js} +1 -1
- package/.output/public/_nuxt/{DSe8DxMl.js → BYB8NVJZ.js} +1 -1
- package/.output/public/_nuxt/{BfTNbVc_.js → BZnfiR67.js} +1 -1
- package/.output/public/_nuxt/{DQM62mxB.js → B_mN5eMV.js} +1 -1
- package/.output/public/_nuxt/BaDhDBCV.js +1 -0
- package/.output/public/_nuxt/{Ctb2CqUf.js → Bb7Uckln.js} +3 -3
- package/.output/public/_nuxt/{DvhCDBrR.js → Be4c943G.js} +2 -2
- package/.output/public/_nuxt/{YmT5WiN5.js → BfS8BZTO.js} +1 -1
- package/.output/public/_nuxt/{C2hNxjjz.js → BhH0TNTi.js} +1 -1
- package/.output/public/_nuxt/{CIBS7ye6.js → BjU3HZuS.js} +1 -1
- package/.output/public/_nuxt/{Ckgsh9AT.js → BlRWlfdD.js} +1 -1
- package/.output/public/_nuxt/BmJUhCIO.js +6 -0
- package/.output/public/_nuxt/{C5PSqfKi.js → BpUXqOVj.js} +1 -1
- package/.output/public/_nuxt/{DnNio-ut.js → BqCiYSVY.js} +1 -1
- package/.output/public/_nuxt/{Ci9d8YVV.js → Bt4FLbe0.js} +1 -1
- package/.output/public/_nuxt/{BpM6ZPIG.js → BtSJxOdh.js} +1 -1
- package/.output/public/_nuxt/{CAxgBYIt.js → BtaTvcz6.js} +2 -2
- package/.output/public/_nuxt/{DHzij16p.js → By5qkOq8.js} +1 -1
- package/.output/public/_nuxt/{DL24AjfW.js → C0v6l4pr.js} +1 -1
- package/.output/public/_nuxt/{9ti9eNH9.js → C9p0YCAi.js} +1 -1
- package/.output/public/_nuxt/{tQoyVPCE.js → CAZpjzvB.js} +1 -1
- package/.output/public/_nuxt/{COhdybDy.js → CBZD8ym8.js} +1 -1
- package/.output/public/_nuxt/CCP6Tyle.js +1 -0
- package/.output/public/_nuxt/{BAKUqW95.js → CD3R-ggS.js} +1 -1
- package/.output/public/_nuxt/{_rglcvXN.js → CDh_Qt7h.js} +1 -1
- package/.output/public/_nuxt/{C_NfGMTd.js → CI_q0F1O.js} +2 -2
- package/.output/public/_nuxt/{CtstIQSh.js → CJEp4i0N.js} +1 -1
- package/.output/public/_nuxt/{BNurUTla.js → CMhK1PvI.js} +1 -1
- package/.output/public/_nuxt/{CWKmbYlT.js → CNcu4khZ.js} +1 -1
- package/.output/public/_nuxt/COP3KBCA.js +9 -0
- package/.output/public/_nuxt/{Ebw5l7n8.js → CRPt9SfB.js} +1 -1
- package/.output/public/_nuxt/{B1RmmOsM.js → CScusXhF.js} +1 -1
- package/.output/public/_nuxt/{Cpsq-kYE.js → CWoSSKhQ.js} +1 -1
- package/.output/public/_nuxt/{Dk9nD32g.js → CWw9WGlv.js} +1 -1
- package/.output/public/_nuxt/{DnQv_hst.js → CZ9ThISn.js} +1 -1
- package/.output/public/_nuxt/{E-_n_6vi.js → Cd8r0xk5.js} +1 -1
- package/.output/public/_nuxt/{BGL_V7Y4.js → Cf52zHyB.js} +1 -1
- package/.output/public/_nuxt/{BqGumsDo.js → CkKCKAYp.js} +2 -2
- package/.output/public/_nuxt/{BR5cR2Ot.js → CkyMZI-0.js} +1 -1
- package/.output/public/_nuxt/{B3zmIJYb.js → CoPntblj.js} +1 -1
- package/.output/public/_nuxt/CobveFaj.js +1 -0
- package/.output/public/_nuxt/{DJXcGkJP.js → Cot8fIp5.js} +2 -2
- package/.output/public/_nuxt/{BerCW7Ug.js → CrOA9onF.js} +1 -1
- package/.output/public/_nuxt/{Chpah_7l.js → Cwwe5bRS.js} +1 -1
- package/.output/public/_nuxt/{C5vsaU4G.js → D0ROfwV0.js} +1 -1
- package/.output/public/_nuxt/{NERLHpOL.js → D4UlSVir.js} +1 -1
- package/.output/public/_nuxt/{DlW85lQq.js → D4oheDIm.js} +3 -3
- package/.output/public/_nuxt/{CsHulb12.js → D6Mo5HeX.js} +1 -1
- package/.output/public/_nuxt/{B3rirOqU.js → DBhdObsO.js} +1 -1
- package/.output/public/_nuxt/{BrxtP_cN.js → DDN2tt0a.js} +1 -1
- package/.output/public/_nuxt/{CTP8Pw0-.js → DGyGmFem.js} +2 -2
- package/.output/public/_nuxt/{DdH3op4b.js → DHUT-BKj.js} +1 -1
- package/.output/public/_nuxt/DK7xciFW.js +7 -0
- package/.output/public/_nuxt/{B3Fsod9X.js → DLNNAYfu.js} +1 -1
- package/.output/public/_nuxt/{yYlVYKCz.js → DLn-VPtK.js} +3 -3
- package/.output/public/_nuxt/{IPePdbzl.js → DOBSrxzY.js} +1 -1
- package/.output/public/_nuxt/{CFTZwazK.js → DOLeth7M.js} +1 -1
- package/.output/public/_nuxt/{CFEdRqaj.js → DQnsFoJn.js} +1 -1
- package/.output/public/_nuxt/{bfecIH89.js → DS2ANCQh.js} +1 -1
- package/.output/public/_nuxt/{CJBhojV6.js → DSvBQHzW.js} +1 -1
- package/.output/public/_nuxt/{DfSBKzrC.js → DWEkQ7bl.js} +1 -1
- package/.output/public/_nuxt/{Cqc-DSTF.js → DXXnDejN.js} +1 -1
- package/.output/public/_nuxt/{D8gX1Jde.js → Dj-TetcW.js} +1 -1
- package/.output/public/_nuxt/DpalT0nH.js +1 -0
- package/.output/public/_nuxt/{DhpTfeip.js → DsX5CCb5.js} +1 -1
- package/.output/public/_nuxt/{DAPTVdvA.js → DslnXfcH.js} +1 -1
- package/.output/public/_nuxt/{D9knOn6D.js → DtSn2Q9-.js} +1 -1
- package/.output/public/_nuxt/{BeDIjhoR.js → DwyFnMoY.js} +1 -1
- package/.output/public/_nuxt/{gV2U_Gqd.js → DzM9oeLa.js} +1 -1
- package/.output/public/_nuxt/{CLVWiCds.js → Gik813Ek.js} +1 -1
- package/.output/public/_nuxt/{YE1kAkU9.js → Hot1UcKY.js} +1 -1
- package/.output/public/_nuxt/{DKFXZdWZ.js → HwFFbACq.js} +1 -1
- package/.output/public/_nuxt/{LHoUGrfi.js → PdEEuEsg.js} +1 -1
- package/.output/public/_nuxt/{nOfj-ar8.js → SBmMTKQb.js} +1 -1
- package/.output/public/_nuxt/{BTVqMsA3.js → Sgis3xif.js} +1 -1
- package/.output/public/_nuxt/{D2pBhsH8.js → _VzR8bwc.js} +1 -1
- package/.output/public/_nuxt/{CV8iF2kG.js → b_yFgp5S.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/5f1ebc7c-d690-4f02-847f-a3249653f75f.json +1 -0
- package/.output/public/_nuxt/{CKYddHa6.js → cSeAgciy.js} +1 -1
- package/.output/public/_nuxt/{CMYAryzi.js → czXrP7NB.js} +1 -1
- package/.output/public/_nuxt/{DCFbQvIN.js → h49q_GXF.js} +9 -9
- package/.output/public/_nuxt/{DON74Yh6.js → hzsG6cAc.js} +1 -1
- package/.output/public/_nuxt/{DwQaVMZR.js → iubpj2qv.js} +1 -1
- package/.output/public/_nuxt/{oKrbs1XK.js → jjOqY9Tv.js} +1 -1
- package/.output/public/_nuxt/{BTCh_0zN.js → kfFeu9tK.js} +1 -1
- package/.output/public/_nuxt/nANaAHCd.js +5 -0
- package/.output/public/_nuxt/{CifRHVaR.js → t-juTK3X.js} +1 -1
- package/.output/public/_nuxt/{Dsvu7YJT.js → x8YSyy4c.js} +1 -1
- package/.output/public/_nuxt/{uSPCvASp.js → x8w_1_rn.js} +1 -1
- package/.output/public/_nuxt/xbO0VmDX.js +1 -0
- package/.output/server/chunks/_/collect.mjs +1 -1
- package/.output/server/chunks/_/error-500.mjs.map +1 -1
- package/.output/server/chunks/_/markers.mjs +1 -1
- package/.output/server/chunks/_/quarantine.mjs +1 -1
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{Alert-C4xq8lao.mjs → Alert-DAb8nKVs.mjs} +2 -2
- package/.output/server/chunks/build/Alert-DAb8nKVs.mjs.map +1 -0
- package/.output/server/chunks/build/{Breadcrumb-3itRZ1uz.mjs → Breadcrumb-DJp5WvUM.mjs} +5 -5
- package/.output/server/chunks/build/Breadcrumb-DJp5WvUM.mjs.map +1 -0
- package/.output/server/chunks/build/{BreadcrumbNav-GnjBvXuT.mjs → BreadcrumbNav-BrQwfL8G.mjs} +2 -2
- package/.output/server/chunks/build/BreadcrumbNav-BrQwfL8G.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-DQqJS9CV.mjs → BrowserBadge-Djw_e_I9.mjs} +3 -3
- package/.output/server/chunks/build/BrowserBadge-Djw_e_I9.mjs.map +1 -0
- package/.output/server/chunks/build/{Card-BQP_oZkQ.mjs → Card--Ike7sYc.mjs} +2 -2
- package/.output/server/chunks/build/Card--Ike7sYc.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-D0rzMf-N.mjs → ChartCard-B2gd_8HP.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-B2gd_8HP.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartMarkerTooltip-0DcMfD_6.mjs → ChartMarkerTooltip-u_1DUHh-.mjs} +2 -2
- package/.output/server/chunks/build/ChartMarkerTooltip-u_1DUHh-.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-DmRKG-0s.mjs → Checkbox-C1khEdTh.mjs} +4 -4
- package/.output/server/chunks/build/Checkbox-C1khEdTh.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-DGhKVFad.mjs → CodeBlock-CjnDrO3Y.mjs} +4 -4
- package/.output/server/chunks/build/CodeBlock-CjnDrO3Y.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-DCr10nxL.mjs → DashboardNavbar-DYtmVlhy.mjs} +5 -5
- package/.output/server/chunks/build/DashboardNavbar-DYtmVlhy.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardSidebarToggle-8EpBhX0R.mjs → DashboardSidebarToggle-BPNxODwj.mjs} +5 -5
- package/.output/server/chunks/build/DashboardSidebarToggle-BPNxODwj.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-rzS-pgCP.mjs → DataLocationCard-2B-sVSMr.mjs} +5 -5
- package/.output/server/chunks/build/DataLocationCard-2B-sVSMr.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-BWTpoCKy.mjs → DiagnosisPanel-D6QO30FQ.mjs} +7 -7
- package/.output/server/chunks/build/DiagnosisPanel-D6QO30FQ.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisResult-Br3qBLXe.mjs → DiagnosisResult-ujB5Lt2A.mjs} +10 -10
- package/.output/server/chunks/build/DiagnosisResult-ujB5Lt2A.mjs.map +1 -0
- package/.output/server/chunks/build/{DurationValue-CWKfjIF2.mjs → DurationValue-UX9uajQJ.mjs} +2 -2
- package/.output/server/chunks/build/DurationValue-UX9uajQJ.mjs.map +1 -0
- package/.output/server/chunks/build/{EntityLinks-CF0xG3Y8.mjs → EntityLinks-F8_kC-IH.mjs} +3 -3
- package/.output/server/chunks/build/EntityLinks-F8_kC-IH.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-UwD2b9v2.mjs → EnvManagedBadge-D6e-10M9.mjs} +3 -3
- package/.output/server/chunks/build/EnvManagedBadge-D6e-10M9.mjs.map +1 -0
- package/.output/server/chunks/build/{FeatureUnavailable-CwPms6X_.mjs → FeatureUnavailable-BMw4euTk.mjs} +2 -2
- package/.output/server/chunks/build/FeatureUnavailable-BMw4euTk.mjs.map +1 -0
- package/.output/server/chunks/build/{FormField-e7OnSKPM.mjs → FormField-QptK0rPg.mjs} +3 -3
- package/.output/server/chunks/build/FormField-QptK0rPg.mjs.map +1 -0
- package/.output/server/chunks/build/{GetStartedWizard-CB5v1Xzu.mjs → GetStartedWizard-DxT8T14Y.mjs} +4 -4
- package/.output/server/chunks/build/GetStartedWizard-DxT8T14Y.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-DjGrGFA7.mjs → HelpHint-C5Ru8BCc.mjs} +2 -2
- package/.output/server/chunks/build/HelpHint-C5Ru8BCc.mjs.map +1 -0
- package/.output/server/chunks/build/{LoadingState-B8v1nWJt.mjs → LoadingState-CwpfmI0W.mjs} +3 -3
- package/.output/server/chunks/build/LoadingState-CwpfmI0W.mjs.map +1 -0
- package/.output/server/chunks/build/{MarkerBadge-D7meXy4u.mjs → MarkerBadge-Biz5--h2.mjs} +1 -1
- package/.output/server/chunks/build/MarkerBadge-Biz5--h2.mjs.map +1 -0
- package/.output/server/chunks/build/{MetaStripGroup-dXXa_MzF.mjs → MetaStripGroup-BBByVvpR.mjs} +13 -13
- package/.output/server/chunks/build/{MetaStripGroup-dXXa_MzF.mjs.map → MetaStripGroup-BBByVvpR.mjs.map} +1 -1
- package/.output/server/chunks/build/{Modal-pSDlXzT3.mjs → Modal-BacZmQCX.mjs} +3 -3
- package/.output/server/chunks/build/Modal-BacZmQCX.mjs.map +1 -0
- package/.output/server/chunks/build/{NavigationMenu-cqpt11Ce.mjs → NavigationMenu-sTiKSWDm.mjs} +5 -5
- package/.output/server/chunks/build/NavigationMenu-sTiKSWDm.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-B9wvQkhy.mjs → OpenInIdeLink-Crc8y0Yx.mjs} +5 -5
- package/.output/server/chunks/build/{OpenInIdeLink-B9wvQkhy.mjs.map → OpenInIdeLink-Crc8y0Yx.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-BwHEtZTz.mjs → ProjectTestCasesTable-DwjqZ2i5.mjs} +17 -17
- package/.output/server/chunks/build/ProjectTestCasesTable-DwjqZ2i5.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-BDRIWn3o.mjs → RunReports-nuLb-Nm3.mjs} +3 -3
- package/.output/server/chunks/build/RunReports-nuLb-Nm3.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-CuTDknRJ.mjs → RunStatusBadge-CvWmcFYM.mjs} +2 -2
- package/.output/server/chunks/build/RunStatusBadge-CvWmcFYM.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-BW5Lynrr.mjs → SectionCard-C753B3Yo.mjs} +3 -3
- package/.output/server/chunks/build/SectionCard-C753B3Yo.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-CVctwpib.mjs → Select-BAyYwPuo.mjs} +4 -4
- package/.output/server/chunks/build/Select-BAyYwPuo.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-XLVBEa11.mjs → SelectMenu-zE_AhMX8.mjs} +4 -4
- package/.output/server/chunks/build/{SelectMenu-XLVBEa11.mjs.map → SelectMenu-zE_AhMX8.mjs.map} +1 -1
- package/.output/server/chunks/build/{Separator-CR4WcEKD.mjs → Separator-BbgCfKKJ.mjs} +3 -3
- package/.output/server/chunks/build/Separator-BbgCfKKJ.mjs.map +1 -0
- package/.output/server/chunks/build/{SettingsField-DvtRvI6O.mjs → SettingsField-D-VriK9X.mjs} +5 -5
- package/.output/server/chunks/build/SettingsField-D-VriK9X.mjs.map +1 -0
- package/.output/server/chunks/build/{Skeleton-CEHuuKVh.mjs → Skeleton-DAp_WMEe.mjs} +2 -2
- package/.output/server/chunks/build/Skeleton-DAp_WMEe.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-D270EZZD.mjs → Slideover-CNbGvbUF.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-CNbGvbUF.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-8zWfwI5B.mjs → Switch-DdkA3Fii.mjs} +3 -3
- package/.output/server/chunks/build/Switch-DdkA3Fii.mjs.map +1 -0
- package/.output/server/chunks/build/{Table-BRk04Hd2.mjs → Table-CfDVAuUJ.mjs} +4 -4
- package/.output/server/chunks/build/Table-CfDVAuUJ.mjs.map +1 -0
- package/.output/server/chunks/build/{Tabs-BkSOnbaB.mjs → Tabs-BCOhHEB9.mjs} +2 -2
- package/.output/server/chunks/build/Tabs-BCOhHEB9.mjs.map +1 -0
- package/.output/server/chunks/build/{TestCaseHistoryChart-C6t5RrCG.mjs → TestCaseHistoryChart-CKDXQ2GI.mjs} +3 -3
- package/.output/server/chunks/build/TestCaseHistoryChart-CKDXQ2GI.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-DhbrM_rQ.mjs → TestStatusBar-wquHQqtp.mjs} +2 -2
- package/.output/server/chunks/build/TestStatusBar-wquHQqtp.mjs.map +1 -0
- package/.output/server/chunks/build/{Textarea-vkMKVQTJ.mjs → Textarea-Ohs6QTXf.mjs} +3 -3
- package/.output/server/chunks/build/Textarea-Ohs6QTXf.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-Dv4htNP6.mjs → Tooltip-BRBnl4pE.mjs} +3 -3
- package/.output/server/chunks/build/Tooltip-BRBnl4pE.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-DMkgWSLZ.mjs → _id_-BesWjK_d.mjs} +45 -43
- package/.output/server/chunks/build/{_id_-DMkgWSLZ.mjs.map → _id_-BesWjK_d.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-CUZ5S6y5.mjs → _id_-CGs0u8Fr.mjs} +30 -28
- package/.output/server/chunks/build/{_id_-CUZ5S6y5.mjs.map → _id_-CGs0u8Fr.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-2PMH6rl8.mjs → _id_-CQ0lolEK.mjs} +26 -24
- package/.output/server/chunks/build/_id_-CQ0lolEK.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-8cGIgeg6.mjs → _id_-D1-06Fcl.mjs} +46 -44
- package/.output/server/chunks/build/_id_-D1-06Fcl.mjs.map +1 -0
- package/.output/server/chunks/build/{about-D3WXTDro.mjs → about-DdyOj-dj.mjs} +10 -8
- package/.output/server/chunks/build/about-DdyOj-dj.mjs.map +1 -0
- package/.output/server/chunks/build/{account-BslDNCoo.mjs → account-7aVMKekZ.mjs} +10 -8
- package/.output/server/chunks/build/account-7aVMKekZ.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-C23R9l94.mjs → ai-zw3T9b5u.mjs} +23 -21
- package/.output/server/chunks/build/{ai-C23R9l94.mjs.map → ai-zw3T9b5u.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-DQHeToK0.mjs → analytics-CeCzKwEX.mjs} +43 -41
- package/.output/server/chunks/build/{analytics-DQHeToK0.mjs.map → analytics-CeCzKwEX.mjs.map} +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{compare-RxHSOdsO.mjs → compare-B2OB3zdd.mjs} +3 -1
- package/.output/server/chunks/build/compare-B2OB3zdd.mjs.map +1 -0
- package/.output/server/chunks/build/{db.client-D74DghqX.mjs → db.client-Bdqk_eYQ.mjs} +3 -1
- package/.output/server/chunks/build/db.client-Bdqk_eYQ.mjs.map +1 -0
- package/.output/server/chunks/build/{default-CeyePZ5I.mjs → default-CkyAx_Mu.mjs} +31 -29
- package/.output/server/chunks/build/{default-CeyePZ5I.mjs.map → default-CkyAx_Mu.mjs.map} +1 -1
- package/.output/server/chunks/build/{docs-f_bnC75q.mjs → docs-Dhj-wEks.mjs} +16 -14
- package/.output/server/chunks/build/{docs-f_bnC75q.mjs.map → docs-Dhj-wEks.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-BOC4zWuH.mjs → edit-CVz_gdoe.mjs} +17 -15
- package/.output/server/chunks/build/edit-CVz_gdoe.mjs.map +1 -0
- package/.output/server/chunks/build/{fetch-BQg_fhX0.mjs → fetch-Be-j7hF1.mjs} +3 -3
- package/.output/server/chunks/build/fetch-Be-j7hF1.mjs.map +1 -0
- package/.output/server/chunks/build/{forgot-password-CxuVbGWy.mjs → forgot-password-CwdjL7BO.mjs} +6 -4
- package/.output/server/chunks/build/forgot-password-CwdjL7BO.mjs.map +1 -0
- package/.output/server/chunks/build/{import-CC27wEIu.mjs → import-DyQEw4V3.mjs} +16 -14
- package/.output/server/chunks/build/import-DyQEw4V3.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BOK1aJk9.mjs → index-ByWTzqF6.mjs} +1 -1
- package/.output/server/chunks/build/index-ByWTzqF6.mjs.map +1 -0
- package/.output/server/chunks/build/{index-DUmjP3Gr.mjs → index-D7Bmj6bq.mjs} +18 -16
- package/.output/server/chunks/build/index-D7Bmj6bq.mjs.map +1 -0
- package/.output/server/chunks/build/{index-B6PjfyTY.mjs → index-DcnICCZU.mjs} +22 -20
- package/.output/server/chunks/build/{index-B6PjfyTY.mjs.map → index-DcnICCZU.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-BhS1DuCr.mjs → index-DghAFpNR.mjs} +58 -56
- package/.output/server/chunks/build/index-DghAFpNR.mjs.map +1 -0
- package/.output/server/chunks/build/{index-jvF53f7_.mjs → index-ID913tUa.mjs} +7 -5
- package/.output/server/chunks/build/index-ID913tUa.mjs.map +1 -0
- package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs +1 -1
- package/.output/server/chunks/build/{login-CdpOhiP8.mjs → login-rXKF63j6.mjs} +12 -10
- package/.output/server/chunks/build/login-rXKF63j6.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-WTeO5WRo.mjs → mcp-ByNvFy4o.mjs} +70 -21
- package/.output/server/chunks/build/mcp-ByNvFy4o.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-yY6ik-fi.mjs → notifications-CbLAZnKJ.mjs} +17 -15
- package/.output/server/chunks/build/notifications-CbLAZnKJ.mjs.map +1 -0
- package/.output/server/chunks/build/performance-C93MEPaZ.mjs +581 -0
- package/.output/server/chunks/build/performance-C93MEPaZ.mjs.map +1 -0
- package/.output/server/chunks/build/{pr-feedback-Hv2Ydh_6.mjs → pr-feedback-DKCB0bDE.mjs} +11 -9
- package/.output/server/chunks/build/pr-feedback-DKCB0bDE.mjs.map +1 -0
- package/.output/server/chunks/build/{reset-password-CFtO8A6n.mjs → reset-password-BBoHKMqD.mjs} +6 -4
- package/.output/server/chunks/build/reset-password-BBoHKMqD.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +70 -73
- package/.output/server/chunks/build/server.mjs.map +1 -1
- package/.output/server/chunks/build/{settings-DIpvnY8_.mjs → settings-DiG0JjzC.mjs} +17 -27
- package/.output/server/chunks/build/settings-DiG0JjzC.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-DRv9VveS.mjs → settings-metadata-DnAK4Rzg.mjs} +10 -18
- package/.output/server/chunks/build/settings-metadata-DnAK4Rzg.mjs.map +1 -0
- package/.output/server/chunks/build/{setup-Di0UMyWx.mjs → setup-0-1O6Hjz.mjs} +110 -161
- package/.output/server/chunks/build/setup-0-1O6Hjz.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-gAbY1KbQ.mjs → storage-3JiFJ843.mjs} +17 -15
- package/.output/server/chunks/build/storage-3JiFJ843.mjs.map +1 -0
- package/.output/server/chunks/build/{tags-DJ80wCqt.mjs → tags-CqYcp7js.mjs} +10 -8
- package/.output/server/chunks/build/tags-CqYcp7js.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-YP83YlnL.mjs → test-cases-y1HSgPX2.mjs} +24 -22
- package/.output/server/chunks/build/test-cases-y1HSgPX2.mjs.map +1 -0
- package/.output/server/chunks/build/{test-functions-BwLTxGmM.mjs → test-functions-D2ju95Ly.mjs} +16 -14
- package/.output/server/chunks/build/test-functions-D2ju95Ly.mjs.map +1 -0
- package/.output/server/chunks/build/{useChartMarkers-C89e_VLV.mjs → useChartMarkers-C0wSO0xk.mjs} +1 -1
- package/.output/server/chunks/build/useChartMarkers-C0wSO0xk.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopyRich-Cd5Yj_Wy.mjs → useCopyRich-CVFeYfkG.mjs} +21 -21
- package/.output/server/chunks/build/useCopyRich-CVFeYfkG.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopDownload-BmR6ouz2.mjs → useDesktopDownload-Dyf0fR47.mjs} +2 -2
- package/.output/server/chunks/build/useDesktopDownload-Dyf0fR47.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-DolN3bZ5.mjs → useOpenInIde--6Me0WlL.mjs} +1 -1
- package/.output/server/chunks/build/useOpenInIde--6Me0WlL.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-DfnOFlR_.mjs → useSettingsNav-BLTHducV.mjs} +2 -2
- package/.output/server/chunks/build/useSettingsNav-BLTHducV.mjs.map +1 -0
- package/.output/server/chunks/build/{users-I2K7HXS2.mjs → users-IdmY9JZV.mjs} +11 -9
- package/.output/server/chunks/build/users-IdmY9JZV.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +1688 -1606
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +3 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +2 -0
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/stats.get.mjs +2 -0
- package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/ai/status.get.mjs +2 -0
- package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +2 -0
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs +10 -1
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/login.post.mjs +16 -2
- package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +10 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +9 -1
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +6 -1
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.get.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.post.mjs +30 -12
- package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +3 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +5 -3
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +3 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +3 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +3 -1
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +2 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +3 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs +22 -4
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +3 -1
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +11 -5
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +8 -3
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +3 -1
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +3 -1
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +3 -1
- package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +3 -1
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +6 -2
- package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +3 -1
- package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +14 -1
- package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post5.mjs +3 -1
- package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post6.mjs +3 -1
- package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +4 -3
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +4 -3
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +4 -3
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +3 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +32 -16
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +3 -1
- package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +3 -1
- package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +2 -0
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +3 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/setup-status.get.mjs +3 -1
- package/.output/server/chunks/routes/api/setup-status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/stream.get.mjs +7 -2
- package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +3 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs +3 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +3 -1
- package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +6 -4
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +5 -3
- package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs +7 -2
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +3 -1
- package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +3 -1
- package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs.map +1 -1
- package/.output/server/chunks/tasks/sweep.mjs +2 -0
- package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
- package/.output/server/chunks/tasks/sweep2.mjs +2 -0
- package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
- package/.output/server/database/migrations/0044_panoramic_eddie_brock.sql +1 -0
- package/.output/server/database/migrations/meta/0044_snapshot.json +3772 -0
- package/.output/server/database/migrations/meta/_journal.json +7 -0
- package/.output/server/database/migrations-pg/0045_loose_runaways.sql +1 -0
- package/.output/server/database/migrations-pg/meta/0045_snapshot.json +4480 -0
- package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
- package/.output/server/index.mjs +3 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/bin/piwi-server.mjs +10 -0
- package/package.json +1 -1
- package/.output/public/_nuxt/BG0KKQiT.js +0 -7
- package/.output/public/_nuxt/CIEceDOw.js +0 -1
- package/.output/public/_nuxt/CRBXM2d6.js +0 -5
- package/.output/public/_nuxt/Cejoebel.js +0 -6
- package/.output/public/_nuxt/DCoJlz_q.js +0 -1
- package/.output/public/_nuxt/Da8A92cF.js +0 -1
- package/.output/public/_nuxt/DepFDZO3.js +0 -1
- package/.output/public/_nuxt/Vxyo_mU9.js +0 -1
- package/.output/public/_nuxt/bFU9Y1Vw.js +0 -10
- package/.output/public/_nuxt/builds/meta/31ca2be4-a949-4df6-9818-773fc085557a.json +0 -1
- package/.output/public/_nuxt/four-S1Y.js +0 -1
- package/.output/public/_nuxt/oSJFAC38.js +0 -1
- package/.output/public/_nuxt/rL4C0HV5.js +0 -1
- package/.output/public/trace-viewer/assets/codeMirrorModule-LEHpjmcn.js +0 -32
- package/.output/public/trace-viewer/assets/defaultSettingsView-BNmKHKpQ.js +0 -264
- package/.output/public/trace-viewer/assets/urlMatch-BYQrIQwR.js +0 -1
- package/.output/public/trace-viewer/assets/xtermModule-CsJ4vdCR.js +0 -9
- package/.output/public/trace-viewer/codeMirrorModule.DYBRYzYX.css +0 -1
- package/.output/public/trace-viewer/codicon.DCmgc-ay.ttf +0 -0
- package/.output/public/trace-viewer/defaultSettingsView.CjdS-WJx.css +0 -1
- package/.output/public/trace-viewer/index.CzXZzn5A.css +0 -1
- package/.output/public/trace-viewer/index.DMMX1gXU.js +0 -2
- package/.output/public/trace-viewer/index.html +0 -44
- package/.output/public/trace-viewer/manifest.webmanifest +0 -16
- package/.output/public/trace-viewer/playwright-logo.svg +0 -9
- package/.output/public/trace-viewer/snapshot.html +0 -10
- package/.output/public/trace-viewer/snapshot.v8KI4P3m.js +0 -2
- package/.output/public/trace-viewer/sw.bundle.js +0 -5
- package/.output/public/trace-viewer/uiMode.BZQ54Kgt.css +0 -1
- package/.output/public/trace-viewer/uiMode.Ut8wwJNp.js +0 -6
- package/.output/public/trace-viewer/uiMode.html +0 -18
- package/.output/public/trace-viewer/xtermModule.DYP7pi_n.css +0 -32
- package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +0 -1
- package/.output/server/chunks/build/Breadcrumb-3itRZ1uz.mjs.map +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-GnjBvXuT.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-DQqJS9CV.mjs.map +0 -1
- package/.output/server/chunks/build/Card-BQP_oZkQ.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-D0rzMf-N.mjs.map +0 -1
- package/.output/server/chunks/build/ChartMarkerTooltip-0DcMfD_6.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-DmRKG-0s.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-DGhKVFad.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-DCr10nxL.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-8EpBhX0R.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-rzS-pgCP.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-BWTpoCKy.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisResult-Br3qBLXe.mjs.map +0 -1
- package/.output/server/chunks/build/DurationValue-CWKfjIF2.mjs.map +0 -1
- package/.output/server/chunks/build/EntityLinks-CF0xG3Y8.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs.map +0 -1
- package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs.map +0 -1
- package/.output/server/chunks/build/FormField-e7OnSKPM.mjs.map +0 -1
- package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-DjGrGFA7.mjs.map +0 -1
- package/.output/server/chunks/build/LoadingState-B8v1nWJt.mjs.map +0 -1
- package/.output/server/chunks/build/MarkerBadge-D7meXy4u.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-pSDlXzT3.mjs.map +0 -1
- package/.output/server/chunks/build/NavigationMenu-cqpt11Ce.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-BwHEtZTz.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-BDRIWn3o.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-CuTDknRJ.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-BW5Lynrr.mjs.map +0 -1
- package/.output/server/chunks/build/Select-CVctwpib.mjs.map +0 -1
- package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-DvtRvI6O.mjs.map +0 -1
- package/.output/server/chunks/build/Skeleton-CEHuuKVh.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-D270EZZD.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-8zWfwI5B.mjs.map +0 -1
- package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +0 -1
- package/.output/server/chunks/build/Tabs-BkSOnbaB.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-C6t5RrCG.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-DhbrM_rQ.mjs.map +0 -1
- package/.output/server/chunks/build/Textarea-vkMKVQTJ.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-2PMH6rl8.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-8cGIgeg6.mjs.map +0 -1
- package/.output/server/chunks/build/about-D3WXTDro.mjs.map +0 -1
- package/.output/server/chunks/build/account-BslDNCoo.mjs.map +0 -1
- package/.output/server/chunks/build/compare-RxHSOdsO.mjs.map +0 -1
- package/.output/server/chunks/build/db.client-D74DghqX.mjs.map +0 -1
- package/.output/server/chunks/build/edit-BOC4zWuH.mjs.map +0 -1
- package/.output/server/chunks/build/fetch-BQg_fhX0.mjs.map +0 -1
- package/.output/server/chunks/build/forgot-password-CxuVbGWy.mjs.map +0 -1
- package/.output/server/chunks/build/import-CC27wEIu.mjs.map +0 -1
- package/.output/server/chunks/build/index-BOK1aJk9.mjs.map +0 -1
- package/.output/server/chunks/build/index-BhS1DuCr.mjs.map +0 -1
- package/.output/server/chunks/build/index-DUmjP3Gr.mjs.map +0 -1
- package/.output/server/chunks/build/index-jvF53f7_.mjs.map +0 -1
- package/.output/server/chunks/build/login-CdpOhiP8.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-WTeO5WRo.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-yY6ik-fi.mjs.map +0 -1
- package/.output/server/chunks/build/pr-feedback-Hv2Ydh_6.mjs.map +0 -1
- package/.output/server/chunks/build/reset-password-CFtO8A6n.mjs.map +0 -1
- package/.output/server/chunks/build/settings-DIpvnY8_.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-DRv9VveS.mjs.map +0 -1
- package/.output/server/chunks/build/setup-Di0UMyWx.mjs.map +0 -1
- package/.output/server/chunks/build/storage-gAbY1KbQ.mjs.map +0 -1
- package/.output/server/chunks/build/tags-DJ80wCqt.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-YP83YlnL.mjs.map +0 -1
- package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs.map +0 -1
- package/.output/server/chunks/build/timeout-hygiene-RpXDjXTX.mjs +0 -330
- package/.output/server/chunks/build/timeout-hygiene-RpXDjXTX.mjs.map +0 -1
- package/.output/server/chunks/build/useChartMarkers-C89e_VLV.mjs.map +0 -1
- package/.output/server/chunks/build/useCopyRich-Cd5Yj_Wy.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopDownload-BmR6ouz2.mjs.map +0 -1
- package/.output/server/chunks/build/useOpenInIde-DolN3bZ5.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs.map +0 -1
- package/.output/server/chunks/build/users-I2K7HXS2.mjs.map +0 -1
- package/.output/server/chunks/build/wasted-time-DyIk0olc.mjs +0 -301
- package/.output/server/chunks/build/wasted-time-DyIk0olc.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as Le}from"./9ti9eNH9.js";import{_ as Pe}from"./B_13C0GF.js";import{_ as _e,a as De,b as Oe,c as He,d as qe,e as Ke,f as Ge,g as ke,u as We,h as Je,i as Ze,j as Qe,k as Xe,l as Ye,m as et}from"./Ctb2CqUf.js";import{d as ee,o as s,f as S,g as p,i as t,j as r,c as l,t as o,v as d,s as ce,k as e,m as b,p as te,G as be,F as B,y as Q,_ as ie,h as D,H as tt,q as Y,I as st,r as x,J as ae,B as nt,l as Z,E as $e,K as at,L as ot,C as fe,M as lt,b as rt,u as it,w as ct,e as ut,N as dt}from"./DCFbQvIN.js";import{_ as Ce}from"./Ebw5l7n8.js";import{_ as mt,a as ft}from"./DQM62mxB.js";import{_ as ge}from"./BpM6ZPIG.js";import{_ as pt}from"./DL24AjfW.js";import{_ as gt}from"./B3Fsod9X.js";import{_ as we}from"./B1RmmOsM.js";import{_ as xt,a as vt,i as ht,b as yt,s as ve,c as _t}from"./B3rirOqU.js";import{c as he,f as re,a as kt,b as bt,d as $t,g as Se,s as pe,e as de,r as ye,h as Ct}from"./BAKUqW95.js";import{_ as xe}from"./LHoUGrfi.js";import{_ as wt}from"./_rglcvXN.js";import{_ as St}from"./RAdNGxcF.js";import{_ as Tt}from"./DdH3op4b.js";import{_ as It}from"./Dk9nD32g.js";import{_ as Te}from"./oKrbs1XK.js";import{u as jt,p as Rt,_ as zt}from"./ZcAfCxWE.js";import{b as Ut}from"./BfTNbVc_.js";import{a as Et,u as Vt}from"./E-_n_6vi.js";import"./C2hNxjjz.js";import"./CFTZwazK.js";import"./BnbSEpXX.js";import"./rL4C0HV5.js";import"./DkT2nCqn.js";import"./D8gX1Jde.js";import"./D-c8ZSws.js";import"./Cpsq-kYE.js";import"./BjaRappk.js";import"./YE1kAkU9.js";import"./CIEceDOw.js";import"./CTD_pJ_v.js";import"./DqEOMteW.js";import"./BGL_V7Y4.js";import"./CifRHVaR.js";const At={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Mt={class:"flex items-center gap-3 min-w-0"},Nt={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Ft={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Bt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Lt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Pt={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Dt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Ot={class:"lg:col-span-9"},Ht={class:"space-y-3"},qt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Kt={class:"flex flex-wrap gap-2"},Gt={class:"text-sm text-gray-500"},Wt={key:1,class:"rounded-md border border-default p-3 space-y-1.5"},Jt={class:"flex items-center gap-2 flex-wrap"},Zt={key:0,class:"text-xs text-gray-500"},Qt={class:"text-xs text-gray-500"},Xt={class:"text-sm text-gray-500"},Yt={class:"font-mono text-xs"},es={class:"flex items-start gap-3"},ts={class:"flex flex-col gap-1 shrink-0"},ss={class:"flex-1 min-w-0 space-y-1.5"},ns={class:"flex justify-end"},as=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:j}){const f=a,$=j,m=D(()=>$t(f.cluster.fixVerification)),C=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(n,u)=>{const y=ce,U=te,E=ge,R=be,T=pt,h=gt,I=ie,v=we,A=xt;return s(),S(A,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",At,[t("div",Mt,[r(y,{color:("clusterStatusColor"in n?n.clusterStatusColor:e(bt))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[b(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",Nt,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(y,{key:0,color:("clusterErrorTypeColor"in n?n.clusterErrorTypeColor:e(he))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[b(o(a.cluster.errorType),1)]),_:1},8,["color"])):d("",!0),e(m)?(s(),S(y,{key:1,color:e(m).color,variant:"subtle",size:"sm",class:"gap-1 shrink-0"},{default:p(()=>[r(U,{name:e(m).icon,class:"size-3"},null,8,["name"]),b(" "+o(e(m).label),1)]),_:1},8,["color"])):d("",!0)]),t("div",Ft,[t("span",Bt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Lt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(y,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[r(U,{name:"i-lucide-sparkles",class:"size-3"}),b(" "+o(a.cluster.diagnosis.category),1)]),_:1})):d("",!0),a.cluster.lastSeenAt?(s(),l("span",Pt," last seen "+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.lastSeenAt)),1)):d("",!0)])])]),default:p(()=>[t("div",Dt,[t("div",Ot,[r(h,{title:a.cluster.signature},{default:p(()=>[t("div",Ht,[a.cluster.title?(s(),l("p",qt,o(a.cluster.title),1)):d("",!0),t("div",Kt,[a.cluster.errorType?(s(),S(y,{key:0,color:("clusterErrorTypeColor"in n?n.clusterErrorTypeColor:e(he))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[b(o(a.cluster.errorType),1)]),_:1},8,["color"])):d("",!0),r(y,{color:"neutral",variant:"subtle"},{default:p(()=>[b(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),r(y,{color:"neutral",variant:"subtle"},{default:p(()=>[b(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(y,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[r(U,{name:"i-lucide-sparkles",class:"size-3"}),b(" "+o(a.cluster.diagnosis.category),1)]),_:1})):d("",!0),r(E,{topic:"cluster.concept"})]),t("p",Gt,[u[2]||(u[2]=b(" First seen in ",-1)),r(R,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[b(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(B,{key:0},[b(" ("+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.firstSeenAt))+") ",1)],64)):d("",!0),u[3]||(u[3]=b(" · Last seen in ",-1)),r(R,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[b(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(B,{key:1},[b(" ("+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.lastSeenAt))+") ",1)],64)):d("",!0),a.cluster.lastSeenRunStatus?(s(),S(T,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):d("",!0)]),e(m)?(s(),l("div",Wt,[t("div",Jt,[r(y,{color:e(m).color,variant:"subtle",class:"gap-1"},{default:p(()=>[r(U,{name:e(m).icon,class:"size-3"},null,8,["name"]),b(" "+o(e(m).label),1)]),_:1},8,["color"]),a.cluster.timeToResolutionMs!=null?(s(),l("span",Zt," open for "+o(("formatDuration"in n?n.formatDuration:e(kt))(a.cluster.timeToResolutionMs)),1)):d("",!0),r(E,{topic:"cluster.resolution"})]),t("p",Qt,o(e(m).hint),1),t("p",Xt,[a.cluster.fixLandedRunId?(s(),l(B,{key:0},[u[4]||(u[4]=b(" Fix landed in ",-1)),r(R,{to:`/test-runs/${a.cluster.fixLandedRunId}`,class:"text-primary hover:underline"},{default:p(()=>[b(" run #"+o(a.cluster.fixLandedRunId),1)]),_:1},8,["to"])],64)):d("",!0),a.cluster.fixLandedAt?(s(),l(B,{key:1},[b(" ("+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.fixLandedAt))+")",1)],64)):d("",!0),a.cluster.fixCommit?(s(),l(B,{key:2},[u[5]||(u[5]=b(" · commit ",-1)),t("code",Yt,o(a.cluster.fixCommit.slice(0,8)),1)],64)):d("",!0)])])):d("",!0)])]),_:1},8,["title"])]),r(h,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",es,[t("div",ts,[(s(),l(B,null,Q(C,M=>r(I,{key:M.value,size:"xs",class:"justify-start",color:a.triageStatus===M.value?M.color:"neutral",variant:a.triageStatus===M.value?"solid":"outline",onClick:O=>$("update:triageStatus",M.value)},{default:p(()=>[b(o(M.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",ss,[r(v,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":u[0]||(u[0]=M=>$("update:triageNote",M))},null,8,["model-value"]),t("div",ns,[a.triageChanged?(s(),S(I,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:u[1]||(u[1]=M=>$("save-triage"))},{default:p(()=>[...u[6]||(u[6]=[b(" Save ",-1)])]),_:1},8,["loading"])):d("",!0)])])])]),_:1})])]),_:1})}}}),os=Object.assign(as,{__name:"ClusterSummary"}),ls={class:"divide-y divide-default"},rs={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},is={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},cs=ee({__name:"TestEvidenceSignals",props:st({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const j=a,f=D(()=>Array.isArray(j.consoleLogs)?j.consoleLogs.filter(u=>u.type==="error"||u.type==="warning"):[]),$=D(()=>Array.isArray(j.networkRequests)?j.networkRequests.filter(u=>u.status&&u.status>=400):[]),m=D(()=>f.value.length>0||$.value.length>0),C=D(()=>{const u=[];return f.value.length&&u.push(`${f.value.length} console`),$.value.length&&u.push(`${$.value.length} network`),u.join(", ")}),n=tt(a,"open");return(u,y)=>{const U=te,E=ce,R=_e;return e(m)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(C)})`,open:n.value,"onUpdate:open":y[0]||(y[0]=T=>n.value=T)},{default:p(()=>[t("div",ls,[e(f).length>0?(s(),l(B,{key:0},[y[1]||(y[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(B,null,Q(e(f),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[r(U,{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",rs,o(T.text),1)]))),128))],64)):d("",!0),e($).length>0?(s(),l(B,{key:1},[y[2]||(y[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(B,null,Q(e($),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[r(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[b(o(T.status),1)]),_:2},1032,["color"]),t("p",is,o(T.url),1)]))),128))],64)):d("",!0)])]),_:1},8,["label","open"])):d("",!0)}}}),us=Object.assign(cs,{__name:"TestEvidenceSignals"}),ds={class:"space-y-3"},ms={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},fs=["title","onClick"],ps={key:0,class:"opacity-60 ml-1"},gs={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},xs={class:"min-w-0"},vs={class:"text-sm font-medium break-words"},hs={key:2,class:"flex items-center justify-center py-10"},ys={key:0,class:"flex flex-wrap gap-1.5"},_s={class:"divide-y divide-default"},ks={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},bs={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},$s={class:"overflow-x-auto max-h-72"},Cs={class:"max-h-64 overflow-auto"},ws=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const j=a,f=x(j.affectedTestCases[0]?.recentTestRunsCaseId??null),$=D(()=>j.affectedTestCases.find(i=>i.recentTestRunsCaseId===f.value)),m=x(null),C=x([]),n=x(!1),u=x(!1),y=x(!1),U=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){y.value=!1,U.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(i){I();const w=h.get(i);if(w){m.value=w.detail,C.value=w.traces,n.value=!1,u.value=!1;return}n.value=!0,u.value=!0,m.value=null,C.value=[];const[P,q]=await Promise.allSettled([$fetch(`/api/test-run-cases/${i}`),$fetch(`/api/test-run-cases/${i}/traces`)]);P.status==="fulfilled"&&(m.value=P.value),n.value=!1,q.status==="fulfilled"&&(C.value=q.value),u.value=!1,P.status==="fulfilled"&&q.status==="fulfilled"&&h.set(i,{detail:P.value,traces:q.value})}const A=new Map,M=x(null),O=x("trace"),N=D(()=>M.value?.frames??[]);async function H(i){if(M.value=A.get(i)??null,A.has(i)||C.value.length===0)return;const w=m.value?.testRun?.id;if(w)try{const P=await $fetch(`/api/test-runs/${w}/cases/${i}/trace-stacks`),q=P.status==="ok"&&P.frames?.length?P:null;A.set(i,q),f.value===i&&(M.value=q)}catch{A.set(i,null)}}ae([m,C],()=>{O.value="trace",f.value&&H(f.value)}),ae(f,i=>{i&&v(i)}),nt(()=>{f.value&&v(f.value)});const V=D(()=>{const i=m.value?.steps;return Array.isArray(i)?i.filter(w=>w.error):[]}),L=D(()=>m.value?.testSource?m.value.testSource.split(`
|
|
2
|
-
`).length:0),z=D(()=>{const i=m.value;if(!i)return[];const w=i.attachments.filter(_=>ht(_.path,_.contentType)).length,P=i.attachments.filter(_=>yt(_.path,_.contentType)).length,q=Array.isArray(i.consoleLogs)?i.consoleLogs.filter(_=>_.type==="error"||_.type==="warning").length:0,X=Array.isArray(i.networkRequests)?i.networkRequests.filter(_=>(_.status??0)>=400).length:0;return[{icon:"i-lucide-image",label:"screenshots",count:w},{icon:"i-lucide-video",label:"videos",count:P},{icon:"i-lucide-bug-play",label:"traces",count:C.value.length},{icon:"i-lucide-list-checks",label:"failing steps",count:V.value.length},{icon:"i-lucide-triangle-alert",label:"signals",count:q+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(_=>_.count>0)});return(i,w)=>{const P=xe,q=ie,X=te,_=ce,c=De,k=Oe,F=He,K=_e,G=us,W=wt,J=qe,se=Ke,ne=vt,ue=Ge;return s(),l("div",ds,[a.affectedTestCases.length>1?(s(),l("div",ms,[(s(!0),l(B,null,Q(a.affectedTestCases,g=>(s(),l("button",{key:g.recentTestRunsCaseId,class:Y(["px-3 py-1.5 text-xs whitespace-nowrap border-b-2 -mb-px transition-colors",e(f)===g.recentTestRunsCaseId?"border-primary text-primary font-medium":"border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:g.title,onClick:oe=>f.value=g.recentTestRunsCaseId},[b(o(g.title.split(" › ").pop())+" ",1),g.runCount>1?(s(),l("span",ps,o(g.runCount)+"×",1)):d("",!0)],10,fs))),128))])):d("",!0),e($)?(s(),l("div",gs,[t("div",xs,[t("p",vs,o(e($).title),1),r(P,{"file-path":e($).filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])]),r(q,{to:`/test-run-cases/${e($).recentTestRunsCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:p(()=>[...w[6]||(w[6]=[b(" Open execution ",-1)])]),_:1},8,["to"])])):d("",!0),e(n)?(s(),l("div",hs,[r(X,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(m)?(s(),l(B,{key:3},[e(z).length?(s(),l("div",ys,[(s(!0),l(B,null,Q(e(z),g=>(s(),S(_,{key:g.label,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:p(()=>[r(X,{name:g.icon,class:"size-3"},null,8,["name"]),b(" "+o(g.count)+" "+o(g.label),1)]),_:2},1024))),128))])):d("",!0),r(c,{attachments:e(m).attachments},null,8,["attachments"]),r(k,{attachments:e(m).attachments},null,8,["attachments"]),r(F,{traces:e(C),loading:e(u)},null,8,["traces","loading"]),e(V).length>0?(s(),S(K,{key:1,icon:"i-lucide-list-checks",label:"Failing steps",count:e(V).length,open:e(y),"onUpdate:open":w[0]||(w[0]=g=>Z(y)?y.value=g:null)},{default:p(()=>[t("div",_s,[(s(!0),l(B,null,Q(e(V),(g,oe)=>(s(),l("div",{key:oe,class:"px-3 py-2 space-y-0.5"},[t("p",ks,o(oe+1)+". "+o(g.title),1),g.error?.message?(s(),l("p",bs,o(g.error.message),1)):d("",!0)]))),128))])]),_:1},8,["count","open"])):d("",!0),r(G,{"console-logs":e(m).consoleLogs,"network-requests":e(m).networkRequests,open:e(U),"onUpdate:open":w[1]||(w[1]=g=>Z(U)?U.value=g:null)},null,8,["console-logs","network-requests","open"]),e(m).testSourceFrames?.length||e(m).testSource||e(N).length?(s(),S(K,{key:2,icon:"i-lucide-code",label:"Test source",count:e(N).length||e(m).testSourceFrames?.length||e(L),open:e(E),"onUpdate:open":w[3]||(w[3]=g=>Z(E)?E.value=g:null)},{default:p(()=>[e(N).length&&(e(m).testSourceFrames?.length||e(m).testSource)?(s(),S(W,{key:0,modelValue:e(O),"onUpdate:modelValue":w[2]||(w[2]=g=>Z(O)?O.value=g:null),items:[{label:`Full stack (${e(N).length})`,value:"trace"},{label:`Captured (${e(m).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"])):d("",!0),t("div",$s,[e(O)==="trace"&&e(N).length?(s(),S(J,{key:0,frames:e(N),"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(m).testSourceFrames?.length?(s(),S(se,{key:1,frames:e(m).testSourceFrames,"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(m).testSource?(s(),S(ne,{key:2,text:"```typescript\n"+e(m).testSource+"\n```"},null,8,["text"])):d("",!0)])]),_:1},8,["count","open"])):d("",!0),e(m).ariaSnapshot?(s(),S(K,{key:3,icon:"i-lucide-accessibility",label:"ARIA snapshot",open:e(R),"onUpdate:open":w[4]||(w[4]=g=>Z(R)?R.value=g:null)},{default:p(()=>[t("div",Cs,[r(ne,{text:"```yaml\n"+e(m).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},8,["open"])):d("",!0),e(m).pageState?(s(),S(K,{key:4,icon:"i-lucide-database",label:"App state",open:e(T),"onUpdate:open":w[5]||(w[5]=g=>Z(T)?T.value=g:null)},{default:p(()=>[r(ue,{"page-state":e(m).pageState,plain:""},null,8,["page-state"])]),_:1},8,["open"])):d("",!0)],64)):d("",!0)])}}}),Ss=Object.assign(ws,{__name:"ClusterTestEvidence"}),Ts={key:0,class:"flex items-center gap-1.5 overflow-hidden min-w-0"},Is={class:"text-primary shrink-0"},js={class:"text-gray-500 truncate text-xs font-sans"},Rs={key:1,class:"text-primary text-xs"},zs={key:2,class:"text-gray-400 font-sans text-xs"},Us={class:"w-96 p-2 space-y-2"},Es={class:"flex items-center gap-1"},Vs={class:"flex items-center gap-1"},As={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"},Ms={class:"font-medium text-green-600 dark:text-green-400"},Ns={class:"font-medium text-red-600 dark:text-red-400"},Fs={class:"text-gray-400"},Bs={key:1,class:"flex items-center justify-center gap-2 py-6 text-gray-400"},Ls={key:2,class:"py-4 text-center text-sm text-red-500"},Ps={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"},Ds={key:4,class:"max-h-80 overflow-y-auto space-y-px"},Os={class:"text-xs text-primary"},Hs={key:1,class:"py-4 text-center text-sm text-gray-400"},qs=["onClick"],Ks={class:"text-xs text-primary shrink-0 w-14 pt-px"},Gs={class:"flex-1 min-w-0"},Ws={class:"text-xs font-medium leading-snug truncate"},Js={class:"text-xs text-gray-400 leading-snug truncate"},Zs=ee({__name:"CommitPicker",props:{modelValue:{},clusterId:{}},emits:["update:modelValue"],setup(a,{emit:j}){const f=a,$=j,m=x(!1),C=x(""),n=x([]),u=x(null),y=x(null),U=x(!1),E=x(!1),R=x(null),T=x(null),h=x([]),I=x(!1),v=x(void 0),A=D(()=>{if(!f.modelValue)return null;const z=f.modelValue.trim();return n.value.find(w=>w.sha===z||w.sha.startsWith(z))??{sha:z,shortSha:z.slice(0,7),message:"",author:"",date:""}});async function M(){if(!h.value.length){I.value=!0;try{const z=await $fetch(`/api/failure-clusters/${f.clusterId}/branches`);h.value=z.branches}catch{}finally{I.value=!1}}}async function O(){const z=f.modelValue||"";U.value=!0,E.value=!1,T.value=null;try{const i={};z&&(i.baseline=z),v.value&&(i.branch=v.value);const w=await $fetch(`/api/failure-clusters/${f.clusterId}/commits`,{query:i});n.value=w.commits,y.value=w.aggregate,u.value=w.error??null,T.value=z}catch{E.value=!0}finally{U.value=!1}}ae(v,()=>{n.value=[],T.value=null,O()}),ae(m,async z=>{if(z){await Promise.all([M(),O()]),await ot();const i=R.value?.$el?.querySelector("input")??R.value?.$el;i instanceof HTMLElement&&i.focus()}else C.value=""});const N=D(()=>Se(n.value,C.value)),H=D(()=>{const z=C.value.trim();return!/^[0-9a-f]{7,40}$/i.test(z)||N.value.some(i=>i.sha.startsWith(z.toLowerCase()))?null:z});function V(z){$("update:modelValue",z),m.value=!1}function L(z){z.stopPropagation(),u.value=null,y.value=null,$("update:modelValue",""),m.value=!1}return(z,i)=>{const w=ie,P=te,q=St,X=$e,_=at;return s(),S(_,{open:e(m),"onUpdate:open":i[4]||(i[4]=c=>Z(m)?m.value=c:null)},{content:p(()=>[t("div",Us,[t("div",Es,[r(P,{name:"i-lucide-git-branch",class:"size-3.5 text-gray-400 shrink-0"}),r(q,{modelValue:e(v),"onUpdate:modelValue":i[0]||(i[0]=c=>Z(v)?v.value=c: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",Vs,[r(X,{ref_key:"searchInputRef",ref:R,modelValue:e(C),"onUpdate:modelValue":i[1]||(i[1]=c=>Z(C)?C.value=c:null),placeholder:"Search message, author, SHA…",size:"xs",icon:"i-lucide-search",class:"flex-1"},null,8,["modelValue"]),a.modelValue?(s(),S(w,{key:0,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Clear baseline",onClick:i[2]||(i[2]=c=>L(c))})):d("",!0)]),e(y)&&a.modelValue&&!e(U)?(s(),l("div",As,[r(P,{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",Ms,"+"+o(e(y).linesAdded),1),t("span",Ns,"-"+o(e(y).linesRemoved),1),t("span",Fs,"across "+o(e(y).filesChanged)+" file"+o(e(y).filesChanged===1?"":"s"),1)])):d("",!0),e(U)?(s(),l("div",Bs,[r(P,{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",Ls," Failed to load commits — check your SCM token in Settings → AI ")):e(u)&&!e(U)&&e(n).length===0?(s(),l("div",Ps,[r(P,{name:"i-lucide-triangle-alert",class:"size-3.5 shrink-0 mt-0.5"}),t("span",null,o(e(u)),1)])):(s(),l("div",Ds,[e(H)?(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]=c=>V(e(H)))},[r(P,{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",Os,o(e(H).slice(0,7)),1)])):d("",!0),e(N).length===0&&!e(H)?(s(),l("div",Hs,o(e(C)?"No commits match":"No commits available"),1)):d("",!0),(s(!0),l(B,null,Q(e(N),c=>(s(),l("button",{key:c.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===c.sha?"bg-primary/10 ring-1 ring-inset ring-primary/30":""]),onClick:k=>V(c.sha)},[t("code",Ks,o(c.shortSha),1),t("div",Gs,[t("p",Ws,o(c.message),1),t("p",Js,[b(o(c.author),1),c.date?(s(),l(B,{key:0},[b(" · "+o(e(re)(c.date)),1)],64)):d("",!0)])]),a.modelValue===c.sha?(s(),S(P,{key:0,name:"i-lucide-check",class:"size-3.5 text-primary shrink-0 mt-0.5"})):d("",!0)],10,qs))),128))]))])]),default:p(()=>[r(w,{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(A)?.message?(s(),l("span",Ts,[t("code",Is,o(e(A).shortSha),1),t("span",js,o(e(A).message),1)])):a.modelValue?(s(),l("span",Rs,o(a.modelValue.slice(0,7))+"…",1)):(s(),l("span",zs,"baseline commit…"))]),_:1},8,["icon"])]),_:1},8,["open"])}}}),Qs=Object.assign(Zs,{__name:"CommitPicker"}),Xs={class:"space-y-3"},Ys={key:0,class:"space-y-1"},en={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},tn={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},sn={class:"text-xs text-gray-400 shrink-0"},nn={class:"text-xs text-gray-700 dark:text-gray-300 truncate"},an={class:"space-y-1"},on={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},ln={key:0,class:"text-yellow-500 font-normal normal-case"},rn={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},cn=["onClick"],un={class:"text-xs font-mono flex-1 truncate text-gray-700 dark:text-gray-300"},dn={class:"text-xs text-gray-400 shrink-0 tabular-nums"},mn={key:0,class:"text-green-500"},fn={key:1,class:"text-gray-300 mx-0.5"},pn={key:2,class:"text-red-500"},gn={key:0,class:"border-t border-default overflow-x-auto max-h-96"},xn=ee({__name:"ScmChangesView",props:{changes:{}},setup(a){const j=x(new Set);function f($){const m=new Set(j.value);m.has($)?m.delete($):m.add($),j.value=m}return($,m)=>{const C=te,n=ke;return s(),l("div",Xs,[a.changes.commits.length>0?(s(),l("div",Ys,[t("p",en,o(a.changes.commits.length)+" commit"+o(a.changes.commits.length===1?"":"s"),1),t("div",tn,[(s(!0),l(B,null,Q(a.changes.commits,u=>(s(),l("div",{key:u.sha,class:"flex items-center gap-2 px-3 py-1.5"},[r(C,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),t("code",sn,o(u.sha.slice(0,7)),1),t("span",nn,o(u.message),1)]))),128))])])):d("",!0),t("div",an,[t("p",on,[b(o(a.changes.files.length)+" file"+o(a.changes.files.length===1?"":"s")+" changed ",1),a.changes.patchesOmitted?(s(),l("span",ln," — diff too large, file names only ")):d("",!0)]),t("div",rn,[(s(!0),l(B,null,Q(a.changes.files,u=>(s(),l("div",{key:u.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",u.patch?"cursor-pointer":"cursor-default"]),onClick:y=>u.patch&&f(u.filename)},[r(C,{name:("scmFileStatusMeta"in $?$.scmFileStatusMeta:e(pe))(u.status).icon,class:Y(["size-3.5 shrink-0",("scmFileStatusMeta"in $?$.scmFileStatusMeta:e(pe))(u.status).color])},null,8,["name","class"]),t("span",un,o(u.filename),1),t("span",dn,[u.additions?(s(),l("span",mn,"+"+o(u.additions),1)):d("",!0),u.additions&&u.deletions?(s(),l("span",fn,"/")):d("",!0),u.deletions?(s(),l("span",pn,"-"+o(u.deletions),1)):d("",!0)]),u.patch?(s(),S(C,{key:0,name:e(j).has(u.filename)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-3.5 text-gray-400 shrink-0"},null,8,["name"])):d("",!0)],10,cn),u.patch&&e(j).has(u.filename)?(s(),l("div",gn,[r(n,{patch:u.patch},null,8,["patch"])])):d("",!0)]))),128))])])])}}}),vn=Object.assign(xn,{__name:"ScmChangesView"}),hn={class:"border border-default rounded-lg overflow-clip text-xs font-mono"},yn={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"},_n={class:"font-medium truncate"},kn={class:"shrink-0 flex items-center gap-1.5 ml-2 text-[11px]"},bn={key:0,class:"text-green-600 dark:text-green-400"},$n={key:1,class:"text-red-600 dark:text-red-400"},Cn={key:1,class:"px-3 py-2 text-gray-400 text-[11px]"},wn=ee({__name:"DiffFile",props:{file:{}},setup(a){return(j,f)=>{const $=ce,m=ke;return s(),l("div",hn,[t("div",yn,[t("span",_n,o(a.file.filename),1),t("span",kn,[a.file.additions?(s(),l("span",bn,"+"+o(a.file.additions),1)):d("",!0),a.file.deletions?(s(),l("span",$n,"-"+o(a.file.deletions),1)):d("",!0),r($,{label:a.file.status,size:"xs",variant:"subtle",color:("scmFileStatusMeta"in j?j.scmFileStatusMeta:e(pe))(a.file.status).badgeColor},null,8,["label","color"])])]),a.file.patch?(s(),S(m,{key:0,patch:a.file.patch},null,8,["patch"])):(s(),l("div",Cn,"No patch available"))])}}}),Sn=Object.assign(wn,{__name:"DiffFile"}),Tn={class:"inline-flex items-center gap-1"},In={class:"flex h-[72vh] overflow-hidden"},jn={class:"w-72 shrink-0 border-r border-default flex flex-col"},Rn={class:"p-2 border-b border-default space-y-2 shrink-0"},zn={class:"flex items-center gap-2 text-xs text-gray-500"},Un={class:"ml-auto"},En={key:2,class:"flex-1 overflow-y-auto flex flex-col"},Vn={key:0,class:"py-6 text-center text-sm text-gray-400 flex-1"},An=["onClick"],Mn=["checked","onChange"],Nn={class:"flex-1 min-w-0"},Fn={class:"text-xs font-medium leading-snug truncate"},Bn={class:"text-[10px] text-gray-400 leading-snug mt-0.5 flex items-center gap-1 min-w-0"},Ln={class:"text-primary shrink-0"},Pn={class:"truncate"},Dn={key:0,class:"shrink-0"},On={key:1,class:"p-2 shrink-0 space-y-1.5"},Hn={key:0,class:"flex items-center gap-1.5 text-xs text-red-500 px-1"},qn={class:"flex-1 overflow-y-auto flex flex-col min-w-0"},Kn={key:0,class:"flex-1 flex items-center justify-center text-gray-400 text-sm"},Gn={key:2,class:"flex-1 p-4 space-y-3"},Wn={key:0,class:"space-y-0.5 pb-3 border-b border-default"},Jn={class:"flex items-center gap-2"},Zn={class:"text-xs font-mono text-primary"},Qn={class:"text-xs text-gray-400"},Xn={class:"text-sm font-semibold"},Yn={key:1,class:"text-sm text-gray-400 pt-2"},ea={key:4,class:"flex-1 flex items-center justify-center text-sm text-gray-400"},ta={class:"flex items-center gap-3 w-full"},sa={class:"flex-1 flex items-center gap-2 text-sm text-gray-500 min-w-0"},na={class:"font-medium text-gray-700 dark:text-gray-200 shrink-0"},aa={class:"shrink-0"},oa={class:"text-green-600 dark:text-green-400 shrink-0 font-medium"},la={class:"text-red-600 dark:text-red-400 shrink-0 font-medium"},ra={key:1,class:"text-gray-400 text-xs shrink-0"},ia={key:1},me=50,ca=ee({__name:"CommitBrowserModal",props:{open:{type:Boolean},clusterId:{},initialSelected:{},autoSelectedShas:{}},emits:["update:open","confirm"],setup(a,{emit:j}){const f=a,$=D(()=>new Set(f.autoSelectedShas??[])),m=j,C=x(""),n=x([]),u=x(me),y=x(!1),U=x(!1),E=x(!1),R=x(null),T=x(null),h=x(new Set),I=x(null),v=lt({}),A=x(null),M=x(!1),O=x(null),N=D(()=>n.value.find(_=>_.sha===I.value)??null),H=D(()=>Se(n.value,C.value)),V=D(()=>{let _=0,c=0,k=0,F=0;for(const K of h.value){if(!(K in v)){F++;continue}const G=v[K];G&&(_+=G.files.length,c+=G.files.reduce((W,J)=>W+J.additions,0),k+=G.files.reduce((W,J)=>W+J.deletions,0))}return{files:_,linesAdded:c,linesRemoved:k,unreviewed:F}});async function L(_){_?(U.value=!0,R.value=null):(E.value=!0,T.value=null);try{const c=await $fetch(`/api/failure-clusters/${f.clusterId}/commits`,{query:{limit:u.value}});n.value=c.commits,y.value=c.hasMore??!1,c.error&&!c.commits.length&&(_?R.value=c.error:T.value=c.error),_&&c.commits[0]&&i(c.commits[0].sha)}catch(c){_?R.value=de(c):T.value=de(c)}finally{U.value=!1,E.value=!1}}async function z(){u.value+=me,await L(!1)}ae(()=>f.open,async _=>{if(_){if(h.value=new Set(f.initialSelected??[]),n.value.length){!I.value&&n.value[0]&&i(n.value[0].sha);return}u.value=me,await L(!0)}});async function i(_){if(I.value!==_){if(I.value=_,O.value=null,_ in v){A.value=v[_],M.value=!1;return}A.value=null,M.value=!0;try{const c=await $fetch(`/api/failure-clusters/${f.clusterId}/commit-diff`,{query:{sha:_}});v[_]=c,I.value===_&&(A.value=c)}catch(c){I.value===_&&(O.value=de(c))}finally{I.value===_&&(M.value=!1)}}}function w(_){const c=new Set(h.value);c.has(_)?c.delete(_):c.add(_),h.value=c}function P(){h.value=new Set(H.value.map(_=>_.sha))}function q(){h.value=new Set}function X(){m("confirm",[...h.value]),m("update:open",!1)}return(_,c)=>{const k=ge,F=$e,K=Tt,G=ie,W=It,J=ce,se=te,ne=Sn,ue=Te;return s(),S(ue,{open:a.open,title:"Browse commits",ui:{content:"max-w-6xl",body:"p-0 overflow-hidden"},"onUpdate:open":c[4]||(c[4]=g=>m("update:open",g))},{title:p(()=>[t("span",Tn,[c[5]||(c[5]=b("Browse commits ",-1)),r(k,{topic:"cluster.commit-browser"})])]),body:p(()=>[t("div",In,[t("div",jn,[t("div",Rn,[r(F,{modelValue:e(C),"onUpdate:modelValue":c[0]||(c[0]=g=>Z(C)?C.value=g:null),placeholder:"Search commits…",size:"xs",icon:"i-lucide-search"},null,8,["modelValue"]),t("div",zn,[t("button",{class:"hover:text-primary transition-colors",onClick:P},"All"),c[6]||(c[6]=t("span",null,"·",-1)),t("button",{class:"hover:text-primary transition-colors",onClick:q},"None"),t("span",Un,o(e(h).size>0?`${e(h).size} selected`:"none selected"),1)])]),e(U)?(s(),S(K,{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(()=>[r(G,{size:"xs",color:"neutral",variant:"outline",onClick:c[1]||(c[1]=g=>L(!0))},{default:p(()=>[...c[7]||(c[7]=[b(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):(s(),l("div",En,[e(H).length===0?(s(),l("div",Vn,o(e(C)?"No commits match":"No commits"),1)):d("",!0),(s(!0),l(B,null,Q(e(H),g=>(s(),l("button",{key:g.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)===g.sha?"bg-elevated":""]),onClick:oe=>i(g.sha)},[t("input",{type:"checkbox",checked:e(h).has(g.sha),class:"mt-0.5 shrink-0 cursor-pointer accent-primary",onClick:c[2]||(c[2]=fe(()=>{},["stop"])),onChange:oe=>w(g.sha)},null,40,Mn),t("div",Nn,[t("p",Fn,o(g.message||"(no message)"),1),t("p",Bn,[t("code",Ln,o(g.shortSha),1),t("span",Pn,o(g.author),1),g.date?(s(),l("span",Dn,"· "+o(e(re)(g.date)),1)):d("",!0),e($).has(g.sha)?(s(),S(J,{key:1,size:"xs",color:"info",variant:"soft",class:"shrink-0"},{default:p(()=>[...c[8]||(c[8]=[b(" auto ",-1)])]),_:1})):d("",!0)])])],10,An))),128)),e(y)&&!e(C)?(s(),l("div",On,[e(T)?(s(),l("p",Hn,[r(se,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),b(" "+o(e(T)),1)])):d("",!0),r(G,{size:"xs",color:"neutral",variant:"outline",block:"",loading:e(E),onClick:z},{default:p(()=>[...c[9]||(c[9]=[b(" Load more ",-1)])]),_:1},8,["loading"])])):d("",!0)]))]),t("div",qn,[e(I)?e(M)?(s(),S(K,{key:1,text:"Loading diff…",padded:!1,class:"flex-1"})):e(A)?(s(),l("div",Gn,[e(N)?(s(),l("div",Wn,[t("div",Jn,[t("code",Zn,o(e(N).shortSha),1),t("span",Qn,[b(o(e(N).author),1),e(N).date?(s(),l(B,{key:0},[b(" · "+o(e(re)(e(N).date)),1)],64)):d("",!0)])]),t("p",Xn,o(e(N).message),1)])):d("",!0),e(A).files.length===0?(s(),l("div",Yn,"No file changes in this commit")):d("",!0),(s(!0),l(B,null,Q(e(A).files,g=>(s(),S(ne,{key:g.filename,file:g},null,8,["file"]))),128))])):e(O)?(s(),S(W,{key:3,text:e(O),padded:!1,class:"flex-1 p-6"},{action:p(()=>[...c[10]||(c[10]=[t("p",{class:"text-xs text-gray-400"},"Click the commit again to retry",-1)])]),_:1},8,["text"])):(s(),l("div",ea," Diff not available for this commit ")):(s(),l("div",Kn," Select a commit to view its diff "))])])]),footer:p(()=>[t("div",ta,[t("div",sa,[e(h).size>0?(s(),l(B,{key:0},[t("span",na,o(e(h).size)+" commit"+o(e(h).size===1?"":"s"),1),e(V).files>0||e(V).linesAdded>0||e(V).linesRemoved>0?(s(),l(B,{key:0},[c[11]||(c[11]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("span",aa,o(e(V).files)+" file"+o(e(V).files===1?"":"s"),1),t("span",oa,"+"+o(e(V).linesAdded),1),t("span",la,"-"+o(e(V).linesRemoved),1)],64)):d("",!0),e(V).unreviewed>0?(s(),l("span",ra," ("+o(e(V).unreviewed)+" unreviewed) ",1)):d("",!0)],64)):(s(),l("span",ia,"No commits selected"))]),r(G,{color:"neutral",variant:"ghost",onClick:c[3]||(c[3]=g=>m("update:open",!1))},{default:p(()=>[...c[12]||(c[12]=[b(" Cancel ",-1)])]),_:1}),r(G,{color:"primary",disabled:e(h).size===0,onClick:X},{default:p(()=>[...c[13]||(c[13]=[b(" Add to context ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["open"])}}}),ua=Object.assign(ca,{__name:"CommitBrowserModal"});function Ie(a){return{scmStatus:D(()=>{const f=a.value?.scm;if(!f)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"Git context unavailable",detail:""};if(f.baseCommitUsed){if(f.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${f.baseCommitUsed.slice(0,7)} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};const C=f.patchesOmitted?", no patches (diff too large)":f.patchesTruncated?`, ${f.patchedFilesCount} with patches (some cut)`:`, ${f.patchedFilesCount} with patches`;return{color:"text-blue-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${f.baseCommitUsed.slice(0,7)} · ${f.filesCount} files${C}`,detail:f.hasLastGreen?"overrides last passing run baseline":"no last passing run"}}if(!f.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(!f.hasCommitRange)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No commit range",detail:"reporter did not send SCM metadata"};if(!f.provider)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:"Unsupported SCM host",detail:"only GitHub, GitLab and Bitbucket are supported"};if(f.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${f.provider} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};if(f.patchesOmitted)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${f.provider} · ${f.filesCount} files`,detail:"diff too large — file list only, no patches"};const $=f.patchesTruncated?", some patches cut (budget)":"",m=f.commitsCount>0?` · ${f.commitsCount} commit${f.commitsCount>1?"s":""}`:"";return{color:"text-green-500",icon:"i-lucide-git-branch",text:`${f.provider} · ${f.filesCount} files · ${f.patchedFilesCount} with patches${$}${m}`,detail:""}})}}const da={class:"space-y-3"},ma={class:"pb-2 border-b border-default"},fa={class:"flex items-center gap-2 flex-wrap"},pa={class:"text-xs text-gray-500 font-medium shrink-0 inline-flex items-center gap-1"},ga={class:"flex items-center gap-1.5 ml-auto"},xa={key:0,class:"flex items-center gap-1 px-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium"},va={key:0,class:"flex items-start gap-1.5 text-xs px-2 py-1.5 rounded-md bg-elevated border border-default"},ha={key:0,class:"text-gray-400 ml-1"},ya={key:1,class:"flex items-center justify-center py-6"},_a={key:3,class:"text-xs text-gray-400 text-center py-4"},ka=ee({__name:"ClusterInvestigation",setup(a){const{clusterId:j,baseCommit:f,selectedCommitShas:$,autoSelectedCommits:m,baseCommitIsPinned:C,coverage:n,scmChanges:u,contextLoading:y,refreshContext:U}=jt(),E=x(!1),{scmStatus:R}=Ie(n);return(T,h)=>{const I=ge,v=Qs,A=te,M=Ce,O=ie,N=vn,H=ua;return s(),l(B,null,[t("div",da,[t("div",ma,[t("div",fa,[t("span",pa,[h[5]||(h[5]=b(" Baseline ",-1)),r(I,{topic:"cluster.baseline"})]),r(v,{modelValue:e(f),"onUpdate:modelValue":h[0]||(h[0]=V=>Z(f)?f.value=V:null),"cluster-id":e(j)},null,8,["modelValue","cluster-id"]),e(C)?(s(),S(M,{key:0,text:"Baseline commit pinned for this cluster"},{default:p(()=>[r(A,{name:"i-lucide-pin",class:"size-3.5 text-primary shrink-0"})]),_:1})):d("",!0),t("div",ga,[e($).length?(s(),l("div",xa,[r(A,{name:"i-lucide-git-commit-horizontal",class:"size-3"}),t("span",null,o(e($).length)+" commit"+o(e($).length===1?"":"s"),1),t("button",{class:"ml-0.5 hover:opacity-70 transition-opacity",onClick:h[1]||(h[1]=V=>$.value=[])},[r(A,{name:"i-lucide-x",class:"size-3"})])])):d("",!0),r(O,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list",onClick:h[2]||(h[2]=V=>E.value=!0)},{default:p(()=>[...h[6]||(h[6]=[b(" Browse ",-1)])]),_:1}),r(O,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"outline",loading:e(y),onClick:e(U)},null,8,["loading","onClick"])])])]),e(n)?(s(),l("div",va,[r(A,{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",ha,"— "+o(e(R).detail),1)):d("",!0)])])):d("",!0),e(y)&&!e(u)?(s(),l("div",ya,[r(A,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-gray-400"})])):e(u)?(s(),S(N,{key:2,changes:e(u)},null,8,["changes"])):e(n)&&!e(y)&&!e(u)?(s(),l("p",_a," No changes found in this range. ")):d("",!0)]),r(H,{open:e(E),"onUpdate:open":h[3]||(h[3]=V=>Z(E)?E.value=V:null),"cluster-id":e(j),"initial-selected":e($),"auto-selected-shas":e(m),onConfirm:h[4]||(h[4]=V=>$.value=V)},null,8,["open","cluster-id","initial-selected","auto-selected-shas"])],64)}}}),ba=Object.assign(ka,{__name:"ClusterInvestigation"}),$a={class:"flex flex-col h-[60vh]"},Ca={class:"flex items-center gap-3 px-4 py-2.5 border-b border-default text-sm shrink-0"},wa={key:0,class:"ml-auto text-xs text-gray-500"},Sa={class:"flex-1 overflow-y-auto"},Ta={class:"w-full text-sm"},Ia=["onClick"],ja={class:"px-4 py-2.5"},Ra=["checked","onChange"],za={class:"px-2 py-2.5 min-w-0"},Ua={class:"truncate font-medium text-gray-800 dark:text-gray-200 max-w-[24rem]"},Ea={class:"px-2 py-2.5 text-gray-500 text-xs max-w-[16rem] hidden sm:table-cell"},Va={class:"px-2 py-2.5 text-right text-gray-500 text-xs"},Aa={key:0},Ma={class:"shrink-0 border-t border-default px-4 py-3 space-y-1.5"},Na={key:0,class:"shrink-0 px-4 pb-3 flex items-center gap-1.5 text-xs text-red-500"},Fa={class:"flex items-center gap-3 w-full"},Ba=ee({__name:"ClusterExtractCasesModal",props:{open:{type:Boolean},clusterId:{},affectedTestCases:{},projectKey:{},projectName:{}},emits:["update:open","extracted"],setup(a,{emit:j}){const f=a,$=j,m=rt(),C=x(new Set),n=x(""),u=x(!1),y=x(null);function U(){C.value=new Set(f.affectedTestCases.map(I=>I.testCaseId))}function E(){C.value=new Set}function R(I){const v=new Set(C.value);v.has(I)?v.delete(I):v.add(I),C.value=v}ae(()=>f.open,I=>{I&&(E(),n.value="",y.value=null)});const T=D(()=>C.value.size);async function h(){if(T.value!==0){u.value=!0,y.value=null;try{await $fetch(`/api/failure-clusters/${f.clusterId}/extract-cases`,{method:"POST",body:{testCaseIds:[...C.value],triageNote:n.value.trim()||void 0}}),m.add({title:`Extracted ${T.value} test ${T.value===1?"case":"cases"}`,color:"success"}),$("extracted"),$("update:open",!1)}catch(I){y.value=de(I)}finally{u.value=!1}}}return(I,v)=>{const A=be,M=xe,O=we,N=te,H=ie,V=Te;return s(),S(V,{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]=L=>$("update:open",L))},{body:p(()=>[t("div",$a,[t("div",Ca,[t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:U},"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",wa,o(e(T))+" selected ",1)):d("",!0)]),t("div",Sa,[t("table",Ta,[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(B,null,Q(a.affectedTestCases,L=>(s(),l("tr",{key:L.testCaseId,class:"border-b border-default/50 hover:bg-elevated transition-colors cursor-pointer",onClick:z=>R(L.testCaseId)},[t("td",ja,[t("input",{type:"checkbox",checked:e(C).has(L.testCaseId),class:"shrink-0 cursor-pointer accent-primary",onClick:v[0]||(v[0]=fe(()=>{},["stop"])),onChange:z=>R(L.testCaseId)},null,40,Ra)]),t("td",za,[t("p",Ua,o(L.title),1),r(A,{to:`/test-cases/${L.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]=[b(" View details ",-1)])]),_:1},8,["to"])]),t("td",Ea,[r(M,{"file-path":L.filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"max-w-full"},null,8,["file-path","project-key","project-name"])]),t("td",Va,o(L.runCount),1)],8,Ia))),128)),a.affectedTestCases.length===0?(s(),l("tr",Aa,[...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)])])):d("",!0)])])]),t("div",Ma,[v[9]||(v[9]=t("label",{class:"text-xs font-medium text-gray-500 uppercase tracking-wide"},"Triage note (optional)",-1)),r(O,{modelValue:e(n),"onUpdate:modelValue":v[2]||(v[2]=L=>Z(n)?n.value=L:null),placeholder:"Add a note explaining why these tests were extracted…",rows:2,class:"text-sm w-full"},null,8,["modelValue"])]),e(y)?(s(),l("p",Na,[r(N,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),b(" "+o(e(y)),1)])):d("",!0)])]),footer:p(()=>[t("div",Fa,[v[11]||(v[11]=t("div",{class:"flex-1"},null,-1)),r(H,{color:"neutral",variant:"ghost",disabled:e(u),onClick:v[3]||(v[3]=L=>$("update:open",!1))},{default:p(()=>[...v[10]||(v[10]=[b(" Cancel ",-1)])]),_:1},8,["disabled"]),r(H,{color:"warning",disabled:e(T)===0,loading:e(u),onClick:h},{default:p(()=>[b(" Extract"+o(e(T)>0?` ${e(T)}`:""),1)]),_:1},8,["disabled","loading"])])]),_:1},8,["open"])}}}),La=Object.assign(Ba,{__name:"ClusterExtractCasesModal"}),Pa={key:0,class:"flex flex-col h-full min-h-0 max-xl:overflow-y-auto xl:overflow-hidden"},Da={class:"border-b border-default shrink-0"},Oa={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 p-1 xl:flex-1 xl:min-h-0 xl:overflow-hidden"},Ha={class:"space-y-4 xl:overflow-y-auto"},qa={class:"font-mono text-xs"},Ka=["innerHTML"],Ga={class:"inline-flex items-center gap-1.5"},Wa={class:"xl:overflow-y-auto"},Ja={key:1,class:"flex items-center justify-center h-64 text-gray-500"},Eo=ee({__name:"[id]",async setup(a){let j,f;const $=it(),m=parseInt(String($.params.id)),C=Rt(m),{data:n,refresh:u}=([j,f]=ct(()=>Vt(`/api/failure-clusters/${m}`,"$y4C0kntcH9")),j=await j,f(),j);ut(D(()=>({title:`${n.value?.signature??"Failure cluster"} — Piwi Dashboard`})));const y=x(n.value?.status??"open"),U=x(n.value?.triageNote??""),E=x(!1);ae(()=>n.value?.status,k=>{k&&(y.value=k)}),ae(()=>n.value?.triageNote,k=>{U.value=k??""});const R=D(()=>y.value!==(n.value?.status??"open")||U.value.trim()!==(n.value?.triageNote??""));async function T(){E.value=!0;try{await $fetch(`/api/failure-clusters/${m}/status`,{method:"PATCH",body:{status:y.value,triageNote:U.value.trim()||null}}),u()}finally{E.value=!1}}const h=x(!1);function I(){h.value=!1,u()}const{copyRich:v,copied:A}=We();function M(){const k=n.value;if(!k)return;const F=window.location.href,K=ne=>ne.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),G=[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,J=[`❌ Failure cluster: ${k.signature}`,G,"",...k.sampleError?["Sample error:",ve(k.sampleError),""]:[],...W?[W,""]:[],`Cluster: ${F}`].join(`
|
|
1
|
+
import{_ as Le}from"./C9p0YCAi.js";import{_ as Pe}from"./BTvE9qca.js";import{_ as _e,a as De,b as Oe,c as He,d as qe,e as Ke,f as Ge,g as ke,u as We,h as Je,i as Qe,j as Ze,k as Xe,l as Ye,m as et}from"./Bb7Uckln.js";import{d as ee,o as s,f as S,g as p,i as t,j as r,c as l,t as o,v as d,s as ce,k as e,m as b,p as te,G as be,F as B,y as Z,_ as ie,h as D,H as tt,q as Y,I as st,r as x,J as ae,B as nt,l as Q,E as $e,K as at,L as ot,C as fe,M as lt,b as rt,u as it,w as ct,e as ut,N as dt}from"./h49q_GXF.js";import{_ as Ce}from"./CRPt9SfB.js";import{_ as mt,a as ft}from"./B_mN5eMV.js";import{_ as ge}from"./BtSJxOdh.js";import{_ as pt}from"./C0v6l4pr.js";import{_ as gt}from"./DLNNAYfu.js";import{_ as we}from"./CScusXhF.js";import{_ as xt,a as vt,i as ht,b as yt,s as ve,c as _t}from"./DBhdObsO.js";import{c as he,f as re,a as kt,b as bt,d as $t,g as Se,s as pe,e as de,r as ye,h as Ct}from"./CD3R-ggS.js";import{_ as xe}from"./PdEEuEsg.js";import{_ as wt}from"./CDh_Qt7h.js";import{_ as St}from"./BH-ym1CI.js";import{_ as Tt}from"./DHUT-BKj.js";import{_ as It}from"./CWw9WGlv.js";import{_ as Te}from"./jjOqY9Tv.js";import{u as jt,p as Rt,_ as zt}from"./6-ivqM_I.js";import{b as Ut}from"./BZnfiR67.js";import{a as Et,u as Vt}from"./Cd8r0xk5.js";import"./BhH0TNTi.js";import"./DOLeth7M.js";import"./BDQCwxpX.js";import"./BaDhDBCV.js";import"./9N6hSApy.js";import"./Dj-TetcW.js";import"./D-c8ZSws.js";import"./CWoSSKhQ.js";import"./BjaRappk.js";import"./Hot1UcKY.js";import"./xbO0VmDX.js";import"./BNAHBHbY.js";import"./B6s20NbT.js";import"./Cf52zHyB.js";import"./t-juTK3X.js";const At={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Mt={class:"flex items-center gap-3 min-w-0"},Nt={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Ft={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Bt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Lt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Pt={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Dt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Ot={class:"lg:col-span-9"},Ht={class:"space-y-3"},qt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Kt={class:"flex flex-wrap gap-2"},Gt={class:"text-sm text-gray-500"},Wt={key:1,class:"rounded-md border border-default p-3 space-y-1.5"},Jt={class:"flex items-center gap-2 flex-wrap"},Qt={key:0,class:"text-xs text-gray-500"},Zt={class:"text-xs text-gray-500"},Xt={class:"text-sm text-gray-500"},Yt={class:"font-mono text-xs"},es={class:"flex items-start gap-3"},ts={class:"flex flex-col gap-1 shrink-0"},ss={class:"flex-1 min-w-0 space-y-1.5"},ns={class:"flex justify-end"},as=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:j}){const f=a,$=j,m=D(()=>$t(f.cluster.fixVerification)),C=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(n,u)=>{const y=ce,U=te,E=ge,R=be,T=pt,h=gt,I=ie,v=we,A=xt;return s(),S(A,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",At,[t("div",Mt,[r(y,{color:("clusterStatusColor"in n?n.clusterStatusColor:e(bt))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[b(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",Nt,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(y,{key:0,color:("clusterErrorTypeColor"in n?n.clusterErrorTypeColor:e(he))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[b(o(a.cluster.errorType),1)]),_:1},8,["color"])):d("",!0),e(m)?(s(),S(y,{key:1,color:e(m).color,variant:"subtle",size:"sm",class:"gap-1 shrink-0"},{default:p(()=>[r(U,{name:e(m).icon,class:"size-3"},null,8,["name"]),b(" "+o(e(m).label),1)]),_:1},8,["color"])):d("",!0)]),t("div",Ft,[t("span",Bt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Lt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(y,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[r(U,{name:"i-lucide-sparkles",class:"size-3"}),b(" "+o(a.cluster.diagnosis.category),1)]),_:1})):d("",!0),a.cluster.lastSeenAt?(s(),l("span",Pt," last seen "+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.lastSeenAt)),1)):d("",!0)])])]),default:p(()=>[t("div",Dt,[t("div",Ot,[r(h,{title:a.cluster.signature},{default:p(()=>[t("div",Ht,[a.cluster.title?(s(),l("p",qt,o(a.cluster.title),1)):d("",!0),t("div",Kt,[a.cluster.errorType?(s(),S(y,{key:0,color:("clusterErrorTypeColor"in n?n.clusterErrorTypeColor:e(he))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[b(o(a.cluster.errorType),1)]),_:1},8,["color"])):d("",!0),r(y,{color:"neutral",variant:"subtle"},{default:p(()=>[b(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),r(y,{color:"neutral",variant:"subtle"},{default:p(()=>[b(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(y,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[r(U,{name:"i-lucide-sparkles",class:"size-3"}),b(" "+o(a.cluster.diagnosis.category),1)]),_:1})):d("",!0),r(E,{topic:"cluster.concept"})]),t("p",Gt,[u[2]||(u[2]=b(" First seen in ",-1)),r(R,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[b(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(B,{key:0},[b(" ("+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.firstSeenAt))+") ",1)],64)):d("",!0),u[3]||(u[3]=b(" · Last seen in ",-1)),r(R,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[b(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(B,{key:1},[b(" ("+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.lastSeenAt))+") ",1)],64)):d("",!0),a.cluster.lastSeenRunStatus?(s(),S(T,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):d("",!0)]),e(m)?(s(),l("div",Wt,[t("div",Jt,[r(y,{color:e(m).color,variant:"subtle",class:"gap-1"},{default:p(()=>[r(U,{name:e(m).icon,class:"size-3"},null,8,["name"]),b(" "+o(e(m).label),1)]),_:1},8,["color"]),a.cluster.timeToResolutionMs!=null?(s(),l("span",Qt," open for "+o(("formatDuration"in n?n.formatDuration:e(kt))(a.cluster.timeToResolutionMs)),1)):d("",!0),r(E,{topic:"cluster.resolution"})]),t("p",Zt,o(e(m).hint),1),t("p",Xt,[a.cluster.fixLandedRunId?(s(),l(B,{key:0},[u[4]||(u[4]=b(" Fix landed in ",-1)),r(R,{to:`/test-runs/${a.cluster.fixLandedRunId}`,class:"text-primary hover:underline"},{default:p(()=>[b(" run #"+o(a.cluster.fixLandedRunId),1)]),_:1},8,["to"])],64)):d("",!0),a.cluster.fixLandedAt?(s(),l(B,{key:1},[b(" ("+o(("formatRelativeTime"in n?n.formatRelativeTime:e(re))(a.cluster.fixLandedAt))+")",1)],64)):d("",!0),a.cluster.fixCommit?(s(),l(B,{key:2},[u[5]||(u[5]=b(" · commit ",-1)),t("code",Yt,o(a.cluster.fixCommit.slice(0,8)),1)],64)):d("",!0)])])):d("",!0)])]),_:1},8,["title"])]),r(h,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",es,[t("div",ts,[(s(),l(B,null,Z(C,M=>r(I,{key:M.value,size:"xs",class:"justify-start",color:a.triageStatus===M.value?M.color:"neutral",variant:a.triageStatus===M.value?"solid":"outline",onClick:O=>$("update:triageStatus",M.value)},{default:p(()=>[b(o(M.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",ss,[r(v,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":u[0]||(u[0]=M=>$("update:triageNote",M))},null,8,["model-value"]),t("div",ns,[a.triageChanged?(s(),S(I,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:u[1]||(u[1]=M=>$("save-triage"))},{default:p(()=>[...u[6]||(u[6]=[b(" Save ",-1)])]),_:1},8,["loading"])):d("",!0)])])])]),_:1})])]),_:1})}}}),os=Object.assign(as,{__name:"ClusterSummary"}),ls={class:"divide-y divide-default"},rs={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},is={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},cs=ee({__name:"TestEvidenceSignals",props:st({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const j=a,f=D(()=>Array.isArray(j.consoleLogs)?j.consoleLogs.filter(u=>u.type==="error"||u.type==="warning"):[]),$=D(()=>Array.isArray(j.networkRequests)?j.networkRequests.filter(u=>u.status&&u.status>=400):[]),m=D(()=>f.value.length>0||$.value.length>0),C=D(()=>{const u=[];return f.value.length&&u.push(`${f.value.length} console`),$.value.length&&u.push(`${$.value.length} network`),u.join(", ")}),n=tt(a,"open");return(u,y)=>{const U=te,E=ce,R=_e;return e(m)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(C)})`,open:n.value,"onUpdate:open":y[0]||(y[0]=T=>n.value=T)},{default:p(()=>[t("div",ls,[e(f).length>0?(s(),l(B,{key:0},[y[1]||(y[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(B,null,Z(e(f),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[r(U,{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",rs,o(T.text),1)]))),128))],64)):d("",!0),e($).length>0?(s(),l(B,{key:1},[y[2]||(y[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(B,null,Z(e($),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[r(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[b(o(T.status),1)]),_:2},1032,["color"]),t("p",is,o(T.url),1)]))),128))],64)):d("",!0)])]),_:1},8,["label","open"])):d("",!0)}}}),us=Object.assign(cs,{__name:"TestEvidenceSignals"}),ds={class:"space-y-3"},ms={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},fs=["title","onClick"],ps={key:0,class:"opacity-60 ml-1"},gs={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},xs={class:"min-w-0"},vs={class:"text-sm font-medium break-words"},hs={key:2,class:"flex items-center justify-center py-10"},ys={key:0,class:"flex flex-wrap gap-1.5"},_s={class:"divide-y divide-default"},ks={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},bs={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},$s={class:"overflow-x-auto max-h-72"},Cs={class:"max-h-64 overflow-auto"},ws=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const j=a,f=x(j.affectedTestCases[0]?.recentTestRunsCaseId??null),$=D(()=>j.affectedTestCases.find(i=>i.recentTestRunsCaseId===f.value)),m=x(null),C=x([]),n=x(!1),u=x(!1),y=x(!1),U=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){y.value=!1,U.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(i){I();const w=h.get(i);if(w){m.value=w.detail,C.value=w.traces,n.value=!1,u.value=!1;return}n.value=!0,u.value=!0,m.value=null,C.value=[];const[P,q]=await Promise.allSettled([$fetch(`/api/test-run-cases/${i}`),$fetch(`/api/test-run-cases/${i}/traces`)]);P.status==="fulfilled"&&(m.value=P.value),n.value=!1,q.status==="fulfilled"&&(C.value=q.value),u.value=!1,P.status==="fulfilled"&&q.status==="fulfilled"&&h.set(i,{detail:P.value,traces:q.value})}const A=new Map,M=x(null),O=x("trace"),N=D(()=>M.value?.frames??[]);async function H(i){if(M.value=A.get(i)??null,A.has(i)||C.value.length===0)return;const w=m.value?.testRun?.id;if(w)try{const P=await $fetch(`/api/test-runs/${w}/cases/${i}/trace-stacks`),q=P.status==="ok"&&P.frames?.length?P:null;A.set(i,q),f.value===i&&(M.value=q)}catch{A.set(i,null)}}ae([m,C],()=>{O.value="trace",f.value&&H(f.value)}),ae(f,i=>{i&&v(i)}),nt(()=>{f.value&&v(f.value)});const V=D(()=>{const i=m.value?.steps;return Array.isArray(i)?i.filter(w=>w.error):[]}),L=D(()=>m.value?.testSource?m.value.testSource.split(`
|
|
2
|
+
`).length:0),z=D(()=>{const i=m.value;if(!i)return[];const w=i.attachments.filter(_=>ht(_.path,_.contentType)).length,P=i.attachments.filter(_=>yt(_.path,_.contentType)).length,q=Array.isArray(i.consoleLogs)?i.consoleLogs.filter(_=>_.type==="error"||_.type==="warning").length:0,X=Array.isArray(i.networkRequests)?i.networkRequests.filter(_=>(_.status??0)>=400).length:0;return[{icon:"i-lucide-image",label:"screenshots",count:w},{icon:"i-lucide-video",label:"videos",count:P},{icon:"i-lucide-bug-play",label:"traces",count:C.value.length},{icon:"i-lucide-list-checks",label:"failing steps",count:V.value.length},{icon:"i-lucide-triangle-alert",label:"signals",count:q+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(_=>_.count>0)});return(i,w)=>{const P=xe,q=ie,X=te,_=ce,c=De,k=Oe,F=He,K=_e,G=us,W=wt,J=qe,se=Ke,ne=vt,ue=Ge;return s(),l("div",ds,[a.affectedTestCases.length>1?(s(),l("div",ms,[(s(!0),l(B,null,Z(a.affectedTestCases,g=>(s(),l("button",{key:g.recentTestRunsCaseId,class:Y(["px-3 py-1.5 text-xs whitespace-nowrap border-b-2 -mb-px transition-colors",e(f)===g.recentTestRunsCaseId?"border-primary text-primary font-medium":"border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:g.title,onClick:oe=>f.value=g.recentTestRunsCaseId},[b(o(g.title.split(" › ").pop())+" ",1),g.runCount>1?(s(),l("span",ps,o(g.runCount)+"×",1)):d("",!0)],10,fs))),128))])):d("",!0),e($)?(s(),l("div",gs,[t("div",xs,[t("p",vs,o(e($).title),1),r(P,{"file-path":e($).filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])]),r(q,{to:`/test-run-cases/${e($).recentTestRunsCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:p(()=>[...w[6]||(w[6]=[b(" Open execution ",-1)])]),_:1},8,["to"])])):d("",!0),e(n)?(s(),l("div",hs,[r(X,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(m)?(s(),l(B,{key:3},[e(z).length?(s(),l("div",ys,[(s(!0),l(B,null,Z(e(z),g=>(s(),S(_,{key:g.label,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:p(()=>[r(X,{name:g.icon,class:"size-3"},null,8,["name"]),b(" "+o(g.count)+" "+o(g.label),1)]),_:2},1024))),128))])):d("",!0),r(c,{attachments:e(m).attachments},null,8,["attachments"]),r(k,{attachments:e(m).attachments},null,8,["attachments"]),r(F,{traces:e(C),loading:e(u)},null,8,["traces","loading"]),e(V).length>0?(s(),S(K,{key:1,icon:"i-lucide-list-checks",label:"Failing steps",count:e(V).length,open:e(y),"onUpdate:open":w[0]||(w[0]=g=>Q(y)?y.value=g:null)},{default:p(()=>[t("div",_s,[(s(!0),l(B,null,Z(e(V),(g,oe)=>(s(),l("div",{key:oe,class:"px-3 py-2 space-y-0.5"},[t("p",ks,o(oe+1)+". "+o(g.title),1),g.error?.message?(s(),l("p",bs,o(g.error.message),1)):d("",!0)]))),128))])]),_:1},8,["count","open"])):d("",!0),r(G,{"console-logs":e(m).consoleLogs,"network-requests":e(m).networkRequests,open:e(U),"onUpdate:open":w[1]||(w[1]=g=>Q(U)?U.value=g:null)},null,8,["console-logs","network-requests","open"]),e(m).testSourceFrames?.length||e(m).testSource||e(N).length?(s(),S(K,{key:2,icon:"i-lucide-code",label:"Test source",count:e(N).length||e(m).testSourceFrames?.length||e(L),open:e(E),"onUpdate:open":w[3]||(w[3]=g=>Q(E)?E.value=g:null)},{default:p(()=>[e(N).length&&(e(m).testSourceFrames?.length||e(m).testSource)?(s(),S(W,{key:0,modelValue:e(O),"onUpdate:modelValue":w[2]||(w[2]=g=>Q(O)?O.value=g:null),items:[{label:`Full stack (${e(N).length})`,value:"trace"},{label:`Captured (${e(m).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"])):d("",!0),t("div",$s,[e(O)==="trace"&&e(N).length?(s(),S(J,{key:0,frames:e(N),"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(m).testSourceFrames?.length?(s(),S(se,{key:1,frames:e(m).testSourceFrames,"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(m).testSource?(s(),S(ne,{key:2,text:"```typescript\n"+e(m).testSource+"\n```"},null,8,["text"])):d("",!0)])]),_:1},8,["count","open"])):d("",!0),e(m).ariaSnapshot?(s(),S(K,{key:3,icon:"i-lucide-accessibility",label:"ARIA snapshot",open:e(R),"onUpdate:open":w[4]||(w[4]=g=>Q(R)?R.value=g:null)},{default:p(()=>[t("div",Cs,[r(ne,{text:"```yaml\n"+e(m).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},8,["open"])):d("",!0),e(m).pageState?(s(),S(K,{key:4,icon:"i-lucide-database",label:"App state",open:e(T),"onUpdate:open":w[5]||(w[5]=g=>Q(T)?T.value=g:null)},{default:p(()=>[r(ue,{"page-state":e(m).pageState,plain:""},null,8,["page-state"])]),_:1},8,["open"])):d("",!0)],64)):d("",!0)])}}}),Ss=Object.assign(ws,{__name:"ClusterTestEvidence"}),Ts={key:0,class:"flex items-center gap-1.5 overflow-hidden min-w-0"},Is={class:"text-primary shrink-0"},js={class:"text-gray-500 truncate text-xs font-sans"},Rs={key:1,class:"text-primary text-xs"},zs={key:2,class:"text-gray-400 font-sans text-xs"},Us={class:"w-96 p-2 space-y-2"},Es={class:"flex items-center gap-1"},Vs={class:"flex items-center gap-1"},As={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"},Ms={class:"font-medium text-green-600 dark:text-green-400"},Ns={class:"font-medium text-red-600 dark:text-red-400"},Fs={class:"text-gray-400"},Bs={key:1,class:"flex items-center justify-center gap-2 py-6 text-gray-400"},Ls={key:2,class:"py-4 text-center text-sm text-red-500"},Ps={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"},Ds={key:4,class:"max-h-80 overflow-y-auto space-y-px"},Os={class:"text-xs text-primary"},Hs={key:1,class:"py-4 text-center text-sm text-gray-400"},qs=["onClick"],Ks={class:"text-xs text-primary shrink-0 w-14 pt-px"},Gs={class:"flex-1 min-w-0"},Ws={class:"text-xs font-medium leading-snug truncate"},Js={class:"text-xs text-gray-400 leading-snug truncate"},Qs=ee({__name:"CommitPicker",props:{modelValue:{},clusterId:{}},emits:["update:modelValue"],setup(a,{emit:j}){const f=a,$=j,m=x(!1),C=x(""),n=x([]),u=x(null),y=x(null),U=x(!1),E=x(!1),R=x(null),T=x(null),h=x([]),I=x(!1),v=x(void 0),A=D(()=>{if(!f.modelValue)return null;const z=f.modelValue.trim();return n.value.find(w=>w.sha===z||w.sha.startsWith(z))??{sha:z,shortSha:z.slice(0,7),message:"",author:"",date:""}});async function M(){if(!h.value.length){I.value=!0;try{const z=await $fetch(`/api/failure-clusters/${f.clusterId}/branches`);h.value=z.branches}catch{}finally{I.value=!1}}}async function O(){const z=f.modelValue||"";U.value=!0,E.value=!1,T.value=null;try{const i={};z&&(i.baseline=z),v.value&&(i.branch=v.value);const w=await $fetch(`/api/failure-clusters/${f.clusterId}/commits`,{query:i});n.value=w.commits,y.value=w.aggregate,u.value=w.error??null,T.value=z}catch{E.value=!0}finally{U.value=!1}}ae(v,()=>{n.value=[],T.value=null,O()}),ae(m,async z=>{if(z){await Promise.all([M(),O()]),await ot();const i=R.value?.$el?.querySelector("input")??R.value?.$el;i instanceof HTMLElement&&i.focus()}else C.value=""});const N=D(()=>Se(n.value,C.value)),H=D(()=>{const z=C.value.trim();return!/^[0-9a-f]{7,40}$/i.test(z)||N.value.some(i=>i.sha.startsWith(z.toLowerCase()))?null:z});function V(z){$("update:modelValue",z),m.value=!1}function L(z){z.stopPropagation(),u.value=null,y.value=null,$("update:modelValue",""),m.value=!1}return(z,i)=>{const w=ie,P=te,q=St,X=$e,_=at;return s(),S(_,{open:e(m),"onUpdate:open":i[4]||(i[4]=c=>Q(m)?m.value=c:null)},{content:p(()=>[t("div",Us,[t("div",Es,[r(P,{name:"i-lucide-git-branch",class:"size-3.5 text-gray-400 shrink-0"}),r(q,{modelValue:e(v),"onUpdate:modelValue":i[0]||(i[0]=c=>Q(v)?v.value=c: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",Vs,[r(X,{ref_key:"searchInputRef",ref:R,modelValue:e(C),"onUpdate:modelValue":i[1]||(i[1]=c=>Q(C)?C.value=c:null),placeholder:"Search message, author, SHA…",size:"xs",icon:"i-lucide-search",class:"flex-1"},null,8,["modelValue"]),a.modelValue?(s(),S(w,{key:0,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Clear baseline",onClick:i[2]||(i[2]=c=>L(c))})):d("",!0)]),e(y)&&a.modelValue&&!e(U)?(s(),l("div",As,[r(P,{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",Ms,"+"+o(e(y).linesAdded),1),t("span",Ns,"-"+o(e(y).linesRemoved),1),t("span",Fs,"across "+o(e(y).filesChanged)+" file"+o(e(y).filesChanged===1?"":"s"),1)])):d("",!0),e(U)?(s(),l("div",Bs,[r(P,{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",Ls," Failed to load commits — check your SCM token in Settings → AI ")):e(u)&&!e(U)&&e(n).length===0?(s(),l("div",Ps,[r(P,{name:"i-lucide-triangle-alert",class:"size-3.5 shrink-0 mt-0.5"}),t("span",null,o(e(u)),1)])):(s(),l("div",Ds,[e(H)?(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]=c=>V(e(H)))},[r(P,{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",Os,o(e(H).slice(0,7)),1)])):d("",!0),e(N).length===0&&!e(H)?(s(),l("div",Hs,o(e(C)?"No commits match":"No commits available"),1)):d("",!0),(s(!0),l(B,null,Z(e(N),c=>(s(),l("button",{key:c.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===c.sha?"bg-primary/10 ring-1 ring-inset ring-primary/30":""]),onClick:k=>V(c.sha)},[t("code",Ks,o(c.shortSha),1),t("div",Gs,[t("p",Ws,o(c.message),1),t("p",Js,[b(o(c.author),1),c.date?(s(),l(B,{key:0},[b(" · "+o(e(re)(c.date)),1)],64)):d("",!0)])]),a.modelValue===c.sha?(s(),S(P,{key:0,name:"i-lucide-check",class:"size-3.5 text-primary shrink-0 mt-0.5"})):d("",!0)],10,qs))),128))]))])]),default:p(()=>[r(w,{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(A)?.message?(s(),l("span",Ts,[t("code",Is,o(e(A).shortSha),1),t("span",js,o(e(A).message),1)])):a.modelValue?(s(),l("span",Rs,o(a.modelValue.slice(0,7))+"…",1)):(s(),l("span",zs,"baseline commit…"))]),_:1},8,["icon"])]),_:1},8,["open"])}}}),Zs=Object.assign(Qs,{__name:"CommitPicker"}),Xs={class:"space-y-3"},Ys={key:0,class:"space-y-1"},en={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},tn={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},sn={class:"text-xs text-gray-400 shrink-0"},nn={class:"text-xs text-gray-700 dark:text-gray-300 truncate"},an={class:"space-y-1"},on={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},ln={key:0,class:"text-yellow-500 font-normal normal-case"},rn={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},cn=["onClick"],un={class:"text-xs font-mono flex-1 truncate text-gray-700 dark:text-gray-300"},dn={class:"text-xs text-gray-400 shrink-0 tabular-nums"},mn={key:0,class:"text-green-500"},fn={key:1,class:"text-gray-300 mx-0.5"},pn={key:2,class:"text-red-500"},gn={key:0,class:"border-t border-default overflow-x-auto max-h-96"},xn=ee({__name:"ScmChangesView",props:{changes:{}},setup(a){const j=x(new Set);function f($){const m=new Set(j.value);m.has($)?m.delete($):m.add($),j.value=m}return($,m)=>{const C=te,n=ke;return s(),l("div",Xs,[a.changes.commits.length>0?(s(),l("div",Ys,[t("p",en,o(a.changes.commits.length)+" commit"+o(a.changes.commits.length===1?"":"s"),1),t("div",tn,[(s(!0),l(B,null,Z(a.changes.commits,u=>(s(),l("div",{key:u.sha,class:"flex items-center gap-2 px-3 py-1.5"},[r(C,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),t("code",sn,o(u.sha.slice(0,7)),1),t("span",nn,o(u.message),1)]))),128))])])):d("",!0),t("div",an,[t("p",on,[b(o(a.changes.files.length)+" file"+o(a.changes.files.length===1?"":"s")+" changed ",1),a.changes.patchesOmitted?(s(),l("span",ln," — diff too large, file names only ")):d("",!0)]),t("div",rn,[(s(!0),l(B,null,Z(a.changes.files,u=>(s(),l("div",{key:u.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",u.patch?"cursor-pointer":"cursor-default"]),onClick:y=>u.patch&&f(u.filename)},[r(C,{name:("scmFileStatusMeta"in $?$.scmFileStatusMeta:e(pe))(u.status).icon,class:Y(["size-3.5 shrink-0",("scmFileStatusMeta"in $?$.scmFileStatusMeta:e(pe))(u.status).color])},null,8,["name","class"]),t("span",un,o(u.filename),1),t("span",dn,[u.additions?(s(),l("span",mn,"+"+o(u.additions),1)):d("",!0),u.additions&&u.deletions?(s(),l("span",fn,"/")):d("",!0),u.deletions?(s(),l("span",pn,"-"+o(u.deletions),1)):d("",!0)]),u.patch?(s(),S(C,{key:0,name:e(j).has(u.filename)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-3.5 text-gray-400 shrink-0"},null,8,["name"])):d("",!0)],10,cn),u.patch&&e(j).has(u.filename)?(s(),l("div",gn,[r(n,{patch:u.patch},null,8,["patch"])])):d("",!0)]))),128))])])])}}}),vn=Object.assign(xn,{__name:"ScmChangesView"}),hn={class:"border border-default rounded-lg overflow-clip text-xs font-mono"},yn={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"},_n={class:"font-medium truncate"},kn={class:"shrink-0 flex items-center gap-1.5 ml-2 text-[11px]"},bn={key:0,class:"text-green-600 dark:text-green-400"},$n={key:1,class:"text-red-600 dark:text-red-400"},Cn={key:1,class:"px-3 py-2 text-gray-400 text-[11px]"},wn=ee({__name:"DiffFile",props:{file:{}},setup(a){return(j,f)=>{const $=ce,m=ke;return s(),l("div",hn,[t("div",yn,[t("span",_n,o(a.file.filename),1),t("span",kn,[a.file.additions?(s(),l("span",bn,"+"+o(a.file.additions),1)):d("",!0),a.file.deletions?(s(),l("span",$n,"-"+o(a.file.deletions),1)):d("",!0),r($,{label:a.file.status,size:"xs",variant:"subtle",color:("scmFileStatusMeta"in j?j.scmFileStatusMeta:e(pe))(a.file.status).badgeColor},null,8,["label","color"])])]),a.file.patch?(s(),S(m,{key:0,patch:a.file.patch},null,8,["patch"])):(s(),l("div",Cn,"No patch available"))])}}}),Sn=Object.assign(wn,{__name:"DiffFile"}),Tn={class:"inline-flex items-center gap-1"},In={class:"flex h-[72vh] overflow-hidden"},jn={class:"w-72 shrink-0 border-r border-default flex flex-col"},Rn={class:"p-2 border-b border-default space-y-2 shrink-0"},zn={class:"flex items-center gap-2 text-xs text-gray-500"},Un={class:"ml-auto"},En={key:2,class:"flex-1 overflow-y-auto flex flex-col"},Vn={key:0,class:"py-6 text-center text-sm text-gray-400 flex-1"},An=["onClick"],Mn=["checked","onChange"],Nn={class:"flex-1 min-w-0"},Fn={class:"text-xs font-medium leading-snug truncate"},Bn={class:"text-[10px] text-gray-400 leading-snug mt-0.5 flex items-center gap-1 min-w-0"},Ln={class:"text-primary shrink-0"},Pn={class:"truncate"},Dn={key:0,class:"shrink-0"},On={key:1,class:"p-2 shrink-0 space-y-1.5"},Hn={key:0,class:"flex items-center gap-1.5 text-xs text-red-500 px-1"},qn={class:"flex-1 overflow-y-auto flex flex-col min-w-0"},Kn={key:0,class:"flex-1 flex items-center justify-center text-gray-400 text-sm"},Gn={key:2,class:"flex-1 p-4 space-y-3"},Wn={key:0,class:"space-y-0.5 pb-3 border-b border-default"},Jn={class:"flex items-center gap-2"},Qn={class:"text-xs font-mono text-primary"},Zn={class:"text-xs text-gray-400"},Xn={class:"text-sm font-semibold"},Yn={key:1,class:"text-sm text-gray-400 pt-2"},ea={key:4,class:"flex-1 flex items-center justify-center text-sm text-gray-400"},ta={class:"flex items-center gap-3 w-full"},sa={class:"flex-1 flex items-center gap-2 text-sm text-gray-500 min-w-0"},na={class:"font-medium text-gray-700 dark:text-gray-200 shrink-0"},aa={class:"shrink-0"},oa={class:"text-green-600 dark:text-green-400 shrink-0 font-medium"},la={class:"text-red-600 dark:text-red-400 shrink-0 font-medium"},ra={key:1,class:"text-gray-400 text-xs shrink-0"},ia={key:1},me=50,ca=ee({__name:"CommitBrowserModal",props:{open:{type:Boolean},clusterId:{},initialSelected:{},autoSelectedShas:{}},emits:["update:open","confirm"],setup(a,{emit:j}){const f=a,$=D(()=>new Set(f.autoSelectedShas??[])),m=j,C=x(""),n=x([]),u=x(me),y=x(!1),U=x(!1),E=x(!1),R=x(null),T=x(null),h=x(new Set),I=x(null),v=lt({}),A=x(null),M=x(!1),O=x(null),N=D(()=>n.value.find(_=>_.sha===I.value)??null),H=D(()=>Se(n.value,C.value)),V=D(()=>{let _=0,c=0,k=0,F=0;for(const K of h.value){if(!(K in v)){F++;continue}const G=v[K];G&&(_+=G.files.length,c+=G.files.reduce((W,J)=>W+J.additions,0),k+=G.files.reduce((W,J)=>W+J.deletions,0))}return{files:_,linesAdded:c,linesRemoved:k,unreviewed:F}});async function L(_){_?(U.value=!0,R.value=null):(E.value=!0,T.value=null);try{const c=await $fetch(`/api/failure-clusters/${f.clusterId}/commits`,{query:{limit:u.value}});n.value=c.commits,y.value=c.hasMore??!1,c.error&&!c.commits.length&&(_?R.value=c.error:T.value=c.error),_&&c.commits[0]&&i(c.commits[0].sha)}catch(c){_?R.value=de(c):T.value=de(c)}finally{U.value=!1,E.value=!1}}async function z(){u.value+=me,await L(!1)}ae(()=>f.open,async _=>{if(_){if(h.value=new Set(f.initialSelected??[]),n.value.length){!I.value&&n.value[0]&&i(n.value[0].sha);return}u.value=me,await L(!0)}});async function i(_){if(I.value!==_){if(I.value=_,O.value=null,_ in v){A.value=v[_],M.value=!1;return}A.value=null,M.value=!0;try{const c=await $fetch(`/api/failure-clusters/${f.clusterId}/commit-diff`,{query:{sha:_}});v[_]=c,I.value===_&&(A.value=c)}catch(c){I.value===_&&(O.value=de(c))}finally{I.value===_&&(M.value=!1)}}}function w(_){const c=new Set(h.value);c.has(_)?c.delete(_):c.add(_),h.value=c}function P(){h.value=new Set(H.value.map(_=>_.sha))}function q(){h.value=new Set}function X(){m("confirm",[...h.value]),m("update:open",!1)}return(_,c)=>{const k=ge,F=$e,K=Tt,G=ie,W=It,J=ce,se=te,ne=Sn,ue=Te;return s(),S(ue,{open:a.open,title:"Browse commits",ui:{content:"max-w-6xl",body:"p-0 overflow-hidden"},"onUpdate:open":c[4]||(c[4]=g=>m("update:open",g))},{title:p(()=>[t("span",Tn,[c[5]||(c[5]=b("Browse commits ",-1)),r(k,{topic:"cluster.commit-browser"})])]),body:p(()=>[t("div",In,[t("div",jn,[t("div",Rn,[r(F,{modelValue:e(C),"onUpdate:modelValue":c[0]||(c[0]=g=>Q(C)?C.value=g:null),placeholder:"Search commits…",size:"xs",icon:"i-lucide-search"},null,8,["modelValue"]),t("div",zn,[t("button",{class:"hover:text-primary transition-colors",onClick:P},"All"),c[6]||(c[6]=t("span",null,"·",-1)),t("button",{class:"hover:text-primary transition-colors",onClick:q},"None"),t("span",Un,o(e(h).size>0?`${e(h).size} selected`:"none selected"),1)])]),e(U)?(s(),S(K,{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(()=>[r(G,{size:"xs",color:"neutral",variant:"outline",onClick:c[1]||(c[1]=g=>L(!0))},{default:p(()=>[...c[7]||(c[7]=[b(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):(s(),l("div",En,[e(H).length===0?(s(),l("div",Vn,o(e(C)?"No commits match":"No commits"),1)):d("",!0),(s(!0),l(B,null,Z(e(H),g=>(s(),l("button",{key:g.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)===g.sha?"bg-elevated":""]),onClick:oe=>i(g.sha)},[t("input",{type:"checkbox",checked:e(h).has(g.sha),class:"mt-0.5 shrink-0 cursor-pointer accent-primary",onClick:c[2]||(c[2]=fe(()=>{},["stop"])),onChange:oe=>w(g.sha)},null,40,Mn),t("div",Nn,[t("p",Fn,o(g.message||"(no message)"),1),t("p",Bn,[t("code",Ln,o(g.shortSha),1),t("span",Pn,o(g.author),1),g.date?(s(),l("span",Dn,"· "+o(e(re)(g.date)),1)):d("",!0),e($).has(g.sha)?(s(),S(J,{key:1,size:"xs",color:"info",variant:"soft",class:"shrink-0"},{default:p(()=>[...c[8]||(c[8]=[b(" auto ",-1)])]),_:1})):d("",!0)])])],10,An))),128)),e(y)&&!e(C)?(s(),l("div",On,[e(T)?(s(),l("p",Hn,[r(se,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),b(" "+o(e(T)),1)])):d("",!0),r(G,{size:"xs",color:"neutral",variant:"outline",block:"",loading:e(E),onClick:z},{default:p(()=>[...c[9]||(c[9]=[b(" Load more ",-1)])]),_:1},8,["loading"])])):d("",!0)]))]),t("div",qn,[e(I)?e(M)?(s(),S(K,{key:1,text:"Loading diff…",padded:!1,class:"flex-1"})):e(A)?(s(),l("div",Gn,[e(N)?(s(),l("div",Wn,[t("div",Jn,[t("code",Qn,o(e(N).shortSha),1),t("span",Zn,[b(o(e(N).author),1),e(N).date?(s(),l(B,{key:0},[b(" · "+o(e(re)(e(N).date)),1)],64)):d("",!0)])]),t("p",Xn,o(e(N).message),1)])):d("",!0),e(A).files.length===0?(s(),l("div",Yn,"No file changes in this commit")):d("",!0),(s(!0),l(B,null,Z(e(A).files,g=>(s(),S(ne,{key:g.filename,file:g},null,8,["file"]))),128))])):e(O)?(s(),S(W,{key:3,text:e(O),padded:!1,class:"flex-1 p-6"},{action:p(()=>[...c[10]||(c[10]=[t("p",{class:"text-xs text-gray-400"},"Click the commit again to retry",-1)])]),_:1},8,["text"])):(s(),l("div",ea," Diff not available for this commit ")):(s(),l("div",Kn," Select a commit to view its diff "))])])]),footer:p(()=>[t("div",ta,[t("div",sa,[e(h).size>0?(s(),l(B,{key:0},[t("span",na,o(e(h).size)+" commit"+o(e(h).size===1?"":"s"),1),e(V).files>0||e(V).linesAdded>0||e(V).linesRemoved>0?(s(),l(B,{key:0},[c[11]||(c[11]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("span",aa,o(e(V).files)+" file"+o(e(V).files===1?"":"s"),1),t("span",oa,"+"+o(e(V).linesAdded),1),t("span",la,"-"+o(e(V).linesRemoved),1)],64)):d("",!0),e(V).unreviewed>0?(s(),l("span",ra," ("+o(e(V).unreviewed)+" unreviewed) ",1)):d("",!0)],64)):(s(),l("span",ia,"No commits selected"))]),r(G,{color:"neutral",variant:"ghost",onClick:c[3]||(c[3]=g=>m("update:open",!1))},{default:p(()=>[...c[12]||(c[12]=[b(" Cancel ",-1)])]),_:1}),r(G,{color:"primary",disabled:e(h).size===0,onClick:X},{default:p(()=>[...c[13]||(c[13]=[b(" Add to context ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["open"])}}}),ua=Object.assign(ca,{__name:"CommitBrowserModal"});function Ie(a){return{scmStatus:D(()=>{const f=a.value?.scm;if(!f)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"Git context unavailable",detail:""};if(f.baseCommitUsed){if(f.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${f.baseCommitUsed.slice(0,7)} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};const C=f.patchesOmitted?", no patches (diff too large)":f.patchesTruncated?`, ${f.patchedFilesCount} with patches (some cut)`:`, ${f.patchedFilesCount} with patches`;return{color:"text-blue-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${f.baseCommitUsed.slice(0,7)} · ${f.filesCount} files${C}`,detail:f.hasLastGreen?"overrides last passing run baseline":"no last passing run"}}if(!f.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(!f.hasCommitRange)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No commit range",detail:"reporter did not send SCM metadata"};if(!f.provider)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:"Unsupported SCM host",detail:"only GitHub, GitLab and Bitbucket are supported"};if(f.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${f.provider} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};if(f.patchesOmitted)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${f.provider} · ${f.filesCount} files`,detail:"diff too large — file list only, no patches"};const $=f.patchesTruncated?", some patches cut (budget)":"",m=f.commitsCount>0?` · ${f.commitsCount} commit${f.commitsCount>1?"s":""}`:"";return{color:"text-green-500",icon:"i-lucide-git-branch",text:`${f.provider} · ${f.filesCount} files · ${f.patchedFilesCount} with patches${$}${m}`,detail:""}})}}const da={class:"space-y-3"},ma={class:"pb-2 border-b border-default"},fa={class:"flex items-center gap-2 flex-wrap"},pa={class:"text-xs text-gray-500 font-medium shrink-0 inline-flex items-center gap-1"},ga={class:"flex items-center gap-1.5 ml-auto"},xa={key:0,class:"flex items-center gap-1 px-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium"},va={key:0,class:"flex items-start gap-1.5 text-xs px-2 py-1.5 rounded-md bg-elevated border border-default"},ha={key:0,class:"text-gray-400 ml-1"},ya={key:1,class:"flex items-center justify-center py-6"},_a={key:3,class:"text-xs text-gray-400 text-center py-4"},ka=ee({__name:"ClusterInvestigation",setup(a){const{clusterId:j,baseCommit:f,selectedCommitShas:$,autoSelectedCommits:m,baseCommitIsPinned:C,coverage:n,scmChanges:u,contextLoading:y,refreshContext:U}=jt(),E=x(!1),{scmStatus:R}=Ie(n);return(T,h)=>{const I=ge,v=Zs,A=te,M=Ce,O=ie,N=vn,H=ua;return s(),l(B,null,[t("div",da,[t("div",ma,[t("div",fa,[t("span",pa,[h[5]||(h[5]=b(" Baseline ",-1)),r(I,{topic:"cluster.baseline"})]),r(v,{modelValue:e(f),"onUpdate:modelValue":h[0]||(h[0]=V=>Q(f)?f.value=V:null),"cluster-id":e(j)},null,8,["modelValue","cluster-id"]),e(C)?(s(),S(M,{key:0,text:"Baseline commit pinned for this cluster"},{default:p(()=>[r(A,{name:"i-lucide-pin",class:"size-3.5 text-primary shrink-0"})]),_:1})):d("",!0),t("div",ga,[e($).length?(s(),l("div",xa,[r(A,{name:"i-lucide-git-commit-horizontal",class:"size-3"}),t("span",null,o(e($).length)+" commit"+o(e($).length===1?"":"s"),1),t("button",{class:"ml-0.5 hover:opacity-70 transition-opacity",onClick:h[1]||(h[1]=V=>$.value=[])},[r(A,{name:"i-lucide-x",class:"size-3"})])])):d("",!0),r(O,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list",onClick:h[2]||(h[2]=V=>E.value=!0)},{default:p(()=>[...h[6]||(h[6]=[b(" Browse ",-1)])]),_:1}),r(O,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"outline",loading:e(y),onClick:e(U)},null,8,["loading","onClick"])])])]),e(n)?(s(),l("div",va,[r(A,{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",ha,"— "+o(e(R).detail),1)):d("",!0)])])):d("",!0),e(y)&&!e(u)?(s(),l("div",ya,[r(A,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-gray-400"})])):e(u)?(s(),S(N,{key:2,changes:e(u)},null,8,["changes"])):e(n)&&!e(y)&&!e(u)?(s(),l("p",_a," No changes found in this range. ")):d("",!0)]),r(H,{open:e(E),"onUpdate:open":h[3]||(h[3]=V=>Q(E)?E.value=V:null),"cluster-id":e(j),"initial-selected":e($),"auto-selected-shas":e(m),onConfirm:h[4]||(h[4]=V=>$.value=V)},null,8,["open","cluster-id","initial-selected","auto-selected-shas"])],64)}}}),ba=Object.assign(ka,{__name:"ClusterInvestigation"}),$a={class:"flex flex-col h-[60vh]"},Ca={class:"flex items-center gap-3 px-4 py-2.5 border-b border-default text-sm shrink-0"},wa={key:0,class:"ml-auto text-xs text-gray-500"},Sa={class:"flex-1 overflow-y-auto"},Ta={class:"w-full text-sm"},Ia=["onClick"],ja={class:"px-4 py-2.5"},Ra=["checked","onChange"],za={class:"px-2 py-2.5 min-w-0"},Ua={class:"truncate font-medium text-gray-800 dark:text-gray-200 max-w-[24rem]"},Ea={class:"px-2 py-2.5 text-gray-500 text-xs max-w-[16rem] hidden sm:table-cell"},Va={class:"px-2 py-2.5 text-right text-gray-500 text-xs"},Aa={key:0},Ma={class:"shrink-0 border-t border-default px-4 py-3 space-y-1.5"},Na={key:0,class:"shrink-0 px-4 pb-3 flex items-center gap-1.5 text-xs text-red-500"},Fa={class:"flex items-center gap-3 w-full"},Ba=ee({__name:"ClusterExtractCasesModal",props:{open:{type:Boolean},clusterId:{},affectedTestCases:{},projectKey:{},projectName:{}},emits:["update:open","extracted"],setup(a,{emit:j}){const f=a,$=j,m=rt(),C=x(new Set),n=x(""),u=x(!1),y=x(null);function U(){C.value=new Set(f.affectedTestCases.map(I=>I.testCaseId))}function E(){C.value=new Set}function R(I){const v=new Set(C.value);v.has(I)?v.delete(I):v.add(I),C.value=v}ae(()=>f.open,I=>{I&&(E(),n.value="",y.value=null)});const T=D(()=>C.value.size);async function h(){if(T.value!==0){u.value=!0,y.value=null;try{await $fetch(`/api/failure-clusters/${f.clusterId}/extract-cases`,{method:"POST",body:{testCaseIds:[...C.value],triageNote:n.value.trim()||void 0}}),m.add({title:`Extracted ${T.value} test ${T.value===1?"case":"cases"}`,color:"success"}),$("extracted"),$("update:open",!1)}catch(I){y.value=de(I)}finally{u.value=!1}}}return(I,v)=>{const A=be,M=xe,O=we,N=te,H=ie,V=Te;return s(),S(V,{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]=L=>$("update:open",L))},{body:p(()=>[t("div",$a,[t("div",Ca,[t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:U},"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",wa,o(e(T))+" selected ",1)):d("",!0)]),t("div",Sa,[t("table",Ta,[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(B,null,Z(a.affectedTestCases,L=>(s(),l("tr",{key:L.testCaseId,class:"border-b border-default/50 hover:bg-elevated transition-colors cursor-pointer",onClick:z=>R(L.testCaseId)},[t("td",ja,[t("input",{type:"checkbox",checked:e(C).has(L.testCaseId),class:"shrink-0 cursor-pointer accent-primary",onClick:v[0]||(v[0]=fe(()=>{},["stop"])),onChange:z=>R(L.testCaseId)},null,40,Ra)]),t("td",za,[t("p",Ua,o(L.title),1),r(A,{to:`/test-cases/${L.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]=[b(" View details ",-1)])]),_:1},8,["to"])]),t("td",Ea,[r(M,{"file-path":L.filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"max-w-full"},null,8,["file-path","project-key","project-name"])]),t("td",Va,o(L.runCount),1)],8,Ia))),128)),a.affectedTestCases.length===0?(s(),l("tr",Aa,[...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)])])):d("",!0)])])]),t("div",Ma,[v[9]||(v[9]=t("label",{class:"text-xs font-medium text-gray-500 uppercase tracking-wide"},"Triage note (optional)",-1)),r(O,{modelValue:e(n),"onUpdate:modelValue":v[2]||(v[2]=L=>Q(n)?n.value=L:null),placeholder:"Add a note explaining why these tests were extracted…",rows:2,class:"text-sm w-full"},null,8,["modelValue"])]),e(y)?(s(),l("p",Na,[r(N,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),b(" "+o(e(y)),1)])):d("",!0)])]),footer:p(()=>[t("div",Fa,[v[11]||(v[11]=t("div",{class:"flex-1"},null,-1)),r(H,{color:"neutral",variant:"ghost",disabled:e(u),onClick:v[3]||(v[3]=L=>$("update:open",!1))},{default:p(()=>[...v[10]||(v[10]=[b(" Cancel ",-1)])]),_:1},8,["disabled"]),r(H,{color:"warning",disabled:e(T)===0,loading:e(u),onClick:h},{default:p(()=>[b(" Extract"+o(e(T)>0?` ${e(T)}`:""),1)]),_:1},8,["disabled","loading"])])]),_:1},8,["open"])}}}),La=Object.assign(Ba,{__name:"ClusterExtractCasesModal"}),Pa={key:0,class:"flex flex-col h-full min-h-0 max-xl:overflow-y-auto xl:overflow-hidden"},Da={class:"border-b border-default shrink-0"},Oa={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 p-1 xl:flex-1 xl:min-h-0 xl:overflow-hidden"},Ha={class:"space-y-4 xl:overflow-y-auto"},qa={class:"font-mono text-xs"},Ka=["innerHTML"],Ga={class:"inline-flex items-center gap-1.5"},Wa={class:"xl:overflow-y-auto"},Ja={key:1,class:"flex items-center justify-center h-64 text-gray-500"},Eo=ee({__name:"[id]",async setup(a){let j,f;const $=it(),m=parseInt(String($.params.id)),C=Rt(m),{data:n,refresh:u}=([j,f]=ct(()=>Vt(`/api/failure-clusters/${m}`,"$Io0yQjh0TH")),j=await j,f(),j);ut(D(()=>({title:`${n.value?.signature??"Failure cluster"} — Piwi Dashboard`})));const y=x(n.value?.status??"open"),U=x(n.value?.triageNote??""),E=x(!1);ae(()=>n.value?.status,k=>{k&&(y.value=k)}),ae(()=>n.value?.triageNote,k=>{U.value=k??""});const R=D(()=>y.value!==(n.value?.status??"open")||U.value.trim()!==(n.value?.triageNote??""));async function T(){E.value=!0;try{await $fetch(`/api/failure-clusters/${m}/status`,{method:"PATCH",body:{status:y.value,triageNote:U.value.trim()||null}}),u()}finally{E.value=!1}}const h=x(!1);function I(){h.value=!1,u()}const{copyRich:v,copied:A}=We();function M(){const k=n.value;if(!k)return;const F=window.location.href,K=ne=>ne.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),G=[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,J=[`❌ Failure cluster: ${k.signature}`,G,"",...k.sampleError?["Sample error:",ve(k.sampleError),""]:[],...W?[W,""]:[],`Cluster: ${F}`].join(`
|
|
3
3
|
`),se=[`<p><strong>❌ Failure cluster</strong>: <code>${K(k.signature)}</code></p>`,`<p><em>${K(G)}</em></p>`,k.sampleError?`<p><strong>Sample error:</strong></p><pre>${ye(k.sampleError)}</pre>`:"",W?`<p><strong>AI diagnosis</strong> (${K(k.diagnosis?.category??"unknown")}, ${K(k.diagnosis?.confidence??"?")} confidence):<br>${K(k.diagnosis.summary)}</p>`:"",`<p>🔗 <a href="${F}">View failure cluster</a></p>`].join("");v(J,se,{toast:"Failure cluster copied"})}const O=D(()=>{const k=n.value?.sampleError;return k?ve(k).split(`
|
|
4
|
-
`).find(F=>F.trim())??"":""}),{scmStatus:N}=Ie(C.coverage),H=D(()=>Ut((n.value?.affectedTestCases??[]).map(k=>({filePath:k.filePath,title:k.title,line:null,projectName:null})))),{copy:V,copied:L}=Et(),z=x(null),i=x(null),w=x(null),P=x(null),q=x(null),X=x(null),_={sampleError:()=>z.value,executionError:()=>z.value,environmentDiff:()=>P.value,visualDiff:()=>q.value,domSnapshot:()=>X.value,scmInvestigation:()=>w.value,selectedCommits:()=>w.value,topSuspectedCommit:()=>w.value,failingAction:()=>w.value,affectedTests:()=>i.value,testSource:()=>i.value,sourceFiles:()=>i.value,steps:()=>i.value,failingSteps:()=>i.value,console:()=>i.value,networkRequests:()=>i.value,serverTraces:()=>i.value,ariaSnapshot:()=>i.value,screenshots:()=>i.value,tracePointers:()=>i.value,artifacts:()=>i.value};dt(_t,{canLocate:k=>k in _,open:k=>_[k]?.()?.reveal()});const c=D(()=>[{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 #${m}`}]);return(k,F)=>{const K=Le,G=Pe,W=et,J=ie,se=Ce,ne=ft,ue=os,g=Je,oe=
|
|
4
|
+
`).find(F=>F.trim())??"":""}),{scmStatus:N}=Ie(C.coverage),H=D(()=>Ut((n.value?.affectedTestCases??[]).map(k=>({filePath:k.filePath,title:k.title,line:null,projectName:null})))),{copy:V,copied:L}=Et(),z=x(null),i=x(null),w=x(null),P=x(null),q=x(null),X=x(null),_={sampleError:()=>z.value,executionError:()=>z.value,environmentDiff:()=>P.value,visualDiff:()=>q.value,domSnapshot:()=>X.value,scmInvestigation:()=>w.value,selectedCommits:()=>w.value,topSuspectedCommit:()=>w.value,failingAction:()=>w.value,affectedTests:()=>i.value,testSource:()=>i.value,sourceFiles:()=>i.value,steps:()=>i.value,failingSteps:()=>i.value,console:()=>i.value,networkRequests:()=>i.value,serverTraces:()=>i.value,ariaSnapshot:()=>i.value,screenshots:()=>i.value,tracePointers:()=>i.value,artifacts:()=>i.value};dt(_t,{canLocate:k=>k in _,open:k=>_[k]?.()?.reveal()});const c=D(()=>[{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 #${m}`}]);return(k,F)=>{const K=Le,G=Pe,W=et,J=ie,se=Ce,ne=ft,ue=os,g=Je,oe=Qe,je=Ze,Re=Xe,ze=Ye,Ue=xe,Ee=ce,Ve=Ss,Ae=te,Me=ba,Ne=zt,Fe=mt,Be=La;return s(),l(B,null,[r(Fe,{id:"failure-cluster-detail"},{header:p(()=>[r(ne,null,{leading:p(()=>[r(K),r(G,{items:e(c)},null,8,["items"])]),right:p(()=>[e(n)?(s(),S(W,{key:0,endpoint:`/api/failure-clusters/${e(n).id}/export`,"base-name":`piwi-cluster-${e(n).id}`},null,8,["endpoint","base-name"])):d("",!0),e(n)?(s(),S(se,{key:1,text:e(A)?"Copied!":"Copy failure cluster"},{default:p(()=>[r(J,{size:"sm",variant:"ghost",color:"neutral",icon:e(A)?"i-lucide-check":"i-lucide-clipboard",onClick:M},null,8,["icon"])]),_:1},8,["text"])):d("",!0)]),_:1})]),body:p(()=>[e(n)?(s(),l("div",Pa,[t("div",Da,[r(ue,{cluster:e(n),"triage-status":e(y),"triage-note":e(U),"triage-saving":e(E),"triage-changed":e(R),"onUpdate:triageStatus":F[0]||(F[0]=le=>y.value=le),"onUpdate:triageNote":F[1]||(F[1]=le=>U.value=le),onSaveTriage:T},null,8,["cluster","triage-status","triage-note","triage-saving","triage-changed"])]),t("div",Oa,[t("div",Ha,[e(n).sampleError?(s(),S(g,{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",qa,o(e(O)),1)]),default:p(()=>[t("div",{class:"text-xs font-mono overflow-x-auto whitespace-pre-wrap",innerHTML:e(ye)(e(n).sampleError)},null,8,Ka)]),_:1},512)):d("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(oe,{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"])):d("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(je,{key:2,ref_key:"envDiffSection",ref:P,"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"])):d("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Re,{key:3,ref_key:"visualDiffSection",ref:q,"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"])):d("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(ze,{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"])):d("",!0),e(n).affectedTestCases?.length?(s(),S(g,{key:5,ref_key:"evidenceSection",ref:i,"storage-key":"cluster-evidence",icon:"i-lucide-flask-conical",title:"Test evidence",help:"cluster.evidence"},{folded:p(()=>[b(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(Ue,{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"])):d("",!0)]),actions:p(()=>[r(Ee,{color:"neutral",variant:"subtle",size:"sm"},{default:p(()=>[b(o(e(n).affectedTestCases.length)+" "+o(e(n).affectedTestCases.length===1?"test":"tests"),1)]),_:1}),r(J,{size:"xs",variant:"outline",color:"neutral",icon:e(L)?"i-lucide-check":"i-lucide-play",title:e(L)?"Copied!":("copyPreview"in k?k.copyPreview:e(Ct))(e(H)),onClick:F[2]||(F[2]=le=>e(V)(e(H),{toast:"Retry command copied"}))},{default:p(()=>[...F[5]||(F[5]=[b(" Copy retry command ",-1)])]),_:1},8,["icon","title"]),r(se,{text:"Unlink incorrectly clustered test cases from this group"},{default:p(()=>[r(J,{size:"xs",color:"warning",variant:"outline",icon:"i-lucide-arrow-up-from-line",onClick:F[3]||(F[3]=le=>h.value=!0)},{default:p(()=>[...F[6]||(F[6]=[b(" Extract ",-1)])]),_:1})]),_:1})]),default:p(()=>[r(Ve,{"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)):d("",!0),r(g,{ref_key:"scmSection",ref:w,"storage-key":"cluster-scm",icon:"i-lucide-git-compare-arrows",title:"What changed",help:"cluster.scm"},{folded:p(()=>[t("span",Ga,[r(Ae,{name:e(N).icon,class:Y(["size-3.5 shrink-0",e(N).color])},null,8,["name","class"]),t("span",{class:Y(e(N).color)},o(e(N).text),3)])]),default:p(()=>[r(Me)]),_:1},512)]),t("div",Wa,[r(Ne,{"cluster-id":e(m),"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",Ja,"Cluster not found."))]),_:1}),e(n)?(s(),S(Be,{key:0,open:e(h),"cluster-id":e(m),"affected-test-cases":e(n).affectedTestCases??[],"project-key":e(n).project?.id,"project-name":e(n).project?.name,"onUpdate:open":F[4]||(F[4]=le=>h.value=le),onExtracted:I},null,8,["open","cluster-id","affected-test-cases","project-key","project-name"])):d("",!0)],64)}}});export{Eo as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as j}from"./
|
|
1
|
+
import{u as j}from"./BhH0TNTi.js";import{h as b,c6 as m}from"./h49q_GXF.js";const g="piwi-browser-notify";function a(){return{projects:{}}}function y(e){try{const n=JSON.parse(e);if(typeof n!="object"||n===null)return a();const c={};if(n.projects&&typeof n.projects=="object")for(const[i,r]of Object.entries(n.projects)){const u=Number(i);Number.isNaN(u)||r&&typeof r=="object"&&Array.isArray(r.events)&&(c[u]={events:r.events.filter(f=>typeof f=="string")})}return{projects:c}}catch{return a()}}const h=m(!0);let l=null,p=null;function S(){p||h.run(()=>{l=j(g,{default:()=>"",maxAge:3600*24*365,sameSite:"lax",path:"/",secure:location.protocol==="https:",encode:e=>encodeURIComponent(e),decode:e=>decodeURIComponent(e)}),p=b({get:()=>{const e=l.value;return e?y(e):a()},set:e=>{l.value=JSON.stringify(e)}})})}function O(){S();const e=p;function n(t){return e.value.projects[t]??{events:[]}}function c(t,o){if(o.length===0){const s={...e.value};delete s.projects[t],e.value=s}else e.value={...e.value,projects:{...e.value.projects,[t]:{events:o}}}}function i(t,o){const s=n(t).events,v=s.includes(o)?s.filter(d=>d!==o):[...s,o];c(t,v)}function r(t){return n(t).events.length>0}function u(t,o){return n(t).events.includes(o)}function f(){return Object.values(e.value.projects).some(t=>t.events.length>0)}return{getProject:n,setEvents:c,toggleEvent:i,isSubscribed:r,isEventSubscribed:u,hasAnySubscription:f,stored:e}}export{O as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as ne,d as ce,o as p,c as f,k as c,i as x,V as We,j as S,p as ke,_ as _e,R as rt,F as j,y as Y,t as w,v as $,h as P,b as it,f as N,g as Q,m as A,A as Tt,q as J,J as ye,L as zt,an as It,l as Et,M as Pt,s as Lt}from"./
|
|
1
|
+
import{r as ne,d as ce,o as p,c as f,k as c,i as x,V as We,j as S,p as ke,_ as _e,R as rt,F as j,y as Y,t as w,v as $,h as P,b as it,f as N,g as Q,m as A,A as Tt,q as J,J as ye,L as zt,an as It,l as Et,M as Pt,s as Lt}from"./h49q_GXF.js";import{a as Be}from"./Cd8r0xk5.js";import{e as Bt,f as Dt}from"./CD3R-ggS.js";import{_ as De}from"./BtSJxOdh.js";import{_ as qt}from"./jjOqY9Tv.js";import{_ as Ft}from"./9N6hSApy.js";import{_ as Mt}from"./PdEEuEsg.js";import{h as Xe,_ as Nt}from"./Dj-TetcW.js";import{_ as jt}from"./CScusXhF.js";function Ot(t,e=!1){const s=ne(e);try{const i=document.cookie.match(new RegExp(`(?:^|;\\s*)${t}=([^;]*)`));i&&(s.value=i[1]==="true")}catch{}function r(){document.cookie=`${t}=${s.value}; path=/; max-age=31536000; sameSite=lax`}function n(){s.value=!s.value,r()}function o(i){s.value=i,r()}return{folded:s,toggle:n,setFolded:o}}function Ht(t){return Ot(`piwi-summary-fold-${t}`,!1)}const Zt={class:"flex items-center gap-3"},Ut={class:"ml-auto shrink-0"},Vt={key:1,class:"relative"},Qt={class:"absolute top-1 right-1 z-10"},Gt=ce({__name:"FoldableSummary",props:{storageKey:{}},setup(t){const e=t,{folded:s,toggle:r}=Ht(e.storageKey);return(n,o)=>{const i=ke,l=_e;return p(),f("div",null,[c(s)?(p(),f("div",{key:0,class:"border border-gray-200 dark:border-gray-800 rounded-xl p-2.5 shadow-xs cursor-pointer select-none",onClick:o[0]||(o[0]=(...a)=>c(r)&&c(r)(...a))},[x("div",Zt,[We(n.$slots,"folded"),x("div",Ut,[S(i,{name:"i-lucide-chevron-down",class:"size-4 text-gray-400"})])])])):(p(),f("div",Vt,[x("div",Qt,[S(l,{icon:"i-lucide-chevron-up",size:"xs",color:"neutral",variant:"ghost",onClick:c(r),title:"Collapse summary"},null,8,["onClick"])]),We(n.$slots,"default")]))])}}}),zr=Object.assign(Gt,{__name:"FoldableSummary"}),Wt=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp"]),Xt=new Set(["image/png","image/jpeg","image/gif","image/svg+xml","image/webp"]),Kt=new Set([".webm",".mp4",".ogg",".mov"]),Jt=new Set(["video/webm","video/mp4","video/ogg","video/quicktime"]);function Ir(t,e){const s="."+(t.toLowerCase().split(".").pop()||"");return!!(Wt.has(s)||e&&Xt.has(e.toLowerCase()))}function Er(t,e){const s="."+(t.toLowerCase().split(".").pop()||"");return!!(Kt.has(s)||e&&Jt.has(e.toLowerCase()))}function Pr(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}const Yt={class:"rounded-lg border border-default overflow-hidden bg-muted min-h-16"},es={key:0,class:"flex items-center gap-2 p-4 text-sm text-gray-500"},ts={key:0,class:"text-sm font-bold text-gray-900 dark:text-white mt-4 mb-0.5 first:mt-0"},ss={key:1,class:"font-semibold text-gray-700 dark:text-gray-200 mt-2 mb-0.5"},ns={key:2,class:"my-1 px-2 py-0.5 rounded bg-yellow-50 dark:bg-yellow-900/20 text-yellow-800 dark:text-yellow-300 italic"},rs={key:3,class:"text-gray-600 dark:text-gray-400 flex gap-1.5"},is={key:4,class:"text-gray-600 dark:text-gray-400"},os={key:5,class:"h-2"},as={key:6,class:"mt-2 px-2 py-0.5 bg-gray-200 dark:bg-gray-700 text-gray-500 dark:text-gray-400 rounded-t text-[10px] uppercase tracking-wide"},ls={key:7,class:"overflow-x-auto bg-gray-50 dark:bg-gray-900/40"},cs=["innerHTML"],us={key:8,class:"h-1 bg-gray-100 dark:bg-gray-800/50 rounded-b mb-2"},ps={key:2,class:"p-3 text-xs text-gray-400 italic"},ds=ce({__name:"MarkdownPreview",props:{text:{},loading:{type:Boolean},maxHeight:{}},setup(t){const e=t;function s(n){const o=[];let i=!1,l="",a=[];for(const d of n.split(`
|
|
2
2
|
`))if(!i)d.startsWith("```")?(i=!0,l=d.slice(3).trim(),a=[]):d.startsWith("## ")?o.push({kind:"h2",text:d.slice(3)}):d.startsWith("### ")?o.push({kind:"h3",text:d.slice(4)}):d.startsWith("> ")?o.push({kind:"note",text:d.slice(2)}):d.startsWith("- ")?o.push({kind:"bullet",text:d.slice(2)}):d.trim()===""?o.push({kind:"blank"}):o.push({kind:"text",text:d});else if(d==="```"){const h=a.join(`
|
|
3
3
|
`);if(a.length){const{html:m}=Xe(h,l);o.push({kind:"code-start",lang:l||"code"}),o.push({kind:"code-block",html:m}),o.push({kind:"code-end"})}i=!1}else a.push(d);if(i&&a.length){const{html:d}=Xe(a.join(`
|
|
4
4
|
`),l);o.push({kind:"code-start",lang:l||"code"}),o.push({kind:"code-block",html:d}),o.push({kind:"code-end"})}return o}const r=P(()=>e.text?s(e.text):[]);return(n,o)=>{const i=ke;return p(),f("div",Yt,[t.loading?(p(),f("div",es,[S(i,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),o[0]||(o[0]=x("span",null,"Fetching context… (includes SCM diff lookup)",-1))])):c(r).length?(p(),f("div",{key:1,class:"overflow-auto p-3 text-xs font-mono leading-relaxed",style:rt({maxHeight:t.maxHeight??"45vh"})},[(p(!0),f(j,null,Y(c(r),(l,a)=>(p(),f(j,{key:a},[l.kind==="h2"?(p(),f("div",ts,w(l.text),1)):l.kind==="h3"?(p(),f("div",ss,w(l.text),1)):l.kind==="note"?(p(),f("div",ns,w(l.text),1)):l.kind==="bullet"?(p(),f("div",rs,[o[1]||(o[1]=x("span",{class:"text-gray-400 shrink-0"},"·",-1)),x("span",null,w(l.text),1)])):l.kind==="text"?(p(),f("div",is,w(l.text),1)):l.kind==="blank"?(p(),f("div",os)):l.kind==="code-start"?(p(),f("div",as,w(l.lang||"code"),1)):l.kind==="code-block"?(p(),f("div",ls,[x("pre",{class:"hljs px-2 py-1 !bg-transparent whitespace-pre-wrap",innerHTML:l.html},null,8,cs)])):l.kind==="code-end"?(p(),f("div",us)):$("",!0)],64))),128))],4)):(p(),f("div",ps,"No context loaded"))])}}}),ot=Object.assign(ds,{__name:"MarkdownPreview"}),hs=ce({__name:"CopyAiPromptButton",props:{contextEndpoint:{}},setup(t){const e=t,{copy:s,copied:r}=Be(),n=it(),o=ne(!1),i=P(()=>(Tt().app?.baseURL??"/").replace(/\/$/,""));async function l(){o.value=!0;try{const a=await fetch(`${i.value}${e.contextEndpoint}?format=prompt`);if(!a.ok)throw new Error(`Request failed (${a.status})`);s(await a.text(),{toast:"AI prompt copied"})}catch(a){n.add({title:"Could not copy the prompt",description:Bt(a),color:"error"})}finally{o.value=!1}}return(a,d)=>{const h=_e;return p(),N(h,{icon:c(r)?"i-lucide-check":"i-lucide-clipboard-copy",size:"xs",color:"neutral",variant:"outline",loading:c(o),title:"Copy the exact request Piwi would send to the model — to reuse it elsewhere, or to check what it contains",onClick:l},{default:Q(()=>[A(w(c(r)?"Copied":"Copy prompt"),1)]),_:1},8,["icon","loading"])}}}),Lr=Object.assign(hs,{__name:"CopyAiPromptButton"}),Se=[{id:"clusterSummary",label:"Failure cluster summary",short:"Cluster"},{id:"sampleError",label:"Raw error message",short:"Error"},{id:"representativeExecution",label:"Representative execution overview",short:"Execution"},{id:"executionError",label:"Representative execution error",short:"Error"},{id:"runContext",label:"Run context (partial run, parallelism, flaky class)",short:"Run context"},{id:"testAnnotations",label:"Test annotations (@fixme/@flaky …)",short:"Annotations"},{id:"affectedTests",label:"Affected tests",short:"Tests"},{id:"testSource",label:"Test source code",short:"Source"},{id:"sourceFiles",label:"Full source files (suspect + imports)",short:"Files"},{id:"steps",label:"Test steps",short:"Steps"},{id:"failingSteps",label:"Failing steps",short:"Steps"},{id:"console",label:"Browser console logs",short:"Console"},{id:"networkRequests",label:"Network requests",short:"Network"},{id:"serverLogs",label:"Backend server logs",short:"Server logs"},{id:"serverTraces",label:"Server traces (spans)",short:"Traces"},{id:"webVitals",label:"Web vitals",short:"Web vitals"},{id:"appState",label:"App state at test end (URL/storage/cookies)",short:"App state"},{id:"ariaSnapshot",label:"ARIA snapshot",short:"ARIA"},{id:"domSnapshot",label:"DOM snapshot from trace (failure time)",short:"DOM"},{id:"screenshots",label:"Screenshots (attached as images)",short:"Screenshots"},{id:"visualDiff",label:"Visual diff vs last passing screenshot",short:"Visual diff"},{id:"browserDistribution",label:"Browser distribution",short:"Browsers"},{id:"recurrenceFlakiness",label:"Recurrence & flakiness",short:"Flakiness"},{id:"baselineComparison",label:"Compared to last pass (duration/vitals/steps)",short:"Baseline"},{id:"environmentDiff",label:"Environment diff vs last pass",short:"Env diff"},{id:"retryProgression",label:"Retry progression (per-attempt errors)",short:"Retries"},{id:"passedPeers",label:"Passing peers in same file",short:"Peers"},{id:"scmInvestigation",label:"SCM diff since last green",short:"SCM diff"},{id:"selectedCommits",label:"Manually selected commits",short:"Commits"},{id:"priorDiagnosis",label:"Prior diagnosis & triage",short:"Prior"},{id:"tracePointers",label:"Trace files",short:"Traces"},{id:"artifacts",label:"Attachments & artifacts (video, HAR)",short:"Artifacts"},{id:"nearestAriaNames",label:"Nearest matching ARIA names from snapshot",short:"Nearest ARIA"},{id:"alreadyGreen",label:"Baseline freshness / already-green check",short:"Already green"},{id:"topSuspectedCommit",label:"Top suspected commit",short:"Top commit"},{id:"failingAction",label:"Failing action from trace parsing",short:"Trace"},{id:"traceCallStack",label:"Full call stack with source (from trace)",short:"Call stack"},{id:"traceNetwork",label:"Network activity from trace (all requests)",short:"Trace net"},{id:"locatorHealing",label:"Alternative locators from prior success",short:"Alt locators"}],at=new Set(Se.map(t=>t.id)),lt=Object.fromEntries(Se.map(t=>[t.id,t.short]));function gs(t){return at.has(t)}function Br(t){const e=new Set;for(const s of t)if(s)for(const r of String(s).matchAll(/\[([a-zA-Z][a-zA-Z0-9]*)]/g))at.has(r[1])&&e.add(r[1]);return[...e]}const fs={class:"rounded-lg border border-default bg-elevated/30 px-2.5 py-2"},ks={key:0,class:"flex items-center gap-2 text-xs text-gray-400"},xs={key:1,class:"flex flex-wrap items-center gap-1.5"},ms={class:"text-xs font-medium text-gray-500 inline-flex items-center gap-1"},bs=["title","onClick"],ys={key:0,class:"text-xs text-gray-400"},ws=ce({__name:"DiagnosisCoverageStrip",props:{sections:{},notApplicable:{},tokenEstimate:{},loading:{type:Boolean}},emits:["view-section","open"],setup(t,{emit:e}){const s=t,r=e,n=P(()=>s.sections.map(l=>({id:l.id,short:lt[l.id]??l.title??l.id,truncated:l.truncated}))),o=P(()=>Math.max(0,Se.length-s.sections.length)),i=P(()=>{const l=s.tokenEstimate;return l?l>=1e3?`${(l/1e3).toFixed(1)}k`:String(l):""});return(l,a)=>{const d=ke,h=De;return p(),f("div",fs,[t.loading&&!t.sections.length?(p(),f("div",ks,[S(d,{name:"i-lucide-loader-circle",class:"size-3.5 animate-spin"}),a[1]||(a[1]=A(" Building context… ",-1))])):(p(),f("div",xs,[x("span",ms,[S(d,{name:"i-lucide-layers",class:"size-3.5"}),a[2]||(a[2]=A(" Context ",-1)),S(h,{topic:"cluster.coverage"})]),(p(!0),f(j,null,Y(c(n),m=>(p(),f("button",{key:m.id,type:"button",class:"inline-flex items-center gap-1 rounded-full border border-default bg-default px-2 py-0.5 text-xs hover:border-primary/50 transition-colors",title:m.truncated?`${m.short} (truncated)`:m.short,onClick:b=>r("view-section",m.id)},[S(d,{name:m.truncated?"i-lucide-scissors":"i-lucide-check",class:J(["size-3",m.truncated?"text-warning":"text-success"])},null,8,["name","class"]),A(" "+w(m.short),1)],8,bs))),128)),c(n).length?$("",!0):(p(),f("span",ys,"No evidence sections yet")),x("button",{type:"button",class:"ml-auto text-xs text-gray-400 hover:text-primary transition-colors whitespace-nowrap",onClick:a[0]||(a[0]=m=>r("open"))},[c(o)?(p(),f(j,{key:0},[A(w(c(o))+" not included · ",1)],64)):$("",!0),c(i)?(p(),f(j,{key:1},[A("~"+w(c(i))+" tokens",1)],64)):$("",!0),S(d,{name:"i-lucide-arrow-right",class:"size-3 inline align-text-bottom"})])]))])}}}),Dr=Object.assign(ws,{__name:"DiagnosisCoverageStrip"}),vs={class:"flex items-center justify-between w-full"},$s={class:"flex items-center gap-2"},_s={class:"font-semibold inline-flex items-center gap-1"},Ss={class:"text-xs text-gray-400"},Rs={class:"flex items-center gap-1"},Cs={class:"rounded-lg border border-default bg-elevated/30 p-3 mb-4"},As={class:"flex items-center justify-between gap-2 mb-2"},Ts={class:"text-xs font-medium text-gray-500 uppercase tracking-wide inline-flex items-center gap-1"},zs={class:"text-xs text-gray-400"},Is={class:"flex flex-wrap gap-1.5"},Es=["title"],Ps={class:"text-xs text-gray-400 mt-2"},Ls={class:"space-y-4"},Bs={class:"text-xs font-medium text-gray-500 uppercase tracking-wide mb-2"},Ds={class:"space-y-2"},qs=["data-section-id"],Fs={key:0,class:"text-center text-gray-400 py-8 text-sm"},Ms=ce({__name:"DiagnosisContextModal",props:{open:{type:Boolean},sections:{},tokenEstimate:{},imageTokenEstimate:{},loading:{type:Boolean},focusSection:{},citedSections:{},notApplicableSections:{}},emits:["update:open","refresh"],setup(t,{emit:e}){const s=t,r=P(()=>{const v=new Map;for(const y of s.sections)v.has(y.id)||v.set(y.id,y);return v}),n=P(()=>new Set(Object.keys(s.notApplicableSections??{}))),o=P(()=>new Set(s.citedSections??[])),i=P(()=>Se.map(v=>{if(n.value.has(v.id))return{id:v.id,short:v.short,label:v.label,state:"notApplicable",cited:o.value.has(v.id)};const y=r.value.get(v.id),L=y?y.truncated?"truncated":"present":"absent";return{id:v.id,short:v.short,label:v.label,state:L,cited:o.value.has(v.id)}})),l=P(()=>{const v={present:0,truncated:0,absent:0,notApplicable:0};for(const y of i.value)v[y.state]++;return v}),a={present:"bg-emerald-500",truncated:"bg-amber-500",absent:"bg-gray-300 dark:bg-gray-600",notApplicable:"bg-purple-400"};function d(v){if(v.state==="notApplicable"){const y=s.notApplicableSections?.[v.id];return`${v.label}: not applicable${y?` — ${y}`:""}`}return`${v.label}: ${v.state}${v.cited?" · cited by the diagnosis":""}`}const h=e,{copy:m,copied:b}=Be(),z=P(()=>{const v=[],y=["clusterSummary","sampleError","representativeExecution","executionError","runContext"],L=["testAnnotations","testSource","steps","failingSteps","console","networkRequests","serverLogs","serverTraces","webVitals","ariaSnapshot"],ee=["recurrenceFlakiness","baselineComparison","retryProgression","passedPeers","browserDistribution","affectedTests"],re=["scmInvestigation","selectedCommits"],te=["priorDiagnosis","tracePointers","artifacts"],q=(E,F)=>{const le=s.sections.filter(Ae=>E.includes(Ae.id));le.length>0&&v.push({label:F,items:le})};return q(y,"Primary"),q(L,"Test Evidence"),q(ee,"Analysis"),q(re,"SCM"),q(te,"Other"),v}),_=ne(null);ye(()=>[s.open,s.focusSection],async([v,y])=>{if(!v||!y)return;await zt();const L=document.querySelector(`[data-section-id="${y}"]`);L&&(L.scrollIntoView({behavior:"smooth",block:"start"}),_.value=y,setTimeout(()=>{_.value===y&&(_.value=null)},2500))});function H(v){let y=`## ${v.title}`;const L=[];return L.push(`${v.chars} chars`),v.truncated&&L.push("truncated"),v.items!=null&&L.push(`${v.items} items`),L.length&&(y+=` — ${L.join(", ")}`),y}return(v,y)=>{const L=De,ee=_e,re=ke,te=ot,q=qt;return p(),N(q,{open:t.open,title:"Context sent to AI",ui:{content:"max-w-5xl"},"onUpdate:open":y[2]||(y[2]=E=>h("update:open",E))},{header:Q(()=>[x("div",vs,[x("div",$s,[x("span",_s,[y[3]||(y[3]=A(" Context sent to AI ",-1)),S(L,{topic:"cluster.context-preview"})]),x("span",Ss,[A(" ~"+w(t.tokenEstimate)+" tokens",1),t.imageTokenEstimate?(p(),f(j,{key:0},[A(" ("+w(t.tokenEstimate-t.imageTokenEstimate)+" text + "+w(t.imageTokenEstimate)+" image)",1)],64)):$("",!0)])]),x("div",Rs,[S(ee,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"ghost",loading:t.loading,onClick:y[0]||(y[0]=E=>h("refresh"))},null,8,["loading"]),S(ee,{icon:"i-lucide-x",size:"xs",color:"neutral",variant:"ghost",onClick:y[1]||(y[1]=E=>h("update:open",!1))})])])]),body:Q(()=>[y[7]||(y[7]=x("p",{class:"text-xs text-gray-500 dark:text-gray-400 mb-3"},"Copy individual sections or the full context below.",-1)),x("div",Cs,[x("div",As,[x("p",Ts,[y[4]||(y[4]=A(" Data coverage ",-1)),S(L,{topic:"cluster.coverage"})]),x("p",zs,w(c(l).present)+" present · "+w(c(l).truncated)+" truncated · "+w(c(l).absent)+" absent"+w(c(l).notApplicable?` · ${c(l).notApplicable} n/a`:""),1)]),x("div",Is,[(p(!0),f(j,null,Y(c(i),E=>(p(),f("span",{key:E.id,class:J(["inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-xs",[E.cited?"border-primary text-primary":"border-default",E.state==="absent"?"text-gray-400 opacity-70":"",E.state==="notApplicable"?"text-purple-500 border-purple-300 dark:border-purple-700":""]]),title:d(E)},[x("span",{class:J(["size-1.5 rounded-full shrink-0",a[E.state]])},null,2),A(" "+w(E.short)+" ",1),E.cited?(p(),N(re,{key:0,name:"i-lucide-quote",class:"size-2.5 shrink-0"})):$("",!0)],10,Es))),128))]),x("p",Ps,[y[5]||(y[5]=A(" Absent or truncated evidence lowers the diagnosis confidence. ",-1)),S(re,{name:"i-lucide-quote",class:"size-2.5 inline"}),y[6]||(y[6]=A(" marks sections the diagnosis cited. ",-1))])]),x("div",Ls,[(p(!0),f(j,null,Y(c(z),E=>(p(),f("div",{key:E.label},[x("p",Bs,w(E.label),1),x("div",Ds,[(p(!0),f(j,null,Y(E.items,F=>(p(),f("div",{key:F.id,"data-section-id":F.id,class:J(["relative rounded-lg transition-shadow",c(_)===F.id?"ring-2 ring-primary":c(o).has(F.id)?"ring-1 ring-primary/40":""])},[S(te,{text:H(F)+`
|